@meonode/ui 0.4.13 → 1.0.0-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,236 +2,384 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.0.0-0] - 2025-11-27
6
+
7
+ ### Fix
8
+
9
+ - **core**: Overhaul mount tracking, caching, and fix stableKey generation to prevent memory leaks ([`af1b707`](https://github.com/l7aromeo/meonode-ui/commit/af1b707187b66cdbf9fe88f791aee30cfc7d2835))
10
+ - Replaced the simple `Set` in `MountTrackerUtil` with a reference-counting system (`Map`) to ensure a node is only considered unmounted when all its instances are gone.
11
+ - The root element of a render cycle is now wrapped with a `MeoNodeUnmounter` component before being cached to guarantee that the unmount logic is always present, even for cached elements.
12
+ - Improved `stableKey` generation in `NodeUtil.createPropSignature` to correctly differentiate function props by hashing their string representation, preventing cache collisions for components with different `onClick` or similar handlers.
13
+ - Added new test suites (`leak-repro.test.ts`, `props-caching-leak.test.ts`) to specifically target and verify the leak fixes.
14
+
15
+ ### Perf
16
+
17
+ - **cache**: Improve props cache eviction strategy ([`ce2f561`](https://github.com/l7aromeo/meonode-ui/commit/ce2f5616b21d68873dff0f1c4466bf9a2a40ce4d))
18
+ - Adjusted the `propProcessingCache` eviction logic in `NodeUtil` to be more aggressive, removing enough items to get back to the `CACHE_SIZE_LIMIT` plus an additional buffer batch, preventing unbounded growth under high load.
19
+
20
+ ### Feat
21
+
22
+ - **deps**: Add react-router-dom and test polyfills ([`29dcf13`](https://github.com/l7aromeo/meonode-ui/commit/29dcf137b5ebcba0e09e5acf13aadac6a0a0f513))
23
+ - Introduced `react-router-dom` as a new development dependency to enable integration testing with React Router.
24
+ - Added `whatwg-fetch` and Node.js `util` polyfills to `jest.setup.ts` for compatibility in the Jest environment.
25
+
26
+ ### Test
27
+
28
+ - **react-router**: Add integration tests for react-router-dom ([`8478623`](https://github.com/l7aromeo/meonode-ui/commit/8478623add6bc66b9805a3ec9c0661f4df223f63))
29
+ - Introduced a new test suite to verify the proper functioning and caching behavior of MeoNode components when used within a React Router environment.
30
+ - Includes tests for declarative and programmatic navigation, ensuring that component lifecycles and caching mechanisms interact correctly with React Router's dynamic rendering.
31
+
32
+ ### Chore
33
+ - **package**: Rename publish:pre script to publish:prerelease and add publish:premajor script in package.json ([`a98ba69`](https://github.com/l7aromeo/meonode-ui/commit/a98ba697a6e024126256a0e2517c839bbecd8058))
34
+
35
+ ## [0.4.14] - 2025-11-23
36
+
37
+ ### Perf
38
+
39
+ - **cache**: enforce dependency-based caching with shouldCacheElement helper ([
40
+ `fab5525`](https://github.com/l7aromeo/meonode-ui/commit/fab55253093fbd2958ad84bcc98b1f0d1a07349c))
41
+ - Introduces NodeUtil.shouldCacheElement() helper to centralize and enforce the opt-in caching strategy where only
42
+ nodes with explicit dependencies are cached
43
+ - Completes the memory optimization by closing loopholes where nodes without dependencies were still being cached
44
+ based on stableKey alone
45
+ - Replaces 4 inconsistent cache eligibility checks in BaseNode.render():
46
+ - Cache lookup for parent nodes
47
+ - Cache lookup for child nodes
48
+ - Cache storage during rendering
49
+ - MeoNodeUnmounter wrapping decision
50
+ - Impact: Reduces memory usage, ensures mount tracking and cache operations stay in sync, improves code
51
+ maintainability
52
+
53
+ ### Test
54
+
55
+ - **memoization**: refine test to assert precise cache size after rendering components ([
56
+ `8ded697`](https://github.com/l7aromeo/meonode-ui/commit/8ded6974cc1565c384abe1a3ca54e1f7bc8a9619))
57
+
58
+ ### Chore
59
+
60
+ - **type**: remove src/types/env.d.ts as it is no longer needed ([aab4299](https://github.com/l7aromeo/meonode-ui/commit/aab429944bf12269d5e6116d3460ff354a42f673))
61
+
5
62
  ## [0.4.13] - 2025-11-23
6
63
 
7
64
  ### Fix
8
- - **props**: improve prop handling and prevent leakage ([`73cc696`](https://github.com/l7aromeo/meonode-ui/commit/73cc696b3df8c1bd2ddef789de58febc6cd2f1c5))
9
- - This commit refactors prop handling within the MeoNode ecosystem to ensure that internal processing props are not leaked to the DOM.
10
- - Key changes:
11
- - The `MeoNodeUnmounter` is updated to correctly isolate and pass through props intended for the underlying DOM element, improving compatibility with libraries like MUI.
12
- - Internal props such as `node`, `css`, and `disableEmotion` are now explicitly prevented from being rendered as HTML attributes.
13
- - Added comprehensive tests to verify that standard HTML attributes are passed through while internal props are successfully filtered out.
14
- - This improves the robustness and predictability of component rendering.
65
+
66
+ - **props**: improve prop handling and prevent leakage ([
67
+ `73cc696`](https://github.com/l7aromeo/meonode-ui/commit/73cc696b3df8c1bd2ddef789de58febc6cd2f1c5))
68
+ - This commit refactors prop handling within the MeoNode ecosystem to ensure that internal processing props are not
69
+ leaked to the DOM.
70
+ - Key changes:
71
+ - The `MeoNodeUnmounter` is updated to correctly isolate and pass through props intended for the underlying DOM
72
+ element, improving compatibility with libraries like MUI.
73
+ - Internal props such as `node`, `css`, and `disableEmotion` are now explicitly prevented from being rendered as
74
+ HTML attributes.
75
+ - Added comprehensive tests to verify that standard HTML attributes are passed through while internal props are
76
+ successfully filtered out.
77
+ - This improves the robustness and predictability of component rendering.
15
78
 
16
79
  ### Test
17
- - **props**: add tests for prop handling and leakage ([`a508e10`](https://github.com/l7aromeo/meonode-ui/commit/a508e107539d9ce84e8d99b63a0af329b28f3249))
18
- - Added new tests to verify that component props are correctly passed as HTML attributes, handle createNode and Node() correctly, and crucially, that internal MeoNode props are not leaked to the DOM.
80
+
81
+ - **props**: add tests for prop handling and leakage ([
82
+ `a508e10`](https://github.com/l7aromeo/meonode-ui/commit/a508e107539d9ce84e8d99b63a0af329b28f3249))
83
+ - Added new tests to verify that component props are correctly passed as HTML attributes, handle createNode and
84
+ Node() correctly, and crucially, that internal MeoNode props are not leaked to the DOM.
19
85
 
20
86
  ### Chore
21
- - **core**: remove unnecessary type assertion from finalChildren assignment ([`827b3ef`](https://github.com/l7aromeo/meonode-ui/commit/827b3ef4490bca08d58ef5fe1fd885aadbbb1524))
87
+
88
+ - **core**: remove unnecessary type assertion from finalChildren assignment ([
89
+ `827b3ef`](https://github.com/l7aromeo/meonode-ui/commit/827b3ef4490bca08d58ef5fe1fd885aadbbb1524))
22
90
 
23
91
  ## [0.4.12] - 2025-11-21
24
92
 
25
93
  ### Feat
26
- - **build**: migrate from Babel to Rollup with ESM and CJS support ([`70326a1`](https://github.com/l7aromeo/meonode-ui/commit/70326a107259c095d571b838dda15ffbf845af1d))
27
- - Replace Babel build system with Rollup configuration to prevent output legacy javascript code
28
- - Add support for both ESM and CJS output formats
29
- - Update package.json exports to point to new build outputs
30
- - Add Rollup plugins for TypeScript, commonjs, minification, and preserve directives
31
- - Remove Babel-related dependencies and configuration files
32
- - Update tsconfig.json to use 'preserve' module setting and bundler resolution
33
- - Configure build to output to separate ESM and CJS directories
94
+
95
+ - **build**: migrate from Babel to Rollup with ESM and CJS support ([
96
+ `70326a1`](https://github.com/l7aromeo/meonode-ui/commit/70326a107259c095d571b838dda15ffbf845af1d))
97
+ - Replace Babel build system with Rollup configuration to prevent output legacy javascript code
98
+ - Add support for both ESM and CJS output formats
99
+ - Update package.json exports to point to new build outputs
100
+ - Add Rollup plugins for TypeScript, commonjs, minification, and preserve directives
101
+ - Remove Babel-related dependencies and configuration files
102
+ - Update tsconfig.json to use 'preserve' module setting and bundler resolution
103
+ - Configure build to output to separate ESM and CJS directories
34
104
 
35
105
  ## [0.4.11] - 2025-11-21
36
106
 
37
107
  ### Fix
38
- - **core**: enhance MeoNodeUnmounter cleanup logic and support additional props cloning ([`02c17f7`](https://github.com/l7aromeo/meonode-ui/commit/02c17f7))
39
- - Refactor MeoNodeUnmounter to use useEffectEvent for stable cleanup on unmount
40
- - Cleanup removes node from BaseNode.elementCache, untracks mount via MountTrackerUtil, unregisters from BaseNode.cacheCleanupRegistry, and clears lastSignature to prevent memory leaks
41
- - Support cloning and forwarding additional props to valid React children elements
108
+
109
+ - **core**: enhance MeoNodeUnmounter cleanup logic and support additional props cloning ([
110
+ `02c17f7`](https://github.com/l7aromeo/meonode-ui/commit/02c17f7))
111
+ - Refactor MeoNodeUnmounter to use useEffectEvent for stable cleanup on unmount
112
+ - Cleanup removes node from BaseNode.elementCache, untracks mount via MountTrackerUtil, unregisters from
113
+ BaseNode.cacheCleanupRegistry, and clears lastSignature to prevent memory leaks
114
+ - Support cloning and forwarding additional props to valid React children elements
42
115
 
43
116
  ### Refactor
44
- - **node.util**: enhance documentation for utility methods and improve clarity ([`ee42c24`](https://github.com/l7aromeo/meonode-ui/commit/ee42c24))
45
- - **theme**: reorder ThemeResolverCache methods for clarity ([`cb842c8`](https://github.com/l7aromeo/meonode-ui/commit/cb842c8))
46
- - Moved `_generateCacheKey` and `_evict` methods below the main logic in `ThemeResolverCache` for better readability and organization
47
- - Removed duplicate declaration of `_instance` property
48
- - Kept functionality unchanged, improving code structure and maintainability
117
+
118
+ - **node.util**: enhance documentation for utility methods and improve clarity ([
119
+ `ee42c24`](https://github.com/l7aromeo/meonode-ui/commit/ee42c24))
120
+ - **theme**: reorder ThemeResolverCache methods for clarity ([
121
+ `cb842c8`](https://github.com/l7aromeo/meonode-ui/commit/cb842c8))
122
+ - Moved `_generateCacheKey` and `_evict` methods below the main logic in `ThemeResolverCache` for better readability
123
+ and organization
124
+ - Removed duplicate declaration of `_instance` property
125
+ - Kept functionality unchanged, improving code structure and maintainability
49
126
 
50
127
  ### Test
51
- - **perf**: add memory leak detection test for navigation cycles and improve formatMemory function ([`ba139fc`](https://github.com/l7aromeo/meonode-ui/commit/ba139fc))
52
- - Added a new performance test to detect memory leaks during repeated navigation cycles between pages
53
- - The test measures heap memory usage before, during, and after navigation, ensuring memory growth stays within acceptable limits
54
- - Enhanced the formatMemory utility to correctly handle negative byte values and added JSDoc comments for clarity
55
- - Removed an obsolete shallowly equal props performance test to streamline the test suite
56
- - **unmounter**: add regression test for MeoNodeUnmounter to forward implicit props in MUI RadioGroup integration ([`2ecaabd`](https://github.com/l7aromeo/meonode-ui/commit/2ecaabd))
57
- - Added a test to ensure MeoNodeUnmounter correctly forwards props injected via React.cloneElement, addressing issues with libraries like MUI where RadioGroup injects 'checked' and 'onChange' into Radio components
58
- - This prevents swallowing of props and verifies proper behavior of controlled radio inputs
59
- - Also updated an existing cache size assertion to allow equality, reflecting improved mount tracking
60
- - **perf**: update react-createelement comparison tests with 5000 nested nodes and fix typings ([`b345ec0`](https://github.com/l7aromeo/meonode-ui/commit/b345ec0))
61
- - Changed rerender to use React.cloneElement<any> for proper typing
62
- - Updated NUM_NODES constant to 5000 for nested structure tests
63
- - Removed redundant comments about node count reduction to prevent stack overflow
128
+
129
+ - **perf**: add memory leak detection test for navigation cycles and improve formatMemory function ([
130
+ `ba139fc`](https://github.com/l7aromeo/meonode-ui/commit/ba139fc))
131
+ - Added a new performance test to detect memory leaks during repeated navigation cycles between pages
132
+ - The test measures heap memory usage before, during, and after navigation, ensuring memory growth stays within
133
+ acceptable limits
134
+ - Enhanced the formatMemory utility to correctly handle negative byte values and added JSDoc comments for clarity
135
+ - Removed an obsolete shallowly equal props performance test to streamline the test suite
136
+ - **unmounter**: add regression test for MeoNodeUnmounter to forward implicit props in MUI RadioGroup integration ([
137
+ `2ecaabd`](https://github.com/l7aromeo/meonode-ui/commit/2ecaabd))
138
+ - Added a test to ensure MeoNodeUnmounter correctly forwards props injected via React.cloneElement, addressing
139
+ issues with libraries like MUI where RadioGroup injects 'checked' and 'onChange' into Radio components
140
+ - This prevents swallowing of props and verifies proper behavior of controlled radio inputs
141
+ - Also updated an existing cache size assertion to allow equality, reflecting improved mount tracking
142
+ - **perf**: update react-createelement comparison tests with 5000 nested nodes and fix typings ([
143
+ `b345ec0`](https://github.com/l7aromeo/meonode-ui/commit/b345ec0))
144
+ - Changed rerender to use React.cloneElement<any> for proper typing
145
+ - Updated NUM_NODES constant to 5000 for nested structure tests
146
+ - Removed redundant comments about node count reduction to prevent stack overflow
64
147
 
65
148
  ### Chore
66
- - **deps**: upgrade devDependencies and update test scripts ([`2ea128e`](https://github.com/l7aromeo/meonode-ui/commit/2ea128e))
67
- - add new devDependencies: @emotion/is-prop-valid@1.4.0, @emotion/styled@11.14.1, @mui/material@7.3.5, and related packages
68
- - update yarn to version 4.11.0
69
- - update test scripts to increase max-old-space-size to 8192 and include react-createelement-comparison.test.ts in test and perf runs
70
- - update various package resolutions in yarn.lock to align with new versions and dependencies
71
- - **babel**: add "builtIns": false to minify plugin configuration ([`e16cdfb`](https://github.com/l7aromeo/meonode-ui/commit/e16cdfb))
149
+
150
+ - **deps**: upgrade devDependencies and update test scripts ([
151
+ `2ea128e`](https://github.com/l7aromeo/meonode-ui/commit/2ea128e))
152
+ - add new devDependencies: @emotion/is-prop-valid@1.4.0, @emotion/styled@11.14.1, @mui/material@7.3.5, and related
153
+ packages
154
+ - update yarn to version 4.11.0
155
+ - update test scripts to increase max-old-space-size to 8192 and include react-createelement-comparison.test.ts in
156
+ test and perf runs
157
+ - update various package resolutions in yarn.lock to align with new versions and dependencies
158
+ - **babel**: add "builtIns": false to minify plugin configuration ([
159
+ `e16cdfb`](https://github.com/l7aromeo/meonode-ui/commit/e16cdfb))
72
160
  - **yarn**: update yarnPath to version 4.11.0 ([`ecb6c68`](https://github.com/l7aromeo/meonode-ui/commit/ecb6c68))
73
161
 
74
162
  ### Docs
75
- - **CONTRIBUTING**: improve formatting and readability of contribution guidelines ([`a7462ed`](https://github.com/l7aromeo/meonode-ui/commit/a7462ed))
163
+
164
+ - **CONTRIBUTING**: improve formatting and readability of contribution guidelines ([
165
+ `a7462ed`](https://github.com/l7aromeo/meonode-ui/commit/a7462ed))
76
166
 
77
167
  ## [0.4.10] - 2025-11-20
78
168
 
79
169
  ### Fix
80
- - **unmounter**: prevent redundant FinalizationRegistry callbacks ([`59f5adf`](https://github.com/l7aromeo/meonode-ui/commit/59f5adf2f553aa49a88d1b44366b004d829ca107))
81
- - Explicitly unregister node from cacheCleanupRegistry on unmount
82
- - Prevents double cleanup when node is both unmounted and GC'd
83
- - Improves cleanup efficiency and reduces unnecessary registry callbacks
170
+
171
+ - **unmounter**: prevent redundant FinalizationRegistry callbacks ([
172
+ `59f5adf`](https://github.com/l7aromeo/meonode-ui/commit/59f5adf2f553aa49a88d1b44366b004d829ca107))
173
+ - Explicitly unregister node from cacheCleanupRegistry on unmount
174
+ - Prevents double cleanup when node is both unmounted and GC'd
175
+ - Improves cleanup efficiency and reduces unnecessary registry callbacks
84
176
 
85
177
  ### Perf
86
- - **util**: optimize prop processing and child handling ([`be26488`](https://github.com/l7aromeo/meonode-ui/commit/be26488e304629dd13851dfcaa7fedf43ad8b5c3))
87
- - Conditional sort: only sort keys if length > 1 (eliminates unnecessary sorts)
88
- - Replace for...in with Object.keys() iteration for better performance and safety
89
- - Add fast path for single child processing (non-array or 1-element array)
90
- - Avoid unnecessary array operations for common single-child case
91
- - Performance impact:
92
- - Reduced CPU overhead for small prop objects
93
- - Faster iteration with Object.keys() vs for...in
94
- - Eliminates array map() call for single child components
95
-
96
- - **core**: add exception safety and optimize render method ([`5aad000`](https://github.com/l7aromeo/meonode-ui/commit/5aad000335ff29f078a9d40192d5a70fe9b61d12))
97
- - Wrap render logic in try-finally to ensure renderContext is always released
98
- - Null out workStack slots before releasing to help GC
99
- - Pre-allocate finalChildren array to avoid resizing during iteration
100
- - Replace non-null assertion with explicit error handling for better debugging
101
- - Add object pooling for workStack and renderedElements (reduces GC pressure)
102
- - Pool capped at 50 contexts with 2048-item limit to prevent memory issues
103
- - Exception safety ensures cleanup even if rendering throws
178
+
179
+ - **util**: optimize prop processing and child handling ([
180
+ `be26488`](https://github.com/l7aromeo/meonode-ui/commit/be26488e304629dd13851dfcaa7fedf43ad8b5c3))
181
+ - Conditional sort: only sort keys if length > 1 (eliminates unnecessary sorts)
182
+ - Replace for...in with Object.keys() iteration for better performance and safety
183
+ - Add fast path for single child processing (non-array or 1-element array)
184
+ - Avoid unnecessary array operations for common single-child case
185
+ - Performance impact:
186
+ - Reduced CPU overhead for small prop objects
187
+ - Faster iteration with Object.keys() vs for...in
188
+ - Eliminates array map() call for single child components
189
+
190
+ - **core**: add exception safety and optimize render method ([
191
+ `5aad000`](https://github.com/l7aromeo/meonode-ui/commit/5aad000335ff29f078a9d40192d5a70fe9b61d12))
192
+ - Wrap render logic in try-finally to ensure renderContext is always released
193
+ - Null out workStack slots before releasing to help GC
194
+ - Pre-allocate finalChildren array to avoid resizing during iteration
195
+ - Replace non-null assertion with explicit error handling for better debugging
196
+ - Add object pooling for workStack and renderedElements (reduces GC pressure)
197
+ - Pool capped at 50 contexts with 2048-item limit to prevent memory issues
198
+ - Exception safety ensures cleanup even if rendering throws
104
199
 
105
200
  ### Test
106
- - **perf**: add React comparison tests with memory tracking ([`bc66d54`](https://github.com/l7aromeo/meonode-ui/commit/bc66d540c4ffa4ad083322dbdbc201f652ea5314))
107
- - Add comprehensive performance comparison between React.createElement and MeoNode
108
- - Test both flat (10k nodes) and nested (5k nodes) structures
109
- - Include memory usage measurements (initial + after 100 updates)
110
- - Reduce nested nodes from 10k to 5k to prevent stack overflow with StyledRenderer
111
- - Add table output with time and memory columns for clear comparison
112
- - Add GC availability warning for accurate measurements
113
- - Provides detailed performance and memory behavior insights during re-renders
114
- - Avoids stack overflow in deeply nested test scenarios
115
-
116
- - **performance**: enhance performance metrics report formatting and adjust thresholds ([`6f3abe4`](https://github.com/l7aromeo/meonode-ui/commit/6f3abe4442938aa6cd414341fdf2aba25a9ece58))
117
- - Improve table formatting for performance metrics
118
- - Adjust test thresholds based on optimization results
119
- - Enhanced reporting for better visibility into performance characteristics
201
+
202
+ - **perf**: add React comparison tests with memory tracking ([
203
+ `bc66d54`](https://github.com/l7aromeo/meonode-ui/commit/bc66d540c4ffa4ad083322dbdbc201f652ea5314))
204
+ - Add comprehensive performance comparison between React.createElement and MeoNode
205
+ - Test both flat (10k nodes) and nested (5k nodes) structures
206
+ - Include memory usage measurements (initial + after 100 updates)
207
+ - Reduce nested nodes from 10k to 5k to prevent stack overflow with StyledRenderer
208
+ - Add table output with time and memory columns for clear comparison
209
+ - Add GC availability warning for accurate measurements
210
+ - Provides detailed performance and memory behavior insights during re-renders
211
+ - Avoids stack overflow in deeply nested test scenarios
212
+
213
+ - **performance**: enhance performance metrics report formatting and adjust thresholds ([
214
+ `6f3abe4`](https://github.com/l7aromeo/meonode-ui/commit/6f3abe4442938aa6cd414341fdf2aba25a9ece58))
215
+ - Improve table formatting for performance metrics
216
+ - Adjust test thresholds based on optimization results
217
+ - Enhanced reporting for better visibility into performance characteristics
120
218
 
121
219
  ## [0.4.9] - 2025-11-19
122
220
 
123
221
  ### Feat
124
- - **build**: add support for @tests alias and include tests folder in build and test configs ([`4dfd165`](https://github.com/l7aromeo/meonode-ui/commit/4dfd165fa52f93fe63ac7338344b91dfa5622c4b))
222
+
223
+ - **build**: add support for @tests alias and include tests folder in build and test configs ([
224
+ `4dfd165`](https://github.com/l7aromeo/meonode-ui/commit/4dfd165fa52f93fe63ac7338344b91dfa5622c4b))
125
225
 
126
226
  ### Perf
127
- - **core**: optimize rendering, caching, and memory management ([`4f599be`](https://github.com/l7aromeo/meonode-ui/commit/4f599be44458fef208a30849545606b060c4ec6b))
128
- - Reworks the core rendering loop to use a more efficient, manually-managed work stack with exponential growth, reducing reallocations and improving performance for deep and wide node trees.
129
- - Optimizes stable key generation by removing expensive shallow equality checks in favor of strict reference equality, significantly speeding up prop processing for cached components.
130
- - Implements a high-performance MinHeap-based LRU cache eviction strategy for prop processing, replacing a slower sort-based method. This ensures that the most relevant props are kept in the cache with minimal overhead.
131
- - Introduces CSS object hashing to accelerate prop signature generation, avoiding costly serialization of large style objects.
132
- - Fixes several memory leaks by ensuring proper cleanup of node properties (lastSignature, lastPropsObj) and unregistering nodes from the cache cleanup registry upon eviction.
133
- - Decouples element cache deletion from mount tracking to prevent race conditions and ensure reliable cleanup during component unmounting.
227
+
228
+ - **core**: optimize rendering, caching, and memory management ([
229
+ `4f599be`](https://github.com/l7aromeo/meonode-ui/commit/4f599be44458fef208a30849545606b060c4ec6b))
230
+ - Reworks the core rendering loop to use a more efficient, manually-managed work stack with exponential growth,
231
+ reducing reallocations and improving performance for deep and wide node trees.
232
+ - Optimizes stable key generation by removing expensive shallow equality checks in favor of strict reference
233
+ equality, significantly speeding up prop processing for cached components.
234
+ - Implements a high-performance MinHeap-based LRU cache eviction strategy for prop processing, replacing a slower
235
+ sort-based method. This ensures that the most relevant props are kept in the cache with minimal overhead.
236
+ - Introduces CSS object hashing to accelerate prop signature generation, avoiding costly serialization of large
237
+ style objects.
238
+ - Fixes several memory leaks by ensuring proper cleanup of node properties (lastSignature, lastPropsObj) and
239
+ unregistering nodes from the cache cleanup registry upon eviction.
240
+ - Decouples element cache deletion from mount tracking to prevent race conditions and ensure reliable cleanup during
241
+ component unmounting.
134
242
 
135
243
  ### Refactor
136
- - **build**: rename constants directory from constants to constant and update imports accordingly ([`9531947`](https://github.com/l7aromeo/meonode-ui/commit/9531947af9b304c11c0865e8deafa1a633220753))
244
+
245
+ - **build**: rename constants directory from constants to constant and update imports accordingly ([
246
+ `9531947`](https://github.com/l7aromeo/meonode-ui/commit/9531947af9b304c11c0865e8deafa1a633220753))
137
247
 
138
248
  ### Test
139
- - **perf**: overhaul performance test suite ([`e3bd6ac`](https://github.com/l7aromeo/meonode-ui/commit/e3bd6ac6ceca474f935da644ff0c23b2f1de7692))
140
- - Introduces a new, structured performance reporting system using cli-table3 for clear, grouped metrics.
141
- - Refactors the entire performance test suite into logical groups: Layout Rendering, Memory Management, and Prop Processing.
142
- - Adds comprehensive memory leak detection tests for heavy state changes and repeated mount/unmount cycles, using forced garbage collection for more accurate heap analysis.
143
- - Extracts the large, complex CSS object into a dedicated test constant for better separation of concerns.
144
- - Updates memoization tests to align with the new, weighted LRU cache eviction scoring.
249
+
250
+ - **perf**: overhaul performance test suite ([
251
+ `e3bd6ac`](https://github.com/l7aromeo/meonode-ui/commit/e3bd6ac6ceca474f935da644ff0c23b2f1de7692))
252
+ - Introduces a new, structured performance reporting system using cli-table3 for clear, grouped metrics.
253
+ - Refactors the entire performance test suite into logical groups: Layout Rendering, Memory Management, and Prop
254
+ Processing.
255
+ - Adds comprehensive memory leak detection tests for heavy state changes and repeated mount/unmount cycles, using
256
+ forced garbage collection for more accurate heap analysis.
257
+ - Extracts the large, complex CSS object into a dedicated test constant for better separation of concerns.
258
+ - Updates memoization tests to align with the new, weighted LRU cache eviction scoring.
145
259
 
146
260
  ### Chore
147
- - **deps**: update dependencies including typescript-eslint to 8.47.0 and add cli-table3 0.6.5 ([`6064555`](https://github.com/l7aromeo/meonode-ui/commit/6064555f0108ed47f9b31e98c4758f7449a67ff2))
261
+
262
+ - **deps**: update dependencies including typescript-eslint to 8.47.0 and add cli-table3 0.6.5 ([
263
+ `6064555`](https://github.com/l7aromeo/meonode-ui/commit/6064555f0108ed47f9b31e98c4758f7449a67ff2))
148
264
 
149
265
  ## [0.4.8] - 2025-11-18
150
266
 
151
267
  ### Feat
152
- - **client**: add generic type parameter to render function for stronger type safety ([`90a770e`](https://github.com/l7aromeo/meonode-ui/commit/90a770e))
153
- - **core**: improve BaseNode rendering with iterative traversal and memory optimizations ([`1d5330a`](https://github.com/l7aromeo/meonode-ui/commit/1d5330a))
154
- - Introduce WorkItem interface to represent nodes in the iterative work stack during BaseNode rendering.
155
- - Replace recursive render traversal with an iterative depth-first approach using a preallocated workStack array for better performance and reduced call stack usage.
156
- - Implement dynamic resizing of workStack array to handle arbitrary tree sizes efficiently.
157
- - Update BaseNode’s internal caching fields (`lastPropsRef` and `lastSignature`) to be public and consistently used for stable key generation.
158
- - Modify MeoNodeUnmounter component to accept BaseNode instance and clear its `lastPropsRef` and `lastSignature` on unmount to prevent memory leaks.
159
- - Refine type annotations across node utilities and factory functions for stronger type safety (`Record<string, unknown>` instead of `any`).
160
- - Optimize critical prop extraction logic by replacing Set and startsWith checks with faster inline charCode comparisons.
161
- - Clean up and clarify utility methods related to prop signature creation, shallow equality, and portal management.
162
- - Improve node.util.ts by adjusting caching strategies, prop categorization, and React element handling for better robustness and maintainability.
268
+
269
+ - **client**: add generic type parameter to render function for stronger type safety ([
270
+ `90a770e`](https://github.com/l7aromeo/meonode-ui/commit/90a770e))
271
+ - **core**: improve BaseNode rendering with iterative traversal and memory optimizations ([
272
+ `1d5330a`](https://github.com/l7aromeo/meonode-ui/commit/1d5330a))
273
+ - Introduce WorkItem interface to represent nodes in the iterative work stack during BaseNode rendering.
274
+ - Replace recursive render traversal with an iterative depth-first approach using a preallocated workStack array for
275
+ better performance and reduced call stack usage.
276
+ - Implement dynamic resizing of workStack array to handle arbitrary tree sizes efficiently.
277
+ - Update BaseNode’s internal caching fields (`lastPropsRef` and `lastSignature`) to be public and consistently used
278
+ for stable key generation.
279
+ - Modify MeoNodeUnmounter component to accept BaseNode instance and clear its `lastPropsRef` and `lastSignature` on
280
+ unmount to prevent memory leaks.
281
+ - Refine type annotations across node utilities and factory functions for stronger type safety (
282
+ `Record<string, unknown>` instead of `any`).
283
+ - Optimize critical prop extraction logic by replacing Set and startsWith checks with faster inline charCode
284
+ comparisons.
285
+ - Clean up and clarify utility methods related to prop signature creation, shallow equality, and portal management.
286
+ - Improve node.util.ts by adjusting caching strategies, prop categorization, and React element handling for better
287
+ robustness and maintainability.
163
288
 
164
289
  ### Fixes
165
- - **navigation-cache-manager**: add proper typing and global window declaration for cleanup flag ([`6180d40`](https://github.com/l7aromeo/meonode-ui/commit/6180d40))
290
+
291
+ - **navigation-cache-manager**: add proper typing and global window declaration for cleanup flag ([
292
+ `6180d40`](https://github.com/l7aromeo/meonode-ui/commit/6180d40))
166
293
 
167
294
  ### Refactor
168
- - improve typings and type safety in theme util and styled renderer ([`dbe1f33`](https://github.com/l7aromeo/meonode-ui/commit/dbe1f33))
169
- - Added explicit TypeScript types (e.g., CssProp, Record<string, unknown>) for variables and function signatures in `styled-renderer.client.ts` and `theme.util.ts`.
170
- - Updated cache maps to use more precise generic types for better type inference and safety.
171
- - Enhanced `resolveObjWithTheme` and related theme resolution logic with stronger typing and nullish coalescing.
172
- - Improved error handling for invalid theme path values.
173
- - Applied copy-on-write pattern with properly typed arrays and objects during theme resolution.
174
- - Strengthened type guards, e.g., `isPlainObject` type predicate.
175
- - Minor fixes to variable declarations with explicit types for clarity and consistency.
295
+
296
+ - improve typings and type safety in theme util and styled renderer ([
297
+ `dbe1f33`](https://github.com/l7aromeo/meonode-ui/commit/dbe1f33))
298
+ - Added explicit TypeScript types (e.g., CssProp, Record<string, unknown>) for variables and function signatures in
299
+ `styled-renderer.client.ts` and `theme.util.ts`.
300
+ - Updated cache maps to use more precise generic types for better type inference and safety.
301
+ - Enhanced `resolveObjWithTheme` and related theme resolution logic with stronger typing and nullish coalescing.
302
+ - Improved error handling for invalid theme path values.
303
+ - Applied copy-on-write pattern with properly typed arrays and objects during theme resolution.
304
+ - Strengthened type guards, e.g., `isPlainObject` type predicate.
305
+ - Minor fixes to variable declarations with explicit types for clarity and consistency.
176
306
 
177
307
  ### Chore
178
- - **babel**: update preset-env targets and expand plugin exclusions ([`f38cd24`](https://github.com/l7aromeo/meonode-ui/commit/f38cd24))
179
- - Set preset-env targets to support ES modules
180
- - Enable bugfixes option
181
- - Add multiple plugins to exclude list for better optimization
182
- - Clean up formatting of root, alias, extensions, and exclude fields
308
+
309
+ - **babel**: update preset-env targets and expand plugin exclusions ([
310
+ `f38cd24`](https://github.com/l7aromeo/meonode-ui/commit/f38cd24))
311
+ - Set preset-env targets to support ES modules
312
+ - Enable bugfixes option
313
+ - Add multiple plugins to exclude list for better optimization
314
+ - Clean up formatting of root, alias, extensions, and exclude fields
183
315
 
184
316
  ### Test
185
- - **performance**: add comprehensive performance tests and metrics reporting ([`c3d7a81`](https://github.com/l7aromeo/meonode-ui/commit/c3d7a81))
186
- - Add detailed performance tests measuring render times for realistic layouts, 10,000 flat nodes, and 10,000 deeply nested nodes.
187
- - Introduce a heavy state changes test to detect memory leaks and ensure responsiveness under frequent updates.
188
- - Collect and log performance metrics including median render times and memory usage for analysis.
189
- - Add tests for stableKey generation performance with identical, shallowly equal, unique, large, and complex CSS props.
190
- - Enhance test suite with CSS styling for better visualization and interaction during tests.
191
- - Improve cleanup and reporting to avoid resource leaks and provide clearer performance insights.
317
+
318
+ - **performance**: add comprehensive performance tests and metrics reporting ([
319
+ `c3d7a81`](https://github.com/l7aromeo/meonode-ui/commit/c3d7a81))
320
+ - Add detailed performance tests measuring render times for realistic layouts, 10,000 flat nodes, and 10,000 deeply
321
+ nested nodes.
322
+ - Introduce a heavy state changes test to detect memory leaks and ensure responsiveness under frequent updates.
323
+ - Collect and log performance metrics including median render times and memory usage for analysis.
324
+ - Add tests for stableKey generation performance with identical, shallowly equal, unique, large, and complex CSS
325
+ props.
326
+ - Enhance test suite with CSS styling for better visualization and interaction during tests.
327
+ - Improve cleanup and reporting to avoid resource leaks and provide clearer performance insights.
192
328
 
193
329
  ## [0.4.7] - 2025-11-17
194
330
 
195
331
  ### Fixes
196
- - **core/cache:** optimize navigation cache debounce timing and enhance stableKey handling ([`fff6f207`](https://github.com/l7aromeo/meonode-ui/commit/fff6f2070a06cc5ad461a2f992b111fb957fae6f))
197
- - Adjust navigation cleanup debounce duration dynamically based on cache size for better performance.
198
- - Change stableKey and _lastSignature to be optional to better represent their possible undefined state.
199
- - Refactor _getStableKey to return undefined on server instead of empty string.
200
- - Optimize critical props extraction by introducing NodeUtil.extractCriticalProps helper.
201
- - Improve client-side caching logic to avoid lookups when stableKey is absent.
202
- - Remove unused imports and redundant code in node.util.ts; improve shallowEqual implementation.
203
- - Update createPropSignature to return undefined on server and use getElementTypeName directly.
204
- - Add detailed comments and refine hashString combining FNV-1a and djb2 hashes for robustness.
332
+
333
+ - **core/cache:** optimize navigation cache debounce timing and enhance stableKey handling ([
334
+ `fff6f207`](https://github.com/l7aromeo/meonode-ui/commit/fff6f2070a06cc5ad461a2f992b111fb957fae6f))
335
+ - Adjust navigation cleanup debounce duration dynamically based on cache size for better performance.
336
+ - Change stableKey and _lastSignature to be optional to better represent their possible undefined state.
337
+ - Refactor _getStableKey to return undefined on server instead of empty string.
338
+ - Optimize critical props extraction by introducing NodeUtil.extractCriticalProps helper.
339
+ - Improve client-side caching logic to avoid lookups when stableKey is absent.
340
+ - Remove unused imports and redundant code in node.util.ts; improve shallowEqual implementation.
341
+ - Update createPropSignature to return undefined on server and use getElementTypeName directly.
342
+ - Add detailed comments and refine hashString combining FNV-1a and djb2 hashes for robustness.
205
343
 
206
344
  ## [0.4.6] - 2025-11-17
207
345
 
208
346
  ### Fixes
209
- - **core/cache:** enhance memoization & caching system to prevent memory leaks and ensure safe lifecycle management ([`253d7d00`](https://github.com/l7aromeo/meonode-ui/commit/253d7d006121dc588a51580d5120c7123a5f8777))
347
+
348
+ - **core/cache:** enhance memoization & caching system to prevent memory leaks and ensure safe lifecycle management ([
349
+ `253d7d00`](https://github.com/l7aromeo/meonode-ui/commit/253d7d006121dc588a51580d5120c7123a5f8777))
210
350
  This introduces a robust, three-layered cleanup strategy to ensure cache integrity:
211
- 1. An immediate, lifecycle-driven cleanup via the new `MeoNodeUnmounter` component.
212
- 2. A debounced, event-driven cleanup for SPA navigations via `NavigationCacheManagerUtil`.
213
- 3. A final, GC-driven safety net using the `FinalizationRegistry` API.
351
+ 1. An immediate, lifecycle-driven cleanup via the new `MeoNodeUnmounter` component.
352
+ 2. A debounced, event-driven cleanup for SPA navigations via `NavigationCacheManagerUtil`.
353
+ 3. A final, GC-driven safety net using the `FinalizationRegistry` API.
214
354
 
215
355
  ### Refactor
356
+
216
357
  - **core:** migrate core logic from `src/helper/` to a new `src/util/` directory for better separation of concerns.
217
358
  - **core:** extract internal utility functions from `core.node.ts` into `node.util.ts`.
218
359
  - **core:** make internal caches on `BaseNode` public to support the new externalized management architecture.
219
360
 
220
361
  ### Chore
362
+
221
363
  - **tooling:** enable TypeScript's `strict: true` mode and update codebase to be fully compliant.
222
364
  - **tooling:** add CommonJS (`require`) exports to `package.json` for improved module compatibility.
223
- - **tooling:** add `NODE_OPTIONS='--expose-gc'` to the test script to allow for explicit garbage collection during tests.
224
- - **tests:** refine test suite by standardizing `afterEach` hooks and updating memoization tests to directly validate internal caching.
365
+ - **tooling:** add `NODE_OPTIONS='--expose-gc'` to the test script to allow for explicit garbage collection during
366
+ tests.
367
+ - **tests:** refine test suite by standardizing `afterEach` hooks and updating memoization tests to directly validate
368
+ internal caching.
225
369
 
226
370
  ## [0.4.5] - 2025-11-15
227
371
 
228
372
  ### Feat
229
- - **cache**: implement robust cache management and theme caching ([`9ed749f6`](https://github.com/l7aromeo/meonode-ui/commit/9ed749f6d877fdc8b6a736788add13225b07dd63))
373
+
374
+ - **cache**: implement robust cache management and theme caching ([
375
+ `9ed749f6`](https://github.com/l7aromeo/meonode-ui/commit/9ed749f6d877fdc8b6a736788add13225b07dd63))
230
376
  Refactor NavigationCacheManager for robustness, add memory monitoring and auto-cleanup.
231
377
  Implement LRU eviction for ThemeResolverCache and integrate with BaseNode cache clearing.
232
378
 
233
379
  ### Refactor
234
- - **test**: split node.test.ts into smaller, more focused test files ([`930f998e`](https://github.com/l7aromeo/meonode-ui/commit/930f998e5f91faef3ff42fcafc6b02fc23f422ff))
380
+
381
+ - **test**: split node.test.ts into smaller, more focused test files ([
382
+ `930f998e`](https://github.com/l7aromeo/meonode-ui/commit/930f998e5f91faef3ff42fcafc6b02fc23f422ff))
235
383
  This commit refactors the test suite by splitting the monolithic `node.test.ts`
236
384
  file into several smaller, more focused test files, each covering a specific
237
385
  aspect of the BaseNode functionality.
@@ -243,152 +391,241 @@ All notable changes to this project will be documented in this file.
243
391
  preserving the test's original intent of verifying cache collision prevention.
244
392
 
245
393
  ### Fix
246
- - **core**: pass disableEmotion flag to _renderProcessedNode for improved processing ([`b68e3d4`](https://github.com/l7aromeo/meonode-ui/commit/b68e3d49a732ee590805a0298f733b800a9b172d))
394
+
395
+ - **core**: pass disableEmotion flag to _renderProcessedNode for improved processing ([
396
+ `b68e3d4`](https://github.com/l7aromeo/meonode-ui/commit/b68e3d49a732ee590805a0298f733b800a9b172d))
247
397
 
248
398
  ### Chore
249
- - **test**: adjust performance test cleanup by removing cache clearing from afterEach ([`f72cea5e`](https://github.com/l7aromeo/meonode-ui/commit/f72cea5ef983fdaba012a7d446b58c7da06f5e1a))
399
+
400
+ - **test**: adjust performance test cleanup by removing cache clearing from afterEach ([
401
+ `f72cea5e`](https://github.com/l7aromeo/meonode-ui/commit/f72cea5ef983fdaba012a7d446b58c7da06f5e1a))
250
402
 
251
403
  ## [0.4.4] - 2025-11-15
252
404
 
253
405
  ### Perf
254
- - **core**: implement intelligent caching and memory management ([`0e5671b`](https://github.com/l7aromeo/meonode-ui/commit/0e5671b36189c964d66676ef633f3ccdbd9004e2))
255
- Introduces a sophisticated caching and memory management system to prevent memory leaks and improve performance in Single Page Applications (SPAs).
256
406
 
257
- This new system intelligently tracks mounted components and automatically cleans up caches of unmounted components during navigation events.
407
+ - **core**: implement intelligent caching and memory management ([
408
+ `0e5671b`](https://github.com/l7aromeo/meonode-ui/commit/0e5671b36189c964d66676ef633f3ccdbd9004e2))
409
+ Introduces a sophisticated caching and memory management system to prevent memory leaks and improve performance in
410
+ Single Page Applications (SPAs).
411
+
412
+ This new system intelligently tracks mounted components and automatically cleans up caches of unmounted components
413
+ during navigation events.
258
414
 
259
415
  Key features and improvements include:
260
416
 
261
- - **Navigation-aware Cache Eviction:** A new `NavigationCacheManager` listens for browser navigation events (popstate, pushState, etc.) and triggers a safe cleanup of the element cache. This prevents the cache from growing indefinitely with stale entries from previous pages.
417
+ - **Navigation-aware Cache Eviction:** A new `NavigationCacheManager` listens for browser navigation events (
418
+ popstate, pushState, etc.) and triggers a safe cleanup of the element cache. This prevents the cache from growing
419
+ indefinitely with stale entries from previous pages.
262
420
 
263
- - **Mount Tracking:** A `MountTracker` class now keeps a record of all mounted `BaseNode` instances. This allows the cache eviction logic to accurately determine which components are safe to remove from the cache.
421
+ - **Mount Tracking:** A `MountTracker` class now keeps a record of all mounted `BaseNode` instances. This allows the
422
+ cache eviction logic to accurately determine which components are safe to remove from the cache.
264
423
 
265
- - **Advanced Eviction Policies:** The `SafeCacheManager` implements several eviction policies, including evicting unmounted components, old unmounted components, and an emergency eviction policy for high memory pressure scenarios.
424
+ - **Advanced Eviction Policies:** The `SafeCacheManager` implements several eviction policies, including evicting
425
+ unmounted components, old unmounted components, and an emergency eviction policy for high memory pressure
426
+ scenarios.
266
427
 
267
- - **Memory-Safe Portal System:** The portal implementation has been refactored to use a `WeakMap`. This ensures that portal-related DOM elements and React roots are automatically garbage collected when the corresponding `BaseNode` instance is no longer in use, preventing a common source of memory leaks.
428
+ - **Memory-Safe Portal System:** The portal implementation has been refactored to use a `WeakMap`. This ensures that
429
+ portal-related DOM elements and React roots are automatically garbage collected when the corresponding `BaseNode`
430
+ instance is no longer in use, preventing a common source of memory leaks.
268
431
 
269
- - **Improved Cache Entry Metadata:** The element cache entries now store additional metadata, such as creation timestamp, access count, and a `WeakRef` to the node instance, enabling more intelligent eviction decisions.
432
+ - **Improved Cache Entry Metadata:** The element cache entries now store additional metadata, such as creation
433
+ timestamp, access count, and a `WeakRef` to the node instance, enabling more intelligent eviction decisions.
270
434
 
271
- - **Enhanced Stability:** Component identifiers for caching are now generated using a `WeakMap`, providing more stable and reliable keys than relying on component names, which can be affected by minification.
435
+ - **Enhanced Stability:** Component identifiers for caching are now generated using a `WeakMap`, providing more
436
+ stable and reliable keys than relying on component names, which can be affected by minification.
272
437
 
273
- - **Comprehensive Test Coverage:** Added a suite of new integration tests to validate the caching and memory management system. These tests cover key scenarios including cache collision, rapid navigation, React 18 Strict Mode compatibility, large prop object fingerprinting, and LRU eviction logic.
438
+ - **Comprehensive Test Coverage:** Added a suite of new integration tests to validate the caching and memory
439
+ management system. These tests cover key scenarios including cache collision, rapid navigation, React 18 Strict
440
+ Mode compatibility, large prop object fingerprinting, and LRU eviction logic.
274
441
 
275
442
  ### Fix
276
- - **core**: simplify property assignment in common helper ([`312af57`](https://github.com/l7aromeo/meonode-ui/commit/312af574712202a25bdd62fab94441a937f159f2))
443
+
444
+ - **core**: simplify property assignment in common helper ([
445
+ `312af57`](https://github.com/l7aromeo/meonode-ui/commit/312af574712202a25bdd62fab94441a937f159f2))
277
446
 
278
447
  ### Refactor
279
- - **core**: add ElementCacheEntry interface for memoization and update css prop type ([`6a8381c`](https://github.com/l7aromeo/meonode-ui/commit/6a8381c4c85cb22df4ba398637401d420461e413))
448
+
449
+ - **core**: add ElementCacheEntry interface for memoization and update css prop type ([
450
+ `6a8381c`](https://github.com/l7aromeo/meonode-ui/commit/6a8381c4c85cb22df4ba398637401d420461e413))
280
451
 
281
452
  ## [0.4.3] - 2025-11-14
282
453
 
283
454
  ### Docs
284
- - **core**: add detailed comments to rendering methods ([`731c83e`](https://github.com/l7aromeo/meonode-ui/commit/731c83e))
455
+
456
+ - **core**: add detailed comments to rendering methods ([
457
+ `731c83e`](https://github.com/l7aromeo/meonode-ui/commit/731c83e))
285
458
 
286
459
  ### Fix
287
- - **core**: adjust isStyledComponent logic to improve style handling ([`ff7a59e`](https://github.com/l7aromeo/meonode-ui/commit/ff7a59e))
460
+
461
+ - **core**: adjust isStyledComponent logic to improve style handling ([
462
+ `ff7a59e`](https://github.com/l7aromeo/meonode-ui/commit/ff7a59e))
288
463
 
289
464
  ### Refactor
290
- - **core**: simplify _processProps by removing style prop handling ([`b3570b4`](https://github.com/l7aromeo/meonode-ui/commit/b3570b4))
465
+
466
+ - **core**: simplify _processProps by removing style prop handling ([
467
+ `b3570b4`](https://github.com/l7aromeo/meonode-ui/commit/b3570b4))
291
468
 
292
469
  ## [0.4.2] - 2025-11-14
293
470
 
294
471
  ### Fix
295
- - **core**: remove deps property from props since it should not be passed to element attribute ([`6b01cbe`](https://github.com/l7aromeo/meonode-ui/commit/6b01cbe))
472
+
473
+ - **core**: remove deps property from props since it should not be passed to element attribute ([
474
+ `6b01cbe`](https://github.com/l7aromeo/meonode-ui/commit/6b01cbe))
296
475
 
297
476
  ## [0.4.1] - 2025-11-14
298
477
 
299
478
  ### Test
300
- - **node**: enhance dependency and memoization tests with real-world scenarios ([`d7452fa`](https://github.com/l7aromeo/meonode-ui/commit/d7452fae9b3ef22a82dc83210851849d82de479f))
479
+
480
+ - **node**: enhance dependency and memoization tests with real-world scenarios ([
481
+ `d7452fa`](https://github.com/l7aromeo/meonode-ui/commit/d7452fae9b3ef22a82dc83210851849d82de479f))
301
482
 
302
483
  ### Fix
303
- - **core**: enhance error handling and improve style property detection ([`ca79c27`](https://github.com/l7aromeo/meonode-ui/commit/ca79c277cdfea5b62b54779ec2492518681639d1))
484
+
485
+ - **core**: enhance error handling and improve style property detection ([
486
+ `ca79c27`](https://github.com/l7aromeo/meonode-ui/commit/ca79c277cdfea5b62b54779ec2492518681639d1))
304
487
 
305
488
  ### Chore
306
- - **deps**: update dependencies in package.json for improved stability and performance ([`eba2108`](https://github.com/l7aromeo/meonode-ui/commit/eba21080c953b1c6b6c1bbb6a401257845116f09))
489
+
490
+ - **deps**: update dependencies in package.json for improved stability and performance ([
491
+ `eba2108`](https://github.com/l7aromeo/meonode-ui/commit/eba21080c953b1c6b6c1bbb6a401257845116f09))
307
492
 
308
493
  ### Perf
309
- - **core**: Optimize prop processing and caching with new signature generation ([`8cf0319`](https://github.com/l7aromeo/meonode-ui/commit/8cf0319fd99c3c8496b6e63207cb378b6c521ae2))
494
+
495
+ - **core**: Optimize prop processing and caching with new signature generation ([
496
+ `8cf0319`](https://github.com/l7aromeo/meonode-ui/commit/8cf0319fd99c3c8496b6e63207cb378b6c521ae2))
310
497
 
311
498
  ### Refactor
312
- - **types**: move node.type.ts to types directory and update imports ([`ccf769a`](https://github.com/l7aromeo/meonode-ui/commit/ccf769a2670e4546bfa776034a4fa8925ca2d27d))
499
+
500
+ - **types**: move node.type.ts to types directory and update imports ([
501
+ `ccf769a`](https://github.com/l7aromeo/meonode-ui/commit/ccf769a2670e4546bfa776034a4fa8925ca2d27d))
313
502
 
314
503
  ## [0.4.0] - 2025-11-13
315
504
 
316
505
  ### Feature
506
+
317
507
  - **core**: Implemented an advanced memoization and caching system to optimize rendering performance. This includes:
318
- - **Dependency-Based Memoization**: Nodes can now be created with a dependency array, similar to React's `useMemo`, to prevent unnecessary re-renders of the node and its entire subtree if dependencies have not changed. ([`3b0a110`](https://github.com/l7aromeo/meonode-ui/commit/3b0a110eb3db25862476d020182be9f0dba663e4))
319
- - **Enhanced Prop Caching**: The prop signature generation is now more robust, and the cache uses an advanced LRU eviction strategy to remain efficient. ([`3b0a110`](https://github.com/l7aromeo/meonode-ui/commit/3b0a110eb3db25862476d020182be9f0dba663e4))
320
- - **API Updates**: The `Node`, `createNode`, `createChildrenFirstNode`, and `Component` HOCs have been updated to accept an optional `deps` array to enable memoization. ([`3b0a110`](https://github.com/l7aromeo/meonode-ui/commit/3b0a110eb3db25862476d020182be9f0dba663e4))
508
+ - **Dependency-Based Memoization**: Nodes can now be created with a dependency array, similar to React's `useMemo`,
509
+ to prevent unnecessary re-renders of the node and its entire subtree if dependencies have not changed. ([
510
+ `3b0a110`](https://github.com/l7aromeo/meonode-ui/commit/3b0a110eb3db25862476d020182be9f0dba663e4))
511
+ - **Enhanced Prop Caching**: The prop signature generation is now more robust, and the cache uses an advanced LRU
512
+ eviction strategy to remain efficient. ([
513
+ `3b0a110`](https://github.com/l7aromeo/meonode-ui/commit/3b0a110eb3db25862476d020182be9f0dba663e4))
514
+ - **API Updates**: The `Node`, `createNode`, `createChildrenFirstNode`, and `Component` HOCs have been updated to
515
+ accept an optional `deps` array to enable memoization. ([
516
+ `3b0a110`](https://github.com/l7aromeo/meonode-ui/commit/3b0a110eb3db25862476d020182be9f0dba663e4))
321
517
 
322
518
  ### Test
323
- - **core**: Added a comprehensive suite of tests for the new memoization and caching system, covering dependency-based memoization, reactive and non-reactive children, complex state updates, and memoization of Higher-Order Components (HOCs). ([`6bcd1b1`](https://github.com/l7aromeo/meonode-ui/commit/6bcd1b1bc6b2450c3d4296cb4af326f61cfee401))
519
+
520
+ - **core**: Added a comprehensive suite of tests for the new memoization and caching system, covering dependency-based
521
+ memoization, reactive and non-reactive children, complex state updates, and memoization of Higher-Order Components (
522
+ HOCs). ([`6bcd1b1`](https://github.com/l7aromeo/meonode-ui/commit/6bcd1b1bc6b2450c3d4296cb4af326f61cfee401))
324
523
 
325
524
  ## [0.3.18] - 2025-11-12
326
525
 
327
526
  ### Fixed
328
- - **core**: refine prop caching to handle dynamic props correctly ([`4c0641e`](https://github.com/l7aromeo/meonode-ui/commit/4c0641e892f934551f100629cac72fc3f4649ab0))
527
+
528
+ - **core**: refine prop caching to handle dynamic props correctly ([
529
+ `4c0641e`](https://github.com/l7aromeo/meonode-ui/commit/4c0641e892f934551f100629cac72fc3f4649ab0))
329
530
 
330
531
  ## [0.3.17] - 2025-11-12
331
532
 
332
533
  ### Perf
333
- - **core**: implement iterative renderer and prop caching ([`8a3a264`](https://github.com/l7aromeo/meonode-ui/commit/8a3a264be68bd041b6340636f5f7ee2b0caa63ff))
334
- - **helper**: refactor theme resolution logic for improved performance and cache correctness ([`9614cb8`](https://github.com/l7aromeo/meonode-ui/commit/9614cb8d2aeae0d9bd2f9cf3edd51c022cd93273))
534
+
535
+ - **core**: implement iterative renderer and prop caching ([
536
+ `8a3a264`](https://github.com/l7aromeo/meonode-ui/commit/8a3a264be68bd041b6340636f5f7ee2b0caa63ff))
537
+ - **helper**: refactor theme resolution logic for improved performance and cache correctness ([
538
+ `9614cb8`](https://github.com/l7aromeo/meonode-ui/commit/9614cb8d2aeae0d9bd2f9cf3edd51c022cd93273))
335
539
 
336
540
  ### Chore
337
- - fix typo in JSDoc comment for useTheme hook ([`de0ddd9`](https://github.com/l7aromeo/meonode-ui/commit/de0ddd9a6308f4a76b6ad843a6139d42bd3fcf53))
338
- - add deprecation notice to usePortal hook for future removal ([`f8a2923`](https://github.com/l7aromeo/meonode-ui/commit/f8a29230cad3962addb8cf28ed3538e6de236181))
339
- - update PortalProps type definition to provide a default type parameter ([`de73ba5`](https://github.com/l7aromeo/meonode-ui/commit/de73ba5b9d9dd51637b24b0309d681309d9338ae))
340
- - update isNodeInstance type guard to use BaseNode instead of NodeInstance ([`2c69d05`](https://github.com/l7aromeo/meonode-ui/commit/2c69d05b3d1593a976e439ca7404696b781e5012))
341
- - rename jest.config.mjs to jest.config.ts and update configuration for TypeScript support ([`a3213eb`](https://github.com/l7aromeo/meonode-ui/commit/a3213eb5b91a55364cb4f5362005bc2a46934de5))
342
- - **scripts**: increase stack size for jest test and fix build commands ([`e046cdf`](https://github.com/l7aromeo/meonode-ui/commit/e046cdf397e2cf418e09e149a9e0cf1e48f3d926))
343
- - update tsconfig.json to exclude dist and node_modules directories ([`eeb9577`](https://github.com/l7aromeo/meonode-ui/commit/eeb957722ab7a26cbe59047c068f9955b082502e))
344
- - update tsconfig.json with enhanced compiler options and path mappings for better development experience ([`89bc1a4`](https://github.com/l7aromeo/meonode-ui/commit/89bc1a42c23f015acfed1bcb860ebb6a4c684fc1))
541
+
542
+ - fix typo in JSDoc comment for useTheme hook ([
543
+ `de0ddd9`](https://github.com/l7aromeo/meonode-ui/commit/de0ddd9a6308f4a76b6ad843a6139d42bd3fcf53))
544
+ - add deprecation notice to usePortal hook for future removal ([
545
+ `f8a2923`](https://github.com/l7aromeo/meonode-ui/commit/f8a29230cad3962addb8cf28ed3538e6de236181))
546
+ - update PortalProps type definition to provide a default type parameter ([
547
+ `de73ba5`](https://github.com/l7aromeo/meonode-ui/commit/de73ba5b9d9dd51637b24b0309d681309d9338ae))
548
+ - update isNodeInstance type guard to use BaseNode instead of NodeInstance ([
549
+ `2c69d05`](https://github.com/l7aromeo/meonode-ui/commit/2c69d05b3d1593a976e439ca7404696b781e5012))
550
+ - rename jest.config.mjs to jest.config.ts and update configuration for TypeScript support ([
551
+ `a3213eb`](https://github.com/l7aromeo/meonode-ui/commit/a3213eb5b91a55364cb4f5362005bc2a46934de5))
552
+ - **scripts**: increase stack size for jest test and fix build commands ([
553
+ `e046cdf`](https://github.com/l7aromeo/meonode-ui/commit/e046cdf397e2cf418e09e149a9e0cf1e48f3d926))
554
+ - update tsconfig.json to exclude dist and node_modules directories ([
555
+ `eeb9577`](https://github.com/l7aromeo/meonode-ui/commit/eeb957722ab7a26cbe59047c068f9955b082502e))
556
+ - update tsconfig.json with enhanced compiler options and path mappings for better development experience ([
557
+ `89bc1a4`](https://github.com/l7aromeo/meonode-ui/commit/89bc1a42c23f015acfed1bcb860ebb6a4c684fc1))
345
558
 
346
559
  ## [0.3.16] - 2025-11-05
347
560
 
348
561
  ### Added
349
- - **tests**: add tests for Fragment, Suspense, and Activity components to verify styling prop handling ([`2af386f`](https://github.com/l7aromeo/meonode-ui/commit/2af386f))
350
- - **core**: enhance NodeProps type to conditionally include built-in React components ([`3b8a4cb`](https://github.com/l7aromeo/meonode-ui/commit/3b8a4cb))
351
- - **react**: add REACT_ACTIVITY_TYPE to react-is helper ([`e91e48f`](https://github.com/l7aromeo/meonode-ui/commit/e91e48f))
352
- - **core**: export NO_STYLE_TAGS type for better type inference ([`a6db6e8`](https://github.com/l7aromeo/meonode-ui/commit/a6db6e8))
353
- - **react**: add Fragment component to create a container without extra DOM elements ([`d5e376a`](https://github.com/l7aromeo/meonode-ui/commit/d5e376a))
562
+
563
+ - **tests**: add tests for Fragment, Suspense, and Activity components to verify styling prop handling ([
564
+ `2af386f`](https://github.com/l7aromeo/meonode-ui/commit/2af386f))
565
+ - **core**: enhance NodeProps type to conditionally include built-in React components ([
566
+ `3b8a4cb`](https://github.com/l7aromeo/meonode-ui/commit/3b8a4cb))
567
+ - **react**: add REACT_ACTIVITY_TYPE to react-is helper ([
568
+ `e91e48f`](https://github.com/l7aromeo/meonode-ui/commit/e91e48f))
569
+ - **core**: export NO_STYLE_TAGS type for better type inference ([
570
+ `a6db6e8`](https://github.com/l7aromeo/meonode-ui/commit/a6db6e8))
571
+ - **react**: add Fragment component to create a container without extra DOM elements ([
572
+ `d5e376a`](https://github.com/l7aromeo/meonode-ui/commit/d5e376a))
354
573
 
355
574
  ## [0.3.15] - 2025-11-04
356
575
 
357
576
  ### Added
358
- - **core**: add disableEmotion prop to disable emotion styling and propagate to children ([`377a9e9`](https://github.com/l7aromeo/meonode-ui/commit/377a9e9d4844ba7869155e686c9b31f0f9ce2329))
359
- - **react**: enhance isContextProvider and isReactClassComponent checks ([`e8839e4`](https://github.com/l7aromeo/meonode-ui/commit/e8839e4c231bdd66686f7b43d9889a18cd9fc791))
577
+
578
+ - **core**: add disableEmotion prop to disable emotion styling and propagate to children ([
579
+ `377a9e9`](https://github.com/l7aromeo/meonode-ui/commit/377a9e9d4844ba7869155e686c9b31f0f9ce2329))
580
+ - **react**: enhance isContextProvider and isReactClassComponent checks ([
581
+ `e8839e4`](https://github.com/l7aromeo/meonode-ui/commit/e8839e4c231bdd66686f7b43d9889a18cd9fc791))
360
582
 
361
583
  ## [0.3.14] - 2025-10-30
362
584
 
363
585
  ### Added
364
- - **core**: Add handling for Suspense and Activity components ([`0f9fcb1`](https://github.com/l7aromeo/meonode-ui/commit/0f9fcb171fdce28b5a880e69e2d591543e3af817))
586
+
587
+ - **core**: Add handling for Suspense and Activity components ([
588
+ `0f9fcb1`](https://github.com/l7aromeo/meonode-ui/commit/0f9fcb171fdce28b5a880e69e2d591543e3af817))
365
589
 
366
590
  ## [0.3.13] - 2025-10-30
367
591
 
368
592
  ### Fixed
369
- - **theme.helper**: process theme strings returned from functions ([`286fd89`](https://github.com/l7aromeo/meonode-ui/commit/286fd89e28cc10b467a208be4cdf1b7508d0be8c))
593
+
594
+ - **theme.helper**: process theme strings returned from functions ([
595
+ `286fd89`](https://github.com/l7aromeo/meonode-ui/commit/286fd89e28cc10b467a208be4cdf1b7508d0be8c))
370
596
 
371
597
  ## [0.3.12] - 2025-10-23
372
598
 
373
599
  ### Added
374
- - **react**: add Suspense component and JSDoc for Activity and Suspense ([`c1760fd`](https://github.com/l7aromeo/meonode-ui/commit/c1760fd))
375
600
 
601
+ - **react**: add Suspense component and JSDoc for Activity and Suspense ([
602
+ `c1760fd`](https://github.com/l7aromeo/meonode-ui/commit/c1760fd))
376
603
 
377
604
  ## [0.3.11] - 2025-10-19
378
605
 
379
606
  ### Added
380
- - **components**: add react activity node and export it in main ([`aadbc2d`](https://github.com/l7aromeo/meonode-ui/commit/aadbc2d08a928f1ba88bd4572b45eed8cb100a87))
381
- - **theme.helper**: update resolveObjWithTheme to improve object type checking ([`da1ce4c`](https://github.com/l7aromeo/meonode-ui/commit/da1ce4cd53ccbe2d2a562a49730151434177dc59))
607
+
608
+ - **components**: add react activity node and export it in main ([
609
+ `aadbc2d`](https://github.com/l7aromeo/meonode-ui/commit/aadbc2d08a928f1ba88bd4572b45eed8cb100a87))
610
+ - **theme.helper**: update resolveObjWithTheme to improve object type checking ([
611
+ `da1ce4c`](https://github.com/l7aromeo/meonode-ui/commit/da1ce4cd53ccbe2d2a562a49730151434177dc59))
382
612
 
383
613
  ### Changed
384
- - **chore**: update dependencies in package.json and yarn.lock ([`0c0ced6`](https://github.com/l7aromeo/meonode-ui/commit/0c0ced68662bb701634d49dc79da86e4ddce5392))
385
- - **chore**: remove \'use strict\' directive from multiple files ([`17d79dc`](https://github.com/l7aromeo/meonode-ui/commit/17d79dcb105a8c2062695071c3f587f6db9a5711))
614
+
615
+ - **chore**: update dependencies in package.json and yarn.lock ([
616
+ `0c0ced6`](https://github.com/l7aromeo/meonode-ui/commit/0c0ced68662bb701634d49dc79da86e4ddce5392))
617
+ - **chore**: remove \'use strict\' directive from multiple files ([
618
+ `17d79dc`](https://github.com/l7aromeo/meonode-ui/commit/17d79dcb105a8c2062695071c3f587f6db9a5711))
386
619
 
387
620
  ### Docs
388
- - **docs**: update Node.js version requirement in CONTRIBUTING.md ([`4c577c3`](https://github.com/l7aromeo/meonode-ui/commit/4c577c3e23294bdc188cda5b14375af1cb967888))
621
+
622
+ - **docs**: update Node.js version requirement in CONTRIBUTING.md ([
623
+ `4c577c3`](https://github.com/l7aromeo/meonode-ui/commit/4c577c3e23294bdc188cda5b14375af1cb967888))
389
624
 
390
625
  ### Test
391
- - **node**: add test case for preserving Node instances passed through props and theme resolution ([`f4d1344`](https://github.com/l7aromeo/meonode-ui/commit/f4d1344355f2a4631ccdf04998bcf618d4ce1dc6))
626
+
627
+ - **node**: add test case for preserving Node instances passed through props and theme resolution ([
628
+ `f4d1344`](https://github.com/l7aromeo/meonode-ui/commit/f4d1344355f2a4631ccdf04998bcf618d4ce1dc6))
392
629
 
393
630
  ## [0.3.10] - 2025-10-09
394
631
 
@@ -410,11 +647,14 @@ All notable changes to this project will be documented in this file.
410
647
 
411
648
  ### Added
412
649
 
413
- - **styling**: Enabled theme-aware functions for css props, allowing for more dynamic styling (e.g., `color: theme => theme.system.colors.primary`).
650
+ - **styling**: Enabled theme-aware functions for css props, allowing for more dynamic styling (e.g.,
651
+ `color: theme => theme.system.colors.primary`).
414
652
 
415
653
  ### Refactor
416
654
 
417
- - **core**: Refactored the style resolution logic (`resolveObjWithTheme` and `StyledRenderer`) to selectively process the `css` prop. This enables the new theme-function feature while ensuring that other props (like `children`) are not processed, maintaining compatibility with Next.js Server Components.
655
+ - **core**: Refactored the style resolution logic (`resolveObjWithTheme` and `StyledRenderer`) to selectively process
656
+ the `css` prop. This enables the new theme-function feature while ensuring that other props (like `children`) are not
657
+ processed, maintaining compatibility with Next.js Server Components.
418
658
 
419
659
  ## [0.3.7] - 2025-09-27
420
660
 
@@ -530,7 +770,8 @@ All notable changes to this project will be documented in this file.
530
770
 
531
771
  ### Added
532
772
 
533
- - **feat:** update NodeFunction type to improve dynamic node content generation and update FunctionRendererProps interface to use NodeFunction
773
+ - **feat:** update NodeFunction type to improve dynamic node content generation and update FunctionRendererProps
774
+ interface to use NodeFunction
534
775
 
535
776
  ### Fixed
536
777
 
@@ -538,6 +779,7 @@ All notable changes to this project will be documented in this file.
538
779
  - **fix(node.type.ts):** remove unused processRawNode property from Node type
539
780
 
540
781
  ### Changed
782
+
541
783
  - **package:** update dependencies to latest versions
542
784
 
543
785
  ## [0.2.20] - 2025-09-22
@@ -625,7 +867,8 @@ All notable changes to this project will be documented in this file.
625
867
 
626
868
  ### Added
627
869
 
628
- - **feat(common.helper)**: add omit and omitUndefined utility functions to create object copies without specified keys or undefined values
870
+ - **feat(common.helper)**: add omit and omitUndefined utility functions to create object copies without specified keys
871
+ or undefined values
629
872
  - **feat**: integrate omit and omitUndefined functions to manage finalProps for standard HTML tags and custom components
630
873
 
631
874
  ### Refactor
@@ -641,14 +884,16 @@ All notable changes to this project will be documented in this file.
641
884
 
642
885
  ### Removed
643
886
 
644
- - **types**: removed redundant `key` prop from `FinalNodeProps` and default `key` from `NodeProps` types for cleaner type definitions
887
+ - **types**: removed redundant `key` prop from `FinalNodeProps` and default `key` from `NodeProps` types for cleaner
888
+ type definitions
645
889
 
646
890
  ## [0.2.16] - 2025-09-13
647
891
 
648
892
  ### Added
649
893
 
650
894
  - **feat(core)**: introduce static _isServer property to optimize server-side checks in caching methods
651
- - **feat(core)**: remove passedKey from _functionRenderer and simplify function-as-child wrapper; augment toPortal unmount to clean portal container
895
+ - **feat(core)**: remove passedKey from _functionRenderer and simplify function-as-child wrapper; augment toPortal
896
+ unmount to clean portal container
652
897
 
653
898
  ### Refactor
654
899