From fe89360ac5f9b73d5fab955f5240604ad1cf8a19 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Tue, 20 Jan 2026 21:26:09 -0800 Subject: [PATCH] Revert "Fix children not rendering when render() called from different module" This reverts commit 9b8d789da03ac1af61ee2151333d046a234e11ac. --- src/index.tsx | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index e47c885..a14ef6b 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -147,10 +147,8 @@ function makeStyle(def: TagDef) { return style } -const ROOT_PROPS_KEY = '_forgeRootProps' - // turns a TagDef into a JSX component -function makeComponent(baseName: string, rootDef: TagDef, partName?: string) { +function makeComponent(baseName: string, rootDef: TagDef, rootProps: Record, partName?: string) { const def = partName ? rootDef.parts?.[partName]! : rootDef const base = def.base ?? 'div' @@ -169,7 +167,7 @@ function makeComponent(baseName: string, rootDef: TagDef, partName?: string) { } } - return ({ [ROOT_PROPS_KEY]: rootProps = {}, children, ...props }: { [ROOT_PROPS_KEY]?: Record, children: any, [key: string]: any }) => { + return ({ children, ...props }: { children: any, [key: string]: any }) => { const classNames = [makeClassName(baseName, partName)] const allProps = { ...rootProps, ...props } @@ -288,28 +286,14 @@ export function define(nameOrDef: string | TagDef, defIfNamed?: TagDef) { if (styles[name]) throw `${name} is already defined! Must use unique names.` registerStyles(name, def) - // ensure component function identity doesn't change between renders - const components: Record any> = {} - - for (const [partName] of Object.entries(def.parts ?? {})) - components[partName] = makeComponent(name, def, partName) - - const RootComponent = makeComponent(name, def) - return (props: Record) => { - if (def.render) { - // For custom render, create parts object that injects _forgeRootProps - const parts: Record any> = {} + const parts: Record = {} - for (const [partName, Comp] of Object.entries(components)) - parts[partName] = (partProps: any) => + for (const [part] of Object.entries(def.parts ?? {})) + parts[part] = makeComponent(name, def, props, part) - parts.Root = (partProps: any) => - return def.render({ props, parts }) - } - - // Default render - return {props.children} + parts.Root = makeComponent(name, def, props) + return def.render?.({ props, parts }) ?? {props.children} } }