@estjs/template 0.0.10-beta.22 → 0.0.10

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/LICENSE CHANGED
@@ -1,20 +1,20 @@
1
- MIT License
2
-
3
- Copyright (c) 2023-Present jiangxd <jiangxd2016@gmail.com>
4
- Permission is hereby granted, free of charge, to any person obtaining a copy
5
- of this software and associated documentation files (the "Software"), to deal
6
- in the Software without restriction, including without limitation the rights
7
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the Software is
9
- furnished to do so, subject to the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be included in all
12
- copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2023-Present jiangxd <jiangxd2016@gmail.com>
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var shared = require('@estjs/shared');
4
+ var signal = require('@estjs/signal');
5
+
6
+ /**
7
+ * @estjs/template v0.0.10
8
+ * (c) 2023-Present jiangxd <jiangxd2016@gmail.com>
9
+ * @license MIT
10
+ **/
11
+ var N=class N{constructor(e,n){this.template=e;this.props=n;this.proxyProps={};this.context={};this.emitter=new Set;this.mounted=!1;this.rootNode=null;this.hooks={mounted:new Set,destroy:new Set};this.trackMap=new Map;this.proxyProps=signal.signalObject(n,o=>shared.startsWith(o,"on")||shared.startsWith(o,"update"));}addEventListener(){}removeEventListener(){}get firstChild(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.firstChild)!=null?n:null}get isConnected(){var e,n;return (n=(e=this.rootNode)==null?void 0:e.isConnected)!=null?n:!1}addHook(e,n){var o;(o=this.hooks[e])==null||o.add(n);}getContext(e){return N.context[e]}setContext(e,n){N.context[e]=n;}inheritNode(e){this.context=e.context,this.hooks=e.hooks,Object.assign(this.proxyProps,e.proxyProps),this.rootNode=e.rootNode,this.trackMap=e.trackMap;let n=this.props;this.props=e.props,this.patchProps(n);}mount(e,n){var r,i,c,s;if(!shared.isFunction(this.template))throw new Error("Template must be a function");if(this.isConnected)return (i=(r=this.rootNode)==null?void 0:r.mount(e,n))!=null?i:[];N.ref=this,this.rootNode=this.template(signal.useReactive(this.proxyProps,["children"])),N.ref=null,this.mounted=!0;let o=(s=(c=this.rootNode)==null?void 0:c.mount(e,n))!=null?s:[];return this.hooks.mounted.forEach(a=>a()),this.patchProps(this.props),o}unmount(){var e;this.hooks.destroy.forEach(n=>n()),Object.values(this.hooks).forEach(n=>n.clear()),(e=this.rootNode)==null||e.unmount(),this.rootNode=null,this.proxyProps={},this.mounted=!1,this.emitter.forEach(n=>n());}getNodeTrack(e,n){let o=this.trackMap.get(e);return o||(o={cleanup:()=>{}},this.trackMap.set(e,o)),n||o.cleanup(),o}patchProps(e){var n,o,r,i,c;for(let[s,a]of Object.entries(e))if(shared.startsWith(s,"on")&&((n=this.rootNode)!=null&&n.nodes)){let d=s.slice(2).toLowerCase(),l=a,u=m(this.rootNode.nodes[0],d,l);this.emitter.add(u);}else if(s==="ref")signal.isSignal(a)?e[s].value=(o=this.rootNode)==null?void 0:o.nodes[0]:shared.isFunction(a)&&e[s]((r=this.rootNode)==null?void 0:r.nodes[0]);else if(shared.startsWith(s,"update"))e[s]=signal.isSignal(a)?a.value:a;else if(s!=="children"){let d=(c=(i=this.proxyProps)[s])!=null?c:i[s]=signal.useSignal(a),l=this.getNodeTrack(s);l.cleanup=signal.useEffect(()=>{d.value=shared.isFunction(a)?a():a;});}this.props=e;}};N.ref=null,N.context={};var f=N;function re(t,e){return shared.isString(t)&&(I(t)&&(t=O(t),e={1:e}),t===""&&(e={0:e}),t=J(t)),shared.isFunction(t)?new f(t,e):new E(t,e)}function h(t){return t instanceof f||t instanceof E}function J(t){t=F(t);let e=document.createElement("template");return e.innerHTML=t,e}function ie(t){return t.children}var B="area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr",ce="a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rb,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp";function S(t){if(h(t)||t instanceof Node)return t;let e=shared.isFalsy(t)?"":String(t);return document.createTextNode(e)}function g(t,e,n=null){let o=h(n)?n.firstChild:n;h(e)?e.mount(t,o):o?o.before(e):t.append(e);}function T(t){h(t)?t.unmount():t.parentNode&&t.remove();}function w(t,e,n){g(t,e,n),T(n);}function A(t,e,n){if(e==="class"){typeof n=="string"?t.className=n:Array.isArray(n)?t.className=n.join(" "):n&&typeof n=="object"&&(t.className=Object.entries(n).reduce((o,[r,i])=>o+(i?` ${r}`:""),"").trim());return}if(e==="style"){if(typeof n=="string")t.style.cssText=n;else if(n&&typeof n=="object"){let o=n;Object.keys(o).forEach(r=>{t.style.setProperty(shared.kebabCase(r),String(o[r]));});}return}shared.isFalsy(n)?t.removeAttribute(e):n===!0?t.setAttribute(e,""):t instanceof HTMLInputElement?t.value=String(n):t.setAttribute(e,String(n));}function D(t,e){if(t instanceof HTMLInputElement)switch(t.type){case"checkbox":return m(t,"change",()=>{e(!!t.checked);});case"date":return m(t,"change",()=>{e(t.value?t.value:"");});case"file":return m(t,"change",()=>{t.files&&e(t.files);});case"number":return m(t,"input",()=>{let n=Number.parseFloat(t.value);e(Number.isNaN(n)?"":String(n));});case"radio":return m(t,"change",()=>{e(t.checked?t.value:"");});case"text":return m(t,"input",()=>{e(t.value);})}if(t instanceof HTMLSelectElement)return m(t,"change",()=>{e(t.value);});if(t instanceof HTMLTextAreaElement)return m(t,"input",()=>{e(t.value);})}var X=Promise.resolve();function ae(t){return t?X.then(t):X}function m(t,e,n){return t.addEventListener(e,n),()=>t.removeEventListener(e,n)}function F(t){let e=B.split(","),n=[],o=[],r=/<\/?([\da-z-]+)([^>]*)>/gi,i=0;for(;;){let c=r.exec(t);if(!c)break;let[s,a]=c,d=s[1]==="/";if(o.push(t.slice(i,c.index)),i=c.index+s.length,d){for(;n.length>0&&n[n.length-1]!==a;){let l=n.pop();l&&o.push(`</${l}>`);}n.length>0&&n.pop();}else e.includes(a)||n.push(a);o.push(s);}for(o.push(t.slice(i));n.length>0;){let c=n.pop();c&&o.push(`</${c}>`);}return o.join("")}function I(t){return ce.split(",").includes(t)}function O(t){return B.split(",").includes(t)?`<${t}/>`:`<${t}></${t}>`}function q(t,e,n,o){let r=new Map,i=Array.from(e.values()),c=i.length;if(e.size>0&&n.length===0){if(t.childNodes.length===c+(o?1:0))t.innerHTML="",o&&g(t,o);else {let l=document.createRange(),u=i[0],p=h(u)?u.firstChild:u;l.setStartBefore(p),o?l.setEndBefore(o):l.setEndAfter(t),l.deleteContents();}return i.forEach(l=>{h(l)&&l.unmount();}),r}let s=[],a=de(n),d=0;for(let[l,u]of n.entries()){let p=i[d],x=v(p,l);for(;p&&!a.has(x);)T(p),e.delete(x),p=i[++d],x=v(p,l);let K=v(u,l),M=e.get(K);if(M&&(u=le(t,M,u)),p)if(p===M)d++;else {let P=document.createComment("");g(t,P,p),s.push([P,u]);}else g(t,u,o);r.set(K,u);}return s.forEach(([l,u])=>w(t,u,l)),e.forEach((l,u)=>{l.isConnected&&!r.has(u)&&T(l);}),r}function le(t,e,n){return e===n?e:h(e)&&h(n)&&e.template===n.template?(n.inheritNode(e),n):e instanceof Text&&n instanceof Text?(e.textContent!==n.textContent&&(e.textContent=n.textContent),e):(w(t,n,e),n)}function de(t){let e=new Map;for(let[n,o]of t.entries()){let r=v(o,n);e.set(r,o);}return e}function v(t,e){let n=t instanceof Element?t.id:void 0,o=n===""?void 0:n;return o!=null?o:`_$${e}$`}var E=class t{constructor(e,n){this.template=e;this.props=n;this.treeMap=new Map;this.mounted=!1;this.nodes=[];this.provides={};this.trackMap=new Map;this.parent=null;}get firstChild(){var e;return (e=this.nodes[0])!=null?e:null}get isConnected(){return this.mounted}addEventListener(){}removeEventListener(){}unmount(){this.trackMap.forEach(e=>{var n,o;(n=e.cleanup)==null||n.call(e),(o=e.lastNodes)==null||o.forEach(r=>{e.isRoot?T(r):r instanceof t&&r.unmount();});}),this.trackMap.clear(),this.treeMap.clear(),this.nodes.forEach(e=>T(e)),this.nodes=[],this.mounted=!1;}mount(e,n){var i;if(this.parent=e,this.isConnected)return this.nodes.forEach(c=>g(e,c,n)),this.nodes;let o=this.template.content.cloneNode(!0),r=o.firstChild;return (i=r==null?void 0:r.hasAttribute)!=null&&i.call(r,"_svg_")&&(r.remove(),r==null||r.childNodes.forEach(c=>{o.append(c);})),this.nodes=Array.from(o.childNodes),this.mapNodeTree(e,o),g(e,o,n),this.patchNodes(this.props),this.mounted=!0,this.nodes}mapNodeTree(e,n){let o=1;this.treeMap.set(0,e);let r=i=>{i.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&this.treeMap.set(o++,i);let c=i.firstChild;for(;c;)r(c),c=c.nextSibling;};r(n);}patchNodes(e){for(let n in e){let o=Number(n),r=this.treeMap.get(o);if(r){let i=this.props[n];this.patchNode(n,r,i,o===0);}}this.props=e;}getNodeTrack(e,n,o){var i;let r=this.trackMap.get(e);return r||(r={cleanup:()=>{}},n&&(r.lastNodes=new Map),o&&(r.isRoot=!0),this.trackMap.set(e,r)),(i=r.cleanup)==null||i.call(r),r}inheritNode(e){this.mounted=e.mounted,this.nodes=e.nodes,this.trackMap=e.trackMap,this.treeMap=e.treeMap;let n=this.props;this.props=e.props,this.patchNodes(n);}patchNode(e,n,o,r){for(let i in o)if(i==="children"&&o.children)if(shared.isArray(o.children))o.children.filter(Boolean).forEach((c,s)=>{var x;let[a,d]=shared.isArray(c)?c:[c,null],l=shared.isNil(d)?null:(x=this.treeMap.get(d))!=null?x:null,u=`${e}:${i}:${s}`,p=this.getNodeTrack(u,!0,r);Q(p,n,a,l);});else {let c=`${e}:${i}:0`,s=this.getNodeTrack(c,!0,r);Q(s,n,o.children,null);}else if(i==="ref")signal.isSignal(o[i])?o[i].value=n:shared.isFunction(o[i])&&o[i](n);else if(shared.startsWith(i,"on")){let c=i.slice(2).toLocaleLowerCase(),s=this.getNodeTrack(`${e}:${i}`),a=o[i];s.cleanup=m(n,c,a);}else if(!shared.startsWith(i,"update")){let c=this.getNodeTrack(`${e}:${i}`),s=o[i],a=signal.isSignal(s)?s:signal.useSignal(s);U(c,n,i,a.value);let d=signal.useEffect(()=>{a.value=signal.isSignal(s)?s.value:s,U(c,n,i,a.value);}),l,u=`update${shared.capitalizeFirstLetter(i)}`;o[u]&&(l=D(n,p=>{o[u](p);})),c.cleanup=()=>{d&&d(),l&&l();};}}};function U(t,e,n,o){let r=e;r.setAttribute&&(shared.isFunction(o)?t.cleanup=signal.useEffect(()=>{A(r,n,o());}):A(r,n,o));}function Q(t,e,n,o){shared.isFunction(n)?t.cleanup=signal.useEffect(()=>{let r=shared.coerceArray(n()).map(S);t.lastNodes=q(e,t.lastNodes,r,o);}):shared.coerceArray(n).forEach((r,i)=>{let c=S(r);t.lastNodes.set(String(i),c),g(e,c,o);});}function me(t){var e;k("onMounted"),(e=f.ref)==null||e.addHook("mounted",t);}function he(t){var e;k("onDestroy"),(e=f.ref)==null||e.addHook("destroy",t);}function k(t){f.ref||console.error(`"${t}" can only be called within the component function body
12
+ and cannot be used in asynchronous or deferred calls.`);}function ge(t,e){var n;k("useProvide"),(n=f.ref)==null||n.setContext(t,e);}function Ne(t,e){var n;return k("useInject"),((n=f.ref)==null?void 0:n.getContext(t))||e}function xe(t){return Object.entries(t).map(([e,n])=>`${e}=${JSON.stringify(escape(String(n)))}`).join(" ")}function C(t,e){if(shared.isFunction(t))return t(e);let n=Array.isArray(t)?t.reduce((i,c,s)=>(i[s+1]={template:c},i),{}):t,o={},r={};if(shared.isObject(n))for(let[i,c]of Object.entries(n)){let s=e[i];if(s){for(let a in s)shared.startsWith(a,"on")&&shared.isFunction(s[a])&&delete s[a];if(s.children){for(let[a,d]of s.children)o[d]||(o[d]=[]),o[d].push(a);delete s.children;}}r[i]={template:c.template,props:s};}return Object.entries(r).map(([i,{template:c,props:s}])=>{let a=c;return s&&(a+=` ${xe(s)}`),o[i]&&(a+=o[i].map(d=>C(d,s)).join("")),a}).join("")}function Ee(t,e){return C(t,e)}function be(t,e,n={}){e.innerHTML=C(t,n);}
13
+
14
+ exports.ComponentNode = f;
15
+ exports.Fragment = ie;
16
+ exports.TemplateNode = E;
17
+ exports.h = re;
18
+ exports.isJsxElement = h;
19
+ exports.nextTick = ae;
20
+ exports.onDestroy = he;
21
+ exports.onMount = me;
22
+ exports.renderSSG = be;
23
+ exports.renderTemplate = C;
24
+ exports.renderToString = Ee;
25
+ exports.template = J;
26
+ exports.useInject = Ne;
27
+ exports.useProvide = ge;
28
+ //# sourceMappingURL=template.cjs.js.map
29
+ //# sourceMappingURL=template.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/component-node.ts","../src/template.ts","../src/utils.ts","../src/patch.ts","../src/template-node.ts","../src/hooks.ts","../src/server.ts"],"names":["_ComponentNode","template","props","signalObject","key","startsWith","_a","_b","hook","cb","context","value","node","parent","before","_c","_d","isFunction","useReactive","mountedNode","handler","set","emitter","trackKey","suppressCleanupCall","track","_e","prop","event","listener","cleanup","addEventListener","isSignal","newValue","useSignal","useEffect","ComponentNode","h","_template","isString","isHtmlTagName","convertToHtmlTag","TemplateNode","isJsxElement","html","closeHtmlTags","Fragment","selfClosingTags","htmlTags","coerceNode","data","text","isFalsy","insertChild","child","beforeNode","removeChild","replaceChild","setAttribute","element","attr","acc","obj","kebabCase","binNode","setter","p","nextTick","fn","eventName","input","selfClosingTagList","tagStack","output","tagPattern","lastIndex","match","fullMatch","tagName","isEndTag","unclosedTag","patchChildren","childrenMap","nextChildren","result","children","childrenLength","range","start","replaces","nextChildrenMap","mapKeys","childIndex","i","currChild","currKey","getKey","origChild","patch","placeholder","next","index","id","_TemplateNode","cloneNode","firstChild","tree","walk","trackLastNodes","isRoot","isArray","item","path","isNil","patchChild","val","triggerValue","patchAttribute","cleanupBind","updateKey","capitalizeFirstLetter","nextNodes","coerceArray","newNode","onMount","throwIfOutsideComponent","onDestroy","useProvide","useInject","defaultValue","convertJsonToAttributes","json","renderTemplate","templateCollection","tmpl","childNodesMap","processedTemplates","isObject","propKey","idx","renderedString","renderToString","component","renderSSG","root"],"mappings":"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","file":"template.cjs.js","sourcesContent":["import { isFunction, startsWith } from '@estjs/shared';\nimport { isSignal, signalObject } from '@estjs/signal';\nimport { type Signal, useEffect, useReactive, useSignal } from '@estjs/signal';\nimport { addEventListener } from './utils';\nimport type { EssorComponent, NodeTrack } from '../types';\nimport type { TemplateNode } from './template-node';\nimport type { Listener } from './utils';\nexport type Hook = 'mounted' | 'destroy';\n\nexport class ComponentNode implements JSX.Element {\n constructor(\n public template: EssorComponent,\n public props: Record<string, any>,\n ) {\n this.proxyProps = signalObject(\n props,\n key => startsWith(key, 'on') || startsWith(key, 'update'),\n );\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n static ref: ComponentNode | null = null;\n static context: Record<symbol, Signal<any>> = {};\n id?: string;\n private proxyProps: Record<string, Signal<any>> = {};\n context: Record<symbol | string | number, any> = {};\n emitter = new Set<Function>();\n mounted = false;\n rootNode: TemplateNode | null = null;\n hooks: Record<Hook, Set<() => void>> = {\n mounted: new Set(),\n destroy: new Set(),\n };\n private trackMap = new Map<string, NodeTrack>();\n get firstChild(): Node | null {\n return this.rootNode?.firstChild ?? null;\n }\n\n get isConnected(): boolean {\n return this.rootNode?.isConnected ?? false;\n }\n\n addHook(hook: Hook, cb: () => void): void {\n this.hooks[hook]?.add(cb);\n }\n\n getContext<T>(context: symbol | string | number): T | undefined {\n return ComponentNode.context[context];\n }\n\n setContext<T>(context: symbol | string | number, value: T): void {\n ComponentNode.context[context] = value;\n }\n\n inheritNode(node: ComponentNode): void {\n this.context = node.context;\n this.hooks = node.hooks;\n\n Object.assign(this.proxyProps, node.proxyProps);\n this.rootNode = node.rootNode;\n this.trackMap = node.trackMap;\n\n // patch props\n const props = this.props;\n this.props = node.props;\n\n this.patchProps(props);\n }\n\n mount(parent: Node, before?: Node | null): Node[] {\n if (!isFunction(this.template)) {\n throw new Error('Template must be a function');\n }\n if (this.isConnected) {\n return this.rootNode?.mount(parent, before) ?? [];\n }\n\n ComponentNode.ref = this;\n this.rootNode = this.template(useReactive(this.proxyProps, ['children']));\n ComponentNode.ref = null;\n this.mounted = true;\n const mountedNode = this.rootNode?.mount(parent, before) ?? [];\n this.hooks.mounted.forEach(handler => handler());\n this.patchProps(this.props);\n\n return mountedNode;\n }\n\n unmount(): void {\n this.hooks.destroy.forEach(handler => handler());\n Object.values(this.hooks).forEach(set => set.clear());\n this.rootNode?.unmount();\n this.rootNode = null;\n this.proxyProps = {};\n this.mounted = false;\n this.emitter.forEach(emitter => emitter());\n }\n\n private getNodeTrack(trackKey: string, suppressCleanupCall?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n this.trackMap.set(trackKey, track);\n }\n if (!suppressCleanupCall) {\n track.cleanup();\n }\n return track;\n }\n\n patchProps(props: Record<string, any>) {\n for (const [key, prop] of Object.entries(props)) {\n if (startsWith(key, 'on') && this.rootNode?.nodes) {\n const event = key.slice(2).toLowerCase();\n const listener = prop as Listener<unknown>;\n const cleanup = addEventListener(this.rootNode.nodes[0], event, listener);\n this.emitter.add(cleanup);\n } else if (key === 'ref') {\n if (isSignal(prop)) {\n (props[key] as any).value = this.rootNode?.nodes[0];\n } else if (isFunction(prop)) {\n (props[key] as Function)(this.rootNode?.nodes[0]);\n }\n } else if (startsWith(key, 'update')) {\n props[key] = isSignal(prop) ? prop.value : prop;\n } else if (key !== 'children') {\n const newValue = (this.proxyProps[key] ??= useSignal(prop));\n const track = this.getNodeTrack(key);\n track.cleanup = useEffect(() => {\n newValue.value = isFunction(prop) ? prop() : prop;\n });\n }\n }\n this.props = props;\n }\n}\n","import { isFunction, isString } from '@estjs/shared';\nimport { ComponentNode } from './component-node';\nimport { TemplateNode } from './template-node';\nimport { closeHtmlTags, convertToHtmlTag, isHtmlTagName } from './utils';\nimport type { EssorComponent, EssorNode } from '../types';\n\nexport function h<K extends keyof HTMLElementTagNameMap>(\n _template: EssorComponent | HTMLTemplateElement | K | '',\n props: Record<string, any>,\n): JSX.Element {\n if (isString(_template)) {\n if (isHtmlTagName(_template)) {\n (_template as string) = convertToHtmlTag(_template as string);\n props = {\n 1: props,\n };\n }\n if (_template === '') {\n props = {\n 0: props,\n };\n }\n\n _template = template(_template as string);\n }\n\n return isFunction(_template)\n ? new ComponentNode(_template, props)\n : new TemplateNode(_template as HTMLTemplateElement, props);\n}\n\nexport function isComponentOf(node: unknown, component: EssorComponent) {\n return node instanceof ComponentNode && node.template === component;\n}\n\nexport function isJsxElement(node: unknown): node is EssorNode {\n return node instanceof ComponentNode || node instanceof TemplateNode;\n}\n\nexport function template(html: string): HTMLTemplateElement {\n html = closeHtmlTags(html);\n const template = document.createElement('template');\n template.innerHTML = html;\n return template;\n}\nexport function Fragment(props: { children: JSX.Element }) {\n return props.children;\n}\n","import { isFalsy, kebabCase } from '@estjs/shared';\nimport { isJsxElement } from './template';\n\nconst selfClosingTags = 'area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr';\nconst htmlTags =\n 'a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rb,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp';\n\n/**\n * Converts any data to a Node or JSX.Element type.\n * @param data - The data to be coerced into a Node or JSX.Element.\n * @returns A Node or JSX.Element.\n */\nexport function coerceNode(data: unknown) {\n if (isJsxElement(data) || data instanceof Node) {\n return data;\n }\n const text = isFalsy(data) ? '' : String(data);\n return document.createTextNode(text);\n}\n\n/**\n * Inserts a child Node or JSX.Element into a parent Node at a specified position.\n * @param parent - The parent Node where the child will be inserted.\n * @param child - The child Node or JSX.Element to insert.\n * @param before - The Node or JSX.Element before which the new child will be inserted.\n */\nexport function insertChild(\n parent: Node,\n child: Node | JSX.Element,\n before: Node | JSX.Element | null = null,\n): void {\n const beforeNode = isJsxElement(before) ? before.firstChild : before;\n if (isJsxElement(child)) {\n child.mount(parent, beforeNode);\n } else if (beforeNode) {\n (beforeNode as HTMLElement).before(child);\n } else {\n (parent as HTMLElement).append(child);\n }\n}\n\n/**\n * Removes a child Node or JSX.Element from its parent.\n * @param child - The child Node or JSX.Element to remove.\n */\nexport function removeChild(child: Node | JSX.Element): void {\n if (isJsxElement(child)) {\n child.unmount();\n } else {\n const parent = child.parentNode;\n if (parent) {\n (child as HTMLElement).remove();\n }\n }\n}\n\n/**\n * Replaces an existing child Node or JSX.Element with a new one in a parent Node.\n * @param parent - The parent Node where the replacement will occur.\n * @param node - The new Node or JSX.Element to insert.\n * @param child - The existing Node or JSX.Element to be replaced.\n */\nexport function replaceChild(\n parent: Node,\n node: Node | JSX.Element,\n child: Node | JSX.Element,\n): void {\n insertChild(parent, node, child);\n removeChild(child);\n}\n\n/**\n * Sets an attribute on an HTMLElement, handling special cases for 'class' and 'style'.\n * @param element - The HTMLElement on which to set the attribute.\n * @param attr - The attribute name.\n * @param value - The attribute value.\n */\nexport function setAttribute(element: HTMLElement, attr: string, value: unknown): void {\n if (attr === 'class') {\n if (typeof value === 'string') {\n element.className = value;\n } else if (Array.isArray(value)) {\n element.className = value.join(' ');\n } else if (value && typeof value === 'object') {\n element.className = Object.entries(value)\n .reduce((acc, [key, value]) => acc + (value ? ` ${key}` : ''), '')\n .trim();\n }\n return;\n }\n\n if (attr === 'style') {\n if (typeof value === 'string') {\n element.style.cssText = value;\n } else if (value && typeof value === 'object') {\n const obj = value as Record<string, unknown>;\n\n Object.keys(obj).forEach(key => {\n element.style.setProperty(kebabCase(key), String(obj[key]));\n });\n }\n return;\n }\n\n if (isFalsy(value)) {\n element.removeAttribute(attr);\n } else if (value === true) {\n element.setAttribute(attr, '');\n } else {\n if (element instanceof HTMLInputElement) {\n element.value = String(value);\n } else {\n element.setAttribute(attr, String(value));\n }\n }\n}\n\n/**\n * Binds an event listener to an input element to update a state setter based on the input type.\n * @param node - The input HTML element to bind the event listener to.\n * @param setter - The function to call when the input value changes.\n */\nexport function binNode(node: Node, setter: (value: any) => void) {\n if (node instanceof HTMLInputElement) {\n switch (node.type) {\n case 'checkbox':\n return addEventListener(node, 'change', () => {\n setter(Boolean(node.checked));\n });\n case 'date':\n return addEventListener(node, 'change', () => {\n setter(node.value ? node.value : '');\n });\n case 'file':\n return addEventListener(node, 'change', () => {\n if (node.files) {\n setter(node.files);\n }\n });\n case 'number':\n return addEventListener(node, 'input', () => {\n const value = Number.parseFloat(node.value);\n setter(Number.isNaN(value) ? '' : String(value));\n });\n case 'radio':\n return addEventListener(node, 'change', () => {\n setter(node.checked ? node.value : '');\n });\n case 'text':\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n }\n\n if (node instanceof HTMLSelectElement) {\n return addEventListener(node, 'change', () => {\n setter(node.value);\n });\n }\n\n if (node instanceof HTMLTextAreaElement) {\n return addEventListener(node, 'input', () => {\n setter(node.value);\n });\n }\n}\n\n/**\n * Defers the execution of a function until the next tick of the event loop.\n * @param fn - The function to be executed on the next tick.\n * @returns A Promise that resolves after the next tick.\n */\nconst p = Promise.resolve();\nexport function nextTick(fn?: () => void): Promise<void> {\n return fn ? p.then(fn) : p;\n}\n\nexport type Listener<T> = (value: T) => void;\n\nexport interface EventTarget {\n addEventListener(type: string, listener: Listener<unknown>): void;\n removeEventListener(type: string, listener: Listener<unknown>): void;\n}\n\n/**\n * Adds an event listener to a DOM node and returns a function to remove it.\n * @param node - The target node to add the event listener to.\n * @param eventName - The name of the event.\n * @param handler - The event handler function.\n * @returns A function to remove the event listener.\n */\nexport function addEventListener(\n node: EventTarget,\n eventName: string,\n handler: Listener<any>,\n): () => void {\n node.addEventListener(eventName, handler);\n return () => node.removeEventListener(eventName, handler);\n}\n\n/**\n * Closes unclosed HTML tags in a given input string.\n * @param input - The input HTML string to process.\n * @returns The HTML string with unclosed tags properly closed.\n */\nexport function closeHtmlTags(input: string): string {\n const selfClosingTagList = selfClosingTags.split(',');\n const tagStack: string[] = [];\n const output: string[] = [];\n const tagPattern = /<\\/?([\\da-z-]+)([^>]*)>/gi;\n let lastIndex = 0;\n\n while (true) {\n const match = tagPattern.exec(input);\n if (!match) break;\n\n const [fullMatch, tagName] = match;\n const isEndTag = fullMatch[1] === '/';\n\n // Push text content between tags\n output.push(input.slice(lastIndex, match.index));\n lastIndex = match.index + fullMatch.length;\n\n if (isEndTag) {\n // Handle end tag\n while (tagStack.length > 0 && tagStack[tagStack.length - 1] !== tagName) {\n const unclosedTag = tagStack.pop();\n if (unclosedTag) {\n output.push(`</${unclosedTag}>`);\n }\n }\n if (tagStack.length > 0) {\n tagStack.pop(); // pop the matching start tag\n }\n } else if (!selfClosingTagList.includes(tagName)) {\n // Handle start tag\n tagStack.push(tagName);\n }\n output.push(fullMatch); // Push the current tag\n }\n\n // Add any remaining unclosed tags\n output.push(input.slice(lastIndex));\n while (tagStack.length > 0) {\n const unclosedTag = tagStack.pop();\n if (unclosedTag) {\n output.push(`</${unclosedTag}>`);\n }\n }\n\n return output.join('');\n}\n\n/**\n * Checks if a given tag name is a valid HTML tag.\n * @param tagName - The tag name to check.\n * @returns A boolean indicating if the tag name is valid.\n */\nexport function isHtmlTagName(tagName: string): boolean {\n const htmlTagsList = htmlTags.split(',');\n return htmlTagsList.includes(tagName);\n}\n\n/**\n * Converts a string to a valid HTML tag name.\n * @param tagName - The input string to convert.\n * @returns The valid HTML tag name.\n */\nexport function convertToHtmlTag(tagName: string): string {\n const selfClosingTagList = selfClosingTags.split(',');\n if (selfClosingTagList.includes(tagName)) {\n return `<${tagName}/>`;\n } else {\n return `<${tagName}></${tagName}>`;\n }\n}\n","import { insertChild, removeChild, replaceChild } from './utils';\nimport { isJsxElement } from './template';\n\ntype AnyNode = Node | JSX.Element;\n\nexport function patchChildren(\n parent: Node,\n childrenMap: Map<string, AnyNode>,\n nextChildren: AnyNode[],\n before: Node | null,\n): Map<string, AnyNode> {\n const result = new Map<string, AnyNode>();\n const children = Array.from(childrenMap.values());\n const childrenLength = children.length;\n\n if (childrenMap.size > 0 && nextChildren.length === 0) {\n if (parent.childNodes.length === childrenLength + (before ? 1 : 0)) {\n (parent as Element).innerHTML = '';\n if (before) {\n insertChild(parent, before);\n }\n } else {\n const range = document.createRange();\n const child = children[0];\n const start = isJsxElement(child) ? child.firstChild : child;\n range.setStartBefore(start!);\n if (before) {\n range.setEndBefore(before);\n } else {\n range.setEndAfter(parent);\n }\n range.deleteContents();\n }\n children.forEach(node => {\n if (isJsxElement(node)) {\n node.unmount();\n }\n });\n return result;\n }\n\n const replaces: [Comment, AnyNode][] = [];\n const nextChildrenMap = mapKeys(nextChildren);\n let childIndex = 0;\n\n for (let [i, child] of nextChildren.entries()) {\n let currChild = children[childIndex];\n let currKey = getKey(currChild, i);\n\n while (currChild && !nextChildrenMap.has(currKey)) {\n removeChild(currChild);\n childrenMap.delete(currKey);\n currChild = children[++childIndex];\n currKey = getKey(currChild, i);\n }\n\n const key = getKey(child, i);\n const origChild = childrenMap.get(key);\n\n if (origChild) {\n child = patch(parent, origChild, child);\n }\n\n if (currChild) {\n if (currChild === origChild) {\n childIndex++;\n } else {\n const placeholder = document.createComment('');\n insertChild(parent, placeholder, currChild);\n replaces.push([placeholder, child]);\n }\n } else {\n insertChild(parent, child, before);\n }\n\n result.set(key, child);\n }\n\n replaces.forEach(([placeholder, child]) => replaceChild(parent, child, placeholder));\n\n childrenMap.forEach((child, key) => {\n if (child.isConnected && !result.has(key)) {\n removeChild(child);\n }\n });\n\n return result;\n}\n\nfunction patch(parent: Node, node: AnyNode, next: AnyNode): AnyNode {\n if (node === next) {\n return node;\n }\n if (isJsxElement(node) && isJsxElement(next) && node.template === next.template) {\n next.inheritNode(node);\n return next;\n }\n if (node instanceof Text && next instanceof Text) {\n if (node.textContent !== next.textContent) {\n node.textContent = next.textContent;\n }\n return node;\n }\n replaceChild(parent, next, node);\n return next;\n}\n\nexport function mapKeys(children: AnyNode[]): Map<string, AnyNode> {\n const result = new Map();\n for (const [i, child] of children.entries()) {\n const key = getKey(child, i);\n result.set(key, child);\n }\n return result;\n}\n\nexport function getKey(node, index): string {\n const id = node instanceof Element ? node.id : undefined;\n const result = id === '' ? undefined : id;\n return result ?? `_$${index}$`;\n}\n","import {\n capitalizeFirstLetter,\n coerceArray,\n isArray,\n isFunction,\n isNil,\n startsWith,\n} from '@estjs/shared';\nimport { isSignal, useEffect, useSignal } from '@estjs/signal';\nimport {\n addEventListener,\n binNode,\n coerceNode,\n insertChild,\n removeChild,\n setAttribute,\n} from './utils';\nimport { patchChildren } from './patch';\nimport type { NodeTrack } from '../types';\n\nexport class TemplateNode implements JSX.Element {\n treeMap = new Map<number, Node>();\n constructor(\n public template: HTMLTemplateElement,\n public props: Record<string, unknown>,\n ) {}\n\n mounted = false;\n nodes: Node[] = [];\n provides: Record<string, unknown> = {};\n trackMap = new Map<string, NodeTrack>();\n\n get firstChild(): Node | null {\n return this.nodes[0] ?? null;\n }\n\n get isConnected(): boolean {\n return this.mounted;\n }\n addEventListener(): void {}\n removeEventListener(): void {}\n\n unmount(): void {\n this.trackMap.forEach(track => {\n track.cleanup?.();\n track.lastNodes?.forEach(node => {\n if (track.isRoot) {\n removeChild(node);\n } else if (node instanceof TemplateNode) {\n node.unmount();\n }\n });\n });\n this.trackMap.clear();\n this.treeMap.clear();\n this.nodes.forEach(node => removeChild(node));\n this.nodes = [];\n this.mounted = false;\n }\n\n parent: Node | null = null;\n mount(parent: Node, before?: Node | null): Node[] {\n this.parent = parent;\n if (this.isConnected) {\n this.nodes.forEach(node => insertChild(parent, node, before));\n return this.nodes;\n }\n\n const cloneNode = this.template.content.cloneNode(true);\n const firstChild = cloneNode.firstChild as HTMLElement | null;\n\n if (firstChild?.hasAttribute?.('_svg_')) {\n firstChild.remove();\n firstChild?.childNodes.forEach(node => {\n (cloneNode as Element).append(node);\n });\n }\n\n this.nodes = Array.from(cloneNode.childNodes);\n this.mapNodeTree(parent, cloneNode);\n\n insertChild(parent, cloneNode, before);\n\n this.patchNodes(this.props);\n this.mounted = true;\n return this.nodes;\n }\n\n mapNodeTree(parent: Node, tree: Node) {\n let index = 1;\n this.treeMap.set(0, parent);\n const walk = (node: Node) => {\n if (node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.treeMap.set(index++, node);\n }\n let child = node.firstChild;\n while (child) {\n walk(child);\n child = child.nextSibling;\n }\n };\n walk(tree);\n }\n\n patchNodes(props) {\n for (const key in props) {\n const index = Number(key);\n const node = this.treeMap.get(index);\n if (node) {\n const value = this.props[key];\n this.patchNode(key, node, value, index === 0);\n }\n }\n this.props = props;\n }\n\n getNodeTrack(trackKey: string, trackLastNodes?: boolean, isRoot?: boolean): NodeTrack {\n let track = this.trackMap.get(trackKey);\n if (!track) {\n track = { cleanup: () => {} };\n if (trackLastNodes) {\n track.lastNodes = new Map();\n }\n if (isRoot) {\n track.isRoot = true;\n }\n this.trackMap.set(trackKey, track);\n }\n track.cleanup?.();\n return track;\n }\n\n inheritNode(node: TemplateNode): void {\n this.mounted = node.mounted;\n this.nodes = node.nodes;\n this.trackMap = node.trackMap;\n this.treeMap = node.treeMap;\n\n const props = this.props;\n this.props = node.props;\n this.patchNodes(props);\n }\n\n patchNode(key, node, props, isRoot) {\n for (const attr in props) {\n if (attr === 'children' && props.children) {\n if (!isArray(props.children)) {\n const trackKey = `${key}:${attr}:${0}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, props.children, null);\n } else {\n props.children.filter(Boolean).forEach((item, index) => {\n const [child, path] = isArray(item) ? item : [item, null];\n const before = isNil(path) ? null : (this.treeMap.get(path) ?? null);\n const trackKey = `${key}:${attr}:${index}`;\n const track = this.getNodeTrack(trackKey, true, isRoot);\n patchChild(track, node, child, before);\n });\n }\n } else if (attr === 'ref') {\n if (isSignal(props[attr])) {\n props[attr].value = node;\n } else if (isFunction(props[attr])) {\n (props[attr] as Function)(node);\n }\n }\n // handle events\n else if (startsWith(attr, 'on')) {\n const eventName = attr.slice(2).toLocaleLowerCase();\n const track = this.getNodeTrack(`${key}:${attr}`);\n const listener = props[attr];\n track.cleanup = addEventListener(node, eventName, listener);\n // attr\n } else if (!startsWith(attr, 'update')) {\n const track = this.getNodeTrack(`${key}:${attr}`);\n\n const val = props[attr];\n\n const triggerValue = isSignal(val) ? val : useSignal(val);\n patchAttribute(track, node, attr, triggerValue.value);\n const cleanup = useEffect(() => {\n triggerValue.value = isSignal(val) ? val.value : val;\n patchAttribute(track, node, attr, triggerValue.value);\n });\n\n let cleanupBind;\n const updateKey = `update${capitalizeFirstLetter(attr)}`;\n if (props[updateKey]) {\n cleanupBind = binNode(node, value => {\n props[updateKey](value);\n });\n }\n\n track.cleanup = () => {\n cleanup && cleanup();\n cleanupBind && cleanupBind();\n };\n }\n }\n }\n}\n\nfunction patchAttribute(track: NodeTrack, node: Node, attr: string, data: unknown): void {\n const element = node as HTMLElement;\n if (!element.setAttribute) {\n return;\n }\n if (isFunction(data)) {\n track.cleanup = useEffect(() => {\n setAttribute(element, attr, data());\n });\n } else {\n setAttribute(element, attr, data);\n }\n}\n\nfunction patchChild(track: NodeTrack, parent: Node, child: unknown, before: Node | null): void {\n if (isFunction(child)) {\n track.cleanup = useEffect(() => {\n const nextNodes = coerceArray((child as Function)()).map(coerceNode);\n track.lastNodes = patchChildren(parent, track.lastNodes!, nextNodes, before);\n });\n } else {\n coerceArray(child).forEach((node, i) => {\n const newNode = coerceNode(node);\n track.lastNodes!.set(String(i), newNode);\n insertChild(parent, newNode, before);\n });\n }\n}\n","import { ComponentNode } from './component-node';\n\nexport function onMount(cb: () => void): void {\n throwIfOutsideComponent('onMounted');\n ComponentNode.ref?.addHook('mounted', cb);\n}\n\nexport function onDestroy(cb: () => void): void {\n throwIfOutsideComponent('onDestroy');\n ComponentNode.ref?.addHook('destroy', cb);\n}\n\nfunction throwIfOutsideComponent(hook: string) {\n if (!ComponentNode.ref) {\n console.error(\n `\"${hook}\" can only be called within the component function body\n and cannot be used in asynchronous or deferred calls.`,\n );\n }\n}\n\nexport function getCurrentComponent(): ComponentNode | null {\n return ComponentNode.ref;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types, unused-imports/no-unused-vars\nexport interface InjectionKey<T> extends Symbol {}\n\nexport function useProvide<T, K = InjectionKey<T> | string | number>(\n key: K,\n value: K extends InjectionKey<infer V> ? V : T,\n) {\n throwIfOutsideComponent('useProvide');\n\n ComponentNode.ref?.setContext(key as string, value);\n}\nexport function useInject<T, K = InjectionKey<T> | string | number>(\n key: K,\n defaultValue?: K extends InjectionKey<infer V> ? V : T,\n): (K extends InjectionKey<infer V> ? V : T) | undefined {\n throwIfOutsideComponent('useInject');\n return ComponentNode.ref?.getContext(key as string) || defaultValue;\n}\n\n// export function useProps(props) {\n// const propsValue = props;\n// const propsAction = () => {};\n// const propsRef = () => {};\n// const propsChild = () => {};\n// }\n","import { isFunction, isObject, startsWith } from '@estjs/shared';\nimport type { EssorNode } from '../types';\n\ninterface TemplateEntry {\n template: string;\n props?: Record<string, any>;\n}\n\ninterface TemplateCollection {\n [key: number]: TemplateEntry;\n}\n\ntype Props = Record<string, any>;\n\n/**\n * Converts a JSON object to a string of HTML attributes.\n * @param json - The JSON object to be converted.\n * @returns A string representing the HTML attributes.\n */\nfunction convertJsonToAttributes(json: Record<string, any>): string {\n return Object.entries(json)\n .map(([key, value]) => `${key}=${JSON.stringify(escape(String(value)))}`)\n .join(' ');\n}\n\n/**\n * Renders a template to a string based on provided props.\n * Handles both function-based and object-based templates.\n * @param template - The template to render, which can be an array, an object, or a function.\n * @param props - The properties used for rendering the template.\n * @returns The rendered template as a string.\n */\nexport function renderTemplate(template: string[] | EssorNode | Function, props: Props): string {\n // If the template is a function, invoke it with props and return the result\n if (isFunction(template)) {\n return template(props);\n }\n\n // Convert array-based templates to TemplateCollection format\n const templateCollection: TemplateCollection = Array.isArray(template)\n ? template.reduce((acc, tmpl, index) => {\n acc[index + 1] = { template: tmpl };\n return acc;\n }, {})\n : template;\n\n const childNodesMap: Record<string, EssorNode[]> = {};\n const processedTemplates: TemplateCollection = {};\n\n if (isObject(templateCollection)) {\n for (const [key, tmpl] of Object.entries(templateCollection)) {\n const prop = props[key];\n if (prop) {\n // Remove event listeners (props starting with 'on') from the properties\n for (const propKey in prop) {\n if (startsWith(propKey, 'on') && isFunction(prop[propKey])) {\n delete prop[propKey];\n }\n }\n\n // Handle child elements if present\n if (prop.children) {\n for (const [child, idx] of prop.children) {\n if (!childNodesMap[idx]) childNodesMap[idx] = [];\n childNodesMap[idx].push(child);\n }\n delete prop.children;\n }\n }\n\n // Store the processed template and associated props\n processedTemplates[key] = { template: tmpl.template, props: prop };\n }\n }\n\n // Render the final template as a string\n return Object.entries(processedTemplates)\n .map(([key, { template: tmpl, props: prop }]) => {\n let renderedString = tmpl;\n if (prop) {\n renderedString += ` ${convertJsonToAttributes(prop)}`;\n }\n if (childNodesMap[key]) {\n renderedString += childNodesMap[key].map(child => renderTemplate(child, prop)).join('');\n }\n\n return renderedString;\n })\n .join('');\n}\n\n/**\n * Renders a component to a string using the given properties.\n * @param component - The component function to be rendered.\n * @param props - The properties to be passed to the component.\n * @returns The rendered component as a string.\n */\nexport function renderToString(component: (...args: any[]) => string, props: Props): string {\n return renderTemplate(component, props);\n}\n\n/**\n * Renders a component to a string and sets it as the innerHTML of the specified root element.\n * @param component - The component function to be rendered.\n * @param root - The root element in which to render the component.\n * @param props - The properties to be passed to the component.\n */\nexport function renderSSG(component, root: HTMLElement, props: Props = {}): void {\n root.innerHTML = renderTemplate(component, props);\n}\n"]}