@meonode/ui 0.4.14 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +52 -2
  2. package/README.md +233 -87
  3. package/dist/cjs/components/meonode-unmounter.client.js +1 -1
  4. package/dist/cjs/components/theme-provider.client.js +1 -1
  5. package/dist/cjs/core.node.js +1 -1
  6. package/dist/cjs/helper/common.helper.js +1 -1
  7. package/dist/cjs/util/mount-tracker.util.js +1 -1
  8. package/dist/cjs/util/navigation-cache-manager.util.js +1 -1
  9. package/dist/cjs/util/node.util.js +1 -1
  10. package/dist/cjs/util/theme.util.js +1 -1
  11. package/dist/esm/components/meonode-unmounter.client.d.ts.map +1 -1
  12. package/dist/esm/components/meonode-unmounter.client.js +1 -1
  13. package/dist/esm/components/theme-provider.client.d.ts +1 -2
  14. package/dist/esm/components/theme-provider.client.d.ts.map +1 -1
  15. package/dist/esm/components/theme-provider.client.js +1 -1
  16. package/dist/esm/core.node.d.ts +8 -10
  17. package/dist/esm/core.node.d.ts.map +1 -1
  18. package/dist/esm/core.node.js +1 -1
  19. package/dist/esm/helper/common.helper.d.ts +9 -0
  20. package/dist/esm/helper/common.helper.d.ts.map +1 -1
  21. package/dist/esm/helper/common.helper.js +1 -1
  22. package/dist/esm/types/node.type.d.ts +2 -9
  23. package/dist/esm/types/node.type.d.ts.map +1 -1
  24. package/dist/esm/util/mount-tracker.util.d.ts +9 -5
  25. package/dist/esm/util/mount-tracker.util.d.ts.map +1 -1
  26. package/dist/esm/util/mount-tracker.util.js +1 -1
  27. package/dist/esm/util/navigation-cache-manager.util.d.ts.map +1 -1
  28. package/dist/esm/util/navigation-cache-manager.util.js +1 -1
  29. package/dist/esm/util/node.util.d.ts +15 -32
  30. package/dist/esm/util/node.util.d.ts.map +1 -1
  31. package/dist/esm/util/node.util.js +1 -1
  32. package/dist/esm/util/theme.util.d.ts +0 -2
  33. package/dist/esm/util/theme.util.d.ts.map +1 -1
  34. package/dist/esm/util/theme.util.js +1 -1
  35. package/package.json +7 -3
  36. package/dist/cjs/helper/obj.helper.js +0 -1
  37. package/dist/esm/helper/obj.helper.d.ts +0 -16
  38. package/dist/esm/helper/obj.helper.d.ts.map +0 -1
  39. package/dist/esm/helper/obj.helper.js +0 -1
@@ -2,7 +2,7 @@ import { type ReactNode } from 'react';
2
2
  import type { Children, Theme } from '../types/node.type.js';
3
3
  export interface ThemeContextValue {
4
4
  theme: Theme;
5
- setTheme: (theme: Theme) => void;
5
+ setTheme: (theme: Theme | ((theme: Theme) => Theme)) => void;
6
6
  }
7
7
  export declare const ThemeContext: import("react").Context<ThemeContextValue | null>;
8
8
  /**
@@ -11,7 +11,6 @@ export declare const ThemeContext: import("react").Context<ThemeContextValue | n
11
11
  * @param {Children} [props.children] The children to render.
12
12
  * @param {Theme} props.theme The theme to provide.
13
13
  * @returns {ReactNode} The rendered component.
14
- * @private
15
14
  */
16
15
  export default function ThemeProvider({ children, theme }: {
17
16
  children?: Children;
@@ -1 +1 @@
1
- {"version":3,"file":"theme-provider.client.d.ts","sourceRoot":"","sources":["../../../src/components/theme-provider.client.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,SAAS,EAAY,MAAM,OAAO,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAG9D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACjC;AAED,eAAO,MAAM,YAAY,mDAAgD,CAAA;AAEzE;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,SAAS,CAgB3G"}
1
+ {"version":3,"file":"theme-provider.client.d.ts","sourceRoot":"","sources":["../../../src/components/theme-provider.client.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,SAAS,EAAY,MAAM,OAAO,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAG9D,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,CAAA;CAC7D;AAED,eAAO,MAAM,YAAY,mDAAgD,CAAA;AAEzE;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,SAAS,CAmB3G"}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{createContext as e,useState as r}from"react";import{Node as o}from"../core.node.js";const t=e(null);function n({children:e,theme:n}){const[m,c]=r(n);if(!n)throw new Error("`theme` prop must be defined");const d={theme:m,setTheme:e=>{document.cookie=`theme=${e.mode}; path=/;`,c(e)}};return o(t.Provider,{value:d,children:e}).render()}export{t as ThemeContext,n as default};
2
+ import{createContext as e,useState as o}from"react";import{Node as t}from"../core.node.js";const r=e(null);function n({children:e,theme:n}){const[m,c]=o(n);if(!n)throw new Error("`theme` prop must be defined");const d={theme:m,setTheme:e=>{"function"==typeof e&&(e=e(m)),document.cookie=`theme=${e.mode}; path=/;`,c(e)}};return t(r.Provider,{value:d,children:e}).render()}export{r as ThemeContext,n as default};
@@ -1,11 +1,10 @@
1
1
  import { type ReactElement } from 'react';
2
- import type { Children, DependencyList, ElementCacheEntry, FinalNodeProps, HasRequiredProps, MergedProps, NodeElementType, NodeInstance, NodePortal, NodeProps, PropProcessingCache, PropsOf } from './types/node.type.js';
2
+ import type { Children, DependencyList, ElementCacheEntry, FinalNodeProps, HasRequiredProps, MergedProps, NodeElementType, NodeInstance, NodePortal, NodeProps, PropsOf } from './types/node.type.js';
3
3
  /**
4
4
  * The core abstraction of the MeoNode library. It wraps a React element or component,
5
5
  * providing a unified interface for processing props, normalizing children, and handling styles.
6
6
  * This class is central to the library's ability to offer a JSX-free, fluent API for building UIs.
7
7
  * It uses an iterative rendering approach to handle deeply nested structures without causing stack overflows.
8
- * @class BaseNode
9
8
  * @template E - The type of React element or component this node represents.
10
9
  */
11
10
  export declare class BaseNode<E extends NodeElementType = NodeElementType> {
@@ -18,11 +17,10 @@ export declare class BaseNode<E extends NodeElementType = NodeElementType> {
18
17
  stableKey?: string;
19
18
  lastPropsObj?: Record<string, unknown>;
20
19
  lastSignature?: string;
21
- static elementCache: Map<string, ElementCacheEntry>;
22
- static propProcessingCache: Map<string, PropProcessingCache>;
23
- static scheduledCleanup: boolean;
24
- private static _navigationStarted;
25
- private static renderContextPool;
20
+ static get elementCache(): Map<string, ElementCacheEntry>;
21
+ private static get _navigationStarted();
22
+ private static set _navigationStarted(value);
23
+ private static get renderContextPool();
26
24
  private static acquireRenderContext;
27
25
  private static releaseRenderContext;
28
26
  constructor(element: E, rawProps?: Partial<NodeProps<E>>, deps?: DependencyList);
@@ -63,7 +61,7 @@ export declare class BaseNode<E extends NodeElementType = NodeElementType> {
63
61
  * entry from `BaseNode.elementCache`.
64
62
  * @public
65
63
  */
66
- static cacheCleanupRegistry: FinalizationRegistry<{
64
+ static get cacheCleanupRegistry(): FinalizationRegistry<{
67
65
  cacheKey: string;
68
66
  instanceId: string;
69
67
  }>;
@@ -80,9 +78,9 @@ export declare class BaseNode<E extends NodeElementType = NodeElementType> {
80
78
  * 2. Remove the `domElement` from the DOM if it is still connected.
81
79
  *
82
80
  * This prevents detached portal containers from leaking memory in long-running client apps.
83
- * @private
81
+ * @internal
84
82
  */
85
- static portalCleanupRegistry: FinalizationRegistry<{
83
+ static get portalCleanupRegistry(): FinalizationRegistry<{
86
84
  domElement: HTMLDivElement;
87
85
  reactRoot: {
88
86
  unmount(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"core.node.d.ts","sourceRoot":"","sources":["../../src/core.node.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,YAAY,EAElB,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,WAAW,EAEX,eAAe,EACf,YAAY,EACZ,UAAU,EACV,SAAS,EACT,mBAAmB,EACnB,OAAO,EAER,MAAM,yBAAyB,CAAA;AAWhC;;;;;;;GAOG;AACH,qBAAa,QAAQ,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACxD,UAAU,EAAE,MAAM,CAAgE;IAElF,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAK;IAC3C,SAAgB,UAAU,UAAO;IAEjC,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAgB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;IAGzB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEtC,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB,OAAc,YAAY,iCAAuC;IACjE,OAAc,mBAAmB,mCAAyC;IAG1E,OAAc,gBAAgB,UAAQ;IAGtC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAQ;IAGzC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAiF;IAEjH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAWnC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAcnC,YAAY,OAAO,EAAE,CAAC,EAAE,QAAQ,GAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAM,EAAE,IAAI,CAAC,EAAE,cAAc,EAoBlF;IAED;;;;OAIG;IACH,IAAW,KAAK,IAAI,cAAc,CAKjC;IAED;;;;;;;OAOG;IACH,IAAW,YAAY,IAAI,cAAc,GAAG,SAAS,CAEpD;IAED;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,aAAa;IA2BrB;;;;;;;;OAQG;IACH,OAAc,oBAAoB;;;OAchC;IAEF;;;;;;;;;;;;;;OAcG;IACH,OAAc,qBAAqB;;;;;OAiCjC;IAEF;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,aAAa,GAAE,OAAe,GAAG,YAAY,CAAC,cAAc,CAAC,CAqM1E;IAED;;;;OAIG;IACI,QAAQ,IAAI,UAAU,CA0F5B;IAED;;;;;;;;OAQG;IACH,OAAc,WAAW,SAyCxB;CAGF;AAID;;;;GAIG;AACH,iBAAS,IAAI,CAAC,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,eAAe,EACtF,OAAO,EAAE,CAAC,EACV,KAAK,GAAE,WAAW,CAAC,CAAC,EAAE,eAAe,CAAyC,EAC9E,IAAI,CAAC,EAAE,cAAc,GACpB,YAAY,CAAC,CAAC,CAAC,CAEjB;;;;AAmBD,OAAO,EAAE,IAAI,EAAE,CAAA;AAEf;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,sBAAsB,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,eAAe,EAC1G,OAAO,EAAE,CAAC,EACV,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,sBAAsB,CAAC,GACpD,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACxC,CAAC,CAAC,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,eAAe,CAAC,EACtC,IAAI,CAAC,EAAE,cAAc,KAClB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;IACtB,OAAO,EAAE,CAAC,CAAA;CACX,GACD,CAAC,CAAC,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,eAAe,CAAC,EACvC,IAAI,CAAC,EAAE,cAAc,KAClB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;IACtB,OAAO,EAAE,CAAC,CAAA;CACX,CAOJ;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,sBAAsB,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,eAAe,EACvH,OAAO,EAAE,CAAC,EACV,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,sBAAsB,GAAG,UAAU,CAAC,GAAG,sBAAsB,GACpG,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACxC,CAAC,CAAC,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,UAAU,CAAC,EACxD,IAAI,CAAC,EAAE,cAAc,KAClB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,GACtC,CAAC,CAAC,eAAe,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzE,QAAQ,CAAC,EAAE,QAAQ,EACnB,KAAK,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,UAAU,CAAC,EACzD,IAAI,CAAC,EAAE,cAAc,KAClB,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAQzC"}
1
+ {"version":3,"file":"core.node.d.ts","sourceRoot":"","sources":["../../src/core.node.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{isValidElement as e,Fragment as t,createElement as r}from"react";import{isValidElementType as n,isFragment as o}from"./helper/react-is.helper.js";import{getComponentType as s,hasNoStyleTag as a,getElementTypeName as l}from"./helper/common.helper.js";import c from"./components/styled-renderer.client.js";import{__DEBUG__ as i}from"./constant/common.const.js";import{MountTrackerUtil as d}from"./util/mount-tracker.util.js";import h from"./components/meonode-unmounter.client.js";import{NavigationCacheManagerUtil as u}from"./util/navigation-cache-manager.util.js";import{NodeUtil as p}from"./util/node.util.js";import{ThemeUtil as m}from"./util/theme.util.js";class g{instanceId=Math.random().toString(36).slice(2)+Date.now().toString(36);element;rawProps={};isBaseNode=!0;_props;_deps;stableKey;lastPropsObj;lastSignature;static elementCache=new Map;static propProcessingCache=new Map;static scheduledCleanup=!1;static _navigationStarted=!1;static renderContextPool=[];static acquireRenderContext(){const e=g.renderContextPool;return e.length>0?e.pop():{workStack:new Array(512),renderedElements:new Map}}static releaseRenderContext(e){g.renderContextPool.length<50&&e.workStack.length<2048&&(e.workStack.length=0,e.renderedElements.clear(),g.renderContextPool.push(e))}constructor(e,t={},r){if(!n(e)){const t=s(e);throw new Error(`Invalid element type: ${t} provided!`)}this.element=e,this.rawProps=t,this._deps=r;const{ref:o,children:a,...l}=t;this.stableKey=this._getStableKey(l),p.isServer||g._navigationStarted||(u.getInstance().start(),g._navigationStarted=!0)}get props(){return this._props||(this._props=p.processProps(this.element,this.rawProps,this.stableKey)),this._props}get dependencies(){return this._deps}_getStableKey({key:e,...t}){if(p.isServer)return;if(this.lastPropsObj===t)return this.lastSignature;this.lastPropsObj=t;const r=Object.keys(t),n=r.length;if(n>100){const e=p.extractCriticalProps(t,r);this.lastSignature=p.createPropSignature(this.element,e),i&&n>200&&console.warn(`MeoNode: Large props (${n} keys) on "${l(this.element)}". Consider splitting.`)}else this.lastSignature=p.createPropSignature(this.element,t);return null!=e?`${String(e)}:${this.lastSignature}`:this.lastSignature}static cacheCleanupRegistry=new FinalizationRegistry(e=>{const{cacheKey:t,instanceId:r}=e,n=g.elementCache.get(t);n?.instanceId===r&&g.elementCache.delete(t),d.mountedNodes.has(t)&&d.untrackMount(t)});static portalCleanupRegistry=new FinalizationRegistry(e=>{const{domElement:t,reactRoot:r}=e;i&&console.log("[MeoNode] FinalizationRegistry auto-cleaning portal");try{r&&"function"==typeof r.unmount&&r.unmount()}catch(e){i&&console.error("[MeoNode] Portal auto-cleanup unmount error:",e)}try{t?.isConnected&&t.remove()}catch(e){i&&console.error("[MeoNode] Portal auto-cleanup DOM removal error:",e)}});render(n=!1){!p.isServer&&this.stableKey&&d.trackMount(this.stableKey);const s=p.shouldCacheElement(this)?g.elementCache.get(this.stableKey):void 0,l=p.shouldNodeUpdate(s?.prevDeps,this._deps,n);if(!l&&s?.renderedElement)return s.accessCount+=1,s.renderedElement;const i=!l,u=g.acquireRenderContext();let{workStack:m}=u;const{renderedElements:f}=u;let y=0;try{const n=e=>{if(e>m.length){const t=Math.max(e,m.length<<1),r=new Array(t);for(let e=0;e<y;e++)r[e]=m[e];m=r}};for(m[y++]={node:this,isProcessed:!1,blocked:i};y>0;){const s=m[y-1];if(!s){y--;continue}const{node:l,isProcessed:i,blocked:d}=s;if(i){y--;const{children:n,key:s,css:i,nativeProps:d,disableEmotion:h,...u}=l.props;let m=[];if(n){const t=Array.isArray(n)?n:[n],r=t.length;m=new Array(r);for(let n=0;n<r;n++){const r=t[n];if(p.isNodeInstance(r)){const e=f.get(r);if(!e)throw new Error(`[MeoNode] Missing rendered element for child node: ${r.stableKey}`);m[n]=e}else e(r),m[n]=r}}const C={...u,key:s,...d};let P;if(l.element===t||o(l.element))P=r(l.element,{key:s},...m);else{P=!h&&(i||!a(l.element))?r(c,{element:l.element,...C,css:i,suppressHydrationWarning:!0},...m):r(l.element,C,...m)}if(p.shouldCacheElement(l)){const e=g.elementCache.get(l.stableKey);if(e)e.prevDeps=l._deps,e.renderedElement=P,e.accessCount+=1;else{const e={prevDeps:l._deps,renderedElement:P,nodeRef:new WeakRef(l),createdAt:Date.now(),accessCount:1,instanceId:l.instanceId};g.elementCache.set(l.stableKey,e),g.cacheCleanupRegistry.register(l,{cacheKey:l.stableKey,instanceId:l.instanceId},l)}}f.set(l,P)}else{s.isProcessed=!0;const e=l.props.children;if(e){const t=(Array.isArray(e)?e:[e]).filter(p.isNodeInstance);n(y+t.length);for(let e=t.length-1;e>=0;e--){const r=t[e],n=p.shouldCacheElement(r)?g.elementCache.get(r.stableKey):void 0,o=p.shouldNodeUpdate(n?.prevDeps,r._deps,d);if(!o&&n?.renderedElement){f.set(r,n.renderedElement);continue}const s=d||!o;m[y++]={node:r,isProcessed:!1,blocked:s}}}}}const s=f.get(this);return p.shouldCacheElement(this)?r(h,{node:this},s):s}finally{for(let e=0;e<y;e++)m[e]=null;g.releaseRenderContext({workStack:m,renderedElements:f})}}toPortal(){if(!p.ensurePortalInfrastructure(this))throw new Error("toPortal() can only be called in a client-side environment");const e=p.portalInfrastructure.get(this),{domElement:t,reactRoot:r}=e;(()=>{try{r.render(this.render())}catch(e){i&&console.error("[MeoNode] Portal render error:",e)}})();let n=!1;const o=r.unmount.bind(r);return r.update=e=>{if(n)i&&console.warn("[MeoNode] Attempt to update already-unmounted portal");else try{const t=p.isNodeInstance(e)?e.render():e;r.render(t)}catch(e){i&&console.error("[MeoNode] Portal update error:",e)}},r.unmount=()=>{if(n)i&&console.warn("[MeoNode] Portal already unmounted");else{n=!0;try{g.portalCleanupRegistry.unregister(this)}catch(e){i&&console.warn("[MeoNode] Portal unregister warning:",e)}p.portalInfrastructure.delete(this);try{t?.isConnected&&o()}catch(e){i&&console.error("[MeoNode] Portal unmount error:",e)}try{t?.isConnected&&t.remove()}catch(e){i&&console.error("[MeoNode] Portal DOM cleanup error:",e)}}},r}static clearCaches(){const e=Array.from(g.elementCache.keys());i&&console.log(`[MeoNode] clearCaches: Clearing ${e.length} entries`);for(const t of e){const e=g.elementCache.get(t);if(e){const r=e.nodeRef?.deref();if(r)try{g.cacheCleanupRegistry.unregister(r),r.lastSignature=void 0,r.lastPropsObj=void 0}catch{i&&console.warn(`[MeoNode] Could not unregister ${t} from FinalizationRegistry`)}}}g.propProcessingCache.clear(),g.elementCache.clear(),m.clearThemeCache(),d.cleanup(),i&&console.log("[MeoNode] All caches cleared")}}function f(e,t={},r){return new g(e,t,r)}function y(e,t){const r=(r,n)=>f(e,{...t,...r},n);return r.element=e,r}function C(e,t){const r=(r,n,o)=>f(e,{...t,...n,children:r},o);return r.element=e,r}f.clearCaches=g.clearCaches;export{g as BaseNode,f as Node,C as createChildrenFirstNode,y as createNode};
1
+ import{isValidElement as e,Fragment as t,createElement as n}from"react";import{isValidElementType as r,isFragment as o}from"./helper/react-is.helper.js";import{getGlobalState as s,getComponentType as a,hasNoStyleTag as l,getElementTypeName as i}from"./helper/common.helper.js";import c from"./components/styled-renderer.client.js";import{__DEBUG__ as d}from"./constant/common.const.js";import{MountTrackerUtil as h}from"./util/mount-tracker.util.js";import u from"./components/meonode-unmounter.client.js";import{NavigationCacheManagerUtil as m}from"./util/navigation-cache-manager.util.js";import{NodeUtil as p}from"./util/node.util.js";const g=Symbol.for("@meonode/ui/BaseNode/elementCache"),y=Symbol.for("@meonode/ui/BaseNode/navigationStarted"),f=Symbol.for("@meonode/ui/BaseNode/renderContextPool"),C=Symbol.for("@meonode/ui/BaseNode/cacheCleanupRegistry"),w=Symbol.for("@meonode/ui/BaseNode/portalCleanupRegistry");class P{instanceId=Math.random().toString(36).slice(2)+Date.now().toString(36);element;rawProps={};isBaseNode=!0;_props;_deps;stableKey;lastPropsObj;lastSignature;static get elementCache(){return s(g,()=>new Map)}static get _navigationStarted(){return s(y,()=>({value:!1})).value}static set _navigationStarted(e){s(y,()=>({value:!1})).value=e}static get renderContextPool(){return s(f,()=>[])}static acquireRenderContext(){const e=P.renderContextPool;return e.length>0?e.pop():{workStack:new Array(512),renderedElements:new Map}}static releaseRenderContext(e){P.renderContextPool.length<50&&e.workStack.length<2048&&(e.workStack.length=0,e.renderedElements.clear(),P.renderContextPool.push(e))}constructor(e,t={},n){if(!r(e)){const t=a(e);throw new Error(`Invalid element type: ${t} provided!`)}this.element=e,this.rawProps=t,this._deps=n;const{ref:o,children:s,...l}=t;this.stableKey=this._getStableKey(l),p.isServer||P._navigationStarted||(m.getInstance().start(),P._navigationStarted=!0)}get props(){return this._props||(this._props=p.processProps(this.element,this.rawProps,this.stableKey)),this._props}get dependencies(){return this._deps}_getStableKey({key:e,...t}){if(p.isServer)return;if(this.lastPropsObj===t)return this.lastSignature;this.lastPropsObj=t;const n=Object.keys(t),r=n.length;if(r>100){const e=p.extractCriticalProps(t,n);this.lastSignature=p.createPropSignature(this.element,e),d&&r>200&&console.warn(`MeoNode: Large props (${r} keys) on "${i(this.element)}". Consider splitting.`)}else this.lastSignature=p.createPropSignature(this.element,t);return null!=e?`${String(e)}:${this.lastSignature}`:this.lastSignature}static get cacheCleanupRegistry(){return s(C,()=>new FinalizationRegistry(e=>{const{cacheKey:t,instanceId:n}=e,r=P.elementCache.get(t);r?.instanceId===n&&P.elementCache.delete(t),h.isMounted(t)&&h.untrackMount(t)}))}static get portalCleanupRegistry(){return s(w,()=>new FinalizationRegistry(e=>{const{domElement:t,reactRoot:n}=e;d&&console.log("[MeoNode] FinalizationRegistry auto-cleaning portal");try{n&&"function"==typeof n.unmount&&n.unmount()}catch(e){d&&console.error("[MeoNode] Portal auto-cleanup unmount error:",e)}try{t?.isConnected&&t.remove()}catch(e){d&&console.error("[MeoNode] Portal auto-cleanup DOM removal error:",e)}}))}render(r=!1){const s=p.shouldCacheElement(this)?P.elementCache.get(this.stableKey):void 0,a=p.shouldNodeUpdate(s?.prevDeps,this._deps,r);if(!a&&s?.renderedElement)return s.accessCount+=1,s.renderedElement;const i=!a,d=P.acquireRenderContext();let{workStack:h}=d;const{renderedElements:m}=d;let g=0;try{const r=e=>{if(e>h.length){const t=Math.max(e,h.length<<1),n=new Array(t);for(let e=0;e<g;e++)n[e]=h[e];h=n}};for(h[g++]={node:this,isProcessed:!1,blocked:i};g>0;){const s=h[g-1];if(!s){g--;continue}const{node:a,isProcessed:i,blocked:d}=s;if(i){g--;const{children:r,key:s,css:i,nativeProps:d,disableEmotion:h,...u}=a.props;let y=[];if(r){const t=Array.isArray(r)?r:[r],n=t.length;y=new Array(n);for(let r=0;r<n;r++){const n=t[r];if(p.isNodeInstance(n)){const e=m.get(n);if(!e)throw new Error(`[MeoNode] Missing rendered element for child node: ${n.stableKey}`);y[r]=e}else e(n),y[r]=n}}const f={...u,key:s,...d};let C;if(a.element===t||o(a.element))C=n(a.element,{key:s},...y);else{C=!h&&(i||!l(a.element))?n(c,{element:a.element,...f,css:i,suppressHydrationWarning:!0},...y):n(a.element,f,...y)}if(a!==this&&p.shouldCacheElement(a)){const e=P.elementCache.get(a.stableKey);if(e)e.prevDeps=a._deps,e.renderedElement=C,e.accessCount+=1;else{const e={prevDeps:a._deps,renderedElement:C,nodeRef:new WeakRef(a),createdAt:Date.now(),accessCount:1,instanceId:a.instanceId};P.elementCache.set(a.stableKey,e),P.cacheCleanupRegistry.register(a,{cacheKey:a.stableKey,instanceId:a.instanceId},a)}}m.set(a,C)}else{s.isProcessed=!0;const e=a.props.children;if(e){const t=(Array.isArray(e)?e:[e]).filter(p.isNodeInstance);r(g+t.length);for(let e=t.length-1;e>=0;e--){const n=t[e],r=p.shouldCacheElement(n)?P.elementCache.get(n.stableKey):void 0,o=p.shouldNodeUpdate(r?.prevDeps,n._deps,d);if(!o&&r?.renderedElement){m.set(n,r.renderedElement);continue}const s=d||!o;h[g++]={node:n,isProcessed:!1,blocked:s}}}}}let s=m.get(this);if(!p.isServer&&this.stableKey&&(s=n(u,{node:this},s)),p.shouldCacheElement(this)){const e=P.elementCache.get(this.stableKey);if(e)e.prevDeps=this._deps,e.renderedElement=s,e.accessCount+=1;else{const e={prevDeps:this._deps,renderedElement:s,nodeRef:new WeakRef(this),createdAt:Date.now(),accessCount:1,instanceId:this.instanceId};P.elementCache.set(this.stableKey,e),P.cacheCleanupRegistry.register(this,{cacheKey:this.stableKey,instanceId:this.instanceId},this)}}return s}finally{for(let e=0;e<g;e++)h[e]=null;P.releaseRenderContext({workStack:h,renderedElements:m})}}toPortal(){if(!p.ensurePortalInfrastructure(this))throw new Error("toPortal() can only be called in a client-side environment");const e=p.portalInfrastructure.get(this),{domElement:t,reactRoot:n}=e;(()=>{try{n.render(this.render())}catch(e){d&&console.error("[MeoNode] Portal render error:",e)}})();let r=!1;const o=n.unmount.bind(n);return n.update=e=>{if(r)d&&console.warn("[MeoNode] Attempt to update already-unmounted portal");else try{const t=p.isNodeInstance(e)?e.render():e;n.render(t)}catch(e){d&&console.error("[MeoNode] Portal update error:",e)}},n.unmount=()=>{if(r)d&&console.warn("[MeoNode] Portal already unmounted");else{r=!0;try{P.portalCleanupRegistry.unregister(this)}catch(e){d&&console.warn("[MeoNode] Portal unregister warning:",e)}p.portalInfrastructure.delete(this);try{t?.isConnected&&o()}catch(e){d&&console.error("[MeoNode] Portal unmount error:",e)}try{t?.isConnected&&t.remove()}catch(e){d&&console.error("[MeoNode] Portal DOM cleanup error:",e)}}},n}static clearCaches(){const e=Array.from(P.elementCache.keys());d&&console.log(`[MeoNode] clearCaches: Clearing ${e.length} entries`);for(const t of e){const e=P.elementCache.get(t);if(e){const n=e.nodeRef?.deref();if(n)try{P.cacheCleanupRegistry.unregister(n),n.lastSignature=void 0,n.lastPropsObj=void 0}catch{d&&console.warn(`[MeoNode] Could not unregister ${t} from FinalizationRegistry`)}}}P.elementCache.clear(),h.cleanup(),d&&console.log("[MeoNode] All caches cleared")}}function S(e,t={},n){return new P(e,t,n)}function b(e,t){const n=(n,r)=>S(e,{...t,...n},r);return n.element=e,n}function v(e,t){const n=(n,r,o)=>S(e,{...t,...r,children:n},o);return n.element=e,n}S.clearCaches=P.clearCaches;export{P as BaseNode,S as Node,v as createChildrenFirstNode,b as createNode};
@@ -1,5 +1,14 @@
1
1
  import type { FinalNodeProps, NodeElement, NodeInstance } from '../types/node.type.js';
2
2
  import type { ComponentProps, CSSProperties, ElementType } from 'react';
3
+ /**
4
+ * Retrieves or initializes a global state value using a Symbol key.
5
+ * This ensures singleton behavior across multiple bundles or module reloads,
6
+ * and protects against property name mangling during obfuscation.
7
+ * @param key The Symbol key to use for the global state.
8
+ * @param factory A factory function to create the initial value if it doesn't exist.
9
+ * @returns The global state value.
10
+ */
11
+ export declare function getGlobalState<T>(key: symbol, factory: () => T): T;
3
12
  /**
4
13
  * Retrieves a deeply nested value from an object using a dot-separated string path.
5
14
  *
@@ -1 +1 @@
1
- {"version":3,"file":"common.helper.d.ts","sourceRoot":"","sources":["../../../src/helper/common.helper.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAExF,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGvE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,iCAE1B,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,oDAmC5B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAsFxD;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAA0B,CAAA;AAEjE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAU3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAUjH;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,OAAO,CAGxD;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAQ1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQlE"}
1
+ {"version":3,"file":"common.helper.d.ts","sourceRoot":"","sources":["../../../src/helper/common.helper.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAExF,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAGvE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAUlE;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,iCAE1B,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,oDAmC5B,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAsFxD;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,CAA0B,CAAA;AAEjE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAU3F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAUjH;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,OAAO,CAGxD;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAQ1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQlE"}
@@ -1 +1 @@
1
- import{isForwardRef as e,isMemo as t,isFragment as n,isPortal as r,isProfiler as o,isStrictMode as s,isSuspense as c,isSuspenseList as p,isContextConsumer as a,isContextProvider as i,isLazy as u,isElement as m,isReactClassComponent as l}from"./react-is.helper.js";import y from"../constant/css-properties.const.js";import{noStyleTagsSet as f}from"../constant/common.const.js";const d=(e,t)=>t.split(".").reduce((e,t)=>e&&void 0!==e[t]?e[t]:void 0,e),C=y=>e(y)?"forwardRef":t(y)?"memo":n(y)?"fragment":r(y)?"portal":o(y)?"profiler":s(y)?"strict-mode":c(y)?"suspense":p(y)?"suspense-list":a(y)?"context-consumer":i(y)?"context-provider":u(y)?"lazy":m(y)?"element":l(y)?"class":typeof y;function w(e){function t(e,t){const n=e?.displayName||e?.name;return n&&"render"!==n?n:t}if(null==e)return"UnknownElementType";const n=e,r=C(n);switch(r){case"string":return e;case"class":return t(n,"ClassComponent");case"function":return t(n,"AnonymousFunctionComponent");case"forwardRef":return t(n,"")||t(n.render,"")||"ForwardRefComponent";case"memo":return t(n,"")||(n.type?w(n.type):"MemoComponent");case"element":return w(n.type);case"fragment":return"Fragment";case"portal":return"Portal";case"profiler":return t(n,"Profiler");case"strict-mode":return"StrictMode";case"suspense":return t(n,"Suspense");case"suspense-list":return"SuspenseList";case"context-consumer":return n._context?.displayName?`${n._context.displayName}.Consumer`:"ContextConsumer";case"context-provider":return n._context?.displayName?`${n._context.displayName}.Provider`:"ContextProvider";case"lazy":return t(n,"LazyComponent");case"object":return t(n,"")?t(n,""):"function"==typeof n.render?t(n.render,"ObjectWithRender"):n.type&&n.type!==e?`Wrapped<${w(n.type)}>`:t(n,"ObjectComponent");case"symbol":return"symbol"==typeof e?e.description?.replace(/^react\./,"").split(".").map(e=>e[0]?.toUpperCase()+e.slice(1)).join("")||e.toString():"SymbolComponent";case"unknown":return"UnknownElementType";default:return`UnsupportedType<${r}>`}}const x=new Set(y);function j(e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&x.has(n)&&(t[n]=e[n]);return t}function b(e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&!x.has(n)&&(t[n]=e[n]);return t}function h(e){return!(!e||"string"!=typeof e)&&f.has(e.toLowerCase())}function O(e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&void 0!==e[n]&&(t[n]=e[n]);return t}export{x as CSSPropertySet,j as getCSSProps,C as getComponentType,b as getDOMProps,w as getElementTypeName,d as getValueByPath,h as hasNoStyleTag,O as omitUndefined};
1
+ import{isForwardRef as e,isMemo as t,isFragment as n,isPortal as r,isProfiler as o,isStrictMode as s,isSuspense as c,isSuspenseList as p,isContextConsumer as a,isContextProvider as i,isLazy as u,isElement as l,isReactClassComponent as m}from"./react-is.helper.js";import f from"../constant/css-properties.const.js";import{noStyleTagsSet as d}from"../constant/common.const.js";function y(e,t){const n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{};return Object.prototype.hasOwnProperty.call(n,e)||(n[e]=t()),n[e]}const w=(e,t)=>t.split(".").reduce((e,t)=>e&&void 0!==e[t]?e[t]:void 0,e),b=f=>e(f)?"forwardRef":t(f)?"memo":n(f)?"fragment":r(f)?"portal":o(f)?"profiler":s(f)?"strict-mode":c(f)?"suspense":p(f)?"suspense-list":a(f)?"context-consumer":i(f)?"context-provider":u(f)?"lazy":l(f)?"element":m(f)?"class":typeof f;function C(e){function t(e,t){const n=e?.displayName||e?.name;return n&&"render"!==n?n:t}if(null==e)return"UnknownElementType";const n=e,r=b(n);switch(r){case"string":return e;case"class":return t(n,"ClassComponent");case"function":return t(n,"AnonymousFunctionComponent");case"forwardRef":return t(n,"")||t(n.render,"")||"ForwardRefComponent";case"memo":return t(n,"")||(n.type?C(n.type):"MemoComponent");case"element":return C(n.type);case"fragment":return"Fragment";case"portal":return"Portal";case"profiler":return t(n,"Profiler");case"strict-mode":return"StrictMode";case"suspense":return t(n,"Suspense");case"suspense-list":return"SuspenseList";case"context-consumer":return n._context?.displayName?`${n._context.displayName}.Consumer`:"ContextConsumer";case"context-provider":return n._context?.displayName?`${n._context.displayName}.Provider`:"ContextProvider";case"lazy":return t(n,"LazyComponent");case"object":return t(n,"")?t(n,""):"function"==typeof n.render?t(n.render,"ObjectWithRender"):n.type&&n.type!==e?`Wrapped<${C(n.type)}>`:t(n,"ObjectComponent");case"symbol":return"symbol"==typeof e?e.description?.replace(/^react\./,"").split(".").map(e=>e[0]?.toUpperCase()+e.slice(1)).join("")||e.toString():"SymbolComponent";case"unknown":return"UnknownElementType";default:return`UnsupportedType<${r}>`}}const h=new Set(f);function j(e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&h.has(n)&&(t[n]=e[n]);return t}function x(e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&!h.has(n)&&(t[n]=e[n]);return t}function g(e){return!(!e||"string"!=typeof e)&&d.has(e.toLowerCase())}function O(e){const t={};for(const n in e)Object.prototype.hasOwnProperty.call(e,n)&&void 0!==e[n]&&(t[n]=e[n]);return t}export{h as CSSPropertySet,j as getCSSProps,b as getComponentType,x as getDOMProps,C as getElementTypeName,y as getGlobalState,w as getValueByPath,g as hasNoStyleTag,O as omitUndefined};
@@ -35,15 +35,6 @@ export type NodeElementType = ElementType | (ExoticComponent & {
35
35
  }) | (<TProps extends Record<string, any> | undefined>(props: ComponentNodeProps<TProps>) => ComponentNode);
36
36
  /** A single NodeElement or an array of NodeElements */
37
37
  export type Children = NodeElement | NodeElement[];
38
- /**
39
- * Cache for prop processing results to avoid repeated computations
40
- */
41
- export interface PropProcessingCache {
42
- cssProps: Record<string, any>;
43
- signature: string;
44
- lastAccess: number;
45
- hitCount: number;
46
- }
47
38
  /**
48
39
  * Represents an entry in the element cache.
49
40
  * Stores the rendered React element and its previous dependencies for memoization.
@@ -241,6 +232,8 @@ export interface WorkItem {
241
232
  node: NodeInstance;
242
233
  isProcessed: boolean;
243
234
  blocked: boolean;
235
+ depth: number;
236
+ childIndex: number;
244
237
  }
245
238
  export {};
246
239
  //# sourceMappingURL=node.type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.type.d.ts","sourceRoot":"","sources":["../../../src/types/node.type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.type.d.ts","sourceRoot":"","sources":["../../../src/types/node.type.ts"],"names":[],"mappings":"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"}
@@ -5,16 +5,20 @@
5
5
  */
6
6
  export declare class MountTrackerUtil {
7
7
  private constructor();
8
- static mountedNodes: Set<string>;
8
+ private static _mountedCounts;
9
9
  private static _unmountCallCount;
10
10
  /**
11
- * Tracks a node as mounted. Adds its stable key and a WeakRef to the node to the map of mounted nodes.
11
+ * Checks if a node is currently mounted.
12
+ */
13
+ static isMounted(key: string): boolean;
14
+ /**
15
+ * Tracks a node as mounted. Increments the reference count for the stable key.
12
16
  */
13
17
  static trackMount(key: string): void;
14
18
  /**
15
- * Removes its stable key from the set of mounted nodes.
16
- * In development mode, it also tracks multiple unmount calls for debugging purposes.
17
- * @returns True if the node was previously tracked as mounted and is now removed, false otherwise.
19
+ * Decrements the reference count for the stable key.
20
+ * If the count reaches zero, the node is considered fully unmounted.
21
+ * @returns True if the node is still mounted (count > 0), false if fully unmounted.
18
22
  */
19
23
  static untrackMount(key: string): boolean;
20
24
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mount-tracker.util.d.ts","sourceRoot":"","sources":["../../../src/util/mount-tracker.util.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,eAAiB;IAExB,OAAc,YAAY,cAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA4B;IAE5D;;OAEG;IACH,OAAc,UAAU,CAAC,GAAG,EAAE,MAAM,QAMnC;IAED;;;;OAIG;IACH,OAAc,YAAY,CAAC,GAAG,EAAE,MAAM,WAerC;IAED;;;OAGG;IACH,OAAc,OAAO,SAMpB;CACF"}
1
+ {"version":3,"file":"mount-tracker.util.d.ts","sourceRoot":"","sources":["../../../src/util/mount-tracker.util.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,eAAiB;IAExB,OAAO,CAAC,MAAM,CAAC,cAAc,CAA4B;IACzD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAA4B;IAE5D;;OAEG;IACH,OAAc,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE5C;IAED;;OAEG;IACH,OAAc,UAAU,CAAC,GAAG,EAAE,MAAM,QAOnC;IAED;;;;OAIG;IACH,OAAc,YAAY,CAAC,GAAG,EAAE,MAAM,WAsBrC;IAED;;;OAGG;IACH,OAAc,OAAO,SAMpB;CACF"}
@@ -1 +1 @@
1
- import{__DEBUG__ as t}from"../constant/common.const.js";class n{constructor(){}static mountedNodes=new Set;static _unmountCallCount=new Map;static trackMount(n){this.mountedNodes.add(n),t&&this._unmountCallCount.delete(n)}static untrackMount(n){const o=this.mountedNodes.delete(n);if(t&&!o){const t=(this._unmountCallCount.get(n)||0)+1;this._unmountCallCount.set(n,t),t>1&&console.warn(`[MeoNode] untrackMount called ${t} times for an already unmounted node: ${n}. This could indicate a memory leak or a bug in a component's lifecycle.`)}return o}static cleanup(){this.mountedNodes.clear(),t&&this._unmountCallCount.clear()}}export{n as MountTrackerUtil};
1
+ import{__DEBUG__ as t}from"../constant/common.const.js";class n{constructor(){}static _mountedCounts=new Map;static _unmountCallCount=new Map;static isMounted(t){return(this._mountedCounts.get(t)||0)>0}static trackMount(n){const o=this._mountedCounts.get(n)||0;this._mountedCounts.set(n,o+1),t&&this._unmountCallCount.delete(n)}static untrackMount(n){const o=this._mountedCounts.get(n)||0;if(o>0){const t=o-1;return 0===t?this._mountedCounts.delete(n):this._mountedCounts.set(n,t),t>0}if(t){const t=(this._unmountCallCount.get(n)||0)+1;this._unmountCallCount.set(n,t),t>1&&console.warn(`[MeoNode] untrackMount called ${t} times for an already unmounted node: ${n}. This could indicate a memory leak or a bug in a component's lifecycle.`)}return!1}static cleanup(){this._mountedCounts.clear(),t&&this._unmountCallCount.clear()}}export{n as MountTrackerUtil};
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-cache-manager.util.d.ts","sourceRoot":"","sources":["../../../src/util/navigation-cache-manager.util.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC,CAAC;IACd,UAAU,MAAM;QACd,4BAA4B,CAAC,EAAE,OAAO,CAAA;KACvC;CACF;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,eAAiB;IAExB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA0C;IAClE,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAwC;IACzE,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA2C;IAC/E,OAAO,CAAC,MAAM,CAAC,UAAU,CAAQ;IAEjC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAc,WAAW,IAAI,0BAA0B,CAKtD;IAED;;OAEG;IACI,KAAK,SAaX;IAED;;;OAGG;IACH,OAAO,CAAC,KAAK;IAkBb;;OAEG;IACH,OAAO,CAAC,iBAAiB,CA4BxB;IAED;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAW1B"}
1
+ {"version":3,"file":"navigation-cache-manager.util.d.ts","sourceRoot":"","sources":["../../../src/util/navigation-cache-manager.util.ts"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC,CAAC;IACd,UAAU,MAAM;QACd,4BAA4B,CAAC,EAAE,OAAO,CAAA;KACvC;CACF;AAED;;GAEG;AACH,qBAAa,0BAA0B;IACrC,OAAO,eAAiB;IAExB,OAAO,CAAC,MAAM,CAAC,SAAS,CAA0C;IAClE,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAwC;IACzE,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA2C;IAC/E,OAAO,CAAC,MAAM,CAAC,UAAU,CAAQ;IAEjC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAc,WAAW,IAAI,0BAA0B,CAKtD;IAED;;OAEG;IACI,KAAK,SAaX;IAED;;;OAGG;IACH,OAAO,CAAC,KAAK;IAkBb;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAsBxB;IAED;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmB5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAW1B"}
@@ -1 +1 @@
1
- import{__DEBUG__ as t}from"../constant/common.const.js";import{BaseNode as e}from"../core.node.js";import{MountTrackerUtil as i}from"./mount-tracker.util.js";class a{constructor(){}static _instance=null;static _originalPushState=null;static _originalReplaceState=null;static _isPatched=!1;_isListening=!1;_cleanupTimeout=null;static getInstance(){return this._instance||(this._instance=new a),this._instance}start(){this._isListening||"undefined"==typeof window||(this._isListening=!0,window.addEventListener("popstate",this._handleNavigation),this._patchHistoryMethods(),this._setupAutoCleanup(),t&&console.log("[MeoNode] NavigationCacheManagerUtil started"))}_stop(){this._isListening&&"undefined"!=typeof window&&(window.removeEventListener("popstate",this._handleNavigation),this._cleanupTimeout&&(clearTimeout(this._cleanupTimeout),this._cleanupTimeout=null),this._isListening=!1,t&&console.log("[MeoNode] NavigationCacheManagerUtil stopped"))}_handleNavigation=()=>{this._cleanupTimeout&&clearTimeout(this._cleanupTimeout);const a=e.elementCache.size,n=a<100?50:a<500?100:200;this._cleanupTimeout=setTimeout(()=>{const a=e.propProcessingCache.size;let n=0;e.elementCache.keys().forEach(t=>{i.mountedNodes.has(t)||(e.elementCache.delete(t),n++)}),a>200&&e.propProcessingCache.clear(),t&&console.log(`[MeoNode] Navigation: cleared ${n} unmounted elements, ${a} props entries`)},n)};_patchHistoryMethods(){a._isPatched||(a._originalPushState=history.pushState,a._originalReplaceState=history.replaceState,history.pushState=(...t)=>{a._originalPushState.apply(history,t),this._handleNavigation()},history.replaceState=(...t)=>{a._originalReplaceState.apply(history,t),this._handleNavigation()},a._isPatched=!0)}_setupAutoCleanup(){window.__MEONODE_CLEANUP_REGISTERED||(window.addEventListener("beforeunload",()=>{this._stop(),e.clearCaches()}),window.__MEONODE_CLEANUP_REGISTERED=!0)}}export{a as NavigationCacheManagerUtil};
1
+ import{__DEBUG__ as t}from"../constant/common.const.js";import{BaseNode as e}from"../core.node.js";import{MountTrackerUtil as i}from"./mount-tracker.util.js";class a{constructor(){}static _instance=null;static _originalPushState=null;static _originalReplaceState=null;static _isPatched=!1;_isListening=!1;_cleanupTimeout=null;static getInstance(){return this._instance||(this._instance=new a),this._instance}start(){this._isListening||"undefined"==typeof window||(this._isListening=!0,window.addEventListener("popstate",this._handleNavigation),this._patchHistoryMethods(),this._setupAutoCleanup(),t&&console.log("[MeoNode] NavigationCacheManagerUtil started"))}_stop(){this._isListening&&"undefined"!=typeof window&&(window.removeEventListener("popstate",this._handleNavigation),this._cleanupTimeout&&(clearTimeout(this._cleanupTimeout),this._cleanupTimeout=null),this._isListening=!1,t&&console.log("[MeoNode] NavigationCacheManagerUtil stopped"))}_handleNavigation=()=>{this._cleanupTimeout&&clearTimeout(this._cleanupTimeout);const a=e.elementCache.size,n=a<100?50:a<500?100:200;this._cleanupTimeout=setTimeout(()=>{let a=0;e.elementCache.keys().forEach(t=>{i.isMounted(t)||(e.elementCache.delete(t),a++)}),t&&console.log(`[MeoNode] Navigation: cleared ${a} unmounted elements`)},n)};_patchHistoryMethods(){a._isPatched||(a._originalPushState=history.pushState,a._originalReplaceState=history.replaceState,history.pushState=(...t)=>{a._originalPushState.apply(history,t),this._handleNavigation()},history.replaceState=(...t)=>{a._originalReplaceState.apply(history,t),this._handleNavigation()},a._isPatched=!0)}_setupAutoCleanup(){window.__MEONODE_CLEANUP_REGISTERED||(window.addEventListener("beforeunload",()=>{this._stop(),e.clearCaches()}),window.__MEONODE_CLEANUP_REGISTERED=!0)}}export{a as NavigationCacheManagerUtil};
@@ -10,12 +10,15 @@ import { type Root } from 'react-dom/client';
10
10
  export declare class NodeUtil {
11
11
  private constructor();
12
12
  static isServer: boolean;
13
- private static _functionSignatureCache;
14
- private static readonly CACHE_SIZE_LIMIT = 500;
15
- private static readonly CACHE_CLEANUP_BATCH = 50;
16
- private static _cssCache;
13
+ private static get _functionSignatureCache();
17
14
  private static readonly CRITICAL_PROPS;
18
- static portalInfrastructure: WeakMap<NodeInstance, {
15
+ /**
16
+ * Portal infrastructure using WeakMap for memory-safe management.
17
+ * Stores the DOM element and React root associated with a NodeInstance.
18
+ * @internal
19
+ */
20
+ static get portalInfrastructure(): WeakMap<NodeInstance, {
21
+ instanceId: string;
19
22
  domElement: HTMLDivElement;
20
23
  reactRoot: NodePortal & {
21
24
  render(children: ReactNode): void;
@@ -48,6 +51,12 @@ export declare class NodeUtil {
48
51
  * @returns A combined hash string in base-36 format.
49
52
  */
50
53
  static hashString(str: string): string;
54
+ /**
55
+ * Generates a fast structural hash for CSS objects without full serialization.
56
+ * This is an optimized hashing method that samples the first 10 keys for performance.
57
+ * @param css The CSS object to hash.
58
+ * @returns A hash string representing the CSS object structure.
59
+ */
51
60
  /**
52
61
  * Generates a fast structural hash for CSS objects without full serialization.
53
62
  * This is an optimized hashing method that samples the first 10 keys for performance.
@@ -76,32 +85,6 @@ export declare class NodeUtil {
76
85
  * @returns An object containing only the critical props with an added count property.
77
86
  */
78
87
  static extractCriticalProps(props: Record<string, unknown>, keys: string[]): Record<string, unknown>;
79
- /**
80
- * Retrieves computed CSS props from the cache with LRU tracking.
81
- * Access time and hit count are tracked for smarter eviction.
82
- * Falls back to direct computation if no signature is provided or running on server.
83
- * @param cacheableProps The props to compute CSS properties from.
84
- * @param signature The cache signature to use for lookup.
85
- * @returns An object containing the CSS props.
86
- */
87
- static getCachedCssProps(cacheableProps: Record<string, unknown>, signature?: string): {
88
- cssProps: Record<string, unknown>;
89
- };
90
- /**
91
- * Implements an LRU eviction strategy that removes multiple entries at once.
92
- * It uses a scoring system where older and less frequently used entries have a higher eviction priority.
93
- * This batch eviction approach improves performance by avoiding frequent cache cleanup operations.
94
- */
95
- private static _evictLRUEntries;
96
- /**
97
- * Calculates an eviction score based on age and frequency of access.
98
- * Higher scores mean more likelihood to be evicted.
99
- * The scoring system uses weighted factors: 30% recency and 70% frequency.
100
- * @param value The cache entry to score.
101
- * @param now The current timestamp for calculating age.
102
- * @returns A numeric score representing how likely the entry should be evicted.
103
- */
104
- private static _calculateEvictionScore;
105
88
  /**
106
89
  * The main prop processing pipeline. It separates cacheable and non-cacheable props,
107
90
  * generates a signature for caching, and assembles the final props object.
@@ -111,7 +94,7 @@ export declare class NodeUtil {
111
94
  * @param stableKey The stable key used for child normalization (optional).
112
95
  * @returns The processed props object ready for rendering.
113
96
  */
114
- static processProps(element: NodeElementType, rawProps?: Partial<NodeProps<NodeElementType>>, stableKey?: string): FinalNodeProps;
97
+ static processProps(_element: NodeElementType, rawProps?: Partial<NodeProps<NodeElementType>>, stableKey?: string): FinalNodeProps;
115
98
  /**
116
99
  * Processes and normalizes children of the node.
117
100
  * Converts raw children (React elements, primitives, or other BaseNodes) into a consistent format.
@@ -1 +1 @@
1
- {"version":3,"file":"node.util.d.ts","sourceRoot":"","sources":["../../../src/util/node.util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.util.d.ts","sourceRoot":"","sources":["../../../src/util/node.util.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import e,{isValidElement as t,createElement as r}from"react";import{isReactClassComponent as o,isMemo as s,isForwardRef as n}from"../helper/react-is.helper.js";import{getElementTypeName as i,getCSSProps as c,omitUndefined as a,getDOMProps as l}from"../helper/common.helper.js";import{__DEBUG__ as p}from"../constant/common.const.js";import{BaseNode as d}from"../core.node.js";import{createRoot as u}from"react-dom/client";class h{constructor(){}static isServer="undefined"==typeof window;static _functionSignatureCache=new WeakMap;static CACHE_SIZE_LIMIT=500;static CACHE_CLEANUP_BATCH=50;static _cssCache=new WeakMap;static CRITICAL_PROPS=new Set(["css","className","disableEmotion","props"]);static portalInfrastructure=new WeakMap;static isNodeInstance=e=>"object"==typeof e&&null!==e&&"element"in e&&"function"==typeof e.render&&"function"==typeof e.toPortal&&"isBaseNode"in e;static isStyleProp=h.isServer||"undefined"==typeof document?()=>!1:e=>e in document.body.style;static hashString(e){let t=2166136261,r=5381;for(let o=0;o<e.length;o++){const s=e.charCodeAt(o);t^=s,t=Math.imul(t,16777619),r=33*r^s}return`${(t>>>0).toString(36)}_${(r>>>0).toString(36)}`}static hashCSS(e){const t=this._cssCache.get(e);if(t)return t;const r=Object.keys(e);let o=r.length;for(let t=0;t<Math.min(r.length,10);t++){const s=r[t],n=e[s];o=(o<<5)-o+s.charCodeAt(0),o&=o,"string"==typeof n&&(o=(o<<5)-o+n.length)}const s=o.toString(36);return this._cssCache.set(e,s),s}static createPropSignature(e,t){if(h.isServer)return;const r=i(e),o=Object.keys(t);o.length>1&&o.sort();const s=[`${r}:`];if("function"==typeof e){let t=h._functionSignatureCache.get(e);t||(t=h.hashString(e.toString()),h._functionSignatureCache.set(e,t)),s.push(t)}for(const e of o){const r=t[e];let o;const n=typeof r;if("string"===n||"number"===n||"boolean"===n)o=`${e}:${r};`;else if(null===r)o=`${e}:null;`;else if(void 0===r)o=`${e}:undefined;`;else if("css"===e&&"object"==typeof r)o=`css:${this.hashCSS(r)};`;else if(Array.isArray(r)){const t=r.filter(e=>{const t=typeof e;return"string"===t||"number"===t||"boolean"===t||null===e});o=t.length===r.length?`${e}:[${t.join(",")}];`:`${e}:[${r.length}];`}else if(r&&r.isBaseNode)o=`${e}:${r.stableKey};`;else{o=`${e}:{${Object.keys(r).sort().join(",")}};`}s.push(o)}return h.hashString(s.join(","))}static extractCriticalProps(e,t){const r={_keyCount:t.length};let o=0;for(const s of t){if(o>=50)break;if(h.CRITICAL_PROPS.has(s)){r[s]=e[s],o++;continue}const n=s.charCodeAt(0);111!==n||110!==s.charCodeAt(1)?!(97===n&&114===s.charCodeAt(1)&&105===s.charCodeAt(2)&&97===s.charCodeAt(3)||100===n&&97===s.charCodeAt(1)&&116===s.charCodeAt(2)&&97===s.charCodeAt(3))?t.length<=100&&h.isStyleProp(s)&&(r[s]=e[s],o++):(r[s]=e[s],o++):(r[s]=e[s],o++)}return r}static getCachedCssProps(e,t){if(h.isServer||!t)return{cssProps:c(e)};const r=d.propProcessingCache.get(t);if(r)return r.lastAccess=Date.now(),r.hitCount++,{cssProps:r.cssProps};const o=c(e);return d.propProcessingCache.set(t,{cssProps:o,signature:t,lastAccess:Date.now(),hitCount:1}),d.propProcessingCache.size>h.CACHE_SIZE_LIMIT&&!d.scheduledCleanup&&(d.scheduledCleanup=!0,"undefined"!=typeof requestIdleCallback?requestIdleCallback(()=>{h._evictLRUEntries(),d.scheduledCleanup=!1},{timeout:2e3}):setTimeout(()=>{h._evictLRUEntries(),d.scheduledCleanup=!1},100)),{cssProps:o}}static _evictLRUEntries(){const e=Date.now(),t=new f((e,t)=>t.score-e.score);for(const[r,o]of d.propProcessingCache.entries()){const s=this._calculateEvictionScore(o,e);t.push({key:r,score:s})}for(let e=0;e<h.CACHE_CLEANUP_BATCH;e++){const e=t.pop();if(!e)break;d.propProcessingCache.delete(e.key)}}static _calculateEvictionScore(e,t){return(t-e.lastAccess)/1e3*.3+1e3/(e.hitCount+1)*.7}static processProps(e,t={},r){const{ref:o,key:s,children:n,css:i,props:p={},disableEmotion:d,...u}=t;if(0===Object.keys(u).length&&!i)return a({ref:o,key:s,disableEmotion:d,nativeProps:a(p),children:h._processChildren(n,d)});const f={},m={},y=Object.keys(u);for(let e=0;e<y.length;e++){const t=y[e],r=u[t],o=typeof r;"string"===o||"number"===o||"boolean"===o?f[t]=r:m[t]=r}const C=h.createPropSignature(e,f),{cssProps:b}=h.getCachedCssProps(f,C),g=c(m),E=l(u),P={...b,...g,...i},w=h._processChildren(n,d,r);return a({ref:o,key:s,css:P,...E,disableEmotion:d,nativeProps:a(p),children:w})}static _processChildren(e,t,r){if(e)return"function"==typeof e?e:Array.isArray(e)?1===e.length?h.processRawNode(e[0],t,`${r}_0`):e.map((e,o)=>h.processRawNode(e,t,`${r}_${o}`)):h.processRawNode(e,t,r)}static shouldCacheElement(e){return!h.isServer&&!!e.stableKey&&!!e.dependencies}static shouldNodeUpdate(e,t,r){return!!h.isServer||!r&&(void 0===t||(void 0===e||(t.length!==e.length||!!t.some((t,r)=>!Object.is(t,e[r])))))}static processRawNode(r,i,c){if(null==r||"string"==typeof r||"number"==typeof r||"boolean"==typeof r)return r;if(h.isNodeInstance(r)){if(c||i&&!r.rawProps.disableEmotion){const e=new d(r.element,r.rawProps,r.dependencies);return e.stableKey=`${c}:${e.stableKey}`,i&&!e.rawProps.disableEmotion&&(e.rawProps.disableEmotion=!0),e}return r}if(h.isFunctionChild(r))return new d(h.functionRenderer,{props:{render:r,disableEmotion:i}},void 0);if(t(r)){const{style:e,...t}=r.props,o={...t,...e||{}};return new d(r.type,{...o,...null!==r.key&&void 0!==r.key?{key:r.key}:{},disableEmotion:i},void 0)}return o(r)||s(r)||n(r)?new d(r,{disableEmotion:i},void 0):r instanceof e.Component?h.processRawNode(r.render(),i,c):r}static isFunctionChild(e){if("function"!=typeof e||o(e)||s(e)||n(e))return!1;try{return!(e.prototype&&"function"==typeof e.prototype.render)}catch(e){return p&&console.error("MeoNode: Error checking if a node is a function child.",e),!0}}static functionRenderer({render:t,disableEmotion:r}){let o;try{o=t()}catch(e){p&&console.error("MeoNode: Error executing function-as-a-child.",e),o=null}if(null==o)return o;if(h.isNodeInstance(o))return r&&!o.rawProps.disableEmotion?new d(o.element,{...o.rawProps,disableEmotion:!0}).render():o.render();if(Array.isArray(o)){const e=(e,t)=>{try{return`${i(e)}-${t}`}catch(e){return p&&console.error("MeoNode: Could not determine element type name for key in function-as-a-child.",e),`item-${t}`}};return o.map((t,o)=>h.renderProcessedNode({processedElement:h.processRawNode(t,r),passedKey:e(t,o),disableEmotion:r}))}if(o instanceof e.Component)return h.renderProcessedNode({processedElement:h.processRawNode(o.render(),r),disableEmotion:r});if("string"==typeof o||"number"==typeof o||"boolean"==typeof o)return o;const s=h.processRawNode(o,r);return s?h.renderProcessedNode({processedElement:s,disableEmotion:r}):o}static renderProcessedNode({processedElement:t,passedKey:s,disableEmotion:n}){const i={};if(void 0!==s&&(i.key=s),h.isNodeInstance(t)){const e=t.rawProps?.key;return t.rawProps.disableEmotion=n,e===s?t.render():new d(t.element,{...t.rawProps,...i}).render()}return o(t)?new d(t,{...i,disableEmotion:n}).render():t instanceof e.Component?t.render():"function"==typeof t?r(t,{key:s}):t}static ensurePortalInfrastructure(e){if(h.isServer)return!1;let t=h.portalInfrastructure.get(e);if(t?.domElement?.isConnected&&t?.reactRoot)return!0;if(t&&(!t.domElement?.isConnected||!t.reactRoot)){try{t.reactRoot?.unmount?.()}catch(e){p&&console.error("MeoNode: Error unmounting stale portal root.",e)}h.cleanupPortalInfra(t),h.portalInfrastructure.delete(e),t=void 0}const r=document.createElement("div");document.body.appendChild(r);const o=u(r),s={render:o.render.bind(o),unmount:o.unmount.bind(o),update:()=>{}};return t={domElement:r,reactRoot:s},h.portalInfrastructure.set(e,t),d.portalCleanupRegistry.register(e,{domElement:r,reactRoot:s},e),!0}static cleanupPortalInfra(e){try{e.reactRoot?.unmount&&e.reactRoot.unmount()}catch(e){p&&console.error("Portal cleanup error:",e)}try{e.domElement?.isConnected&&e.domElement.remove()}catch(e){p&&console.error("DOM removal error:",e)}}}class f{heap=[];comparator;constructor(e){this.comparator=e}size(){return this.heap.length}isEmpty(){return 0===this.size()}push(e){this.heap.push(e),this.bubbleUp()}pop(){if(this.isEmpty())return;this.swap(0,this.size()-1);const e=this.heap.pop();return this.bubbleDown(),e}bubbleUp(e=this.size()-1){for(;e>0;){const t=Math.floor((e-1)/2);if(this.comparator(this.heap[t],this.heap[e])<=0)break;this.swap(t,e),e=t}}bubbleDown(e=0){const t=this.size()-1;for(;;){const r=2*e+1,o=2*e+2;let s=e;if(r<=t&&this.comparator(this.heap[r],this.heap[s])<0&&(s=r),o<=t&&this.comparator(this.heap[o],this.heap[s])<0&&(s=o),s===e)break;this.swap(e,s),e=s}}swap(e,t){[this.heap[e],this.heap[t]]=[this.heap[t],this.heap[e]]}}export{h as NodeUtil};
1
+ import e,{isValidElement as t,createElement as r}from"react";import{isReactClassComponent as o,isMemo as n,isForwardRef as s}from"../helper/react-is.helper.js";import{getGlobalState as i,getElementTypeName as c,omitUndefined as a,getCSSProps as l,getDOMProps as d}from"../helper/common.helper.js";import{__DEBUG__ as u}from"../constant/common.const.js";import{BaseNode as p}from"../core.node.js";import{createRoot as f}from"react-dom/client";const m=Symbol.for("@meonode/ui/NodeUtil/functionSignatureCache"),h=Symbol.for("@meonode/ui/NodeUtil/portalInfrastructure");class y{constructor(){}static isServer="undefined"==typeof window;static get _functionSignatureCache(){return i(m,()=>new WeakMap)}static CRITICAL_PROPS=new Set(["css","className","disableEmotion","props"]);static get portalInfrastructure(){return i(h,()=>new WeakMap)}static isNodeInstance=e=>"object"==typeof e&&null!==e&&"element"in e&&"function"==typeof e.render&&"function"==typeof e.toPortal&&"isBaseNode"in e;static isStyleProp=y.isServer||"undefined"==typeof document?()=>!1:e=>e in document.body.style;static hashString(e){let t=2166136261,r=5381;for(let o=0;o<e.length;o++){const n=e.charCodeAt(o);t^=n,t=Math.imul(t,16777619),r=33*r^n}return`${(t>>>0).toString(36)}_${(r>>>0).toString(36)}`}static hashCSS(e){const t=Object.keys(e);let r=t.length;for(let o=0;o<Math.min(t.length,10);o++){const n=t[o],s=e[n];r=(r<<5)-r+n.charCodeAt(0),r&=r,"string"==typeof s&&(r=(r<<5)-r+s.length)}return r.toString(36)}static createPropSignature(e,t){if(y.isServer)return;const r=c(e),o=Object.keys(t);o.length>1&&o.sort();const n=[`${r}:`];if("function"==typeof e){let t=y._functionSignatureCache.get(e);t||(t=y.hashString(e.toString()),y._functionSignatureCache.set(e,t)),n.push(t)}for(const e of o){const r=t[e];let o;const s=typeof r;if("string"===s||"number"===s||"boolean"===s)o=`${e}:${r};`;else if(null===r)o=`${e}:null;`;else if(void 0===r)o=`${e}:undefined;`;else if("css"===e&&"object"==typeof r)o=`css:${this.hashCSS(r)};`;else if(Array.isArray(r)){const t=r.filter(e=>{const t=typeof e;return"string"===t||"number"===t||"boolean"===t||null===e});o=t.length===r.length?`${e}:[${t.join(",")}];`:`${e}:[${r.length}];`}else if(r&&r.isBaseNode)o=`${e}:${r.stableKey};`;else if("function"===s)o=`${e}:${y.hashString(r.toString())};`;else{o=`${e}:{${Object.keys(r).sort().join(",")}};`}n.push(o)}return y.hashString(n.join(","))}static extractCriticalProps(e,t){const r={_keyCount:t.length};let o=0;for(const n of t){if(o>=50)break;if(y.CRITICAL_PROPS.has(n)){r[n]=e[n],o++;continue}const s=n.charCodeAt(0);111!==s||110!==n.charCodeAt(1)?!(97===s&&114===n.charCodeAt(1)&&105===n.charCodeAt(2)&&97===n.charCodeAt(3)||100===s&&97===n.charCodeAt(1)&&116===n.charCodeAt(2)&&97===n.charCodeAt(3))?t.length<=100&&y.isStyleProp(n)&&(r[n]=e[n],o++):(r[n]=e[n],o++):(r[n]=e[n],o++)}return r}static processProps(e,t={},r){const{ref:o,key:n,children:s,css:i,props:c={},disableEmotion:u,...p}=t;if(0===Object.keys(p).length&&!i)return a({ref:o,key:n,disableEmotion:u,nativeProps:a(c),children:y._processChildren(s,u)});const f={},m={},h=Object.keys(p);for(let e=0;e<h.length;e++){const t=h[e],r=p[t],o=typeof r;"string"===o||"number"===o||"boolean"===o?f[t]=r:m[t]=r}const{cssProps:b}={cssProps:l(f)},g=l(m),C=d(p),E={...b,...g,...i},P=y._processChildren(s,u,r);return a({ref:o,key:n,css:E,...C,disableEmotion:u,nativeProps:a(c),children:P})}static _processChildren(e,t,r){if(e)return"function"==typeof e?e:Array.isArray(e)?1===e.length?y.processRawNode(e[0],t,`${r}_0`):e.map((e,o)=>y.processRawNode(e,t,`${r}_${o}`)):y.processRawNode(e,t,r)}static shouldCacheElement(e){return!y.isServer&&!!e.stableKey&&!!e.dependencies}static shouldNodeUpdate(e,t,r){return!!y.isServer||!r&&(void 0===t||(void 0===e||(t.length!==e.length||!!t.some((t,r)=>!Object.is(t,e[r])))))}static processRawNode(r,i,c){if(null==r||"string"==typeof r||"number"==typeof r||"boolean"==typeof r)return r;if(y.isNodeInstance(r)){if(c||i&&!r.rawProps.disableEmotion){const e=new p(r.element,r.rawProps,r.dependencies);return e.stableKey=`${c}:${e.stableKey}`,i&&!e.rawProps.disableEmotion&&(e.rawProps.disableEmotion=!0),e}return r}if(y.isFunctionChild(r))return new p(y.functionRenderer,{props:{render:r,disableEmotion:i}},void 0);if(t(r)){const{style:e,...t}=r.props,o={...t,...e||{}};return new p(r.type,{...o,...null!==r.key&&void 0!==r.key?{key:r.key}:{},disableEmotion:i},void 0)}return o(r)||n(r)||s(r)?new p(r,{disableEmotion:i},void 0):r instanceof e.Component?y.processRawNode(r.render(),i,c):r}static isFunctionChild(e){if("function"!=typeof e||o(e)||n(e)||s(e))return!1;try{return!(e.prototype&&"function"==typeof e.prototype.render)}catch(e){return u&&console.error("MeoNode: Error checking if a node is a function child.",e),!0}}static functionRenderer({render:t,disableEmotion:r}){let o;try{o=t()}catch(e){u&&console.error("MeoNode: Error executing function-as-a-child.",e),o=null}if(null==o)return o;if(y.isNodeInstance(o))return r&&!o.rawProps.disableEmotion?new p(o.element,{...o.rawProps,disableEmotion:!0}).render():o.render();if(Array.isArray(o)){const e=(e,t)=>{try{return`${c(e)}-${t}`}catch(e){return u&&console.error("MeoNode: Could not determine element type name for key in function-as-a-child.",e),`item-${t}`}};return o.map((t,o)=>y.renderProcessedNode({processedElement:y.processRawNode(t,r),passedKey:e(t,o),disableEmotion:r}))}if(o instanceof e.Component)return y.renderProcessedNode({processedElement:y.processRawNode(o.render(),r),disableEmotion:r});if("string"==typeof o||"number"==typeof o||"boolean"==typeof o)return o;const n=y.processRawNode(o,r);return n?y.renderProcessedNode({processedElement:n,disableEmotion:r}):o}static renderProcessedNode({processedElement:t,passedKey:n,disableEmotion:s}){const i={};if(void 0!==n&&(i.key=n),y.isNodeInstance(t)){const e=t.rawProps?.key;return t.rawProps.disableEmotion=s,e===n?t.render():new p(t.element,{...t.rawProps,...i}).render()}return o(t)?new p(t,{...i,disableEmotion:s}).render():t instanceof e.Component?t.render():"function"==typeof t?r(t,{key:n}):t}static ensurePortalInfrastructure(e){if(y.isServer)return!1;let t=y.portalInfrastructure.get(e);if(t?.domElement?.isConnected&&t?.reactRoot)return!0;if(t&&(!t.domElement?.isConnected||!t.reactRoot)){try{t.reactRoot?.unmount?.()}catch(e){u&&console.error("MeoNode: Error unmounting stale portal root.",e)}y.cleanupPortalInfra(t),y.portalInfrastructure.delete(e),t=void 0}const r=document.createElement("div");document.body.appendChild(r);const o=f(r),n={render:o.render.bind(o),unmount:o.unmount.bind(o),update:()=>{}};return t={domElement:r,reactRoot:n,instanceId:e.instanceId},y.portalInfrastructure.set(e,t),p.portalCleanupRegistry.register(e,{domElement:r,reactRoot:n},e),!0}static cleanupPortalInfra(e){try{e.reactRoot?.unmount&&e.reactRoot.unmount()}catch(e){u&&console.error("Portal cleanup error:",e)}try{e.domElement?.isConnected&&e.domElement.remove()}catch(e){u&&console.error("DOM removal error:",e)}}}export{y as NodeUtil};
@@ -6,7 +6,6 @@ interface FlexComponents {
6
6
  basis: string | number;
7
7
  }
8
8
  export declare class ThemeUtil {
9
- private static themeCache;
10
9
  private constructor();
11
10
  /**
12
11
  * Parses a CSS flex shorthand property into its individual components.
@@ -40,7 +39,6 @@ export declare class ThemeUtil {
40
39
  static resolveObjWithTheme: <O extends Record<string, unknown>>(obj: O, theme?: Theme | undefined, options?: {
41
40
  processFunctions?: boolean | undefined;
42
41
  }) => O;
43
- static clearThemeCache: () => void;
44
42
  /**
45
43
  * Resolves default CSS styles to fix common flexbox layout issues.
46
44
  *
@@ -1 +1 @@
1
- {"version":3,"file":"theme.util.d.ts","sourceRoot":"","sources":["../../../src/util/theme.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAe,MAAM,yBAAyB,CAAA;AA+F1E,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAmC;IAE5D,OAAO,eAAiB;IAExB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAc,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,cAAc,GAAG,IAAI,CA2BnF;IAED,OAAc,aAAa,uDAM1B;IAED;;;;;;;;OAQG;IACH,OAAc,mBAAmB,GAAI,CAAC;;YA0HrC;IAED,OAAc,eAAe,aAE5B;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACH,OAAc,mBAAmB,yBAmEhC;CACF"}
1
+ {"version":3,"file":"theme.util.d.ts","sourceRoot":"","sources":["../../../src/util/theme.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAG7D,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,qBAAa,SAAS;IACpB,OAAO,eAAiB;IAExB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAc,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,cAAc,GAAG,IAAI,CA2BnF;IAED,OAAc,aAAa,uDAM1B;IAED;;;;;;;;OAQG;IACH,OAAc,mBAAmB,GAAI,CAAC;;YA4GrC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACH,OAAc,mBAAmB,yBAmEhC;CACF"}
@@ -1 +1 @@
1
- import{ObjHelper as e}from"../helper/obj.helper.js";import{getValueByPath as t}from"../helper/common.helper.js";class s{static _instance=null;CACHE_SIZE_LIMIT=500;CACHE_EVICTION_BATCH_SIZE=50;_resolutionCache=new Map;_pathLookupCache=new Map;_themeRegex=/theme\.([a-zA-Z0-9_.-]+)/g;static getInstance(){return s._instance||(s._instance=new s),s._instance}getResolution(e,t){const s=this._generateCacheKey(e,t),r=this._resolutionCache.get(s);return r&&(this._resolutionCache.delete(s),this._resolutionCache.set(s,r)),r||null}setResolution(e,t,s){const r=this._generateCacheKey(e,t);this._resolutionCache.set(r,s),this._resolutionCache.size>this.CACHE_SIZE_LIMIT&&this._evict(this._resolutionCache)}getPathLookup(t,s){const r=`${e.stringify(t)}_${s}`,n=this._pathLookupCache.get(r);return n&&(this._pathLookupCache.delete(r),this._pathLookupCache.set(r,n)),n??null}setPathLookup(t,s,r){const n=`${e.stringify(t)}_${s}`;this._pathLookupCache.set(n,r),this._pathLookupCache.size>this.CACHE_SIZE_LIMIT&&this._evict(this._pathLookupCache)}getThemeRegex(){return this._themeRegex.lastIndex=0,this._themeRegex}shouldCache(){return"undefined"==typeof window}clear(){this._resolutionCache.clear(),this._pathLookupCache.clear()}_generateCacheKey(t,s){return`${e.stringify(t)}_${s.mode}_${e.stringify(s.system)}`}_evict(e){const t=e.keys();for(let s=0;s<this.CACHE_EVICTION_BATCH_SIZE;s++){const s=t.next().value;if(!s)break;e.delete(s)}}}class r{static themeCache=s.getInstance();constructor(){}static parseFlexShorthand(e){if(null==e)return null;if("number"==typeof e)return{grow:e,shrink:1,basis:"0%"};if("string"!=typeof e)return null;const t=e.trim().toLowerCase();if(!t)return null;switch(t){case"none":return{grow:0,shrink:0,basis:"auto"};case"auto":return{grow:1,shrink:1,basis:"auto"};case"initial":return{grow:0,shrink:1,basis:"auto"};default:return null}}static isPlainObject=e=>{if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};static resolveObjWithTheme=(e,s,n={})=>{const{processFunctions:o=!1}=n;if(!s||!s.system||"object"!=typeof s.system||0===Object.keys(s.system).length||!e||0===Object.keys(e).length)return e;const i=s.system;if(r.themeCache.shouldCache()){const t=r.themeCache.getResolution(e,s);if(null!==t)return t}const l=[{value:e,isProcessed:!1}],a=new Map,h=new Set,c=e=>{const s=r.themeCache.getThemeRegex();let n=!1;const o=e.replace(s,(e,s)=>{let o=r.themeCache.getPathLookup(i,s);if(null===o&&(o=t(i,s),r.themeCache.setPathLookup(i,s,o)),null!=o){if(n=!0,"object"==typeof o){if(!Array.isArray(o)&&"default"in o)return o.default;throw new Error("The provided theme path is invalid!")}return o}return e});return n?o:e};for(;l.length>0;){const e=l[l.length-1],t=e.value;if(r.isPlainObject(t)||Array.isArray(t))if(a.has(t))l.pop();else if(e.isProcessed){l.pop(),h.delete(t);let e=t;if(Array.isArray(t)){let s=null;for(let e=0;e<t.length;e++){const r=t[e],n=a.get(r)??r;n!==r&&(null===s&&(s=[...t]),s[e]=n)}null!==s&&(e=s)}else{let r=null;for(const e in t)if(Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];let i=a.get(n)??n;if("function"==typeof i&&o){const e=i(s);i="string"==typeof e&&e.includes("theme.")?c(e):e}else"string"==typeof i&&i.includes("theme.")&&(i=c(i));i!==n&&(null===r&&(r={...t}),r[e]=i)}null!==r&&(e=r)}a.set(t,e)}else{e.isProcessed=!0,h.add(t);const s=Array.isArray(t)?t:Object.values(t);for(let e=s.length-1;e>=0;e--){const t=s[e];!r.isPlainObject(t)&&!Array.isArray(t)||h.has(t)||l.push({value:t,isProcessed:!1})}}else l.pop()}const u=a.get(e)??e;return r.themeCache.shouldCache()&&r.themeCache.setResolution(e,s,u),u};static clearThemeCache=()=>{r.themeCache.clear()};static resolveDefaultStyle=e=>{if(null==e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return{};const{flex:t,...s}=e,n="flex"===s.display||"inline-flex"===s.display,o=!!(s.overflow||s.overflowY||s.overflowX),i=s.flexFlow?.includes("wrap")||"wrap"===s.flexWrap||"wrap-reverse"===s.flexWrap,l="flexShrink"in e&&void 0!==e.flexShrink,a=t?r.parseFlexShorthand(t):null;let h;if(!l)if(a)h=a.shrink;else if(n){if(!o){const e="column"===s.flexDirection||"column-reverse"===s.flexDirection,t="row"===s.flexDirection||"row-reverse"===s.flexDirection||!s.flexDirection;(e&&!i||t&&!i)&&(h=0)}}else h=0;return{flex:t,flexShrink:h,minHeight:0,minWidth:0,...s}}}export{r as ThemeUtil};
1
+ import{getValueByPath as e}from"../helper/common.helper.js";class t{constructor(){}static parseFlexShorthand(e){if(null==e)return null;if("number"==typeof e)return{grow:e,shrink:1,basis:"0%"};if("string"!=typeof e)return null;const t=e.trim().toLowerCase();if(!t)return null;switch(t){case"none":return{grow:0,shrink:0,basis:"auto"};case"auto":return{grow:1,shrink:1,basis:"auto"};case"initial":return{grow:0,shrink:1,basis:"auto"};default:return null}}static isPlainObject=e=>{if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};static resolveObjWithTheme=(r,l,n={})=>{const{processFunctions:s=!1}=n;if(!l||!l.system||"object"!=typeof l.system||0===Object.keys(l.system).length||!r||0===Object.keys(r).length)return r;const o=l.system,i=[{value:r,isProcessed:!1}],a=new Map,f=new Set,c=/theme\.([a-zA-Z0-9_.-]+)/g,u=t=>{c.lastIndex=0;let r=!1;const l=t.replace(c,(t,l)=>{const n=e(o,l);if(null!=n){if(r=!0,"object"==typeof n){if(!Array.isArray(n)&&"default"in n)return n.default;throw new Error("The provided theme path is invalid!")}return n}return t});return r?l:t};for(;i.length>0;){const e=i[i.length-1],r=e.value;if(t.isPlainObject(r)||Array.isArray(r))if(a.has(r))i.pop();else if(e.isProcessed){i.pop(),f.delete(r);let e=r;if(Array.isArray(r)){let t=null;for(let e=0;e<r.length;e++){const l=r[e],n=a.get(l)??l;n!==l&&(null===t&&(t=[...r]),t[e]=n)}null!==t&&(e=t)}else{let t=null;for(const e in r)if(Object.prototype.hasOwnProperty.call(r,e)){const n=r[e];let o=a.get(n)??n;if("function"==typeof o&&s){const e=o(l);o="string"==typeof e&&e.includes("theme.")?u(e):e}else"string"==typeof o&&o.includes("theme.")&&(o=u(o));o!==n&&(null===t&&(t={...r}),t[e]=o)}null!==t&&(e=t)}a.set(r,e)}else{e.isProcessed=!0,f.add(r);const l=Array.isArray(r)?r:Object.values(r);for(let e=l.length-1;e>=0;e--){const r=l[e];!t.isPlainObject(r)&&!Array.isArray(r)||f.has(r)||i.push({value:r,isProcessed:!1})}}else i.pop()}return a.get(r)??r};static resolveDefaultStyle=e=>{if(null==e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e)return{};const{flex:r,...l}=e,n="flex"===l.display||"inline-flex"===l.display,s=!!(l.overflow||l.overflowY||l.overflowX),o=l.flexFlow?.includes("wrap")||"wrap"===l.flexWrap||"wrap-reverse"===l.flexWrap,i="flexShrink"in e&&void 0!==e.flexShrink,a=r?t.parseFlexShorthand(r):null;let f;if(!i)if(a)f=a.shrink;else if(n){if(!s){const e="column"===l.flexDirection||"column-reverse"===l.flexDirection,t="row"===l.flexDirection||"row-reverse"===l.flexDirection||!l.flexDirection;(e&&!o||t&&!o)&&(f=0)}}else f=0;return{flex:r,flexShrink:f,minHeight:0,minWidth:0,...l}}}export{t as ThemeUtil};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meonode/ui",
3
3
  "description": "A structured approach to component composition, direct CSS-first prop styling, built-in theming, smart prop handling (including raw property pass-through), and dynamic children.",
4
- "version": "0.4.14",
4
+ "version": "1.0.0",
5
5
  "type": "module",
6
6
  "main": "./dist/main.js",
7
7
  "types": "./dist/main.d.ts",
@@ -36,9 +36,10 @@
36
36
  "test:all": "NODE_OPTIONS='--expose-gc' node --stack-size=10000 --max-old-space-size=8192 --experimental-vm-modules $(yarn bin jest) --ci --verbose",
37
37
  "prebuild": "yarn lint && yarn test:all",
38
38
  "build": "yarn prebuild && rm -rf ./dist && rollup -c rollup.config.ts && tsgo -p tsconfig.build.json --diagnostics && tsc-alias -p tsconfig.build.json",
39
- "publish:pre": "./prepublish.sh && yarn build && yarn version -i prerelease && yarn npm publish --tag next",
39
+ "publish:prerelease": "./prepublish.sh && yarn build && yarn version -i prerelease && yarn npm publish --tag next",
40
40
  "publish:patch": "./prepublish.sh && yarn build && yarn version -i patch && yarn npm publish --tag latest",
41
41
  "publish:minor": "./prepublish.sh && yarn build && yarn version -i minor && yarn npm publish --tag latest",
42
+ "publish:premajor": "./prepublish.sh && yarn build && yarn version -i premajor && yarn npm publish --tag next",
42
43
  "publish:major": "./prepublish.sh && yarn build && yarn version -i major && yarn npm publish --tag latest",
43
44
  "prepare": "husky"
44
45
  },
@@ -61,6 +62,7 @@
61
62
  "@types/jest": "^30.0.0",
62
63
  "@types/react": "^19.2.6",
63
64
  "@types/react-dom": "^19.2.3",
65
+ "@types/react-router-dom": "^5.3.3",
64
66
  "@typescript-eslint/eslint-plugin": "^8.47.0",
65
67
  "@typescript-eslint/parser": "^8.47.0",
66
68
  "@typescript/native-preview": "^7.0.0-dev.20251121.1",
@@ -76,6 +78,7 @@
76
78
  "prettier": "^3.6.2",
77
79
  "react": "^19.2.0",
78
80
  "react-dom": "^19.2.0",
81
+ "react-router-dom": "^7.9.6",
79
82
  "rollup": "^4.53.3",
80
83
  "rollup-plugin-preserve-directives": "^0.4.0",
81
84
  "rollup-plugin-tsconfig-paths": "^1.5.2",
@@ -83,7 +86,8 @@
83
86
  "tsc-alias": "^1.8.16",
84
87
  "tslib": "^2.8.1",
85
88
  "typescript": "^5.9.3",
86
- "typescript-eslint": "^8.47.0"
89
+ "typescript-eslint": "^8.47.0",
90
+ "whatwg-fetch": "^3.6.20"
87
91
  },
88
92
  "packageManager": "yarn@4.11.0",
89
93
  "peerDependencies": {
@@ -1 +0,0 @@
1
- "use strict";exports.ObjHelper=class{constructor(){}static buildSerializable(e,t){if(null==e)return e;const i=typeof e;if("string"===i||"number"===i||"boolean"===i)return e;if("function"===i){let i=t.functionIds.get(e);return void 0===i&&(i=t.nextFunctionId++,t.functionIds.set(e,i)),{$type:"Function",name:e.name||"",id:i}}if("symbol"===i)return{$type:"Symbol",key:e.description??""};if("bigint"===i)return{$type:"BigInt",value:e.toString()};if("object"!==i)try{return String(e)}catch{return"<unserializable>"}if(e instanceof Date)return{$type:"Date",value:e.toISOString()};if(e instanceof RegExp)return{$type:"RegExp",source:e.source,flags:e.flags};const n=t.seen.get(e);if(void 0!==n)return{$type:"Circular",ref:n};const r=t.nextObjId++;if(t.seen.set(e,r),e instanceof Map){const i=[];for(const[n,r]of e.entries())i.push([this.buildSerializable(n,t),this.buildSerializable(r,t)]);return{$type:"Map",entries:i}}if(e instanceof Set){const i=[];for(const n of e.values())i.push(this.buildSerializable(n,t));return{$type:"Set",values:i}}if(Array.isArray(e))return e.map(e=>this.buildSerializable(e,t));try{const i=Object.keys(e),n={};for(const r of i)try{n[r]=this.buildSerializable(e[r],t)}catch{n[r]="<unserializable>"}return n}catch{return"<unserializable>"}}static stringify(e,t=0){const i={nextObjId:0,nextFunctionId:0,seen:new Map,functionIds:new Map},n=this.buildSerializable(e,i);return JSON.stringify(n,null,t)}};
@@ -1,16 +0,0 @@
1
- export declare class ObjHelper {
2
- private constructor();
3
- /**
4
- * Build a serializable representation of `value`.
5
- * - preserves encoded placeholders for special types
6
- * - emits { $type: 'Circular', ref: id } for circular refs
7
- */
8
- private static buildSerializable;
9
- /**
10
- * Stringify with performance optimizations.
11
- * @param obj Object to serialize
12
- * @param space JSON.stringify space parameter
13
- */
14
- static stringify(obj: any, space?: number): string;
15
- }
16
- //# sourceMappingURL=obj.helper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"obj.helper.d.ts","sourceRoot":"","sources":["../../../src/helper/obj.helper.ts"],"names":[],"mappings":"AAOA,qBAAa,SAAS;IACpB,OAAO,eAAiB;IAExB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAmGhC;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,SAAI,GAAG,MAAM,CAU5C;CACF"}
@@ -1 +0,0 @@
1
- class e{constructor(){}static buildSerializable(e,t){if(null==e)return e;const i=typeof e;if("string"===i||"number"===i||"boolean"===i)return e;if("function"===i){let i=t.functionIds.get(e);return void 0===i&&(i=t.nextFunctionId++,t.functionIds.set(e,i)),{$type:"Function",name:e.name||"",id:i}}if("symbol"===i)return{$type:"Symbol",key:e.description??""};if("bigint"===i)return{$type:"BigInt",value:e.toString()};if("object"!==i)try{return String(e)}catch{return"<unserializable>"}if(e instanceof Date)return{$type:"Date",value:e.toISOString()};if(e instanceof RegExp)return{$type:"RegExp",source:e.source,flags:e.flags};const n=t.seen.get(e);if(void 0!==n)return{$type:"Circular",ref:n};const r=t.nextObjId++;if(t.seen.set(e,r),e instanceof Map){const i=[];for(const[n,r]of e.entries())i.push([this.buildSerializable(n,t),this.buildSerializable(r,t)]);return{$type:"Map",entries:i}}if(e instanceof Set){const i=[];for(const n of e.values())i.push(this.buildSerializable(n,t));return{$type:"Set",values:i}}if(Array.isArray(e))return e.map(e=>this.buildSerializable(e,t));try{const i=Object.keys(e),n={};for(const r of i)try{n[r]=this.buildSerializable(e[r],t)}catch{n[r]="<unserializable>"}return n}catch{return"<unserializable>"}}static stringify(e,t=0){const i={nextObjId:0,nextFunctionId:0,seen:new Map,functionIds:new Map},n=this.buildSerializable(e,i);return JSON.stringify(n,null,t)}}export{e as ObjHelper};