@jfdevelops/react-layout 1.6.1 → 2.1.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 (157) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +26 -14
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +12 -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 +12 -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 +27 -15
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +129 -58
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +9 -13
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +9 -13
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +130 -59
  16. package/dist/create-config/define-layout.mjs.map +1 -1
  17. package/dist/create-config/for-resources/create-component.d.cts +62 -38
  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 +62 -38
  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 +88 -12
  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 +88 -12
  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 +39 -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 +39 -4
  36. package/dist/create-config/for-resources/scoped-render.mjs.map +1 -1
  37. package/dist/create-config/index.d.cts +3 -2
  38. package/dist/create-config/index.d.mts +3 -2
  39. package/dist/create-config/layout-name.cjs +1 -1
  40. package/dist/create-config/layout-name.mjs +1 -1
  41. package/dist/create-config/lazy-resource-layout.cjs +70 -86
  42. package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
  43. package/dist/create-config/lazy-resource-layout.d.cts +9 -31
  44. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
  45. package/dist/create-config/lazy-resource-layout.d.mts +9 -31
  46. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
  47. package/dist/create-config/lazy-resource-layout.mjs +70 -86
  48. package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
  49. package/dist/create-config/preview.cjs +1 -1
  50. package/dist/create-config/preview.d.cts +2 -0
  51. package/dist/create-config/preview.d.cts.map +1 -1
  52. package/dist/create-config/preview.d.mts +2 -0
  53. package/dist/create-config/preview.d.mts.map +1 -1
  54. package/dist/create-config/preview.mjs +1 -1
  55. package/dist/create-config/render-state-context.cjs +24 -0
  56. package/dist/create-config/render-state-context.cjs.map +1 -0
  57. package/dist/create-config/render-state-context.mjs +22 -0
  58. package/dist/create-config/render-state-context.mjs.map +1 -0
  59. package/dist/create-config/render-state.cjs +58 -18
  60. package/dist/create-config/render-state.cjs.map +1 -1
  61. package/dist/create-config/render-state.d.cts +44 -21
  62. package/dist/create-config/render-state.d.cts.map +1 -1
  63. package/dist/create-config/render-state.d.mts +44 -21
  64. package/dist/create-config/render-state.d.mts.map +1 -1
  65. package/dist/create-config/render-state.mjs +55 -18
  66. package/dist/create-config/render-state.mjs.map +1 -1
  67. package/dist/create-config/state-composable.cjs +4 -2
  68. package/dist/create-config/state-composable.cjs.map +1 -1
  69. package/dist/create-config/state-composable.d.cts.map +1 -1
  70. package/dist/create-config/state-composable.d.mts.map +1 -1
  71. package/dist/create-config/state-composable.mjs +4 -2
  72. package/dist/create-config/state-composable.mjs.map +1 -1
  73. package/dist/errors/lazy-resource-error.cjs +37 -0
  74. package/dist/errors/lazy-resource-error.cjs.map +1 -0
  75. package/dist/errors/lazy-resource-error.d.cts +26 -0
  76. package/dist/errors/lazy-resource-error.d.cts.map +1 -0
  77. package/dist/errors/lazy-resource-error.d.mts +26 -0
  78. package/dist/errors/lazy-resource-error.d.mts.map +1 -0
  79. package/dist/errors/lazy-resource-error.mjs +35 -0
  80. package/dist/errors/lazy-resource-error.mjs.map +1 -0
  81. package/dist/errors/react-layout-error.cjs +1 -1
  82. package/dist/errors/react-layout-error.mjs +1 -1
  83. package/dist/errors/resource-state-error.cjs +4 -1
  84. package/dist/errors/resource-state-error.cjs.map +1 -1
  85. package/dist/errors/resource-state-error.d.cts +1 -0
  86. package/dist/errors/resource-state-error.d.cts.map +1 -1
  87. package/dist/errors/resource-state-error.d.mts +1 -0
  88. package/dist/errors/resource-state-error.d.mts.map +1 -1
  89. package/dist/errors/resource-state-error.mjs +4 -1
  90. package/dist/errors/resource-state-error.mjs.map +1 -1
  91. package/dist/index.cjs +6 -2
  92. package/dist/index.d.cts +9 -5
  93. package/dist/index.d.mts +9 -5
  94. package/dist/index.mjs +4 -3
  95. package/dist/lazy/create-lazy-loader.cjs +78 -0
  96. package/dist/lazy/create-lazy-loader.cjs.map +1 -0
  97. package/dist/lazy/create-lazy-loader.d.cts +19 -0
  98. package/dist/lazy/create-lazy-loader.d.cts.map +1 -0
  99. package/dist/lazy/create-lazy-loader.d.mts +19 -0
  100. package/dist/lazy/create-lazy-loader.d.mts.map +1 -0
  101. package/dist/lazy/create-lazy-loader.mjs +78 -0
  102. package/dist/lazy/create-lazy-loader.mjs.map +1 -0
  103. package/dist/lazy/create-render-state.cjs +59 -0
  104. package/dist/lazy/create-render-state.cjs.map +1 -0
  105. package/dist/lazy/create-render-state.d.cts +33 -0
  106. package/dist/lazy/create-render-state.d.cts.map +1 -0
  107. package/dist/lazy/create-render-state.d.mts +33 -0
  108. package/dist/lazy/create-render-state.d.mts.map +1 -0
  109. package/dist/lazy/create-render-state.mjs +59 -0
  110. package/dist/lazy/create-render-state.mjs.map +1 -0
  111. package/dist/lazy/fallback-props.cjs +9 -0
  112. package/dist/lazy/fallback-props.cjs.map +1 -0
  113. package/dist/lazy/fallback-props.mjs +9 -0
  114. package/dist/lazy/fallback-props.mjs.map +1 -0
  115. package/dist/lazy/inspection.cjs +51 -0
  116. package/dist/lazy/inspection.cjs.map +1 -0
  117. package/dist/lazy/inspection.d.cts +28 -0
  118. package/dist/lazy/inspection.d.cts.map +1 -0
  119. package/dist/lazy/inspection.d.mts +28 -0
  120. package/dist/lazy/inspection.d.mts.map +1 -0
  121. package/dist/lazy/inspection.mjs +50 -0
  122. package/dist/lazy/inspection.mjs.map +1 -0
  123. package/dist/lazy/lazy-boundary.cjs +63 -0
  124. package/dist/lazy/lazy-boundary.cjs.map +1 -0
  125. package/dist/lazy/lazy-boundary.mjs +63 -0
  126. package/dist/lazy/lazy-boundary.mjs.map +1 -0
  127. package/dist/lazy/scoped-content.cjs +87 -0
  128. package/dist/lazy/scoped-content.cjs.map +1 -0
  129. package/dist/lazy/scoped-content.d.cts +19 -0
  130. package/dist/lazy/scoped-content.d.cts.map +1 -0
  131. package/dist/lazy/scoped-content.d.mts +19 -0
  132. package/dist/lazy/scoped-content.d.mts.map +1 -0
  133. package/dist/lazy/scoped-content.mjs +86 -0
  134. package/dist/lazy/scoped-content.mjs.map +1 -0
  135. package/dist/lazy/types.cjs +10 -0
  136. package/dist/lazy/types.cjs.map +1 -0
  137. package/dist/lazy/types.d.cts +40 -0
  138. package/dist/lazy/types.d.cts.map +1 -0
  139. package/dist/lazy/types.d.mts +40 -0
  140. package/dist/lazy/types.d.mts.map +1 -0
  141. package/dist/lazy/types.mjs +8 -0
  142. package/dist/lazy/types.mjs.map +1 -0
  143. package/dist/props.cjs +4 -2
  144. package/dist/props.cjs.map +1 -1
  145. package/dist/props.d.cts +6 -50
  146. package/dist/props.d.cts.map +1 -1
  147. package/dist/props.d.mts +6 -50
  148. package/dist/props.d.mts.map +1 -1
  149. package/dist/props.mjs +5 -2
  150. package/dist/props.mjs.map +1 -1
  151. package/dist/resource.cjs.map +1 -1
  152. package/dist/resource.d.cts +1 -1
  153. package/dist/resource.d.cts.map +1 -1
  154. package/dist/resource.d.mts +1 -1
  155. package/dist/resource.d.mts.map +1 -1
  156. package/dist/resource.mjs.map +1 -1
  157. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"define-layout.cjs","names":["ReactComponent","ResourceModuleLoadError","ResourceRenderError","createIsValidResourceFn","normalizeResourceDefinitions","capitalize","getIncludedPropBehavior","functionalUpdate","isLazyRenderState","isDeferredRenderState","deferredRenderStateSymbol","isResourceConfigComponentKey","InvalidConfigError","inspectDefinition","MissingResourceProviderError","normalizeResources","toResourceEnum","LayoutConfigurationError","createProp","createStateReferences","mergeLayoutProps","trackComposable","stateReferenceSource","useResourceLayoutShellPublisher","pick","LayoutComposablePresetProvider","StateComposableContext","lazyRenderStateSymbol","findDefinedRenderState","Suspense","layoutPreviewFixtures","createPreviewComponent","definedResourceLayoutComponentSymbol","createForResource","createForResources","createResourceLinksFn","ResourceLayoutShellPublisherContext","layoutDebug"],"sources":["../../src/create-config/define-layout.tsx"],"sourcesContent":["import {\n stateReferenceSource,\n type StateComposableSource,\n} from './state-composable';\nimport type {\n LayoutNameInput,\n LayoutNameCallback,\n LayoutNameResolver,\n ResolvedLayoutName,\n} from './layout-name';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport { createPreviewComponent } from './preview';\nimport {\n getLayoutDebug,\n layoutDebug,\n layoutPreviewFixtures,\n inspectionId,\n} from '@jfdevelops/react-layout-devtools-core';\nimport {\n inspectDefinition,\n trackComposable,\n type ActiveInspection,\n} from './inspection';\nimport {\n Component as ReactComponent,\n lazy,\n createContext,\n type JSX,\n type ReactNode,\n Suspense,\n useContext,\n useCallback,\n useLayoutEffect,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from 'react';\nimport {\n type ComposableComponents,\n type ComposableNameContext,\n type ComposableResourceLayout,\n type CreateLayoutComposable,\n collectComposablePresetEntries,\n LayoutComposablePresetProvider,\n MakeComposable,\n makeComposable,\n MakeComposableOptions,\n RequiredPresetLayoutProps,\n resolveLayoutComposables,\n} from '@jfdevelops/react-layout-composables';\nimport {\n LayoutConfigurationError,\n MissingResourceProviderError,\n ResourceModuleLoadError,\n ResourceRenderError,\n} from '../errors';\nimport {\n type AnyBuiltPropDefinition,\n attachComponentPropDefinitions,\n componentPropDefinitionsSymbol,\n createPrimitivePropBuilder,\n createProp,\n type ResolveLayoutProps,\n type ResolveProps,\n resolvePropDefinitionValues,\n validateProps,\n} from '@jfdevelops/react-layout-validator';\nimport {\n IncludedProps,\n IncludedComponentPropDefinitions,\n type IncludedPropVisibility,\n type NormalizedIncludedPropBehavior,\n getIncludedPropBehavior,\n InferredInProps,\n InPropsDefinition,\n InPropsObject,\n LayoutRenderProps,\n MergedLayoutInProps,\n ResolvedIncludedComponentProps,\n ResolvedIncludedConfigProps,\n ResolvedIncludedProps,\n} from '../props';\nimport {\n createIsValidResourceFn,\n normalizeResourceDefinitions,\n normalizeResources,\n toResourceEnum,\n type LayoutResourceKey,\n type NormalizedResourceDefinitions,\n type ResourceDefinition,\n type ResourceDefinitionValue,\n} from '../resource';\nimport { BaseComponent, functionalUpdate, pick, Show, Updater } from '../utils';\nimport { capitalize } from '../utils/capitalize';\nimport { InvalidConfigError } from '../errors';\nimport { isResourceConfigComponentKey } from './component-keys';\nimport {\n type CreateResourceConfigFn,\n createResourceConfig,\n} from './get-component';\nimport type { AssertUnreservedResources } from './types';\nimport {\n createResourceLinksFn,\n type CreateResourceLinksFn,\n} from './create-resource-links';\nimport {\n createForResource,\n type CreateLayoutForResource,\n type CreateResourceLayoutOptions,\n type CreateResourceLayoutOptionsBase,\n} from './for-resource';\nimport {\n createForResources,\n type CreateResourceLayoutForResourcesFn,\n} from './for-resources';\nimport {\n type ResourceLayoutShellPublisher,\n ResourceLayoutShellPublisherContext,\n useResourceLayoutShellPublisher,\n} from './shell-context';\nimport {\n type AnyRenderStateDefinition,\n type RenderStateName,\n type RenderStateReferences,\n deferredRenderStateSymbol,\n definedResourceLayoutComponentSymbol,\n findDefinedRenderState,\n isDeferredRenderState,\n isLazyRenderState,\n lazyRenderStateSymbol,\n} from './render-state';\nimport {\n createStateReferences,\n StateComposableContext,\n type RenderStateScope,\n} from './state-composable';\n\nexport type LayoutIncludeProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents\n> = IncludedProps<MergedLayoutInProps<Resources, Options, Composables>>;\n\nexport type LayoutProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {}\n> = {\n /**\n * Props to include in the layout.\n */\n include?: LayoutIncludeProps<Resources, Options, Composables> & IncludeProps;\n /**\n * Custom props that the layout will receive.\n */\n custom?: CustomProps;\n};\n\ntype LayoutRenderContext<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents\n> = {\n composables: LayoutRenderComposables<Composables>;\n inProps: Record<string, unknown>;\n /**\n * @deprecated Use `resources.current` instead. `resource` will be removed in\n * the next major version.\n */\n resource: LayoutResourceKey<Resources>;\n /**\n * Accessor for the resources bound to this definition. Read `resources.current`\n * for the resource this instance renders, call `resources()` for normalized\n * definitions, `resources.raw()` for the original value, use\n * `resources.pick(...)` / `resources.omit(...)` to filter, or\n * `resources.isResource(...)` to narrow an unknown value.\n */\n resources: LayoutRenderResourcesAccessor<Resources>;\n name: string;\n /** Retries the active lazy state when the current Error state was automatic. */\n retry?: () => void;\n};\n\ntype RenderStateBoundaryProps = {\n children: ReactNode;\n fallback: (error: unknown, retry: () => void) => ReactNode;\n onRetry?: () => void;\n};\n\nconst RenderStateRetryContext = createContext<(() => void) | undefined>(\n undefined\n);\n\nclass RenderStateBoundary extends ReactComponent<\n RenderStateBoundaryProps,\n { error?: unknown }\n> {\n state: { error?: unknown } = {};\n\n static getDerivedStateFromError(error: unknown) {\n return { error };\n }\n\n retry = () => {\n this.props.onRetry?.();\n\n this.setState({ error: undefined });\n };\n\n render() {\n if (this.state.error !== undefined) {\n return this.props.fallback(this.state.error, this.retry);\n }\n\n return this.props.children;\n }\n}\n\nfunction toResourceStateError(resource: string, state: string, error: unknown) {\n return error instanceof ResourceModuleLoadError ||\n error instanceof ResourceRenderError\n ? error\n : new ResourceRenderError(resource, state, error);\n}\n\n/**\n * A single {@link ResourceDefinition} kept by a `pick`, or `never` when it does\n * not match. Widened definitions (`string`, `{ value: string }`) are always\n * kept — the concrete keys are not known statically, so the runtime filter is\n * the source of truth.\n */\ntype PickResourceDefinition<\n Definition,\n Keys extends string\n> = Definition extends ResourceDefinition\n ? string extends ResourceDefinitionValue<Definition>\n ? Definition\n : ResourceDefinitionValue<Definition> extends Keys\n ? Definition\n : never\n : never;\n\ntype PickResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Keys extends LayoutResourceKey<Resources>\n> = Array<PickResourceDefinition<Resources[number], Keys>>;\n\n/**\n * A single {@link ResourceDefinition} kept by an `omit`, or `never` when it is\n * one of the omitted keys. Widened definitions are always kept.\n */\ntype OmitResourceDefinition<\n Definition,\n Keys extends string\n> = Definition extends ResourceDefinition\n ? string extends ResourceDefinitionValue<Definition>\n ? Definition\n : ResourceDefinitionValue<Definition> extends Keys\n ? never\n : Definition\n : never;\n\ntype OmitResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Keys extends LayoutResourceKey<Resources>\n> = Array<OmitResourceDefinition<Resources[number], Keys>>;\n\n/**\n * The result of `resources.pick(...)` / `resources.omit(...)`.\n *\n * - calling it returns the selected resource definitions.\n * - `.isResource(value)` narrows an unknown value to one of the selected keys.\n */\nexport type ResourceSelection<\n Definitions extends ReadonlyArray<ResourceDefinition>\n> = {\n /** Returns the selected resource definitions. */\n (): Show<Definitions>;\n /**\n * Narrows an unknown value to one of the selected resource keys.\n *\n * @param value - The value to test.\n */\n isResource(value: unknown): value is LayoutResourceKey<Definitions>;\n};\n\n/**\n * Accessor for the resources bound to a `defineResourceLayout` definition.\n *\n * - `resources()` returns normalized `{ value, subResources? }` definitions.\n * - `resources.raw()` returns the definitions exactly as declared.\n * - `resources.omit(key, ...rest)` selects every resource except the named ones.\n * - `resources.pick(key, ...rest)` selects only the named resources.\n * - `resources.isResource(value)` narrows an unknown value to a resource key.\n *\n * `pick` / `omit` return a {@link ResourceSelection} thunk: call it for the\n * definitions, or use its `isResource` guard.\n */\nexport type LayoutResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = {\n /**\n * Returns normalized resources, or the result of an optional selector.\n *\n * @param select - Transforms the normalized tuple without losing its literal\n * resource and sub-resource types.\n */\n <Selected = NormalizedResourceDefinitions<Resources>>(\n select?: (resources: NormalizedResourceDefinitions<Resources>) => Selected\n ): Selected;\n /**\n * Returns the original resource declarations, or an optionally selected\n * value derived from them.\n *\n * @param select - Transforms the original tuple exactly as it was declared.\n */\n raw<Selected = Resources>(\n select?: (resources: Resources) => Selected\n ): Selected;\n /**\n * Narrows an unknown value to one of this definition's top-level resource\n * keys.\n *\n * @param value - The value to test.\n */\n isResource(value: unknown): value is LayoutResourceKey<Resources>;\n /**\n * Selects every declared resource except the named ones. Requires at least\n * one key.\n *\n * @param keys - Top-level resource names to exclude.\n */\n omit<\n Keys extends [\n LayoutResourceKey<Resources>,\n ...LayoutResourceKey<Resources>[]\n ]\n >(\n ...keys: Keys\n ): ResourceSelection<OmitResourceDefinitions<Resources, Keys[number]>>;\n /**\n * Selects only the named resources. Requires at least one key.\n *\n * @param keys - Top-level resource names to keep.\n */\n pick<\n Keys extends [\n LayoutResourceKey<Resources>,\n ...LayoutResourceKey<Resources>[]\n ]\n >(\n ...keys: Keys\n ): ResourceSelection<PickResourceDefinitions<Resources, Keys[number]>>;\n};\n\n/**\n * Render-scoped {@link LayoutResourcesAccessor}, extended with `current` — the\n * resource key the layout instance is rendering for.\n */\nexport type LayoutRenderResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = LayoutResourcesAccessor<Resources> & {\n /** The resource this layout instance is rendering for. */\n readonly current: LayoutResourceKey<Resources>;\n};\n\nfunction createResourceSelection(\n definitions: ReadonlyArray<ResourceDefinition>\n): ResourceSelection<ReadonlyArray<ResourceDefinition>> {\n const selection = (() => definitions) as ResourceSelection<\n ReadonlyArray<ResourceDefinition>\n >;\n\n selection.isResource = createIsValidResourceFn(definitions);\n\n return selection;\n}\n\n/**\n * Creates the callable resource accessor shared by global and bound layout\n * definitions.\n *\n * @param resources - Resource definitions to expose and normalize.\n * @returns A callable normalized accessor with raw, selection, and guard APIs.\n * @internal\n */\nexport function createLayoutResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n>(resources: Resources): LayoutResourcesAccessor<Resources> {\n const normalizedResources = normalizeResourceDefinitions(resources);\n const accessor = ((select?: (value: typeof normalizedResources) => unknown) =>\n select\n ? select(normalizedResources)\n : normalizedResources) as LayoutResourcesAccessor<Resources>;\n\n accessor.raw = ((select?: (value: Resources) => unknown) =>\n select\n ? select(resources)\n : resources) as LayoutResourcesAccessor<Resources>['raw'];\n\n accessor.isResource = createIsValidResourceFn(resources);\n\n accessor.omit = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => !keys.includes(readResourceSlug(resource)))\n )) as LayoutResourcesAccessor<Resources>['omit'];\n\n accessor.pick = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => keys.includes(readResourceSlug(resource)))\n )) as LayoutResourcesAccessor<Resources>['pick'];\n\n return accessor;\n}\n\nfunction createLayoutRenderResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n>(\n resources: Resources,\n current: LayoutResourceKey<Resources>\n): LayoutRenderResourcesAccessor<Resources> {\n return Object.assign(createLayoutResourcesAccessor(resources), { current });\n}\n\ntype LayoutRenderComposables<Composables extends ComposableComponents> = [\n keyof Composables\n] extends [never]\n ? undefined\n : Composables;\n\ntype SplitLayoutInPropDefinition<\n Props extends InPropsObject = {},\n Content = unknown\n> = {\n props?: Props;\n render: ((props: ResolveProps<Props>) => Content) | Content;\n};\n\nfunction isBuiltPropDefinition(\n value: unknown\n): value is AnyBuiltPropDefinition {\n return typeof value === 'function' && value !== null && 'visibility' in value;\n}\n\nfunction isSplitLayoutInPropDefinition(\n value: unknown\n): value is SplitLayoutInPropDefinition {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'render' in value &&\n (value as { render?: unknown }).render !== undefined\n );\n}\n\nfunction isJSXElementDefinition(\n definition: unknown\n): definition is AnyBuiltPropDefinition & { type: 'JSX.Element' } {\n return (\n isBuiltPropDefinition(definition) &&\n 'type' in definition &&\n definition.type === 'JSX.Element'\n );\n}\n\nfunction toLayoutRenderPropKey(includeKey: string, definition: unknown) {\n return isJSXElementDefinition(definition)\n ? capitalize(includeKey)\n : includeKey;\n}\n\nfunction readLayoutOptionValue(\n includeKey: string,\n definition: unknown,\n sources: Record<string, unknown>\n) {\n const layoutOptionKeys = isJSXElementDefinition(definition)\n ? [capitalize(includeKey), includeKey]\n : [includeKey, capitalize(includeKey)];\n\n for (const key of layoutOptionKeys) {\n if (key in sources) {\n return sources[key];\n }\n }\n\n return undefined;\n}\n\n\nfunction isIncludedPropRequired(value: unknown) {\n return (\n value === true ||\n value === 'required' ||\n getIncludedPropBehavior(value)?.visibility === 'required'\n );\n}\n\nfunction allowsConfigPassthrough(value: unknown) {\n const behavior = getIncludedPropBehavior(value);\n\n if (!behavior) {\n return true;\n }\n\n if (behavior.passthrough === 'config') {\n return true;\n }\n\n // optional + component passthrough still accepts create-time defaults\n return (\n behavior.passthrough === 'component' && behavior.visibility === 'optional'\n );\n}\n\nfunction allowsComponentPassthrough(value: unknown) {\n const behavior = getIncludedPropBehavior(value);\n\n return behavior ? behavior.passthrough === 'component' : value === 'optional';\n}\n\nfunction splitLayoutInProps(inProps: Record<string, unknown>) {\n const resolvedInProps: Record<string, AnyBuiltPropDefinition> = {};\n const splitInProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(inProps)) {\n if (isBuiltPropDefinition(value)) {\n resolvedInProps[key] = value;\n\n continue;\n }\n\n if (isSplitLayoutInPropDefinition(value)) {\n splitInProps[key] = value.render;\n\n if (value.props && typeof value.props === 'object') {\n Object.assign(resolvedInProps, value.props);\n }\n }\n }\n\n return {\n resolvedInProps,\n splitInProps,\n };\n}\n\nfunction resolveLayoutOptionDefaults(\n defaults: Record<string, unknown>,\n options: Record<string, unknown>\n) {\n const resolved = { ...options };\n\n for (const [key, defaultValue] of Object.entries(defaults)) {\n if (key in options) {\n if (typeof defaultValue === 'function') {\n resolved[key] = options[key];\n } else {\n resolved[key] = functionalUpdate(\n defaultValue,\n options[key] as Updater<unknown>\n );\n }\n }\n }\n\n return resolved;\n}\n\n/**\n * The `layout` block of a {@link defineResourceLayout} call: the props, the\n * composable map, and the render for a per-resource page component.\n *\n * Extracted so {@link defineResourceLayout.withLayout} can reuse the exact same\n * shape while making `render` optional (see {@link ShellLayoutDefinition}).\n */\ntype LayoutRenderFunction<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject\n> = (\n props: LayoutRenderProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n context: LayoutRenderContext<Resources, Composables>\n) => JSX.Element;\n\ntype RenderStateComposables<Input> = Input extends {\n composables?: (\n ...arguments_: any[]\n ) => infer Composables extends ComposableComponents;\n}\n ? Composables\n : {};\n\ntype ContextualRenderStateIncludeProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input\n> = RenderStateIncludeProps<Input> extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n>\n ? RenderStateIncludeProps<Input>\n : LayoutIncludeProps<Resources, Options, Composables>;\n\ntype ValidRenderStateIncludes<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input\n> = {\n [Key in keyof RenderStateIncludeProps<Input>]: Key extends keyof LayoutIncludeProps<\n Resources,\n Options,\n Composables\n >\n ? RenderStateIncludeProps<Input>[Key]\n : never;\n};\n\ntype ContextualStateRenderFunction<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input\n> = LayoutRenderFunction<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n ContextualRenderStateIncludeProps<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n Input\n >,\n RenderStateCustomProps<Input>\n>;\n\ntype ContextualStateLayoutProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input\n> = LayoutProps<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n ContextualRenderStateIncludeProps<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n Input\n >,\n RenderStateCustomProps<Input>\n> & {\n include?: ValidRenderStateIncludes<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n Input\n >;\n};\n\ntype RenderStateConfiguration<Input> = Pick<\n Input,\n keyof Input & ('props' | 'composables' | 'state')\n>;\n\ntype ContextualLayoutRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input,\n States,\n BaseInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n BaseCustom extends InPropsObject = {}\n> =\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n BaseInclude,\n BaseCustom\n >\n | CreatedRenderState\n | (RenderStateConfiguration<Input> & {\n props?: ContextualStateLayoutProps<\n Resources,\n Options,\n Composables,\n Input\n >;\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, States>\n ) => ComposableComponents;\n render: ContextualStateRenderFunction<\n Resources,\n Options,\n Composables,\n PlainStateWithDefaults<Input, BaseInclude, BaseCustom>\n >;\n state?: RenderStateName;\n });\n\ntype ContextualLayoutRenderStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States,\n BaseInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n BaseCustom extends InPropsObject = {}\n> = {\n [State in keyof States]: ContextualLayoutRenderState<\n Resources,\n Options,\n Composables,\n States[State],\n States,\n BaseInclude,\n BaseCustom\n >;\n} & { default: unknown };\n\n/**\n * Contextual shape applied to each inline `layout.render` entry. It prevents\n * callback parameters from falling back to implicit `any` and exposes both\n * layout-level and state-local composables through the render context.\n */\nexport type ContextualInlineRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n LayoutComposables extends ComposableComponents\n> =\n | LayoutRenderFunction<Resources, Options, LayoutComposables, {}, {}>\n | {\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n LayoutComposables & ComposableComponents\n >;\n custom?: InPropsObject;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>\n ) => ComposableComponents;\n render: LayoutRenderFunction<\n Resources,\n Options,\n LayoutComposables & ComposableComponents,\n LayoutIncludeProps<\n Resources,\n Options,\n LayoutComposables & ComposableComponents\n >,\n Record<string, any>\n >;\n state?: string;\n };\n\n/**\n * Requires a `default` inline state while allowing named built-in or custom\n * states to share the same contextual callback typing.\n */\nexport type ContextualInlineRenderStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n LayoutComposables extends ComposableComponents\n> = {\n [State in RenderStateName]?:\n | ContextualInlineRenderState<Resources, Options, LayoutComposables>\n | CreatedRenderState\n | (AnyRenderStateDefinition & { state: RenderStateName });\n} & {\n default:\n | ContextualInlineRenderState<Resources, Options, LayoutComposables>\n | CreatedRenderState\n | (AnyRenderStateDefinition & { state: RenderStateName });\n};\n\n/** An inline state with independently inferred props and composables. */\nexport type TypedInlineRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n LayoutComposables extends ComposableComponents,\n StateComposables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n LayoutComposables & StateComposables\n >,\n CustomProps extends InPropsObject\n> = {\n props?: {\n include?: IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>\n ) => StateComposables;\n render: LayoutRenderFunction<\n Resources,\n Options,\n LayoutComposables & StateComposables,\n IncludeProps,\n CustomProps\n >;\n state?: string;\n};\n\ntype CreatedRenderState =\n | import('./render-state').DeferredRenderState<AnyRenderStateDefinition>\n | import('./render-state').LazyRenderState<AnyRenderStateDefinition>;\n\n/**\n * State-map helper inferred from the complete render object, including custom\n * states. Built-in states use the same inference as every other key.\n */\nexport type TypedBuiltInRenderStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Render extends { default: unknown }\n> = ContextualLayoutRenderStates<Resources, Options, Composables, Render>;\n\ntype LayoutRenderInput<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject\n> =\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >\n | ContextualInlineRenderStates<Resources, Options, Composables>;\n\nexport type LayoutDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject\n> = {\n /**\n * The props to pass to the layout.\n */\n props?: LayoutProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >;\n /**\n * Components used to compose the layout. Invoked per layout instance with\n * a scoped `create` that resolves composable `name` callbacks using the\n * layout's `resource` and `name`.\n */\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => Composables;\n /**\n * The render function for the layout.\n */\n render: LayoutRenderInput<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >;\n};\n\n/** Complete input accepted by the unbound `defineResourceLayout` API. */\nexport type CreateViewMapOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n Render = LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['render'],\n Namespace extends boolean = false,\n Naming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined =\n LayoutNameInput<LayoutResourceKey<Resources>>\n> = {\n /** Default naming convention for components created by this definition. */\n name?: Naming;\n /** Default namespace mode for created layouts. Defaults to false. */\n namespace?: Namespace;\n /**\n * An array of valid resource names to support. Nested sub-resource slugs that\n * collide with config keys (`component`, `detail`, `new`, …) are reserved.\n */\n resources: AssertUnreservedResources<Resources>;\n /**\n * The options that are passed into the created resource layout.\n */\n options?: Options;\n layout: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render'\n > & {\n render:\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >\n | (Render extends (...args: any[]) => any\n ? never\n : Render &\n ContextualInlineRenderStates<Resources, Options, Composables>);\n };\n};\n\n/**\n * Input for the callback shorthand of `layout.render`. Keeping the callback\n * concrete allows TypeScript to infer layout composables and included props\n * from their sibling definitions before contextually typing `render`.\n */\nexport type CreateViewMapFunctionRenderOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Namespace extends boolean = false,\n Naming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined =\n LayoutNameInput<LayoutResourceKey<Resources>>\n> = CreateViewMapOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n Namespace,\n Naming\n>;\n\n/**\n * Resource-layout input that preserves the exact keys and definitions of an\n * object-form render-state map. Use `createRenderState` for scoped\n * `composables(create)` callbacks that need independent context inference.\n */\nexport type CreateViewMapRenderStatesOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n RenderStates extends { default: unknown } & Record<string, unknown>,\n Namespace extends boolean = false,\n Naming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined =\n LayoutNameInput<LayoutResourceKey<Resources>>\n> = Omit<\n CreateViewMapOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n RenderStates,\n Namespace,\n Naming\n >,\n 'layout'\n> & {\n layout: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render' | 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, {}, RenderStates>\n ) => Composables;\n render: RenderStates &\n ContextualLayoutRenderStates<\n Resources,\n Options,\n Composables,\n RenderStates,\n IncludeProps,\n CustomProps\n > &\n Partial<Record<RenderStateName, unknown>>;\n };\n};\n\n/**\n * Object-form layout input that contextually types inline state callbacks.\n * Use {@link CreateViewMapRenderStatesOptions} when working with already\n * created state fragments instead.\n */\nexport type CreateViewMapInlineRenderStatesOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Namespace\n >,\n 'layout'\n> & {\n layout: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render'\n > & {\n render: ContextualInlineRenderStates<Resources, Options, Composables>;\n };\n};\n\n/** Input for independently inferred built-in render states. */\nexport type CreateViewMapBuiltInRenderStatesOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render extends { default: unknown } & Record<string, unknown>,\n Namespace extends boolean = false\n> = CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Render,\n Namespace\n>;\n\ntype UnwrapRenderState<Input> =\n Input extends import('./render-state').DeferredRenderState<\n infer Definition extends AnyRenderStateDefinition\n >\n ? Definition\n : Input extends import('./render-state').LazyRenderState<\n infer Definition extends AnyRenderStateDefinition\n >\n ? Definition\n : Input extends (...args: any[]) => any\n ? { render: Input }\n : Input;\n\ntype RenderStateCustomProps<Input> = UnwrapRenderState<Input> extends {\n props?: { custom?: infer CustomProps extends InPropsObject };\n}\n ? CustomProps\n : {};\n\ntype RenderStateIncludeProps<Input> = UnwrapRenderState<Input> extends {\n props?: { include?: infer IncludeProps };\n}\n ? IncludeProps\n : {};\n\nfunction getSynchronousRenderStateDefinition(\n input: unknown,\n fallbackProps?: LayoutProps<any, any, any, any, any>\n): AnyRenderStateDefinition | undefined {\n if (isLazyRenderState(input)) {\n return undefined;\n }\n\n if (isDeferredRenderState(input)) {\n return input[deferredRenderStateSymbol];\n }\n\n if (typeof input === 'function') {\n return {\n props: fallbackProps,\n render: input as AnyRenderStateDefinition['render'],\n };\n }\n\n return typeof input === 'object' && input !== null\n ? (input as AnyRenderStateDefinition)\n : undefined;\n}\n\ntype ResourceLayoutStateComponents<\n Name extends string,\n Resource extends string,\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States\n> = States extends Record<string, unknown>\n ? {\n [State in Exclude<keyof States & string, 'default'>]: BaseComponent<\n `${Name}.${State}`,\n Show<\n ResolveProps<RenderStateCustomProps<States[State]>> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n Extract<\n RenderStateIncludeProps<States[State]>,\n LayoutIncludeProps<Resources, Options, Composables>\n >\n >\n >\n > &\n ((\n props: Show<\n ResolveProps<RenderStateCustomProps<States[State]>> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n Extract<\n RenderStateIncludeProps<States[State]>,\n LayoutIncludeProps<Resources, Options, Composables>\n >\n >\n >\n ) => JSX.Element) & {\n readonly resource: Resource;\n };\n }\n : {};\n\ntype ResourceLayoutComposition<\n Name extends string,\n Composables extends ComposableComponents\n> = [keyof Composables] extends [never]\n ? {}\n : {\n makeComposable: MakeComposable<Composables, Name>;\n };\n\nexport type ResourceLayoutComponent<\n Name extends string,\n Props extends InPropsObject = {},\n Composables extends ComposableComponents = {},\n Resource extends string = string,\n IncludedCallProps extends object = {},\n States = {},\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n PropDefinitions extends InPropsObject = Props\n> = ResourceLayoutComposition<Name, Composables> &\n BaseComponent<Name, Show<ResolveProps<Props> & IncludedCallProps>> & {\n (props: Show<ResolveProps<Props> & IncludedCallProps>): JSX.Element;\n /**\n * A type-only property containing the resource associated with this\n * component. This property is `undefined` at runtime.\n */\n readonly resource: Resource;\n readonly [definedResourceLayoutComponentSymbol]: true;\n readonly [componentPropDefinitionsSymbol]: PropDefinitions;\n } & ResourceLayoutStateComponents<\n Name,\n Resource,\n Resources,\n Options,\n Composables,\n States\n >;\n\nexport type LayoutPropsForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {}\n> = [keyof IncludeProps] extends [never]\n ? ResolveLayoutProps<InferredInProps<Resources, InProps>> &\n RequiredPresetLayoutProps<Composables>\n : ResolvedIncludedConfigProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n IncludeProps\n >;\n\ntype DefaultStateIncludes<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States,\n Fallback extends LayoutIncludeProps<Resources, Options, Composables>\n> = States extends { default: infer Default }\n ? ContextualRenderStateIncludeProps<Resources, Options, Composables, Default>\n : Fallback;\n\n/** A plain object namespace; the callable default component lives under Root. */\ntype ResourceLayoutNamespace<Component> = { Root: Component } & {\n [Key in keyof Component as Key extends string\n ? Key extends 'displayName' | 'props' | 'resource' | 'makeComposable'\n ? never\n : Key\n : never]: Component[Key];\n};\n\nexport type ResourceLayoutResult<\n Component,\n Namespace extends boolean\n> = Namespace extends true ? ResourceLayoutNamespace<Component> : Component;\n\ntype CreateResourceLayoutFnImpl<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<\n Resources,\n InProps,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = (<\n const Name extends string = never,\n const Resource extends LayoutResourceKey<Resources> = LayoutResourceKey<Resources>,\n Props extends InPropsObject = {},\n Namespace extends boolean = DefaultNamespace\n>(\n options: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n string,\n Resource,\n Props,\n Namespace,\n Name\n >\n) => Show<\n ResourceLayoutResult<\n ResourceLayoutComponent<\n ResolvedLayoutName<\n [Name] extends [never] ? DefaultNaming : Name,\n Resource\n >,\n CustomProps,\n Composables,\n Resource,\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >,\n States,\n Resources,\n InProps,\n CustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >\n >,\n Namespace\n >\n>) &\n (<\n const Resource extends LayoutResourceKey<Resources>,\n const Naming extends LayoutNameResolver<\n string,\n any\n > = LayoutNameResolver<string, any>,\n Props extends InPropsObject = {},\n Namespace extends boolean = DefaultNamespace\n >(\n options: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n string,\n Resource,\n Props,\n Namespace,\n Naming\n >\n ) => Show<\n ResourceLayoutResult<\n ResourceLayoutComponent<\n ResolvedLayoutName<Naming, Resource>,\n CustomProps,\n Composables,\n Resource,\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >,\n States,\n Resources,\n InProps,\n CustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >\n >,\n Namespace\n >\n >) &\n (<\n const Resource extends LayoutResourceKey<Resources>,\n const Name extends string = ResolvedLayoutName<\n DefaultNaming,\n Resource\n >,\n Props extends InPropsObject = {},\n Namespace extends boolean = DefaultNamespace\n >(\n options: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n string,\n Resource,\n Props,\n Namespace,\n LayoutNameCallback<\n Resource,\n ('default' | keyof States) & string,\n Name\n >\n >\n ) => Show<\n ResourceLayoutResult<\n ResourceLayoutComponent<\n Name,\n CustomProps,\n Composables,\n Resource,\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >,\n States,\n Resources,\n InProps,\n CustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >\n >,\n Namespace\n >\n >);\n\nexport type CreateResourceLayoutMakeComposableOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {}\n> = CreateResourceLayoutOptionsBase<Resources, Name, Resource, Props> &\n Partial<\n LayoutPropsForResource<Resources, InProps, Composables, IncludeProps>\n >;\n\ntype CreateResourceLayoutMakeComposableFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables>,\n CustomProps extends InPropsObject\n> = <\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {}\n>(\n options: CreateResourceLayoutMakeComposableOptions<\n Resources,\n InProps,\n Composables,\n Name,\n Resource,\n Props,\n IncludeProps\n >\n) => ComposableResourceLayout<Composables, Name, any, any, any>;\n\ntype CreateResourceLayoutFnBase<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = CreateResourceLayoutFnImpl<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace,\n DefaultNaming\n> & {\n /**\n * A function to create a resource layout for a specific resource.\n */\n forResource: CreateLayoutForResource<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n DefaultNamespace,\n States,\n DefaultNaming\n >;\n /**\n * Creates resource layout factories for multiple defined resources.\n */\n forResources: CreateResourceLayoutForResourcesFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n DefaultNamespace,\n States,\n DefaultNaming\n >;\n};\n\ntype CreateResourceLayoutMakeComposableMember<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables>,\n CustomProps extends InPropsObject\n> = [keyof Composables] extends [never]\n ? {}\n : {\n makeComposable: CreateResourceLayoutMakeComposableFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n };\n\nexport type CreateResourceLayoutFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = CreateResourceLayoutFnBase<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace,\n DefaultNaming\n> &\n CreateResourceLayoutMakeComposableMember<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n\nexport type DefinedResourceLayout<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = {\n createResourceConfig: CreateResourceConfigFn<Resources>;\n createResourceLayout: CreateResourceLayoutFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace,\n DefaultNaming\n >;\n createResourceLinks: CreateResourceLinksFn<Resources>;\n /**\n * Accessor for the resources bound to this definition. Call `resources()` for\n * normalized definitions, `resources.raw()` for their declared form, or use\n * `resources.pick(...)` / `resources.omit(...)` to filter.\n */\n resources: LayoutResourcesAccessor<Resources>;\n /**\n * Provides the current resource to descendants that call `useResource`.\n * Components created by `createResourceLayout` install this provider\n * automatically.\n */\n ResourceProvider: ResourceLayoutProvider<Resources>;\n /** Returns the nearest current resource. */\n useResource: () => LayoutResourceKey<Resources>;\n};\n\nexport type ResourceLayoutProviderProps<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = {\n children: ReactNode;\n resource: LayoutResourceKey<Resources>;\n};\n\nexport type ResourceLayoutProvider<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = (props: ResourceLayoutProviderProps<Resources>) => JSX.Element;\n\nfunction readResourceSlug(resource: ResourceDefinition) {\n return typeof resource === 'string' ? resource : resource.value;\n}\n\nfunction assertUnreservedResourceSlugs(\n resources: ReadonlyArray<ResourceDefinition>,\n owner?: string\n) {\n for (const resource of resources) {\n const slug = readResourceSlug(resource);\n\n if (owner !== undefined && isResourceConfigComponentKey(slug)) {\n throw new InvalidConfigError({\n reason: `Sub-resource \"${slug}\" under \"${owner}\" collides with a reserved config key`,\n });\n }\n\n if (typeof resource !== 'string') {\n assertUnreservedResourceSlugs(resource.subResources, slug);\n }\n }\n}\n\nfunction defineResourceLayoutImpl<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n InProps,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n const Render = LayoutDefinition<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >['render']\n>(\n options: CreateViewMapOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render,\n boolean\n >,\n inheritedStateScope?: RenderStateScope,\n inheritedInspection?: ActiveInspection\n): DefinedResourceLayout<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n> {\n const {\n options: inProps = {} as InProps,\n resources,\n layout,\n namespace: defaultNamespace = false,\n } = options;\n // Internal, set only by `defineResourceLayout.withLayout`: the identity of the\n // owning definition, forwarded when a page reports its resource so the shell\n // can tell its own pages apart from ones belonging to another definition.\n const shellId = (options as { shellId?: symbol }).shellId;\n\n const inspection = inheritedInspection\n ? undefined\n : inspectDefinition(\n resources,\n getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source\n );\n\n if (inspection)\n inspection.store.node({\n id: inspection.definition,\n kind: 'definition',\n label: 'Layout definition',\n source: getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source,\n details: {\n props: layout.props,\n propSchemas: typeof inProps === 'function' ? undefined : inProps,\n options:\n typeof inProps === 'function'\n ? 'Resource-specific schemas'\n : Object.keys(inProps),\n states:\n typeof layout.render === 'function'\n ? ['default']\n : Object.keys(layout.render),\n },\n });\n\n assertUnreservedResourceSlugs(resources);\n\n const resourcesAccessor = createLayoutResourcesAccessor(resources);\n const ResourceContext = createContext<\n LayoutResourceKey<Resources> | undefined\n >(undefined);\n\n function ResourceProvider({\n children,\n resource,\n }: ResourceLayoutProviderProps<Resources>) {\n return (\n <ResourceContext.Provider value={resource}>\n {children}\n </ResourceContext.Provider>\n );\n }\n\n function useResource() {\n const resource = useContext(ResourceContext);\n\n if (resource === undefined) {\n throw new MissingResourceProviderError({});\n }\n\n return resource;\n }\n\n const normalizedResources = normalizeResources(resources);\n const resourcesEnum = createPrimitivePropBuilder('string').enum(\n toResourceEnum(normalizedResources)\n );\n const definedResourceLayout = (<\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {}\n >(\n layoutOptions: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n Name,\n Resource,\n Props,\n boolean\n >\n ) => {\n const {\n name: suppliedName,\n props: instancePropDefinitions,\n namespace = defaultNamespace,\n ...layoutOptionProps\n } = layoutOptions;\n const naming = suppliedName ?? options.name ?? `${capitalize(layoutOptions.resource)}Layout`;\n const name = (\n typeof naming === 'function'\n ? naming({\n resource: layoutOptions.resource,\n states:\n typeof layout.render === 'function'\n ? ['default']\n : Object.keys(layout.render),\n capitalize,\n })\n : naming\n ) as Name;\n\n if (name !== undefined && (typeof name !== 'string' || !name))\n throw new LayoutConfigurationError('A non-empty layout name is required');\n\n const createComposableLayout =\n makeComposable<\n LayoutRenderProps<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >\n >();\n const nameProp = createProp.string().literal(name);\n const rawResolvedOptions =\n typeof inProps === 'function'\n ? inProps({\n resource: resourcesEnum,\n name: nameProp,\n })\n : inProps;\n const { resolvedInProps, splitInProps } = splitLayoutInProps({\n ...(rawResolvedOptions as Record<string, unknown>),\n ...(instancePropDefinitions as Record<string, unknown> | undefined),\n ...layoutOptionProps,\n });\n const { composables, props: legacyLayoutProps } = layout;\n const renderStates = (\n typeof layout.render === 'function'\n ? { default: layout.render }\n : layout.render\n ) as Record<string, unknown>;\n const inspectionStore = inheritedInspection?.store ?? inspection!.store;\n const layoutId =\n inheritedInspection?.layout ??\n inspectionStore.node({\n id: inspectionId('layout'),\n kind: 'layout',\n label: name ?? String(layoutOptionProps.resource),\n source:\n getLayoutDebug(layoutOptions)?.source ??\n getLayoutDebug(options)?.source ??\n getLayoutDebug(layout)?.source,\n registrationSource:\n getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source,\n details: {\n resource: layoutOptionProps.resource,\n props: legacyLayoutProps,\n propSchemas: rawResolvedOptions,\n },\n });\n const resourceId =\n inheritedInspection?.resource ??\n inspection?.resourceIds.get(String(layoutOptionProps.resource));\n\n if (inspection) {\n inspectionStore.edge(inspection.definition, layoutId, 'defines');\n\n if (resourceId) inspectionStore.edge(resourceId, layoutId, 'renders');\n }\n\n const stateIds = new Map(\n Object.keys(renderStates).map((state) => [\n state,\n inheritedInspection?.state ??\n inspectionStore.node({\n id: inspectionId('state'),\n kind: 'state',\n label: state,\n source:\n getLayoutDebug(renderStates[state])?.source ??\n getLayoutDebug(options)?.source ??\n getLayoutDebug(layout)?.source,\n registrationSource:\n getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source,\n unresolved:\n isLazyRenderState(renderStates[state]) ||\n isDeferredRenderState(renderStates[state]),\n }),\n ])\n );\n\n for (const id of stateIds.values())\n inspectionStore.edge(layoutId, id, 'defines');\n\n const activeInspection = {\n store: inspectionStore,\n layout: layoutId,\n resource: resourceId,\n state: stateIds.get('default')!,\n };\n const referenceStateIds = new Map<unknown, string>();\n\n function getReferenceStateId(input: unknown, label: string) {\n let id = referenceStateIds.get(input);\n\n if (!id) {\n id = inspectionStore.node({\n id: inspectionId('state-reference'),\n kind: 'state',\n label,\n details: { relationship: 'Referenced render state' },\n });\n\n referenceStateIds.set(input, id);\n }\n\n return id;\n }\n\n const referenceComponents = new Map<\n unknown,\n (props: Record<string, unknown>) => JSX.Element\n >();\n const stateScope: RenderStateScope = inheritedStateScope ?? {\n states: createStateReferences(renderStates),\n\n resolve(source) {\n for (const [stateName, input] of Object.entries(renderStates)) {\n if (input === source.input) {\n return stateName === 'default'\n ? (Component as (props: Record<string, unknown>) => JSX.Element)\n : stateComponents[stateName];\n }\n }\n\n let reference = referenceComponents.get(source.input);\n\n if (!reference) {\n reference = createStateComponent(\n source.name,\n source.input,\n false,\n source.fallbackStateName\n );\n\n referenceComponents.set(source.input, reference);\n }\n\n return reference;\n },\n };\n const defaultRenderInput = renderStates.default;\n const createdDefaultState =\n isDeferredRenderState(defaultRenderInput) ||\n isLazyRenderState(defaultRenderInput);\n const defaultRenderDefinition = getSynchronousRenderStateDefinition(\n defaultRenderInput,\n legacyLayoutProps\n ) ?? { render: () => null };\n\n if (\n typeof defaultRenderDefinition !== 'object' ||\n defaultRenderDefinition === null ||\n !('render' in defaultRenderDefinition) ||\n typeof defaultRenderDefinition.render !== 'function'\n ) {\n throw new LayoutConfigurationError(\n 'The \"default\" render state must define a render function'\n );\n }\n\n const defaultState = defaultRenderDefinition as AnyRenderStateDefinition;\n\n if (!inheritedInspection)\n inspectionStore.node({\n id: activeInspection.state,\n kind: 'state',\n label: 'default',\n unresolved: createdDefaultState,\n details: {\n props: mergeLayoutProps(legacyLayoutProps, defaultState.props),\n propSchemas: rawResolvedOptions,\n },\n });\n\n const render = defaultState.render;\n const layoutProps = mergeLayoutProps(legacyLayoutProps, defaultState.props);\n const customLayoutProps = layoutProps?.custom;\n const includeLayoutProps = layoutProps?.include;\n const layoutOptionValues = layoutOptionProps as Record<string, unknown>;\n const resolvedLayoutProps = {\n ...customLayoutProps,\n };\n const layoutContext: ComposableNameContext<\n LayoutResourceKey<Resources>,\n typeof name\n > = {\n resource: layoutOptions.resource,\n name,\n capitalize,\n };\n const validationContext = {\n layoutName: name,\n resource: layoutContext.resource,\n };\n const defaultComposables =\n composables || defaultState.composables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => ({\n ...(composables?.(create, stateScope.states) ?? {}),\n ...defaultState.composables?.(create as never, stateScope.states),\n })\n : undefined;\n const resolvedComposables = defaultComposables\n ? {\n ...resolveLayoutComposables(\n defaultComposables as never,\n layoutContext\n ),\n }\n : undefined;\n\n for (const [key, component] of Object.entries(resolvedComposables ?? {})) {\n const id = inspectionStore.node({\n id: inspectionId('composable'),\n kind: 'composable',\n label: key,\n source: getLayoutDebug(component)?.source,\n details: {\n displayName: (component as { displayName?: string }).displayName,\n relationship: 'declared; may not be rendered',\n },\n });\n\n inspectionStore.edge(activeInspection.state, id, 'declares');\n\n resolvedComposables![key] = trackComposable(\n component,\n inspectionStore,\n id\n );\n\n const reference = (\n component as unknown as Record<symbol, StateComposableSource>\n )[stateReferenceSource];\n\n if (reference) {\n const stateName = Object.entries(renderStates).find(\n ([, input]) => input === reference.input\n )?.[0];\n const target = stateName\n ? stateIds.get(stateName)!\n : getReferenceStateId(reference.input, reference.name);\n\n inspectionStore.edge(id, target, 'references');\n }\n }\n\n const mergedResolvedInProps = { ...resolvedInProps };\n\n for (const {\n props: presetPropDefinitions,\n } of collectComposablePresetEntries(resolvedComposables)) {\n Object.assign(mergedResolvedInProps, presetPropDefinitions);\n }\n\n const composablePresetProps = Object.fromEntries(\n collectComposablePresetEntries(resolvedComposables).map(\n ({ key, props: presetPropDefinitions }) => {\n const presetPropEntries = Object.entries(presetPropDefinitions);\n const validatedDefinitions = Object.fromEntries(\n presetPropEntries.filter(([propKey]) => {\n const includeBehavior = includeLayoutProps?.[propKey];\n\n return (\n includeBehavior === undefined ||\n (allowsConfigPassthrough(includeBehavior) &&\n (isIncludedPropRequired(includeBehavior) ||\n layoutOptionValues[propKey] !== undefined))\n );\n })\n );\n const presetPropValues = Object.fromEntries(\n presetPropEntries.flatMap(([propKey]) =>\n propKey in layoutOptionValues\n ? [[propKey, layoutOptionValues[propKey]]]\n : []\n )\n );\n\n return [\n key,\n validateProps(\n validatedDefinitions as Record<string, AnyBuiltPropDefinition>,\n presetPropValues,\n validationContext\n ),\n ];\n }\n )\n );\n const mergedRenderContext = {\n composables: resolvedComposables as LayoutRenderComposables<Composables>,\n resource: layoutContext.resource,\n resources: createLayoutRenderResourcesAccessor(\n resources as Resources,\n layoutContext.resource\n ),\n name: layoutContext.name,\n inProps: splitInProps,\n } as LayoutRenderContext<Resources, Composables>;\n const stateComponents: Record<\n string,\n (props: Record<string, unknown>) => JSX.Element\n > = {};\n let CreatedDefaultStateComponent:\n | ((props: Record<string, unknown>) => JSX.Element)\n | undefined;\n\n function RenderDefaultState({\n renderProps,\n }: {\n renderProps: LayoutRenderProps<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n }) {\n useLayoutEffect(() => {\n if (CreatedDefaultStateComponent) return;\n\n return inspectionStore.mount(\n activeInspection.layout,\n activeInspection.state,\n ...(resourceId ? [resourceId] : [])\n );\n }, []);\n\n if (CreatedDefaultStateComponent) {\n return <CreatedDefaultStateComponent {...renderProps} />;\n }\n\n return render(renderProps, mergedRenderContext);\n }\n\n function Component(\n props: Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n IncludeProps\n >\n >\n ) {\n const publishResource = useResourceLayoutShellPublisher();\n\n // Report the resource this page renders for so an ancestor `Shell` (from\n // `defineResourceLayout.withLayout`) can resolve `resources.current` for\n // its own render without the consumer threading a route param down to it.\n // A layout effect, not a passive one, so the shell reflects the new\n // resource in the same commit the page mounts — a passive effect would\n // leave one painted frame of stale shell chrome mid-navigation. Degrades\n // to a no-op when rendered without a `Shell` (context defaults to null).\n useLayoutEffect(() => {\n publishResource?.(layoutContext.resource, shellId);\n\n return () => publishResource?.(undefined, shellId);\n }, [publishResource, layoutContext.resource]);\n\n const validatedProps = validateProps(resolvedLayoutProps, props, {\n ...validationContext,\n });\n const includedPropKeys = Object.keys(includeLayoutProps ?? {});\n const includedPropDefinitions = pick(\n mergedResolvedInProps,\n includedPropKeys\n ) as Record<string, unknown>;\n const includedPropValues = {\n ...resolvePropDefinitionValues(includedPropDefinitions),\n } as Record<string, unknown>;\n\n for (const key of includedPropKeys) {\n const definition = mergedResolvedInProps[key];\n const includeBehavior = includeLayoutProps?.[key];\n const callSiteValue = allowsComponentPassthrough(includeBehavior)\n ? readLayoutOptionValue(\n key,\n definition,\n props as Record<string, unknown>\n )\n : undefined;\n const layoutOptionValue = allowsConfigPassthrough(includeBehavior)\n ? readLayoutOptionValue(key, definition, layoutOptionValues)\n : undefined;\n const splitValue = key in splitInProps ? splitInProps[key] : undefined;\n const value = callSiteValue ?? layoutOptionValue ?? splitValue;\n\n if (value !== undefined) {\n includedPropValues[key] = value;\n }\n }\n\n const requiredIncludedPropDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(([key]) =>\n isIncludedPropRequired(includeLayoutProps?.[key])\n )\n );\n const optionalIncludedPropDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(\n ([key]) =>\n !isIncludedPropRequired(includeLayoutProps?.[key]) &&\n includedPropValues[key] !== undefined\n )\n );\n const validatedIncludedProps = validateProps(\n {\n ...requiredIncludedPropDefinitions,\n ...optionalIncludedPropDefinitions,\n } as Record<string, AnyBuiltPropDefinition>,\n includedPropValues,\n validationContext\n );\n const layoutRenderIncludedProps = Object.fromEntries(\n includedPropKeys.flatMap((key) => {\n if (!(key in validatedIncludedProps)) {\n return [];\n }\n\n return [\n [\n toLayoutRenderPropKey(key, mergedResolvedInProps[key]),\n validatedIncludedProps[\n key as keyof typeof validatedIncludedProps\n ],\n ],\n ];\n })\n );\n const layoutRenderProps = {\n ...validatedProps,\n ...layoutRenderIncludedProps,\n } as unknown as LayoutRenderProps<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n\n const rendered = (\n <ResourceProvider resource={layoutContext.resource}>\n <LayoutComposablePresetProvider value={composablePresetProps}>\n <StateComposableContext.Provider\n value={{\n scope: stateScope,\n props: layoutRenderProps,\n definitions: mergedResolvedInProps,\n }}\n >\n <RenderDefaultState renderProps={layoutRenderProps} />\n </StateComposableContext.Provider>\n </LayoutComposablePresetProvider>\n </ResourceProvider>\n );\n\n const ErrorComponent = stateComponents.Error;\n\n return ErrorComponent ? (\n <RenderStateBoundary\n fallback={(error, retry) => (\n <RenderStateRetryContext.Provider value={retry}>\n <ErrorComponent\n error={toResourceStateError(\n String(layoutContext.resource),\n 'default',\n error\n )}\n retry={retry}\n />\n </RenderStateRetryContext.Provider>\n )}\n >\n {rendered}\n </RenderStateBoundary>\n ) : (\n rendered\n );\n }\n\n function createComposition<\n LayoutName extends string,\n const Defined extends MakeComposableOptions<Composables, LayoutName>\n >(compositionOptions: Defined) {\n if (!compositionOptions.components) {\n return {} as ResourceLayoutComposition<LayoutName, Composables>;\n }\n\n return {\n makeComposable: createComposableLayout(\n compositionOptions\n ) as MakeComposable<Composables, LayoutName>,\n };\n }\n\n function createStateComponent(\n stateName: string,\n input: unknown,\n validateStateName = true,\n fallbackStateName = stateName\n ): (props: Record<string, unknown>) => JSX.Element {\n const inspectedId = validateStateName\n ? stateIds.get(stateName)\n : getReferenceStateId(input, stateName);\n\n if (isLazyRenderState(input)) {\n const loadState = input[lazyRenderStateSymbol];\n\n function createLazyState() {\n return lazy(async () => {\n const stateDefinition = await findDefinedRenderState(\n await loadState().catch((error: unknown) => {\n throw new ResourceModuleLoadError(\n String(layoutContext.resource),\n error\n );\n })\n );\n\n if (\n validateStateName &&\n stateDefinition.state !== undefined &&\n stateDefinition.state !== stateName\n ) {\n throw new LayoutConfigurationError(\n `Lazy render state \"${stateDefinition.state}\" cannot be used as \"${stateName}\"`\n );\n }\n\n return {\n default: createLoadedStateComponent(\n validateStateName\n ? stateName\n : stateDefinition.state ?? stateName,\n stateDefinition,\n inspectedId\n ),\n };\n });\n }\n\n function LazyStateComponent(props: Record<string, unknown>) {\n const [, rerender] = useReducer((version) => version + 1, 0);\n const LazyState = useRef(createLazyState());\n const CurrentLazyState = LazyState.current;\n const LoadingComponent =\n fallbackStateName === 'Loading'\n ? undefined\n : stateComponents.Loading;\n const ErrorComponent =\n fallbackStateName === 'Error' ? undefined : stateComponents.Error;\n\n function retry() {\n LazyState.current = createLazyState();\n\n rerender();\n }\n\n const rendered = (\n <Suspense fallback={LoadingComponent ? <LoadingComponent /> : null}>\n <CurrentLazyState {...props} />\n </Suspense>\n );\n\n return ErrorComponent ? (\n <RenderStateBoundary\n fallback={(error, reset) => (\n <RenderStateRetryContext.Provider value={reset}>\n <ErrorComponent\n error={toResourceStateError(\n String(layoutContext.resource),\n stateName,\n error\n )}\n retry={reset}\n />\n </RenderStateRetryContext.Provider>\n )}\n onRetry={retry}\n >\n {rendered}\n </RenderStateBoundary>\n ) : (\n rendered\n );\n }\n\n return LazyStateComponent;\n }\n\n const definition = isDeferredRenderState(input)\n ? input[deferredRenderStateSymbol]\n : typeof input === 'function'\n ? { render: input }\n : input;\n\n if (\n typeof definition !== 'object' ||\n definition === null ||\n !('render' in definition) ||\n typeof definition.render !== 'function'\n ) {\n throw new LayoutConfigurationError(\n `Render state \"${stateName}\" must define a render function`\n );\n }\n\n const StateComponent = createLoadedStateComponent(\n stateName,\n definition as AnyRenderStateDefinition,\n inspectedId\n );\n\n if (!isDeferredRenderState(input)) {\n return StateComponent;\n }\n\n const DeferredState = lazy(() =>\n Promise.resolve({ default: StateComponent })\n );\n\n function DeferredStateComponent(props: Record<string, unknown>) {\n const LoadingComponent =\n fallbackStateName === 'Loading' ? undefined : stateComponents.Loading;\n const ErrorComponent =\n fallbackStateName === 'Error' ? undefined : stateComponents.Error;\n const rendered = (\n <Suspense fallback={LoadingComponent ? <LoadingComponent /> : null}>\n <DeferredState {...props} />\n </Suspense>\n );\n\n return ErrorComponent ? (\n <RenderStateBoundary\n fallback={(error, retry) => (\n <RenderStateRetryContext.Provider value={retry}>\n <ErrorComponent\n error={toResourceStateError(\n String(layoutContext.resource),\n stateName,\n error\n )}\n retry={retry}\n />\n </RenderStateRetryContext.Provider>\n )}\n >\n {rendered}\n </RenderStateBoundary>\n ) : (\n rendered\n );\n }\n\n return DeferredStateComponent;\n }\n\n function createLoadedStateComponent(\n stateName: string,\n definition: AnyRenderStateDefinition,\n inspectedState = stateIds.get(stateName)\n ) {\n if (inspectedState)\n inspectionStore.node({\n id: inspectedState,\n kind: 'state',\n label: stateName,\n unresolved: false,\n source: getLayoutDebug(definition)?.source,\n details: {\n props: mergeLayoutProps(legacyLayoutProps, definition.props),\n propSchemas: rawResolvedOptions,\n },\n });\n\n const stateComposables =\n composables || definition.composables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => ({\n ...(composables?.(create, stateScope.states) ?? {}),\n ...definition.composables?.(create as never, stateScope.states),\n })\n : undefined;\n const stateRender =\n stateName === 'Error'\n ? (\n props: Record<string, unknown>,\n context: Record<string, unknown>\n ) => (\n <RenderStateRetryContext.Consumer>\n {(retry) =>\n definition.render(props, {\n ...context,\n retry,\n })\n }\n </RenderStateRetryContext.Consumer>\n )\n : definition.render;\n const stateLayout = defineResourceLayoutImpl(\n {\n resources,\n options: inProps,\n layout: {\n composables: stateComposables,\n props: mergeLayoutProps(legacyLayoutProps, definition.props),\n render: stateRender,\n },\n } as never,\n stateScope,\n {\n ...activeInspection,\n state: inspectedState ?? getReferenceStateId(definition, stateName),\n }\n );\n const StateComponent = stateLayout.createResourceLayout({\n ...layoutOptions,\n name,\n namespace: false,\n } as never) as ((props: Record<string, unknown>) => JSX.Element) & {\n displayName?: string;\n };\n\n StateComponent.displayName = `${name}.${stateName}`;\n\n return StateComponent;\n }\n\n if (createdDefaultState) {\n CreatedDefaultStateComponent = createStateComponent(\n 'default',\n defaultRenderInput\n );\n }\n\n for (const [stateName, input] of Object.entries(renderStates)) {\n if (stateName === 'default') {\n continue;\n }\n\n if (\n [\n '__proto__',\n 'asComposable',\n 'apply',\n 'arguments',\n 'bind',\n 'call',\n 'caller',\n 'displayName',\n 'length',\n 'makeComposable',\n 'name',\n 'props',\n 'prototype',\n 'resource',\n ].includes(stateName)\n ) {\n throw new LayoutConfigurationError(\n `Render state name \"${stateName}\" is reserved`\n );\n }\n\n stateComponents[stateName] = createStateComponent(stateName, input);\n }\n\n const includedComponentDefinitions = Object.fromEntries(\n Object.keys(includeLayoutProps ?? {}).flatMap((key) => {\n if (\n !allowsComponentPassthrough(includeLayoutProps?.[key]) ||\n !(key in mergedResolvedInProps)\n ) {\n return [];\n }\n\n const definition = mergedResolvedInProps[\n key\n ] as AnyBuiltPropDefinition & {\n optional?: () => AnyBuiltPropDefinition;\n };\n const componentDefinition = isIncludedPropRequired(\n includeLayoutProps?.[key]\n )\n ? definition\n : definition.optional?.() ?? definition;\n\n return [[key, componentDefinition]];\n })\n );\n const previewEnabled =\n !inheritedInspection &&\n (getLayoutDebug(layoutOptions)?.preview ??\n getLayoutDebug(options)?.preview ??\n getLayoutDebug(layout)?.preview) === true;\n const previewTargets = {\n default: Component,\n ...stateComponents,\n } as unknown as Record<\n string,\n (props: Record<string, unknown>) => JSX.Element\n >;\n let previewRoot: object;\n const previewOptions = {\n store: inspectionStore,\n layout: layoutId,\n states: stateIds,\n components: previewTargets,\n fixtures: () =>\n (\n previewRoot as Record<symbol, Record<string, Record<string, unknown>>>\n )[layoutPreviewFixtures],\n };\n const exposedStates = previewEnabled\n ? Object.fromEntries(\n Object.entries(stateComponents).map(([key, component]) => [\n key,\n createPreviewComponent(component, {\n ...previewOptions,\n state: stateIds.get(key)!,\n }),\n ])\n )\n : stateComponents;\n const createdComponent = Object.assign(\n previewEnabled\n ? createPreviewComponent(Component as never, {\n ...previewOptions,\n state: activeInspection.state,\n })\n : Component,\n {\n displayName: name,\n props: undefined as unknown as Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n IncludeProps\n >\n >,\n resource: undefined as unknown as Resource,\n ...createComposition({\n components: resolvedComposables as Composables | undefined,\n name,\n }),\n ...exposedStates,\n [definedResourceLayoutComponentSymbol]: true as const,\n }\n );\n\n previewRoot = createdComponent;\n\n inspectionStore.attach(createdComponent);\n\n const rootComponent = attachComponentPropDefinitions(createdComponent, {\n ...customLayoutProps,\n ...includedComponentDefinitions,\n } as InPropsObject);\n\n if (namespace) {\n if (Object.prototype.hasOwnProperty.call(stateComponents, 'Root')) {\n throw new LayoutConfigurationError(\n 'Render state name \"Root\" is reserved when namespace is true'\n );\n }\n\n return { Root: rootComponent, ...exposedStates };\n }\n\n return rootComponent;\n }) as unknown as CreateResourceLayoutFnImpl<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n >;\n\n const createTopLevelMakeComposable = () => {\n return (options: Record<string, unknown>) => {\n const layout = definedResourceLayout({\n ...options,\n namespace: false,\n } as never);\n\n if (\n !('makeComposable' in layout) ||\n typeof layout.makeComposable !== 'function'\n ) {\n throw new LayoutConfigurationError(\n 'makeComposable requires composables to be defined in the layout'\n );\n }\n\n return (layout.makeComposable as () => unknown)();\n };\n };\n\n function getComponentPropDefinitions(resource: LayoutResourceKey<Resources>) {\n const componentName = 'ScopedResourceComponent';\n const rawResolvedOptions =\n typeof inProps === 'function'\n ? inProps({\n resource: resourcesEnum,\n name: createProp.string().literal(componentName),\n })\n : inProps;\n const { resolvedInProps } = splitLayoutInProps(\n rawResolvedOptions as Record<string, unknown>\n );\n const renderStates = (\n typeof layout.render === 'function'\n ? { default: layout.render }\n : layout.render\n ) as Record<string, unknown>;\n const defaultState = getSynchronousRenderStateDefinition(\n renderStates.default,\n layout.props\n );\n const stateReferences = createStateReferences(renderStates);\n const defaultComposables =\n layout.composables || defaultState?.composables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => ({\n ...(layout.composables?.(create, stateReferences) ?? {}),\n ...defaultState?.composables?.(create as never, stateReferences),\n })\n : undefined;\n const resolvedComposables = defaultComposables\n ? resolveLayoutComposables(defaultComposables, {\n resource,\n name: componentName,\n capitalize,\n })\n : undefined;\n\n for (const {\n props: presetPropDefinitions,\n } of collectComposablePresetEntries(resolvedComposables)) {\n Object.assign(resolvedInProps, presetPropDefinitions);\n }\n\n return {\n ...resolvedInProps,\n ...mergeLayoutProps(layout.props, defaultState?.props)?.custom,\n };\n }\n\n const { createLayoutForResourceBuilder, forResource } = createForResource<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >({\n createResourceLayout: definedResourceLayout as never,\n resolveLayoutOptionDefaults,\n });\n const forResources = createForResources<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >({\n createLayoutForResource: createLayoutForResourceBuilder,\n ...(layout.composables\n ? { createMakeComposableLayout: createTopLevelMakeComposable }\n : {}),\n createResourceLayout: definedResourceLayout as never,\n getComponentPropDefinitions,\n });\n\n const createResourceLayoutExtras: {\n forResource: CreateLayoutForResource<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n forResources: CreateResourceLayoutForResourcesFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n makeComposable?: ReturnType<typeof createTopLevelMakeComposable>;\n } = {\n forResource,\n forResources,\n };\n\n if (layout.composables) {\n createResourceLayoutExtras.makeComposable = createTopLevelMakeComposable();\n }\n\n const createResourceLayout = Object.assign(\n definedResourceLayout,\n createResourceLayoutExtras\n ) as CreateResourceLayoutFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n >;\n\n const createResourceLinks = createResourceLinksFn(resources);\n\n return (inspection?.store.attach ?? ((value: object) => value))({\n createResourceConfig,\n createResourceLayout,\n createResourceLinks,\n resources: resourcesAccessor,\n ResourceProvider,\n useResource,\n }) as DefinedResourceLayout<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n >;\n}\n\ntype NonEmptyResourceDefinitions = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/**\n * Factory returned by {@link DefineResourceLayout.forResources}.\n */\nexport type DefineResourceLayoutForResourcesFactory<\n BaseResources extends NonEmptyResourceDefinitions\n> = {\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n const ExtraResources extends ReadonlyArray<ResourceDefinition> = [],\n Options extends InPropsDefinition<\n [...BaseResources, ...ExtraResources]\n > = {},\n Composables extends ComposableComponents = {},\n Namespace extends boolean = false\n >(\n options: Omit<\n CreateViewMapRenderStatesOptions<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n {},\n {},\n Render,\n Namespace\n >,\n 'resources'\n > & { resources?: AssertUnreservedResources<ExtraResources> }\n ): DefinedResourceLayoutFromStates<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n Render,\n Namespace\n >;\n <\n const ExtraResources extends ReadonlyArray<ResourceDefinition> = [],\n Options extends InPropsDefinition<\n [...BaseResources, ...ExtraResources]\n > = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n Namespace extends boolean = false\n >(\n options: Omit<\n CreateViewMapFunctionRenderOptions<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Namespace\n >,\n 'resources'\n > & { resources?: AssertUnreservedResources<ExtraResources> }\n ): DefinedResourceLayout<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n {},\n Namespace\n >;\n};\n\n/**\n * Binds one or more resources, then accepts the remaining\n * {@link defineResourceLayout} options (with optional extra `resources`).\n */\nexport type DefineResourceLayoutForResources = <\n const Resources extends NonEmptyResourceDefinitions\n>(\n ...resources: Resources\n) => DefineResourceLayoutForResourcesFactory<Resources>;\n\ntype IntersectStates<Union> = (\n Union extends unknown ? (value: Union) => void : never\n) extends (value: infer Intersection) => void\n ? Intersection\n : {};\n\ntype AllStateComposables<States> = IntersectStates<\n {\n [State in keyof States]: RenderStateComposables<\n UnwrapRenderState<States[State]>\n >;\n }[keyof States]\n> extends infer Components extends ComposableComponents\n ? Components\n : {};\n\ntype UnionKeys<U> = U extends unknown ? keyof U : never;\n\ntype UnionValue<U, K extends PropertyKey> = U extends unknown\n ? K extends keyof U\n ? U[K]\n : never\n : never;\n\ntype CombinedInclude<Value, Normalized = NormalizedIncludedPropBehavior<Value>> = [\n Extract<Normalized, true | { visibility: 'required'; passthrough: 'config' }>\n] extends [never]\n ? 'optional' extends Normalized\n ? 'optional'\n : [Extract<Normalized, { visibility: 'optional' }>] extends [never]\n ? Value\n : 'optional'\n : true;\n\ntype AllStateIncludes<\n States,\n Union = {\n [State in keyof States]: RenderStateIncludeProps<States[State]>;\n }[keyof States]\n> = { [K in UnionKeys<Union>]: CombinedInclude<UnionValue<Union, K>> };\n\nexport type MergeContract<Base, Local> = Omit<Base, keyof Local> & Local;\n\ntype PlainStateWithDefaults<\n Input,\n Include,\n Custom extends InPropsObject\n> = UnwrapRenderState<Input> & {\n props: {\n include: MergeContract<Include, RenderStateIncludeProps<Input>>;\n custom: MergeContract<Custom, RenderStateCustomProps<Input>>;\n };\n};\n\ntype StateWithDefaults<\n Input,\n Include,\n Custom extends InPropsObject\n> = Input extends import('./render-state').DeferredRenderState<\n infer D extends AnyRenderStateDefinition\n>\n ? import('./render-state').DeferredRenderState<\n PlainStateWithDefaults<D, Include, Custom>\n >\n : Input extends import('./render-state').LazyRenderState<\n infer D extends AnyRenderStateDefinition\n >\n ? import('./render-state').LazyRenderState<\n PlainStateWithDefaults<D, Include, Custom>\n >\n : PlainStateWithDefaults<Input, Include, Custom>;\n\ntype StatesWithDefaults<States, Include, Custom extends InPropsObject> = {\n [K in keyof States]: StateWithDefaults<States[K], Include, Custom>;\n};\n\nexport type DefinedResourceLayoutFromStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Render extends { default: unknown },\n DefaultNamespace extends boolean = false,\n BaseInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n BaseCustom extends InPropsObject = {},\n Naming extends LayoutNameInput<any, any> | undefined = undefined\n> = DefinedResourceLayout<\n Resources,\n Options,\n Composables & AllStateComposables<Render>,\n AllStateIncludes<\n StatesWithDefaults<Render, BaseInclude, BaseCustom>\n > extends infer Include extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & AllStateComposables<Render>\n >\n ? Include\n : {},\n MergeContract<BaseCustom, RenderStateCustomProps<Render['default']>>,\n StatesWithDefaults<Render, BaseInclude, BaseCustom>,\n DefaultNamespace,\n Naming\n>;\n\n/** Defines either a render-state map or a single render callback. */\nexport type DefineResourceLayoutFn = {\n // State maps come first so empty objects receive state-key completions.\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n const Render extends { default: unknown } & Record<string, unknown>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n Namespace extends boolean = false,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n >(\n options: CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Render,\n Namespace,\n Naming\n >\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n Composables,\n Render,\n Namespace,\n IncludeProps,\n CustomProps,\n Naming\n >;\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n InProps,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n Namespace extends boolean = false,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n >(\n options: CreateViewMapFunctionRenderOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Namespace,\n Naming\n >\n ): DefinedResourceLayout<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n {},\n Namespace,\n Naming\n >;\n};\n\n/**\n * Captures a `resources` array with its literal tuple type intact, so it can be\n * declared separately from the `defineResourceLayout` call without needing an\n * `as const` assertion.\n */\nexport type DefineResourcesFn = <\n const Resources extends ReadonlyArray<ResourceDefinition>\n>(\n ...resources: Resources\n) => Resources;\n\nfunction defineResources<\n const Resources extends ReadonlyArray<ResourceDefinition>\n>(...resources: Resources): Resources {\n return resources;\n}\n\nexport type DefineResourceLayout = DefineResourceLayoutFn & {\n forResources: DefineResourceLayoutForResources;\n /**\n * Builds a strongly-typed `resources` array to pass to `defineResourceLayout`\n * (or `defineResourceLayout.forResources`) without an `as const` assertion.\n */\n defineResources: DefineResourcesFn;\n /**\n * Like {@link defineResourceLayout}, but also returns a `Shell` component.\n *\n * With plain `defineResourceLayout`, every page is wrapped in its own\n * `createResourceLayout` component, so navigating between resources unmounts\n * one page component and mounts another — the shared chrome the `render`\n * produces (a sidebar, a header, subscriptions, observers) is rebuilt every\n * time. `withLayout` splits that chrome into a `shell` that mounts once,\n * above the router outlet, and stays mounted across navigation; pages mount\n * and unmount inside it and report their resource up automatically.\n */\n withLayout: DefineResourceLayoutWithLayoutFn;\n};\n\nfunction defineResourceLayoutForResources<\n const Resources extends NonEmptyResourceDefinitions\n>(\n ...baseResources: Resources\n): DefineResourceLayoutForResourcesFactory<Resources> {\n return ((\n options: Omit<CreateViewMapOptions<Resources>, 'resources'> & {\n resources?: ReadonlyArray<ResourceDefinition>;\n }\n ) => {\n const { resources: extraResources, ...rest } = options;\n const resources = extraResources\n ? [...baseResources, ...extraResources]\n : [...baseResources];\n\n return defineResourceLayoutImpl({\n ...rest,\n resources,\n } as never);\n }) as unknown as DefineResourceLayoutForResourcesFactory<Resources>;\n}\n\n/* -------------------------------------------------------------------------- */\n/* defineResourceLayout.withLayout — a once-mounted application shell */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Render context passed as the second argument to\n * {@link ShellLayoutDefinition.render}.\n *\n * The same shape as a per-resource `render` context (`composables`,\n * `resources`, `name`, `inProps`), with two differences that follow from the\n * shell being mounted once above the router outlet rather than per page:\n *\n * - `resource` / `resources.current` are `LayoutResourceKey | undefined`. The\n * shell outlives any single page, so the current resource is whatever the\n * mounted page last reported (or the `resource` prop, or nothing yet).\n * - `children` is the shell's content region. Render it where page content\n * belongs; it is already wrapped so mounted pages report their resource back.\n */\nexport type ShellRenderContext<\n Resources extends ReadonlyArray<ResourceDefinition>,\n ShellComposables extends ComposableComponents\n> = {\n composables: LayoutRenderComposables<ShellComposables>;\n inProps: Record<string, unknown>;\n /**\n * The resource currently rendered in the outlet, or `undefined` when no\n * per-resource page is mounted and no `resource` prop was passed.\n */\n resource: LayoutResourceKey<Resources> | undefined;\n /**\n * Resources accessor for this definition. `current` follows `resource` above\n * and may be `undefined`.\n */\n resources: LayoutResourcesAccessor<Resources> & {\n readonly current: LayoutResourceKey<Resources> | undefined;\n };\n name: string;\n /**\n * The shell's content region — typically a router `<Outlet />`. Render it\n * where page content belongs.\n */\n children: ReactNode;\n};\n\n/**\n * The `shell` block of a {@link defineResourceLayout.withLayout} call: the\n * chrome that mounts once and stays mounted while pages navigate inside it.\n *\n * Mirrors {@link LayoutDefinition} (`props`, `composables`, `render`) so the\n * two blocks read the same, plus an optional `name`.\n */\nexport type ShellLayoutDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n ShellComposables extends ComposableComponents,\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n >,\n ShellCustomProps extends InPropsObject\n> = {\n /**\n * Stable name for the shell component (React DevTools) and the base for any\n * resource-scoped composable names. Defaults to `'ResourceLayoutShell'`.\n */\n name?: string;\n props?: LayoutProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>\n ) => ShellComposables;\n render: (\n props: LayoutRenderProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >,\n context: ShellRenderContext<Resources, ShellComposables>\n ) => JSX.Element;\n};\n\n/**\n * Props accepted by the `Shell` component from\n * {@link defineResourceLayout.withLayout}.\n */\nexport type ResourceLayoutShellProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n ShellComposables extends ComposableComponents,\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n >,\n ShellCustomProps extends InPropsObject\n> = Show<\n ResolveProps<ShellCustomProps> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, ShellComposables>,\n ShellIncludeProps\n > & {\n /**\n * The resource the shell renders for. Overrides the value reported by the\n * page mounted in `children`. Always available — pass it from tests,\n * stories, or a route that renders non-library content but still wants\n * the shell.\n */\n resource?: LayoutResourceKey<Resources>;\n /** The shell's content region — typically a router `<Outlet />`. */\n children: ReactNode;\n }\n>;\n\n/**\n * The once-mounted application shell returned from\n * {@link defineResourceLayout.withLayout}. Wrap the router outlet with it.\n */\nexport type ResourceLayoutShellComponent<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n ShellComposables extends ComposableComponents = {},\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {}\n> = BaseComponent<\n string,\n ResourceLayoutShellProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >\n> & {\n (\n props: ResourceLayoutShellProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >\n ): JSX.Element;\n};\n\n/**\n * Options for {@link defineResourceLayout.withLayout}: everything\n * {@link defineResourceLayout} accepts, plus a required `shell`, and with the\n * per-resource `layout.render` made optional.\n */\nexport type CreateResourceLayoutWithLayoutOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n ShellComposables extends ComposableComponents = {},\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n Render = LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n Namespace extends boolean = false\n> = {\n /** Default namespace mode for created layouts. Defaults to false. */\n namespace?: Namespace;\n /**\n * An array of valid resource names to support. Nested sub-resource slugs that\n * collide with config keys (`component`, `detail`, `new`, …) are reserved.\n */\n resources: AssertUnreservedResources<Resources>;\n /**\n * The options that are passed into the created resource layout. Shared by the\n * shell and the per-resource layout, so an `include` on either side can draw\n * from the same definitions.\n */\n options?: Options;\n /**\n * The once-mounted shell. The returned `Shell` wraps the router outlet and\n * stays mounted across resource navigation, so its composables (a persistent\n * sidebar, header, breadcrumb container, …) keep their state and DOM while\n * pages mount and unmount inside it.\n */\n shell: ShellLayoutDefinition<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n /**\n * Per-resource content. Optional here: when the shell renders the whole\n * chrome, a page is just a slot — omit `render` and the generated component\n * renders its own `children` into the shell's outlet. Provide it to give a\n * resource its own header, actions, or per-page structure.\n */\n layout?: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render'\n > & {\n render?:\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >\n | (Render extends (...args: any[]) => any\n ? never\n : Render &\n ContextualInlineRenderStates<Resources, Options, Composables>);\n };\n};\n\n/**\n * {@link DefinedResourceLayout} plus the once-mounted `Shell`.\n */\nexport type DefinedResourceLayoutWithShell<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n ShellComposables extends ComposableComponents = {},\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false\n> = DefinedResourceLayout<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace\n> & {\n /**\n * The application shell. Mount it once, wrapping the router outlet:\n *\n * ```tsx\n * function AdminRoute() {\n * const resource = Route.useParams({ select: (p) => p.resource });\n * return (\n * <Shell resource={resource}>\n * <Outlet />\n * </Shell>\n * );\n * }\n * ```\n *\n * Passing `resource` is optional: a page created by `createResourceLayout`\n * reports its own resource to the shell automatically. Pass it for routes\n * that render non-library content, or in tests and stories.\n */\n Shell: ResourceLayoutShellComponent<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n};\n\n/**\n * Signature of {@link defineResourceLayout.withLayout}.\n */\n// Preserve state-key completions while the caller is building an empty map.\nexport type DefineResourceLayoutWithLayoutFn = {\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n const Render extends { default: unknown } & Record<string, unknown>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n ShellComposables extends ComposableComponents = {},\n const ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n Namespace extends boolean = false\n >(\n options: Omit<\n CreateResourceLayoutWithLayoutOptions<\n Resources,\n Options,\n Composables,\n {},\n {},\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps,\n LayoutRenderFunction<Resources, Options, Composables, {}, {}>,\n Namespace\n >,\n 'layout'\n > & {\n layout: CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n Composables,\n {},\n {},\n Render,\n Namespace\n >['layout'];\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n Composables,\n Render,\n Namespace\n > & {\n Shell: ResourceLayoutShellComponent<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n };\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n ShellComposables extends ComposableComponents = {},\n const ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n Namespace extends boolean = false\n >(\n options: CreateResourceLayoutWithLayoutOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps,\n LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n Namespace\n >\n ): DefinedResourceLayoutWithShell<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps,\n {},\n Namespace\n >;\n};\n\n/**\n * Loose runtime shape of a `shell` block, used by the impl below.\n */\ntype ShellLayoutRuntime = {\n name?: string;\n composables?: (create: unknown) => ComposableComponents;\n props?: {\n include?: Record<string, unknown>;\n custom?: Record<string, unknown>;\n };\n render: (\n props: Record<string, unknown>,\n context: Record<string, unknown>\n ) => JSX.Element;\n};\n\n/**\n * Builds the `Shell` component. Kept beside {@link defineResourceLayoutImpl} so\n * it can reuse the same private prop-resolution helpers.\n *\n * Unlike a per-resource component, the shell re-reads the current resource on\n * every render (reported by the mounted page) so resource-scoped composable\n * *names* can update. Composable *component identities* are resolved once and\n * kept stable: React reconciles by element type, so recreating\n * `composables.Layout` each render would remount wrapWith targets, sidebar\n * state, and the outlet. Display names are synced onto those stable functions\n * when the resource changes.\n *\n * @param shellId - Identity of the owning `withLayout` definition. The shell\n * only accepts resource reports tagged with this id, so a page or pane from a\n * different definition rendered in the outlet cannot corrupt its state.\n */\nfunction createResourceLayoutShellComponent(\n resources: ReadonlyArray<ResourceDefinition>,\n inProps: InPropsObject | ((opts: Record<string, unknown>) => InPropsObject),\n shell: ShellLayoutRuntime,\n shellId: symbol\n) {\n const shellName = shell.name ?? 'ResourceLayoutShell';\n // `resources` is the wide `ResourceDefinition[]` here (not the const generic\n // that `defineResourceLayoutImpl` captures), so the normalize/enum types are\n // erased to keep TS from trying to instantiate them structurally. Only the\n // runtime key list matters — the shell validates against it, it does not\n // surface it in a public type.\n const resourceKeys = Object.keys(\n normalizeResources(resources as never) as Record<string, unknown>\n );\n const resourcesEnum = createPrimitivePropBuilder('string').enum(\n resourceKeys as never\n );\n\n // `options` may be a function of `{ resource, name }`. The shell has no single\n // resource, so — like the component path in `defineResourceLayoutImpl` — the\n // enum stands in for `resource` while resolving the definitions.\n const rawResolvedOptions =\n typeof inProps === 'function'\n ? inProps({\n resource: resourcesEnum,\n name: createProp.string().literal(shellName),\n })\n : inProps;\n const { resolvedInProps, splitInProps } = splitLayoutInProps(\n rawResolvedOptions as Record<string, unknown>\n );\n\n const includeShellProps = shell.props?.include;\n const includeShellPropKeys = Object.keys(includeShellProps ?? {});\n const shellCustomDefinitions = {\n ...(shell.props?.custom ?? {}),\n } as Record<string, AnyBuiltPropDefinition>;\n\n function syncShellComposableDisplayNames(\n stable: ComposableComponents,\n resource: string\n ) {\n if (!shell.composables) {\n return;\n }\n\n const named = resolveLayoutComposables(\n shell.composables as never,\n {\n resource,\n name: shellName,\n capitalize,\n } as never\n ) as ComposableComponents;\n\n for (const [key, component] of Object.entries(named)) {\n const stableComponent = stable[key];\n\n if (\n typeof stableComponent === 'function' &&\n typeof component === 'function' &&\n 'displayName' in component\n ) {\n (stableComponent as { displayName?: string }).displayName = (\n component as { displayName?: string }\n ).displayName;\n }\n }\n }\n\n function Shell(props: Record<string, unknown>) {\n const { children: outlet, resource: resourceProp } = props as {\n children: ReactNode;\n resource?: string;\n };\n\n // Which resource is currently in the outlet. A per-resource page reports its\n // own resource here on mount (see the layout effect in `Component`);\n // `undefined` between pages or on a route with no per-resource layout. An\n // explicit `resource` prop always wins.\n const [reportedResource, setReportedResource] = useState<\n string | undefined\n >(undefined);\n const publishResource = useCallback<ResourceLayoutShellPublisher>(\n (resource, ownerId) => {\n // Ignore reports from components that belong to a different\n // `defineResourceLayout` definition — they share this context but their\n // resource is unrelated to this shell.\n if (ownerId !== shellId) {\n return;\n }\n\n setReportedResource(resource);\n },\n []\n );\n const resource = resourceProp ?? reportedResource;\n\n // The outlet subtree must not re-render when `reportedResource` changes —\n // only the shell chrome should. Memoising the wrapped element lets React\n // bail out of reconciling the page while, say, the breadcrumb label updates.\n const shellChildren = useMemo(\n () => (\n <ResourceLayoutShellPublisherContext.Provider value={publishResource}>\n {outlet}\n </ResourceLayoutShellPublisherContext.Provider>\n ),\n [outlet, publishResource]\n );\n\n // Resolve composables once so `<composables.Layout>` keeps a stable element\n // type across Shell re-renders (including the layout-effect resource report).\n // Re-resolving every render would allocate new component functions and React\n // would remount the whole chrome tree. Names still track the live resource\n // via {@link syncShellComposableDisplayNames}.\n const composablesRef = useRef<ComposableComponents | undefined>(undefined);\n\n if (shell.composables) {\n const nameContextResource = resource ?? '';\n\n if (!composablesRef.current) {\n composablesRef.current = resolveLayoutComposables(\n shell.composables as never,\n {\n resource: nameContextResource,\n name: shellName,\n capitalize,\n } as never\n ) as ComposableComponents;\n } else {\n syncShellComposableDisplayNames(\n composablesRef.current,\n nameContextResource\n );\n }\n }\n\n const resolvedComposables = composablesRef.current;\n const validationContext = {\n layoutName: shellName,\n resource: resource ?? '',\n };\n\n const mergedResolvedInProps = { ...resolvedInProps } as Record<\n string,\n unknown\n >;\n\n for (const {\n props: presetPropDefinitions,\n } of collectComposablePresetEntries(resolvedComposables)) {\n Object.assign(mergedResolvedInProps, presetPropDefinitions);\n }\n\n // Included props: definition-time defaults from `options`, overridden by\n // anything passed to `<Shell>` (component passthrough). Computed before\n // preset validation so config-passthrough includes can reuse the defaults.\n const includedPropDefinitions = pick(\n mergedResolvedInProps,\n includeShellPropKeys\n ) as Record<string, unknown>;\n const includedPropValues = {\n ...resolvePropDefinitionValues(includedPropDefinitions),\n } as Record<string, unknown>;\n\n for (const key of includeShellPropKeys) {\n const definition = mergedResolvedInProps[key];\n const behavior = includeShellProps?.[key];\n const callSiteValue = allowsComponentPassthrough(behavior)\n ? readLayoutOptionValue(key, definition, props)\n : undefined;\n // Config passthrough has no create-time call on Shell; still honour\n // literal / split defaults from `options` when present.\n const configValue = allowsConfigPassthrough(behavior)\n ? readLayoutOptionValue(key, definition, {\n ...includedPropValues,\n ...splitInProps,\n })\n : undefined;\n const splitValue = key in splitInProps ? splitInProps[key] : undefined;\n const value = callSiteValue ?? configValue ?? splitValue;\n\n if (value !== undefined) {\n includedPropValues[key] = value;\n }\n }\n\n // Preset props: Shell has no create-time call. Component-passthrough values\n // come from `<Shell>` props; config-passthrough values only from definition\n // defaults. Required config includes without a default are omitted from\n // validation — they are not typed on Shell and cannot be supplied.\n const composablePresetProps = Object.fromEntries(\n collectComposablePresetEntries(resolvedComposables).map(\n ({ key, props: presetPropDefinitions }) => {\n const entries = Object.entries(presetPropDefinitions);\n const validatedDefinitions = Object.fromEntries(\n entries.filter(([propKey]) => {\n const behavior = includeShellProps?.[propKey];\n\n if (behavior === undefined) {\n return true;\n }\n\n if (allowsComponentPassthrough(behavior)) {\n return true;\n }\n\n if (allowsConfigPassthrough(behavior)) {\n return includedPropValues[propKey] !== undefined;\n }\n\n return false;\n })\n );\n const values = Object.fromEntries(\n entries.flatMap(([propKey]) => {\n if (propKey in props) {\n return [[propKey, props[propKey]]];\n }\n\n if (includedPropValues[propKey] !== undefined) {\n return [[propKey, includedPropValues[propKey]]];\n }\n\n return [];\n })\n );\n\n return [\n key,\n validateProps(\n validatedDefinitions as Record<string, AnyBuiltPropDefinition>,\n values,\n validationContext\n ),\n ];\n }\n )\n );\n\n const validatedCustomProps = validateProps(\n shellCustomDefinitions,\n props,\n validationContext\n );\n\n const requiredIncludedDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(([key]) => {\n const behavior = includeShellProps?.[key];\n\n if (!isIncludedPropRequired(behavior)) {\n return false;\n }\n\n // Component passthrough stays required on `<Shell>` (and is typed there).\n if (allowsComponentPassthrough(behavior)) {\n return true;\n }\n\n // Config passthrough: only require when a definition-time value exists.\n return includedPropValues[key] !== undefined;\n })\n );\n const optionalIncludedDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(\n ([key]) =>\n !isIncludedPropRequired(includeShellProps?.[key]) &&\n includedPropValues[key] !== undefined\n )\n );\n const validatedIncludedProps = validateProps(\n {\n ...requiredIncludedDefinitions,\n ...optionalIncludedDefinitions,\n } as Record<string, AnyBuiltPropDefinition>,\n includedPropValues,\n validationContext\n );\n const renderIncludedProps = Object.fromEntries(\n includeShellPropKeys.flatMap((key) =>\n key in validatedIncludedProps\n ? [\n [\n toLayoutRenderPropKey(key, mergedResolvedInProps[key]),\n validatedIncludedProps[\n key as keyof typeof validatedIncludedProps\n ],\n ],\n ]\n : []\n )\n );\n\n const renderProps = { ...validatedCustomProps, ...renderIncludedProps };\n const renderContext = {\n composables: resolvedComposables,\n resource,\n resources: createLayoutRenderResourcesAccessor(\n resources as ReadonlyArray<ResourceDefinition>,\n resource as never\n ),\n name: shellName,\n inProps: splitInProps,\n children: shellChildren,\n };\n\n const rendered = shell.render(renderProps, renderContext);\n\n return resolvedComposables ? (\n <LayoutComposablePresetProvider value={composablePresetProps}>\n {rendered}\n </LayoutComposablePresetProvider>\n ) : (\n rendered\n );\n }\n\n return Object.assign(Shell, {\n displayName: shellName,\n props: undefined as never,\n });\n}\n\n/**\n * Implementation of {@link defineResourceLayout.withLayout}. Delegates the\n * config / links / `createResourceLayout` pieces to {@link defineResourceLayoutImpl}\n * and adds the {@link createResourceLayoutShellComponent | Shell}.\n */\nfunction defineResourceLayoutWithLayoutImpl(\n options: Record<string, unknown>\n): Record<string, unknown> {\n const {\n shell,\n layout,\n resources,\n options: inProps,\n } = options as {\n shell: ShellLayoutRuntime;\n layout?: {\n composables?: unknown;\n props?: { include?: unknown; custom?: Record<string, unknown> };\n render?: (\n props: Record<string, unknown>,\n context: unknown\n ) => JSX.Element;\n };\n resources: ReadonlyArray<ResourceDefinition>;\n options?:\n | InPropsObject\n | ((opts: Record<string, unknown>) => InPropsObject);\n };\n\n // The per-resource `render` is optional under `withLayout`. When omitted, the\n // page is a pure content slot: give it a `children` prop (so\n // `<UsersPage>{content}</UsersPage>` type-checks and works) and a render that\n // drops that content into the shell's outlet. An explicit `render` is passed\n // through untouched.\n const resolvedLayout = layout?.render\n ? layout\n : {\n ...layout,\n props: {\n ...layout?.props,\n custom: {\n children: createProp.component({ type: 'ReactNode' }).optional(),\n ...(layout?.props?.custom ?? {}),\n },\n },\n render: (pageProps: Record<string, unknown>) => (\n <>{(pageProps.children as ReactNode) ?? null}</>\n ),\n };\n\n // Ties the shell to the pages created by *its* `createResourceLayout`. Pages\n // from other definitions rendered in the outlet carry a different id (or\n // none) and are ignored by the shell's resource tracking.\n const shellId = Symbol('resourceLayoutShell');\n\n const base = defineResourceLayoutImpl({\n [layoutDebug]: getLayoutDebug(options),\n resources,\n options: inProps,\n layout: resolvedLayout,\n namespace: options.namespace,\n shellId,\n } as never) as Record<string, unknown>;\n\n const Shell = createResourceLayoutShellComponent(\n resources,\n (inProps ?? {}) as never,\n shell,\n shellId\n );\n\n return { ...base, Shell };\n}\n\nexport const defineResourceLayout: DefineResourceLayout = Object.assign(\n defineResourceLayoutImpl as DefineResourceLayoutFn,\n {\n forResources: defineResourceLayoutForResources,\n defineResources,\n withLayout:\n defineResourceLayoutWithLayoutImpl as unknown as DefineResourceLayoutWithLayoutFn,\n }\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"define-layout.cjs","names":["ReactComponent","RenderStateFallback","ResourceModuleLoadError","ResourceRenderError","createIsValidResourceFn","normalizeResourceDefinitions","capitalize","getIncludedPropBehavior","functionalUpdate","isLazyRenderState","isDeferredRenderState","deferredRenderStateSymbol","isResourceConfigComponentKey","InvalidConfigError","lazyDefaultsSymbol","inspectDefinition","MissingResourceProviderError","normalizeResources","toResourceEnum","LayoutConfigurationError","createProp","createStateReferences","mergeLayoutProps","trackComposable","stateReferenceSource","RenderStateNameContext","ReferencedRenderStateContext","useResourceLayoutShellPublisher","LazyFallbackPropsContext","pick","LayoutComposablePresetProvider","StateComposableContext","lazyLoaderSymbol","lazyOptionsSymbol","lazyInspectionSymbol","LazyResourceStateNotFoundError","LazyBoundary","Suspense","layoutPreviewFixtures","createPreviewComponent","lazyStatesSymbol","definedResourceLayoutComponentSymbol","createForResource","createForResources","createResourceLinksFn","ResourceLayoutShellPublisherContext","layoutDebug"],"sources":["../../src/create-config/define-layout.tsx"],"sourcesContent":["import {\n RenderStateNameContext,\n ReferencedRenderStateContext,\n RenderStateFallback,\n} from './render-state-context';\nimport type { OptionalStateChildren } from './render-state';\nimport { LazyBoundary } from '../lazy/lazy-boundary';\nimport { LazyFallbackPropsContext } from '../lazy/fallback-props';\nimport { lazyDefaultsSymbol, lazyStatesSymbol, type LazyResourceStates } from '../lazy/types';\nimport {\n stateReferenceSource,\n type StateComposableSource,\n} from './state-composable';\nimport type {\n LayoutNameInput,\n LayoutNameCallback,\n LayoutNameResolver,\n ResolvedLayoutName,\n} from './layout-name';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport { createPreviewComponent } from './preview';\nimport {\n getLayoutDebug,\n layoutDebug,\n layoutPreviewFixtures,\n inspectionId,\n} from '@jfdevelops/react-layout-devtools-core';\nimport {\n inspectDefinition,\n trackComposable,\n type ActiveInspection,\n} from './inspection';\nimport {\n Component as ReactComponent,\n lazy,\n createContext,\n type JSX,\n type ReactNode,\n Suspense,\n useContext,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n type ComposableComponents,\n type ComposableNameContext,\n type ComposableResourceLayout,\n type CreateLayoutComposable,\n collectComposablePresetEntries,\n LayoutComposablePresetProvider,\n MakeComposable,\n makeComposable,\n MakeComposableOptions,\n RequiredPresetLayoutProps,\n resolveLayoutComposables,\n} from '@jfdevelops/react-layout-composables';\nimport {\n LayoutConfigurationError,\n MissingResourceProviderError,\n ResourceModuleLoadError,\n ResourceRenderError,\n LazyResourceStateNotFoundError,\n} from '../errors';\nimport {\n type AnyBuiltPropDefinition,\n attachComponentPropDefinitions,\n componentPropDefinitionsSymbol,\n createPrimitivePropBuilder,\n createProp,\n type ResolveLayoutProps,\n type ResolveProps,\n resolvePropDefinitionValues,\n validateProps,\n} from '@jfdevelops/react-layout-validator';\nimport {\n IncludedProps,\n IncludedComponentPropDefinitions,\n type IncludedPropVisibility,\n type NormalizedIncludedPropBehavior,\n getIncludedPropBehavior,\n InferredInProps,\n InPropsDefinition,\n InPropsObject,\n LayoutRenderProps,\n MergedLayoutInProps,\n ResolvedIncludedComponentProps,\n ResolvedIncludedConfigProps,\n ResolvedIncludedProps,\n} from '../props';\nimport {\n createIsValidResourceFn,\n normalizeResourceDefinitions,\n normalizeResources,\n toResourceEnum,\n type LayoutResourceKey,\n type NormalizedResourceDefinitions,\n type ResourceDefinition,\n type ResourceDefinitionValue,\n} from '../resource';\nimport { BaseComponent, functionalUpdate, pick, Show, Updater } from '../utils';\nimport { capitalize } from '../utils/capitalize';\nimport { InvalidConfigError } from '../errors';\nimport { isResourceConfigComponentKey } from './component-keys';\nimport {\n type CreateResourceConfigFn,\n createResourceConfig,\n} from './get-component';\nimport type { AssertUnreservedResources } from './types';\nimport {\n createResourceLinksFn,\n type CreateResourceLinksFn,\n} from './create-resource-links';\nimport {\n createForResource,\n type CreateLayoutForResource,\n type CreateResourceLayoutOptions,\n type CreateResourceLayoutOptionsBase,\n} from './for-resource';\nimport {\n createForResources,\n type CreateResourceLayoutForResourcesFn,\n} from './for-resources';\nimport {\n type ResourceLayoutShellPublisher,\n ResourceLayoutShellPublisherContext,\n useResourceLayoutShellPublisher,\n} from './shell-context';\nimport {\n type AnyRenderStateDefinition,\n type RenderStateName,\n type RenderStateReferences,\n deferredRenderStateSymbol,\n definedResourceLayoutComponentSymbol,\n isDeferredRenderState,\n isLazyRenderState,\n lazyLoaderSymbol,\n lazyOptionsSymbol,\n lazyInspectionSymbol,\n} from './render-state';\nimport {\n createStateReferences,\n StateComposableContext,\n type RenderStateScope,\n} from './state-composable';\n\nexport type LayoutIncludeProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents\n> = IncludedProps<MergedLayoutInProps<Resources, Options, Composables>>;\n\nexport type LayoutProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {}\n> = {\n /**\n * Props to include in the layout.\n */\n include?: LayoutIncludeProps<Resources, Options, Composables> & IncludeProps;\n /**\n * Custom props that the layout will receive.\n */\n custom?: CustomProps;\n};\n\ntype LayoutRenderContext<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n States extends string = import('./render-state').BuiltinRenderStateName\n> = {\n state: States;\n composables: LayoutRenderComposables<Composables>;\n inProps: Record<string, unknown>;\n /**\n * Accessor for the resources bound to this definition. Read `resources.current`\n * for the resource this instance renders, call `resources()` for normalized\n * definitions, `resources.raw()` for the original value, use\n * `resources.pick(...)` / `resources.omit(...)` to filter, or\n * `resources.isResource(...)` to narrow an unknown value.\n */\n resources: LayoutRenderResourcesAccessor<Resources>;\n name: string;\n /** Retries the active lazy state when the current Error state was automatic. */\n retry?: () => void;\n};\n\ntype RenderStateBoundaryProps = {\n children: ReactNode;\n fallback: (error: unknown, retry: () => void) => ReactNode;\n onRetry?: () => void;\n};\n\nconst RenderStateRetryContext = createContext<(() => void) | undefined>(\n undefined\n);\n\nclass RenderStateBoundary extends ReactComponent<\n RenderStateBoundaryProps,\n { error?: unknown }\n> {\n state: { error?: unknown } = {};\n\n static getDerivedStateFromError(error: unknown) {\n return { error };\n }\n\n retry = () => {\n this.props.onRetry?.();\n\n this.setState({ error: undefined });\n };\n\n render() {\n if (this.state.error !== undefined) {\n return (\n <RenderStateFallback state=\"Error\">\n {this.props.fallback(this.state.error, this.retry)}\n </RenderStateFallback>\n );\n }\n\n return this.props.children;\n }\n}\n\nfunction toResourceStateError(resource: string, state: string, error: unknown) {\n return error instanceof ResourceModuleLoadError ||\n error instanceof ResourceRenderError\n ? error\n : new ResourceRenderError(resource, state, error);\n}\n\n/**\n * A single {@link ResourceDefinition} kept by a `pick`, or `never` when it does\n * not match. Widened definitions (`string`, `{ value: string }`) are always\n * kept — the concrete keys are not known statically, so the runtime filter is\n * the source of truth.\n */\ntype PickResourceDefinition<\n Definition,\n Keys extends string\n> = Definition extends ResourceDefinition\n ? string extends ResourceDefinitionValue<Definition>\n ? Definition\n : ResourceDefinitionValue<Definition> extends Keys\n ? Definition\n : never\n : never;\n\ntype PickResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Keys extends LayoutResourceKey<Resources>\n> = Array<PickResourceDefinition<Resources[number], Keys>>;\n\n/**\n * A single {@link ResourceDefinition} kept by an `omit`, or `never` when it is\n * one of the omitted keys. Widened definitions are always kept.\n */\ntype OmitResourceDefinition<\n Definition,\n Keys extends string\n> = Definition extends ResourceDefinition\n ? string extends ResourceDefinitionValue<Definition>\n ? Definition\n : ResourceDefinitionValue<Definition> extends Keys\n ? never\n : Definition\n : never;\n\ntype OmitResourceDefinitions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Keys extends LayoutResourceKey<Resources>\n> = Array<OmitResourceDefinition<Resources[number], Keys>>;\n\n/**\n * The result of `resources.pick(...)` / `resources.omit(...)`.\n *\n * - calling it returns the selected resource definitions.\n * - `.isResource(value)` narrows an unknown value to one of the selected keys.\n */\nexport type ResourceSelection<\n Definitions extends ReadonlyArray<ResourceDefinition>\n> = {\n /** Returns the selected resource definitions. */\n (): Show<Definitions>;\n /**\n * Narrows an unknown value to one of the selected resource keys.\n *\n * @param value - The value to test.\n */\n isResource(value: unknown): value is LayoutResourceKey<Definitions>;\n};\n\n/**\n * Accessor for the resources bound to a `defineResourceLayout` definition.\n *\n * - `resources()` returns normalized `{ value, subResources? }` definitions.\n * - `resources.raw()` returns the definitions exactly as declared.\n * - `resources.omit(key, ...rest)` selects every resource except the named ones.\n * - `resources.pick(key, ...rest)` selects only the named resources.\n * - `resources.isResource(value)` narrows an unknown value to a resource key.\n *\n * `pick` / `omit` return a {@link ResourceSelection} thunk: call it for the\n * definitions, or use its `isResource` guard.\n */\nexport type LayoutResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = {\n /**\n * Returns normalized resources, or the result of an optional selector.\n *\n * @param select - Transforms the normalized tuple without losing its literal\n * resource and sub-resource types.\n */\n <Selected = NormalizedResourceDefinitions<Resources>>(\n select?: (resources: NormalizedResourceDefinitions<Resources>) => Selected\n ): Selected;\n /**\n * Returns the original resource declarations, or an optionally selected\n * value derived from them.\n *\n * @param select - Transforms the original tuple exactly as it was declared.\n */\n raw<Selected = Resources>(\n select?: (resources: Resources) => Selected\n ): Selected;\n /**\n * Narrows an unknown value to one of this definition's top-level resource\n * keys.\n *\n * @param value - The value to test.\n */\n isResource(value: unknown): value is LayoutResourceKey<Resources>;\n /**\n * Selects every declared resource except the named ones. Requires at least\n * one key.\n *\n * @param keys - Top-level resource names to exclude.\n */\n omit<\n Keys extends [\n LayoutResourceKey<Resources>,\n ...LayoutResourceKey<Resources>[]\n ]\n >(\n ...keys: Keys\n ): ResourceSelection<OmitResourceDefinitions<Resources, Keys[number]>>;\n /**\n * Selects only the named resources. Requires at least one key.\n *\n * @param keys - Top-level resource names to keep.\n */\n pick<\n Keys extends [\n LayoutResourceKey<Resources>,\n ...LayoutResourceKey<Resources>[]\n ]\n >(\n ...keys: Keys\n ): ResourceSelection<PickResourceDefinitions<Resources, Keys[number]>>;\n};\n\n/**\n * Render-scoped {@link LayoutResourcesAccessor}, extended with `current` — the\n * resource key the layout instance is rendering for.\n */\nexport type LayoutRenderResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = LayoutResourcesAccessor<Resources> & {\n /** The resource this layout instance is rendering for. */\n readonly current: LayoutResourceKey<Resources>;\n};\n\nfunction createResourceSelection(\n definitions: ReadonlyArray<ResourceDefinition>\n): ResourceSelection<ReadonlyArray<ResourceDefinition>> {\n const selection = (() => definitions) as ResourceSelection<\n ReadonlyArray<ResourceDefinition>\n >;\n\n selection.isResource = createIsValidResourceFn(definitions);\n\n return selection;\n}\n\n/**\n * Creates the callable resource accessor shared by global and bound layout\n * definitions.\n *\n * @param resources - Resource definitions to expose and normalize.\n * @returns A callable normalized accessor with raw, selection, and guard APIs.\n * @internal\n */\nexport function createLayoutResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n>(resources: Resources): LayoutResourcesAccessor<Resources> {\n const normalizedResources = normalizeResourceDefinitions(resources);\n const accessor = ((select?: (value: typeof normalizedResources) => unknown) =>\n select\n ? select(normalizedResources)\n : normalizedResources) as LayoutResourcesAccessor<Resources>;\n\n accessor.raw = ((select?: (value: Resources) => unknown) =>\n select\n ? select(resources)\n : resources) as LayoutResourcesAccessor<Resources>['raw'];\n\n accessor.isResource = createIsValidResourceFn(resources);\n\n accessor.omit = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => !keys.includes(readResourceSlug(resource)))\n )) as LayoutResourcesAccessor<Resources>['omit'];\n\n accessor.pick = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => keys.includes(readResourceSlug(resource)))\n )) as LayoutResourcesAccessor<Resources>['pick'];\n\n return accessor;\n}\n\nfunction createLayoutRenderResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>\n>(\n resources: Resources,\n current: LayoutResourceKey<Resources>\n): LayoutRenderResourcesAccessor<Resources> {\n return Object.assign(createLayoutResourcesAccessor(resources), { current });\n}\n\ntype LayoutRenderComposables<Composables extends ComposableComponents> = [\n keyof Composables\n] extends [never]\n ? undefined\n : Composables;\n\ntype SplitLayoutInPropDefinition<\n Props extends InPropsObject = {},\n Content = unknown\n> = {\n props?: Props;\n render: ((props: ResolveProps<Props>) => Content) | Content;\n};\n\nfunction isBuiltPropDefinition(\n value: unknown\n): value is AnyBuiltPropDefinition {\n return typeof value === 'function' && value !== null && 'visibility' in value;\n}\n\nfunction isSplitLayoutInPropDefinition(\n value: unknown\n): value is SplitLayoutInPropDefinition {\n return (\n value !== null &&\n typeof value === 'object' &&\n 'render' in value &&\n (value as { render?: unknown }).render !== undefined\n );\n}\n\nfunction isJSXElementDefinition(\n definition: unknown\n): definition is AnyBuiltPropDefinition & { type: 'JSX.Element' } {\n return (\n isBuiltPropDefinition(definition) &&\n 'type' in definition &&\n definition.type === 'JSX.Element'\n );\n}\n\nfunction toLayoutRenderPropKey(includeKey: string, definition: unknown) {\n return isJSXElementDefinition(definition)\n ? capitalize(includeKey)\n : includeKey;\n}\n\nfunction readLayoutOptionValue(\n includeKey: string,\n definition: unknown,\n sources: Record<string, unknown>\n) {\n const layoutOptionKeys = isJSXElementDefinition(definition)\n ? [capitalize(includeKey), includeKey]\n : [includeKey, capitalize(includeKey)];\n\n for (const key of layoutOptionKeys) {\n if (key in sources) {\n return sources[key];\n }\n }\n\n return undefined;\n}\n\n\nfunction isIncludedPropRequired(value: unknown) {\n return (\n value === true ||\n value === 'required' ||\n getIncludedPropBehavior(value)?.visibility === 'required'\n );\n}\n\nfunction allowsConfigPassthrough(value: unknown) {\n const behavior = getIncludedPropBehavior(value);\n\n if (!behavior) {\n return true;\n }\n\n if (behavior.passthrough === 'config') {\n return true;\n }\n\n // optional + component passthrough still accepts create-time defaults\n return (\n behavior.passthrough === 'component' && behavior.visibility === 'optional'\n );\n}\n\nfunction allowsComponentPassthrough(value: unknown) {\n const behavior = getIncludedPropBehavior(value);\n\n return behavior ? behavior.passthrough === 'component' : value === 'optional';\n}\n\nfunction splitLayoutInProps(inProps: Record<string, unknown>) {\n const resolvedInProps: Record<string, AnyBuiltPropDefinition> = {};\n const splitInProps: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(inProps)) {\n if (isBuiltPropDefinition(value)) {\n resolvedInProps[key] = value;\n\n continue;\n }\n\n if (isSplitLayoutInPropDefinition(value)) {\n splitInProps[key] = value.render;\n\n if (value.props && typeof value.props === 'object') {\n Object.assign(resolvedInProps, value.props);\n }\n }\n }\n\n return {\n resolvedInProps,\n splitInProps,\n };\n}\n\nfunction resolveLayoutOptionDefaults(\n defaults: Record<string, unknown>,\n options: Record<string, unknown>\n) {\n const resolved = { ...options };\n\n for (const [key, defaultValue] of Object.entries(defaults)) {\n if (key in options) {\n if (typeof defaultValue === 'function') {\n resolved[key] = options[key];\n } else {\n resolved[key] = functionalUpdate(\n defaultValue,\n options[key] as Updater<unknown>\n );\n }\n }\n }\n\n return resolved;\n}\n\n/**\n * The `layout` block of a {@link defineResourceLayout} call: the props, the\n * composable map, and the render for a per-resource page component.\n *\n * Extracted so {@link defineResourceLayout.withLayout} can reuse the exact same\n * shape while making `render` optional (see {@link ShellLayoutDefinition}).\n */\ntype LayoutRenderFunction<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n States extends string = import('./render-state').BuiltinRenderStateName\n> = (\n props: LayoutRenderProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n context: LayoutRenderContext<Resources, Composables, States>\n) => JSX.Element;\n\ntype RenderStateComposables<Input> = Input extends {\n composables?: (\n ...arguments_: any[]\n ) => infer Composables extends ComposableComponents;\n}\n ? Composables\n : {};\n\ntype ContextualRenderStateIncludeProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input\n> = RenderStateIncludeProps<Input> extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n>\n ? RenderStateIncludeProps<Input>\n : LayoutIncludeProps<Resources, Options, Composables>;\n\ntype ValidRenderStateIncludes<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input\n> = {\n [Key in keyof RenderStateIncludeProps<Input>]: Key extends keyof LayoutIncludeProps<\n Resources,\n Options,\n Composables\n >\n ? RenderStateIncludeProps<Input>[Key]\n : never;\n};\n\ntype ContextualStateRenderFunction<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input,\n States extends string = import('./render-state').BuiltinRenderStateName\n> = LayoutRenderFunction<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n ContextualRenderStateIncludeProps<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n Input\n >,\n RenderStateCustomProps<Input>,\n States\n>;\n\ntype ContextualStateLayoutProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input\n> = LayoutProps<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n ContextualRenderStateIncludeProps<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n Input\n >,\n RenderStateCustomProps<Input>\n> & {\n include?: ValidRenderStateIncludes<\n Resources,\n Options,\n Composables & RenderStateComposables<Input>,\n Input\n >;\n};\n\ntype RenderStateConfiguration<Input> = Pick<\n Input,\n keyof Input & ('props' | 'composables' | 'state')\n>;\n\ntype ContextualLayoutRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input,\n States,\n BaseInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n BaseCustom extends InPropsObject = {}\n> =\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n BaseInclude,\n BaseCustom,\n keyof States & string\n >\n | CreatedRenderState\n | (RenderStateConfiguration<Input> & {\n props?: ContextualStateLayoutProps<\n Resources,\n Options,\n Composables,\n Input\n >;\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, States>\n ) => ComposableComponents;\n render: ContextualStateRenderFunction<\n Resources,\n Options,\n Composables,\n PlainStateWithDefaults<Input, BaseInclude, BaseCustom>,\n keyof States & string\n >;\n state?: RenderStateName;\n });\n\ntype ContextualLayoutRenderStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States,\n BaseInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n BaseCustom extends InPropsObject = {}\n> = {\n [State in keyof States]: ContextualLayoutRenderState<\n Resources,\n Options,\n Composables,\n States[State],\n States,\n BaseInclude,\n BaseCustom\n >;\n} & { default: unknown };\n\n/**\n * Contextual shape applied to each inline `layout.render` entry. It prevents\n * callback parameters from falling back to implicit `any` and exposes both\n * layout-level and state-local composables through the render context.\n */\nexport type ContextualInlineRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n LayoutComposables extends ComposableComponents\n> =\n | LayoutRenderFunction<Resources, Options, LayoutComposables, {}, {}>\n | {\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n LayoutComposables & ComposableComponents\n >;\n custom?: InPropsObject;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>\n ) => ComposableComponents;\n render: LayoutRenderFunction<\n Resources,\n Options,\n LayoutComposables & ComposableComponents,\n LayoutIncludeProps<\n Resources,\n Options,\n LayoutComposables & ComposableComponents\n >,\n Record<string, any>\n >;\n state?: string;\n };\n\n/**\n * Requires a `default` inline state while allowing named built-in or custom\n * states to share the same contextual callback typing.\n */\nexport type ContextualInlineRenderStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n LayoutComposables extends ComposableComponents\n> = {\n [State in RenderStateName]?:\n | ContextualInlineRenderState<Resources, Options, LayoutComposables>\n | CreatedRenderState\n | (AnyRenderStateDefinition & { state: RenderStateName });\n} & {\n default:\n | ContextualInlineRenderState<Resources, Options, LayoutComposables>\n | CreatedRenderState\n | (AnyRenderStateDefinition & { state: RenderStateName });\n};\n\n/** An inline state with independently inferred props and composables. */\nexport type TypedInlineRenderState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n LayoutComposables extends ComposableComponents,\n StateComposables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n LayoutComposables & StateComposables\n >,\n CustomProps extends InPropsObject\n> = {\n props?: {\n include?: IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>\n ) => StateComposables;\n render: LayoutRenderFunction<\n Resources,\n Options,\n LayoutComposables & StateComposables,\n IncludeProps,\n CustomProps\n >;\n state?: string;\n};\n\ntype CreatedRenderState =\n | import('./render-state').CreatedRenderStateInput\n | import('./render-state').DeferredRenderState<AnyRenderStateDefinition>\n | import('./render-state').LazyRenderState<AnyRenderStateDefinition>;\n\n/**\n * State-map helper inferred from the complete render object, including custom\n * states. Built-in states use the same inference as every other key.\n */\nexport type TypedBuiltInRenderStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Render extends { default: unknown }\n> = ContextualLayoutRenderStates<Resources, Options, Composables, Render>;\n\ntype LayoutRenderInput<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject\n> =\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >\n | ContextualInlineRenderStates<Resources, Options, Composables>;\n\nexport type LayoutDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject\n> = {\n /**\n * The props to pass to the layout.\n */\n props?: LayoutProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >;\n /**\n * Components used to compose the layout. Invoked per layout instance with\n * a scoped `create` that resolves composable `name` callbacks using the\n * layout's `resource` and `name`.\n */\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => Composables;\n /**\n * The render function for the layout.\n */\n render: LayoutRenderInput<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >;\n};\n\n/** Complete input accepted by the unbound `defineResourceLayout` API. */\nexport type CreateViewMapOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n Render = LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['render'],\n Namespace extends boolean = false,\n Naming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined =\n LayoutNameInput<LayoutResourceKey<Resources>>\n> = {\n /** Default naming convention for components created by this definition. */\n name?: Naming;\n /** Default namespace mode for created layouts. Defaults to false. */\n namespace?: Namespace;\n /**\n * An array of valid resource names to support. Nested sub-resource slugs that\n * collide with config keys (`component`, `detail`, `new`, …) are reserved.\n */\n resources: AssertUnreservedResources<Resources>;\n /**\n * The options that are passed into the created resource layout.\n */\n options?: Options;\n layout: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render'\n > & {\n render:\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >\n | (Render extends (...args: any[]) => any\n ? never\n : Render &\n ContextualInlineRenderStates<Resources, Options, Composables>);\n };\n};\n\n/**\n * Input for the callback shorthand of `layout.render`. Keeping the callback\n * concrete allows TypeScript to infer layout composables and included props\n * from their sibling definitions before contextually typing `render`.\n */\nexport type CreateViewMapFunctionRenderOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Namespace extends boolean = false,\n Naming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined =\n LayoutNameInput<LayoutResourceKey<Resources>>\n> = CreateViewMapOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n Namespace,\n Naming\n>;\n\n/**\n * Resource-layout input that preserves the exact keys and definitions of an\n * object-form render-state map. Use `createRenderState` for scoped\n * `composables(create)` callbacks that need independent context inference.\n */\nexport type CreateViewMapRenderStatesOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n RenderStates extends { default: unknown } & Record<string, unknown>,\n Namespace extends boolean = false,\n Naming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined =\n LayoutNameInput<LayoutResourceKey<Resources>>\n> = Omit<\n CreateViewMapOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n RenderStates,\n Namespace,\n Naming\n >,\n 'layout'\n> & {\n layout: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render' | 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, {}, RenderStates>\n ) => Composables;\n render: RenderStates &\n ContextualLayoutRenderStates<\n Resources,\n Options,\n Composables,\n RenderStates,\n IncludeProps,\n CustomProps\n > &\n Partial<Record<RenderStateName, unknown>>;\n };\n};\n\n/**\n * Object-form layout input that contextually types inline state callbacks.\n * Use {@link CreateViewMapRenderStatesOptions} when working with already\n * created state fragments instead.\n */\nexport type CreateViewMapInlineRenderStatesOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Namespace\n >,\n 'layout'\n> & {\n layout: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render'\n > & {\n render: ContextualInlineRenderStates<Resources, Options, Composables>;\n };\n};\n\n/** Input for independently inferred built-in render states. */\nexport type CreateViewMapBuiltInRenderStatesOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render extends { default: unknown } & Record<string, unknown>,\n Namespace extends boolean = false\n> = CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Render,\n Namespace\n>;\n\ntype UnwrapRenderState<Input> =\n Input extends import('./render-state').DeferredRenderState<\n infer Definition extends AnyRenderStateDefinition\n >\n ? Definition\n : Input extends import('./render-state').LazyRenderState<\n infer Definition extends AnyRenderStateDefinition\n >\n ? Definition\n : Input extends (...args: any[]) => any\n ? { render: Input }\n : Input;\n\ntype RenderStateCustomProps<Input> = UnwrapRenderState<Input> extends {\n props?: { custom?: infer CustomProps extends InPropsObject };\n}\n ? CustomProps\n : {};\n\ntype RenderStateIncludeProps<Input> = UnwrapRenderState<Input> extends {\n props?: { include?: infer IncludeProps };\n}\n ? IncludeProps\n : {};\n\nfunction optionalStateChildren(props: AnyRenderStateDefinition['props']) {\n if (!props) return props;\n const children = props.custom?.children as (AnyBuiltPropDefinition & { optional?: () => AnyBuiltPropDefinition }) | undefined;\n const childrenInclude = props.include?.children;\n return {\n ...props,\n include: props.include && {\n ...props.include,\n ...('children' in props.include ? {\n children: typeof childrenInclude === 'object' && childrenInclude !== null\n ? { ...childrenInclude, required: false }\n : childrenInclude === true || childrenInclude === 'required'\n ? { required: false, suppliedVia: 'config' }\n : 'optional',\n } : {}),\n },\n custom: props.custom && {\n ...props.custom,\n ...(children ? { children: children.visibility === 'required' ? children.optional?.() ?? children : children } : {}),\n },\n };\n}\n\nfunction getSynchronousRenderStateDefinition(\n input: unknown,\n fallbackProps?: LayoutProps<any, any, any, any, any>\n): AnyRenderStateDefinition | undefined {\n if (isLazyRenderState(input)) {\n return undefined;\n }\n\n if (isDeferredRenderState(input)) {\n return input[deferredRenderStateSymbol];\n }\n\n if (typeof input === 'function') {\n return {\n props: fallbackProps,\n render: input as AnyRenderStateDefinition['render'],\n };\n }\n\n return typeof input === 'object' && input !== null\n ? (input as AnyRenderStateDefinition)\n : undefined;\n}\n\ntype ResourceLayoutStateComponents<\n Name extends string,\n Resource extends string,\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States\n> = States extends Record<string, unknown>\n ? {\n [State in Exclude<keyof States & string, 'default'>]: BaseComponent<\n `${Name}.${State}`,\n Show<OptionalStateChildren<\n ResolveProps<RenderStateCustomProps<States[State]>> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n Extract<\n RenderStateIncludeProps<States[State]>,\n LayoutIncludeProps<Resources, Options, Composables>\n >\n >\n >>\n > &\n ((\n props: Show<OptionalStateChildren<\n ResolveProps<RenderStateCustomProps<States[State]>> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, Composables>,\n Extract<\n RenderStateIncludeProps<States[State]>,\n LayoutIncludeProps<Resources, Options, Composables>\n >\n >\n >>\n ) => JSX.Element) & {\n readonly resource: Resource;\n };\n }\n : {};\n\ntype ResourceLayoutComposition<\n Name extends string,\n Composables extends ComposableComponents\n> = [keyof Composables] extends [never]\n ? {}\n : {\n makeComposable: MakeComposable<Composables, Name>;\n };\n\nexport type ResourceLayoutComponent<\n Name extends string,\n Props extends InPropsObject = {},\n Composables extends ComposableComponents = {},\n Resource extends string = string,\n IncludedCallProps extends object = {},\n States = {},\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n PropDefinitions extends InPropsObject = Props\n> = ResourceLayoutComposition<Name, Composables> &\n BaseComponent<Name, Show<ResolveProps<Props> & IncludedCallProps>> & {\n (props: Show<ResolveProps<Props> & IncludedCallProps>): JSX.Element;\n /**\n * A type-only property containing the resource associated with this\n * component. This property is `undefined` at runtime.\n */\n readonly resource: Resource;\n readonly [definedResourceLayoutComponentSymbol]: true;\n readonly [componentPropDefinitionsSymbol]: PropDefinitions;\n } & ResourceLayoutStateComponents<\n Name,\n Resource,\n Resources,\n Options,\n Composables,\n States\n >;\n\nexport type LayoutPropsForResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {}\n> = [keyof IncludeProps] extends [never]\n ? ResolveLayoutProps<InferredInProps<Resources, InProps>> &\n RequiredPresetLayoutProps<Composables>\n : ResolvedIncludedConfigProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n IncludeProps\n >;\n\ntype DefaultStateIncludes<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States,\n Fallback extends LayoutIncludeProps<Resources, Options, Composables>\n> = States extends { default: infer Default }\n ? ContextualRenderStateIncludeProps<Resources, Options, Composables, Default>\n : Fallback;\n\n/** A plain object namespace; the callable default component lives under Root. */\ntype ResourceLayoutNamespace<Component> = { Root: Component } & {\n [Key in keyof Component as Key extends string\n ? Key extends 'displayName' | 'props' | 'resource' | 'makeComposable'\n ? never\n : Key\n : never]: Component[Key];\n};\n\nexport type ResourceLayoutResult<\n Component,\n Namespace extends boolean\n> = Namespace extends true ? ResourceLayoutNamespace<Component> : Component;\n\ntype CreateResourceLayoutFnImpl<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<\n Resources,\n InProps,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = (<\n const Name extends string = never,\n const Resource extends LayoutResourceKey<Resources> = LayoutResourceKey<Resources>,\n Props extends InPropsObject = {},\n Namespace extends boolean = DefaultNamespace\n>(\n options: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n string,\n Resource,\n Props,\n Namespace,\n Name\n >\n) => Show<\n ResourceLayoutResult<\n ResourceLayoutComponent<\n ResolvedLayoutName<\n [Name] extends [never] ? DefaultNaming : Name,\n Resource\n >,\n CustomProps,\n Composables,\n Resource,\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >,\n States,\n Resources,\n InProps,\n CustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >\n >,\n Namespace\n >\n>) &\n (<\n const Resource extends LayoutResourceKey<Resources>,\n const Naming extends LayoutNameResolver<\n string,\n any\n > = LayoutNameResolver<string, any>,\n Props extends InPropsObject = {},\n Namespace extends boolean = DefaultNamespace\n >(\n options: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n string,\n Resource,\n Props,\n Namespace,\n Naming\n >\n ) => Show<\n ResourceLayoutResult<\n ResourceLayoutComponent<\n ResolvedLayoutName<Naming, Resource>,\n CustomProps,\n Composables,\n Resource,\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >,\n States,\n Resources,\n InProps,\n CustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >\n >,\n Namespace\n >\n >) &\n (<\n const Resource extends LayoutResourceKey<Resources>,\n const Name extends string = ResolvedLayoutName<\n DefaultNaming,\n Resource\n >,\n Props extends InPropsObject = {},\n Namespace extends boolean = DefaultNamespace\n >(\n options: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n string,\n Resource,\n Props,\n Namespace,\n LayoutNameCallback<\n Resource,\n ('default' | keyof States) & string,\n Name\n >\n >\n ) => Show<\n ResourceLayoutResult<\n ResourceLayoutComponent<\n Name,\n CustomProps,\n Composables,\n Resource,\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >,\n States,\n Resources,\n InProps,\n CustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<Resources, InProps, Composables>,\n DefaultStateIncludes<\n Resources,\n InProps,\n Composables,\n States,\n IncludeProps\n >\n >\n >,\n Namespace\n >\n >);\n\nexport type CreateResourceLayoutMakeComposableOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {}\n> = CreateResourceLayoutOptionsBase<Resources, Name, Resource, Props> &\n Partial<\n LayoutPropsForResource<Resources, InProps, Composables, IncludeProps>\n >;\n\ntype CreateResourceLayoutMakeComposableFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables>,\n CustomProps extends InPropsObject\n> = <\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {}\n>(\n options: CreateResourceLayoutMakeComposableOptions<\n Resources,\n InProps,\n Composables,\n Name,\n Resource,\n Props,\n IncludeProps\n >\n) => ComposableResourceLayout<Composables, Name, any, any, any>;\n\ntype CreateResourceLayoutFnBase<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = CreateResourceLayoutFnImpl<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace,\n DefaultNaming\n> & {\n /**\n * A function to create a resource layout for a specific resource.\n */\n forResource: CreateLayoutForResource<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n DefaultNamespace,\n States,\n DefaultNaming\n >;\n /**\n * Creates resource layout factories for multiple defined resources.\n */\n forResources: CreateResourceLayoutForResourcesFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n DefaultNamespace,\n States,\n DefaultNaming\n >;\n};\n\ntype CreateResourceLayoutMakeComposableMember<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables>,\n CustomProps extends InPropsObject\n> = [keyof Composables] extends [never]\n ? {}\n : {\n makeComposable: CreateResourceLayoutMakeComposableFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n };\n\nexport type CreateResourceLayoutFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = CreateResourceLayoutFnBase<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace,\n DefaultNaming\n> &\n CreateResourceLayoutMakeComposableMember<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n\nexport type DefinedResourceLayout<\n Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, InProps, Composables> = {},\n CustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false,\n DefaultNaming extends LayoutNameInput<any, any> | undefined = undefined\n> = {\n createResourceConfig: CreateResourceConfigFn<Resources>;\n createResourceLayout: CreateResourceLayoutFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace,\n DefaultNaming\n >;\n createResourceLinks: CreateResourceLinksFn<Resources>;\n /**\n * Accessor for the resources bound to this definition. Call `resources()` for\n * normalized definitions, `resources.raw()` for their declared form, or use\n * `resources.pick(...)` / `resources.omit(...)` to filter.\n */\n resources: LayoutResourcesAccessor<Resources>;\n /**\n * Provides the current resource to descendants that call `useResource`.\n * Components created by `createResourceLayout` install this provider\n * automatically.\n */\n ResourceProvider: ResourceLayoutProvider<Resources>;\n /** Returns the nearest current resource. */\n useResource: () => LayoutResourceKey<Resources>;\n};\n\nexport type ResourceLayoutProviderProps<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = {\n children: ReactNode;\n resource: LayoutResourceKey<Resources>;\n};\n\nexport type ResourceLayoutProvider<\n Resources extends ReadonlyArray<ResourceDefinition>\n> = (props: ResourceLayoutProviderProps<Resources>) => JSX.Element;\n\nfunction readResourceSlug(resource: ResourceDefinition) {\n return typeof resource === 'string' ? resource : resource.value;\n}\n\nfunction assertUnreservedResourceSlugs(\n resources: ReadonlyArray<ResourceDefinition>,\n owner?: string\n) {\n for (const resource of resources) {\n const slug = readResourceSlug(resource);\n\n if (owner !== undefined && isResourceConfigComponentKey(slug)) {\n throw new InvalidConfigError({\n reason: `Sub-resource \"${slug}\" under \"${owner}\" collides with a reserved config key`,\n });\n }\n\n if (typeof resource !== 'string') {\n assertUnreservedResourceSlugs(resource.subResources, slug);\n }\n }\n}\n\nfunction defineResourceLayoutImpl<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n InProps,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n const Render = LayoutDefinition<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >['render']\n>(\n options: CreateViewMapOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render,\n boolean\n >,\n inheritedStateScope?: RenderStateScope,\n inheritedInspection?: ActiveInspection,\n renderStateName = 'default'\n): DefinedResourceLayout<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n> {\n const {\n options: inProps = {} as InProps,\n resources,\n layout,\n namespace: defaultNamespace = false,\n } = options;\n // Internal, set only by `defineResourceLayout.withLayout`: the identity of the\n // owning definition, forwarded when a page reports its resource so the shell\n // can tell its own pages apart from ones belonging to another definition.\n const getLazyDefaults = (options as unknown as { [lazyDefaultsSymbol]?: () => LazyResourceStates })[lazyDefaultsSymbol] ?? (() => ({}));\n const shellId = (options as { shellId?: symbol }).shellId;\n\n const inspection = inheritedInspection\n ? undefined\n : inspectDefinition(\n resources,\n getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source\n );\n\n if (inspection)\n inspection.store.node({\n id: inspection.definition,\n kind: 'definition',\n label: 'Layout definition',\n source: getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source,\n details: {\n props: layout.props,\n propSchemas: typeof inProps === 'function' ? undefined : inProps,\n options:\n typeof inProps === 'function'\n ? 'Resource-specific schemas'\n : Object.keys(inProps),\n states:\n typeof layout.render === 'function'\n ? ['default']\n : Object.keys(layout.render),\n },\n });\n\n assertUnreservedResourceSlugs(resources);\n\n const resourcesAccessor = createLayoutResourcesAccessor(resources);\n const ResourceContext = createContext<\n LayoutResourceKey<Resources> | undefined\n >(undefined);\n\n function ResourceProvider({\n children,\n resource,\n }: ResourceLayoutProviderProps<Resources>) {\n return (\n <ResourceContext.Provider value={resource}>\n {children}\n </ResourceContext.Provider>\n );\n }\n\n function useResource() {\n const resource = useContext(ResourceContext);\n\n if (resource === undefined) {\n throw new MissingResourceProviderError({});\n }\n\n return resource;\n }\n\n const normalizedResources = normalizeResources(resources);\n const resourcesEnum = createPrimitivePropBuilder('string').enum(\n toResourceEnum(normalizedResources)\n );\n const definedResourceLayout = (<\n Name extends string,\n Resource extends LayoutResourceKey<Resources>,\n Props extends InPropsObject = {}\n >(\n layoutOptions: CreateResourceLayoutOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n Name,\n Resource,\n Props,\n boolean\n >\n ) => {\n const {\n name: suppliedName,\n props: instancePropDefinitions,\n namespace = defaultNamespace,\n ...layoutOptionProps\n } = layoutOptions;\n const naming = suppliedName ?? options.name ?? `${capitalize(layoutOptions.resource)}Layout`;\n const name = (\n typeof naming === 'function'\n ? naming({\n resource: layoutOptions.resource,\n states:\n typeof layout.render === 'function'\n ? ['default']\n : Object.keys(layout.render),\n capitalize,\n })\n : naming\n ) as Name;\n\n if (name !== undefined && (typeof name !== 'string' || !name))\n throw new LayoutConfigurationError('A non-empty layout name is required');\n\n const createComposableLayout =\n makeComposable<\n LayoutRenderProps<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >\n >();\n const nameProp = createProp.string().literal(name);\n const rawResolvedOptions =\n typeof inProps === 'function'\n ? inProps({\n resource: resourcesEnum,\n name: nameProp,\n })\n : inProps;\n const { resolvedInProps, splitInProps } = splitLayoutInProps({\n ...(rawResolvedOptions as Record<string, unknown>),\n ...(instancePropDefinitions as Record<string, unknown> | undefined),\n ...layoutOptionProps,\n });\n const { composables, props: legacyLayoutProps } = layout;\n const renderStates = (\n typeof layout.render === 'function'\n ? { default: layout.render }\n : layout.render\n ) as Record<string, unknown>;\n const inspectionStore = inheritedInspection?.store ?? inspection!.store;\n const layoutId =\n inheritedInspection?.layout ??\n inspectionStore.node({\n id: inspectionId('layout'),\n kind: 'layout',\n label: name ?? String(layoutOptionProps.resource),\n source:\n getLayoutDebug(layoutOptions)?.source ??\n getLayoutDebug(options)?.source ??\n getLayoutDebug(layout)?.source,\n registrationSource:\n getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source,\n details: {\n resource: layoutOptionProps.resource,\n props: legacyLayoutProps,\n propSchemas: rawResolvedOptions,\n },\n });\n const resourceId =\n inheritedInspection?.resource ??\n inspection?.resourceIds.get(String(layoutOptionProps.resource));\n\n if (inspection) {\n inspectionStore.edge(inspection.definition, layoutId, 'defines');\n\n if (resourceId) inspectionStore.edge(resourceId, layoutId, 'renders');\n }\n\n const stateIds = new Map(\n Object.keys(renderStates).map((state) => [\n state,\n inheritedInspection?.state ??\n inspectionStore.node({\n id: inspectionId('state'),\n kind: 'state',\n label: state,\n source:\n getLayoutDebug(renderStates[state])?.source ??\n getLayoutDebug(options)?.source ??\n getLayoutDebug(layout)?.source,\n registrationSource:\n getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source,\n unresolved:\n isLazyRenderState(renderStates[state]) ||\n isDeferredRenderState(renderStates[state]),\n }),\n ])\n );\n\n for (const id of stateIds.values())\n inspectionStore.edge(layoutId, id, 'defines');\n\n const activeInspection = {\n store: inspectionStore,\n layout: layoutId,\n resource: resourceId,\n state: stateIds.get('default')!,\n };\n const referenceStateIds = new Map<unknown, string>();\n\n function getReferenceStateId(input: unknown, label: string) {\n let id = referenceStateIds.get(input);\n\n if (!id) {\n id = inspectionStore.node({\n id: inspectionId('state-reference'),\n kind: 'state',\n label,\n details: { relationship: 'Referenced render state' },\n });\n\n referenceStateIds.set(input, id);\n }\n\n return id;\n }\n\n const referenceComponents = new Map<\n unknown,\n (props: Record<string, unknown>) => JSX.Element\n >();\n const stateScope: RenderStateScope = inheritedStateScope ?? {\n states: createStateReferences(renderStates),\n\n resolve(source) {\n for (const [stateName, input] of Object.entries(renderStates)) {\n if (input === source.input) {\n return stateName === 'default'\n ? (Component as (props: Record<string, unknown>) => JSX.Element)\n : stateComponents[stateName];\n }\n }\n\n let reference = referenceComponents.get(source.input);\n\n if (!reference) {\n reference = createStateComponent(\n source.name,\n source.input,\n false,\n source.fallbackStateName\n );\n\n referenceComponents.set(source.input, reference);\n }\n\n return reference;\n },\n };\n const defaultRenderInput = renderStates.default;\n const createdDefaultState =\n isDeferredRenderState(defaultRenderInput) ||\n isLazyRenderState(defaultRenderInput);\n const defaultRenderDefinition = getSynchronousRenderStateDefinition(\n defaultRenderInput,\n legacyLayoutProps\n ) ?? { render: () => null };\n\n if (\n typeof defaultRenderDefinition !== 'object' ||\n defaultRenderDefinition === null ||\n !('render' in defaultRenderDefinition) ||\n typeof defaultRenderDefinition.render !== 'function'\n ) {\n throw new LayoutConfigurationError(\n 'The \"default\" render state must define a render function'\n );\n }\n\n const defaultState = defaultRenderDefinition as AnyRenderStateDefinition;\n\n if (!inheritedInspection)\n inspectionStore.node({\n id: activeInspection.state,\n kind: 'state',\n label: 'default',\n unresolved: createdDefaultState,\n details: {\n props: mergeLayoutProps(legacyLayoutProps, defaultState.props),\n propSchemas: rawResolvedOptions,\n },\n });\n\n const render = defaultState.render;\n const layoutProps = mergeLayoutProps(legacyLayoutProps, defaultState.props);\n const customLayoutProps = layoutProps?.custom;\n const includeLayoutProps = layoutProps?.include;\n const layoutOptionValues = layoutOptionProps as Record<string, unknown>;\n const resolvedLayoutProps = {\n ...customLayoutProps,\n };\n const layoutContext: ComposableNameContext<\n LayoutResourceKey<Resources>,\n typeof name\n > = {\n resource: layoutOptions.resource,\n name,\n capitalize,\n };\n const validationContext = {\n layoutName: name,\n resource: layoutContext.resource,\n };\n const defaultComposables =\n composables || defaultState.composables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => ({\n ...(composables?.(create, stateScope.states) ?? {}),\n ...defaultState.composables?.(create as never, stateScope.states),\n })\n : undefined;\n const resolvedComposables = defaultComposables\n ? {\n ...resolveLayoutComposables(\n defaultComposables as never,\n layoutContext\n ),\n }\n : undefined;\n\n for (const [key, component] of Object.entries(resolvedComposables ?? {})) {\n const id = inspectionStore.node({\n id: inspectionId('composable'),\n kind: 'composable',\n label: key,\n source: getLayoutDebug(component)?.source,\n details: {\n displayName: (component as { displayName?: string }).displayName,\n relationship: 'declared; may not be rendered',\n },\n });\n\n inspectionStore.edge(activeInspection.state, id, 'declares');\n\n resolvedComposables![key] = trackComposable(\n component,\n inspectionStore,\n id\n );\n\n const reference = (\n component as unknown as Record<symbol, StateComposableSource>\n )[stateReferenceSource];\n\n if (reference) {\n const stateName = Object.entries(renderStates).find(\n ([, input]) => input === reference.input\n )?.[0];\n const target = stateName\n ? stateIds.get(stateName)!\n : getReferenceStateId(reference.input, reference.name);\n\n inspectionStore.edge(id, target, 'references');\n }\n }\n\n const mergedResolvedInProps = { ...resolvedInProps };\n\n for (const {\n props: presetPropDefinitions,\n } of collectComposablePresetEntries(resolvedComposables)) {\n Object.assign(mergedResolvedInProps, presetPropDefinitions);\n }\n\n const composablePresetProps = Object.fromEntries(\n collectComposablePresetEntries(resolvedComposables).map(\n ({ key, props: presetPropDefinitions }) => {\n const presetPropEntries = Object.entries(presetPropDefinitions);\n const validatedDefinitions = Object.fromEntries(\n presetPropEntries.filter(([propKey]) => {\n const includeBehavior = includeLayoutProps?.[propKey];\n\n return (\n includeBehavior === undefined ||\n (allowsConfigPassthrough(includeBehavior) &&\n (isIncludedPropRequired(includeBehavior) ||\n layoutOptionValues[propKey] !== undefined))\n );\n })\n );\n const presetPropValues = Object.fromEntries(\n presetPropEntries.flatMap(([propKey]) =>\n propKey in layoutOptionValues\n ? [[propKey, layoutOptionValues[propKey]]]\n : []\n )\n );\n\n return [\n key,\n validateProps(\n validatedDefinitions as Record<string, AnyBuiltPropDefinition>,\n presetPropValues,\n validationContext\n ),\n ];\n }\n )\n );\n const mergedRenderContext = {\n composables: resolvedComposables as LayoutRenderComposables<Composables>,\n resources: createLayoutRenderResourcesAccessor(\n resources as Resources,\n layoutContext.resource\n ),\n name: layoutContext.name,\n inProps: splitInProps,\n state: renderStateName,\n } as LayoutRenderContext<Resources, Composables>;\n const stateComponents: Record<\n string,\n (props: Record<string, unknown>) => JSX.Element\n > = {};\n let CreatedDefaultStateComponent:\n | ((props: Record<string, unknown>) => JSX.Element)\n | undefined;\n\n function RenderDefaultState({\n renderProps,\n }: {\n renderProps: LayoutRenderProps<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n }) {\n useLayoutEffect(() => {\n if (CreatedDefaultStateComponent) return;\n\n return inspectionStore.mount(\n activeInspection.layout,\n activeInspection.state,\n ...(resourceId ? [resourceId] : [])\n );\n }, []);\n\n const state = useContext(RenderStateNameContext);\n if (CreatedDefaultStateComponent) {\n return (\n <ReferencedRenderStateContext.Provider value={state}>\n <CreatedDefaultStateComponent {...renderProps} />\n </ReferencedRenderStateContext.Provider>\n );\n }\n\n return render(renderProps, { ...mergedRenderContext, state });\n }\n\n function Component(\n props: Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n IncludeProps\n >\n >\n ) {\n const referencedState = useContext(ReferencedRenderStateContext);\n const state = referencedState ?? renderStateName;\n const publishResource = useResourceLayoutShellPublisher();\n const fallbackOptions = useContext(LazyFallbackPropsContext);\n\n // Report the resource this page renders for so an ancestor `Shell` (from\n // `defineResourceLayout.withLayout`) can resolve `resources.current` for\n // its own render without the consumer threading a route param down to it.\n // A layout effect, not a passive one, so the shell reflects the new\n // resource in the same commit the page mounts — a passive effect would\n // leave one painted frame of stale shell chrome mid-navigation. Degrades\n // to a no-op when rendered without a `Shell` (context defaults to null).\n useLayoutEffect(() => {\n publishResource?.(layoutContext.resource, shellId);\n\n return () => publishResource?.(undefined, shellId);\n }, [publishResource, layoutContext.resource]);\n\n const validatedProps = validateProps(resolvedLayoutProps, props, {\n ...validationContext,\n });\n const includedPropKeys = Object.keys(includeLayoutProps ?? {});\n const includedPropDefinitions = pick(\n mergedResolvedInProps,\n includedPropKeys\n ) as Record<string, unknown>;\n const includedPropValues = {\n ...resolvePropDefinitionValues(includedPropDefinitions),\n } as Record<string, unknown>;\n\n for (const key of includedPropKeys) {\n const definition = mergedResolvedInProps[key];\n const includeBehavior = includeLayoutProps?.[key];\n const callSiteValue = allowsComponentPassthrough(includeBehavior)\n ? readLayoutOptionValue(\n key,\n definition,\n props as Record<string, unknown>\n )\n : undefined;\n const layoutOptionValue = allowsConfigPassthrough(includeBehavior)\n ? readLayoutOptionValue(key, definition, fallbackOptions?.owner === activeInspection.layout ? fallbackOptions.props : layoutOptionValues)\n : undefined;\n const splitValue = key in splitInProps ? splitInProps[key] : undefined;\n const value = callSiteValue ?? layoutOptionValue ?? splitValue;\n\n if (value !== undefined) {\n includedPropValues[key] = value;\n }\n }\n\n const requiredIncludedPropDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(([key]) =>\n isIncludedPropRequired(includeLayoutProps?.[key])\n )\n );\n const optionalIncludedPropDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(\n ([key]) =>\n !isIncludedPropRequired(includeLayoutProps?.[key]) &&\n includedPropValues[key] !== undefined\n )\n );\n const validatedIncludedProps = validateProps(\n {\n ...requiredIncludedPropDefinitions,\n ...optionalIncludedPropDefinitions,\n } as Record<string, AnyBuiltPropDefinition>,\n includedPropValues,\n validationContext\n );\n const layoutRenderIncludedProps = Object.fromEntries(\n includedPropKeys.flatMap((key) => {\n if (!(key in validatedIncludedProps)) {\n return [];\n }\n\n return [\n [\n toLayoutRenderPropKey(key, mergedResolvedInProps[key]),\n validatedIncludedProps[\n key as keyof typeof validatedIncludedProps\n ],\n ],\n ];\n })\n );\n const layoutRenderProps = {\n ...validatedProps,\n ...layoutRenderIncludedProps,\n } as unknown as LayoutRenderProps<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n\n const rendered = (\n <ReferencedRenderStateContext.Provider value={undefined}>\n <RenderStateNameContext.Provider value={state}>\n <ResourceProvider resource={layoutContext.resource}>\n <LayoutComposablePresetProvider value={composablePresetProps}>\n <StateComposableContext.Provider\n value={{\n scope: stateScope,\n props: layoutRenderProps,\n definitions: mergedResolvedInProps,\n }}\n >\n <RenderDefaultState renderProps={layoutRenderProps} />\n </StateComposableContext.Provider>\n </LayoutComposablePresetProvider>\n </ResourceProvider>\n </RenderStateNameContext.Provider>\n </ReferencedRenderStateContext.Provider>\n );\n\n const ErrorComponent = stateComponents.Error;\n\n return ErrorComponent ? (\n <RenderStateBoundary\n fallback={(error, retry) => (\n <RenderStateRetryContext.Provider value={retry}>\n <ErrorComponent\n error={toResourceStateError(\n String(layoutContext.resource),\n 'default',\n error\n )}\n retry={retry}\n />\n </RenderStateRetryContext.Provider>\n )}\n >\n {rendered}\n </RenderStateBoundary>\n ) : (\n rendered\n );\n }\n\n function createComposition<\n LayoutName extends string,\n const Defined extends MakeComposableOptions<Composables, LayoutName>\n >(compositionOptions: Defined) {\n if (!compositionOptions.components) {\n return {} as ResourceLayoutComposition<LayoutName, Composables>;\n }\n\n return {\n makeComposable: createComposableLayout(\n compositionOptions\n ) as MakeComposable<Composables, LayoutName>,\n };\n }\n\n function createStateComponent(\n stateName: string,\n input: unknown,\n validateStateName = true,\n fallbackStateName = stateName\n ): (props: Record<string, unknown>) => JSX.Element {\n const inspectedId = validateStateName\n ? stateIds.get(stateName)\n : getReferenceStateId(input, stateName);\n\n if (isLazyRenderState(input)) {\n const loader = input[lazyLoaderSymbol];\n const lazyOptions = input[lazyOptionsSymbol];\n const lazyInspection = input[lazyInspectionSymbol];\n inspectionStore.connect(input);\n inspectionStore.edge(\n inspectedId ?? layoutId,\n lazyInspection.id,\n 'declares'\n );\n const label = `${layoutContext.resource}:${stateName}`;\n lazyInspection.setLabel(label);\n const map = (stateDefinition: AnyRenderStateDefinition) => {\n if (\n validateStateName &&\n stateDefinition.state !== undefined &&\n stateDefinition.state !== stateName\n ) {\n throw new LazyResourceStateNotFoundError(label, stateName);\n }\n return createLoadedStateComponent(\n validateStateName\n ? stateName\n : (stateDefinition.state ?? stateName),\n stateDefinition,\n inspectedId\n );\n };\n function LazyStateComponent(props: Record<string, unknown>) {\n const defaults = lazyOptions.defaults();\n const LoadingComponent =\n fallbackStateName === 'Loading'\n ? undefined\n : stateComponents.Loading;\n const ErrorState =\n fallbackStateName === 'Error' ? undefined : stateComponents.Error;\n const LoadingDefault = defaults.Loading;\n const ErrorComponent: LazyResourceStates['Error'] = ErrorState\n ? ({ error, retry }) => (\n <RenderStateRetryContext.Provider value={retry}>\n <ErrorState error={error} retry={retry} />\n </RenderStateRetryContext.Provider>\n )\n : defaults.Error;\n return (\n <LazyBoundary\n loader={loader}\n map={map}\n resource={String(layoutContext.resource)}\n componentProps={props}\n ErrorComponent={ErrorComponent}\n onMount={lazyInspection.hooks.onMount}\n fallback={\n lazyOptions.fallback !== undefined ? (\n lazyOptions.fallback\n ) : LoadingComponent ? (\n <LoadingComponent />\n ) : LoadingDefault ? (\n <LoadingDefault resource={String(layoutContext.resource)} />\n ) : null\n }\n />\n );\n }\n\n return LazyStateComponent;\n }\n\n const definition = isDeferredRenderState(input)\n ? input[deferredRenderStateSymbol]\n : typeof input === 'function'\n ? { render: input }\n : input;\n\n if (\n typeof definition !== 'object' ||\n definition === null ||\n !('render' in definition) ||\n typeof definition.render !== 'function'\n ) {\n throw new LayoutConfigurationError(\n `Render state \"${stateName}\" must define a render function`\n );\n }\n\n const StateComponent = createLoadedStateComponent(\n stateName,\n definition as AnyRenderStateDefinition,\n inspectedId\n );\n\n if (!isDeferredRenderState(input)) {\n return StateComponent;\n }\n\n const DeferredState = lazy(() =>\n Promise.resolve({ default: StateComponent })\n );\n\n function DeferredStateComponent(props: Record<string, unknown>) {\n const LoadingComponent =\n fallbackStateName === 'Loading' ? undefined : stateComponents.Loading;\n const ErrorComponent =\n fallbackStateName === 'Error' ? undefined : stateComponents.Error;\n const rendered = (\n <Suspense fallback={\n <RenderStateFallback state=\"Loading\">\n {LoadingComponent ? <LoadingComponent /> : null}\n </RenderStateFallback>\n }>\n <DeferredState {...props} />\n </Suspense>\n );\n\n return ErrorComponent ? (\n <RenderStateBoundary\n fallback={(error, retry) => (\n <RenderStateRetryContext.Provider value={retry}>\n <ErrorComponent\n error={toResourceStateError(\n String(layoutContext.resource),\n stateName,\n error\n )}\n retry={retry}\n />\n </RenderStateRetryContext.Provider>\n )}\n >\n {rendered}\n </RenderStateBoundary>\n ) : (\n rendered\n );\n }\n\n return DeferredStateComponent;\n }\n\n function createLoadedStateComponent(\n stateName: string,\n definition: AnyRenderStateDefinition,\n inspectedState = stateIds.get(stateName)\n ) {\n if (inspectedState)\n inspectionStore.node({\n id: inspectedState,\n kind: 'state',\n label: stateName,\n unresolved: false,\n source: getLayoutDebug(definition)?.source,\n details: {\n props: mergeLayoutProps(legacyLayoutProps, definition.props),\n propSchemas: rawResolvedOptions,\n },\n });\n\n const stateComposables =\n composables || definition.composables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => ({\n ...(composables?.(create, stateScope.states) ?? {}),\n ...definition.composables?.(create as never, stateScope.states),\n })\n : undefined;\n const stateRender =\n stateName === 'Error'\n ? (\n props: Record<string, unknown>,\n context: Record<string, unknown>\n ) => (\n <RenderStateRetryContext.Consumer>\n {(retry) =>\n definition.render(props, {\n ...context,\n retry,\n })\n }\n </RenderStateRetryContext.Consumer>\n )\n : definition.render;\n const stateLayout = defineResourceLayoutImpl(\n {\n resources,\n options: inProps,\n layout: {\n composables: stateComposables,\n props: optionalStateChildren(mergeLayoutProps(legacyLayoutProps, definition.props)),\n render: stateRender,\n },\n } as never,\n stateScope,\n {\n ...activeInspection,\n state: inspectedState ?? getReferenceStateId(definition, stateName),\n },\n stateName\n );\n const StateComponent = stateLayout.createResourceLayout({\n ...layoutOptions,\n name,\n namespace: false,\n } as never) as ((props: Record<string, unknown>) => JSX.Element) & {\n displayName?: string;\n };\n\n StateComponent.displayName = `${name}.${stateName}`;\n\n return StateComponent;\n }\n\n if (createdDefaultState) {\n CreatedDefaultStateComponent = createStateComponent(\n 'default',\n defaultRenderInput\n );\n }\n\n for (const [stateName, input] of Object.entries(renderStates)) {\n if (stateName === 'default') {\n continue;\n }\n\n if (\n [\n '__proto__',\n 'asComposable',\n 'apply',\n 'arguments',\n 'bind',\n 'call',\n 'caller',\n 'displayName',\n 'length',\n 'makeComposable',\n 'name',\n 'props',\n 'prototype',\n 'resource',\n ].includes(stateName)\n ) {\n throw new LayoutConfigurationError(\n `Render state name \"${stateName}\" is reserved`\n );\n }\n\n stateComponents[stateName] = createStateComponent(stateName, input);\n }\n\n const includedComponentDefinitions = Object.fromEntries(\n Object.keys(includeLayoutProps ?? {}).flatMap((key) => {\n if (\n !allowsComponentPassthrough(includeLayoutProps?.[key]) ||\n !(key in mergedResolvedInProps)\n ) {\n return [];\n }\n\n const definition = mergedResolvedInProps[\n key\n ] as AnyBuiltPropDefinition & {\n optional?: () => AnyBuiltPropDefinition;\n };\n const componentDefinition = isIncludedPropRequired(\n includeLayoutProps?.[key]\n )\n ? definition\n : definition.optional?.() ?? definition;\n\n return [[key, componentDefinition]];\n })\n );\n const previewEnabled =\n !inheritedInspection &&\n (getLayoutDebug(layoutOptions)?.preview ??\n getLayoutDebug(options)?.preview ??\n getLayoutDebug(layout)?.preview) === true;\n const previewTargets = {\n default: Component,\n ...stateComponents,\n } as unknown as Record<\n string,\n (props: Record<string, unknown>) => JSX.Element\n >;\n let previewRoot: object;\n const previewOptions = {\n store: inspectionStore,\n layout: layoutId,\n states: stateIds,\n components: previewTargets,\n fixtures: () =>\n (\n previewRoot as Record<symbol, Record<string, Record<string, unknown>>>\n )[layoutPreviewFixtures],\n };\n const exposedStates = previewEnabled\n ? Object.fromEntries(\n Object.entries(stateComponents).map(([key, component]) => [\n key,\n createPreviewComponent(component, {\n ...previewOptions,\n state: stateIds.get(key)!,\n }),\n ])\n )\n : stateComponents;\n const createdComponent = Object.assign(\n previewEnabled\n ? createPreviewComponent(Component as never, {\n ...previewOptions,\n state: activeInspection.state,\n })\n : Component,\n {\n displayName: name,\n props: undefined as unknown as Show<\n ResolveProps<CustomProps> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, InProps, Composables>,\n IncludeProps\n >\n >,\n resource: undefined as unknown as Resource,\n ...createComposition({\n components: resolvedComposables as Composables | undefined,\n name,\n }),\n ...exposedStates,\n [lazyStatesSymbol]: {\n owner: layoutId,\n Loading: stateComponents.Loading,\n Error: stateComponents.Error ? ({ error, retry }: import('../lazy/types').LazyResourceErrorProps) => <RenderStateRetryContext.Provider value={retry}><stateComponents.Error error={error} retry={retry} /></RenderStateRetryContext.Provider> : undefined,\n },\n [definedResourceLayoutComponentSymbol]: true as const,\n }\n );\n\n previewRoot = createdComponent;\n\n inspectionStore.attach(createdComponent);\n\n const rootComponent = attachComponentPropDefinitions(createdComponent, {\n ...customLayoutProps,\n ...includedComponentDefinitions,\n } as InPropsObject);\n\n if (namespace) {\n if (Object.prototype.hasOwnProperty.call(stateComponents, 'Root')) {\n throw new LayoutConfigurationError(\n 'Render state name \"Root\" is reserved when namespace is true'\n );\n }\n\n return { Root: rootComponent, ...exposedStates };\n }\n\n return rootComponent;\n }) as unknown as CreateResourceLayoutFnImpl<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n >;\n\n const createTopLevelMakeComposable = () => {\n return (options: Record<string, unknown>) => {\n const layout = definedResourceLayout({\n ...options,\n namespace: false,\n } as never);\n\n if (\n !('makeComposable' in layout) ||\n typeof layout.makeComposable !== 'function'\n ) {\n throw new LayoutConfigurationError(\n 'makeComposable requires composables to be defined in the layout'\n );\n }\n\n return (layout.makeComposable as () => unknown)();\n };\n };\n\n function getComponentPropDefinitions(resource: LayoutResourceKey<Resources>) {\n const componentName = 'ScopedResourceComponent';\n const rawResolvedOptions =\n typeof inProps === 'function'\n ? inProps({\n resource: resourcesEnum,\n name: createProp.string().literal(componentName),\n })\n : inProps;\n const { resolvedInProps } = splitLayoutInProps(\n rawResolvedOptions as Record<string, unknown>\n );\n const renderStates = (\n typeof layout.render === 'function'\n ? { default: layout.render }\n : layout.render\n ) as Record<string, unknown>;\n const defaultState = getSynchronousRenderStateDefinition(\n renderStates.default,\n layout.props\n );\n const stateReferences = createStateReferences(renderStates);\n const defaultComposables =\n layout.composables || defaultState?.composables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>) => ({\n ...(layout.composables?.(create, stateReferences) ?? {}),\n ...defaultState?.composables?.(create as never, stateReferences),\n })\n : undefined;\n const resolvedComposables = defaultComposables\n ? resolveLayoutComposables(defaultComposables, {\n resource,\n name: componentName,\n capitalize,\n })\n : undefined;\n\n for (const {\n props: presetPropDefinitions,\n } of collectComposablePresetEntries(resolvedComposables)) {\n Object.assign(resolvedInProps, presetPropDefinitions);\n }\n\n return {\n ...resolvedInProps,\n ...mergeLayoutProps(layout.props, defaultState?.props)?.custom,\n };\n }\n\n const { createLayoutForResourceBuilder, forResource } = createForResource<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >({\n createResourceLayout: definedResourceLayout as never,\n resolveLayoutOptionDefaults,\n });\n const forResources = createForResources<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >({\n createLayoutForResource: createLayoutForResourceBuilder,\n ...(layout.composables\n ? { createMakeComposableLayout: createTopLevelMakeComposable }\n : {}),\n createResourceLayout: definedResourceLayout as never,\n getComponentPropDefinitions,\n lazyEnvironment: {\n store: inheritedInspection?.store ?? inspection!.store,\n parent: inheritedInspection?.layout ?? inspection!.definition,\n defaults: getLazyDefaults,\n states(resource, props) {\n if (\n typeof layout.render !== 'object' ||\n !layout.render ||\n !('Loading' in layout.render || 'Error' in layout.render)\n )\n return {};\n const root = definedResourceLayout({\n ...props,\n resource,\n namespace: false,\n name: capitalize(resource),\n } as never) as unknown as { [lazyStatesSymbol]: LazyResourceStates & { owner?: string } };\n return root[lazyStatesSymbol];\n },\n },\n });\n\n const createResourceLayoutExtras: {\n forResource: CreateLayoutForResource<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n forResources: CreateResourceLayoutForResourcesFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps\n >;\n makeComposable?: ReturnType<typeof createTopLevelMakeComposable>;\n } = {\n forResource,\n forResources,\n };\n\n if (layout.composables) {\n createResourceLayoutExtras.makeComposable = createTopLevelMakeComposable();\n }\n\n const createResourceLayout = Object.assign(\n definedResourceLayout,\n createResourceLayoutExtras\n ) as CreateResourceLayoutFn<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n >;\n\n const createResourceLinks = createResourceLinksFn(resources);\n\n return (inspection?.store.attach ?? ((value: object) => value))({\n createResourceConfig,\n createResourceLayout,\n createResourceLinks,\n resources: resourcesAccessor,\n ResourceProvider,\n useResource,\n }) as DefinedResourceLayout<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Render extends Record<string, unknown> ? Render : {}\n >;\n}\n\ntype NonEmptyResourceDefinitions = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/**\n * Factory returned by {@link DefineResourceLayout.forResources}.\n */\nexport type DefineResourceLayoutForResourcesFactory<\n BaseResources extends NonEmptyResourceDefinitions\n> = {\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n const ExtraResources extends ReadonlyArray<ResourceDefinition> = [],\n Options extends InPropsDefinition<\n [...BaseResources, ...ExtraResources]\n > = {},\n Composables extends ComposableComponents = {},\n Namespace extends boolean = false\n >(\n options: Omit<\n CreateViewMapRenderStatesOptions<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n {},\n {},\n Render,\n Namespace\n >,\n 'resources'\n > & { resources?: AssertUnreservedResources<ExtraResources> }\n ): DefinedResourceLayoutFromStates<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n Render,\n Namespace\n >;\n <\n const ExtraResources extends ReadonlyArray<ResourceDefinition> = [],\n Options extends InPropsDefinition<\n [...BaseResources, ...ExtraResources]\n > = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n Namespace extends boolean = false\n >(\n options: Omit<\n CreateViewMapFunctionRenderOptions<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Namespace\n >,\n 'resources'\n > & { resources?: AssertUnreservedResources<ExtraResources> }\n ): DefinedResourceLayout<\n [...BaseResources, ...ExtraResources],\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n {},\n Namespace\n >;\n};\n\n/**\n * Binds one or more resources, then accepts the remaining\n * {@link defineResourceLayout} options (with optional extra `resources`).\n */\nexport type DefineResourceLayoutForResources = <\n const Resources extends NonEmptyResourceDefinitions\n>(\n ...resources: Resources\n) => DefineResourceLayoutForResourcesFactory<Resources>;\n\ntype IntersectStates<Union> = (\n Union extends unknown ? (value: Union) => void : never\n) extends (value: infer Intersection) => void\n ? Intersection\n : {};\n\ntype AllStateComposables<States> = IntersectStates<\n {\n [State in keyof States]: RenderStateComposables<\n UnwrapRenderState<States[State]>\n >;\n }[keyof States]\n> extends infer Components extends ComposableComponents\n ? Components\n : {};\n\ntype UnionKeys<U> = U extends unknown ? keyof U : never;\n\ntype UnionValue<U, K extends PropertyKey> = U extends unknown\n ? K extends keyof U\n ? U[K]\n : never\n : never;\n\ntype CombinedInclude<Value, Normalized = NormalizedIncludedPropBehavior<Value>> = [\n Extract<Normalized, true | { visibility: 'required'; passthrough: 'config' }>\n] extends [never]\n ? 'optional' extends Normalized\n ? 'optional'\n : [Extract<Normalized, { visibility: 'optional' }>] extends [never]\n ? Value\n : 'optional'\n : true;\n\ntype AllStateIncludes<\n States,\n Union = {\n [State in keyof States]: RenderStateIncludeProps<States[State]>;\n }[keyof States]\n> = { [K in UnionKeys<Union>]: CombinedInclude<UnionValue<Union, K>> };\n\nexport type MergeContract<Base, Local> = Omit<Base, keyof Local> & Local;\n\ntype PlainStateWithDefaults<\n Input,\n Include,\n Custom extends InPropsObject\n> = UnwrapRenderState<Input> & {\n props: {\n include: MergeContract<Include, RenderStateIncludeProps<Input>>;\n custom: MergeContract<Custom, RenderStateCustomProps<Input>>;\n };\n};\n\ntype StateWithDefaults<\n Input,\n Include,\n Custom extends InPropsObject\n> = Input extends import('./render-state').DeferredRenderState<\n infer D extends AnyRenderStateDefinition\n>\n ? import('./render-state').DeferredRenderState<\n PlainStateWithDefaults<D, Include, Custom>\n >\n : Input extends import('./render-state').LazyRenderState<\n infer D extends AnyRenderStateDefinition\n >\n ? import('./render-state').LazyRenderState<\n PlainStateWithDefaults<D, Include, Custom>\n >\n : PlainStateWithDefaults<Input, Include, Custom>;\n\ntype StatesWithDefaults<States, Include, Custom extends InPropsObject> = {\n [K in keyof States]: StateWithDefaults<States[K], Include, Custom>;\n};\n\nexport type DefinedResourceLayoutFromStates<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Render extends { default: unknown },\n DefaultNamespace extends boolean = false,\n BaseInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n BaseCustom extends InPropsObject = {},\n Naming extends LayoutNameInput<any, any> | undefined = undefined\n> = DefinedResourceLayout<\n Resources,\n Options,\n Composables & AllStateComposables<Render>,\n AllStateIncludes<\n StatesWithDefaults<Render, BaseInclude, BaseCustom>\n > extends infer Include extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & AllStateComposables<Render>\n >\n ? Include\n : {},\n MergeContract<BaseCustom, RenderStateCustomProps<Render['default']>>,\n StatesWithDefaults<Render, BaseInclude, BaseCustom>,\n DefaultNamespace,\n Naming\n>;\n\n/** Defines either a render-state map or a single render callback. */\nexport type DefineResourceLayoutFn = {\n // State maps come first so empty objects receive state-key completions.\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n const Render extends { default: unknown } & Record<string, unknown>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n Namespace extends boolean = false,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n >(\n options: CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n Render,\n Namespace,\n Naming\n >\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n Composables,\n Render,\n Namespace,\n IncludeProps,\n CustomProps,\n Naming\n >;\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n InProps extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n InProps,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n Namespace extends boolean = false,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n >(\n options: CreateViewMapFunctionRenderOptions<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n Namespace,\n Naming\n >\n ): DefinedResourceLayout<\n Resources,\n InProps,\n Composables,\n IncludeProps,\n CustomProps,\n {},\n Namespace,\n Naming\n >;\n};\n\n/**\n * Captures a `resources` array with its literal tuple type intact, so it can be\n * declared separately from the `defineResourceLayout` call without needing an\n * `as const` assertion.\n */\nexport type DefineResourcesFn = <\n const Resources extends ReadonlyArray<ResourceDefinition>\n>(\n ...resources: Resources\n) => Resources;\n\nfunction defineResources<\n const Resources extends ReadonlyArray<ResourceDefinition>\n>(...resources: Resources): Resources {\n return resources;\n}\n\nexport type DefineResourceLayout = DefineResourceLayoutFn & {\n forResources: DefineResourceLayoutForResources;\n /**\n * Builds a strongly-typed `resources` array to pass to `defineResourceLayout`\n * (or `defineResourceLayout.forResources`) without an `as const` assertion.\n */\n defineResources: DefineResourcesFn;\n /**\n * Like {@link defineResourceLayout}, but also returns a `Shell` component.\n *\n * With plain `defineResourceLayout`, every page is wrapped in its own\n * `createResourceLayout` component, so navigating between resources unmounts\n * one page component and mounts another — the shared chrome the `render`\n * produces (a sidebar, a header, subscriptions, observers) is rebuilt every\n * time. `withLayout` splits that chrome into a `shell` that mounts once,\n * above the router outlet, and stays mounted across navigation; pages mount\n * and unmount inside it and report their resource up automatically.\n */\n withLayout: DefineResourceLayoutWithLayoutFn;\n};\n\nfunction defineResourceLayoutForResources<\n const Resources extends NonEmptyResourceDefinitions\n>(\n ...baseResources: Resources\n): DefineResourceLayoutForResourcesFactory<Resources> {\n return ((\n options: Omit<CreateViewMapOptions<Resources>, 'resources'> & {\n resources?: ReadonlyArray<ResourceDefinition>;\n }\n ) => {\n const { resources: extraResources, ...rest } = options;\n const resources = extraResources\n ? [...baseResources, ...extraResources]\n : [...baseResources];\n\n return defineResourceLayoutImpl({\n ...rest,\n resources,\n } as never);\n }) as unknown as DefineResourceLayoutForResourcesFactory<Resources>;\n}\n\n/* -------------------------------------------------------------------------- */\n/* defineResourceLayout.withLayout — a once-mounted application shell */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Render context passed as the second argument to\n * {@link ShellLayoutDefinition.render}.\n *\n * The same shape as a per-resource `render` context (`composables`,\n * `resources`, `name`, `inProps`), with two differences that follow from the\n * shell being mounted once above the router outlet rather than per page:\n *\n * - `resource` / `resources.current` are `LayoutResourceKey | undefined`. The\n * shell outlives any single page, so the current resource is whatever the\n * mounted page last reported (or the `resource` prop, or nothing yet).\n * - `children` is the shell's content region. Render it where page content\n * belongs; it is already wrapped so mounted pages report their resource back.\n */\nexport type ShellRenderContext<\n Resources extends ReadonlyArray<ResourceDefinition>,\n ShellComposables extends ComposableComponents\n> = {\n composables: LayoutRenderComposables<ShellComposables>;\n inProps: Record<string, unknown>;\n /**\n * The resource currently rendered in the outlet, or `undefined` when no\n * per-resource page is mounted and no `resource` prop was passed.\n */\n resource: LayoutResourceKey<Resources> | undefined;\n /**\n * Resources accessor for this definition. `current` follows `resource` above\n * and may be `undefined`.\n */\n resources: LayoutResourcesAccessor<Resources> & {\n readonly current: LayoutResourceKey<Resources> | undefined;\n };\n name: string;\n /**\n * The shell's content region — typically a router `<Outlet />`. Render it\n * where page content belongs.\n */\n children: ReactNode;\n};\n\n/**\n * The `shell` block of a {@link defineResourceLayout.withLayout} call: the\n * chrome that mounts once and stays mounted while pages navigate inside it.\n *\n * Mirrors {@link LayoutDefinition} (`props`, `composables`, `render`) so the\n * two blocks read the same, plus an optional `name`.\n */\nexport type ShellLayoutDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n ShellComposables extends ComposableComponents,\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n >,\n ShellCustomProps extends InPropsObject\n> = {\n /**\n * Stable name for the shell component (React DevTools) and the base for any\n * resource-scoped composable names. Defaults to `'ResourceLayoutShell'`.\n */\n name?: string;\n props?: LayoutProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>\n ) => ShellComposables;\n render: (\n props: LayoutRenderProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >,\n context: ShellRenderContext<Resources, ShellComposables>\n ) => JSX.Element;\n};\n\n/**\n * Props accepted by the `Shell` component from\n * {@link defineResourceLayout.withLayout}.\n */\nexport type ResourceLayoutShellProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n ShellComposables extends ComposableComponents,\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n >,\n ShellCustomProps extends InPropsObject\n> = Show<\n ResolveProps<ShellCustomProps> &\n ResolvedIncludedComponentProps<\n MergedLayoutInProps<Resources, Options, ShellComposables>,\n ShellIncludeProps\n > & {\n /**\n * The resource the shell renders for. Overrides the value reported by the\n * page mounted in `children`. Always available — pass it from tests,\n * stories, or a route that renders non-library content but still wants\n * the shell.\n */\n resource?: LayoutResourceKey<Resources>;\n /** The shell's content region — typically a router `<Outlet />`. */\n children: ReactNode;\n }\n>;\n\n/**\n * The once-mounted application shell returned from\n * {@link defineResourceLayout.withLayout}. Wrap the router outlet with it.\n */\nexport type ResourceLayoutShellComponent<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n ShellComposables extends ComposableComponents = {},\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {}\n> = BaseComponent<\n string,\n ResourceLayoutShellProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >\n> & {\n (\n props: ResourceLayoutShellProps<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >\n ): JSX.Element;\n};\n\n/**\n * Options for {@link defineResourceLayout.withLayout}: everything\n * {@link defineResourceLayout} accepts, plus a required `shell`, and with the\n * per-resource `layout.render` made optional.\n */\nexport type CreateResourceLayoutWithLayoutOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n ShellComposables extends ComposableComponents = {},\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n Render = LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n Namespace extends boolean = false\n> = {\n /** Default namespace mode for created layouts. Defaults to false. */\n namespace?: Namespace;\n /**\n * An array of valid resource names to support. Nested sub-resource slugs that\n * collide with config keys (`component`, `detail`, `new`, …) are reserved.\n */\n resources: AssertUnreservedResources<Resources>;\n /**\n * The options that are passed into the created resource layout. Shared by the\n * shell and the per-resource layout, so an `include` on either side can draw\n * from the same definitions.\n */\n options?: Options;\n /**\n * The once-mounted shell. The returned `Shell` wraps the router outlet and\n * stays mounted across resource navigation, so its composables (a persistent\n * sidebar, header, breadcrumb container, …) keep their state and DOM while\n * pages mount and unmount inside it.\n */\n shell: ShellLayoutDefinition<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n /**\n * Per-resource content. Optional here: when the shell renders the whole\n * chrome, a page is just a slot — omit `render` and the generated component\n * renders its own `children` into the shell's outlet. Provide it to give a\n * resource its own header, actions, or per-page structure.\n */\n layout?: Omit<\n LayoutDefinition<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n 'render'\n > & {\n render?:\n | LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >\n | (Render extends (...args: any[]) => any\n ? never\n : Render &\n ContextualInlineRenderStates<Resources, Options, Composables>);\n };\n};\n\n/**\n * {@link DefinedResourceLayout} plus the once-mounted `Shell`.\n */\nexport type DefinedResourceLayoutWithShell<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents = {},\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n ShellComposables extends ComposableComponents = {},\n ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n States = {},\n DefaultNamespace extends boolean = false\n> = DefinedResourceLayout<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n States,\n DefaultNamespace\n> & {\n /**\n * The application shell. Mount it once, wrapping the router outlet:\n *\n * ```tsx\n * function AdminRoute() {\n * const resource = Route.useParams({ select: (p) => p.resource });\n * return (\n * <Shell resource={resource}>\n * <Outlet />\n * </Shell>\n * );\n * }\n * ```\n *\n * Passing `resource` is optional: a page created by `createResourceLayout`\n * reports its own resource to the shell automatically. Pass it for routes\n * that render non-library content, or in tests and stories.\n */\n Shell: ResourceLayoutShellComponent<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n};\n\n/**\n * Signature of {@link defineResourceLayout.withLayout}.\n */\n// Preserve state-key completions while the caller is building an empty map.\nexport type DefineResourceLayoutWithLayoutFn = {\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n const Render extends { default: unknown } & Record<string, unknown>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n ShellComposables extends ComposableComponents = {},\n const ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n Namespace extends boolean = false\n >(\n options: Omit<\n CreateResourceLayoutWithLayoutOptions<\n Resources,\n Options,\n Composables,\n {},\n {},\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps,\n LayoutRenderFunction<Resources, Options, Composables, {}, {}>,\n Namespace\n >,\n 'layout'\n > & {\n layout: CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n Composables,\n {},\n {},\n Render,\n Namespace\n >['layout'];\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n Composables,\n Render,\n Namespace\n > & {\n Shell: ResourceLayoutShellComponent<\n Resources,\n Options,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps\n >;\n };\n <\n const Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n ShellComposables extends ComposableComponents = {},\n const ShellIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n ShellComposables\n > = {},\n ShellCustomProps extends InPropsObject = {},\n Namespace extends boolean = false\n >(\n options: CreateResourceLayoutWithLayoutOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps,\n LayoutRenderFunction<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >,\n Namespace\n >\n ): DefinedResourceLayoutWithShell<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n ShellComposables,\n ShellIncludeProps,\n ShellCustomProps,\n {},\n Namespace\n >;\n};\n\n/**\n * Loose runtime shape of a `shell` block, used by the impl below.\n */\ntype ShellLayoutRuntime = {\n name?: string;\n composables?: (create: unknown) => ComposableComponents;\n props?: {\n include?: Record<string, unknown>;\n custom?: Record<string, unknown>;\n };\n render: (\n props: Record<string, unknown>,\n context: Record<string, unknown>\n ) => JSX.Element;\n};\n\n/**\n * Builds the `Shell` component. Kept beside {@link defineResourceLayoutImpl} so\n * it can reuse the same private prop-resolution helpers.\n *\n * Unlike a per-resource component, the shell re-reads the current resource on\n * every render (reported by the mounted page) so resource-scoped composable\n * *names* can update. Composable *component identities* are resolved once and\n * kept stable: React reconciles by element type, so recreating\n * `composables.Layout` each render would remount wrapWith targets, sidebar\n * state, and the outlet. Display names are synced onto those stable functions\n * when the resource changes.\n *\n * @param shellId - Identity of the owning `withLayout` definition. The shell\n * only accepts resource reports tagged with this id, so a page or pane from a\n * different definition rendered in the outlet cannot corrupt its state.\n */\nfunction createResourceLayoutShellComponent(\n resources: ReadonlyArray<ResourceDefinition>,\n inProps: InPropsObject | ((opts: Record<string, unknown>) => InPropsObject),\n shell: ShellLayoutRuntime,\n shellId: symbol\n) {\n const shellName = shell.name ?? 'ResourceLayoutShell';\n // `resources` is the wide `ResourceDefinition[]` here (not the const generic\n // that `defineResourceLayoutImpl` captures), so the normalize/enum types are\n // erased to keep TS from trying to instantiate them structurally. Only the\n // runtime key list matters — the shell validates against it, it does not\n // surface it in a public type.\n const resourceKeys = Object.keys(\n normalizeResources(resources as never) as Record<string, unknown>\n );\n const resourcesEnum = createPrimitivePropBuilder('string').enum(\n resourceKeys as never\n );\n\n // `options` may be a function of `{ resource, name }`. The shell has no single\n // resource, so — like the component path in `defineResourceLayoutImpl` — the\n // enum stands in for `resource` while resolving the definitions.\n const rawResolvedOptions =\n typeof inProps === 'function'\n ? inProps({\n resource: resourcesEnum,\n name: createProp.string().literal(shellName),\n })\n : inProps;\n const { resolvedInProps, splitInProps } = splitLayoutInProps(\n rawResolvedOptions as Record<string, unknown>\n );\n\n const includeShellProps = shell.props?.include;\n const includeShellPropKeys = Object.keys(includeShellProps ?? {});\n const shellCustomDefinitions = {\n ...(shell.props?.custom ?? {}),\n } as Record<string, AnyBuiltPropDefinition>;\n\n function syncShellComposableDisplayNames(\n stable: ComposableComponents,\n resource: string\n ) {\n if (!shell.composables) {\n return;\n }\n\n const named = resolveLayoutComposables(\n shell.composables as never,\n {\n resource,\n name: shellName,\n capitalize,\n } as never\n ) as ComposableComponents;\n\n for (const [key, component] of Object.entries(named)) {\n const stableComponent = stable[key];\n\n if (\n typeof stableComponent === 'function' &&\n typeof component === 'function' &&\n 'displayName' in component\n ) {\n (stableComponent as { displayName?: string }).displayName = (\n component as { displayName?: string }\n ).displayName;\n }\n }\n }\n\n function Shell(props: Record<string, unknown>) {\n const { children: outlet, resource: resourceProp } = props as {\n children: ReactNode;\n resource?: string;\n };\n\n // Which resource is currently in the outlet. A per-resource page reports its\n // own resource here on mount (see the layout effect in `Component`);\n // `undefined` between pages or on a route with no per-resource layout. An\n // explicit `resource` prop always wins.\n const [reportedResource, setReportedResource] = useState<\n string | undefined\n >(undefined);\n const publishResource = useCallback<ResourceLayoutShellPublisher>(\n (resource, ownerId) => {\n // Ignore reports from components that belong to a different\n // `defineResourceLayout` definition — they share this context but their\n // resource is unrelated to this shell.\n if (ownerId !== shellId) {\n return;\n }\n\n setReportedResource(resource);\n },\n []\n );\n const resource = resourceProp ?? reportedResource;\n\n // The outlet subtree must not re-render when `reportedResource` changes —\n // only the shell chrome should. Memoising the wrapped element lets React\n // bail out of reconciling the page while, say, the breadcrumb label updates.\n const shellChildren = useMemo(\n () => (\n <ResourceLayoutShellPublisherContext.Provider value={publishResource}>\n {outlet}\n </ResourceLayoutShellPublisherContext.Provider>\n ),\n [outlet, publishResource]\n );\n\n // Resolve composables once so `<composables.Layout>` keeps a stable element\n // type across Shell re-renders (including the layout-effect resource report).\n // Re-resolving every render would allocate new component functions and React\n // would remount the whole chrome tree. Names still track the live resource\n // via {@link syncShellComposableDisplayNames}.\n const composablesRef = useRef<ComposableComponents | undefined>(undefined);\n\n if (shell.composables) {\n const nameContextResource = resource ?? '';\n\n if (!composablesRef.current) {\n composablesRef.current = resolveLayoutComposables(\n shell.composables as never,\n {\n resource: nameContextResource,\n name: shellName,\n capitalize,\n } as never\n ) as ComposableComponents;\n } else {\n syncShellComposableDisplayNames(\n composablesRef.current,\n nameContextResource\n );\n }\n }\n\n const resolvedComposables = composablesRef.current;\n const validationContext = {\n layoutName: shellName,\n resource: resource ?? '',\n };\n\n const mergedResolvedInProps = { ...resolvedInProps } as Record<\n string,\n unknown\n >;\n\n for (const {\n props: presetPropDefinitions,\n } of collectComposablePresetEntries(resolvedComposables)) {\n Object.assign(mergedResolvedInProps, presetPropDefinitions);\n }\n\n // Included props: definition-time defaults from `options`, overridden by\n // anything passed to `<Shell>` (component passthrough). Computed before\n // preset validation so config-passthrough includes can reuse the defaults.\n const includedPropDefinitions = pick(\n mergedResolvedInProps,\n includeShellPropKeys\n ) as Record<string, unknown>;\n const includedPropValues = {\n ...resolvePropDefinitionValues(includedPropDefinitions),\n } as Record<string, unknown>;\n\n for (const key of includeShellPropKeys) {\n const definition = mergedResolvedInProps[key];\n const behavior = includeShellProps?.[key];\n const callSiteValue = allowsComponentPassthrough(behavior)\n ? readLayoutOptionValue(key, definition, props)\n : undefined;\n // Config passthrough has no create-time call on Shell; still honour\n // literal / split defaults from `options` when present.\n const configValue = allowsConfigPassthrough(behavior)\n ? readLayoutOptionValue(key, definition, {\n ...includedPropValues,\n ...splitInProps,\n })\n : undefined;\n const splitValue = key in splitInProps ? splitInProps[key] : undefined;\n const value = callSiteValue ?? configValue ?? splitValue;\n\n if (value !== undefined) {\n includedPropValues[key] = value;\n }\n }\n\n // Preset props: Shell has no create-time call. Component-passthrough values\n // come from `<Shell>` props; config-passthrough values only from definition\n // defaults. Required config includes without a default are omitted from\n // validation — they are not typed on Shell and cannot be supplied.\n const composablePresetProps = Object.fromEntries(\n collectComposablePresetEntries(resolvedComposables).map(\n ({ key, props: presetPropDefinitions }) => {\n const entries = Object.entries(presetPropDefinitions);\n const validatedDefinitions = Object.fromEntries(\n entries.filter(([propKey]) => {\n const behavior = includeShellProps?.[propKey];\n\n if (behavior === undefined) {\n return true;\n }\n\n if (allowsComponentPassthrough(behavior)) {\n return true;\n }\n\n if (allowsConfigPassthrough(behavior)) {\n return includedPropValues[propKey] !== undefined;\n }\n\n return false;\n })\n );\n const values = Object.fromEntries(\n entries.flatMap(([propKey]) => {\n if (propKey in props) {\n return [[propKey, props[propKey]]];\n }\n\n if (includedPropValues[propKey] !== undefined) {\n return [[propKey, includedPropValues[propKey]]];\n }\n\n return [];\n })\n );\n\n return [\n key,\n validateProps(\n validatedDefinitions as Record<string, AnyBuiltPropDefinition>,\n values,\n validationContext\n ),\n ];\n }\n )\n );\n\n const validatedCustomProps = validateProps(\n shellCustomDefinitions,\n props,\n validationContext\n );\n\n const requiredIncludedDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(([key]) => {\n const behavior = includeShellProps?.[key];\n\n if (!isIncludedPropRequired(behavior)) {\n return false;\n }\n\n // Component passthrough stays required on `<Shell>` (and is typed there).\n if (allowsComponentPassthrough(behavior)) {\n return true;\n }\n\n // Config passthrough: only require when a definition-time value exists.\n return includedPropValues[key] !== undefined;\n })\n );\n const optionalIncludedDefinitions = Object.fromEntries(\n Object.entries(includedPropDefinitions).filter(\n ([key]) =>\n !isIncludedPropRequired(includeShellProps?.[key]) &&\n includedPropValues[key] !== undefined\n )\n );\n const validatedIncludedProps = validateProps(\n {\n ...requiredIncludedDefinitions,\n ...optionalIncludedDefinitions,\n } as Record<string, AnyBuiltPropDefinition>,\n includedPropValues,\n validationContext\n );\n const renderIncludedProps = Object.fromEntries(\n includeShellPropKeys.flatMap((key) =>\n key in validatedIncludedProps\n ? [\n [\n toLayoutRenderPropKey(key, mergedResolvedInProps[key]),\n validatedIncludedProps[\n key as keyof typeof validatedIncludedProps\n ],\n ],\n ]\n : []\n )\n );\n\n const renderProps = { ...validatedCustomProps, ...renderIncludedProps };\n const renderContext = {\n composables: resolvedComposables,\n resource,\n resources: createLayoutRenderResourcesAccessor(\n resources as ReadonlyArray<ResourceDefinition>,\n resource as never\n ),\n name: shellName,\n inProps: splitInProps,\n children: shellChildren,\n };\n\n const rendered = shell.render(renderProps, renderContext);\n\n return resolvedComposables ? (\n <LayoutComposablePresetProvider value={composablePresetProps}>\n {rendered}\n </LayoutComposablePresetProvider>\n ) : (\n rendered\n );\n }\n\n return Object.assign(Shell, {\n displayName: shellName,\n props: undefined as never,\n });\n}\n\n/**\n * Implementation of {@link defineResourceLayout.withLayout}. Delegates the\n * config / links / `createResourceLayout` pieces to {@link defineResourceLayoutImpl}\n * and adds the {@link createResourceLayoutShellComponent | Shell}.\n */\nfunction defineResourceLayoutWithLayoutImpl(\n options: Record<string, unknown>\n): Record<string, unknown> {\n const {\n shell,\n layout,\n resources,\n options: inProps,\n } = options as {\n shell: ShellLayoutRuntime;\n layout?: {\n composables?: unknown;\n props?: { include?: unknown; custom?: Record<string, unknown> };\n render?: (\n props: Record<string, unknown>,\n context: unknown\n ) => JSX.Element;\n };\n resources: ReadonlyArray<ResourceDefinition>;\n options?:\n | InPropsObject\n | ((opts: Record<string, unknown>) => InPropsObject);\n };\n\n // The per-resource `render` is optional under `withLayout`. When omitted, the\n // page is a pure content slot: give it a `children` prop (so\n // `<UsersPage>{content}</UsersPage>` type-checks and works) and a render that\n // drops that content into the shell's outlet. An explicit `render` is passed\n // through untouched.\n const resolvedLayout = layout?.render\n ? layout\n : {\n ...layout,\n props: {\n ...layout?.props,\n custom: {\n children: createProp.component({ type: 'ReactNode' }).optional(),\n ...(layout?.props?.custom ?? {}),\n },\n },\n render: (pageProps: Record<string, unknown>) => (\n <>{(pageProps.children as ReactNode) ?? null}</>\n ),\n };\n\n // Ties the shell to the pages created by *its* `createResourceLayout`. Pages\n // from other definitions rendered in the outlet carry a different id (or\n // none) and are ignored by the shell's resource tracking.\n const shellId = Symbol('resourceLayoutShell');\n\n const base = defineResourceLayoutImpl({\n [layoutDebug]: getLayoutDebug(options),\n resources,\n options: inProps,\n layout: resolvedLayout,\n namespace: options.namespace,\n shellId,\n } as never) as Record<string, unknown>;\n\n const Shell = createResourceLayoutShellComponent(\n resources,\n (inProps ?? {}) as never,\n shell,\n shellId\n );\n\n return { ...base, Shell };\n}\n\nexport const defineResourceLayout: DefineResourceLayout = Object.assign(\n defineResourceLayoutImpl as DefineResourceLayoutFn,\n {\n forResources: defineResourceLayoutForResources,\n defineResources,\n withLayout:\n defineResourceLayoutWithLayoutImpl as unknown as DefineResourceLayoutWithLayoutFn,\n }\n);\n"],"mappings":"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"}