This document contains release notes for each version of MeoNode UI, including new features, enhancements, bug fixes, and important changes. Use it to track the evolution of the library and understand what’s new or different in each release.
Release Date: 2025-09-23
NodeFunction
type to better support dynamic node content generation.FunctionRendererProps
interface to use NodeFunction
for consistency.Renderer
for improved stability.processRawNode
property from Node
type.Release Date: 2025-09-22
no-unsafe-function-type
rule to strengthen type safety.nodeSignature
function to accept the Children
type and improved handling of circular references.Release Date: 2025-09-21
PortalLauncher
type definition for improved readability.usePortal
with better component creation and cleanup logic.node.test.ts
.yarnPath
in .yarnrc.yml
.Release Date: 2025-09-19
update
method and new NodePortal
type.usePortal
hook to enable reactive portal behavior tied to state changes.A simple example using usePortal
to make a portal reactive to state updates:
import { Button, Div, Node, Portal, type PortalProps } from "@meonode/ui"; import { usePortal } from "@meonode/ui"; import { useState } from "react"; const PortalContent = ({ portal }: PortalProps<{ text: string }>) => { return Div({ children: [ "This is portal content!", state >= 1 ? text : "Initial text value", Button(`Update Portal (${state + 1})`, { onClick: () => setState((s: number) => s + 1), }), Button("Close Portal", { onClick: () => portal?.unmount(), }), ], }).render(); }; const MyPortal = () => { const [state, setState] = useState<number>(0); const { setPortal, createComponent } = usePortal([state]); const PortalContentComp = createComponent( ({ portal }: PortalProps<{ text: string }>) => PortalContent({ text: "Hello there" }), ); return Div({ children: [ Button("Open Portal", { onClick: () => { const portal = Portal<{ text: string }>(PortalContent)(); setPortal(portal); }, }), ], }).render(); };
Release Date: 2025-09-14
omit
and omitUndefined
utility functions to create object copies without specified keys or undefined values.finalProps
for both standard HTML tags and custom components.children
in core.node.ts
.core.node.ts
for cleaner and more efficient rendering.Div
node using the Component
HOC.Div
components with Container
for consistency in performance tests.Div
node in node.test.ts
.Release Date: 2025-09-13
_isServer
property to optimize server-side checks in caching methods.passedKey
from _functionRenderer
and simplified the function-as-child wrapper.toPortal
unmount behavior to properly clean up the portal container.children
prop to use the Children
type, improving clarity and consistency across the codebase.Release Date: 2025-09-12
WeakMap
and Map
for processed children, improving both performance and memory management.nodeSignature
for stable node signatures.createStableHash
with bounded traversal for safer, more predictable hashing.ObjHelper.stringify
for deterministic serialization with sorted keys and special type handling.Release Date: 2025-09-12
Container
as an alias for Div
to simplify general-purpose container usage.shallowEqual
helper from common.helper.ts
as part of API cleanup.null
values to boost performance and stability in rendering functions.Release Date: 2025-09-11
package.json
scripts for a smoother workflow.Release Date: 2025-09-11
Release Date: 2025-09-11
render
API & Constants UpdateRelease Date: 2025-09-10
render
function for a cleaner and simpler API when mounting a MeoNode instance to the DOM. This abstracts away the need to manually call react-dom/client
.
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());
import { Div } from '@meonode/ui'; import { render } from '@meonode/ui/client'; const container = document.getElementById('root'); render(Div({ children: 'Hello' }), container);
NO_STYLE_TAGS
array and noStyleTagsSet
for fast lookup of tags that should not receive styles.StyledRenderer
integration to check for no-style tags.data
→ constants
for clarity.cssProperties.ts
→ cssProperties.const.ts
to better reflect its purpose.Release Date: 05/09/2025
MergedProps
definition to restore accurate TypeScript inference and props autocomplete.
createNode
and createChildrenFirstNode
lost autocomplete support for props due to incorrect typing.MergedProps
Release Date: 05/09/2025
MergedProps<E, AdditionalProps>
, simplifying and unifying typing for createNode
and createChildrenFirstNode
.import { createNode, Input } from '@meonode/ui' export const Div = createNode('div') // Add new props const custom = Div<{ field: string }>({ field: 'Hello' }) // Override existing React props const withOverride = Input<{ onChange: (e: { target: { value: string } }) }>({ onChange: ({ target }) => console.log(target.value), })
children
prop optional in StyledRendererProps
.Release Date: 04/09/2025
childIndex
to nodeIndex
and refined key generation logic.Release Date: 04/09/2025
Release Date: 03/09/2025
Release Date: 02/09/2025
MyComp.element
).