UNPKG

@meonode/ui

Version:

A structured approach to component composition, direct CSS-first prop styling, built-in theming, smart prop handling (including raw property pass-through), and dynamic children.

325 lines (202 loc) 10.2 kB
# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.2.16] - 2025-09-13 ### Added - **feat(core)**: introduce static _isServer property to optimize server-side checks in caching methods - **feat(core)**: remove passedKey from _functionRenderer and simplify function-as-child wrapper; augment toPortal unmount to clean portal container ### Refactor - **feat**: refactor children prop type to use `Children` type for better clarity and consistency across the codebase ## [0.2.15] - 2025-09-12 ### Added - **feat(cache)**: implement hybrid caching strategy for processed children using WeakMap and Map to improve performance and memory management - **feat(helper)**: implement nodeSignature for stable signatures and improve createStableHash with bounded traversal - **feat(helper)**: enhance ObjHelper.stringify method for deterministic serialization with sorted keys and special type handling ### Refactor - **refactor**: improve type definitions and error handling in rendering methods ### Test - **test(tests)**: add performance tests for rendering a single-page layout in React - **test**: add cleanup after each test and verify component display names for debugging ## [0.2.14] - 2025-09-12 ### Added - **feat**: Add `Container` alias for `Div` to simplify general-purpose container usage. - **feat**: Add caching for processed children to optimize performance in `BaseNode` class. ### Removed - **feat**: Remove `shallowEqual` utility function from `common.helper.ts`. ### Fixed - **feat**: Improve performance by optimizing existing key checks and handling null values in rendering functions. ## [0.2.13] - 2025-09-11 ### Added - **feat**: Add pre-commit hook for linting and testing, update package.json scripts. - **feat**: Add Jest configuration and setup for testing with TypeScript. - **test**: Add comprehensive tests for BaseNode core functionality. ### Fixed - **core**: Remove stylable elements from NO_STYLE_TAGS to ensure only non-visual/metadata tags are excluded from CSS styling. ## [0.2.12] - 2025-09-11 ### Fixed - **core.node**: Removed the child processing cache to fix a critical bug that caused infinite page loads in server-side rendering environments. - **helper**: Corrected the element type retrieval logic within the hashing function used for child node processing. ## [0.2.11] - 2025-09-11 ### Enhanced - **core.node**: Significantly improved JSDoc documentation for the `BaseNode` class, providing better clarity on prop processing, child handling, and rendering logic. - **core.node**: Overhauled the child processing and caching mechanism to improve server-side performance and resolve a memory leak. This includes a move from object stringification to a more performant hashing strategy for cache keys and the introduction of a cache management policy. ### Fixed - **helper**: Corrected an issue in flexbox style processing where an unnecessary string check was performed. - **core.node**: Updated a function placeholder to adhere to the unused parameter naming convention. ## [0.2.10] - 2025-09-10 ### Added - **core**: add top-level `render` function for a cleaner and simpler API when mounting a Meonode instance to the DOM. This abstracts away the need to manually use `react-dom/client`. - **Before**: ```typescript import { createRoot } from 'react-dom/client'; import { Div } from '@meonode/ui'; const container = document.getElementById('root'); const root = createRoot(container); root.render(Div({ children: 'Hello' }).render()); ``` - **After**: ```typescript import { Div } from '@meonode/ui'; import { render } from '@meonode/ui/client'; const container = document.getElementById('root'); render(Div({ children: 'Hello' }), container); ``` - **constants**: add `NO_STYLE_TAGS` array and `noStyleTagsSet` for quick lookup of tags that should not receive styles ### Enhanced - **core**: enhance `StyledRenderer` integration to check for no-style tags ### Changed - **helper**: update CSS property set to use constants and add no-style tag check - **package**: update dependencies to latest versions - **directory**: rename `data` directory to `constants` for clarity - **file**: rename `cssProperties.ts` to `cssProperties.const.ts` to reflect its purpose ## [0.2.9] - 2025-09-05 ### Fixed - **core.types**: corrected `MergedProps` definition to restore proper TypeScript inference and props autocomplete - Fixes regression from v0.2.8 where `createNode` and `createChildrenFirstNode` lost autocomplete for props due to incorrect `MergedProps` typing ## [0.2.8] - 2025-09-05 ### Changed - **core.node**: refactor props handling to use a single utility type: - `MergedProps<E, AdditionalProps>` — merges `NodeProps<E>` with custom props, giving precedence to overlapping keys from `AdditionalProps`. - Simplifies and unifies the typing system for node factories (`createNode`, `createChildrenFirstNode`). - Improves developer experience when working with prebuilt components: - Example: ```typescript import { Div, Input } from '@meonode/ui' // Add new props Div<{ field: string }>({ field: 'Hello' }) // Override existing React props Input<{ onChange: (e: { target: { value: string } }) => void }>({ onChange: ({ target }) => console.log(target.value), }) ``` Extending prebuilt components is now safer and more predictable, with generic props always taking precedence when keys overlap. - **helpers**: reorganize helper files and update import paths ### Fixed - **styled-renderer**: make `children` prop optional in `StyledRendererProps` ## [0.2.7] - 2025-09-04 ### Changed - **core.node**: rename `childIndex` to `nodeIndex` and update key generation logic ## [0.2.6] - 2025-09-04 - **deps**: update TypeScript ESLint, native-preview, and jsdoc to latest versions - **core.node**: improve generateIndexedKeyIfNeeded to accept object parameters and enhance key uniqueness with children count - **imports**: update import paths to include file extensions for compatibility ## [0.2.5] - 2025-09-03 - **imports**: Update import paths to include file extensions for compatibility. ## [0.2.4] - 2025-09-02 ### Added - **core**: Exposed the original element via the created Node for easier access and debugging. ```typescript import { createNode } from "@meonode/ui"; // Create a Node wrapping a 'div' element const MyComp = createNode('div'); // Access the underlying element type console.log(MyComp.element); // 'div' ``` ## [0.2.3] - 2025-09-01 ### Fixed - **types**: Remove forbidden css import to resolve RSC error ### Changed - **package**: Bump version to 0.2.3 ## [0.2.2] - 2025-09-01 ### Added - **core**: Include nativeProps in props extraction for improved component flexibility ### Enhanced - **types**: Enhance StyledRendererProps and FinalNodeProps for improved type safety ### Changed - **package**: Bump version to 0.2.2 ## [0.2.1] - 2025-09-01 ### Changed - **types**: Update CSS type from CSSObject to CSSInterpolation for better compatibility - **package**: Bump version to 0.2.1 ## [0.2.0] - 2025-08-31 ### Added - **docs**: Add badges for NPM version, license, and bundle size to README ### Enhanced - **docs**: Update installation instructions and enhance clarity in core concepts - **docs**: Enhance documentation with new examples and improved clarity ### Removed - **package**: Remove deprecated hook entry from package.json ### Fixed - **core.node**: Add suppressHydrationWarning to propsForCreateElement ### Changed - **package**: Bump version to 0.2.0 ## [0.1.121] - 2025-08-30 ### Changed - **core.node**: Simplify style resolution and improve prop handling - **StyledRenderer**: Remove unused style prop and simplify component - **package**: Bump version to 0.1.121 ## [0.1.120] - 2025-08-30 ### Added - **styles**: Add Emotion support and Next.js style registry integration - Add @emotion/react and @emotion/cache dependencies - Add StyledRenderer and StyleRegistry components for Emotion - Integrate StyledRenderer into BaseNode for style prop rendering - Add nextjs-registry export for Next.js style registry ### Enhanced - **core**: Enhance style handling with StyledRenderer for Emotion support ### Fixed - **deps**: Update peerDependencies for Emotion and React to use version constraints - **deps**: Update @types/react and @types/react-dom to latest versions ### Changed - **package**: Update peerDependencies for @emotion/cache - **package**: Bump version to 0.1.120 ## [0.1.118] - 2025-08-30 ### Fixed - **deps**: Update peerDependencies for Emotion and React to use version constraints ### Changed - **package**: Bump version to 0.1.118 ## [0.1.117] - 2025-08-30 ### Added - **flexbox**: Improve default style resolution and add flex shorthand parser - Add parseFlexShorthand to extract flex-grow, shrink, and basis - Enhance resolveDefaultStyle to respect explicit flex/flexShrink values - Improve handling of minHeight, minWidth, and flexShrink for flex items ### Enhanced - **core**: Refine type of finalChildren for improved type safety - **docs**: Update documentation for clarity on flexbox scrolling fixes ### Changed - **core**: Move comments position for better readability - **imports**: Remove .js extensions from internal imports - **package**: Bump version to 0.1.117 ## [0.1.116] - 2025-08-27 ### Changed - **package**: Bump version to 0.1.116 --- ## Notes - This changelog covers the most recent development history available - The project focuses on building React UIs with type-safe fluency without JSX syntax - Recent development has emphasized Emotion integration, type safety improvements, and enhanced flexbox support - For a complete history, view all commits on GitHub: [View all commits](https://github.com/l7aromeo/meonode-ui/commits)