@meonode/ui 0.3.18 → 0.4.1

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 (37) hide show
  1. package/CHANGELOG.md +29 -1
  2. package/dist/client.d.ts +1 -1
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/components/html.node.d.ts +139 -139
  5. package/dist/components/react.node.d.ts +3 -3
  6. package/dist/components/styled-renderer.client.d.ts +1 -1
  7. package/dist/components/styled-renderer.client.d.ts.map +1 -1
  8. package/dist/components/theme-provider.client.d.ts +1 -1
  9. package/dist/components/theme-provider.client.d.ts.map +1 -1
  10. package/dist/components/theme-provider.d.ts +1 -1
  11. package/dist/constants/common.const.d.ts +1 -0
  12. package/dist/constants/common.const.d.ts.map +1 -1
  13. package/dist/constants/common.const.js +1 -1
  14. package/dist/core.node.d.ts +70 -19
  15. package/dist/core.node.d.ts.map +1 -1
  16. package/dist/core.node.js +103 -50
  17. package/dist/helper/common.helper.d.ts +1 -1
  18. package/dist/helper/common.helper.d.ts.map +1 -1
  19. package/dist/helper/theme.helper.d.ts +1 -1
  20. package/dist/helper/theme.helper.d.ts.map +1 -1
  21. package/dist/hoc/component.hoc.d.ts +3 -3
  22. package/dist/hoc/component.hoc.d.ts.map +1 -1
  23. package/dist/hoc/component.hoc.js +1 -1
  24. package/dist/hoc/portal.hoc.d.ts +1 -1
  25. package/dist/hoc/portal.hoc.d.ts.map +1 -1
  26. package/dist/hook/usePortal.d.ts +1 -1
  27. package/dist/hook/usePortal.d.ts.map +1 -1
  28. package/dist/main.d.ts +1 -1
  29. package/dist/main.d.ts.map +1 -1
  30. package/dist/main.js +1 -1
  31. package/dist/nextjs-registry/index.d.ts +1 -1
  32. package/dist/{node.type.d.ts → types/node.type.d.ts} +11 -2
  33. package/dist/types/node.type.d.ts.map +1 -0
  34. package/dist/types/node.type.js +1 -0
  35. package/package.json +17 -17
  36. package/dist/node.type.d.ts.map +0 -1
  37. /package/dist/{node.type.js → types/env.d.js} +0 -0
@@ -15,7 +15,7 @@
15
15
  * })
16
16
  * ```
17
17
  */
18
- export declare const Fragment: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props?: import("../node.type").MergedProps<import("react").ExoticComponent<import("react").FragmentProps>, AdditionalProps> | undefined) => import("../node.type").NodeInstance<import("react").ExoticComponent<import("react").FragmentProps>>) & {
18
+ export declare const Fragment: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props?: import("../main").MergedProps<import("react").ExoticComponent<import("react").FragmentProps>, AdditionalProps> | undefined, deps?: import("../main").DependencyList | undefined) => import("../main").NodeInstance<import("react").ExoticComponent<import("react").FragmentProps>>) & {
19
19
  element: import("react").ExoticComponent<import("react").FragmentProps>;
20
20
  };
21
21
  /**
@@ -32,7 +32,7 @@ export declare const Fragment: (<AdditionalProps extends Record<string, any> = R
32
32
  * })
33
33
  * ```
34
34
  */
35
- export declare const Activity: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props: import("../node.type").MergedProps<import("react").ExoticComponent<import("react").ActivityProps>, AdditionalProps>) => import("../node.type").NodeInstance<import("react").ExoticComponent<import("react").ActivityProps>>) & {
35
+ export declare const Activity: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props: import("../main").MergedProps<import("react").ExoticComponent<import("react").ActivityProps>, AdditionalProps>, deps?: import("../main").DependencyList | undefined) => import("../main").NodeInstance<import("react").ExoticComponent<import("react").ActivityProps>>) & {
36
36
  element: import("react").ExoticComponent<import("react").ActivityProps>;
37
37
  };
38
38
  /**
@@ -49,7 +49,7 @@ export declare const Activity: (<AdditionalProps extends Record<string, any> = R
49
49
  * })
50
50
  * ```
51
51
  */
52
- export declare const Suspense: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props?: import("../node.type").MergedProps<import("react").ExoticComponent<import("react").SuspenseProps>, AdditionalProps> | undefined) => import("../node.type").NodeInstance<import("react").ExoticComponent<import("react").SuspenseProps>>) & {
52
+ export declare const Suspense: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props?: import("../main").MergedProps<import("react").ExoticComponent<import("react").SuspenseProps>, AdditionalProps> | undefined, deps?: import("../main").DependencyList | undefined) => import("../main").NodeInstance<import("react").ExoticComponent<import("react").SuspenseProps>>) & {
53
53
  element: import("react").ExoticComponent<import("react").SuspenseProps>;
54
54
  };
55
55
  //# sourceMappingURL=react.node.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import { type JSX, type ReactNode } from 'react';
2
- import type { CssProp, NodeElement } from '../node.type.js';
2
+ import type { CssProp, NodeElement } from '../types/node.type.js';
3
3
  export interface StyledRendererProps<E extends NodeElement> {
4
4
  element: E;
5
5
  children?: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"styled-renderer.client.d.ts","sourceRoot":"","sources":["../../src/components/styled-renderer.client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAK7D,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,WAAW;IACxD,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;CACb;AAED;;;;;;;;;GASG;AACH,iBAAwB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAChG,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,CAoB/C"}
1
+ {"version":3,"file":"styled-renderer.client.d.ts","sourceRoot":"","sources":["../../src/components/styled-renderer.client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,SAAS,EAAc,MAAM,OAAO,CAAA;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAKnE,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,WAAW;IACxD,OAAO,EAAE,CAAC,CAAA;IACV,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,GAAG,EAAE,OAAO,CAAA;CACb;AAED;;;;;;;;;GASG;AACH,iBAAwB,cAAc,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAChG,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,CAoB/C"}
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
- import type { Children, Theme } from '../node.type.js';
2
+ import type { Children, Theme } from '../types/node.type.js';
3
3
  export interface ThemeContextValue {
4
4
  theme: Theme;
5
5
  setTheme: (theme: Theme) => void;
@@ -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,mBAAmB,CAAA;AAGxD,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,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"}
@@ -2,7 +2,7 @@ import _ThemeProvider from '../components/theme-provider.client.js';
2
2
  /**
3
3
  * A component that provides a theme to its children.
4
4
  */
5
- export declare const ThemeProvider: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props: import("../node.type").MergedProps<typeof _ThemeProvider, AdditionalProps>) => import("../node.type").NodeInstance<typeof _ThemeProvider>) & {
5
+ export declare const ThemeProvider: (<AdditionalProps extends Record<string, any> = Record<string, any>>(props: import("../main").MergedProps<typeof _ThemeProvider, AdditionalProps>, deps?: import("../main").DependencyList | undefined) => import("../main").NodeInstance<typeof _ThemeProvider>) & {
6
6
  element: typeof _ThemeProvider;
7
7
  };
8
8
  //# sourceMappingURL=theme-provider.d.ts.map
@@ -1,4 +1,5 @@
1
1
  export declare const NO_STYLE_TAGS: readonly ["html", "head", "meta", "link", "script", "style", "noscript", "template", "slot", "base", "param", "source", "track", "wbr", "embed", "object", "iframe", "frame", "frameset", "applet", "bgsound", "noembed", "noframes"];
2
2
  export declare const noStyleTagsSet: Set<"applet" | "base" | "bgsound" | "embed" | "frame" | "frameset" | "head" | "html" | "iframe" | "link" | "meta" | "noembed" | "noframes" | "noscript" | "object" | "param" | "script" | "slot" | "source" | "style" | "template" | "track" | "wbr">;
3
3
  export type NO_STYLE_TAGS = typeof NO_STYLE_TAGS;
4
+ export declare const __DEV__: boolean;
4
5
  //# sourceMappingURL=common.const.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.const.d.ts","sourceRoot":"","sources":["../../src/constants/common.const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,uOAwBhB,CAAA;AAEV,eAAO,MAAM,cAAc,uPAAyB,CAAA;AACpD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA"}
1
+ {"version":3,"file":"common.const.d.ts","sourceRoot":"","sources":["../../src/constants/common.const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,uOAwBhB,CAAA;AAEV,eAAO,MAAM,cAAc,uPAAyB,CAAA;AACpD,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAA;AAEhD,eAAO,MAAM,OAAO,SAA0F,CAAA"}
@@ -1 +1 @@
1
- export var NO_STYLE_TAGS=["html","head","meta","link","script","style","noscript","template","slot","base","param","source","track","wbr","embed","object","iframe","frame","frameset","applet","bgsound","noembed","noframes"];export var noStyleTagsSet=new Set(NO_STYLE_TAGS);
1
+ export var NO_STYLE_TAGS=["html","head","meta","link","script","style","noscript","template","slot","base","param","source","track","wbr","embed","object","iframe","frame","frameset","applet","bgsound","noembed","noframes"];export var noStyleTagsSet=new Set(NO_STYLE_TAGS);export var __DEV__="undefined"!=typeof process&&process.env&&"development"===process.env.NODE_ENV;
@@ -1,5 +1,5 @@
1
1
  import { type ReactElement } from 'react';
2
- import type { Children, FinalNodeProps, HasRequiredProps, MergedProps, NodeElementType, NodeInstance, NodePortal, NodeProps, PropsOf } from './node.type.js';
2
+ import type { Children, FinalNodeProps, HasRequiredProps, MergedProps, NodeElementType, NodeInstance, NodePortal, NodeProps, PropsOf, DependencyList } 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.
@@ -15,10 +15,18 @@ export declare class BaseNode<E extends NodeElementType> implements NodeInstance
15
15
  private _props?;
16
16
  private _portalDOMElement;
17
17
  private _portalReactRoot;
18
+ private _stableKey;
19
+ private readonly _deps?;
18
20
  private static _isServer;
19
21
  private static _propProcessingCache;
22
+ private static _elementCache;
20
23
  private static _isValidElement;
21
- constructor(element: E, rawProps?: Partial<NodeProps<E>>);
24
+ private static _isStyleProp;
25
+ private static readonly CACHE_SIZE_LIMIT = 500;
26
+ private static readonly CACHE_CLEANUP_BATCH = 50;
27
+ private _lastPropsRef;
28
+ private _lastSignature;
29
+ constructor(element: E, rawProps?: Partial<NodeProps<E>>, deps?: DependencyList);
22
30
  /**
23
31
  * Lazily processes and retrieves the final, normalized props for the node.
24
32
  * The props are processed only once and then cached for subsequent accesses.
@@ -26,29 +34,71 @@ export declare class BaseNode<E extends NodeElementType> implements NodeInstance
26
34
  */
27
35
  get props(): FinalNodeProps;
28
36
  /**
29
- * A fast, non-cryptographic hash function (FNV-1a) used to generate a unique signature for a set of props.
30
- * This is significantly faster than `JSON.stringify` for creating cache keys.
37
+ * Returns the dependency list associated with this node.
38
+ * Used by the renderer to decide if the node (and subtree) should update.
39
+ * Mirrors React hook semantics: `undefined` means always update; when an
40
+ * array is provided a shallow comparison against previous deps determines
41
+ * whether a re-render is required.
42
+ * @getter deps
43
+ */
44
+ get dependencies(): DependencyList | undefined;
45
+ /**
46
+ * FNV-1a hash function.
47
+ * @method _fnv1aHash
48
+ */
49
+ private static _fnv1aHash;
50
+ /**
51
+ * djb2 hash function.
52
+ * @method _djb2Hash
53
+ */
54
+ private static _djb2Hash;
55
+ /**
56
+ * Combines FNV-1a and djb2 hash functions for a more robust signature.
31
57
  * @method _hashString
32
58
  */
33
59
  private static _hashString;
34
60
  /**
35
- * Creates a unique, stable signature from a set of props. This signature is used as a key for caching computed CSS props.
36
- * It serializes only primitive values and the structure of objects/arrays to ensure speed and stability.
61
+ * Generates or returns a cached signature representing the props shape and values.
62
+ * The signature is used as a stable key for caching prop-derived computations (e.g. CSS extraction).
63
+ * - Uses a fast reference check to return the previous signature if the same props object is passed.
64
+ * - For very large prop objects (> 100 keys) it builds a smaller "criticalProps" fingerprint
65
+ * containing only style-related keys, event handlers, className/css and a `_keyCount` to avoid
66
+ * expensive serialization of huge objects while still retaining reasonable cache discrimination.
67
+ * - Stores the last props reference and computed signature to speed up repeated calls with the same object.
68
+ * @param props The props object to create a signature for.
69
+ * @returns A compact string signature suitable for use as a cache key.
70
+ */
71
+ private _getCachedSignature;
72
+ /**
73
+ * Creates a unique, stable signature from the element type and props.
74
+ * This signature includes the element's type to prevent collisions between different components
75
+ * and handles primitive values in arrays and objects for better caching.
37
76
  * @method _createPropSignature
38
77
  */
39
78
  private static _createPropSignature;
40
79
  /**
41
- * Retrieves computed CSS props from the cache if available. If not, it computes them,
42
- * adds them to the cache, and then returns them. An LRU-like mechanism is used to prevent the cache from growing indefinitely.
80
+ * Retrieves computed CSS props from the cache with LRU tracking.
81
+ * Access time and hit count are tracked for smarter eviction.
43
82
  * @method _getCachedCssProps
44
83
  */
45
84
  private static _getCachedCssProps;
46
85
  /**
47
- * The main prop processing pipeline. It orchestrates splitting props, generating cache signatures,
48
- * retrieving cached CSS props, computing DOM props, and normalizing children.
86
+ * Implements an LRU eviction strategy that removes multiple entries at once.
87
+ * It uses a scoring system where older and less frequently used entries have a higher eviction priority.
88
+ * @method _evictLRUEntries
89
+ */
90
+ private static _evictLRUEntries;
91
+ /**
92
+ * The main prop processing pipeline, which now passes the element type for improved caching.
49
93
  * @method _processProps
50
94
  */
51
95
  private _processProps;
96
+ /**
97
+ * Determines if a node should update based on its dependency array.
98
+ * Uses a shallow comparison, similar to React's `useMemo` and `useCallback`.
99
+ * @method _shouldNodeUpdate
100
+ */
101
+ private static _shouldNodeUpdate;
52
102
  /**
53
103
  * Processes the `children` prop of a node. It handles single children, arrays of children,
54
104
  * and function-as-a-child render props, passing them to `_processRawNode` for normalization.
@@ -79,7 +129,9 @@ export declare class BaseNode<E extends NodeElementType> implements NodeInstance
79
129
  */
80
130
  private static _renderProcessedNode;
81
131
  /**
82
- * Renders the `BaseNode` and its entire subtree into a ReactElement.
132
+ * Renders the `BaseNode` and its entire subtree into a ReactElement, with support for opt-in reactivity
133
+ * via dependency arrays and inherited blocking.
134
+ *
83
135
  * This method uses an **iterative (non-recursive) approach** with a manual work stack.
84
136
  * This is a crucial architectural choice to prevent "Maximum call stack size exceeded" errors
85
137
  * when rendering very deeply nested component trees, a common limitation of naive recursive rendering.
@@ -90,7 +142,7 @@ export declare class BaseNode<E extends NodeElementType> implements NodeInstance
90
142
  * It then collects the rendered children from a temporary map and creates its own React element.
91
143
  * @method render
92
144
  */
93
- render(): ReactElement<FinalNodeProps>;
145
+ render(parentBlocked?: boolean): ReactElement<FinalNodeProps>;
94
146
  /**
95
147
  * Ensures that the necessary DOM element and React root are available for portal rendering.
96
148
  * This is only executed on the client-side.
@@ -104,8 +156,7 @@ export declare class BaseNode<E extends NodeElementType> implements NodeInstance
104
156
  */
105
157
  toPortal(): NodePortal;
106
158
  /**
107
- * A static method to clear all internal caches. This is primarily useful for testing
108
- * to ensure that tests run in a clean, isolated state.
159
+ * A static method to clear all internal caches.
109
160
  * @method clearCaches
110
161
  */
111
162
  static clearCaches(): void;
@@ -115,15 +166,15 @@ export declare class BaseNode<E extends NodeElementType> implements NodeInstance
115
166
  * It's the simplest way to wrap a component or element.
116
167
  * @function Node
117
168
  */
118
- export declare function Node<AdditionalProps extends Record<string, any>, E extends NodeElementType>(element: E, props?: MergedProps<E, AdditionalProps>, additionalProps?: AdditionalProps): NodeInstance<E>;
169
+ export declare function Node<AdditionalProps extends Record<string, any>, E extends NodeElementType>(element: E, props?: MergedProps<E, AdditionalProps>, deps?: DependencyList): NodeInstance<E>;
119
170
  /**
120
171
  * Creates a curried node factory for a given React element or component type.
121
172
  * This is useful for creating reusable, specialized factory functions (e.g., `const Div = createNode('div')`).
122
173
  * @function createNode
123
174
  */
124
- export declare function createNode<AdditionalInitialProps extends Record<string, any>, E extends NodeElementType>(element: E, initialProps?: MergedProps<E, AdditionalInitialProps>): HasRequiredProps<PropsOf<E>> extends true ? (<AdditionalProps extends Record<string, any> = Record<string, any>>(props: MergedProps<E, AdditionalProps>) => NodeInstance<E>) & {
175
+ export declare function createNode<AdditionalInitialProps extends Record<string, any>, E extends NodeElementType>(element: E, initialProps?: MergedProps<E, AdditionalInitialProps>): HasRequiredProps<PropsOf<E>> extends true ? (<AdditionalProps extends Record<string, any> = Record<string, any>>(props: MergedProps<E, AdditionalProps>, deps?: DependencyList) => NodeInstance<E>) & {
125
176
  element: E;
126
- } : (<AdditionalProps extends Record<string, any> = Record<string, any>>(props?: MergedProps<E, AdditionalProps>) => NodeInstance<E>) & {
177
+ } : (<AdditionalProps extends Record<string, any> = Record<string, any>>(props?: MergedProps<E, AdditionalProps>, deps?: DependencyList) => NodeInstance<E>) & {
127
178
  element: E;
128
179
  };
129
180
  /**
@@ -131,9 +182,9 @@ export declare function createNode<AdditionalInitialProps extends Record<string,
131
182
  * This provides a more ergonomic API for components that primarily wrap content (e.g., `P('Some text')`).
132
183
  * @function createChildrenFirstNode
133
184
  */
134
- export declare function createChildrenFirstNode<AdditionalInitialProps extends Record<string, any>, E extends NodeElementType>(element: E, initialProps?: Omit<NodeProps<E>, keyof AdditionalInitialProps | 'children'> & AdditionalInitialProps): HasRequiredProps<PropsOf<E>> extends true ? (<AdditionalProps extends Record<string, any> = Record<string, any>>(children: Children, props: Omit<MergedProps<E, AdditionalProps>, 'children'>) => NodeInstance<E>) & {
185
+ export declare function createChildrenFirstNode<AdditionalInitialProps extends Record<string, any>, E extends NodeElementType>(element: E, initialProps?: Omit<NodeProps<E>, keyof AdditionalInitialProps | 'children'> & AdditionalInitialProps): HasRequiredProps<PropsOf<E>> extends true ? (<AdditionalProps extends Record<string, any> = Record<string, any>>(children: Children, props: Omit<MergedProps<E, AdditionalProps>, 'children'>, deps?: DependencyList) => NodeInstance<E>) & {
135
186
  element: E;
136
- } : (<AdditionalProps extends Record<string, any> = Record<string, any>>(children?: Children, props?: Omit<MergedProps<E, AdditionalProps>, 'children'>) => NodeInstance<E>) & {
187
+ } : (<AdditionalProps extends Record<string, any> = Record<string, any>>(children?: Children, props?: Omit<MergedProps<E, AdditionalProps>, 'children'>, deps?: DependencyList) => NodeInstance<E>) & {
137
188
  element: E;
138
189
  };
139
190
  //# sourceMappingURL=core.node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.node.d.ts","sourceRoot":"","sources":["../src/core.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.node.d.ts","sourceRoot":"","sources":["../src/core.node.ts"],"names":[],"mappings":"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"}
package/dist/core.node.js CHANGED
@@ -1,72 +1,128 @@
1
- var _excluded=["ref","key","children","css","props","disableEmotion"],_excluded2=["style"],_excluded3=["children","key","css","nativeProps","disableEmotion"];function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&{}.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c={};for(var d in a)if({}.hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _createForOfIteratorHelper(b,c){var d="undefined"!=typeof Symbol&&b[Symbol.iterator]||b["@@iterator"];if(!d){if(Array.isArray(b)||(d=_unsupportedIterableToArray(b))||c&&b&&"number"==typeof b.length){d&&(b=d);var e=0,f=function F(){};return{s:f,n:function n(){return e>=b.length?{done:!0}:{done:!1,value:b[e++]}},e:function e(a){throw a},f:f}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var g,h=!0,i=!1;return{s:function s(){d=d.call(b)},n:function n(){var a=d.next();return h=a.done,a},e:function e(a){i=!0,g=a},f:function f(){try{h||null==d["return"]||d["return"]()}finally{if(i)throw g}}}}function _unsupportedIterableToArray(b,c){if(b){if("string"==typeof b)return _arrayLikeToArray(b,c);var a={}.toString.call(b).slice(8,-1);return"Object"===a&&b.constructor&&(a=b.constructor.name),"Map"===a||"Set"===a?Array.from(b):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(b,c):void 0}}function _arrayLikeToArray(b,c){(null==c||c>b.length)&&(c=b.length);for(var d=0,f=Array(c);d<c;d++)f[d]=b[d];return f}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!=_typeof(a)||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}import React,{createElement,isValidElement,Fragment}from"react";import{isNodeInstance}from"./helper/node.helper.js";import{isForwardRef,isFragment,isMemo,isReactClassComponent,isValidElementType}from"./helper/react-is.helper.js";import{createRoot}from"react-dom/client";import{getComponentType,getCSSProps,getDOMProps,getElementTypeName,hasNoStyleTag,omitUndefined}from"./helper/common.helper.js";import StyledRenderer from"./components/styled-renderer.client.js";/**
1
+ var _BaseNode,_excluded=["key","children","ref"],_excluded2=["ref","key","children","css","props","disableEmotion"],_excluded3=["style"],_excluded4=["children","key","css","nativeProps","disableEmotion"],_excluded5=["deps"];function ownKeys(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function _objectSpread(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?ownKeys(Object(b),!0).forEach(function(c){_defineProperty(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):ownKeys(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function _slicedToArray(a,b){return _arrayWithHoles(a)||_iterableToArrayLimit(a,b)||_unsupportedIterableToArray(a,b)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(b,c){var d=null==b?null:"undefined"!=typeof Symbol&&b[Symbol.iterator]||b["@@iterator"];if(null!=d){var g,h,j,k,l=[],a=!0,m=!1;try{if(j=(d=d.call(b)).next,0===c){if(Object(d)!==d)return;a=!1}else for(;!(a=(g=j.call(d)).done)&&(l.push(g.value),l.length!==c);a=!0);}catch(a){m=!0,h=a}finally{try{if(!a&&null!=d["return"]&&(k=d["return"](),Object(k)!==k))return}finally{if(m)throw h}}return l}}function _arrayWithHoles(a){if(Array.isArray(a))return a}function _typeof(a){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a},_typeof(a)}function _createForOfIteratorHelper(b,c){var d="undefined"!=typeof Symbol&&b[Symbol.iterator]||b["@@iterator"];if(!d){if(Array.isArray(b)||(d=_unsupportedIterableToArray(b))||c&&b&&"number"==typeof b.length){d&&(b=d);var e=0,f=function F(){};return{s:f,n:function n(){return e>=b.length?{done:!0}:{done:!1,value:b[e++]}},e:function e(a){throw a},f:f}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var g,h=!0,i=!1;return{s:function s(){d=d.call(b)},n:function n(){var a=d.next();return h=a.done,a},e:function e(a){i=!0,g=a},f:function f(){try{h||null==d["return"]||d["return"]()}finally{if(i)throw g}}}}function _unsupportedIterableToArray(b,c){if(b){if("string"==typeof b)return _arrayLikeToArray(b,c);var a={}.toString.call(b).slice(8,-1);return"Object"===a&&b.constructor&&(a=b.constructor.name),"Map"===a||"Set"===a?Array.from(b):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?_arrayLikeToArray(b,c):void 0}}function _arrayLikeToArray(b,c){(null==c||c>b.length)&&(c=b.length);for(var d=0,f=Array(c);d<c;d++)f[d]=b[d];return f}function _objectWithoutProperties(a,b){if(null==a)return{};var c,d,e=_objectWithoutPropertiesLoose(a,b);if(Object.getOwnPropertySymbols){var f=Object.getOwnPropertySymbols(a);for(d=0;d<f.length;d++)c=f[d],-1===b.indexOf(c)&&{}.propertyIsEnumerable.call(a,c)&&(e[c]=a[c])}return e}function _objectWithoutPropertiesLoose(a,b){if(null==a)return{};var c={};for(var d in a)if({}.hasOwnProperty.call(a,d)){if(-1!==b.indexOf(d))continue;c[d]=a[d]}return c}function _defineProperty(a,b,c){return(b=_toPropertyKey(b))in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function _toPropertyKey(a){var b=_toPrimitive(a,"string");return"symbol"==_typeof(b)?b:b+""}function _toPrimitive(a,b){if("object"!=_typeof(a)||!a)return a;var c=a[Symbol.toPrimitive];if(void 0!==c){var d=c.call(a,b||"default");if("object"!=_typeof(d))return d;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===b?String:Number)(a)}import React,{createElement,isValidElement,Fragment}from"react";import{isNodeInstance}from"./helper/node.helper.js";import{isForwardRef,isFragment,isMemo,isReactClassComponent,isValidElementType}from"./helper/react-is.helper.js";import{createRoot}from"react-dom/client";import{getComponentType,getCSSProps,getDOMProps,getElementTypeName,hasNoStyleTag,omitUndefined}from"./helper/common.helper.js";import StyledRenderer from"./components/styled-renderer.client.js";import{__DEV__}from"./constants/common.const.js";/**
2
2
  * The core abstraction of the MeoNode library. It wraps a React element or component,
3
3
  * providing a unified interface for processing props, normalizing children, and handling styles.
4
4
  * This class is central to the library's ability to offer a JSX-free, fluent API for building UIs.
5
5
  * It uses an iterative rendering approach to handle deeply nested structures without causing stack overflows.
6
6
  * @class BaseNode
7
7
  * @template E - The type of React element or component this node represents.
8
- */export class BaseNode{constructor(a){var b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{};// Element type validation is performed once at construction to prevent invalid nodes from being created.
9
- if(_defineProperty(this,"rawProps",{}),_defineProperty(this,"isBaseNode",!0),_defineProperty(this,"_portalDOMElement",null),_defineProperty(this,"_portalReactRoot",null),!BaseNode._isValidElement(a)){var c=getComponentType(a);throw new Error("Invalid element type: ".concat(c," provided!"))}this.element=a,this.rawProps=b}/**
8
+ */export class BaseNode{constructor(a){var b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},c=2<arguments.length?arguments[2]:void 0;// Element type validation is performed once at construction to prevent invalid nodes from being created.
9
+ if(_defineProperty(this,"rawProps",{}),_defineProperty(this,"isBaseNode",!0),_defineProperty(this,"_portalDOMElement",null),_defineProperty(this,"_portalReactRoot",null),_defineProperty(this,"_lastPropsRef",null),_defineProperty(this,"_lastSignature",""),!BaseNode._isValidElement(a)){var d=getComponentType(a);throw new Error("Invalid element type: ".concat(d," provided!"))}this.element=a,this.rawProps=b,this._deps=c;// Generate an initial stable key used for internal caching.
10
+ // Exclude React's `key`, `ref`, and `children` from the signature so positional or ref changes
11
+ // do not unintentionally affect the component's cache identity.
12
+ var e=b.key,f=b.children,g=b.ref,h=_objectWithoutProperties(b,_excluded);this._stableKey=this._getCachedSignature(h),void 0!==e&&null!==e&&(this._stableKey="".concat(e+"",":").concat(this._stableKey))}/**
10
13
  * Lazily processes and retrieves the final, normalized props for the node.
11
14
  * The props are processed only once and then cached for subsequent accesses.
12
15
  * @getter props
13
- */get props(){return this._props||(this._props=this._processProps()),this._props}// --- Prop Caching and Processing ---
16
+ */get props(){return this._props||(this._props=this._processProps()),this._props}/**
17
+ * Returns the dependency list associated with this node.
18
+ * Used by the renderer to decide if the node (and subtree) should update.
19
+ * Mirrors React hook semantics: `undefined` means always update; when an
20
+ * array is provided a shallow comparison against previous deps determines
21
+ * whether a re-render is required.
22
+ * @getter deps
23
+ */get dependencies(){return this._deps}// --- Enhanced Prop Caching and Processing ---
14
24
  /**
15
- * A fast, non-cryptographic hash function (FNV-1a) used to generate a unique signature for a set of props.
16
- * This is significantly faster than `JSON.stringify` for creating cache keys.
25
+ * FNV-1a hash function.
26
+ * @method _fnv1aHash
27
+ */static _fnv1aHash(a){// FNV offset basis
28
+ for(var b=Math.imul,c=2166136261,d=0;d<a.length;d++)c^=a.charCodeAt(d),c=b(c,16777619);return c>>>0;// Convert to unsigned 32-bit integer
29
+ }/**
30
+ * djb2 hash function.
31
+ * @method _djb2Hash
32
+ */static _djb2Hash(a){for(var b=5381,c=0;c<a.length;c++)b=33*b^a.charCodeAt(c);return b>>>0;// Convert to unsigned 32-bit integer
33
+ }/**
34
+ * Combines FNV-1a and djb2 hash functions for a more robust signature.
17
35
  * @method _hashString
18
- */static _hashString(a){// FNV offset basis
19
- for(var b=Math.imul,c=2166136261,d=0;d<a.length;d++)c^=a.charCodeAt(d),c=b(c,16777619);return(c>>>0).toString(36)}/**
20
- * Creates a unique, stable signature from a set of props. This signature is used as a key for caching computed CSS props.
21
- * It serializes only primitive values and the structure of objects/arrays to ensure speed and stability.
36
+ */static _hashString(a){var b=BaseNode._fnv1aHash(a),c=BaseNode._djb2Hash(a);return"".concat(b.toString(36),"_").concat(c.toString(36));// Combine and convert to base36
37
+ }/**
38
+ * Generates or returns a cached signature representing the props shape and values.
39
+ * The signature is used as a stable key for caching prop-derived computations (e.g. CSS extraction).
40
+ * - Uses a fast reference check to return the previous signature if the same props object is passed.
41
+ * - For very large prop objects (> 100 keys) it builds a smaller "criticalProps" fingerprint
42
+ * containing only style-related keys, event handlers, className/css and a `_keyCount` to avoid
43
+ * expensive serialization of huge objects while still retaining reasonable cache discrimination.
44
+ * - Stores the last props reference and computed signature to speed up repeated calls with the same object.
45
+ * @param props The props object to create a signature for.
46
+ * @returns A compact string signature suitable for use as a cache key.
47
+ */_getCachedSignature(a){if(a===this._lastPropsRef)return this._lastSignature;var b=Object.keys(a),c=b.length;if(100<c){var d,e={_keyCount:c},f=_createForOfIteratorHelper(b);try{for(f.s();!(d=f.n()).done;){var g=d.value;(BaseNode._isStyleProp(g)||"css"===g||"className"===g||g.startsWith("on"))&&(e[g]=a[g])}}catch(a){f.e(a)}finally{f.f()}this._lastSignature=BaseNode._createPropSignature(this.element,e),__DEV__&&200<c&&console.warn("MeoNode: Large props (".concat(c," keys) on \"").concat(getElementTypeName(this.element),"\". Consider splitting."))}else this._lastSignature=BaseNode._createPropSignature(this.element,a);return this._lastPropsRef=a,this._lastSignature}/**
48
+ * Creates a unique, stable signature from the element type and props.
49
+ * This signature includes the element's type to prevent collisions between different components
50
+ * and handles primitive values in arrays and objects for better caching.
22
51
  * @method _createPropSignature
23
- */static _createPropSignature(a){var b,c=Object.keys(a).sort(),d="",e=_createForOfIteratorHelper(c);try{for(e.s();!(b=e.n()).done;){var f=b.value,g=a[f],h=void 0,i=_typeof(g);h="string"===i||"number"===i||"boolean"===i?"".concat(f,":").concat(g,";"):null===g?"".concat(f,":null;"):void 0===g?"".concat(f,":undefined;"):Array.isArray(g)?"".concat(f,":[").concat(g.length,"];"):"".concat(f,":{").concat(Object.keys(g).length,"};"),d+=h}}catch(a){e.e(a)}finally{e.f()}return BaseNode._hashString(d)}/**
24
- * Retrieves computed CSS props from the cache if available. If not, it computes them,
25
- * adds them to the cache, and then returns them. An LRU-like mechanism is used to prevent the cache from growing indefinitely.
52
+ */static _createPropSignature(a,b){// Safe element identification that works with Next.js Client Components
53
+ var c;try{c="string"==typeof a?a:"function"==typeof a?a.name||"Component":a&&"object"===_typeof(a)?a.displayName||a.name||"ExoticComponent":"Unknown"}catch(a){// Fallback for Client Components that throw when accessed
54
+ // Use a generic identifier - this is safe because we still have props in the signature
55
+ __DEV__&&console.error("MeoNode: Could not determine element name for signature.",a),c="ClientComponent"}var d,e=Object.keys(b).sort(),f="".concat(c,":"),g=_createForOfIteratorHelper(e);try{for(g.s();!(d=g.n()).done;){var h=d.value,i=b[h],j=void 0,k=_typeof(i);if("string"===k||"number"===k||"boolean"===k)j="".concat(h,":").concat(i,";");else if(null===i)j="".concat(h,":null;");else if(i===void 0)j="".concat(h,":undefined;");else if(Array.isArray(i)){// Hash primitive values in arrays for better cache hits
56
+ var l=i.filter(function(a){var b=_typeof(a);return"string"===b||"number"===b||"boolean"===b||null===a});j=l.length===i.length?"".concat(h,":[").concat(l.join(","),"];"):"".concat(h,":[").concat(i.length,"];")}else{// Include sorted keys for object structure signature
57
+ var m=Object.keys(i).sort();j="".concat(h,":{").concat(m.join(","),"};")}f+=j}}catch(a){g.e(a)}finally{g.f()}return BaseNode._hashString(f)}/**
58
+ * Retrieves computed CSS props from the cache with LRU tracking.
59
+ * Access time and hit count are tracked for smarter eviction.
26
60
  * @method _getCachedCssProps
27
- */static _getCachedCssProps(a,b){var c=BaseNode._propProcessingCache.get(b);if(c)return{cssProps:c.cssProps};var d=getCSSProps(a);// LRU-like cache eviction policy.
28
- if(BaseNode._propProcessingCache.set(b,{cssProps:d,signature:b}),500<BaseNode._propProcessingCache.size){var e=BaseNode._propProcessingCache.keys().next().value;e&&BaseNode._propProcessingCache["delete"](e)}return{cssProps:d}}/**
29
- * The main prop processing pipeline. It orchestrates splitting props, generating cache signatures,
30
- * retrieving cached CSS props, computing DOM props, and normalizing children.
61
+ */static _getCachedCssProps(a,b){var c=BaseNode._propProcessingCache.get(b);if(c)return c.lastAccess=Date.now(),c.hitCount++,{cssProps:c.cssProps};var d=getCSSProps(a);return BaseNode._propProcessingCache.set(b,{cssProps:d,signature:b,lastAccess:Date.now(),hitCount:1}),BaseNode._propProcessingCache.size>BaseNode.CACHE_SIZE_LIMIT&&BaseNode._evictLRUEntries(),{cssProps:d}}/**
62
+ * Implements an LRU eviction strategy that removes multiple entries at once.
63
+ * It uses a scoring system where older and less frequently used entries have a higher eviction priority.
64
+ * @method _evictLRUEntries
65
+ */static _evictLRUEntries(){var a,b=Date.now(),c=[],d=_createForOfIteratorHelper(BaseNode._propProcessingCache.entries());// Calculate eviction scores for all entries
66
+ try{for(d.s();!(a=d.n()).done;){var e=_slicedToArray(a.value,2),f=e[0],g=e[1],h=b-g.lastAccess,j=g.hitCount,k=h/1e3+1e3/(j+1);// Score: older age + lower frequency = higher score (more likely to evict)
67
+ // Normalize: age in seconds, frequency as inverse
68
+ c.push({key:f,score:k})}// Sort by score (highest = most evictable)
69
+ }catch(a){d.e(a)}finally{d.f()}c.sort(function(c,a){return a.score-c.score});// Remove top N entries
70
+ for(var l=Math.min(BaseNode.CACHE_CLEANUP_BATCH,c.length),m=0;m<l;m++)BaseNode._propProcessingCache["delete"](c[m].key)}/**
71
+ * The main prop processing pipeline, which now passes the element type for improved caching.
31
72
  * @method _processProps
32
- */_processProps(){var a=this.rawProps,b=a.ref,c=a.key,d=a.children,e=a.css,f=a.props,g=void 0===f?{}:f,h=a.disableEmotion,i=_objectWithoutProperties(a,_excluded);// --- Fast Path Optimization ---
33
- if(0===Object.keys(i).length&&!e)return omitUndefined({ref:b,key:c,css:{},style:g.style,disableEmotion:h,nativeProps:omitUndefined(g),children:this._processChildren(d,h)});// --- Hybrid Caching Strategy ---
34
- var j={},k={};// 1. Categorize props into cacheable (primitives) and non-cacheable (objects/functions).
35
- for(var l in i)if(Object.prototype.hasOwnProperty.call(i,l)){var m=i[l],n=_typeof(m);"string"===n||"number"===n||"boolean"===n?j[l]=m:k[l]=m}// 2. Cache only the CSS props derived from primitive values.
36
- var o=BaseNode._createPropSignature(j),p=BaseNode._getCachedCssProps(j,o),q=p.cssProps,r=getCSSProps(k),s=getDOMProps(i),t=_objectSpread(_objectSpread(_objectSpread({},q),r),e),u=this._processChildren(d,h);// 3. Process non-cacheable props on every render to ensure correctness for functions and objects.
73
+ */_processProps(){var a=this.rawProps,b=a.ref,c=a.key,d=a.children,e=a.css,f=a.props,g=void 0===f?{}:f,h=a.disableEmotion,i=_objectWithoutProperties(a,_excluded2),j=g;// --- Fast Path Optimization ---
74
+ if(0===Object.keys(i).length&&!e)return omitUndefined({ref:b,key:c,style:j.style,disableEmotion:h,deps:this._deps,nativeProps:omitUndefined(j),children:this._processChildren(d,h)});// --- Hybrid Caching Strategy ---
75
+ var k={},l={};// 1. Categorize props into cacheable (primitives) and non-cacheable (objects/functions).
76
+ for(var m in i)if(Object.prototype.hasOwnProperty.call(i,m)){var n=i[m],o=_typeof(n);"string"===o||"number"===o||"boolean"===o?k[m]=n:l[m]=n}// 2. Pass element type to signature generation
77
+ var p=BaseNode._createPropSignature(this.element,k),q=BaseNode._getCachedCssProps(k,p),r=q.cssProps,s=getCSSProps(l),t=getDOMProps(i),u=_objectSpread(_objectSpread(_objectSpread({},r),s),e),v=this._processChildren(d,h,this._stableKey);// 3. Process non-cacheable props on every render to ensure correctness for functions and objects.
37
78
  // DOM props are always processed fresh.
38
79
  // 4. Assemble the final CSS object.
39
80
  // --- Child Normalization ---
40
81
  // --- Final Assembly ---
41
- return omitUndefined(_objectSpread(_objectSpread({ref:b,key:c,css:t,style:g.style},s),{},{disableEmotion:h,nativeProps:omitUndefined(g),children:u}))}// --- Child Processing ---
82
+ return omitUndefined(_objectSpread(_objectSpread({ref:b,key:c,css:u,style:j.style},t),{},{disableEmotion:h,deps:this._deps,nativeProps:omitUndefined(j),children:v}))}/**
83
+ * Determines if a node should update based on its dependency array.
84
+ * Uses a shallow comparison, similar to React's `useMemo` and `useCallback`.
85
+ * @method _shouldNodeUpdate
86
+ */static _shouldNodeUpdate(a,b,c){// SSR has no concept of re-renders, so deps system doesn't apply
87
+ return!!BaseNode._isServer||!c&&(!(void 0!==b)||!(void 0!==a)||b.length!==a.length||!!b.some(function(b,c){return!Object.is(b,a[c])}));// No deps array means always update.
88
+ // First render for this keyed component, or no previous deps.
89
+ // Length change means update.
90
+ // Shallow compare deps. If any have changed, update.
91
+ // Deps are the same, no update needed.
92
+ }// --- Child Processing ---
42
93
  /**
43
94
  * Processes the `children` prop of a node. It handles single children, arrays of children,
44
95
  * and function-as-a-child render props, passing them to `_processRawNode` for normalization.
45
96
  * @method _processChildren
46
- */_processChildren(a,b){return a?"function"==typeof a?a:Array.isArray(a)?a.map(function(a){return BaseNode._processRawNode(a,b)}):BaseNode._processRawNode(a,b):void 0}/**
97
+ */_processChildren(a,b,c){return a?"function"==typeof a?a:Array.isArray(a)?a.map(function(a,d){return BaseNode._processRawNode(a,b,"".concat(c,"_").concat(d))}):BaseNode._processRawNode(a,b,c):void 0}/**
47
98
  * The core normalization function for a single child. It takes any valid `NodeElement`
48
99
  * (primitive, React element, function, `BaseNode` instance) and converts it into a standardized `BaseNode`
49
100
  * instance if it isn't one already. This ensures a consistent structure for the iterative renderer.
50
101
  * @method _processRawNode
51
- */static _processRawNode(a,b){// Primitives and null/undefined are returned as-is.
52
- if(null===a||a===void 0||"string"==typeof a||"number"==typeof a||"boolean"==typeof a)return a;// If it's already a BaseNode, just ensure the `disableEmotion` flag is propagated.
53
- if(isNodeInstance(a))return b&&!a.rawProps.disableEmotion?new BaseNode(a.element,_objectSpread(_objectSpread({},a.rawProps),{},{disableEmotion:!0})):a;// Handle function-as-a-child (render props).
54
- if(BaseNode._isFunctionChild(a))return new BaseNode(BaseNode._functionRenderer,{props:{render:a,disableEmotion:b}});// Handle standard React elements.
55
- if(isValidElement(a)){var c=a.props,d=c.style,e=_objectWithoutProperties(c,_excluded2),f=_objectSpread(_objectSpread({},e),d||{});return new BaseNode(a.type,_objectSpread(_objectSpread(_objectSpread({},f),null!==a.key&&void 0!==a.key?{key:a.key}:{}),{},{disableEmotion:b}))}// Handle component classes and memos.
56
- return isReactClassComponent(a)||isMemo(a)||isForwardRef(a)?new BaseNode(a,{disableEmotion:b}):a instanceof React.Component?BaseNode._processRawNode(a.render(),b):a;// Handle component instances.
102
+ */static _processRawNode(a,b,c){// Primitives and null/undefined are returned as-is.
103
+ if(null===a||a===void 0||"string"==typeof a||"number"==typeof a||"boolean"==typeof a)return a;// If it's already a BaseNode, clone it with a positional key if available.
104
+ if(isNodeInstance(a)){var d=c||b&&!a.rawProps.disableEmotion;if(d){// Create a new BaseNode instance.
105
+ var e=new BaseNode(a.element,a.rawProps,a.dependencies);// Augment the internal _stableKey with positional information.
106
+ // This is purely for BaseNode's internal caching, not for React's 'key' prop.
107
+ return e._stableKey="".concat(c,":").concat(e._stableKey),b&&!e.rawProps.disableEmotion&&(e.rawProps.disableEmotion=!0),e}return a}// Handle function-as-a-child (render props).
108
+ if(BaseNode._isFunctionChild(a))return new BaseNode(BaseNode._functionRenderer,{props:{render:a,disableEmotion:b}},void 0);// Handle standard React elements.
109
+ if(isValidElement(a)){var f=a.props,g=f.style,h=_objectWithoutProperties(f,_excluded3),i=_objectSpread(_objectSpread({},h),g||{});return new BaseNode(a.type,_objectSpread(_objectSpread(_objectSpread({},i),null!==a.key&&void 0!==a.key?{key:a.key}:{}),{},{disableEmotion:b}),void 0)}// Handle component classes and memos.
110
+ return isReactClassComponent(a)||isMemo(a)||isForwardRef(a)?new BaseNode(a,{disableEmotion:b},void 0):a instanceof React.Component?BaseNode._processRawNode(a.render(),b,c):a;// Handle component instances.
57
111
  }/**
58
112
  * A helper to reliably identify if a given function is a "function-as-a-child" (render prop)
59
113
  * rather than a standard Function Component.
60
114
  * @method _isFunctionChild
61
- */static _isFunctionChild(a){if("function"!=typeof a||isReactClassComponent(a)||isMemo(a)||isForwardRef(a))return!1;try{return!(a.prototype&&"function"==typeof a.prototype.render)}catch(a){return!0}}/**
115
+ */static _isFunctionChild(a){if("function"!=typeof a||isReactClassComponent(a)||isMemo(a)||isForwardRef(a))return!1;try{return!(a.prototype&&"function"==typeof a.prototype.render)}catch(a){return __DEV__&&console.error("MeoNode: Error checking if a node is a function child.",a),!0}}/**
62
116
  * A wrapper component that executes a function-as-a-child and processes its return value.
63
117
  * @method _functionRenderer
64
- */static _functionRenderer(a){var b,c=a.render,d=a.disableEmotion;try{b=c()}catch(a){b=null}if(null===b||b===void 0)return b;if(isNodeInstance(b))return d&&!b.rawProps.disableEmotion?new BaseNode(b.element,_objectSpread(_objectSpread({},b.rawProps),{},{disableEmotion:!0})).render():b.render();if(Array.isArray(b))return b.map(function(a,b){return BaseNode._renderProcessedNode({processedElement:BaseNode._processRawNode(a,d),passedKey:"".concat(getElementTypeName(a),"-").concat(b)})});if(b instanceof React.Component)return BaseNode._renderProcessedNode({processedElement:BaseNode._processRawNode(b.render(),d),disableEmotion:d});if("string"==typeof b||"number"==typeof b||"boolean"==typeof b)return b;var e=BaseNode._processRawNode(b,d);return e?BaseNode._renderProcessedNode({processedElement:e,disableEmotion:d}):b}/**
118
+ */static _functionRenderer(a){var b,c=a.render,d=a.disableEmotion;try{b=c()}catch(a){__DEV__&&console.error("MeoNode: Error executing function-as-a-child.",a),b=null}if(null===b||b===void 0)return b;if(isNodeInstance(b))return d&&!b.rawProps.disableEmotion?new BaseNode(b.element,_objectSpread(_objectSpread({},b.rawProps),{},{disableEmotion:!0})).render():b.render();if(Array.isArray(b)){var e=function safeGetKey(a,b){try{return"".concat(getElementTypeName(a),"-").concat(b)}catch(a){return __DEV__&&console.error("MeoNode: Could not determine element type name for key in function-as-a-child.",a),"item-".concat(b)}};return b.map(function(a,b){return BaseNode._renderProcessedNode({processedElement:BaseNode._processRawNode(a,d),passedKey:e(a,b)})})}if(b instanceof React.Component)return BaseNode._renderProcessedNode({processedElement:BaseNode._processRawNode(b.render(),d),disableEmotion:d});if("string"==typeof b||"number"==typeof b||"boolean"==typeof b)return b;var f=BaseNode._processRawNode(b,d);return f?BaseNode._renderProcessedNode({processedElement:f,disableEmotion:d}):b}/**
65
119
  * A legacy helper for the recursive child processing path. This is primarily used by `_functionRenderer`.
66
120
  * @method _renderProcessedNode
67
- */static _renderProcessedNode(a){var b=a.processedElement,c=a.passedKey,d=a.disableEmotion,e={};if(void 0!==c&&(e.key=c),isNodeInstance(b)){var f,g=null===(f=b.rawProps)||void 0===f?void 0:f.key;return b.rawProps.disableEmotion=d,g===c?b.render():new BaseNode(b.element,_objectSpread(_objectSpread({},b.rawProps),e)).render()}return isReactClassComponent(b)?new BaseNode(b,_objectSpread(_objectSpread({},e),{},{disableEmotion:d})).render():b instanceof React.Component?b.render():"function"==typeof b?createElement(b,{key:c}):b}// --- Iterative Renderer ---
121
+ */static _renderProcessedNode(a){var b=a.processedElement,c=a.passedKey,d=a.disableEmotion,e={};if(void 0!==c&&(e.key=c),isNodeInstance(b)){var f,g=null===(f=b.rawProps)||void 0===f?void 0:f.key;return b.rawProps.disableEmotion=d,g===c?b.render():new BaseNode(b.element,_objectSpread(_objectSpread({},b.rawProps),e)).render()}return isReactClassComponent(b)?new BaseNode(b,_objectSpread(_objectSpread({},e),{},{disableEmotion:d})).render():b instanceof React.Component?b.render():"function"==typeof b?createElement(b,{key:c}):b}// --- Iterative Renderer with Deps Support ---
68
122
  /**
69
- * Renders the `BaseNode` and its entire subtree into a ReactElement.
123
+ * Renders the `BaseNode` and its entire subtree into a ReactElement, with support for opt-in reactivity
124
+ * via dependency arrays and inherited blocking.
125
+ *
70
126
  * This method uses an **iterative (non-recursive) approach** with a manual work stack.
71
127
  * This is a crucial architectural choice to prevent "Maximum call stack size exceeded" errors
72
128
  * when rendering very deeply nested component trees, a common limitation of naive recursive rendering.
@@ -76,37 +132,34 @@ return isReactClassComponent(a)||isMemo(a)||isForwardRef(a)?new BaseNode(a,{disa
76
132
  * 2. **Complete Phase:** After all of a node's descendants have been rendered, the loop returns to the node.
77
133
  * It then collects the rendered children from a temporary map and creates its own React element.
78
134
  * @method render
79
- */render(){for(var a=[{node:this,isProcessed:!1}],b=new Map;0<a.length;){var c=a[a.length-1],d=c.node,e=c.isProcessed;// Peek at the top of the stack
80
- if(!e){c.isProcessed=!0;var f=d.props.children;if(f)// Push children in reverse order to maintain the correct processing sequence.
81
- for(var g=(Array.isArray(f)?f:[f]).filter(isNodeInstance),h=g.length-1;0<=h;h--)a.push({node:g[h],isProcessed:!1})}else{a.pop();// Pop the completed work.
82
- var j=d.props,k=j.children,l=j.key,m=j.css,n=j.nativeProps,o=j.disableEmotion,p=_objectWithoutProperties(j,_excluded3),q=[];// Collect rendered children from the map.
83
- k&&(q=(Array.isArray(k)?k:[k]).map(function(a){return isNodeInstance(a)?b.get(a):isValidElement(a)?a:a}));var r=_objectSpread(_objectSpread({},p),{},{key:l},n),s=void 0;// Handle special cases like Fragment.
84
- if(d.element===Fragment||isFragment(d.element))s=createElement(d.element,{key:l},...q);else{// Determine if the component should be styled with Emotion.
85
- var t=m&&!o&&!hasNoStyleTag(d.element);s=t?createElement(StyledRenderer,_objectSpread(_objectSpread({element:d.element},r),{},{css:m,suppressHydrationWarning:!0}),...q):createElement(d.element,r,...q)}// Store the final rendered element in the map for its parent to retrieve.
86
- b.set(d,s)}}return b.get(this)}// --- Portal System ---
135
+ */render(){var a=!!(0<arguments.length&&arguments[0]!==void 0)&&arguments[0],b=this._stableKey,c=BaseNode._isServer?void 0:BaseNode._elementCache.get(b),d=BaseNode._shouldNodeUpdate(null===c||void 0===c?void 0:c.prevDeps,this._deps,a);// Skip cache lookup on server-side
136
+ // Server side rendering is always a fresh render, no cached elements should exist
137
+ if(!d&&null!==c&&void 0!==c&&c.cachedElement)return c.cachedElement;for(var e=[{node:this,isProcessed:!1,blocked:!d}],f=new Map;0<e.length;){var g=e[e.length-1],h=g.node,j=g.isProcessed,k=g.blocked;if(!j){g.isProcessed=!0;var l=h.props.children;if(l)for(var m=(Array.isArray(l)?l:[l]).filter(isNodeInstance),n=m.length-1;0<=n;n--){var o=m[n],p=o._stableKey,q=BaseNode._isServer?void 0:BaseNode._elementCache.get(p),r=BaseNode._shouldNodeUpdate(null===q||void 0===q?void 0:q.prevDeps,o._deps,k);// Skip cache lookup for children on server-side
138
+ if(!r&&null!==q&&void 0!==q&&q.cachedElement){f.set(o,q.cachedElement);continue}var s=k||!r;e.push({node:o,isProcessed:!1,blocked:s})}}else{e.pop();var t=h.props,u=t.children,v=t.key,w=t.css,x=t.nativeProps,y=t.disableEmotion,z=_objectWithoutProperties(t,_excluded4),A=[];u&&(A=(Array.isArray(u)?u:[u]).map(function(a){return isNodeInstance(a)?f.get(a):isValidElement(a)?a:a}));var B=_objectSpread(_objectSpread({},z),{},{key:v},x),C=void 0;if(h.element===Fragment||isFragment(h.element))C=createElement(h.element,{key:v},...A);else{var D=w&&!y&&!hasNoStyleTag(h.element);C=D?createElement(StyledRenderer,_objectSpread(_objectSpread({element:h.element},B),{},{css:w,suppressHydrationWarning:!0}),...A):createElement(h.element,B,...A)}// Only cache on client-side
139
+ // Server-side cache would pollute and cause hydration mismatches
140
+ BaseNode._isServer||BaseNode._elementCache.set(h._stableKey,{prevDeps:h._deps,cachedElement:C}),f.set(h,C)}}return f.get(this)}// --- Portal System ---
87
141
  /**
88
142
  * Ensures that the necessary DOM element and React root are available for portal rendering.
89
143
  * This is only executed on the client-side.
90
144
  * @method _ensurePortalInfrastructure
91
- */_ensurePortalInfrastructure(){if(BaseNode._isServer)return!1;if(this._portalDOMElement&&this._portalReactRoot&&this._portalDOMElement.isConnected)return!0;if(this._portalDOMElement&&!this._portalDOMElement.isConnected){if(this._portalReactRoot){try{this._portalReactRoot.unmount()}catch(a){/* empty */}this._portalReactRoot=null}this._portalDOMElement=null}if(this._portalDOMElement||(this._portalDOMElement=document.createElement("div"),document.body.appendChild(this._portalDOMElement)),!this._portalReactRoot){if(!this._portalDOMElement)return!1;var a=createRoot(this._portalDOMElement);this._portalReactRoot={render:a.render.bind(a),unmount:a.unmount.bind(a),update:function update(){}}}return!0}/**
145
+ */_ensurePortalInfrastructure(){if(BaseNode._isServer)return!1;if(this._portalDOMElement&&this._portalReactRoot&&this._portalDOMElement.isConnected)return!0;if(this._portalDOMElement&&!this._portalDOMElement.isConnected){if(this._portalReactRoot){try{this._portalReactRoot.unmount()}catch(a){__DEV__&&console.error("MeoNode: Error unmounting disconnected portal root.",a)}this._portalReactRoot=null}this._portalDOMElement=null}if(this._portalDOMElement||(this._portalDOMElement=document.createElement("div"),document.body.appendChild(this._portalDOMElement)),!this._portalReactRoot){if(!this._portalDOMElement)return!1;var a=createRoot(this._portalDOMElement);this._portalReactRoot={render:a.render.bind(a),unmount:a.unmount.bind(a),update:function update(){}}}return!0}/**
92
146
  * Renders the node into a React Portal, mounting it directly under `document.body`.
93
147
  * Returns a handle with `update` and `unmount` methods to control the portal's lifecycle.
94
148
  * @method toPortal
95
- */toPortal(){var a=this;if(!this._ensurePortalInfrastructure()||!this._portalReactRoot)throw new Error("toPortal() can only be called in a client-side environment where document.body is available.");(function renderCurrent(){try{a._portalReactRoot.render(a.render())}catch(a){/* empty */}})();try{var b=this._portalReactRoot.unmount.bind(this._portalReactRoot),c=this._portalReactRoot;return c.update=function(b){try{if(!a._portalReactRoot)return;var c=isNodeInstance(b)?b.render():b;a._portalReactRoot.render(c)}catch(a){/* empty */}},c.unmount=function(){try{b()}catch(a){/* empty */}if(a._portalDOMElement){try{a._portalDOMElement.parentNode&&a._portalDOMElement.parentNode.removeChild(a._portalDOMElement)}catch(a){/* empty */}a._portalDOMElement=null}a._portalReactRoot=null},c}catch(a){return this._portalReactRoot}}/**
96
- * A static method to clear all internal caches. This is primarily useful for testing
97
- * to ensure that tests run in a clean, isolated state.
149
+ */toPortal(){var a=this;if(!this._ensurePortalInfrastructure()||!this._portalReactRoot)throw new Error("toPortal() can only be called in a client-side environment where document.body is available.");(function renderCurrent(){try{a._portalReactRoot.render(a.render())}catch(a){__DEV__&&console.error("MeoNode: Error rendering initial portal content.",a)}})();try{var b=this._portalReactRoot.unmount.bind(this._portalReactRoot),c=this._portalReactRoot;return c.update=function(b){try{if(!a._portalReactRoot)return;var c=isNodeInstance(b)?b.render():b;a._portalReactRoot.render(c)}catch(a){__DEV__&&console.error("MeoNode: Error updating portal content.",a)}},c.unmount=function(){try{b()}catch(a){__DEV__&&console.error("MeoNode: Error unmounting portal root.",a)}if(a._portalDOMElement){try{a._portalDOMElement.parentNode&&a._portalDOMElement.parentNode.removeChild(a._portalDOMElement)}catch(a){__DEV__&&console.error("MeoNode: Error removing portal DOM element.",a)}a._portalDOMElement=null}a._portalReactRoot=null},c}catch(a){return __DEV__&&console.error("MeoNode: Error creating portal handle.",a),this._portalReactRoot}}/**
150
+ * A static method to clear all internal caches.
98
151
  * @method clearCaches
99
- */static clearCaches(){BaseNode._propProcessingCache.clear()}}// --- Factory Functions ---
152
+ */static clearCaches(){BaseNode._propProcessingCache.clear(),BaseNode._elementCache.clear()}}// --- Factory Functions ---
100
153
  /**
101
154
  * The primary factory function for creating a `BaseNode` instance.
102
155
  * It's the simplest way to wrap a component or element.
103
156
  * @function Node
104
- */_defineProperty(BaseNode,"_isServer","undefined"==typeof window),_defineProperty(BaseNode,"_propProcessingCache",new Map),_defineProperty(BaseNode,"_isValidElement",isValidElementType);export function Node(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:{},d=_objectSpread(_objectSpread({},b),c);return new BaseNode(a,d)}/**
157
+ */_BaseNode=BaseNode,_defineProperty(BaseNode,"_isServer","undefined"==typeof window),_defineProperty(BaseNode,"_propProcessingCache",new Map),_defineProperty(BaseNode,"_elementCache",new Map),_defineProperty(BaseNode,"_isValidElement",isValidElementType),_defineProperty(BaseNode,"_isStyleProp",_BaseNode._isServer||"undefined"==typeof document?function(){return!1}:function(a){return a in document.body.style}),_defineProperty(BaseNode,"CACHE_SIZE_LIMIT",500),_defineProperty(BaseNode,"CACHE_CLEANUP_BATCH",50);export function Node(a){var b=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},c=2<arguments.length?arguments[2]:void 0,d=b,e=d.deps,f=_objectWithoutProperties(d,_excluded5);return new BaseNode(a,f,c)}/**
105
158
  * Creates a curried node factory for a given React element or component type.
106
159
  * This is useful for creating reusable, specialized factory functions (e.g., `const Div = createNode('div')`).
107
160
  * @function createNode
108
- */export function createNode(a,b){var c=function Instance(c){return Node(a,_objectSpread(_objectSpread({},b),c))};return c.element=a,c}/**
161
+ */export function createNode(a,b){var c=function Instance(c,d){return Node(a,_objectSpread(_objectSpread({},b),c),d)};return c.element=a,c}/**
109
162
  * Creates a node factory function where the first argument is `children` and the second is `props`.
110
163
  * This provides a more ergonomic API for components that primarily wrap content (e.g., `P('Some text')`).
111
164
  * @function createChildrenFirstNode
112
- */export function createChildrenFirstNode(a,b){var c=function Instance(c,d){return Node(a,_objectSpread(_objectSpread(_objectSpread({},b),d),{},{children:c}))};return c.element=a,c}
165
+ */export function createChildrenFirstNode(a,b){var c=function Instance(c,d,e){return Node(a,_objectSpread(_objectSpread(_objectSpread({},b),d),{},{children:c}),e)};return c.element=a,c}
@@ -1,4 +1,4 @@
1
- import type { FinalNodeProps, NodeElement, NodeInstance } from '../node.type.js';
1
+ import type { FinalNodeProps, NodeElement, NodeInstance } from '../types/node.type.js';
2
2
  import type { ComponentProps, CSSProperties, ElementType } from 'react';
3
3
  /**
4
4
  * Retrieves a deeply nested value from an object using a dot-separated string path.
@@ -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,mBAAmB,CAAA;AAElF,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,iEAmC5B,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;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,iCAE1B,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,iEAmC5B,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,4 +1,4 @@
1
- import type { Theme } from '../node.type.js';
1
+ import type { Theme } from '../types/node.type.js';
2
2
  /**
3
3
  * Resolves theme variable references in an object's values iteratively.
4
4
  * This function uses a manual work stack to traverse the object, which prevents
@@ -1 +1 @@
1
- {"version":3,"file":"theme.helper.d.ts","sourceRoot":"","sources":["../../src/helper/theme.helper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,mBAAmB,CAAA;AAoE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB;;SAoH/B,CAAA"}
1
+ {"version":3,"file":"theme.helper.d.ts","sourceRoot":"","sources":["../../src/helper/theme.helper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,yBAAyB,CAAA;AAoEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB;;SAoH/B,CAAA"}