@jfdevelops/react-layout 1.3.0 → 1.4.1

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 (45) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +1 -0
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +4 -4
  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 +4 -4
  6. package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
  7. package/dist/create-config/create-defined-resource-layout.mjs +2 -1
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +35 -5
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +2 -2
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +2 -2
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +36 -6
  16. package/dist/create-config/define-layout.mjs.map +1 -1
  17. package/dist/create-config/index.d.cts +2 -1
  18. package/dist/create-config/index.d.mts +2 -1
  19. package/dist/create-config/inspection.cjs +4 -2
  20. package/dist/create-config/inspection.cjs.map +1 -1
  21. package/dist/create-config/inspection.mjs +4 -2
  22. package/dist/create-config/inspection.mjs.map +1 -1
  23. package/dist/create-config/lazy-resource-layout.cjs +1 -1
  24. package/dist/create-config/lazy-resource-layout.mjs +1 -1
  25. package/dist/create-config/preview.cjs +62 -0
  26. package/dist/create-config/preview.cjs.map +1 -0
  27. package/dist/create-config/preview.d.cts +13 -0
  28. package/dist/create-config/preview.d.cts.map +1 -0
  29. package/dist/create-config/preview.d.mts +13 -0
  30. package/dist/create-config/preview.d.mts.map +1 -0
  31. package/dist/create-config/preview.mjs +61 -0
  32. package/dist/create-config/preview.mjs.map +1 -0
  33. package/dist/create-config/render-state.cjs +19 -3
  34. package/dist/create-config/render-state.cjs.map +1 -1
  35. package/dist/create-config/render-state.d.cts +1 -1
  36. package/dist/create-config/render-state.d.cts.map +1 -1
  37. package/dist/create-config/render-state.d.mts +1 -1
  38. package/dist/create-config/render-state.d.mts.map +1 -1
  39. package/dist/create-config/render-state.mjs +19 -3
  40. package/dist/create-config/render-state.mjs.map +1 -1
  41. package/dist/index.cjs +2 -0
  42. package/dist/index.d.cts +2 -1
  43. package/dist/index.d.mts +2 -1
  44. package/dist/index.mjs +2 -1
  45. package/package.json +3 -3
@@ -50,6 +50,7 @@ function createDefinedResourceLayout(configuration) {
50
50
  const boundDefineResourceLayout = ((layout) => {
51
51
  const localComposables = layout.composables;
52
52
  const definition = defineBoundLayout({
53
+ [_jfdevelops_react_layout_devtools_core.layoutDebug]: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout) ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(configuration),
53
54
  options,
54
55
  name: layout.name ?? configuration.name,
55
56
  namespace: layout.namespace ?? configuration.namespace,
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","mergeLayoutProps","createLazyResourceLayout","layoutInspection","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { createInspectionStore, inspectionId, layoutInspection, getInspectionSource } from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type { ComposableComponents, CreateLayoutComposable } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[],\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: { include?: SharedInclude; custom?: SharedCustom };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false,\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents,\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<Definition extends { layout: unknown; namespace?: boolean }> =\n Definition['layout'] & Pick<Definition, 'namespace'> & (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>,\n ) => LocalComposables;\n },\n ): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Naming>;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.',\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.',\n );\n }\n\n lazyDefaults = defaults;\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as LayoutComposablesDefinition<Resources, ComposableComponents> | undefined;\n const definition = defineBoundLayout({\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(configuration.props, layout.props as { include?: object; custom?: object }),\n composables: composables || localComposables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n inspection.connect(definition);\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n const id = inspectionId('lazy');\n const label = (lazyOptions as unknown as { resource: string }).resource;\n inspection.node({ id, kind: 'lazy', label, unresolved: true });\n return createLazyResourceLayout({ ...lazyOptions, load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n for (const entry of Object.values(module)) {\n const component = entry && typeof entry === 'object' && 'Root' in entry ? entry.Root : entry;\n if ((typeof component === 'object' && component !== null || typeof component === 'function') && layoutInspection in component) {\n inspection.connect(component);\n const target = getInspectionSource(component).getSnapshot().nodes.find(n => n.kind === 'layout' && n.label === (component as { displayName?: string }).displayName);\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n inspection.node({ id, kind: 'lazy', label, unresolved: false });\n return module as Module;\n } }, lazyDefaults);\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder({\n props: configuration.props,\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkPA,SAAgB,4BASd,eASkI;CAClI,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,+EAAmC;CACzC,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAIC,4DACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAIA,4DACR,gFACF;EAGF,eAAe;EACf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAChC,MAAM,aAAa,kBAAkB;GACnC;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAOC,4CAAiB,cAAc,OAAO,OAAO,KAA8C;IAClG,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;EACV,WAAW,QAAQ,UAAU;EAC7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,MAAM,8DAAkB,MAAM;EAC9B,MAAM,QAAS,YAAgD;EAC/D,WAAW,KAAK;GAAE;GAAI,MAAM;GAAQ;GAAO,YAAY;EAAK,CAAC;EAC7D,OAAOC,sDAAyB;GAAE,GAAG;GAAa,MAAM,YAAY;IAClE,MAAM,SAAkC,MAAM,YAAY,KAAK;IAC/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YAAY,SAAS,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,OAAO;KACvF,KAAK,OAAO,cAAc,YAAY,cAAc,QAAQ,OAAO,cAAc,eAAeC,2DAAoB,WAAW;MAC7H,WAAW,QAAQ,SAAS;MAC5B,MAAM,yEAA6B,SAAS,EAAE,YAAY,EAAE,MAAM,MAAK,MAAK,EAAE,SAAS,YAAY,EAAE,UAAW,UAAuC,WAAW;MAClK,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IACA,WAAW,KAAK;KAAE;KAAI,MAAM;KAAQ;KAAO,YAAY;IAAM,CAAC;IAC9D,OAAO;GACT;EAAE,GAAG,YAAY;CACnB;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmBC,8CAAyB;GAC1C,OAAO,cAAc;GACrB;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD,CAAC;AACH"}
1
+ {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","layoutDebug","mergeLayoutProps","createLazyResourceLayout","layoutInspection","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import {\n getLayoutDebug,\n layoutDebug,\n createInspectionStore,\n inspectionId,\n layoutInspection,\n getInspectionSource,\n} from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: {\n include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;\n custom?: SharedCustom;\n };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<\n Definition extends { layout: unknown; namespace?: boolean }\n> = Definition['layout'] &\n Pick<Definition, 'namespace'> &\n (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<\n LayoutResourceKey<Resources>,\n ('default' | keyof Render) & string\n >\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Render,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>\n ) => LocalComposables;\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n Render,\n Namespace,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Naming\n >;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>, 'default'>\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => LocalComposables;\n }\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<\n Resources,\n Options,\n Composables,\n SharedInclude,\n SharedCustom\n >;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >\n): CreateDefinedResourceLayoutResult<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.'\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.'\n );\n }\n\n lazyDefaults = defaults;\n\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as\n | LayoutComposablesDefinition<Resources, ComposableComponents>\n | undefined;\n const definition = defineBoundLayout({\n [layoutDebug]: getLayoutDebug(layout) ?? getLayoutDebug(configuration),\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(\n configuration.props,\n layout.props as { include?: object; custom?: object }\n ),\n composables:\n composables || localComposables\n ? (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n\n inspection.connect(definition);\n\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n\n const id = inspectionId('lazy');\n const label = (lazyOptions as unknown as { resource: string }).resource;\n\n inspection.node({ id, kind: 'lazy', label, unresolved: true });\n\n return createLazyResourceLayout(\n {\n ...lazyOptions,\n load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n\n for (const entry of Object.values(module)) {\n const component =\n entry && typeof entry === 'object' && 'Root' in entry\n ? entry.Root\n : entry;\n\n if (\n ((typeof component === 'object' && component !== null) ||\n typeof component === 'function') &&\n layoutInspection in component\n ) {\n inspection.connect(component);\n\n const target = getInspectionSource(component)\n .getSnapshot()\n .nodes.find(\n (n) =>\n n.kind === 'layout' &&\n n.label ===\n (component as { displayName?: string }).displayName\n );\n\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n\n inspection.node({ id, kind: 'lazy', label, unresolved: false });\n\n return module as Module;\n },\n },\n lazyDefaults\n );\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder({\n props: configuration.props,\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwUA,SAAgB,4BAed,eAiBA;CACA,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,+EAAmC;CACzC,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAIC,4DACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAIA,4DACR,gFACF;EAGF,eAAe;EAEf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAGhC,MAAM,aAAa,kBAAkB;IAClCC,gHAA6B,MAAM,gEAAoB,aAAa;GACrE;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAOC,4CACL,cAAc,OACd,OAAO,KACT;IACA,aACE,eAAe,oBAET,QACA,YACI;KACJ,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACR;EACF,CAAU;EAEV,WAAW,QAAQ,UAAU;EAE7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EAEpB,MAAM,8DAAkB,MAAM;EAC9B,MAAM,QAAS,YAAgD;EAE/D,WAAW,KAAK;GAAE;GAAI,MAAM;GAAQ;GAAO,YAAY;EAAK,CAAC;EAE7D,OAAOC,sDACL;GACE,GAAG;GACH,MAAM,YAAY;IAChB,MAAM,SAAkC,MAAM,YAAY,KAAK;IAE/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YACJ,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAAM,OACN;KAEN,KACI,OAAO,cAAc,YAAY,cAAc,QAC/C,OAAO,cAAc,eACvBC,2DAAoB,WACpB;MACA,WAAW,QAAQ,SAAS;MAE5B,MAAM,yEAA6B,SAAS,EACzC,YAAY,EACZ,MAAM,MACJ,MACC,EAAE,SAAS,YACX,EAAE,UACC,UAAuC,WAC9C;MAEF,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IAEA,WAAW,KAAK;KAAE;KAAI,MAAM;KAAQ;KAAO,YAAY;IAAM,CAAC;IAE9D,OAAO;GACT;EACF,GACA,YACF;CACF;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmBC,8CAAyB;GAC1C,OAAO,cAAc;GACrB;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD,CAAC;AACH"}
@@ -14,7 +14,7 @@ type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Opt
14
14
  namespace?: DefaultNamespace; /** Default naming convention; explicit definition and component names override it. */
15
15
  name?: DefaultNaming; /** Shared prop contracts, merged by key with layout and state contracts. */
16
16
  props?: {
17
- include?: SharedInclude;
17
+ include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;
18
18
  custom?: SharedCustom;
19
19
  }; /** Resources supported by every layout created from this factory. */
20
20
  resources: Resources; /** Props that render states can opt into through `props.include`. */
@@ -47,10 +47,10 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
47
47
  */
48
48
  <const Render extends {
49
49
  default: unknown;
50
- } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>, 'composables' | 'name' | 'props'> & {
50
+ } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>, 'composables' | 'name' | 'props'> & {
51
51
  name?: Naming;
52
52
  props?: {
53
- include?: IncludeProps;
53
+ include?: LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> & IncludeProps;
54
54
  custom?: CustomProps;
55
55
  };
56
56
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: RenderStateReferences<Resources, Options, Composables, Render>) => LocalComposables;
@@ -58,7 +58,7 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
58
58
  <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Namespace>>, 'composables' | 'name' | 'props'> & {
59
59
  name?: Naming;
60
60
  props?: {
61
- include?: IncludeProps;
61
+ include?: LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> & IncludeProps;
62
62
  custom?: CustomProps;
63
63
  };
64
64
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => LocalComposables;
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.d.cts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
1
+ {"version":3,"file":"create-defined-resource-layout.d.cts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
@@ -14,7 +14,7 @@ type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Opt
14
14
  namespace?: DefaultNamespace; /** Default naming convention; explicit definition and component names override it. */
15
15
  name?: DefaultNaming; /** Shared prop contracts, merged by key with layout and state contracts. */
16
16
  props?: {
17
- include?: SharedInclude;
17
+ include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;
18
18
  custom?: SharedCustom;
19
19
  }; /** Resources supported by every layout created from this factory. */
20
20
  resources: Resources; /** Props that render states can opt into through `props.include`. */
@@ -47,10 +47,10 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
47
47
  */
48
48
  <const Render extends {
49
49
  default: unknown;
50
- } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>, 'composables' | 'name' | 'props'> & {
50
+ } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>, 'composables' | 'name' | 'props'> & {
51
51
  name?: Naming;
52
52
  props?: {
53
- include?: IncludeProps;
53
+ include?: LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> & IncludeProps;
54
54
  custom?: CustomProps;
55
55
  };
56
56
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: RenderStateReferences<Resources, Options, Composables, Render>) => LocalComposables;
@@ -58,7 +58,7 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
58
58
  <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Namespace>>, 'composables' | 'name' | 'props'> & {
59
59
  name?: Naming;
60
60
  props?: {
61
- include?: IncludeProps;
61
+ include?: LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> & IncludeProps;
62
62
  custom?: CustomProps;
63
63
  };
64
64
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => LocalComposables;
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.d.mts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
1
+ {"version":3,"file":"create-defined-resource-layout.d.mts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { mergeLayoutProps } from "./merge-layout-props.mjs";
3
3
  import { createRenderStateBuilder } from "./render-state.mjs";
4
4
  import { createLayoutResourcesAccessor, defineResourceLayout } from "./define-layout.mjs";
5
5
  import { createLazyResourceLayout } from "./lazy-resource-layout.mjs";
6
- import { createInspectionStore, getInspectionSource, inspectionId, layoutInspection } from "@jfdevelops/react-layout-devtools-core";
6
+ import { createInspectionStore, getInspectionSource, getLayoutDebug, inspectionId, layoutDebug, layoutInspection } from "@jfdevelops/react-layout-devtools-core";
7
7
 
8
8
  //#region src/create-config/create-defined-resource-layout.ts
9
9
  /**
@@ -50,6 +50,7 @@ function createDefinedResourceLayout(configuration) {
50
50
  const boundDefineResourceLayout = ((layout) => {
51
51
  const localComposables = layout.composables;
52
52
  const definition = defineBoundLayout({
53
+ [layoutDebug]: getLayoutDebug(layout) ?? getLayoutDebug(configuration),
53
54
  options,
54
55
  name: layout.name ?? configuration.name,
55
56
  namespace: layout.namespace ?? configuration.namespace,
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { createInspectionStore, inspectionId, layoutInspection, getInspectionSource } from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type { ComposableComponents, CreateLayoutComposable } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[],\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: { include?: SharedInclude; custom?: SharedCustom };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false,\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents,\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<Definition extends { layout: unknown; namespace?: boolean }> =\n Definition['layout'] & Pick<Definition, 'namespace'> & (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>,\n ) => LocalComposables;\n },\n ): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Naming>;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.',\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.',\n );\n }\n\n lazyDefaults = defaults;\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as LayoutComposablesDefinition<Resources, ComposableComponents> | undefined;\n const definition = defineBoundLayout({\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(configuration.props, layout.props as { include?: object; custom?: object }),\n composables: composables || localComposables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n inspection.connect(definition);\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n const id = inspectionId('lazy');\n const label = (lazyOptions as unknown as { resource: string }).resource;\n inspection.node({ id, kind: 'lazy', label, unresolved: true });\n return createLazyResourceLayout({ ...lazyOptions, load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n for (const entry of Object.values(module)) {\n const component = entry && typeof entry === 'object' && 'Root' in entry ? entry.Root : entry;\n if ((typeof component === 'object' && component !== null || typeof component === 'function') && layoutInspection in component) {\n inspection.connect(component);\n const target = getInspectionSource(component).getSnapshot().nodes.find(n => n.kind === 'layout' && n.label === (component as { displayName?: string }).displayName);\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n inspection.node({ id, kind: 'lazy', label, unresolved: false });\n return module as Module;\n } }, lazyDefaults);\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder({\n props: configuration.props,\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkPA,SAAgB,4BASd,eASkI;CAClI,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,aAAa,sBAAsB;CACzC,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAI,yBACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAI,yBACR,gFACF;EAGF,eAAe;EACf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAChC,MAAM,aAAa,kBAAkB;GACnC;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAO,iBAAiB,cAAc,OAAO,OAAO,KAA8C;IAClG,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;EACV,WAAW,QAAQ,UAAU;EAC7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,MAAM,KAAK,aAAa,MAAM;EAC9B,MAAM,QAAS,YAAgD;EAC/D,WAAW,KAAK;GAAE;GAAI,MAAM;GAAQ;GAAO,YAAY;EAAK,CAAC;EAC7D,OAAO,yBAAyB;GAAE,GAAG;GAAa,MAAM,YAAY;IAClE,MAAM,SAAkC,MAAM,YAAY,KAAK;IAC/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YAAY,SAAS,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,OAAO;KACvF,KAAK,OAAO,cAAc,YAAY,cAAc,QAAQ,OAAO,cAAc,eAAe,oBAAoB,WAAW;MAC7H,WAAW,QAAQ,SAAS;MAC5B,MAAM,SAAS,oBAAoB,SAAS,EAAE,YAAY,EAAE,MAAM,MAAK,MAAK,EAAE,SAAS,YAAY,EAAE,UAAW,UAAuC,WAAW;MAClK,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IACA,WAAW,KAAK;KAAE;KAAI,MAAM;KAAQ;KAAO,YAAY;IAAM,CAAC;IAC9D,OAAO;GACT;EAAE,GAAG,YAAY;CACnB;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmB,yBAAyB;GAC1C,OAAO,cAAc;GACrB;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD,CAAC;AACH"}
1
+ {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import {\n getLayoutDebug,\n layoutDebug,\n createInspectionStore,\n inspectionId,\n layoutInspection,\n getInspectionSource,\n} from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[]\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: {\n include?: LayoutIncludeProps<Resources, Options, Composables> & SharedInclude;\n custom?: SharedCustom;\n };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<\n Definition extends { layout: unknown; namespace?: boolean }\n> = Definition['layout'] &\n Pick<Definition, 'namespace'> &\n (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n const Naming extends\n | LayoutNameInput<\n LayoutResourceKey<Resources>,\n ('default' | keyof Render) & string\n >\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapRenderStatesOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Render,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>\n ) => LocalComposables;\n }\n ): DefinedResourceLayoutFromStates<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n Render,\n Namespace,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Naming\n >;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends\n | LayoutNameInput<LayoutResourceKey<Resources>, 'default'>\n | undefined = DefaultNaming\n >(\n layout: Omit<\n BoundLayoutInput<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >\n >,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: {\n include?: LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > & IncludeProps;\n custom?: CustomProps;\n };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => LocalComposables;\n }\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<\n Resources,\n Options,\n Composables,\n SharedInclude,\n SharedCustom\n >;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends\n | LayoutNameInput<LayoutResourceKey<Resources>>\n | undefined = undefined\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >\n): CreateDefinedResourceLayoutResult<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.'\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.'\n );\n }\n\n lazyDefaults = defaults;\n\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as\n | LayoutComposablesDefinition<Resources, ComposableComponents>\n | undefined;\n const definition = defineBoundLayout({\n [layoutDebug]: getLayoutDebug(layout) ?? getLayoutDebug(configuration),\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(\n configuration.props,\n layout.props as { include?: object; custom?: object }\n ),\n composables:\n composables || localComposables\n ? (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {}\n ) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n\n inspection.connect(definition);\n\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n\n const id = inspectionId('lazy');\n const label = (lazyOptions as unknown as { resource: string }).resource;\n\n inspection.node({ id, kind: 'lazy', label, unresolved: true });\n\n return createLazyResourceLayout(\n {\n ...lazyOptions,\n load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n\n for (const entry of Object.values(module)) {\n const component =\n entry && typeof entry === 'object' && 'Root' in entry\n ? entry.Root\n : entry;\n\n if (\n ((typeof component === 'object' && component !== null) ||\n typeof component === 'function') &&\n layoutInspection in component\n ) {\n inspection.connect(component);\n\n const target = getInspectionSource(component)\n .getSnapshot()\n .nodes.find(\n (n) =>\n n.kind === 'layout' &&\n n.label ===\n (component as { displayName?: string }).displayName\n );\n\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n\n inspection.node({ id, kind: 'lazy', label, unresolved: false });\n\n return module as Module;\n },\n },\n lazyDefaults\n );\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder({\n props: configuration.props,\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwUA,SAAgB,4BAed,eAiBA;CACA,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,aAAa,sBAAsB;CACzC,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAI,yBACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAI,yBACR,gFACF;EAGF,eAAe;EAEf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAGhC,MAAM,aAAa,kBAAkB;IAClC,cAAc,eAAe,MAAM,KAAK,eAAe,aAAa;GACrE;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAO,iBACL,cAAc,OACd,OAAO,KACT;IACA,aACE,eAAe,oBAET,QACA,YACI;KACJ,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACR;EACF,CAAU;EAEV,WAAW,QAAQ,UAAU;EAE7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EAEpB,MAAM,KAAK,aAAa,MAAM;EAC9B,MAAM,QAAS,YAAgD;EAE/D,WAAW,KAAK;GAAE;GAAI,MAAM;GAAQ;GAAO,YAAY;EAAK,CAAC;EAE7D,OAAO,yBACL;GACE,GAAG;GACH,MAAM,YAAY;IAChB,MAAM,SAAkC,MAAM,YAAY,KAAK;IAE/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YACJ,SAAS,OAAO,UAAU,YAAY,UAAU,QAC5C,MAAM,OACN;KAEN,KACI,OAAO,cAAc,YAAY,cAAc,QAC/C,OAAO,cAAc,eACvB,oBAAoB,WACpB;MACA,WAAW,QAAQ,SAAS;MAE5B,MAAM,SAAS,oBAAoB,SAAS,EACzC,YAAY,EACZ,MAAM,MACJ,MACC,EAAE,SAAS,YACX,EAAE,UACC,UAAuC,WAC9C;MAEF,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IAEA,WAAW,KAAK;KAAE;KAAI,MAAM;KAAQ;KAAO,YAAY;IAAM,CAAC;IAE9D,OAAO;GACT;EACF,GACA,YACF;CACF;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmB,yBAAyB;GAC1C,OAAO,cAAc;GACrB;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD,CAAC;AACH"}
@@ -5,6 +5,7 @@ const require_resource_state_error = require('../errors/resource-state-error.cjs
5
5
  const require_capitalize = require('../utils/capitalize.cjs');
6
6
  const require_state_composable = require('./state-composable.cjs');
7
7
  const require_merge_layout_props = require('./merge-layout-props.cjs');
8
+ const require_preview = require('./preview.cjs');
8
9
  const require_inspection = require('./inspection.cjs');
9
10
  const require_resource = require('../resource.cjs');
10
11
  const require_utils = require('../utils.cjs');
@@ -18,8 +19,8 @@ const require_render_state = require('./render-state.cjs');
18
19
  let _jfdevelops_react_layout_composables = require("@jfdevelops/react-layout-composables");
19
20
  let react = require("react");
20
21
  let _jfdevelops_react_layout_devtools_core = require("@jfdevelops/react-layout-devtools-core");
21
- let _jfdevelops_react_layout_validator = require("@jfdevelops/react-layout-validator");
22
22
  let react_jsx_runtime = require("react/jsx-runtime");
23
+ let _jfdevelops_react_layout_validator = require("@jfdevelops/react-layout-validator");
23
24
 
24
25
  //#region src/create-config/define-layout.tsx
25
26
  const RenderStateRetryContext = (0, react.createContext)(void 0);
@@ -144,11 +145,12 @@ function assertUnreservedResourceSlugs(resources, owner) {
144
145
  function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspection) {
145
146
  const { options: inProps = {}, resources, layout, namespace: defaultNamespace = false } = options;
146
147
  const shellId = options.shellId;
147
- const inspection = inheritedInspection ? void 0 : require_inspection.inspectDefinition(resources);
148
+ const inspection = inheritedInspection ? void 0 : require_inspection.inspectDefinition(resources, (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options)?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout)?.source);
148
149
  if (inspection) inspection.store.node({
149
150
  id: inspection.definition,
150
151
  kind: "definition",
151
152
  label: "Layout definition",
153
+ source: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options)?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout)?.source,
152
154
  details: {
153
155
  props: layout.props,
154
156
  propSchemas: typeof inProps === "function" ? void 0 : inProps,
@@ -199,6 +201,8 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
199
201
  id: (0, _jfdevelops_react_layout_devtools_core.inspectionId)("layout"),
200
202
  kind: "layout",
201
203
  label: name ?? String(layoutOptionProps.resource),
204
+ source: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layoutOptions)?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options)?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout)?.source,
205
+ registrationSource: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options)?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout)?.source,
202
206
  details: {
203
207
  resource: layoutOptionProps.resource,
204
208
  props: legacyLayoutProps,
@@ -214,6 +218,8 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
214
218
  id: (0, _jfdevelops_react_layout_devtools_core.inspectionId)("state"),
215
219
  kind: "state",
216
220
  label: state,
221
+ source: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(renderStates[state])?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options)?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout)?.source,
222
+ registrationSource: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options)?.source ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout)?.source,
217
223
  unresolved: require_render_state.isLazyRenderState(renderStates[state]) || require_render_state.isDeferredRenderState(renderStates[state])
218
224
  })]));
219
225
  for (const id of stateIds.values()) inspectionStore.edge(layoutId, id, "defines");
@@ -290,6 +296,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
290
296
  id: (0, _jfdevelops_react_layout_devtools_core.inspectionId)("composable"),
291
297
  kind: "composable",
292
298
  label: key,
299
+ source: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(component)?.source,
293
300
  details: {
294
301
  displayName: component.displayName,
295
302
  relationship: "declared; may not be rendered"
@@ -465,6 +472,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
465
472
  kind: "state",
466
473
  label: stateName,
467
474
  unresolved: false,
475
+ source: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(definition)?.source,
468
476
  details: {
469
477
  props: require_merge_layout_props.mergeLayoutProps(legacyLayoutProps, definition.props),
470
478
  propSchemas: rawResolvedOptions
@@ -523,7 +531,27 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
523
531
  const definition = mergedResolvedInProps[key];
524
532
  return [[key, isIncludedPropRequired(includeLayoutProps?.[key]) ? definition : definition.optional?.() ?? definition]];
525
533
  }));
526
- const createdComponent = Object.assign(Component, {
534
+ const previewEnabled = !inheritedInspection && ((0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layoutOptions)?.preview ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options)?.preview ?? (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(layout)?.preview) === true;
535
+ const previewTargets = {
536
+ default: Component,
537
+ ...stateComponents
538
+ };
539
+ let previewRoot;
540
+ const previewOptions = {
541
+ store: inspectionStore,
542
+ layout: layoutId,
543
+ states: stateIds,
544
+ components: previewTargets,
545
+ fixtures: () => previewRoot[_jfdevelops_react_layout_devtools_core.layoutPreviewFixtures]
546
+ };
547
+ const exposedStates = previewEnabled ? Object.fromEntries(Object.entries(stateComponents).map(([key, component]) => [key, require_preview.createPreviewComponent(component, {
548
+ ...previewOptions,
549
+ state: stateIds.get(key)
550
+ })])) : stateComponents;
551
+ const createdComponent = Object.assign(previewEnabled ? require_preview.createPreviewComponent(Component, {
552
+ ...previewOptions,
553
+ state: activeInspection.state
554
+ }) : Component, {
527
555
  displayName: name,
528
556
  props: void 0,
529
557
  resource: void 0,
@@ -531,9 +559,10 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
531
559
  components: resolvedComposables,
532
560
  name
533
561
  }),
534
- ...stateComponents,
562
+ ...exposedStates,
535
563
  [require_render_state.definedResourceLayoutComponentSymbol]: true
536
564
  });
565
+ previewRoot = createdComponent;
537
566
  inspectionStore.attach(createdComponent);
538
567
  const rootComponent = (0, _jfdevelops_react_layout_validator.attachComponentPropDefinitions)(createdComponent, {
539
568
  ...customLayoutProps,
@@ -543,7 +572,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
543
572
  if (Object.prototype.hasOwnProperty.call(stateComponents, "Root")) throw new require_layout_configuration_error.LayoutConfigurationError("Render state name \"Root\" is reserved when namespace is true");
544
573
  return {
545
574
  Root: rootComponent,
546
- ...stateComponents
575
+ ...exposedStates
547
576
  };
548
577
  }
549
578
  return rootComponent;
@@ -772,6 +801,7 @@ function defineResourceLayoutWithLayoutImpl(options) {
772
801
  };
773
802
  const shellId = Symbol("resourceLayoutShell");
774
803
  const base = defineResourceLayoutImpl({
804
+ [_jfdevelops_react_layout_devtools_core.layoutDebug]: (0, _jfdevelops_react_layout_devtools_core.getLayoutDebug)(options),
775
805
  resources,
776
806
  options: inProps,
777
807
  layout: resolvedLayout,