compomint
Version:
A lightweight JavaScript component engine for building web applications with a focus on component-based architecture and template system.
3 lines (2 loc) • 28.6 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Compomint={})}(this,(function(e){"use strict";const t=function(e){if(e.firstElementChild)return e.firstElementChild;const t=e.childNodes;for(let e=0,n=t.length;e<n;e++)if(t[e]instanceof Element)return t[e];return null},n=function(e){return e.childElementCount||Array.prototype.filter.call(e.childNodes,(function(e){return e instanceof Element})).length},r=function(e){for(let t=0;t<e.childNodes.length;t++){const n=e.childNodes[t];8===n.nodeType||3===n.nodeType&&!/\S/.test(n.nodeValue||"")?(e.removeChild(n),t--):1===n.nodeType&&r(n)}},o=new DOMParser,a=function(e){if("number"==typeof e||!isNaN(Number(e)))return document.createTextNode(String(e));if("string"!=typeof e)return document.createTextNode("");try{const t=o.parseFromString(e,"text/html").body;if(1===t.childNodes.length)return t.firstChild;{const e=document.createDocumentFragment();for(;t.firstChild;)e.appendChild(t.firstChild);return e}}catch(t){return document.createTextNode(e)}};"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,...t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");const n=Object(e);for(let e=0,r=t.length;e<r;e++){const r=t[e];if(null!=r)for(let e in r)Object.prototype.hasOwnProperty.call(r,e)&&(n[e]=r[e])}return n},writable:!0,configurable:!0}),[Element.prototype,CharacterData.prototype,DocumentType.prototype].forEach((function(e){e&&!e.hasOwnProperty("remove")&&Object.defineProperty(e,"remove",{configurable:!0,enumerable:!0,writable:!0,value:function(){null!==this.parentNode&&this.parentNode.removeChild(this)}})})),"isConnected"in window.Node.prototype||Object.defineProperty(window.Node.prototype,"isConnected",{get:function(){return document.body.contains(this)}});const c={},l={},i=c.tools=c.tools||{},s=c.configs=Object.assign({printExecTime:!1,debug:!1,throwError:!0},c.configs),p=c.tmplCache=c.tmplCache||new Map;p.has("anonymous")||p.set("anonymous",{elements:new Set});const d="content"in document.createElement("template"),f=/(.)^/,u={"'":"\\'","\\":"\\\\","\r":"\\r","\n":"\\n","\t":"\\t","\u2028":"\u2028","\u2029":"\u2029","><":"><","<":"<",">":">"},m=/\>( |\n)+\<|\>( |\n)+|( |\n)+\<|\\|'|\r|\n|\t|\u2028|\u2029/g;c.templateEngine=((e,r)=>({rules:{style:{pattern:/(\<style id=[\s\S]+?\>[\s\S]+?\<\/style\>)/g,exec:function(e){var t;const n=document.createElement("template");n.innerHTML=e;const r=(n.content||n).querySelector("style");if(!r||!r.id)return"";const o=document.getElementById(r.id);return o&&(null===(t=o.parentNode)||void 0===t||t.removeChild(o)),document.head.appendChild(r),""}},commentArea:{pattern:/##\*([\s\S]+?)##/g,exec:function(e){return""}},preEvaluate:{pattern:/##!([\s\S]+?)##/g,exec:function(t,n){try{new Function("compomint","tmplId",t)(r,n)}catch(t){if(e.throwError)throw console.error(`Template preEvaluate error in "${n}", ${t.name}: ${t.message}`),t;console.warn(`Template preEvaluate error in "${n}", ${t.name}: ${t.message}`)}return""}},interpolate:{pattern:/##=([\s\S]+?)##/g,exec:function(e){return`';\n{let __t, interpolate=${e};\n__p+=((__t=(typeof (interpolate)=='function' ? (interpolate)() : (interpolate)))==null ? '' : String(__t) );};\n__p+='`}},escape:{pattern:/##-([\s\S]+?)##/g,exec:function(e){return`';\n{let __t, escape=${e};\n__p+=((__t=(compomint.tools.escapeHtml.escape(typeof (escape)=='function' ? (escape)() : (escape))))==null ? '' : String(__t) );};\n__p+='`}},elementProps:{pattern:/data-co-props="##:([\s\S]+?)##"/g,exec:function(e){return`';\n{const eventId = (__lazyScope.elementPropsArray.length);\n__p+='data-co-props="'+eventId+'"';\n\n__lazyScope.elementPropsArray[eventId] = ${e}};\n__p+='`},lazyExec:function(e,t,n,r){t.elementPropsArray.forEach((function(e,t){if(!e)return;const n=r.querySelector(`[data-co-props="${t}"]`);n&&(delete n.dataset.coProps,Object.keys(e).forEach((function(t){n.setAttribute(t,String(e[t]))})))}))}},namedElement:{pattern:/data-co-named-element="##:([\s\S]+?)##"/g,exec:function(e){return`';\nconst eventId = (__lazyScope.namedElementArray.length);\n__p+='data-co-named-element="'+eventId+'"';\n\n__lazyScope.namedElementArray[eventId] = ${e};\n__p+='`},lazyExec:function(t,n,r,o){n.namedElementArray.forEach((function(t,n){const a=o.querySelector(`[data-co-named-element="${n}"]`);a?(delete a.dataset.coNamedElement,r[t]=a):e.debug&&console.warn(`Named element target not found for ID ${n} in template ${r.tmplId}`)}))}},elementRef:{pattern:/data-co-element-ref="##:([\s\S]+?)##"/g,exec:function(e){return`';\n{const eventId = (__lazyScope.elementRefArray.length);\n__p+='data-co-element-ref="'+eventId+'"';\nvar ${e} = null;\n__lazyScope.elementRefArray[eventId] = function(target) {${e} = target;}};\n__p+='`},lazyExec:function(t,n,r,o){n.elementRefArray.forEach((function(t,n){const a=o.querySelector(`[data-co-element-ref="${n}"]`);a?(delete a.dataset.coElementRef,t.call(a,a)):e.debug&&console.warn(`Element ref target not found for ID ${n} in template ${r.tmplId}`)}))}},elementLoad:{pattern:/data-co-load="##:([\s\S]+?)##"/g,exec:function(e){const t=e.split("::");return`';\n{const eventId = (__lazyScope.elementLoadArray.length);\n__p+='data-co-load="'+eventId+'"';\n__lazyScope.elementLoadArray[eventId] = {loadFunc: ${t[0]}, customData: ${t[1]}};}\n__p+='`},lazyExec:function(t,n,o,a){n.elementLoadArray.forEach((function(n,c){const l=a.querySelector(`[data-co-load="${c}"]`);if(l){delete l.dataset.coLoad;try{if("function"==typeof n.loadFunc){const e=[l,l,{data:t,element:l,customData:n.customData,component:o,compomint:r}];n.loadFunc.call(...e)}}catch(t){if(console.error(`Error executing elementLoad function for ID ${c} in template ${o.tmplId}:`,t,n.loadFunc),e.throwError)throw t}}else e.debug&&console.warn(`Element load target not found for ID ${c} in template ${o.tmplId}`)}))}},event:{pattern:/data-co-event="##:([\s\S]+?)##"/g,exec:function(e){const t=e.split(":::");let n="';\n{const eventId = (__lazyScope.eventArray.length);\n__p+='data-co-event=\"'+eventId+'\"';\n";const r=[];for(let e=0,n=t.length;e<n;e++){const n=t[e].split("::");r.push(`{eventFunc: ${n[0]}, $parent: this, customData: ${n[1]}}`)}return n+=`__lazyScope.eventArray[eventId] = [${r.join(",")}];}\n__p+='`,n},lazyExec:function(t,n,r,o){const a=this,c=a.attacher;c&&n.eventArray.forEach((function(l,i){const s=o.querySelector(`[data-co-event="${i}"]`);if(s){delete s.dataset.coEvent;for(let e=0,i=l.length;e<i;e++){const i=l[e];i.eventFunc&&(Array.isArray(i.eventFunc)?i.eventFunc.forEach((function(e){c(a,t,n,r,o,s,e,i)})):c(a,t,n,r,o,s,i.eventFunc,i))}}else e.debug&&console.warn(`Event target not found for ID ${i} in template ${r.tmplId}`)}))},trigger:function(e,t){const n=new Event(t,{bubbles:!0,cancelable:!0});e.dispatchEvent(n)},attacher:function(o,a,c,l,i,s,p,d){const f=o.trigger,u=t(i),m=1===n(i)?u:null;if(!p)return;const y=[s,null,{data:a,customData:d.customData,element:s,componentElement:m||(null==u?void 0:u.parentElement),component:l,compomint:r}];if("function"==typeof p){const t=function(t){t.stopPropagation(),y[1]=t;try{p.call(...y)}catch(t){if(console.error(`Error in event handler for template ${l.tmplId}:`,t,p),e.throwError)throw t}};return s.addEventListener("click",t),d.element=s,void(d.eventFunc=t)}if(h=p,"[object Object]"!==Object.prototype.toString.call(h))return;var h;const g=p,E=g.triggerName;E&&(l.trigger=l.trigger||{},l.trigger[E]={}),Object.keys(g).forEach((function(t){const n=g[t];if("load"===t){y[1]=s;try{n.call(...y)}catch(t){if(console.error(`Error in 'load' event handler for template ${l.tmplId}:`,t,n),e.throwError)throw t}return}if("namedElement"===t)return void(l[n]=s);if("triggerName"===t)return;const r=function(r){r.stopPropagation(),y[1]=r;try{n.call(...y)}catch(r){if(console.error(`Error in '${t}' event handler for template ${l.tmplId}:`,r,n),e.throwError)throw r}};s.addEventListener(t,r),d.element=s,p[t]=r,E&&f&&(l.trigger[E][t]=function(){f(s,t)})}))}},element:{pattern:/##%([\s\S]+?)##/g,exec:function(e){const t=e.split("::");return`';\n{\nconst elementId = (__lazyScope.elementArray.length);\n__p+='<template data-co-tmpl-element-id="'+elementId+'"></template>';\n__lazyScope.elementArray[elementId] = {childTarget: ${t[0]}, nonblocking: ${t[1]||!1}};};\n__p+='`},lazyExec:function(t,n,r,o){n.elementArray.forEach((function(t,n){const c=t.childTarget,l=t.nonblocking,i=o.querySelector(`template[data-co-tmpl-element-id="${n}"]`);if(!i)return void(e.debug&&console.warn(`Element insertion placeholder not found for ID ${n} in template ${r.tmplId}`));if(!i.parentNode)return void(e.debug&&console.warn(`Element insertion placeholder for ID ${n} in template ${r.tmplId} has no parent.`));const s=function(){if(i&&i.parentNode)try{if(c instanceof Array){const t=document.createDocumentFragment();c.forEach((function(o){if(!o)return;const c=o.element||o;let l=null;if("string"==typeof c||"number"==typeof c)l=a(c);else if("function"==typeof c)l=a(c());else{if(!(c instanceof Node))return void(e.debug&&console.warn(`Invalid item type in element array for ID ${n}, template ${r.tmplId}:`,c));l=c}if(o.beforeAppendTo)try{o.beforeAppendTo()}catch(e){console.error("Error in beforeAppendTo (array item):",e)}l&&t.appendChild(l)})),i.parentNode.replaceChild(t,i),c.forEach((function(e){e&&e.afterAppendTo&&setTimeout((()=>{try{e.afterAppendTo()}catch(e){console.error("Error in afterAppendTo (array item):",e)}}),0)}))}else if("string"==typeof c||"number"==typeof c)i.parentNode.replaceChild(a(c),i);else if("function"==typeof c)i.parentNode.replaceChild(a(c()),i);else if(c&&(c.element||c)instanceof Node){const e=c,t=e.element||e;if(e.beforeAppendTo)try{e.beforeAppendTo()}catch(e){console.error("Error in beforeAppendTo:",e)}i.parentNode.replaceChild(t,i),e.afterAppendTo&&setTimeout((()=>{try{e.afterAppendTo&&e.afterAppendTo()}catch(e){console.error("Error in afterAppendTo:",e)}}),0),e.tmplId&&(e.parentComponent=r)}else e.debug&&console.warn(`Invalid target for element insertion ID ${n}, template ${r.tmplId}:`,c),i.parentNode.removeChild(i)}catch(t){if(console.error(`Error during element insertion for ID ${n}, template ${r.tmplId}:`,t),e.throwError)throw t;if(i&&i.parentNode)try{i.parentNode.removeChild(i)}catch(e){}}else e.debug&&console.warn(`Placeholder for ID ${n} removed before insertion in template ${r.tmplId}.`)};void 0===l||!1===l?s():setTimeout(s,"number"==typeof l?l:0)}))}},lazyEvaluate:{pattern:/###([\s\S]+?)##/g,exec:function(e){return`';\n__lazyScope.lazyEvaluateArray.push(function(data) {${e}});\n__p+='`},lazyExec:function(r,o,a,c){const l=t(c),i=1===n(c)?l:null;o.lazyEvaluateArray.forEach((function(t,n){try{t.call(i||c,r)}catch(r){if(console.error(`Error in lazyEvaluate block ${n} for template ${a.tmplId}:`,r,t),e.throwError)throw r}}))}},evaluate:{pattern:/##([\s\S]+?)##/g,exec:e=>"';\n"+e+"\n__p+='"},escapeSyntax:{pattern:/#\\#([\s\S]+?)#\\#/g,exec:function(e){return`'+\n'##${e}##'+\n'`}}},keys:{dataKeyName:"data",statusKeyName:"status",componentKeyName:"component",i18nKeyName:"i18n"}}))(s,c);const y=function(){const e={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},t=Object.keys(e).reduce(((t,n)=>(t[e[n]]=n,t)),{}),n=function(e){const t=function(t){return e[t]},n=`(?:${Object.keys(e).join("|").replace(/\\/g,"\\\\")})`,r=RegExp(n),o=RegExp(n,"g");return function(e){return e=null==e?"":`${e}`,r.test(e)?e.replace(o,t):e}};return{escape:n(e),unescape:n(t)}}();i.escapeHtml=y;const h=function(e){const t=[],n=[],r={},o={};return Object.keys(e).forEach((function(a){const c=e[a];if(c&&"object"==typeof c&&c.pattern instanceof RegExp&&"function"==typeof c.exec&&(t.push((c.pattern||f).source),n.push(c.exec)),c&&"object"==typeof c&&"function"==typeof c.lazyExec){const e=`${a}Array`;r[e]=c.lazyExec,o[e]=[]}})),{templateRules:e,pattern:new RegExp(t.join("|"),"g"),exec:n,lazyExecKeys:Object.keys(o),lazyExec:r,lazyScopeSeed:JSON.stringify(o)}},g=function(e){return u[e]||u[e.replace(/[ \n]/g,"")]||""},E=h(c.templateEngine.rules),b=c.template=function(e,o,a){let d=c.templateEngine,f=E;a&&(d={rules:Object.assign({},d.rules,a.rules||{}),keys:Object.assign({},d.keys,a.keys||{})},f=h(d.rules));const u=`\n/* tmplId: ${e} */\n//# sourceURL=http://tmpl//${e.split("-").join("//")}.js\n// if (__debugger) {\n// debugger;\n// }\nlet __p='';\n__p+='${function(e,t,n){s.printExecTime&&console.time(`tmpl: ${e}`);let r=0,o="";return t.replace(n.pattern,(function(...a){const c=a[0],l=a[a.length-2];let i;o+=t.slice(r,l).replace(m,g);let p=null;if(a.slice(1,-2).some((function(e,t){return void 0!==e&&(i=e,p=t,!0)})),void 0!==i&&null!==p)try{o+=n.exec[p].call(n.templateRules,i,e)}catch(t){if(console.error(`Error executing template rule index ${p} for match "${i}" in template "${e}":`,t),s.throwError)throw t;o+=""}else o+=c.replace(m,g);return r=l+c.length,c})),o+=t.slice(r).replace(m,g),s.printExecTime&&console.timeEnd(`tmpl: ${e}`),o}(e,o,f)}';\nreturn __p;`;let b=null;try{b=new Function(d.keys.dataKeyName,d.keys.statusKeyName,d.keys.componentKeyName,d.keys.i18nKeyName,"compomint","tmpl","__lazyScope","__debugger",u)}catch(t){if(s.throwError){console.error(`Template compilation error in "${e}", ${t.name}: ${t.message}`);try{new Function(d.keys.dataKeyName,d.keys.statusKeyName,d.keys.componentKeyName,d.keys.i18nKeyName,"compomint","tmpl","__lazyScope","__debugger",u)}catch(e){}throw t}return()=>({})}const v=function(...o){let a,p,u,m;const y=o[0];y&&"object"==typeof y&&(y.$wrapperElement||y.$callback||y.$baseComponent)?(a=Object.assign({},y),p=a.$wrapperElement,delete a.$wrapperElement,u=a.$callback,delete a.$callback,m=a.$baseComponent,delete a.$baseComponent):(a=y,"function"==typeof o[1]?(p=void 0,u=o[1],m=o[2]):(p=o[1],u=o[2],m=o[3]));const h=d.keys.dataKeyName,g=d.keys.statusKeyName,E=JSON.parse(f.lazyScopeSeed),v=Object.assign(m||{},{tmplId:e,element:null,status:m&&m.status||{},replace:function(t){const n=this;n.element&&n.element instanceof Node&&n.element.parentElement?n.element.parentElement.replaceChild(t.element||t,n.element):s.debug&&console.warn(`Cannot replace template "${e}": element not in DOM.`)},remove:function(t=!1){const n=this;if(n.beforeRemove)try{n.beforeRemove()}catch(e){console.error("Error in beforeRemove:",e)}E.eventArray&&E.eventArray.forEach((function(e){e.forEach((function(e){e.element&&("function"==typeof e.eventFunc?e.element.removeEventListener("click",e.eventFunc):Object.keys(e.eventFunc).forEach((function(t){e.element.removeEventListener(t,e.eventFunc[t])})),Object.keys(e).forEach((t=>delete e[t])))}))}));const r=n.element instanceof Node?n.element.parentElement:null,o=n.element;if(r)if(t){const e=document.createElement("template");r.replaceChild(e,n.element),n.element=e}else r.removeChild(n.element);else s.debug&&console.warn(`Cannot remove template "${e}": element not in DOM.`);if(n.afterRemove)try{n.afterRemove()}catch(e){console.error("Error in afterRemove:",e)}return o},appendTo:function(t){const n=this;if(n.beforeAppendTo)try{n.beforeAppendTo()}catch(e){console.error("Error in beforeAppendTo:",e)}return t&&n.element instanceof Node?t.appendChild(n.element):s.debug&&console.warn(`Cannot append template "${e}": parentElement or scope.element is missing or not a Node.`),n.afterAppendTo&&setTimeout((()=>{try{n.afterAppendTo()}catch(e){console.error("Error in afterAppendTo:",e)}}),0),n},release:function(){},render:function(e){return this},refresh:function(e){return this},reflash:function(e){return this}});v._id||(v._id=i.genId(e)),v[h]=a,null==v[g]&&(v[g]={});const $=p instanceof Element,T=document.createElement("template");s.printExecTime&&console.time(`render: ${e}`);let _=null,A=null;try{A=a?b.call(p||null,a,v[g],v,c.i18n[e],c,l,E,s.debug):`<template data-co-empty-template="${e}"></template>`}catch(t){if(s.throwError){console.error(`Runtime error during render of "${e}":`,t.message),console.log("--- Data ---",a,"------------");try{b.call(p||null,a,v[g],v,c.i18n[e],E,!0)}catch(e){}throw t}return console.warn(`Render failed for "${e}". Returning scope with comment node.`),v.element=document.createComment(`Render Error: ${e}`),v}s.printExecTime&&console.timeEnd(`render: ${e}`),T.innerHTML=A;let N=T.content||T;if("TEMPLATE"==N.tagName&&!T.content){const e=Array.from(N.childNodes);N=document.createDocumentFragment(),e.forEach((e=>N.appendChild(e)))}if($&&p){for(;p.firstChild;)p.removeChild(p.firstChild);v.wrapperElement=p}if((N.querySelector?N.querySelector("style"):null)&&N.querySelector){const t=document.createElement(e);try{const e=t.attachShadow({mode:"open"});for(;N.firstChild;)e.appendChild(N.firstChild);N=t}catch(t){console.error(`Failed to attach shadow DOM for template "${e}":`,t)}}if(N.firstChild&&8==N.firstChild.nodeType)_=N.firstChild;else if(1==n(N)){if(_=t(N),$&&p&&_){if(v.beforeAppendTo)try{v.beforeAppendTo()}catch(e){console.error("Error in beforeAppendTo:",e)}p.appendChild(_),v.afterAppendTo&&setTimeout((()=>{try{v.afterAppendTo()}catch(e){console.error("Error in afterAppendTo:",e)}}),0)}}else if($&&p){if(v.beforeAppendTo)try{v.beforeAppendTo()}catch(e){console.error("Error in beforeAppendTo:",e)}p.appendChild(N),v.afterAppendTo&&setTimeout((()=>{try{v.afterAppendTo()}catch(e){console.error("Error in afterAppendTo:",e)}}),0),_=p}else _=N;if(a&&a.$props&&_ instanceof Element)for(const t in a.$props)try{const e=a.$props[t];if(t.startsWith("data-")){const n=t.substring(5).replace(/-([a-z])/g,(e=>e[1].toUpperCase()));_.dataset[n]=String(e)}else t in _?_[t]=e:_.setAttribute(t,String(e))}catch(n){console.error(`Error applying prop "${t}" to element in template "${e}":`,n)}_ instanceof Node&&_.normalize&&_.normalize(),_ instanceof Node&&r(_),v.element=_;const w=f.lazyExec;if(a&&f.lazyExecKeys.forEach((function(t){if(E[t]&&E[t].length>0)try{w[t].call(d.rules[t.slice(0,-5)],a,E,v,N)}catch(n){if(s.throwError)throw console.error(`Error during lazy execution of "${t}" for template "${e}":`,n),n}})),i.liveReloadSupport)try{i.liveReloadSupport(v)}catch(e){console.error("Error in liveReloadSupport:",e)}if(u)try{u.call(p||null,v)}catch(t){if(console.error(`Error in template callback for "${e}":`,t),s.throwError)throw t}return v.release=function(){const e=this,t=Object.getOwnPropertyNames(e),n=[g,"_id"];for(let r=0;r<t.length;r++){const o=t[r];"function"==typeof e[o]||n.includes(o)||delete e[o]}},v.render=function(e){const t=this,n=t.element,r=n instanceof Node?n.parentElement:null,o=t.wrapperElement,a=c.tmpl(t.tmplId);if(!a)return console.error(`Cannot re-render: Template function for "${t.tmplId}" not found.`),t;const l={beforeAppendTo:t.beforeAppendTo,afterAppendTo:t.afterAppendTo,beforeRemove:t.beforeRemove,afterRemove:t.afterRemove,beforeRefresh:t.beforeRefresh,afterRefresh:t.afterRefresh};if(t.beforeRemove)try{t.beforeRemove()}catch(e){console.error("Error in beforeRemove during render:",e)}let i;if(o)i=a(e,o,void 0,t);else if(r&&n instanceof Node)if(i=a(e,void 0,void 0,t),i.element instanceof Node){if(i.beforeAppendTo)try{i.beforeAppendTo()}catch(e){console.error("Error in beforeAppendTo during render:",e)}r.replaceChild(i.element,n),i.afterAppendTo&&setTimeout((()=>{try{i.afterAppendTo()}catch(e){console.error("Error in afterAppendTo during render:",e)}}),0)}else s.debug&&console.warn(`Re-render of "${t.tmplId}" resulted in no element or target was missing.`);else i=a(e,void 0,void 0,t);if(t.afterRemove)try{t.afterRemove()}catch(e){console.error("Error in afterRemove during render:",e)}return Object.assign(i,l),i},v.refresh=function(e){const t=this,n=t[h];if(t.beforeRefresh)try{t.beforeRefresh()}catch(e){console.error("Error in beforeRefresh:",e)}const r=Object.assign({},n||{},e),o=t.render(r);if(t.afterRefresh)try{t.afterRefresh()}catch(e){console.error("Error in afterRefresh:",e)}return o},v.reflash=v.refresh,v};if(Object.defineProperty(v,"name",{value:`render_${e}`,writable:!1}),e){const t=s.debug?{renderingFunc:v,source:y.escape(`function ${e}_source (${d.keys.dataKeyName}, ${d.keys.statusKeyName}, ${d.keys.componentKeyName}, ${d.keys.i18nKeyName}, __lazyScope, __debugger) {\n${u}\n}`),templateText:y.escape(o)}:{renderingFunc:v};p.set(e,t);const n=e.split("-");if(n.length>1){const e=n[0];let r=l[e];r||(l[e]=r={});r[n.slice(1).map(((e,t)=>0===t?e:e.charAt(0).toUpperCase()+e.slice(1))).join("")]=t.renderingFunc}}return v};c.remapTmpl=function(e){Object.keys(e).forEach((function(t){const n=e[t],r=p.get(t);r?(p.set(n,r),s.debug&&console.log(`Remapped template "${t}" to "${n}"`)):s.debug&&console.warn(`Cannot remap template: Old key "${t}" not found in cache.`)}))},c.tmpl=function(e){const t=p.get(e);return t?t.renderingFunc:null};const v=function(e){let t;if(e instanceof Element)return e.tagName,e;if("string"!=typeof e&&(s.debug&&console.warn("safeTemplate received non-string/non-element source:",e),e=""),t=document.createElement("template"),d){const n=e.replace(/<(?!template|\/template|body|\/body|html|\/html|head|\/head|style|\/style|script|\/script|link|\/link|meta|\/meta|!--)/gi,"<");t.innerHTML=n}else{const n=e.replace(/<(?!template|\/template|body|\/body|html|\/html|head|\/head|style|\/style|script|\/script|link|\/link|meta|\/meta|!--)/gi,"<").replace(/<template/g,'<script type="template"').replace(/<\/template>/g,"<\/script>");t.innerHTML=n}return t},$=c.addTmpl=function(e,t,n){let r=t instanceof Element?t.innerHTML:String(t);return r=y.unescape(r.replace(/<!---|--->/gi,"")),b(e,r,n)},T=c.addTmpls=function(e,t,n){"boolean"!=typeof t&&null==n?(n=t,t=!1):t=!!t;const r=v(e);return(r.content||r).querySelectorAll('template[id], script[type="text/template"][id], script[type="text/compomint"][id]').forEach((e=>{const r=e.id;r&&(void 0!==e.dataset.coLoadScript?$(r,e,n)({}):$(r,e,n),t&&e.parentNode&&e.parentNode.removeChild(e))})),r};c.addTmplByUrl=function(e,t,n){n||"function"!=typeof t||(n=t,t={});const r={loadScript:!0,loadStyle:!0,loadLink:!0,templateEngine:void 0},o=Object.assign({},r,t),a=e=>{e.forEach((e=>{var t;if(e){if(e.id){const n=document.getElementById(e.id);n&&(null===(t=n.parentNode)||void 0===t||t.removeChild(n))}"SCRIPT"===e.tagName||"LINK"===e.tagName||"STYLE"===e.tagName?document.head.appendChild(e):document.body.appendChild(e)}}))},c=e=>new Promise(((t,n)=>{const r="string"==typeof(c=e)?{url:c,option:o}:c&&"object"==typeof c&&c.url?{url:c.url,option:Object.assign({},o,c.option)}:(console.error("Invalid import data format in addTmplByUrl:",c),null);var c;if(!r)return void t();const l=r.url,i=r.option;if(l.endsWith(".js")){const e=w("script",{async:!0,src:l});e.addEventListener("load",(()=>t())),e.addEventListener("error",(()=>{console.error(`Failed to load script: ${l}`),n(new Error(`Failed to load script: ${l}`))})),document.head.appendChild(e)}else if(l.endsWith(".css")){const e=w("link",{type:"text/css",rel:"stylesheet",href:l});e.addEventListener("load",(()=>t())),e.addEventListener("error",(()=>{console.error(`Failed to load stylesheet: ${l}`),n(new Error(`Failed to load stylesheet: ${l}`))})),document.head.appendChild(e)}else _(l,null,((e,r)=>{if(200===r||0===r)try{((e,t)=>{const n=v(e);T(n,!1,t.templateEngine);const r=n.content||n;if(t.loadLink){const e=r.querySelectorAll('link[rel="stylesheet"]');a(e)}if(t.loadStyle){const e=r.querySelectorAll("style[id]");a(e)}if(t.loadScript){const e=r.querySelectorAll('script:not([type]), script[type="text/javascript"], script[type="module"]'),t=Array.from(e).filter((e=>{let t=e.parentNode;for(;t;){if("TEMPLATE"===t.nodeName||"SCRIPT"===t.nodeName&&t.type.includes("template"))return!1;t=t.parentNode}return!0})).map((e=>{const t=document.createElement("script");return e.getAttributeNames().forEach((n=>t.setAttribute(n,e.getAttribute(n)))),e.innerHTML&&(t.textContent=e.innerHTML),t}));a(t)}})(e,i),t()}catch(e){console.error(`Error processing imported HTML from ${l}:`,e),n(new Error(`Error processing imported HTML from ${l}: ${e}`))}else console.error(`Failed to fetch template file: ${l} (Status: ${r})`),n(new Error(`Failed to fetch template file: ${l} (Status: ${r})`))}))}));if(null==e)return n?void n():Promise.resolve();const l=Array.isArray(e)?0===e.length?Promise.resolve():Promise.all(e.map(c)).then((()=>{})).catch((e=>{throw console.error("Error loading resources in addTmplByUrl:",e),e})):c(e).catch((e=>{throw console.error("Error loading resource in addTmplByUrl:",e),e}));return n?void l.then((()=>n())).catch((e=>{console.error("Error in addTmplByUrl callback mode:",e),n()})):l};const _=function(e,t,n){const r=new XMLHttpRequest;r.onreadystatechange=function(){r.readyState==XMLHttpRequest.DONE&&(200==r.status||0===r.status?n(r.responseText,r.status,r):(404==r.status?console.error(`Error 404: Not Found - ${e}`):r.status>=400?console.error(`HTTP Error ${r.status} for ${e}`):console.error(`Request failed for ${e}`,r.statusText),n(null,r.status,r)))},r.onerror=function(){console.error(`Network error requesting ${e}`),n(null,0,r)},r.ontimeout=function(){console.error(`Request timed out for ${e}`),n(null,408,r)};try{const n=t&&t.method||"GET";if(r.open(n,e,!0),t){t.timeout&&(r.timeout=t.timeout);const e=t.headers;e&&Object.keys(e).forEach((t=>{r.setRequestHeader(t,e[t])})),r.send(t.body||null)}else r.send()}catch(t){console.error(`Error sending request to ${e}:`,t),n(null,0,r)}};c.i18n={},c.addI18n=function(e,t){if(!e||"string"!=typeof e||!t||"object"!=typeof t)return void console.error("Invalid arguments for addI18n:",e,t);const n=e.split(".");let r=c.i18n;const o=n.length-1;n.forEach((function(n,a){if(n)if(o===a){Object.keys(t).some((e=>Array.isArray(t[e])))?(r[n]||(r[n]=[]),Object.keys(t).filter((e=>Array.isArray(t[e]))).forEach((o=>{t[o].forEach(((t,o)=>{r[n][o]||(r[n][o]={}),t instanceof Object&&!Array.isArray(t)&&Object.keys(t).forEach((n=>{c.addI18n(e+"."+o+"."+n,t[n])}))}))}))):(r[n]||(r[n]=function(n){const r=document.documentElement.lang||"en";let o=t[r];return null==o&&(o=n,s.debug&&console.warn(`i18n: Label key ["${e}"] for lang "${r}" is missing. Using default: "${n}"`)),null!=o?String(o):""}),Object.keys(t).filter((e=>t[e]instanceof Object&&!Array.isArray(t[e]))).forEach((n=>{c.addI18n(e+"."+n,t[n])})))}else r[n]&&"function"!=typeof r[n]||(r[n]={}),r=r[n]}))},c.addI18ns=function(e){const t=new Map;function n(e){if(t.has(e))return t.get(e);const n=e.split(".");let r=c.i18n;for(let e=0;e<n.length-1;e++)r[n[e]]||(r[n[e]]={}),r=r[n[e]];return t.set(e,r),r}function r(e){for(const t in e){const n=typeof e[t];if("string"!==n&&"number"!==n&&"boolean"!==n)return!1}return!0}!function e(t,o=""){for(const a in t){const l=t[a],i=o?o+"."+a:a;if(Array.isArray(l)){const e=n(i),t=i.split(".").pop();e[t]||(e[t]=[]);for(let n=0;n<l.length;n++){const r=l[n];if(e[t][n]||(e[t][n]={}),r&&"object"==typeof r)for(const e in r){const t=r[e];if(t&&"object"==typeof t){const r=i+"."+n+"."+e;c.addI18n(r,t)}}}}else l&&"object"==typeof l?r(l)?c.addI18n(i,l):e(l,i):c.addI18n(i,l)}}(e)};let A=0;i.genId=function(e){return A++,e+A};const N=i.applyElementProps=function(e,t){return Object.keys(t).forEach((function(n){const r=t[n],o="class"===n?"className":n;try{"style"===n&&"object"==typeof r&&null!==r?Object.assign(e.style,r):"dataset"===n&&"object"==typeof r&&null!==r?Object.assign(e.dataset,r):n.startsWith("on")&&"function"==typeof r?e[n.toLowerCase()]=r:o in e?e[o]=r:e.setAttribute(n,String(r))}catch(t){console.error(`Error setting attribute/property "${n}" on <${e.tagName}>:`,t)}})),e},w=i.genElement=function(e,t={},...n){const r=document.createElement(e);let o={};return"string"==typeof t||t instanceof Node?n.unshift(t):Array.isArray(t)?n=t.concat(n):o=t,N(r,o),n.forEach((e=>{"string"==typeof e?r.appendChild(document.createTextNode(e)):e instanceof Node&&r.appendChild(e)})),r};i.props=function(...e){if(!e||0===e.length)return"";const t=Object.assign({},...e),n=[];return Object.keys(t).forEach((function(e){const r=t[e];if(r||0===r){const t=String(r).replace(/"/g,""");n.push(`${e}="${t}"`)}})),n.join(" ")},(e=>{e("co-Ele","<##=data[0]##></##=data[0]##>###compomint.tools.applyElementProps(this, data[1]);##"),e("co-Element","##\n data.tag = data.tag || 'div';\n ##\n <##=data.tag##\n ##=data.id ? 'id=\"' + (data.id === true ? component._id : data.id) + '\"' : ''##\n data-co-props=\"##:data.props##\"\n data-co-event=\"##:data.event##\">\n ##if (typeof data.content === \"string\") {##\n ##=data.content##\n ##} else {##\n ##%data.content##\n ##}##\n </##=data.tag##>")})($),e.compomint=c,e.tmpl=l,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=compomint.umd.min.js.map