@jfdevelops/react-layout 2.0.0 → 2.2.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.
Files changed (97) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +14 -5
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +8 -6
  4. package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -1
  5. package/dist/create-config/create-defined-resource-layout.d.mts +8 -6
  6. package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
  7. package/dist/create-config/create-defined-resource-layout.mjs +14 -5
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +69 -21
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +9 -8
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +9 -8
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +72 -24
  16. package/dist/create-config/define-layout.mjs.map +1 -1
  17. package/dist/create-config/for-resources/create-component.d.cts +30 -24
  18. package/dist/create-config/for-resources/create-component.d.cts.map +1 -1
  19. package/dist/create-config/for-resources/create-component.d.mts +30 -24
  20. package/dist/create-config/for-resources/create-component.d.mts.map +1 -1
  21. package/dist/create-config/for-resources/create-for-resources.cjs +27 -6
  22. package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
  23. package/dist/create-config/for-resources/create-for-resources.mjs +27 -6
  24. package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
  25. package/dist/create-config/for-resources/scoped-layout.d.cts +2 -2
  26. package/dist/create-config/for-resources/scoped-layout.d.cts.map +1 -1
  27. package/dist/create-config/for-resources/scoped-layout.d.mts +2 -2
  28. package/dist/create-config/for-resources/scoped-layout.d.mts.map +1 -1
  29. package/dist/create-config/for-resources/scoped-render.cjs +38 -4
  30. package/dist/create-config/for-resources/scoped-render.cjs.map +1 -1
  31. package/dist/create-config/for-resources/scoped-render.d.cts +8 -1
  32. package/dist/create-config/for-resources/scoped-render.d.cts.map +1 -1
  33. package/dist/create-config/for-resources/scoped-render.d.mts +8 -1
  34. package/dist/create-config/for-resources/scoped-render.d.mts.map +1 -1
  35. package/dist/create-config/for-resources/scoped-render.mjs +38 -4
  36. package/dist/create-config/for-resources/scoped-render.mjs.map +1 -1
  37. package/dist/create-config/index.d.cts +1 -1
  38. package/dist/create-config/index.d.mts +1 -1
  39. package/dist/create-config/inspection.cjs +23 -1
  40. package/dist/create-config/inspection.cjs.map +1 -1
  41. package/dist/create-config/inspection.mjs +24 -3
  42. package/dist/create-config/inspection.mjs.map +1 -1
  43. package/dist/create-config/lazy-resource-layout.cjs +4 -4
  44. package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
  45. package/dist/create-config/lazy-resource-layout.d.cts +1 -1
  46. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
  47. package/dist/create-config/lazy-resource-layout.d.mts +1 -1
  48. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
  49. package/dist/create-config/lazy-resource-layout.mjs +4 -4
  50. package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
  51. package/dist/create-config/render-state-context.cjs +24 -0
  52. package/dist/create-config/render-state-context.cjs.map +1 -0
  53. package/dist/create-config/render-state-context.mjs +22 -0
  54. package/dist/create-config/render-state-context.mjs.map +1 -0
  55. package/dist/create-config/render-state.cjs +1 -0
  56. package/dist/create-config/render-state.cjs.map +1 -1
  57. package/dist/create-config/render-state.d.cts +26 -15
  58. package/dist/create-config/render-state.d.cts.map +1 -1
  59. package/dist/create-config/render-state.d.mts +26 -15
  60. package/dist/create-config/render-state.d.mts.map +1 -1
  61. package/dist/create-config/render-state.mjs +1 -0
  62. package/dist/create-config/render-state.mjs.map +1 -1
  63. package/dist/create-config/state-composable.cjs +4 -2
  64. package/dist/create-config/state-composable.cjs.map +1 -1
  65. package/dist/create-config/state-composable.d.cts.map +1 -1
  66. package/dist/create-config/state-composable.d.mts.map +1 -1
  67. package/dist/create-config/state-composable.mjs +4 -2
  68. package/dist/create-config/state-composable.mjs.map +1 -1
  69. package/dist/index.d.cts +3 -2
  70. package/dist/index.d.mts +3 -2
  71. package/dist/lazy/create-lazy-loader.cjs +30 -9
  72. package/dist/lazy/create-lazy-loader.cjs.map +1 -1
  73. package/dist/lazy/create-lazy-loader.mjs +31 -10
  74. package/dist/lazy/create-lazy-loader.mjs.map +1 -1
  75. package/dist/lazy/create-render-state.cjs +59 -0
  76. package/dist/lazy/create-render-state.cjs.map +1 -0
  77. package/dist/lazy/create-render-state.d.cts +33 -0
  78. package/dist/lazy/create-render-state.d.cts.map +1 -0
  79. package/dist/lazy/create-render-state.d.mts +33 -0
  80. package/dist/lazy/create-render-state.d.mts.map +1 -0
  81. package/dist/lazy/create-render-state.mjs +59 -0
  82. package/dist/lazy/create-render-state.mjs.map +1 -0
  83. package/dist/lazy/lazy-boundary.cjs +14 -6
  84. package/dist/lazy/lazy-boundary.cjs.map +1 -1
  85. package/dist/lazy/lazy-boundary.mjs +14 -6
  86. package/dist/lazy/lazy-boundary.mjs.map +1 -1
  87. package/dist/lazy/types.cjs.map +1 -1
  88. package/dist/lazy/types.d.cts +7 -6
  89. package/dist/lazy/types.d.cts.map +1 -1
  90. package/dist/lazy/types.d.mts +7 -6
  91. package/dist/lazy/types.d.mts.map +1 -1
  92. package/dist/lazy/types.mjs.map +1 -1
  93. package/package.json +4 -4
  94. package/dist/lazy/create-error-component.cjs +0 -17
  95. package/dist/lazy/create-error-component.cjs.map +0 -1
  96. package/dist/lazy/create-error-component.mjs +0 -16
  97. package/dist/lazy/create-error-component.mjs.map +0 -1
@@ -4,7 +4,7 @@ const require_merge_layout_props = require('./merge-layout-props.cjs');
4
4
  const require_inspection = require('../lazy/inspection.cjs');
5
5
  const require_render_state = require('./render-state.cjs');
6
6
  const require_define_layout = require('./define-layout.cjs');
7
- const require_create_error_component = require('../lazy/create-error-component.cjs');
7
+ const require_create_render_state = require('../lazy/create-render-state.cjs');
8
8
  const require_lazy_resource_layout = require('./lazy-resource-layout.cjs');
9
9
  let _jfdevelops_react_layout_devtools_core = require("@jfdevelops/react-layout-devtools-core");
10
10
 
@@ -45,8 +45,9 @@ function createDefinedResourceLayout(configuration) {
45
45
  let lazyDefaultsDefined = false;
46
46
  let lazyLayoutCreated = false;
47
47
  function defineLazyDefaults(defaults) {
48
- if (lazyDefaultsDefined) throw new require_layout_configuration_error.LayoutConfigurationError("Lazy resource defaults can only be defined once.");
49
- if (lazyLayoutCreated) throw new require_layout_configuration_error.LayoutConfigurationError("Lazy resource defaults must be defined before creating a lazy resource layout.");
48
+ const replacingInDevelopment = lazyDefaultsDefined && process.env.NODE_ENV !== "production";
49
+ if (lazyDefaultsDefined && !replacingInDevelopment) throw new require_layout_configuration_error.LayoutConfigurationError("Lazy resource defaults can only be defined once.");
50
+ if (lazyLayoutCreated && !replacingInDevelopment) throw new require_layout_configuration_error.LayoutConfigurationError("Lazy resource defaults must be defined before creating a lazy resource layout.");
50
51
  lazyDefaults = defaults;
51
52
  lazyDefaultsDefined = true;
52
53
  }
@@ -54,7 +55,15 @@ function createDefinedResourceLayout(configuration) {
54
55
  value: void 0,
55
56
  enumerable: false
56
57
  });
57
- defineLazyDefaults.createErrorComponent = require_create_error_component.createLazyErrorComponent;
58
+ defineLazyDefaults.createRenderState = require_create_render_state.createLazyRenderStateBuilder({
59
+ resources,
60
+ options,
61
+ composables
62
+ });
63
+ defineLazyDefaults.createErrorComponent = ((render) => defineLazyDefaults.createRenderState({
64
+ state: "Error",
65
+ render
66
+ }));
58
67
  const boundDefineResourceLayout = ((layout) => {
59
68
  const localComposables = layout.composables;
60
69
  const definition = defineBoundLayout({
@@ -94,7 +103,7 @@ function createDefinedResourceLayout(configuration) {
94
103
  }
95
104
  return module;
96
105
  }
97
- }, lazyDefaults, lazyInspection.hooks);
106
+ }, () => lazyDefaults, lazyInspection.hooks);
98
107
  };
99
108
  return inspection.attach({
100
109
  createRenderState: require_render_state.createRenderStateBuilder({
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","createLazyErrorComponent","lazyDefaultsSymbol","layoutDebug","mergeLayoutProps","inspectLazy","createLazyResourceLayout","layoutInspection","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { inspectLazy } from '../lazy/inspection';\nimport type { ResourcePath } from '../resource';\nimport { createLazyErrorComponent } from '../lazy/create-error-component';\nimport { lazyDefaultsSymbol, type CreateLazyErrorComponent } from '../lazy/types';\nimport type { LazyResourceError } from '../errors/lazy-resource-error';\nimport {\n getLayoutDebug,\n layoutDebug,\n createInspectionStore,\n layoutInspection,\n getInspectionSource,\n} from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: {\n include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;\n custom?: SharedCustom;\n };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<\n Definition extends { layout: unknown; namespace?: boolean }\n> = Definition['layout'] &\n Pick<Definition, 'namespace'> &\n (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<\n LayoutResourceKey<Resources>,\n ('default' | keyof Render) & string\n >\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Render,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>\n ) => LocalComposables;\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n Render,\n Namespace,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Naming\n >;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>, 'default'>\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => LocalComposables;\n }\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults<Resource = string> = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates<Resource>): void;\n readonly errors: LazyResourceError;\n createErrorComponent: CreateLazyErrorComponent<Resource>;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<\n Resources,\n Options,\n Composables,\n SharedInclude,\n SharedCustom\n >;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>>;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * A configuration that may omit its name cannot guarantee a naming default.\n */\ntype DefinedFactoryNaming<Naming> = undefined extends Naming ? undefined : Naming;\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends object = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = LayoutNameInput<LayoutResourceKey<Resources>> | undefined\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >\n): CreateDefinedResourceLayoutResult<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates<ResourcePath<Resources>> = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(\n defaults: LazyResourceStates<ResourcePath<Resources>>\n ): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.'\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.'\n );\n }\n\n lazyDefaults = defaults;\n\n lazyDefaultsDefined = true;\n }\n\n Object.defineProperty(defineLazyDefaults, 'errors', {\n value: undefined,\n enumerable: false,\n });\n defineLazyDefaults.createErrorComponent = createLazyErrorComponent as CreateLazyErrorComponent<ResourcePath<Resources>>;\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as\n | LayoutComposablesDefinition<Resources, ComposableComponents>\n | undefined;\n const definition = defineBoundLayout({\n [lazyDefaultsSymbol]: () => lazyDefaults,\n [layoutDebug]: getLayoutDebug(layout) ?? getLayoutDebug(configuration),\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(\n configuration.props,\n layout.props as { include?: object; custom?: object }\n ),\n composables:\n composables || localComposables\n ? (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n\n inspection.connect(definition);\n\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n\n const label = (lazyOptions as unknown as { resource: string }).resource;\n const lazyInspection = inspectLazy(label, inspection);\n const id = lazyInspection.id;\n\n return createLazyResourceLayout(\n {\n ...lazyOptions,\n load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n\n for (const entry of Object.values(module)) {\n const component =\n entry && typeof entry === 'object' && 'Root' in entry\n ? entry.Root\n : entry;\n\n if (\n ((typeof component === 'object' && component !== null) ||\n typeof component === 'function') &&\n layoutInspection in component\n ) {\n inspection.connect(component);\n\n const target = getInspectionSource(component)\n .getSnapshot()\n .nodes.find(\n (n) =>\n n.kind === 'layout' &&\n n.label ===\n (component as { displayName?: string }).displayName\n );\n\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n\n return module as Module;\n },\n },\n lazyDefaults,\n lazyInspection.hooks\n );\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder(\n {\n props: configuration.props,\n composables,\n options,\n resources,\n },\n {\n store: inspection,\n defaults: () => lazyDefaults as LazyResourceStates,\n onLazy: () => {\n lazyLayoutCreated = true;\n },\n }\n ),\n defineLazyDefaults: defineLazyDefaults as DefineLazyDefaults<\n ResourcePath<Resources>\n >,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmVA,SAAgB,4BAWd,eAiBA;CACA,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,+EAAmC;CACzC,IAAI,eAA4D,CAAC;CACjE,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBACP,UACM;EACN,IAAI,qBACF,MAAM,IAAIC,4DACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAIA,4DACR,gFACF;EAGF,eAAe;EAEf,sBAAsB;CACxB;CAEA,OAAO,eAAe,oBAAoB,UAAU;EAClD,OAAO;EACP,YAAY;CACd,CAAC;CACD,mBAAmB,uBAAuBC;CAE1C,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAGhC,MAAM,aAAa,kBAAkB;IAClCC,yCAA2B;IAC3BC,gHAA6B,MAAM,gEAAoB,aAAa;GACrE;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAOC,4CACL,cAAc,OACd,OAAO,KACT;IACA,aACE,eAAe,oBAET,QACA,YACI;KACJ,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACR;EACF,CAAU;EAEV,WAAW,QAAQ,UAAU;EAE7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EAEpB,MAAM,QAAS,YAAgD;EAC/D,MAAM,iBAAiBC,+BAAY,OAAO,UAAU;EACpD,MAAM,KAAK,eAAe;EAE1B,OAAOC,sDACL;GACE,GAAG;GACH,MAAM,YAAY;IAChB,MAAM,SAAkC,MAAM,YAAY,KAAK;IAE/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YACJ,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAAM,OACN;KAEN,KACI,OAAO,cAAc,YAAY,cAAc,QAC/C,OAAO,cAAc,eACvBC,2DAAoB,WACpB;MACA,WAAW,QAAQ,SAAS;MAE5B,MAAM,yEAA6B,SAAS,EACzC,YAAY,EACZ,MAAM,MACJ,MACC,EAAE,SAAS,YACX,EAAE,UACC,UAAuC,WAC9C;MAEF,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IAEA,OAAO;GACT;EACF,GACA,cACA,eAAe,KACjB;CACF;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmBC,8CACjB;GACE,OAAO,cAAc;GACrB;GACA;GACA;EACF,GACA;GACE,OAAO;GACP,gBAAgB;GAChB,cAAc;IACZ,oBAAoB;GACtB;EACF,CACF;EACoB;EAGpB,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD,CAAC;AACH"}
1
+ {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","createLazyRenderStateBuilder","lazyDefaultsSymbol","layoutDebug","mergeLayoutProps","inspectLazy","createLazyResourceLayout","layoutInspection","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { inspectLazy } from '../lazy/inspection';\nimport type { ResourcePath } from '../resource';\nimport { createLazyRenderStateBuilder, type CreateLazyRenderState, type CreateBoundLazyErrorComponent } from '../lazy/create-render-state';\nimport { lazyDefaultsSymbol } from '../lazy/types';\nimport type { LazyResourceError } from '../errors/lazy-resource-error';\nimport {\n getLayoutDebug,\n layoutDebug,\n createInspectionStore,\n layoutInspection,\n getInspectionSource,\n} from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateContext,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: {\n include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;\n custom?: SharedCustom;\n };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<\n Definition extends { layout: unknown; namespace?: boolean }\n> = Definition['layout'] &\n Pick<Definition, 'namespace'> &\n (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<\n LayoutResourceKey<Resources>,\n ('default' | keyof Render) & string\n >\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Render,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>\n ) => LocalComposables;\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n Render,\n Namespace,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Naming\n >;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>, 'default'>\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => LocalComposables;\n }\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults<\n Resource = string,\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n> = {\n /**\n * Sets defaults before the first lazy layout. Development reloads may replace them.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates<Resource>): void;\n readonly errors: LazyResourceError;\n createRenderState: CreateLazyRenderState<Resources, Options, Composables>;\n /** @deprecated Use createRenderState({ state: 'Error', render }) instead. */\n createErrorComponent: CreateBoundLazyErrorComponent<Resource, RenderStateContext<Composables, Resources, 'Error'>>;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<\n Resources,\n Options,\n Composables,\n SharedInclude,\n SharedCustom\n >;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>, Resources, Options, Composables>;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * A configuration that may omit its name cannot guarantee a naming default.\n */\ntype DefinedFactoryNaming<Naming> = undefined extends Naming ? undefined : Naming;\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends object = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = LayoutNameInput<LayoutResourceKey<Resources>> | undefined\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >\n): CreateDefinedResourceLayoutResult<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates<ResourcePath<Resources>> = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(\n defaults: LazyResourceStates<ResourcePath<Resources>>\n ): void {\n const replacingInDevelopment = lazyDefaultsDefined && process.env.NODE_ENV !== 'production';\n if (lazyDefaultsDefined && !replacingInDevelopment) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.'\n );\n }\n\n if (lazyLayoutCreated && !replacingInDevelopment) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.'\n );\n }\n\n lazyDefaults = defaults;\n\n lazyDefaultsDefined = true;\n }\n\n Object.defineProperty(defineLazyDefaults, 'errors', {\n value: undefined,\n enumerable: false,\n });\n defineLazyDefaults.createRenderState = createLazyRenderStateBuilder({ resources, options, composables });\n defineLazyDefaults.createErrorComponent = ((render: any) =>\n defineLazyDefaults.createRenderState({ state: 'Error', render })\n ) as CreateBoundLazyErrorComponent<ResourcePath<Resources>, RenderStateContext<Composables, Resources, 'Error'>>;\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as\n | LayoutComposablesDefinition<Resources, ComposableComponents>\n | undefined;\n const definition = defineBoundLayout({\n [lazyDefaultsSymbol]: () => lazyDefaults,\n [layoutDebug]: getLayoutDebug(layout) ?? getLayoutDebug(configuration),\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(\n configuration.props,\n layout.props as { include?: object; custom?: object }\n ),\n composables:\n composables || localComposables\n ? (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n\n inspection.connect(definition);\n\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n\n const label = (lazyOptions as unknown as { resource: string }).resource;\n const lazyInspection = inspectLazy(label, inspection);\n const id = lazyInspection.id;\n\n return createLazyResourceLayout(\n {\n ...lazyOptions,\n load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n\n for (const entry of Object.values(module)) {\n const component =\n entry && typeof entry === 'object' && 'Root' in entry\n ? entry.Root\n : entry;\n\n if (\n ((typeof component === 'object' && component !== null) ||\n typeof component === 'function') &&\n layoutInspection in component\n ) {\n inspection.connect(component);\n\n const target = getInspectionSource(component)\n .getSnapshot()\n .nodes.find(\n (n) =>\n n.kind === 'layout' &&\n n.label ===\n (component as { displayName?: string }).displayName\n );\n\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n\n return module as Module;\n },\n },\n () => lazyDefaults,\n lazyInspection.hooks\n );\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder(\n {\n props: configuration.props,\n composables,\n options,\n resources,\n },\n {\n store: inspection,\n defaults: () => lazyDefaults as LazyResourceStates,\n onLazy: () => {\n lazyLayoutCreated = true;\n },\n }\n ),\n defineLazyDefaults: defineLazyDefaults as DefineLazyDefaults<\n ResourcePath<Resources>, Resources, Options, Composables\n >,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2VA,SAAgB,4BAWd,eAiBA;CACA,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,+EAAmC;CACzC,IAAI,eAA4D,CAAC;CACjE,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBACP,UACM;EACN,MAAM,yBAAyB,uBAAuB,QAAQ,IAAI,aAAa;EAC/E,IAAI,uBAAuB,CAAC,wBAC1B,MAAM,IAAIC,4DACR,kDACF;EAGF,IAAI,qBAAqB,CAAC,wBACxB,MAAM,IAAIA,4DACR,gFACF;EAGF,eAAe;EAEf,sBAAsB;CACxB;CAEA,OAAO,eAAe,oBAAoB,UAAU;EAClD,OAAO;EACP,YAAY;CACd,CAAC;CACD,mBAAmB,oBAAoBC,yDAA6B;EAAE;EAAW;EAAS;CAAY,CAAC;CACvG,mBAAmB,yBAAyB,WAC1C,mBAAmB,kBAAkB;EAAE,OAAO;EAAS;CAAO,CAAC;CAGjE,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAGhC,MAAM,aAAa,kBAAkB;IAClCC,yCAA2B;IAC3BC,gHAA6B,MAAM,gEAAoB,aAAa;GACrE;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAOC,4CACL,cAAc,OACd,OAAO,KACT;IACA,aACE,eAAe,oBAET,QACA,YACI;KACJ,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACR;EACF,CAAU;EAEV,WAAW,QAAQ,UAAU;EAE7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EAEpB,MAAM,QAAS,YAAgD;EAC/D,MAAM,iBAAiBC,+BAAY,OAAO,UAAU;EACpD,MAAM,KAAK,eAAe;EAE1B,OAAOC,sDACL;GACE,GAAG;GACH,MAAM,YAAY;IAChB,MAAM,SAAkC,MAAM,YAAY,KAAK;IAE/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YACJ,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAAM,OACN;KAEN,KACI,OAAO,cAAc,YAAY,cAAc,QAC/C,OAAO,cAAc,eACvBC,2DAAoB,WACpB;MACA,WAAW,QAAQ,SAAS;MAE5B,MAAM,yEAA6B,SAAS,EACzC,YAAY,EACZ,MAAM,MACJ,MACC,EAAE,SAAS,YACX,EAAE,UACC,UAAuC,WAC9C;MAEF,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IAEA,OAAO;GACT;EACF,SACM,cACN,eAAe,KACjB;CACF;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmBC,8CACjB;GACE,OAAO,cAAc;GACrB;GACA;GACA;EACF,GACA;GACE,OAAO;GACP,gBAAgB;GAChB,cAAc;IACZ,oBAAoB;GACtB;EACF,CACF;EACoB;EAGpB,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD,CAAC;AACH"}
@@ -1,10 +1,11 @@
1
1
  import { LazyResourceError } from "../errors/lazy-resource-error.cjs";
2
- import { CreateLazyErrorComponent, LazyResourceStates } from "../lazy/types.cjs";
2
+ import { LazyResourceStates } from "../lazy/types.cjs";
3
3
  import { LayoutResourceKey, ResourceDefinition, ResourcePath } from "../resource.cjs";
4
4
  import { InPropsDefinition, InPropsObject } from "../props.cjs";
5
- import { CreateRenderState, LayoutComposablesDefinition, RenderStateReferences } from "./render-state.cjs";
5
+ import { CreateRenderState, LayoutComposablesDefinition, RenderStateContext, RenderStateReferences } from "./render-state.cjs";
6
6
  import { LayoutNameInput } from "./layout-name.cjs";
7
7
  import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor, MergeContract } from "./define-layout.cjs";
8
+ import { CreateBoundLazyErrorComponent, CreateLazyRenderState } from "../lazy/create-render-state.cjs";
8
9
  import { LazyResourceLayoutOptions, createLazyResourceLayout } from "./lazy-resource-layout.cjs";
9
10
  import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
10
11
 
@@ -74,20 +75,21 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
74
75
  lazy<Module extends Record<string, unknown>>(options: LazyResourceLayoutOptions<Resources, Module>): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;
75
76
  };
76
77
  /** Registers loading and module-error components used by lazy layouts. */
77
- type DefineLazyDefaults<Resource = string> = {
78
+ type DefineLazyDefaults<Resource = string, Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}> = {
78
79
  /**
79
- * Sets defaults once, before the factory creates its first lazy layout.
80
+ * Sets defaults before the first lazy layout. Development reloads may replace them.
80
81
  *
81
82
  * @param defaults - Shared components for pending module loads and failures.
82
83
  */
83
84
  (defaults: LazyResourceStates<Resource>): void;
84
85
  readonly errors: LazyResourceError;
85
- createErrorComponent: CreateLazyErrorComponent<Resource>;
86
+ createRenderState: CreateLazyRenderState<Resources, Options, Composables>; /** @deprecated Use createRenderState({ state: 'Error', render }) instead. */
87
+ createErrorComponent: CreateBoundLazyErrorComponent<Resource, RenderStateContext<Composables, Resources, 'Error'>>;
86
88
  };
87
89
  /** Reusable helpers produced by {@link createDefinedResourceLayout}. */
88
90
  type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
89
91
  /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>; /** Sets the shared loading and module-error UI used by lazy layouts. */
90
- defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>>; /** Defines a layout using the resources, options, and composables already bound. */
92
+ defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>, Resources, Options, Composables>; /** Defines a layout using the resources, options, and composables already bound. */
91
93
  defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>; /** Reads, selects, or validates the resources bound to this factory. */
92
94
  resources: LayoutResourcesAccessor<Resources>;
93
95
  };
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.d.cts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
1
+ {"version":3,"file":"create-defined-resource-layout.d.cts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { LazyResourceError } from "../errors/lazy-resource-error.mjs";
2
- import { CreateLazyErrorComponent, LazyResourceStates } from "../lazy/types.mjs";
2
+ import { LazyResourceStates } from "../lazy/types.mjs";
3
3
  import { LayoutResourceKey, ResourceDefinition, ResourcePath } from "../resource.mjs";
4
4
  import { InPropsDefinition, InPropsObject } from "../props.mjs";
5
- import { CreateRenderState, LayoutComposablesDefinition, RenderStateReferences } from "./render-state.mjs";
5
+ import { CreateRenderState, LayoutComposablesDefinition, RenderStateContext, RenderStateReferences } from "./render-state.mjs";
6
6
  import { LayoutNameInput } from "./layout-name.mjs";
7
7
  import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor, MergeContract } from "./define-layout.mjs";
8
+ import { CreateBoundLazyErrorComponent, CreateLazyRenderState } from "../lazy/create-render-state.mjs";
8
9
  import { LazyResourceLayoutOptions, createLazyResourceLayout } from "./lazy-resource-layout.mjs";
9
10
  import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
10
11
 
@@ -74,20 +75,21 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
74
75
  lazy<Module extends Record<string, unknown>>(options: LazyResourceLayoutOptions<Resources, Module>): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;
75
76
  };
76
77
  /** Registers loading and module-error components used by lazy layouts. */
77
- type DefineLazyDefaults<Resource = string> = {
78
+ type DefineLazyDefaults<Resource = string, Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}> = {
78
79
  /**
79
- * Sets defaults once, before the factory creates its first lazy layout.
80
+ * Sets defaults before the first lazy layout. Development reloads may replace them.
80
81
  *
81
82
  * @param defaults - Shared components for pending module loads and failures.
82
83
  */
83
84
  (defaults: LazyResourceStates<Resource>): void;
84
85
  readonly errors: LazyResourceError;
85
- createErrorComponent: CreateLazyErrorComponent<Resource>;
86
+ createRenderState: CreateLazyRenderState<Resources, Options, Composables>; /** @deprecated Use createRenderState({ state: 'Error', render }) instead. */
87
+ createErrorComponent: CreateBoundLazyErrorComponent<Resource, RenderStateContext<Composables, Resources, 'Error'>>;
86
88
  };
87
89
  /** Reusable helpers produced by {@link createDefinedResourceLayout}. */
88
90
  type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
89
91
  /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>; /** Sets the shared loading and module-error UI used by lazy layouts. */
90
- defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>>; /** Defines a layout using the resources, options, and composables already bound. */
92
+ defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>, Resources, Options, Composables>; /** Defines a layout using the resources, options, and composables already bound. */
91
93
  defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>; /** Reads, selects, or validates the resources bound to this factory. */
92
94
  resources: LayoutResourcesAccessor<Resources>;
93
95
  };
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.d.mts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
1
+ {"version":3,"file":"create-defined-resource-layout.d.mts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":";;;;;;;;;;;;;KA8CY,iBAAA,aACV,kBAAA,KACG,kBAAkB;AAAA;AAAA,KAIX,kCAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA,kEAEE,kBAAA,CACpB,SAAA,EACA,OAAA,EACA,WAAA,6BAEmB,aAAA,6BAEjB,eAAA,CAAgB,iBAAA,CAAkB,SAAA;EAGtC,SAAA,GAAY,gBAAA,EAfgC;EAiB5C,IAAA,GAAO,aAAA,EAf2B;EAiBlC,KAAA;IACE,OAAA,GAAU,kBAAA,CAAmB,SAAA,EAAW,OAAA,EAAS,WAAA,IAAe,aAAA;IAChE,MAAA,GAAS,YAAA;EAAA,GAbT;EAgBF,SAAA,EAAW,SAAA,EAdU;EAgBrB,OAAA,GAAU,OAAA,EAdU;EAgBpB,WAAA,GAAc,2BAAA,CAA4B,SAAA,EAAW,WAAA;AAAA;;KAI3C,0BAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA,uBACC,kBAAA,CAAmB,SAAA,EAAW,OAAA,EAAS,WAAA,uBACxC,aAAA,+CAGlB,IAAA,CACF,kCAAA,CACE,SAAA,EACA,OAAA,EACA,WAAA,EACA,YAAA,EACA,WAAA;EAGE,MAAA,EAAQ,MAAA;EAAQ,SAAA,GAAY,SAAA;AAAA;AAAA,KAE7B,sBAAA,gBACY,oBAAA,gBACD,oBAAA,IACZ,IAAA,CAAK,MAAA,QAAc,KAAA,IAAS,KAAA;;KAG3B,gBAAA;EACkB,MAAA;EAAiB,SAAA;AAAA,KACpC,UAAA,aACF,IAAA,CAAK,UAAA,kBACJ,UAAA;EAAqB,IAAA;AAAA;EAAwB,IAAA,GAAO,IAAA;AAAA;;KAG3C,yBAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA,kEAEE,kBAAA,CACpB,SAAA,EACA,OAAA,EACA,WAAA,6BAEmB,aAAA,6BAEjB,eAAA,CAAgB,iBAAA,CAAkB,SAAA;EA1EtB;;;;;;;EAAA;IAqFS,OAAA;EAAA,IAAqB,MAAA,4CACnB,oBAAA,mCACG,gBAAA,6BACD,kBAAA,CACzB,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,6BAElB,aAAA,4BAEhB,eAAA,CACE,iBAAA,CAAkB,SAAA,sBACC,MAAA,0BAET,aAAA,EAEhB,MAAA,EAAQ,IAAA,CACN,gBAAA,CACE,gCAAA,CACE,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,GACpC,aAAA,CAAc,aAAA,EAAe,YAAA,GAC7B,aAAA,CAAc,YAAA,EAAc,WAAA,GAC5B,MAAA,EACA,SAAA;IAKJ,IAAA,GAAO,MAAA;IACP,KAAA;MACE,OAAA,GAAU,kBAAA,CACR,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,KAClC,YAAA;MACJ,MAAA,GAAS,WAAA;IAAA;IAEX,WAAA,IACE,MAAA,EAAQ,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,IACjD,MAAA,EAAQ,qBAAA,CAAsB,SAAA,EAAW,OAAA,EAAS,WAAA,EAAa,MAAA,MAC5D,gBAAA;EAAA,IAEN,+BAAA,CACD,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,GACpC,MAAA,EACA,SAAA,EACA,aAAA,CAAc,aAAA,EAAe,YAAA,GAC7B,aAAA,CAAc,YAAA,EAAc,WAAA,GAC5B,MAAA,GA5HU;EAAA,4BAgIiB,kBAAA,CACzB,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,6BAElB,aAAA,gCACK,oBAAA,mCACG,gBAAA,uBAExB,eAAA,CAAgB,iBAAA,CAAkB,SAAA,4BACtB,aAAA,EAEhB,MAAA,EAAQ,IAAA,CACN,gBAAA,CACE,kCAAA,CACE,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,GACpC,aAAA,CAAc,aAAA,EAAe,YAAA,GAC7B,aAAA,CAAc,YAAA,EAAc,WAAA,GAC5B,SAAA;IAKJ,IAAA,GAAO,MAAA;IACP,KAAA;MACE,OAAA,GAAU,kBAAA,CACR,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,KAClC,YAAA;MACJ,MAAA,GAAS,WAAA;IAAA;IAEX,WAAA,IACE,MAAA,EAAQ,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,IACjD,MAAA,SACG,gBAAA;EAAA,IAEN,qBAAA,CACD,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,GACpC,aAAA,CAAc,aAAA,EAAe,YAAA,GAC7B,aAAA,CAAc,YAAA,EAAc,WAAA,OAE5B,SAAA,EACA,MAAA;EA1KgE;;;;;;EAkLlE,IAAA,gBAAoB,MAAA,mBAClB,OAAA,EAAS,yBAAA,CAA0B,SAAA,EAAW,MAAA,IAC7C,UAAA,QAAkB,wBAAA,CAAyB,SAAA,EAAW,MAAA;AAAA;;KAI/C,kBAAA,sCAEQ,aAAA,CAAc,kBAAA,IAAsB,aAAA,CAAc,kBAAA,mBACpD,iBAAA,CAAkB,SAAA,4BACd,oBAAA;EApLiC;;AAAW;AAIlE;;EAJuD,CA2LpD,QAAA,EAAU,kBAAA,CAAmB,QAAA;EAAA,SACrB,MAAA,EAAQ,iBAAA;EACjB,iBAAA,EAAmB,qBAAA,CAAsB,SAAA,EAAW,OAAA,EAAS,WAAA,GAvL7C;EAyLhB,oBAAA,EAAsB,6BAAA,CAA8B,QAAA,EAAU,kBAAA,CAAmB,WAAA,EAAa,SAAA;AAAA;;KAIpF,iCAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA,kEAEE,kBAAA,CACpB,SAAA,EACA,OAAA,EACA,WAAA,6BAEmB,aAAA,6BAEjB,eAAA,CAAgB,iBAAA,CAAkB,SAAA;EAvMjB,8EA2MrB,iBAAA,EAAmB,iBAAA,CACjB,SAAA,EACA,OAAA,EACA,WAAA,EACA,aAAA,EACA,YAAA,GA1MA;EA6MF,kBAAA,EAAoB,kBAAA,CAAmB,YAAA,CAAa,SAAA,GAAY,SAAA,EAAW,OAAA,EAAS,WAAA,GA3MlF;EA6MF,oBAAA,EAAsB,yBAAA,CACpB,SAAA,EACA,OAAA,EACA,WAAA,EACA,gBAAA,EACA,aAAA,EACA,YAAA,EACA,aAAA,GAlNA;EAqNF,SAAA,EAAW,uBAAA,CAAwB,SAAA;AAAA;;;;KAMhC,oBAAA,6BAAiD,MAAA,eAAqB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA8BjE,2BAAA,yBACU,iBAAA,wBACF,iBAAA,CAAkB,SAAA,4BACpB,oBAAA,qHAGO,aAAA,mCAEvB,eAAA,CAAgB,iBAAA,CAAkB,SAAA,iBACtB,eAAA,CAAgB,iBAAA,CAAkB,SAAA,gBAElD,aAAA,EAAe,kCAAA,CACb,SAAA,EACA,OAAA,EACA,WAAA,EACA,gBAAA,EACA,aAAA,EACA,YAAA,EACA,aAAA,IAED,iCAAA,CACD,SAAA,EACA,OAAA,EACA,WAAA,EACA,gBAAA,EACA,aAAA,EACA,YAAA,EACA,oBAAA,CAAqB,aAAA"}
@@ -4,7 +4,7 @@ import { mergeLayoutProps } from "./merge-layout-props.mjs";
4
4
  import { inspectLazy } from "../lazy/inspection.mjs";
5
5
  import { createRenderStateBuilder } from "./render-state.mjs";
6
6
  import { createLayoutResourcesAccessor, defineResourceLayout } from "./define-layout.mjs";
7
- import { createLazyErrorComponent } from "../lazy/create-error-component.mjs";
7
+ import { createLazyRenderStateBuilder } from "../lazy/create-render-state.mjs";
8
8
  import { createLazyResourceLayout } from "./lazy-resource-layout.mjs";
9
9
  import { createInspectionStore, getInspectionSource, getLayoutDebug, layoutDebug, layoutInspection } from "@jfdevelops/react-layout-devtools-core";
10
10
 
@@ -45,8 +45,9 @@ function createDefinedResourceLayout(configuration) {
45
45
  let lazyDefaultsDefined = false;
46
46
  let lazyLayoutCreated = false;
47
47
  function defineLazyDefaults(defaults) {
48
- if (lazyDefaultsDefined) throw new LayoutConfigurationError("Lazy resource defaults can only be defined once.");
49
- if (lazyLayoutCreated) throw new LayoutConfigurationError("Lazy resource defaults must be defined before creating a lazy resource layout.");
48
+ const replacingInDevelopment = lazyDefaultsDefined && process.env.NODE_ENV !== "production";
49
+ if (lazyDefaultsDefined && !replacingInDevelopment) throw new LayoutConfigurationError("Lazy resource defaults can only be defined once.");
50
+ if (lazyLayoutCreated && !replacingInDevelopment) throw new LayoutConfigurationError("Lazy resource defaults must be defined before creating a lazy resource layout.");
50
51
  lazyDefaults = defaults;
51
52
  lazyDefaultsDefined = true;
52
53
  }
@@ -54,7 +55,15 @@ function createDefinedResourceLayout(configuration) {
54
55
  value: void 0,
55
56
  enumerable: false
56
57
  });
57
- defineLazyDefaults.createErrorComponent = createLazyErrorComponent;
58
+ defineLazyDefaults.createRenderState = createLazyRenderStateBuilder({
59
+ resources,
60
+ options,
61
+ composables
62
+ });
63
+ defineLazyDefaults.createErrorComponent = ((render) => defineLazyDefaults.createRenderState({
64
+ state: "Error",
65
+ render
66
+ }));
58
67
  const boundDefineResourceLayout = ((layout) => {
59
68
  const localComposables = layout.composables;
60
69
  const definition = defineBoundLayout({
@@ -94,7 +103,7 @@ function createDefinedResourceLayout(configuration) {
94
103
  }
95
104
  return module;
96
105
  }
97
- }, lazyDefaults, lazyInspection.hooks);
106
+ }, () => lazyDefaults, lazyInspection.hooks);
98
107
  };
99
108
  return inspection.attach({
100
109
  createRenderState: createRenderStateBuilder({
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { inspectLazy } from '../lazy/inspection';\nimport type { ResourcePath } from '../resource';\nimport { createLazyErrorComponent } from '../lazy/create-error-component';\nimport { lazyDefaultsSymbol, type CreateLazyErrorComponent } from '../lazy/types';\nimport type { LazyResourceError } from '../errors/lazy-resource-error';\nimport {\n getLayoutDebug,\n layoutDebug,\n createInspectionStore,\n layoutInspection,\n getInspectionSource,\n} from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: {\n include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;\n custom?: SharedCustom;\n };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<\n Definition extends { layout: unknown; namespace?: boolean }\n> = Definition['layout'] &\n Pick<Definition, 'namespace'> &\n (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<\n LayoutResourceKey<Resources>,\n ('default' | keyof Render) & string\n >\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Render,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>\n ) => LocalComposables;\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n Render,\n Namespace,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Naming\n >;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>, 'default'>\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => LocalComposables;\n }\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults<Resource = string> = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates<Resource>): void;\n readonly errors: LazyResourceError;\n createErrorComponent: CreateLazyErrorComponent<Resource>;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<\n Resources,\n Options,\n Composables,\n SharedInclude,\n SharedCustom\n >;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>>;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * A configuration that may omit its name cannot guarantee a naming default.\n */\ntype DefinedFactoryNaming<Naming> = undefined extends Naming ? undefined : Naming;\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends object = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = LayoutNameInput<LayoutResourceKey<Resources>> | undefined\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >\n): CreateDefinedResourceLayoutResult<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates<ResourcePath<Resources>> = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(\n defaults: LazyResourceStates<ResourcePath<Resources>>\n ): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.'\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.'\n );\n }\n\n lazyDefaults = defaults;\n\n lazyDefaultsDefined = true;\n }\n\n Object.defineProperty(defineLazyDefaults, 'errors', {\n value: undefined,\n enumerable: false,\n });\n defineLazyDefaults.createErrorComponent = createLazyErrorComponent as CreateLazyErrorComponent<ResourcePath<Resources>>;\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as\n | LayoutComposablesDefinition<Resources, ComposableComponents>\n | undefined;\n const definition = defineBoundLayout({\n [lazyDefaultsSymbol]: () => lazyDefaults,\n [layoutDebug]: getLayoutDebug(layout) ?? getLayoutDebug(configuration),\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(\n configuration.props,\n layout.props as { include?: object; custom?: object }\n ),\n composables:\n composables || localComposables\n ? (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n\n inspection.connect(definition);\n\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n\n const label = (lazyOptions as unknown as { resource: string }).resource;\n const lazyInspection = inspectLazy(label, inspection);\n const id = lazyInspection.id;\n\n return createLazyResourceLayout(\n {\n ...lazyOptions,\n load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n\n for (const entry of Object.values(module)) {\n const component =\n entry && typeof entry === 'object' && 'Root' in entry\n ? entry.Root\n : entry;\n\n if (\n ((typeof component === 'object' && component !== null) ||\n typeof component === 'function') &&\n layoutInspection in component\n ) {\n inspection.connect(component);\n\n const target = getInspectionSource(component)\n .getSnapshot()\n .nodes.find(\n (n) =>\n n.kind === 'layout' &&\n n.label ===\n (component as { displayName?: string }).displayName\n );\n\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n\n return module as Module;\n },\n },\n lazyDefaults,\n lazyInspection.hooks\n );\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder(\n {\n props: configuration.props,\n composables,\n options,\n resources,\n },\n {\n store: inspection,\n defaults: () => lazyDefaults as LazyResourceStates,\n onLazy: () => {\n lazyLayoutCreated = true;\n },\n }\n ),\n defineLazyDefaults: defineLazyDefaults as DefineLazyDefaults<\n ResourcePath<Resources>\n >,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmVA,SAAgB,4BAWd,eAiBA;CACA,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,aAAa,sBAAsB;CACzC,IAAI,eAA4D,CAAC;CACjE,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBACP,UACM;EACN,IAAI,qBACF,MAAM,IAAI,yBACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAI,yBACR,gFACF;EAGF,eAAe;EAEf,sBAAsB;CACxB;CAEA,OAAO,eAAe,oBAAoB,UAAU;EAClD,OAAO;EACP,YAAY;CACd,CAAC;CACD,mBAAmB,uBAAuB;CAE1C,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAGhC,MAAM,aAAa,kBAAkB;IAClC,2BAA2B;IAC3B,cAAc,eAAe,MAAM,KAAK,eAAe,aAAa;GACrE;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAO,iBACL,cAAc,OACd,OAAO,KACT;IACA,aACE,eAAe,oBAET,QACA,YACI;KACJ,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACR;EACF,CAAU;EAEV,WAAW,QAAQ,UAAU;EAE7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EAEpB,MAAM,QAAS,YAAgD;EAC/D,MAAM,iBAAiB,YAAY,OAAO,UAAU;EACpD,MAAM,KAAK,eAAe;EAE1B,OAAO,yBACL;GACE,GAAG;GACH,MAAM,YAAY;IAChB,MAAM,SAAkC,MAAM,YAAY,KAAK;IAE/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YACJ,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAAM,OACN;KAEN,KACI,OAAO,cAAc,YAAY,cAAc,QAC/C,OAAO,cAAc,eACvB,oBAAoB,WACpB;MACA,WAAW,QAAQ,SAAS;MAE5B,MAAM,SAAS,oBAAoB,SAAS,EACzC,YAAY,EACZ,MAAM,MACJ,MACC,EAAE,SAAS,YACX,EAAE,UACC,UAAuC,WAC9C;MAEF,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IAEA,OAAO;GACT;EACF,GACA,cACA,eAAe,KACjB;CACF;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmB,yBACjB;GACE,OAAO,cAAc;GACrB;GACA;GACA;EACF,GACA;GACE,OAAO;GACP,gBAAgB;GAChB,cAAc;IACZ,oBAAoB;GACtB;EACF,CACF;EACoB;EAGpB,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD,CAAC;AACH"}
1
+ {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { inspectLazy } from '../lazy/inspection';\nimport type { ResourcePath } from '../resource';\nimport { createLazyRenderStateBuilder, type CreateLazyRenderState, type CreateBoundLazyErrorComponent } from '../lazy/create-render-state';\nimport { lazyDefaultsSymbol } from '../lazy/types';\nimport type { LazyResourceError } from '../errors/lazy-resource-error';\nimport {\n getLayoutDebug,\n layoutDebug,\n createInspectionStore,\n layoutInspection,\n getInspectionSource,\n} from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateContext,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: {\n include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;\n custom?: SharedCustom;\n };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<\n Definition extends { layout: unknown; namespace?: boolean }\n> = Definition['layout'] &\n Pick<Definition, 'namespace'> &\n (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<\n LayoutResourceKey<Resources>,\n ('default' | keyof Render) & string\n >\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Render,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>\n ) => LocalComposables;\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n Render,\n Namespace,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Naming\n >;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>, 'default'>\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => LocalComposables;\n }\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults<\n Resource = string,\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n> = {\n /**\n * Sets defaults before the first lazy layout. Development reloads may replace them.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates<Resource>): void;\n readonly errors: LazyResourceError;\n createRenderState: CreateLazyRenderState<Resources, Options, Composables>;\n /** @deprecated Use createRenderState({ state: 'Error', render }) instead. */\n createErrorComponent: CreateBoundLazyErrorComponent<Resource, RenderStateContext<Composables, Resources, 'Error'>>;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<\n Resources,\n Options,\n Composables,\n SharedInclude,\n SharedCustom\n >;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults<ResourcePath<Resources>, Resources, Options, Composables>;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * A configuration that may omit its name cannot guarantee a naming default.\n */\ntype DefinedFactoryNaming<Naming> = undefined extends Naming ? undefined : Naming;\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends object = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = LayoutNameInput<LayoutResourceKey<Resources>> | undefined\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >\n): CreateDefinedResourceLayoutResult<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates<ResourcePath<Resources>> = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(\n defaults: LazyResourceStates<ResourcePath<Resources>>\n ): void {\n const replacingInDevelopment = lazyDefaultsDefined && process.env.NODE_ENV !== 'production';\n if (lazyDefaultsDefined && !replacingInDevelopment) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.'\n );\n }\n\n if (lazyLayoutCreated && !replacingInDevelopment) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.'\n );\n }\n\n lazyDefaults = defaults;\n\n lazyDefaultsDefined = true;\n }\n\n Object.defineProperty(defineLazyDefaults, 'errors', {\n value: undefined,\n enumerable: false,\n });\n defineLazyDefaults.createRenderState = createLazyRenderStateBuilder({ resources, options, composables });\n defineLazyDefaults.createErrorComponent = ((render: any) =>\n defineLazyDefaults.createRenderState({ state: 'Error', render })\n ) as CreateBoundLazyErrorComponent<ResourcePath<Resources>, RenderStateContext<Composables, Resources, 'Error'>>;\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as\n | LayoutComposablesDefinition<Resources, ComposableComponents>\n | undefined;\n const definition = defineBoundLayout({\n [lazyDefaultsSymbol]: () => lazyDefaults,\n [layoutDebug]: getLayoutDebug(layout) ?? getLayoutDebug(configuration),\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(\n configuration.props,\n layout.props as { include?: object; custom?: object }\n ),\n composables:\n composables || localComposables\n ? (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n\n inspection.connect(definition);\n\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefinedFactoryNaming<DefaultNaming>\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n\n const label = (lazyOptions as unknown as { resource: string }).resource;\n const lazyInspection = inspectLazy(label, inspection);\n const id = lazyInspection.id;\n\n return createLazyResourceLayout(\n {\n ...lazyOptions,\n load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n\n for (const entry of Object.values(module)) {\n const component =\n entry && typeof entry === 'object' && 'Root' in entry\n ? entry.Root\n : entry;\n\n if (\n ((typeof component === 'object' && component !== null) ||\n typeof component === 'function') &&\n layoutInspection in component\n ) {\n inspection.connect(component);\n\n const target = getInspectionSource(component)\n .getSnapshot()\n .nodes.find(\n (n) =>\n n.kind === 'layout' &&\n n.label ===\n (component as { displayName?: string }).displayName\n );\n\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n\n return module as Module;\n },\n },\n () => lazyDefaults,\n lazyInspection.hooks\n );\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder(\n {\n props: configuration.props,\n composables,\n options,\n resources,\n },\n {\n store: inspection,\n defaults: () => lazyDefaults as LazyResourceStates,\n onLazy: () => {\n lazyLayoutCreated = true;\n },\n }\n ),\n defineLazyDefaults: defineLazyDefaults as DefineLazyDefaults<\n ResourcePath<Resources>, Resources, Options, Composables\n >,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2VA,SAAgB,4BAWd,eAiBA;CACA,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,aAAa,sBAAsB;CACzC,IAAI,eAA4D,CAAC;CACjE,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBACP,UACM;EACN,MAAM,yBAAyB,uBAAuB,QAAQ,IAAI,aAAa;EAC/E,IAAI,uBAAuB,CAAC,wBAC1B,MAAM,IAAI,yBACR,kDACF;EAGF,IAAI,qBAAqB,CAAC,wBACxB,MAAM,IAAI,yBACR,gFACF;EAGF,eAAe;EAEf,sBAAsB;CACxB;CAEA,OAAO,eAAe,oBAAoB,UAAU;EAClD,OAAO;EACP,YAAY;CACd,CAAC;CACD,mBAAmB,oBAAoB,6BAA6B;EAAE;EAAW;EAAS;CAAY,CAAC;CACvG,mBAAmB,yBAAyB,WAC1C,mBAAmB,kBAAkB;EAAE,OAAO;EAAS;CAAO,CAAC;CAGjE,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAGhC,MAAM,aAAa,kBAAkB;IAClC,2BAA2B;IAC3B,cAAc,eAAe,MAAM,KAAK,eAAe,aAAa;GACrE;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAO,iBACL,cAAc,OACd,OAAO,KACT;IACA,aACE,eAAe,oBAET,QACA,YACI;KACJ,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACR;EACF,CAAU;EAEV,WAAW,QAAQ,UAAU;EAE7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EAEpB,MAAM,QAAS,YAAgD;EAC/D,MAAM,iBAAiB,YAAY,OAAO,UAAU;EACpD,MAAM,KAAK,eAAe;EAE1B,OAAO,yBACL;GACE,GAAG;GACH,MAAM,YAAY;IAChB,MAAM,SAAkC,MAAM,YAAY,KAAK;IAE/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YACJ,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAAM,OACN;KAEN,KACI,OAAO,cAAc,YAAY,cAAc,QAC/C,OAAO,cAAc,eACvB,oBAAoB,WACpB;MACA,WAAW,QAAQ,SAAS;MAE5B,MAAM,SAAS,oBAAoB,SAAS,EACzC,YAAY,EACZ,MAAM,MACJ,MACC,EAAE,SAAS,YACX,EAAE,UACC,UAAuC,WAC9C;MAEF,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IAEA,OAAO;GACT;EACF,SACM,cACN,eAAe,KACjB;CACF;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmB,yBACjB;GACE,OAAO,cAAc;GACrB;GACA;GACA;EACF,GACA;GACE,OAAO;GACP,gBAAgB;GAChB,cAAc;IACZ,oBAAoB;GACtB;EACF,CACF;EACoB;EAGpB,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD,CAAC;AACH"}
@@ -1,3 +1,4 @@
1
+ const require_render_state_context = require('./render-state-context.cjs');
1
2
  const require_layout_configuration_error = require('../errors/layout-configuration-error.cjs');
2
3
  const require_resource_state_error = require('../errors/resource-state-error.cjs');
3
4
  const require_lazy_resource_error = require('../errors/lazy-resource-error.cjs');
@@ -39,7 +40,10 @@ var RenderStateBoundary = class extends react.Component {
39
40
  this.setState({ error: void 0 });
40
41
  };
41
42
  render() {
42
- if (this.state.error !== void 0) return this.props.fallback(this.state.error, this.retry);
43
+ if (this.state.error !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_render_state_context.RenderStateFallback, {
44
+ state: "Error",
45
+ children: this.props.fallback(this.state.error, this.retry)
46
+ });
43
47
  return this.props.children;
44
48
  }
45
49
  };
@@ -124,6 +128,28 @@ function resolveLayoutOptionDefaults(defaults, options) {
124
128
  else resolved[key] = require_utils.functionalUpdate(defaultValue, options[key]);
125
129
  return resolved;
126
130
  }
131
+ function optionalStateChildren(props) {
132
+ if (!props) return props;
133
+ const children = props.custom?.children;
134
+ const childrenInclude = props.include?.children;
135
+ return {
136
+ ...props,
137
+ include: props.include && {
138
+ ...props.include,
139
+ ..."children" in props.include ? { children: typeof childrenInclude === "object" && childrenInclude !== null ? {
140
+ ...childrenInclude,
141
+ required: false
142
+ } : childrenInclude === true || childrenInclude === "required" ? {
143
+ required: false,
144
+ suppliedVia: "config"
145
+ } : "optional" } : {}
146
+ },
147
+ custom: props.custom && {
148
+ ...props.custom,
149
+ ...children ? { children: children.visibility === "required" ? children.optional?.() ?? children : children } : {}
150
+ }
151
+ };
152
+ }
127
153
  function getSynchronousRenderStateDefinition(input, fallbackProps) {
128
154
  if (require_render_state.isLazyRenderState(input)) return;
129
155
  if (require_render_state.isDeferredRenderState(input)) return input[require_render_state.deferredRenderStateSymbol];
@@ -143,7 +169,7 @@ function assertUnreservedResourceSlugs(resources, owner) {
143
169
  if (typeof resource !== "string") assertUnreservedResourceSlugs(resource.subResources, slug);
144
170
  }
145
171
  }
146
- function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspection) {
172
+ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspection, renderStateName = "default") {
147
173
  const { options: inProps = {}, resources, layout, namespace: defaultNamespace = false } = options;
148
174
  const getLazyDefaults = options[require_types.lazyDefaultsSymbol] ?? (() => ({}));
149
175
  const shellId = options.shellId;
@@ -326,7 +352,8 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
326
352
  composables: resolvedComposables,
327
353
  resources: createLayoutRenderResourcesAccessor(resources, layoutContext.resource),
328
354
  name: layoutContext.name,
329
- inProps: splitInProps
355
+ inProps: splitInProps,
356
+ state: renderStateName
330
357
  };
331
358
  const stateComponents = {};
332
359
  let CreatedDefaultStateComponent;
@@ -335,10 +362,22 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
335
362
  if (CreatedDefaultStateComponent) return;
336
363
  return inspectionStore.mount(activeInspection.layout, activeInspection.state, ...resourceId ? [resourceId] : []);
337
364
  }, []);
338
- if (CreatedDefaultStateComponent) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CreatedDefaultStateComponent, { ...renderProps });
339
- return render(renderProps, mergedRenderContext);
365
+ const state = (0, react.useContext)(require_render_state_context.RenderStateNameContext);
366
+ if (CreatedDefaultStateComponent) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_render_state_context.ReferencedRenderStateContext.Provider, {
367
+ value: state,
368
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CreatedDefaultStateComponent, { ...renderProps })
369
+ });
370
+ return require_inspection.markInspectionRoots(render(renderProps, {
371
+ ...mergedRenderContext,
372
+ state
373
+ }), [
374
+ activeInspection.layout,
375
+ activeInspection.state,
376
+ ...resourceId ? [resourceId] : []
377
+ ]);
340
378
  }
341
379
  function Component(props) {
380
+ const state = (0, react.useContext)(require_render_state_context.ReferencedRenderStateContext) ?? renderStateName;
342
381
  const publishResource = require_shell_context.useResourceLayoutShellPublisher();
343
382
  const fallbackOptions = (0, react.useContext)(require_fallback_props.LazyFallbackPropsContext);
344
383
  (0, react.useLayoutEffect)(() => {
@@ -372,17 +411,23 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
372
411
  ...validatedProps,
373
412
  ...layoutRenderIncludedProps
374
413
  };
375
- const rendered = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResourceProvider, {
376
- resource: layoutContext.resource,
377
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_jfdevelops_react_layout_composables.LayoutComposablePresetProvider, {
378
- value: composablePresetProps,
379
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_state_composable.StateComposableContext.Provider, {
380
- value: {
381
- scope: stateScope,
382
- props: layoutRenderProps,
383
- definitions: mergedResolvedInProps
384
- },
385
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderDefaultState, { renderProps: layoutRenderProps })
414
+ const rendered = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_render_state_context.ReferencedRenderStateContext.Provider, {
415
+ value: void 0,
416
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_render_state_context.RenderStateNameContext.Provider, {
417
+ value: state,
418
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResourceProvider, {
419
+ resource: layoutContext.resource,
420
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_jfdevelops_react_layout_composables.LayoutComposablePresetProvider, {
421
+ value: composablePresetProps,
422
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_state_composable.StateComposableContext.Provider, {
423
+ value: {
424
+ scope: stateScope,
425
+ props: layoutRenderProps,
426
+ definitions: mergedResolvedInProps
427
+ },
428
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderDefaultState, { renderProps: layoutRenderProps })
429
+ })
430
+ })
386
431
  })
387
432
  })
388
433
  });
@@ -449,7 +494,10 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
449
494
  const LoadingComponent = fallbackStateName === "Loading" ? void 0 : stateComponents.Loading;
450
495
  const ErrorComponent = fallbackStateName === "Error" ? void 0 : stateComponents.Error;
451
496
  const rendered = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Suspense, {
452
- fallback: LoadingComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LoadingComponent, {}) : null,
497
+ fallback: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_render_state_context.RenderStateFallback, {
498
+ state: "Loading",
499
+ children: LoadingComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LoadingComponent, {}) : null
500
+ }),
453
501
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DeferredState, { ...props })
454
502
  });
455
503
  return ErrorComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateBoundary, {
@@ -481,22 +529,22 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
481
529
  ...composables?.(create, stateScope.states) ?? {},
482
530
  ...definition.composables?.(create, stateScope.states)
483
531
  }) : void 0;
484
- const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => definition.render(props, {
532
+ const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => require_inspection.markInspectionRoots(definition.render(props, {
485
533
  ...context,
486
534
  retry
487
- }) }) : definition.render;
535
+ }), [activeInspection.layout, ...inspectedState ? [inspectedState] : []]) }) : definition.render;
488
536
  const StateComponent = defineResourceLayoutImpl({
489
537
  resources,
490
538
  options: inProps,
491
539
  layout: {
492
540
  composables: stateComposables,
493
- props: require_merge_layout_props.mergeLayoutProps(legacyLayoutProps, definition.props),
541
+ props: optionalStateChildren(require_merge_layout_props.mergeLayoutProps(legacyLayoutProps, definition.props)),
494
542
  render: stateRender
495
543
  }
496
544
  }, stateScope, {
497
545
  ...activeInspection,
498
546
  state: inspectedState ?? getReferenceStateId(definition, stateName)
499
- }).createResourceLayout({
547
+ }, stateName).createResourceLayout({
500
548
  ...layoutOptions,
501
549
  name,
502
550
  namespace: false