@meonode/ui 0.2.9 → 0.2.11

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
@@ -5,6 +5,48 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.11] - 2025-09-11
9
+
10
+ ### Enhanced
11
+ - **core.node**: Significantly improved JSDoc documentation for the `BaseNode` class, providing better clarity on prop processing, child handling, and rendering logic.
12
+ - **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.
13
+
14
+ ### Fixed
15
+ - **helper**: Corrected an issue in flexbox style processing where an unnecessary string check was performed.
16
+ - **core.node**: Updated a function placeholder to adhere to the unused parameter naming convention.
17
+
18
+ ## [0.2.10] - 2025-09-10
19
+
20
+ ### Added
21
+ - **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`.
22
+ - **Before**:
23
+ ```typescript
24
+ import { createRoot } from 'react-dom/client';
25
+ import { Div } from '@meonode/ui';
26
+
27
+ const container = document.getElementById('root');
28
+ const root = createRoot(container);
29
+ root.render(Div({ children: 'Hello' }).render());
30
+ ```
31
+ - **After**:
32
+ ```typescript
33
+ import { Div } from '@meonode/ui';
34
+ import { render } from '@meonode/ui/client';
35
+
36
+ const container = document.getElementById('root');
37
+ render(Div({ children: 'Hello' }), container);
38
+ ```
39
+ - **constants**: add `NO_STYLE_TAGS` array and `noStyleTagsSet` for quick lookup of tags that should not receive styles
40
+
41
+ ### Enhanced
42
+ - **core**: enhance `StyledRenderer` integration to check for no-style tags
43
+
44
+ ### Changed
45
+ - **helper**: update CSS property set to use constants and add no-style tag check
46
+ - **package**: update dependencies to latest versions
47
+ - **directory**: rename `data` directory to `constants` for clarity
48
+ - **file**: rename `cssProperties.ts` to `cssProperties.const.ts` to reflect its purpose
49
+
8
50
  ## [0.2.9] - 2025-09-05
9
51
 
10
52
  ### Fixed
@@ -26,7 +68,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
26
68
  Div<{ field: string }>({ field: 'Hello' })
27
69
 
28
70
  // Override existing React props
29
- Input<{ onChange: (e: { target: { value: string } }) }>({
71
+ Input<{ onChange: (e: { target: { value: string } }) => void }>({
30
72
  onChange: ({ target }) => console.log(target.value),
31
73
  })
32
74
  ```
package/README.md CHANGED
@@ -117,43 +117,6 @@ const emotionStyles = css`
117
117
  - **📱 Responsive Design**: Native media query support with optimal performance
118
118
  - **🎨 Advanced Features**: Pseudo-classes, keyframe animations, and complex selectors
119
119
 
120
- ### Theme Resolution Engine
121
-
122
- ```tsx
123
- // MeoNode's theme engine automatically resolves nested theme paths:
124
- const theme = {
125
- colors: {
126
- primary: {
127
- 500: '#3B82F6',
128
- 600: '#2563EB'
129
- }
130
- }
131
- };
132
-
133
- // This syntax:
134
- backgroundColor: 'theme.colors.primary.500'
135
-
136
- // Gets resolved by the engine to:
137
- backgroundColor: '#3B82F6'
138
-
139
- // The resolution happens through Emotion's theming system:
140
- import { ThemeProvider } from '@emotion/react';
141
-
142
- // MeoNode wraps your components automatically:
143
- const ThemedComponent = () => (
144
- <ThemeProvider theme={theme}>
145
- <div css={{
146
- backgroundColor: theme.colors.primary[500], // Resolved automatically
147
- '&:hover': {
148
- backgroundColor: theme.colors.primary[600]
149
- }
150
- }}>
151
- Content
152
- </div>
153
- </ThemeProvider>
154
- );
155
- ```
156
-
157
120
  ### Style Processing Pipeline
158
121
 
159
122
  1. **Parse Props**: MeoNode separates CSS properties from DOM attributes
@@ -0,0 +1,9 @@
1
+ import type { NodeInstance } from './node.type.js';
2
+ /**
3
+ * Renders a Meonode instance into a DOM container.
4
+ * @param node The Meonode instance to render (e.g., created with Div(), P(), etc.).
5
+ * @param container The DOM element to mount the content into.
6
+ * @returns The React root instance.
7
+ */
8
+ export declare function render(node: NodeInstance<any>, container: Element): import("react-dom/client").Root;
9
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGrD;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,mCAIjE"}
package/dist/client.js ADDED
@@ -0,0 +1,6 @@
1
+ import{createRoot}from"react-dom/client";/**
2
+ * Renders a Meonode instance into a DOM container.
3
+ * @param node The Meonode instance to render (e.g., created with Div(), P(), etc.).
4
+ * @param container The DOM element to mount the content into.
5
+ * @returns The React root instance.
6
+ */export function render(a,b){var c=createRoot(b);return c.render(a.render()),c}
@@ -0,0 +1,3 @@
1
+ export declare const NO_STYLE_TAGS: readonly ["html", "head", "title", "base", "meta", "link", "script", "style", "noscript", "template", "slot", "source", "track", "param", "area", "wbr", "embed", "object", "canvas", "iframe", "frame", "frameset", "applet", "bgsound", "noembed", "noframes", "picture", "svg", "math", "map", "audio", "video", "colgroup", "col", "tbody", "thead", "tfoot", "caption", "legend", "datalist", "optgroup", "option", "output", "progress", "meter", "script", "template", "track", "param", "source", "style", "link", "meta", "base", "title", "head", "html"];
2
+ export declare const noStyleTagsSet: Set<"applet" | "area" | "audio" | "base" | "bgsound" | "canvas" | "caption" | "col" | "colgroup" | "datalist" | "embed" | "frame" | "frameset" | "head" | "html" | "iframe" | "legend" | "link" | "map" | "math" | "meta" | "meter" | "noembed" | "noframes" | "noscript" | "object" | "optgroup" | "option" | "output" | "param" | "picture" | "progress" | "script" | "slot" | "source" | "style" | "svg" | "tbody" | "template" | "tfoot" | "thead" | "title" | "track" | "video" | "wbr">;
3
+ //# sourceMappingURL=common.const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.const.d.ts","sourceRoot":"","sources":["../../src/constants/common.const.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,qiBA0DhB,CAAA;AAEV,eAAO,MAAM,cAAc,+dAAyB,CAAA"}
@@ -0,0 +1 @@
1
+ export var NO_STYLE_TAGS=["html","head","title","base","meta","link","script","style","noscript","template","slot","source","track","param","area","wbr","embed","object","canvas","iframe","frame","frameset","applet","bgsound","noembed","noframes","picture","svg","math","map","audio","video","colgroup","col","tbody","thead","tfoot","caption","legend","datalist","optgroup","option","output","progress","meter","script","template","track","param","source","style","link","meta","base","title","head","html"];export var noStyleTagsSet=new Set(NO_STYLE_TAGS);
@@ -0,0 +1,3 @@
1
+ declare const cssProperties: readonly ["MozAnimation", "MozAnimationDelay", "MozAnimationDirection", "MozAnimationDuration", "MozAnimationFillMode", "MozAnimationIterationCount", "MozAnimationName", "MozAnimationPlayState", "MozAnimationTimingFunction", "MozAppearance", "MozBinding", "MozBorderBottomColors", "MozBorderEndColor", "MozBorderEndStyle", "MozBorderEndWidth", "MozBorderImage", "MozBorderLeftColors", "MozBorderRightColors", "MozBorderStartColor", "MozBorderStartStyle", "MozBorderTopColors", "MozBoxSizing", "MozColumnCount", "MozColumnFill", "MozColumnRule", "MozColumnRuleColor", "MozColumnRuleStyle", "MozColumnRuleWidth", "MozColumnWidth", "MozColumns", "MozContextProperties", "MozFontFeatureSettings", "MozFontLanguageOverride", "MozHyphens", "MozImageRegion", "MozMarginEnd", "MozMarginStart", "MozOrient", "MozOsxFontSmoothing", "MozOutlineRadius", "MozOutlineRadiusBottomleft", "MozOutlineRadiusBottomright", "MozOutlineRadiusTopleft", "MozOutlineRadiusTopright", "MozPaddingEnd", "MozPaddingStart", "MozStackSizing", "MozTabSize", "MozTextBlink", "MozTextSizeAdjust", "MozUserFocus", "MozUserModify", "MozUserSelect", "MozWindowDragging", "MozWindowShadow", "WebkitAlignContent", "WebkitAlignItems", "WebkitAlignSelf", "WebkitAnimation", "WebkitAnimationDelay", "WebkitAnimationDirection", "WebkitAnimationDuration", "WebkitAnimationFillMode", "WebkitAnimationIterationCount", "WebkitAnimationName", "WebkitAnimationPlayState", "WebkitAnimationTimingFunction", "WebkitAppearance", "WebkitBackdropFilter", "WebkitBackfaceVisibility", "WebkitBackgroundClip", "WebkitBackgroundOrigin", "WebkitBackgroundSize", "WebkitBorderBefore", "WebkitBorderBeforeColor", "WebkitBorderBeforeStyle", "WebkitBorderBeforeWidth", "WebkitBorderBottomLeftRadius", "WebkitBorderBottomRightRadius", "WebkitBorderImage", "WebkitBorderImageSlice", "WebkitBorderRadius", "WebkitBorderTopLeftRadius", "WebkitBorderTopRightRadius", "WebkitBoxDecorationBreak", "WebkitBoxReflect", "WebkitBoxShadow", "WebkitBoxSizing", "WebkitClipPath", "WebkitColumnCount", "WebkitColumnFill", "WebkitColumnRule", "WebkitColumnRuleColor", "WebkitColumnRuleStyle", "WebkitColumnRuleWidth", "WebkitColumnSpan", "WebkitColumnWidth", "WebkitColumns", "WebkitFilter", "WebkitFlex", "WebkitFlexBasis", "WebkitFlexDirection", "WebkitFlexFlow", "WebkitFlexGrow", "WebkitFlexShrink", "WebkitFlexWrap", "WebkitFontFeatureSettings", "WebkitFontKerning", "WebkitFontSmoothing", "WebkitFontVariantLigatures", "WebkitHyphenateCharacter", "WebkitHyphens", "WebkitInitialLetter", "WebkitJustifyContent", "WebkitLineBreak", "WebkitLineClamp", "WebkitMarginEnd", "WebkitMarginStart", "WebkitMask", "WebkitMaskAttachment", "WebkitMaskBoxImage", "WebkitMaskBoxImageOutset", "WebkitMaskBoxImageRepeat", "WebkitMaskBoxImageSlice", "WebkitMaskBoxImageSource", "WebkitMaskBoxImageWidth", "WebkitMaskClip", "WebkitMaskComposite", "WebkitMaskImage", "WebkitMaskOrigin", "WebkitMaskPosition", "WebkitMaskPositionX", "WebkitMaskPositionY", "WebkitMaskRepeat", "WebkitMaskRepeatX", "WebkitMaskRepeatY", "WebkitMaskSize", "WebkitMaxInlineSize", "WebkitOrder", "WebkitOverflowScrolling", "WebkitPaddingEnd", "WebkitPaddingStart", "WebkitPerspective", "WebkitPerspectiveOrigin", "WebkitPrintColorAdjust", "WebkitRubyPosition", "WebkitScrollSnapType", "WebkitShapeMargin", "WebkitTapHighlightColor", "WebkitTextCombine", "WebkitTextDecorationColor", "WebkitTextDecorationLine", "WebkitTextDecorationSkip", "WebkitTextDecorationStyle", "WebkitTextEmphasis", "WebkitTextEmphasisColor", "WebkitTextEmphasisPosition", "WebkitTextEmphasisStyle", "WebkitTextFillColor", "WebkitTextOrientation", "WebkitTextSizeAdjust", "WebkitTextStroke", "WebkitTextStrokeColor", "WebkitTextStrokeWidth", "WebkitTextUnderlinePosition", "WebkitTouchCallout", "WebkitTransform", "WebkitTransformOrigin", "WebkitTransformStyle", "WebkitTransition", "WebkitTransitionDelay", "WebkitTransitionDuration", "WebkitTransitionProperty", "WebkitTransitionTimingFunction", "WebkitUserModify", "WebkitUserSelect", "WebkitWritingMode", "accentColor", "alignContent", "alignItems", "alignSelf", "alignTracks", "all", "animation", "animationComposition", "animationDelay", "animationDirection", "animationDuration", "animationFillMode", "animationIterationCount", "animationName", "animationPlayState", "animationRange", "animationRangeEnd", "animationRangeStart", "animationTimeline", "animationTimingFunction", "appearance", "aspectRatio", "backdropFilter", "backfaceVisibility", "background", "backgroundAttachment", "backgroundBlendMode", "backgroundClip", "backgroundColor", "backgroundImage", "backgroundOrigin", "backgroundPosition", "backgroundPositionX", "backgroundPositionY", "backgroundRepeat", "backgroundSize", "blockOverflow", "blockSize", "border", "borderBlock", "borderBlockColor", "borderBlockEnd", "borderBlockEndColor", "borderBlockEndStyle", "borderBlockEndWidth", "borderBlockStart", "borderBlockStartColor", "borderBlockStartStyle", "borderBlockStartWidth", "borderBlockStyle", "borderBlockWidth", "borderBottom", "borderBottomColor", "borderBottomLeftRadius", "borderBottomRightRadius", "borderBottomStyle", "borderBottomWidth", "borderCollapse", "borderColor", "borderEndEndRadius", "borderEndStartRadius", "borderImage", "borderImageOutset", "borderImageRepeat", "borderImageSlice", "borderImageSource", "borderImageWidth", "borderInline", "borderInlineColor", "borderInlineEnd", "borderInlineEndColor", "borderInlineEndStyle", "borderInlineEndWidth", "borderInlineStart", "borderInlineStartColor", "borderInlineStartStyle", "borderInlineStartWidth", "borderInlineStyle", "borderInlineWidth", "borderLeft", "borderLeftColor", "borderLeftStyle", "borderLeftWidth", "borderRadius", "borderRight", "borderRightColor", "borderRightStyle", "borderRightWidth", "borderSpacing", "borderStartEndRadius", "borderStartStartRadius", "borderStyle", "borderTop", "borderTopColor", "borderTopLeftRadius", "borderTopRightRadius", "borderTopStyle", "borderTopWidth", "borderWidth", "bottom", "boxDecorationBreak", "boxShadow", "boxSizing", "breakAfter", "breakBefore", "breakInside", "captionSide", "caret", "caretColor", "caretShape", "clear", "clipPath", "color", "colorAdjust", "colorScheme", "columnCount", "columnFill", "columnGap", "columnRule", "columnRuleColor", "columnRuleStyle", "columnRuleWidth", "columnSpan", "columnWidth", "columns", "contain", "containIntrinsicBlockSize", "containIntrinsicHeight", "containIntrinsicInlineSize", "containIntrinsicSize", "containIntrinsicWidth", "container", "containerName", "containerType", "content", "contentVisibility", "counterIncrement", "counterReset", "counterSet", "cursor", "direction", "display", "emptyCells", "filter", "flex", "flexBasis", "flexDirection", "flexFlow", "flexGrow", "flexShrink", "flexWrap", "float", "font", "fontFamily", "fontFeatureSettings", "fontKerning", "fontLanguageOverride", "fontOpticalSizing", "fontPalette", "fontSize", "fontSizeAdjust", "fontSmooth", "fontStretch", "fontStyle", "fontSynthesis", "fontSynthesisPosition", "fontSynthesisSmallCaps", "fontSynthesisStyle", "fontSynthesisWeight", "fontVariant", "fontVariantAlternates", "fontVariantCaps", "fontVariantEastAsian", "fontVariantEmoji", "fontVariantLigatures", "fontVariantNumeric", "fontVariantPosition", "fontVariationSettings", "fontWeight", "forcedColorAdjust", "gap", "grid", "gridArea", "gridAutoColumns", "gridAutoFlow", "gridAutoRows", "gridColumn", "gridColumnEnd", "gridColumnStart", "gridRow", "gridRowEnd", "gridRowStart", "gridTemplate", "gridTemplateAreas", "gridTemplateColumns", "gridTemplateRows", "hangingPunctuation", "height", "hyphenateCharacter", "hyphenateLimitChars", "hyphens", "imageOrientation", "imageRendering", "imageResolution", "initialLetter", "inlineSize", "inputSecurity", "inset", "insetBlock", "insetBlockEnd", "insetBlockStart", "insetInline", "insetInlineEnd", "insetInlineStart", "isolation", "justifyContent", "justifyItems", "justifySelf", "justifyTracks", "left", "letterSpacing", "lineBreak", "lineClamp", "lineHeight", "lineHeightStep", "listStyle", "listStyleImage", "listStylePosition", "listStyleType", "margin", "marginBlock", "marginBlockEnd", "marginBlockStart", "marginBottom", "marginInline", "marginInlineEnd", "marginInlineStart", "marginLeft", "marginRight", "marginTop", "marginTrim", "mask", "maskBorder", "maskBorderMode", "maskBorderOutset", "maskBorderRepeat", "maskBorderSlice", "maskBorderSource", "maskBorderWidth", "maskClip", "maskComposite", "maskImage", "maskMode", "maskOrigin", "maskPosition", "maskRepeat", "maskSize", "maskType", "masonryAutoFlow", "mathDepth", "mathShift", "mathStyle", "maxBlockSize", "maxHeight", "maxInlineSize", "maxLines", "maxWidth", "minBlockSize", "minHeight", "minInlineSize", "minWidth", "mixBlendMode", "motion", "motionDistance", "motionPath", "motionRotation", "msAccelerator", "msBlockProgression", "msContentZoomChaining", "msContentZoomLimit", "msContentZoomLimitMax", "msContentZoomLimitMin", "msContentZoomSnap", "msContentZoomSnapPoints", "msContentZoomSnapType", "msContentZooming", "msFilter", "msFlex", "msFlexDirection", "msFlexPositive", "msFlowFrom", "msFlowInto", "msGridColumns", "msGridRows", "msHighContrastAdjust", "msHyphenateLimitChars", "msHyphenateLimitLines", "msHyphenateLimitZone", "msHyphens", "msImeAlign", "msLineBreak", "msOrder", "msOverflowStyle", "msOverflowX", "msOverflowY", "msScrollChaining", "msScrollLimit", "msScrollLimitXMax", "msScrollLimitXMin", "msScrollLimitYMax", "msScrollLimitYMin", "msScrollRails", "msScrollSnapPointsX", "msScrollSnapPointsY", "msScrollSnapType", "msScrollSnapX", "msScrollSnapY", "msScrollTranslation", "msScrollbar3dlightColor", "msScrollbarArrowColor", "msScrollbarBaseColor", "msScrollbarDarkshadowColor", "msScrollbarFaceColor", "msScrollbarHighlightColor", "msScrollbarShadowColor", "msScrollbarTrackColor", "msTextAutospace", "msTextCombineHorizontal", "msTextOverflow", "msTouchAction", "msTouchSelect", "msTransform", "msTransformOrigin", "msTransition", "msTransitionDelay", "msTransitionDuration", "msTransitionProperty", "msTransitionTimingFunction", "msUserSelect", "msWordBreak", "msWrapFlow", "msWrapMargin", "msWrapThrough", "msWritingMode", "objectFit", "objectPosition", "offset", "offsetAnchor", "offsetDistance", "offsetPath", "offsetPosition", "offsetRotate", "offsetRotation", "opacity", "order", "orphans", "outline", "outlineColor", "outlineOffset", "outlineStyle", "outlineWidth", "overflow", "overflowAnchor", "overflowBlock", "overflowClipBox", "overflowClipMargin", "overflowInline", "overflowWrap", "overflowX", "overflowY", "overlay", "overscrollBehavior", "overscrollBehaviorBlock", "overscrollBehaviorInline", "overscrollBehaviorX", "overscrollBehaviorY", "padding", "paddingBlock", "paddingBlockEnd", "paddingBlockStart", "paddingBottom", "paddingInline", "paddingInlineEnd", "paddingInlineStart", "paddingLeft", "paddingRight", "paddingTop", "page", "pageBreakAfter", "pageBreakBefore", "pageBreakInside", "paintOrder", "perspective", "perspectiveOrigin", "placeContent", "placeItems", "placeSelf", "pointerEvents", "position", "printColorAdjust", "quotes", "resize", "right", "rotate", "rowGap", "rubyAlign", "rubyMerge", "rubyPosition", "scale", "scrollBehavior", "scrollMargin", "scrollMarginBlock", "scrollMarginBlockEnd", "scrollMarginBlockStart", "scrollMarginBottom", "scrollMarginInline", "scrollMarginInlineEnd", "scrollMarginInlineStart", "scrollMarginLeft", "scrollMarginRight", "scrollMarginTop", "scrollPadding", "scrollPaddingBlock", "scrollPaddingBlockEnd", "scrollPaddingBlockStart", "scrollPaddingBottom", "scrollPaddingInline", "scrollPaddingInlineEnd", "scrollPaddingInlineStart", "scrollPaddingLeft", "scrollPaddingRight", "scrollPaddingTop", "scrollSnapAlign", "scrollSnapMargin", "scrollSnapMarginBottom", "scrollSnapMarginLeft", "scrollSnapMarginRight", "scrollSnapMarginTop", "scrollSnapStop", "scrollSnapType", "scrollTimeline", "scrollTimelineAxis", "scrollTimelineName", "scrollbarColor", "scrollbarGutter", "scrollbarWidth", "shapeImageThreshold", "shapeMargin", "shapeOutside", "tabSize", "tableLayout", "textAlign", "textAlignLast", "textCombineUpright", "textDecoration", "textDecorationColor", "textDecorationLine", "textDecorationSkip", "textDecorationSkipInk", "textDecorationStyle", "textDecorationThickness", "textEmphasis", "textEmphasisColor", "textEmphasisPosition", "textEmphasisStyle", "textIndent", "textJustify", "textOrientation", "textOverflow", "textRendering", "textShadow", "textSizeAdjust", "textTransform", "textUnderlineOffset", "textUnderlinePosition", "textWrap", "timelineScope", "top", "touchAction", "transform", "transformBox", "transformOrigin", "transformStyle", "transition", "transitionBehavior", "transitionDelay", "transitionDuration", "transitionProperty", "transitionTimingFunction", "translate", "unicodeBidi", "userSelect", "verticalAlign", "viewTimeline", "viewTimelineAxis", "viewTimelineInset", "viewTimelineName", "viewTransitionName", "visibility", "whiteSpace", "whiteSpaceCollapse", "whiteSpaceTrim", "widows", "width", "willChange", "wordBreak", "wordSpacing", "wordWrap", "writingMode", "zIndex", "zoom"];
2
+ export default cssProperties;
3
+ //# sourceMappingURL=css-properties.const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-properties.const.d.ts","sourceRoot":"","sources":["../../src/constants/css-properties.const.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,aAAa,k0ZAirBT,CAAA;AAEV,eAAe,aAAa,CAAA"}
@@ -15,87 +15,188 @@ export declare class BaseNode<E extends NodeElement> implements NodeInstance<E>
15
15
  element: E;
16
16
  /** Original props passed during construction, preserved for cloning/recreation */
17
17
  rawProps: RawNodeProps<E>;
18
- /** Processed props after theme resolution, style processing, and child normalization */
19
- props: FinalNodeProps;
20
18
  /** Flag to identify BaseNode instances */
21
19
  readonly isBaseNode: boolean;
20
+ /** Processed props after theme resolution, style processing, and child normalization */
21
+ private _props?;
22
22
  /** DOM element used for portal rendering */
23
23
  private _portalDOMElement;
24
24
  /** React root instance for portal rendering */
25
25
  private _portalReactRoot;
26
+ /** Hash of the current children and theme to detect changes */
27
+ private _childrenHash?;
28
+ /** Cache for normalized children */
29
+ private _normalizedChildren?;
30
+ /** Cache for processed children on the server (uses stringified keys for effective caching) */
31
+ private static _childProcessingCache;
26
32
  /**
27
- * Creates a new BaseNode instance that wraps a React element.
28
- * Processes raw props by:
29
- * - Extracting and resolving theme-aware styles
30
- * - Processing DOM-related props
31
- * - Normalizing children with theme inheritance
32
- * @param element The React element/component to wrap
33
- * @param rawProps Initial props including theme, styles, and children
33
+ * Constructs a new BaseNode instance.
34
+ *
35
+ * This constructor initializes a node with a given React element or component type
36
+ * and the raw props passed to it. The props are not processed until they are
37
+ * accessed via the `props` getter, allowing for lazy evaluation.
38
+ * @param element The React element or component type this node will represent.
39
+ * @param rawProps The initial, unprocessed props for the element.
34
40
  */
35
41
  constructor(element: E, rawProps?: RawNodeProps<E>);
42
+ /**
43
+ * Lazily processes and retrieves the final, normalized props for the node.
44
+ *
45
+ * The first time this getter is accessed, it triggers `_processProps` to resolve
46
+ * themes, styles, and children. Subsequent accesses return the cached result
47
+ * until the node is cloned or recreated.
48
+ * @returns The fully processed and normalized `FinalNodeProps`.
49
+ */
50
+ get props(): FinalNodeProps;
51
+ /**
52
+ * Performs the core logic of processing raw props into their final, normalized form.
53
+ *
54
+ * This method is called by the `props` getter on its first access. It handles:
55
+ * 1. **Theme Resolution**: Selects the active theme from `theme` or `nodetheme` props.
56
+ * 2. **Prop Resolution**: Resolves theme-aware values (functions) in `rawProps` and `nativeProps.style`.
57
+ * 3. **Style Extraction**: Separates style-related props (`css`, `style`) from other DOM/component props.
58
+ * 4. **Default Style Merging**: Combines default styles with resolved style props.
59
+ * 5. **Child Processing**: Normalizes the `children` prop, propagating the theme.
60
+ * @returns The processed `FinalNodeProps` object.
61
+ * @private
62
+ */
63
+ private _processProps;
64
+ /**
65
+ * Processes raw children, wrapping them in `BaseNode` instances where necessary
66
+ * and propagating the theme.
67
+ *
68
+ * This method recursively processes each child to ensure consistent theme handling
69
+ * and to convert valid elements into `BaseNode` instances. It uses caching to
70
+ * optimize performance, with different strategies for server-side (string-based key)
71
+ * and client-side (WeakMap-based key) environments.
72
+ * @param children The raw child or array of children to process.
73
+ * @param theme The theme to propagate to the children.
74
+ * @returns The processed children, ready to be normalized for rendering.
75
+ * @private
76
+ */
36
77
  private _processChildren;
37
78
  /**
38
- * Renders a processed NodeElement into a ReactNode, applying theme and key if needed.
79
+ * Renders a processed `NodeElement` into a `ReactNode`, applying a theme and key if necessary.
39
80
  *
40
- * Handles the following cases:
41
- * 1. If the element is a BaseNode instance, it re-wraps it to apply the key and theme if needed.
42
- * 2. If the element is a React class component type, it wraps it in a BaseNode.
43
- * 3. If the element is a NodeInstance object, it calls its render method.
44
- * 4. If the element is a React.Component instance, it calls its render method.
45
- * 5. If the element is a functional component, it creates a React element with the provided key.
46
- * 6. For all other valid ReactNode types, it returns the element as-is.
47
- * @param processedElement The processed node element to render.
48
- * @param passedTheme The theme to apply, if any.
49
- * @param passedKey The key to assign, if any.
50
- * @returns The rendered ReactNode.
81
+ * This static method centralizes the logic for converting various types of processed elements
82
+ * into renderable React nodes. It handles:
83
+ * - `BaseNode` instances: Re-wraps them to apply a new key or theme.
84
+ * - React class components: Wraps them in a new `BaseNode`.
85
+ * - `NodeInstance` objects: Invokes their `render()` method.
86
+ * - React component instances: Invokes their `render()` method.
87
+ * - Functional components: Creates a React element from them.
88
+ * - Other valid `ReactNode` types (strings, numbers, etc.): Returns them as-is.
89
+ * @param processedElement The node element to render.
90
+ * @param passedTheme The theme to propagate.
91
+ * @param passedKey The React key to assign.
92
+ * @returns A renderable `ReactNode`.
93
+ * @private
94
+ * @static
51
95
  */
52
96
  static _renderProcessedNode(processedElement: NodeElement, passedTheme: Theme | undefined, passedKey: string | undefined): ReactNode;
53
97
  /**
54
- * Renders the result of a function child, supporting theme propagation.
98
+ * Renders the output of a function-as-a-child, ensuring theme propagation.
55
99
  *
56
- * Used for children that are functions (`() => Children`). If the returned value is a `BaseNode`
57
- * without an explicit theme, the parent theme is injected. Otherwise, the result is rendered as-is.
58
- * @template E - The type of ReactNode or NodeInstance.
59
- * @param props Renderer props.
60
- * @param props.render Function to invoke for rendering the child.
61
- * @param props.passedTheme Theme to provide to the child, if applicable.
62
- * @param props.passedKey Key to assign to the rendered node.
63
- * @param props.processRawNode Function to process raw nodes.
64
- * @returns The rendered ReactNode, with theme applied if necessary.
100
+ * This method is designed to handle "render prop" style children (`() => ReactNode`).
101
+ * It invokes the function, processes its result, and ensures the parent's theme is
102
+ * correctly passed down to any `BaseNode` instances returned by the function.
103
+ * @param props The properties for the function renderer.
104
+ * @param props.render The function to execute to get the child content.
105
+ * @param props.passedTheme The theme to propagate to the rendered child.
106
+ * @param props.passedKey The React key to assign to the rendered node.
107
+ * @param props.processRawNode A reference to the `_processRawNode` method for recursive processing.
108
+ * @returns The rendered `ReactNode`.
109
+ * @private
65
110
  */
66
111
  private _functionRenderer;
67
112
  /**
68
- * Processes a single raw child element, converting it into a ProcessedChild.
69
- * If the child is part of an array and lacks an explicit key, a stable indexed key
70
- * (`elementName_child_index`) is generated for new BaseNode instances.
71
- * @param rawNode The raw child element to process.
72
- * @param parentTheme The theme inherited from the parent node.
73
- * @param nodeIndex Optional index of the child if it's part of an array.
74
- * @returns The processed child.
113
+ * Generates a stable key for a node, especially for elements within an array.
114
+ *
115
+ * If an `existingKey` is provided, it is returned. Otherwise, a key is generated
116
+ * based on the element's type name and its index within a list of siblings.
117
+ * This helps prevent re-rendering issues in React when dealing with dynamic lists.
118
+ * @param options The options for key generation.
119
+ * @param options.nodeIndex The index of the node in an array of children.
120
+ * @param options.element The element for which to generate a key.
121
+ * @param options.existingKey An existing key, if one was already provided.
122
+ * @param options.children The children of the node, used to add complexity to the key.
123
+ * @returns A React key, or `undefined` if no key could be generated.
124
+ * @private
125
+ */
126
+ private _generateKey;
127
+ /**
128
+ * Processes a single raw node, recursively converting it into a `BaseNode` or other renderable type.
129
+ *
130
+ * This is a central method for normalizing children. It handles various types of input:
131
+ * - **`BaseNode` instances**: Re-creates them to ensure the correct theme and key are applied.
132
+ * - **Primitives**: Returns strings, numbers, booleans, null, and undefined as-is.
133
+ * - **Functions (Render Props)**: Wraps them in a `BaseNode` that uses `_functionRenderer` to delay execution.
134
+ * - **Valid React Elements**: Converts them into `BaseNode` instances, extracting props and propagating the theme.
135
+ * - **React Component Types**: Wraps them in a `BaseNode` with the parent theme.
136
+ * - **React Component Instances**: Renders them and processes the output recursively.
137
+ *
138
+ * It also generates a stable key for elements within an array if one is not provided.
139
+ * @param rawNode The raw child node to process.
140
+ * @param parentTheme The theme inherited from the parent.
141
+ * @param nodeIndex The index of the child if it is in an array, used for key generation.
142
+ * @returns A processed `NodeElement` (typically a `BaseNode` instance or a primitive).
143
+ * @private
75
144
  */
76
- _processRawNode(rawNode: NodeElement, parentTheme?: Theme, nodeIndex?: number): NodeElement;
145
+ private _processRawNode;
77
146
  /**
78
- * Normalizes a child node into a renderable ReactNode.
79
- * Processes different types of child nodes to ensure they can be properly rendered
80
- * while maintaining theme inheritance.
147
+ * Normalizes a processed child node into a final, renderable `ReactNode`.
81
148
  *
82
- * Handles:
83
- * - BaseNode instances (applies theme if needed)
84
- * - React.Component instances (applies theme if needed)
85
- * - Other valid React element types (returned as-is)
86
- * - null/undefined values (returned as-is)
87
- * @param child The child node to normalize into a renderable form
88
- * @returns The normalized ReactNode that can be rendered by React
89
- * @throws Error if child is an invalid element type
149
+ * This method is called during the `render` phase. It takes a child that has already
150
+ * been processed by `_processChildren` and prepares it for `React.createElement`.
151
+ *
152
+ * - For `BaseNode` instances, it calls their `render()` method, ensuring the theme is consistent.
153
+ * - It validates that other children are valid React element types.
154
+ * - Primitives and other valid nodes are returned as-is.
155
+ * @param child The processed child node to normalize.
156
+ * @returns A renderable `ReactNode`.
157
+ * @throws {Error} If the child is not a valid React element type.
158
+ * @private
90
159
  */
91
160
  private _normalizeChild;
92
161
  /**
93
- * Converts this BaseNode instance into a renderable React node.
94
- * Recursively processes child nodes and uses `React.createElement` to construct the final React element.
95
- * @returns A ReactNode representing the rendered element.
162
+ * Renders the `BaseNode` into a `ReactElement`.
163
+ *
164
+ * This method is the final step in the rendering pipeline. It constructs a React element
165
+ * by:
166
+ * 1. Validating that the node's `element` type is renderable.
167
+ * 2. Normalizing processed children into `ReactNode`s using `_normalizeChild`.
168
+ * 3. Caching normalized children to avoid re-processing on subsequent renders.
169
+ * 4. Assembling the final props, including `key`, `style`, and other attributes.
170
+ * 5. If the element has a `css` prop, it may be wrapped in a `StyledRenderer` to handle
171
+ * CSS-in-JS styling.
172
+ * 6. Finally, calling `React.createElement` with the element, props, and children.
173
+ * @returns The rendered `ReactElement`.
174
+ * @throws {Error} If the node's `element` is not a valid React element type.
96
175
  */
97
176
  render(): ReactElement;
177
+ /**
178
+ * Ensures the necessary DOM elements for portal rendering are created and attached.
179
+ *
180
+ * On the client-side, this method checks for or creates a `div` element appended
181
+ * to the `document.body` and initializes a React root on it. This setup is
182
+ * required for the `toPortal` method to function. It is idempotent and safe
183
+ * to call multiple times.
184
+ * @returns `true` if the portal infrastructure is ready, `false` if on the server.
185
+ * @private
186
+ */
98
187
  private _ensurePortalInfrastructure;
188
+ /**
189
+ * Renders the node into a React Portal.
190
+ *
191
+ * This method mounts the node's rendered content into a separate DOM tree
192
+ * attached to the `document.body`. It's useful for rendering components like
193
+ * modals, tooltips, or notifications that need to appear above other UI elements.
194
+ *
195
+ * The returned object includes an `unmount` function to clean up the portal.
196
+ * @returns A `ReactDOMRoot` instance for managing the portal, or `null` if
197
+ * called in a server-side environment. The returned instance is enhanced
198
+ * with a custom `unmount` method that also cleans up the associated DOM element.
199
+ */
99
200
  toPortal(): ReactDOMRoot | null;
100
201
  }
101
202
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"core.node.d.ts","sourceRoot":"","sources":["../src/core.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.node.d.ts","sourceRoot":"","sources":["../src/core.node.ts"],"names":[],"mappings":"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"}