@xcons/widget
Version:
XCon Studio widget utilities with advanced template rendering, reactive binding system and registry pattern support
1 lines • 169 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@xcons/common")):"function"==typeof define&&define.amd?define(["@xcons/common"],t):"object"==typeof exports?exports.XConWidgets=t(require("@xcons/common")):e.XConWidgets=t(e.XConsCommon)}(this,e=>(()=>{"use strict";var t={48:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecycleMobileMode:()=>n});class n{static setupOnWidgetMobileModeChanged(e,t){if(this.implementsOnWidgetMobileModeChanged(e)){const t=e.onWidgetMobileModeChanged;e.onWidgetMobileModeChanged=function(){if(e.safeLog?.("debug","Widget mobile mode changed lifecycle started"),t&&"function"==typeof t)try{e.safeLog?.("debug","Calling original onWidgetMobileModeChanged method"),t.call(e),e.safeLog?.("debug","Original mobile mode changed method completed successfully")}catch(i){e.safeLog?.("error","Error in original mobile mode changed method:",i)}e.safeLog?.("debug","Widget mobile mode changed lifecycle completed")}}}static callOnWidgetMobileModeChanged(e,t){if(this.implementsOnWidgetMobileModeChanged(e))try{e.safeLog?.("debug","Calling onWidgetMobileModeChanged lifecycle method"),e.onWidgetMobileModeChanged(),e.safeLog?.("debug","Widget mobile mode changed lifecycle completed")}catch(i){e.safeLog?.("error",`Error in onWidgetMobileModeChanged: ${t?.widgetName||"Unknown"}`,i)}}static implementsOnWidgetMobileModeChanged(e){return"function"==typeof e.onWidgetMobileModeChanged}}},202:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecycleDataUpdated:()=>n});class n{static setupOnWidgetDataUpdated(e,t){if(this.implementsOnWidgetDataUpdated(e)){const t=e.onWidgetDataUpdated;e.onWidgetDataUpdated=function(){if(e.safeLog?.("debug","Widget data updated lifecycle started"),t&&"function"==typeof t)try{e.safeLog?.("debug","Calling original onWidgetDataUpdated method"),t.call(e),e.safeLog?.("debug","Original data updated method completed successfully")}catch(i){e.safeLog?.("error","Error in original data updated method:",i)}e.safeLog?.("debug","Widget data updated lifecycle completed")}}}static callOnWidgetDataUpdated(e,t){if(this.implementsOnWidgetDataUpdated(e))try{e.safeLog?.("debug","Calling onWidgetDataUpdated lifecycle method"),e.onWidgetDataUpdated(),e.safeLog?.("debug","Widget data updated lifecycle completed")}catch(i){e.safeLog?.("error",`Error in onWidgetDataUpdated: ${t?.widgetName||"Unknown"}`,i)}}static implementsOnWidgetDataUpdated(e){return"function"==typeof e.onWidgetDataUpdated}}},257:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecycleRendered:()=>s});var n=i(507);class s{static setupOnWidgetRendered(e,t){if(this.implementsOnWidgetRendered(e)){const t=e.onWidgetRendered;e.onWidgetRendered=function(i){if(e.safeLog?.("info","Widget rendered lifecycle started"),e.safeLog?.("debug",`Container: ${i?.tagName||"Unknown"}`),t&&"function"==typeof t)try{e.safeLog?.("debug","Calling original onWidgetRendered method"),t.call(e,i),e.safeLog?.("debug","Original rendered method completed successfully")}catch(n){e.safeLog?.("error","Error in original rendered method:",n)}e.safeLog?.("info","Widget rendered lifecycle completed")}}}static callOnWidgetRendered(e,t,i){if(this.implementsOnWidgetRendered(e))try{e.safeLog?.("debug","Calling onWidgetRendered lifecycle method"),e.onWidgetRendered(t),e.safeLog?.("info","Widget rendered lifecycle completed")}catch(n){e.safeLog?.("error",`Error in onWidgetRendered: ${i?.widgetName||"Unknown"}`,n)}s.callDOMRescanAfterRender(e,t)}static callDOMRescanAfterRender(e,t){try{e.safeLog?.("debug","Triggering DOM rescan after widget render");const i=n.defaultWidgetDOMManager;setTimeout(()=>{e.safeLog?.("debug","Performing DOM rescan for new widgets in rendered template"),i.scanContainer(t),e.safeLog?.("info","DOM rescan completed after widget render"),setTimeout(()=>{s.updateParentBindingsAfterChildInit(e)},10)},0)}catch(i){e.safeLog?.("error","Error triggering DOM rescan after render:",i)}}static updateParentBindingsAfterChildInit(e){try{e.safeLog?.("debug","Updating parent bindings after child widgets initialized");const t=e.reactiveManager;if(t&&"function"==typeof t.updateContext){const i=t.getReactiveContainer();i&&"function"==typeof i.updateBindings?(i.updateBindings(),e.safeLog?.("info","Parent bindings updated after child initialization")):e.safeLog?.("warn","No reactive container found in reactive manager")}else e.safeLog?.("warn","No reactive manager found to update bindings")}catch(t){e.safeLog?.("error","Error updating parent bindings after child init:",t)}}static implementsOnWidgetRendered(e){return"function"==typeof e.onWidgetRendered}}},324:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecycleResize:()=>n});class n{static setupOnWidgetResize(e,t){if(this.implementsOnWidgetResize(e)){const t=e.onWidgetResize;e.onWidgetResize=function(){if(e.safeLog?.("trace","Widget resize lifecycle started"),t&&"function"==typeof t)try{e.safeLog?.("trace","Calling original onWidgetResize method"),t.call(e),e.safeLog?.("trace","Original resize method completed successfully")}catch(i){e.safeLog?.("error","Error in original resize method:",i)}e.safeLog?.("trace","Widget resize lifecycle completed")}}}static callOnWidgetResize(e,t){if(this.implementsOnWidgetResize(e))try{e.safeLog?.("trace","Calling onWidgetResize lifecycle method"),e.onWidgetResize(),e.safeLog?.("trace","Widget resize lifecycle completed")}catch(i){e.safeLog?.("error",`Error in onWidgetResize: ${t?.widgetName||"Unknown"}`,i)}}static implementsOnWidgetResize(e){return"function"==typeof e.onWidgetResize}}},400:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecyclePropertyChanged:()=>n});class n{static setupOnWidgetPropertyChanged(e,t){if(this.implementsOnWidgetPropertyChanged(e)){const t=e.onWidgetPropertyChanged;e.onWidgetPropertyChanged=function(i,n,s){if(e.safeLog?.("debug",`Widget property changed lifecycle started for: ${i||"undefined"}`),e.safeLog?.("debug","Property change details:",{property:i,oldValue:n,newValue:s}),t&&"function"==typeof t)try{e.safeLog?.("debug","Calling original onWidgetPropertyChanged method"),t.call(e,i,n,s),e.safeLog?.("debug","Original property changed method completed successfully")}catch(r){e.safeLog?.("error","Error in original property changed method:",r)}e.safeLog?.("debug","Widget property changed lifecycle completed")}}}static callOnWidgetPropertyChanged(e,t,i,n,s){if(this.implementsOnWidgetPropertyChanged(e))try{e.safeLog?.("debug",`Calling onWidgetPropertyChanged lifecycle method for: ${t||"undefined"}`),e.onWidgetPropertyChanged(t,i,n),e.safeLog?.("debug","Widget property changed lifecycle completed")}catch(r){e.safeLog?.("error",`Error in onWidgetPropertyChanged: ${s?.widgetName||"Unknown"}`,r)}}static implementsOnWidgetPropertyChanged(e){return"function"==typeof e.onWidgetPropertyChanged}}},436:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecycleOnInit:()=>n});class n{static setupOnWidgetInit(e,t){if(this.implementsOnWidgetInit(e)){const t=e.onWidgetInit;e.onWidgetInit=function(){if(e.safeLog?.("debug","Widget init lifecycle started"),t&&"function"==typeof t)try{e.safeLog?.("debug","Calling original onWidgetInit method"),t.call(e),e.safeLog?.("debug","Original init method completed successfully")}catch(i){e.safeLog?.("error","Error in original init method:",i)}e.safeLog?.("info","Widget init lifecycle completed")}}}static callOnWidgetInit(e,t){if(this.implementsOnWidgetInit(e))try{e.safeLog?.("debug","Calling onWidgetInit lifecycle method"),e.onWidgetInit(),e.safeLog?.("info","Widget initialization lifecycle completed successfully")}catch(n){e.safeLog?.("error",`Error in onWidgetInit: ${t?.widgetName||"Unknown"}`,n),Promise.resolve().then(i.bind(i,833)).then(({WidgetLifecycleOnInitializationError:i})=>{i.callOnWidgetInitializationError(e,n,t)})}else e.safeLog?.("debug",`No onWidgetInit method found for widget: ${t?.widgetName||"Unknown"}`)}static implementsOnWidgetInit(e){return"function"==typeof e.onWidgetInit}}},456:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecycleDestroy:()=>n});class n{static setupOnWidgetDestroy(e,t){if(this.implementsOnWidgetDestroy(e)){const t=e.onWidgetDestroy;e.onWidgetDestroy=function(){if(e.safeLog?.("info","Widget destroy lifecycle started"),e.safeLog?.("debug","Cleaning up widget resources and global functions"),t&&"function"==typeof t)try{e.safeLog?.("debug","Calling original onWidgetDestroy method"),t.call(e),e.safeLog?.("debug","Original destroy method completed successfully")}catch(i){e.safeLog?.("error","Error in original destroy method:",i)}e.safeLog?.("info","Widget destroy lifecycle completed"),e.safeLog?.("debug","Widget cleanup finished, clearing logger references"),e.logger=void 0}}}static callOnWidgetDestroy(e,t){if(this.implementsOnWidgetDestroy(e))try{e.safeLog?.("debug","Calling onWidgetDestroy lifecycle method"),e.onWidgetDestroy(),e.safeLog?.("info","Widget destroy lifecycle completed")}catch(i){e.safeLog?.("error",`Error in onWidgetDestroy: ${t?.widgetName||"Unknown"}`,i)}}static implementsOnWidgetDestroy(e){return"function"==typeof e.onWidgetDestroy}}},482:(e,t,i)=>{i.r(t),i.d(t,{WidgetLifecycleEditMode:()=>n});class n{static setupOnWidgetEditModeChanged(e,t){if(this.implementsOnWidgetEditModeChanged(e)){const t=e.onWidgetEditModeChanged;e.onWidgetEditModeChanged=function(){if(e.safeLog?.("debug","Widget edit mode changed lifecycle started"),t&&"function"==typeof t)try{e.safeLog?.("debug","Calling original onWidgetEditModeChanged method"),t.call(e),e.safeLog?.("debug","Original edit mode changed method completed successfully")}catch(i){e.safeLog?.("error","Error in original edit mode changed method:",i)}e.safeLog?.("debug","Widget edit mode changed lifecycle completed")}}}static callOnWidgetEditModeChanged(e,t){if(this.implementsOnWidgetEditModeChanged(e))try{e.safeLog?.("debug","Calling onWidgetEditModeChanged lifecycle method"),e.onWidgetEditModeChanged(),e.safeLog?.("debug","Widget edit mode changed lifecycle completed")}catch(i){e.safeLog?.("error",`Error in onWidgetEditModeChanged: ${t?.widgetName||"Unknown"}`,i)}}static implementsOnWidgetEditModeChanged(e){return"function"==typeof e.onWidgetEditModeChanged}}},507:(e,t,i)=>{i.r(t),i.d(t,{BUILD_TIME:()=>a,CircularDependencyError:()=>De,ExpressionEvaluator:()=>q,PACKAGE_AUTHOR:()=>r,PACKAGE_DESC:()=>s,PACKAGE_INFO:()=>c,PACKAGE_NAME:()=>n,PACKAGE_VERSION:()=>o,ReactiveComputedManager:()=>B,ReactiveCore:()=>H,ReactiveElementMixin:()=>_,ReactiveManager:()=>xe,ReactivePropertyManager:()=>D,ReactivePropertyUtils:()=>O,ServiceError:()=>Ne,ServiceInjector:()=>ze,ServiceNotFoundError:()=>Oe,ServiceRegistry:()=>Be,Widget:()=>x,WidgetCorePlugin:()=>$,WidgetDOMManager:()=>b,WidgetFactory:()=>C,WidgetInitializationManager:()=>Se,WidgetInstanceManager:()=>Xe,WidgetLoggerFactory:()=>Pe,WidgetRegistry:()=>g,XConBootstrap:()=>lt,createServiceToken:()=>ot,default:()=>gt,defaultServiceInjector:()=>ct,defaultServiceRegistry:()=>at,defaultWidgetDOMManager:()=>v,defaultWidgetFactory:()=>L,defaultWidgetRegistry:()=>u,getServiceInjections:()=>Ve,getServiceMetadata:()=>rt,invalidateAllComputed:()=>F,invalidateComputed:()=>V,isInjectable:()=>st,registerService:()=>tt,registerServiceWithToken:()=>it,registerValue:()=>nt,triggerUpdate:()=>U,widgetLoggerFactory:()=>Te,xcomputed:()=>j,xinject:()=>Ue,xinjectable:()=>Ze,xproperty:()=>z,xscoped:()=>et,xsingleton:()=>Ye,xtransient:()=>Qe});const n="@xcons/widget",s="XCon Studio widget utilities with advanced template rendering, reactive binding system and registry pattern support",r="XCon Studio Team",o="3.0.8",a="2025-10-23T18:08:10.724Z",c={name:n,version:o,buildTime:a,description:s,author:r};var d=i(789);const l=d.CoreLogger.createChild(n,"WIDGET-REGISTRY");class g{constructor(){this.widgets=new Map}registerWidget(e,t,i,n="auto"){if(this.widgets.has(e))return void l.warn(`Widget selector already registered: ${e}`);const s={selector:e,widgetClass:t,config:i,initMode:n,isReady:!1};l.info(`Widget registered: ${e} (${i.widgetName})`),this.widgets.set(e,s)}markAllWidgetsAsReady(){this.widgets.forEach((e,t)=>{e.isReady=!0,l.debug(`Widget marked as ready: ${t}`)}),l.info(`All ${this.widgets.size} widgets marked as ready`)}createWidget(e,t){const i=this.widgets.get(e);if(!i)return l.error(`Widget selector not registered: ${e}. Available selectors: ${this.getRegisteredSelectors().join(", ")}`),null;try{const n=new i.widgetClass;return t&&n.widgetConfig&&(n.widgetConfig={...n.widgetConfig,...t}),l.debug(`Widget instance created: ${e}`),n}catch(n){return l.error(`Failed to create widget instance for ${e}:`,n),null}}getRegisteredSelectors(){return Array.from(this.widgets.keys())}getRegisteredWidget(e){return this.widgets.get(e)}getRegisteredWidgets(){return Array.from(this.widgets.values())}unregisterWidget(e){const t=this.widgets.delete(e);return t&&l.info(`Widget unregistered: ${e}`),t}clear(){const e=this.widgets.size;this.widgets.clear(),l.info(`All widgets cleared (${e} widgets)`)}}const u=(d.CoreLogger.createChild(n,"WIDGET-REGISTRY-GLOBAL").info("Creating default widget registry"),new g);function h(e={}){const{prefix:t="xc",segments:i=[10,7,3,7,3],chars:n="abcdefghijklmnopqrstuvwxyz0123456789"}=e;return`${t}_${i.map(e=>{let t="";for(let i=0;i<e;i++)t+=n.charAt(Math.floor(Math.random()*n.length));return t}).join("_")}`}function p(e="xc"){return h({prefix:e,segments:[10,7,3,7,3]})}function f(e="el"){return h({prefix:e,segments:[8,4,4,4]})}function m(e="bind",t){if(void 0!==t){const i=h({prefix:"",segments:[7],chars:"abcdefghijklmnopqrstuvwxyz0123456789"}).replace(/^_/,"");return`bind_${e}_${String(t).padStart(3,"0")}_${i}`}return h({prefix:e.startsWith("bind_")?e:`bind_${e}`,segments:[8,4,4]})}const y=d.CoreLogger.createChild(n,"WIDGET-DOM");class b{static getInstance(){return b.instance||(b.instance=new b),b.instance}constructor(){this.observers=new Map,this.isAutoScanEnabled=!1,this.lastScanTime=0,this.SCAN_DEBOUNCE_MS=500,this.MIN_SCAN_INTERVAL=1e3,this.domReady=!1,this.setupDOMReadyListener()}setupDOMReadyListener(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{this.setupAutoScan(),this.domReady=!0,y.debug("DOM ready - waiting for XConBootstrap to trigger initialization")}):(this.setupAutoScan(),this.domReady=!0,y.debug("DOM already ready - waiting for XConBootstrap to trigger initialization"))}scanAndInitializeWidget(e){const t=u.getRegisteredWidget(e);if(!t)return void y.warn(`Widget not found in registry: ${e}`);const i=document.querySelectorAll(e);y.debug(`Found ${i.length} elements for selector: ${e}`),0!==i.length?i.forEach(i=>{const n=i;n.hasAttribute("data-xc-id")?y.debug(`Widget already initialized, skipping: ${e}`):this.initializeWidgetOnElement(n,t)}):y.debug(`No DOM elements found for widget: ${e}`)}scanContainer(e){if(!e)return void y.warn("scanContainer: Container element is null or undefined");y.debug("Scanning container for widget selectors:",{container:e.tagName+(e.id?"#"+e.id:""),containerClasses:e.className});const t=u.getRegisteredWidgets();if(0===t.length)return void y.debug("scanContainer: No widgets registered to scan");let i=0,n=0;t.forEach(t=>{try{const s=e.querySelectorAll(t.selector);s.length>0&&(i+=s.length,y.debug(`scanContainer: Found ${s.length} elements for selector: ${t.selector}`),s.forEach(e=>{const i=e;if(i.hasAttribute("data-xc-id"))y.debug(`scanContainer: Element already initialized, skipping: ${t.selector}`);else try{this.initializeWidgetOnElement(i,t),n++,y.debug(`scanContainer: Successfully initialized widget: ${t.selector}`)}catch(s){y.error(`scanContainer: Failed to initialize widget ${t.selector}:`,s)}}))}catch(s){y.error(`scanContainer: Error scanning for selector ${t.selector}:`,s)}}),y.info(`scanContainer complete: Found ${i} elements, initialized ${n} widgets`)}initializeWidgetOnElement(e,t){try{if(e.hasAttribute("data-xc-id"))return void y.debug(`Widget already initialized with ID, skipping: ${e.getAttribute("data-xc-id")}`);const i=p("xc");e.setAttribute("data-xc-id",i),y.debug(`Initializing widget with ID: ${i} (selector: ${t.selector})`);const n=u.createWidget(t.selector,t.config);if(!n)throw new Error(`Failed to create widget instance for: ${t.selector}`);const s={container:this.createContainerWrapper(e),scope:{},width:e.offsetWidth,height:e.offsetHeight,settings:{},dataSources:[],isMobile:this.detectMobile(),isEdit:!1};n.xctx=s,e.setAttribute("data-xc",t.selector),e.__xconWidget=n,n.__widgetDomId=i,y.debug(`Widget marked with ID: ${i}`),this.initializeAndRenderWidget(n).catch(t=>{y.error(`Async widget initialization failed for ID ${i}:`,t),e.removeAttribute("data-xc"),e.removeAttribute("data-xc-id"),delete e.__xconWidget}),y.info(`Widget initialization started with ID: ${i} (selector: ${t.selector})`)}catch(i){y.error(`Widget initialization failed for ${t.selector}:`,i),this.handleInitializationError(e,i,t)}}async initializeAndRenderWidget(e){try{const t=e.widgetConfig?.widgetName||"Unknown";e.init&&"function"==typeof e.init&&(await e.init(),y.debug(`Widget init completed: ${t}`)),e.applyTemplate&&"function"==typeof e.applyTemplate&&(e.applyTemplate(),y.debug(`Widget template applied: ${t}`)),y.info(`Widget fully initialized: ${t}`)}catch(t){y.error("Failed to initialize widget:",t)}}getWidgetInstance(e){if(!e)return null;const t=e.__xconWidget;if(t){const i=e.getAttribute("data-xc-id");return y.debug(`Found widget instance: ${e.getAttribute("data-xc")} (ID: ${i})`),t}return y.debug("No widget instance found for element"),null}destroyWidget(e){if(!e)return!1;const t=e.getAttribute("data-xc-id"),i=this.getWidgetInstance(e);if(i)try{y.debug(`Destroying widget with ID: ${t} (selector: ${e.getAttribute("data-xc")})`),i.destroy&&"function"==typeof i.destroy&&i.destroy(),e.removeAttribute("data-xc"),e.removeAttribute("data-xc-id"),delete e.__xconWidget;const n=this.observers.get(e);return n&&(n.disconnect(),this.observers.delete(e)),y.info(`Widget destroyed successfully with ID: ${t} (${e.tagName}${e.id?"#"+e.id:""})`),!0}catch(n){return y.error(`Error destroying widget with ID ${t}:`,n),!1}return y.debug(`No widget instance found to destroy (ID: ${t})`),!1}destroyWidgetById(e,t){const i=(t||document.body).querySelector(`[data-xc-id="${e}"]`);return i?this.destroyWidget(i):(y.warn(`Widget element not found for ID: ${e}`),!1)}getWidgetsInContainer(e){const t=[];return e.querySelectorAll("[data-xc-id]").forEach(e=>{const i=e,n=i.getAttribute("data-xc-id"),s=i.getAttribute("data-xc"),r=this.getWidgetInstance(i);n&&s&&r&&t.push({element:i,id:n,selector:s,instance:r})}),t}createContainerWrapper(e){return e}handleInitializationError(e,t,i){y.error(`Widget initialization failed for ${i.selector}:`,t);const n=`\n <div class="xc-widget-error" style="\n padding: 15px; \n border: 1px solid #f44336; \n border-radius: 4px; \n background: #ffebee;\n color: #c62828;\n font-size: 14px;\n font-family: monospace;\n ">\n <strong>Widget Initialization Error</strong><br>\n <em>Widget:</em> ${i.config.widgetName||"Unknown"}<br>\n <em>Selector:</em> ${i.selector}<br>\n <em>Error:</em> ${t.message||t}<br>\n <small>Check console for details</small>\n </div>\n `;e.innerHTML=n}rescanDOM(){if(!this.isAutoScanEnabled)return y.debug("Auto-scan disabled, manual rescan triggered"),void this.performScan();Date.now()-this.lastScanTime<this.MIN_SCAN_INTERVAL?y.debug("Scan rate limited, skipping"):(y.debug("Re-scanning DOM for widgets"),this.performScan())}performScan(){this.lastScanTime=Date.now();const e=u.getRegisteredWidgets().filter(e=>!e.isReady);0!==e.length?(y.debug(`Scanning for ${e.length} pending widgets`),e.forEach(e=>{this.scanAndInitializeWidget(e.selector)})):y.debug("No pending widgets to scan")}setupAutoScan(){this.isAutoScanEnabled?y.debug("Auto-scan already enabled"):(this.mutationObserver&&this.mutationObserver.disconnect(),this.mutationObserver=new MutationObserver(e=>{let t=!1;e.forEach(e=>{"childList"===e.type&&e.addedNodes.length>0&&e.addedNodes.forEach(e=>{if(e.nodeType===Node.ELEMENT_NODE){const i=e;i.hasAttribute&&!i.hasAttribute("data-xc-id")&&(t=!0)}})}),t&&this.debouncedRescan()}),this.mutationObserver.observe(document.body,{childList:!0,subtree:!0}),this.isAutoScanEnabled=!0,y.info("Auto-scan setup complete with smart filtering"))}debouncedRescan(){this.scanDebounceTimeout&&clearTimeout(this.scanDebounceTimeout),this.scanDebounceTimeout=window.setTimeout(()=>{this.rescanDOM(),this.scanDebounceTimeout=void 0},this.SCAN_DEBOUNCE_MS)}disableAutoScan(){this.mutationObserver&&(this.mutationObserver.disconnect(),this.mutationObserver=void 0),this.scanDebounceTimeout&&(clearTimeout(this.scanDebounceTimeout),this.scanDebounceTimeout=void 0),this.isAutoScanEnabled=!1,y.info("Auto-scan disabled")}detectMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}cleanup(){this.disableAutoScan(),this.observers.forEach(e=>{e.disconnect()}),this.observers.clear();document.querySelectorAll("[data-xc-id]").forEach(e=>{this.destroyWidget(e)}),this.isAutoScanEnabled=!1,this.lastScanTime=0,y.info("Widget DOM Manager cleanup complete")}}const v=b.getInstance(),w=d.CoreLogger.createChild(n,"WIDGET-FACTORY");class C{constructor(e){this.registry=e||u,w.info("WidgetFactory initialized")}createWidget(e,t){let i=null;if("string"==typeof e){if(i=this.registry.createWidget(e,t),!i)throw new Error(`Failed to create widget with selector: ${e}`);w.debug(`Widget created from selector: ${e}`)}else try{i=new e,t&&i.widgetConfig&&(i.widgetConfig={...i.widgetConfig,...t}),w.debug(`Widget created from class: ${e.name}`)}catch(n){throw w.error("Failed to instantiate widget class:",n),new Error(`Failed to instantiate widget: ${n}`)}return{instance:i,container:null,widgetId:p("xc")}}async createAndMount(e,t,i){if(!t)throw new Error("Container element is required for mounting");const n=this.createWidget(e,i?.context);if(!1!==i?.autoInit&&n.instance.init)try{await n.instance.init(),w.debug("Widget initialized before mount")}catch(s){throw w.error("Widget initialization failed:",s),s}return await this.attach(n,t,i?.context),w.info("Widget created and mounted successfully"),n}async attach(e,t,i){if(!t)throw new Error("Container element is required for attachment");if(!e.instance)throw new Error("Widget instance is required for attachment");if(e.container===t)return void w.warn("Widget already attached to this container");if(e.container&&this.detach(e),!e.instance._widgetReady&&e.instance.init){w.debug("Widget not ready, initializing before attach...");try{await e.instance.init()}catch(o){throw w.error("Failed to initialize widget before attach:",o),o}}const n=e.instance.widgetConfig?.selector;if(!n)throw new Error("Widget selector is required in widgetConfig");const s=document.createElement(n);s.setAttribute("data-xc-id",e.widgetId),s.setAttribute("data-xc",n),s.__xconWidget=e.instance,t.appendChild(s);const r={container:s,scope:i?.scope||{},width:s.offsetWidth||t.offsetWidth,height:s.offsetHeight||t.offsetHeight,settings:i?.settings||{},dataSources:i?.dataSources||[],isMobile:i?.isMobile??this.detectMobile(),isEdit:i?.isEdit??!1,isPreview:i?.isPreview,isFullscreen:i?.isFullscreen,...i};if(e.instance.xctx=r,e.instance.applyTemplate)try{e.instance.applyTemplate(s,r),w.debug(`Widget template applied to selector element: ${n}`)}catch(o){throw w.error("Failed to apply widget template:",o),t.removeChild(s),o}else w.warn("Widget does not have applyTemplate method - was init() called?");e.container=t,w.info(`Widget attached with ID: ${e.widgetId} (selector: ${n})`)}detach(e){if(!e.container)return void w.warn("Widget is not attached to any container");const{instance:t,container:i,widgetId:n}=e;if("function"==typeof t.onWidgetDestroy)try{t.onWidgetDestroy(),w.debug("Widget destroy lifecycle called")}catch(r){w.error("Widget destroy lifecycle error:",r)}const s=i.querySelector(`[data-xc-id="${n}"]`);s?(i.removeChild(s),w.debug(`Selector element removed with ID: ${n}`)):w.warn(`Selector element not found for widget ID: ${n}`),t.xctx&&(t.xctx=void 0),e.container=null,w.info(`Widget detached: ${n}`)}detectMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}dispose(e){e.container&&this.detach(e),e.instance=null,w.info(`Widget disposed: ${e.widgetId}`)}}const L=new C,E=d.CoreLogger.createChild(n,"PLUGIN");class ${constructor(){this.name=n,this.version=o,this.type="widget-core",this.status="idle"}async initialize(){this.status="ready",E.info("XCons Wdiget Package initialized",{version:o,buildTime:a})}getCapabilities(){return["widget-registration","widget-creation","widget-management","template-rendering","lifecycle-management","dom-scanning","auto-initialization"]}getGlobalRegistries(){return{WidgetDOMManager:v}}async activate(){E.info("Widget Core Plugin activated"),this.dispatchReadyEvent()}async deactivate(){E.info("Widget Core Plugin deactivated"),v.cleanup()}async destroy(){E.info("Widget Core Plugin destroyed"),v.cleanup()}dispatchReadyEvent(){const e=new CustomEvent(this.type,{detail:{timestamp:Date.now(),version:o,isReady:!0},bubbles:!0,cancelable:!1});window.dispatchEvent(e)}}!async function(){try{d.LoggerRegistry.registerPackage(n,{enabled:!1,level:d.LoggerLogLevel.DEBUG,prefix:n});const e=new $;await e.initialize(),await e.activate(),E.info("Widget Core Plugin running")}catch(e){E.error("Failed to setup Widget Core Plugin:",e)}}();const M=d.CoreLogger.createChild(n,"WIDGET-DECORATOR");function x(e){return function(t){const i=t.prototype.__initMode,n=e?.initMode,s=n||i||"manual",r=e?.selector;if(!r)throw new Error(`Widget selector is required in config for widget: ${e?.widgetName||t.name}`);t.prototype.widgetConfig={...e,selector:r,initMode:s};const o=t,a=function(...i){const n=new o(...i);return Xe.processWidgetInstance(n,{config:{...e,selector:r,initMode:s},initMode:s,autoInit:!1,className:t.name})};return a.prototype=o.prototype,Object.defineProperty(a,"name",{value:o.name,configurable:!0}),M.debug(`Widget decorator applied: ${r} (${e?.widgetName||t.name}) - registration deferred to XConBootstrap`),a}}class I{static applyEncapsulation(e,t,i,n,s){const r=this.resolveContainer(e,s);if(!r)throw new Error(`Failed to resolve container for encapsulation. Container type: ${typeof e}, Value: ${e}`);switch(i){case"emulated":return this.applyEmulatedEncapsulation(r,t,n,s);case"component":return this.applyXConStyleComponentEncapsulation(r,t,n,s);case"shadow":return this.applyShadowEncapsulation(r,t,n,s);default:return s?.safeLog?.("debug","No encapsulation applied"),r}}static applyEmulatedEncapsulation(e,t,i,n){n?.safeLog?.("debug",`Applying emulated encapsulation with selector: ${t}`);const s=t.startsWith(".")?t.slice(1):t;return e.classList.add(s),e.hasAttribute("x:isolate")&&(e.removeAttribute("x:isolate"),n?.safeLog?.("debug","Removed x:isolate attribute from widget container (should be on parent only)")),n?.safeLog?.("debug",`Emulated encapsulation applied to container with class: ${s}`),e}static applyXConStyleComponentEncapsulation(e,t,i,n){return n?.safeLog?.("debug",`Applying XCon-style component encapsulation with selector: ${t}`),e.hasAttribute("x:isolate")&&(e.removeAttribute("x:isolate"),n?.safeLog?.("debug","Removed x:isolate attribute from widget container (should be on parent only)")),n?.safeLog?.("info",`XCon-style component applied to container: ${e.tagName}`),e}static applyShadowEncapsulation(e,t,i,n){if(n?.safeLog?.("debug","Applying shadow DOM encapsulation"),e.hasAttribute("x:isolate")&&(e.removeAttribute("x:isolate"),n?.safeLog?.("debug","Removed x:isolate attribute from widget container (should be on parent only)")),e.shadowRoot)return n?.safeLog?.("debug","Container already has shadow root, using existing"),e;try{return e.attachShadow({mode:"open"}),n?.safeLog?.("info",`Shadow DOM created for: ${i.widgetName}`),e}catch(s){return n?.safeLog?.("error","Failed to create shadow DOM:",s),n?.safeLog?.("debug","Falling back to emulated encapsulation"),this.applyEmulatedEncapsulation(e,t,i,n)}}static resolveContainer(e,t){if(t?.safeLog?.("debug","Resolving container:",{type:typeof e,isHTML:e instanceof HTMLElement,hasJquery:e&&e.jquery,hasGet:e&&"function"==typeof e.get,hasLength:e&&"number"==typeof e.length,length:e&&e.length,toString:String(e).substring(0,100)}),e&&(e.jquery||"function"==typeof e.get&&"number"==typeof e.length||e[0]&&e[0]instanceof HTMLElement)){t?.safeLog?.("debug","Detected jQuery-like object, extracting element...");let i=null;if("function"==typeof e.get?i=e.get(0):e[0]?i=e[0]:e.element instanceof HTMLElement&&(i=e.element),i instanceof HTMLElement)return t?.safeLog?.("debug",`Resolved jQuery-like container: ${i.tagName}${i.id?"#"+i.id:""}`),i;t?.safeLog?.("warn","jQuery-like object found but no valid HTMLElement extracted:",e)}if(e instanceof HTMLElement)return t?.safeLog?.("debug",`Resolved DOM container: ${e.tagName}${e.id?"#"+e.id:""}`),e;if("string"==typeof e){const i=document.querySelector(e);if(i)return t?.safeLog?.("debug",`Resolved selector container: ${e} -> ${i.tagName}${i.id?"#"+i.id:""}`),i;t?.safeLog?.("error",`CSS selector not found in DOM: ${e}`)}return e&&"object"==typeof e&&t?.safeLog?.("debug","Container object analysis:",{keys:Object.keys(e),hasElement:!!e.element,hasFirstElement:!!e[0],constructor:e.constructor?.name,prototype:Object.getPrototypeOf(e)?.constructor?.name}),t?.safeLog?.("error","Cannot resolve container:",{type:typeof e,value:e,isNull:null===e,isUndefined:void 0===e}),null}}class S{static applyStylesWithEncapsulation(e,t,i,n){const s=e?.widgetConfig?.styles||[];if(0===s.length)return;let r=s.join("\n");const o=e?.constructor?.name||"widget";switch(e.safeLog?.("debug",`Applying styles with encapsulation: ${i}`,{styleCount:s.length,selector:t,widget:o}),i){case"emulated":t&&(r=this.scopeCSS(r,t),e.safeLog?.("debug",`CSS scoped to: ${t}`));break;case"component":t&&(r=this.scopeCSSForXConComponent(r,t),e.safeLog?.("debug",`CSS scoped for XCon-style component: ${t}`));break;case"shadow":e.safeLog?.("debug","Styles prepared for Shadow DOM");break;default:e.safeLog?.("debug","No encapsulation - global styles")}this.injectStyles(r,o,i,t,e,n)}static scopeCSS(e,t){return e.replace(/([^{}]+)\{/g,(e,i)=>`${i.split(",").map(e=>{const i=e.trim();return i.startsWith("@")||i.startsWith(":root")||i.includes("::before")||i.includes("::after")?i:`${t} ${i}`}).join(", ")} {`)}static scopeCSSForXConComponent(e,t){return e.replace(/([^{}]+)\{/g,(e,i)=>`${i.split(",").map(e=>{const i=e.trim();return i.startsWith("@")||i.startsWith(":root")||i.includes("::before")||i.includes("::after")||i.startsWith(":host")?i.startsWith(":host")?i.replace(":host",t):i:`${t} ${i}`}).join(", ")} {`)}static injectStyles(e,t,i,n,s,r){if("shadow"===i&&r?.shadowRoot){s?.safeLog?.("debug","Injecting styles into Shadow DOM");let i=r.shadowRoot.querySelector("style[data-widget-styles]");i||(i=document.createElement("style"),i.setAttribute("data-widget-styles",t),i.type="text/css",r.shadowRoot.appendChild(i));const n=`/* XCon Widget Styles: ${t} (shadow) */\n`;return i.textContent=n+e,void s?.safeLog?.("debug",`Shadow DOM styles injected: ${e.length} chars`)}const o=`xcon-widget-styles-${t.toLowerCase()}-${i||"none"}`,a=document.getElementById(o);a&&a.remove();const c=document.createElement("style");c.id=o,c.type="text/css","component"===i&&n&&(c.setAttribute("data-component-selector",n),c.setAttribute("data-xcon-component-styles","true"));const d=`/* XCon Widget Styles: ${t} (${i||"none"}) ${n?`- ${n}`:""} */\n`;c.textContent=d+e,document.head.appendChild(c),s?.safeLog?.("debug",`Styles injected: ${o} (${e.length} chars)`)}}var W=i(436),P=i(833),T=i(801),A=i(257);i(456),i(202),i(324),i(482),i(48),i(400);class R{static async setupAllLifecycleMethods(e,t){const[{WidgetLifecycleOnInit:n},{WidgetLifecycleOnInitializationError:s},{WidgetLifecycleReady:r},{WidgetLifecycleRendered:o},{WidgetLifecycleDestroy:a},{WidgetLifecycleDataUpdated:c},{WidgetLifecycleResize:d},{WidgetLifecycleEditMode:l},{WidgetLifecycleMobileMode:g},{WidgetLifecyclePropertyChanged:u}]=await Promise.all([Promise.resolve().then(i.bind(i,436)),Promise.resolve().then(i.bind(i,833)),Promise.resolve().then(i.bind(i,801)),Promise.resolve().then(i.bind(i,257)),Promise.resolve().then(i.bind(i,456)),Promise.resolve().then(i.bind(i,202)),Promise.resolve().then(i.bind(i,324)),Promise.resolve().then(i.bind(i,482)),Promise.resolve().then(i.bind(i,48)),Promise.resolve().then(i.bind(i,400))]);this.hasLifecycleMethod(e,"onWidgetInit")&&n.setupOnWidgetInit(e,t),this.hasLifecycleMethod(e,"onWidgetInitializationError")&&s.setupOnWidgetInitializationError(e,t),this.hasLifecycleMethod(e,"onWidgetReady")&&r.setupOnWidgetReady(e,t),this.hasLifecycleMethod(e,"onWidgetRendered")&&o.setupOnWidgetRendered(e,t),this.hasLifecycleMethod(e,"onWidgetDestroy")&&a.setupOnWidgetDestroy(e,t),this.hasLifecycleMethod(e,"onWidgetDataUpdated")&&c.setupOnWidgetDataUpdated(e,t),this.hasLifecycleMethod(e,"onWidgetResize")&&d.setupOnWidgetResize(e,t),this.hasLifecycleMethod(e,"onWidgetEditModeChanged")&&l.setupOnWidgetEditModeChanged(e,t),this.hasLifecycleMethod(e,"onWidgetMobileModeChanged")&&g.setupOnWidgetMobileModeChanged(e,t),this.hasLifecycleMethod(e,"onWidgetPropertyChanged")&&u.setupOnWidgetPropertyChanged(e,t),e.safeLog?.("debug","Lifecycle methods setup completed for implemented interfaces")}static hasLifecycleMethod(e,t){return"function"==typeof e[t]}}class N{static handleRenderError(e,t,i,n,s){const r=e.widgetConfig||n,o=s||r?.encapsulation||"none",a=r?.selector||"unknown",c="component"===o,d=c?`<${a}>`:"N/A",l=`\n <div class="xcon-widget-error" style="\n padding: 20px; \n border: 2px solid #f44336; \n border-radius: 8px; \n background: linear-gradient(135deg, #ffebee 0%, #fce4ec 100%);\n color: #c62828;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n ">\n <div style="display: flex; align-items: center; margin-bottom: 15px;">\n <span style="font-size: 24px; margin-right: 10px;">🚫</span>\n <h4 style="margin: 0; font-size: 18px;">Widget Render Error</h4>\n </div>\n \n <div style="background: rgba(255,255,255,0.8); padding: 15px; border-radius: 6px; margin-bottom: 15px;">\n <p style="margin: 5px 0;"><strong>Widget:</strong> ${r?.widgetName||"Unknown"}</p>\n <p style="margin: 5px 0;"><strong>Error:</strong> ${i.message||i}</p>\n <p style="margin: 5px 0;"><strong>Encapsulation:</strong> ${o}</p>\n <p style="margin: 5px 0;"><strong>Selector:</strong> ${a}</p>\n ${c?`<p style="margin: 5px 0;"><strong>Component:</strong> ${d}</p>`:""}\n </div>\n </div>\n `;try{const i=I.resolveContainer(t);i?i.innerHTML=l:"function"==typeof t?.html?t.html(l):e.safeLog?.("error","Cannot display error in container:",l)}catch(g){e.safeLog?.("error","Failed to display error in container:",g),e.safeLog?.("error","Original error:",i)}P.WidgetLifecycleOnInitializationError.callOnWidgetInitializationError(e,i,r)}}class D{constructor(e="Unknown"){this.logContext=e,this.reactiveProperties=new Set,this.hasReactiveProperties=!1}detectReactiveProperties(e){if(!e)return;const t=e.constructor?._reactiveProperties;t&&t instanceof Set&&t.size>0&&(this.hasReactiveProperties=!0,this.reactiveProperties=new Set(t),this.log("debug",`Detected ${this.reactiveProperties.size} @xproperty decorated fields:`,Array.from(this.reactiveProperties)));const i=Object.getPrototypeOf(e)?._reactiveProperties;i&&i instanceof Set&&i.size>0&&(this.hasReactiveProperties=!0,this.reactiveProperties=new Set([...this.reactiveProperties,...i]),this.log("debug",`Detected ${i.size} @xproperty decorated fields from prototype`)),"function"==typeof e.reactiveUpdate&&(this.hasReactiveProperties=!0,this.log("debug","Detected existing reactive trigger method"))}setupNestedModelHooks(e,t){this.reactiveProperties.forEach(i=>{try{const n=e[i];n&&"object"==typeof n&&n.constructor?._reactiveProperties instanceof Set&&n.constructor._reactiveProperties.size>0&&"function"==typeof n.reactiveUpdate&&(n.reactiveUpdate=(e,n,s)=>{const r=e?`${i}.${e}`:i;this.log("debug",`Nested model property changed: ${r} = ${s}`),t(r)},this.log("debug",`Hooked into nested reactive model: ${i} (${n.constructor._reactiveProperties.size} properties)`))}catch(n){this.log("debug",`Could not hook into property ${i}:`,n)}})}addReactiveProperty(e){return this.reactiveProperties.has(e)?(this.log("debug",`Property ${e} already reactive`),!1):(this.reactiveProperties.add(e),this.hasReactiveProperties=!0,this.log("debug",`Added reactive property: ${e}`),!0)}removeReactiveProperty(e){return!!this.reactiveProperties.has(e)&&(this.reactiveProperties.delete(e),0===this.reactiveProperties.size&&(this.hasReactiveProperties=!1),this.log("debug",`Removed reactive property: ${e}`),!0)}getReactiveProperties(){return new Set(this.reactiveProperties)}hasProperties(){return this.hasReactiveProperties}getCount(){return this.reactiveProperties.size}clear(){this.reactiveProperties.clear(),this.hasReactiveProperties=!1,this.log("debug","Cleared all reactive properties")}log(e,t,...i){}}class O{static defaultHasChanged(e,t){return e!==t}static shouldSkipProperty(e){return["constructor","safeLog","logger","reactiveManager","widgetConfig","xctx","_","init","applyTemplate","updateContext","onWidget","_computed_","_reactive"].some(t=>e.startsWith(t))}static hasProperty(e,t){if(!e||!t)return!1;const i=t.split(".");let n=e;for(const s of i){if(null==n)return!1;if(!(s in n)&&!Object.getOwnPropertyDescriptor(n,s))return!1;n=n[s]}return!0}static getNestedProperty(e,t){if(!e||!t)return;const i=t.split(".");let n=e;for(const s of i){if(null==n)return;n=n[s]}return n}static detectDependencies(e,t){const i=new Set,n=e.toString(),s=/\bthis\.([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)*)\b/g;let r;for(;null!==(r=s.exec(n));){const e=r[1];this.shouldSkipProperty(e)||this.hasProperty(t,e)&&i.add(e)}return Array.from(i)}static applyReactiveUpdateMethod(e){"function"!=typeof e.reactiveUpdate&&(e.reactiveUpdate=function(e,t,i){if(e&&"function"==typeof this.onWidgetPropertyChanged)try{this.onWidgetPropertyChanged(e,t,i)}catch(n){"function"==typeof this.safeLog&&this.safeLog("error","Error in onWidgetPropertyChanged:",n)}this.reactiveManager&&"function"==typeof this.reactiveManager.updateProperty&&(e?this.reactiveManager.updateProperty(e):this.reactiveManager.updateContext(this.xctx||{}))})}static applyReflectToAttributeMethod(e){"function"!=typeof e.reflectToAttribute&&(e.reflectToAttribute=function(e,t,i){if(!this._widgetElement)return;const n=i.attribute||e.toLowerCase();null==t||!1===t?this._widgetElement.removeAttribute(n):!0===t?this._widgetElement.setAttribute(n,""):this._widgetElement.setAttribute(n,String(t))})}}const k=d.CoreLogger.createChild(n,"REACTIVE-COMP-MANAGER");class B{constructor(e="Unknown"){this.logContext=e,this.computedProperties=new Map,this.computedPropertiesInfo=new Map,this.computedCache=new Map,this.computedDependencyValues=new Map,this.hasComputedProperties=!1}detectComputedProperties(e){if(!e)return;const t=e.constructor?._computedProperties;t&&t instanceof Map&&t.size>0&&(this.hasComputedProperties=!0,t.forEach((e,t)=>{this.computedProperties.set(t,e.dependencies||[]),this.computedPropertiesInfo.set(t,e)}),this.log("debug",`Detected ${this.computedProperties.size} @computed properties:`,Array.from(this.computedProperties.keys())));const i=Object.getPrototypeOf(e)?._computedProperties;i&&i instanceof Map&&i.size>0&&(this.hasComputedProperties=!0,i.forEach((e,t)=>{this.computedProperties.set(t,e.dependencies||[]),this.computedPropertiesInfo.set(t,e)}),this.log("debug",`Detected ${i.size} @computed properties from prototype`))}getComputedValue(e,t,i){const n=this.computedPropertiesInfo.get(e);let s=n?.dependencies||[];n?.autoDetectDependencies&&0===s.length&&(s=O.detectDependencies(t,i),n&&(n.dependencies=s,this.computedProperties.set(e,s)));const r=s.map(e=>this.getPropertyValue(i,e)),o=this.computedDependencyValues.get(e),a=!o||r.length!==o.length||r.some((e,t)=>e!==o[t]);if(a||!this.computedCache.has(e))try{const n=t.call(i);return this.computedCache.set(e,n),this.computedDependencyValues.set(e,[...r]),s.length>0&&this.log("debug",`Computed property '${e}' recomputed`,{dependencies:s,dependencyValues:r,value:n,reason:a?"dependency change":"initial computation"}),n}catch(d){return void this.log("error",`Error computing property '${e}':`,d)}const c=this.computedCache.get(e);return this.log("debug",`Computed property '${e}' using cached value:`,c),c}getPropertyValue(e,t){if(e&&t){if(!t.includes(".")){if(e.hasOwnProperty(t))return e[t];const n=`_${t}`;if(e.hasOwnProperty(n))return e[n];const s=Object.getOwnPropertyDescriptor(e,t);if(s&&s.get)try{return s.get.call(e)}catch(i){return void this.log("error",`Error getting property '${t}':`,i)}if(t in e){const i=e[t];if("function"!=typeof i)return i}return}return O.getNestedProperty(e,t)}}invalidateComputedValue(e){const t=this.computedCache.has(e),i=this.computedDependencyValues.has(e);this.computedCache.delete(e),this.computedDependencyValues.delete(e),this.log("debug",`Computed property '${e}' invalidated (had cache: ${t}, had deps: ${i})`)}invalidateComputedDependingOn(e){if(!this.hasComputedProperties)return[];const t=[];return this.computedProperties.forEach((i,n)=>{i.some(t=>t===e||t.startsWith(e+".")||e.startsWith(t+"."))&&(this.invalidateComputedValue(n),t.push(n))}),t.length>0&&this.log("debug",`Invalidated computed properties due to '${e}' change:`,t),t}addComputedProperty(e,t){return this.computedProperties.has(e)?(this.log("debug",`Computed property ${e} already exists`),!1):(this.computedProperties.set(e,t),this.hasComputedProperties=!0,this.log("debug",`Added computed property: ${e} with dependencies:`,t),!0)}removeComputedProperty(e){return!!this.computedProperties.has(e)&&(this.computedProperties.delete(e),this.computedPropertiesInfo.delete(e),this.computedCache.delete(e),this.computedDependencyValues.delete(e),0===this.computedProperties.size&&(this.hasComputedProperties=!1),this.log("debug",`Removed computed property: ${e}`),!0)}getComputedProperties(){return new Map(this.computedProperties)}getComputedPropertiesInfo(){return new Map(this.computedPropertiesInfo)}hasProperties(){return this.hasComputedProperties}getCount(){return this.computedProperties.size}clear(){this.computedProperties.clear(),this.computedPropertiesInfo.clear(),this.computedCache.clear(),this.computedDependencyValues.clear(),this.hasComputedProperties=!1,this.log("debug","Cleared all computed properties")}log(e,t,...i){"debug"===e?k.debug(`[ReactiveComputedManager:${this.logContext}] ${t}`,...i):"info"===e?k.info(`[ReactiveComputedManager:${this.logContext}] ${t}`,...i):"warn"===e?k.warn(`[ReactiveComputedManager:${this.logContext}] ${t}`,...i):"error"===e&&k.error(`[ReactiveComputedManager:${this.logContext}] ${t}`,...i)}}class H{constructor(e,t,i={}){this.autoReactiveEnabled=!1,this.model=e,this.updateCallback=t,this.options={logContext:i.logContext||e.constructor?.name||"Unknown",autoDetectProperties:!1!==i.autoDetectProperties,enablePropertyWatching:!1!==i.enablePropertyWatching,enableComputedProperties:!1!==i.enableComputedProperties,...i},this.propertyManager=new D(this.options.logContext),this.computedManager=new B(this.options.logContext),this.options.autoDetectProperties&&this.detectReactiveCapabilities()}detectReactiveCapabilities(){this.model&&(this.propertyManager.detectReactiveProperties(this.model),this.options.enableComputedProperties&&this.computedManager.detectComputedProperties(this.model),this.hasReactiveCapabilities()||this.log("debug","Performance mode: No reactive properties detected - manual updates only"))}setupReactiveIntegration(){if(!this.model||!this.hasReactiveCapabilities()||!this.options.enablePropertyWatching)return;this.log("debug","Setting up reactive integration",{reactiveProperties:this.propertyManager.getCount(),computedProperties:this.computedManager.getCount()});const e=this.model.reactiveUpdate;O.applyReactiveUpdateMethod(this.model);const t=this.model.reactiveUpdate;t?(this.model.reactiveUpdate=(i,n,s)=>{this.log("debug",`Reactive property changed: ${i} = ${s}`),i&&this.computedManager.hasProperties()&&this.computedManager.invalidateComputedDependingOn(i),e&&e!==t&&e.call(this.model,i,n,s),t.call(this.model,i,n,s)},this.propertyManager.setupNestedModelHooks(this.model,this.updateCallback),this.autoReactiveEnabled=!0):this.log("error","Failed to create standard reactive update method")}getComputedValue(e,t,i){return this.computedManager.getComputedValue(e,t,i)}invalidateComputedValue(e){this.computedManager.invalidateComputedValue(e)}hasReactiveCapabilities(){return this.propertyManager.hasProperties()||this.computedManager.hasProperties()}getReactiveProperties(){return this.propertyManager.getReactiveProperties()}getComputedProperties(){return this.computedManager.getComputedProperties()}getComputedPropertiesInfo(){return this.computedManager.getComputedPropertiesInfo()}addReactiveProperty(e){return this.propertyManager.addReactiveProperty(e)}addComputedProperty(e,t){return this.computedManager.addComputedProperty(e,t)}removeReactiveProperty(e){return this.propertyManager.removeReactiveProperty(e)}removeComputedProperty(e){return this.computedManager.removeComputedProperty(e)}triggerPropertyUpdate(e,t,i){this.log("debug",`Force triggering update for property: ${e}`),this.computedManager.hasProperties()&&this.computedManager.invalidateComputedDependingOn(e),this.updateCallback(e)}triggerFullUpdate(){this.log("debug","Force triggering full update"),this.updateCallback()}updateOptions(e){this.options={...this.options,...e},this.log("debug","Options updated:",this.options)}getOptions(){return{...this.options}}log(e,t,...i){this.model?.safeLog&&this.model.safeLog(e,`[ReactiveCore:${this.options.logContext}] ${t}`,...i)}cleanup(){this.log("debug","Cleaning up reactive core"),this.propertyManager.clear(),this.computedManager.clear(),this.autoReactiveEnabled=!1,this.model=null}}function z(e={}){return function(t,i){const n=i,s=`_${n}`;t.constructor._reactiveProperties||(t.constructor._reactiveProperties=new Set),t.constructor._reactiveProperties.add(n),t.constructor._hasReactiveMixin||(!function(e){const t=e.prototype;O.applyReactiveUpdateMethod(t),O.applyReflectToAttributeMethod(t)}(t.constructor),t.constructor._hasReactiveMixin=!0),Object.defineProperty(t,n,{get(){return this[s]},set(t){const i=this[s];(e.hasChanged?e.hasChanged(t,i):O.defaultHasChanged(t,i))&&(this[s]=t,e.reflect&&this._widgetElement&&this.reflectToAttribute?.(n,t,e),this.reactiveUpdate(n,i,t))},enumerable:!0,configurable:!0})}}function _(e){return class t extends e{reactiveUpdate(e,i,n){const s=t.prototype;"function"==typeof s.reactiveUpdate&&s.reactiveUpdate.call(this,e,i,n)}reflectToAttribute(e,i,n){const s=t.prototype;"function"==typeof s.reflectToAttribute&&s.reflectToAttribute.call(this,e,i,n)}}}function U(e){if("function"==typeof e.reactiveUpdate)e.reactiveUpdate();else if(e.reactiveManager&&"function"==typeof e.reactiveManager.updateContext)e.reactiveManager.updateContext(e.xctx||{});else{const t=e.reactiveManager?.getReactiveElement();t&&"function"==typeof t.updateBindings&&t.updateBindings()}}function j(e={}){return function(t,i,n){const s=n.get;if(!s)throw new Error("@xcomputed can only be used on getter methods");const r=i;return t.constructor._computedProperties||(t.constructor._computedProperties=new Map),t.constructor._computedProperties.set(r,{dependencies:e.dependencies||[],autoDetectDependencies:!1!==e.autoDetectDependencies,originalGetter:s}),t.constructor._hasReactiveMixin||(!function(e){const t=e.prototype;t.getComputedProperties=function(){return this.constructor._computedProperties||new Map},t.getComputedDependencies=function(e){const t=this.constructor._computedProperties?.get(e);return t?.dependencies||[]},t.invalidateComputed=function(e){const t=this.reactiveManager?.getReactiveContainer()?.getPropertyManager();t&&t.invalidateComputedValue(e),this.safeLog&&this.safeLog("debug",`Computed property '${e}' invalidated`)},t.invalidateAllComputed=function(){const e=this.getComputedProperties(),t=this.reactiveManager?.getReactiveContainer()?.getPropertyManager();e.forEach((e,i)=>{t&&t.invalidateComputedValue(i)}),this.safeLog&&this.safeLog("debug",`All computed properties invalidated (${e.size} properties)`)};const i=t.reactiveUpdate;t.reactiveUpdate=function(e,t,n){e&&this.invalidateComputedDependingOn(e),i&&i.call(this,e,t,n)},t.invalidateComputedDependingOn=function(e){const t=this.getComputedProperties(),i=[],n=this.reactiveManager?.getReactiveContainer()?.getPropertyManager();t.forEach((t,s)=>{(t.dependencies||[]).some(t=>t===e||t.startsWith(e+".")||e.startsWith(t+"."))&&(n&&n.invalidateComputedValue(s),i.push(s))}),i.length>0&&this.safeLog&&this.safeLog("debug",`Invalidated computed properties due to '${e}' change:`,i)}}(t.constructor),t.constructor._hasReactiveMixin=!0),n.get=function(){const e=this.reactiveManager?.getReactiveContainer()?.getPropertyManager();if(e)return e.getComputedValue(r,s,this);try{return s.call(this)}catch(t){return void(this.safeLog&&this.safeLog("error",`Error computing property '${r}':`,t))}},n}}function V(e,t){"function"==typeof e.invalidateComputed&&e.invalidateComputed(t)}function F(e){"function"==typeof e.invalidateAllComputed&&e.invalidateAllComputed()}const G=d.CoreLogger.createChild(n,"EXPRESSION-EVALUATOR");class q{constructor(e){this.expressionCache=new Map,this.widgetInstance=e}setWidgetInstance(e){this.widgetInstance=e}compileExpression(e){const t=e.trim();if(this.expressionCache.has(t))return this.expressionC