@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.
- package/CHANGELOG.md +29 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/components/html.node.d.ts +139 -139
- package/dist/components/react.node.d.ts +3 -3
- package/dist/components/styled-renderer.client.d.ts +1 -1
- package/dist/components/styled-renderer.client.d.ts.map +1 -1
- package/dist/components/theme-provider.client.d.ts +1 -1
- package/dist/components/theme-provider.client.d.ts.map +1 -1
- package/dist/components/theme-provider.d.ts +1 -1
- package/dist/constants/common.const.d.ts +1 -0
- package/dist/constants/common.const.d.ts.map +1 -1
- package/dist/constants/common.const.js +1 -1
- package/dist/core.node.d.ts +70 -19
- package/dist/core.node.d.ts.map +1 -1
- package/dist/core.node.js +103 -50
- package/dist/helper/common.helper.d.ts +1 -1
- package/dist/helper/common.helper.d.ts.map +1 -1
- package/dist/helper/theme.helper.d.ts +1 -1
- package/dist/helper/theme.helper.d.ts.map +1 -1
- package/dist/hoc/component.hoc.d.ts +3 -3
- package/dist/hoc/component.hoc.d.ts.map +1 -1
- package/dist/hoc/component.hoc.js +1 -1
- package/dist/hoc/portal.hoc.d.ts +1 -1
- package/dist/hoc/portal.hoc.d.ts.map +1 -1
- package/dist/hook/usePortal.d.ts +1 -1
- package/dist/hook/usePortal.d.ts.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/nextjs-registry/index.d.ts +1 -1
- package/dist/{node.type.d.ts → types/node.type.d.ts} +11 -2
- package/dist/types/node.type.d.ts.map +1 -0
- package/dist/types/node.type.js +1 -0
- package/package.json +17 -17
- package/dist/node.type.d.ts.map +0 -1
- /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("../
|
|
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("../
|
|
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("../
|
|
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,
|
|
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 +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,
|
|
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("../
|
|
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;
|
package/dist/core.node.d.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
*
|
|
30
|
-
*
|
|
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
|
-
*
|
|
36
|
-
*
|
|
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
|
|
42
|
-
*
|
|
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
|
-
*
|
|
48
|
-
*
|
|
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.
|
|
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>,
|
|
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
|
|
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
|
|
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'
|
|
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'
|
|
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
|
package/dist/core.node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.node.d.ts","sourceRoot":"","sources":["../src/core.node.ts"],"names":[],"mappings":"AAAA,OAAc,EAKZ,KAAK,YAAY,EAKlB,MAAM,OAAO,CAAA;AACd,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EAEd,gBAAgB,EAChB,WAAW,EAEX,eAAe,EAEf,YAAY,EACZ,UAAU,EACV,SAAS,EAET,OAAO,
|
|
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"],
|
|
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
|
|
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}
|
|
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
|
-
*
|
|
16
|
-
*
|
|
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){
|
|
19
|
-
|
|
20
|
-
*
|
|
21
|
-
*
|
|
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
|
|
24
|
-
|
|
25
|
-
|
|
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)
|
|
28
|
-
|
|
29
|
-
*
|
|
30
|
-
*
|
|
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,
|
|
33
|
-
if(0===Object.keys(i).length&&!e)return omitUndefined({ref:b,key:c,
|
|
34
|
-
var
|
|
35
|
-
for(var
|
|
36
|
-
var
|
|
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:
|
|
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,
|
|
53
|
-
if(isNodeInstance(a))
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
return
|
|
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
|
|
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:
|
|
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(){
|
|
80
|
-
|
|
81
|
-
for(var g=(Array.isArray(
|
|
82
|
-
var
|
|
83
|
-
|
|
84
|
-
|
|
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){
|
|
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){
|
|
96
|
-
* A static method to clear all internal caches.
|
|
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
|
|
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,
|
|
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 +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,
|
|
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"}
|