@jfdevelops/react-layout 1.0.1 → 1.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 (59) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +14 -7
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +30 -17
  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 +30 -17
  6. package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
  7. package/dist/create-config/create-defined-resource-layout.mjs +14 -7
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +61 -23
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +88 -71
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +88 -71
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +61 -23
  16. package/dist/create-config/define-layout.mjs.map +1 -1
  17. package/dist/create-config/for-resource.cjs.map +1 -1
  18. package/dist/create-config/for-resource.d.cts +24 -16
  19. package/dist/create-config/for-resource.d.cts.map +1 -1
  20. package/dist/create-config/for-resource.d.mts +24 -16
  21. package/dist/create-config/for-resource.d.mts.map +1 -1
  22. package/dist/create-config/for-resource.mjs.map +1 -1
  23. package/dist/create-config/for-resources/create-for-resources.cjs +1 -0
  24. package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
  25. package/dist/create-config/for-resources/create-for-resources.mjs +1 -0
  26. package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
  27. package/dist/create-config/for-resources/scoped-layout.d.cts +14 -12
  28. package/dist/create-config/for-resources/scoped-layout.d.cts.map +1 -1
  29. package/dist/create-config/for-resources/scoped-layout.d.mts +14 -12
  30. package/dist/create-config/for-resources/scoped-layout.d.mts.map +1 -1
  31. package/dist/create-config/index.d.cts +2 -1
  32. package/dist/create-config/index.d.mts +2 -1
  33. package/dist/create-config/lazy-resource-layout.cjs +1 -1
  34. package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
  35. package/dist/create-config/lazy-resource-layout.d.cts +4 -1
  36. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
  37. package/dist/create-config/lazy-resource-layout.d.mts +4 -1
  38. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
  39. package/dist/create-config/lazy-resource-layout.mjs +1 -1
  40. package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
  41. package/dist/create-config/render-state.cjs +17 -3
  42. package/dist/create-config/render-state.cjs.map +1 -1
  43. package/dist/create-config/render-state.d.cts +44 -10
  44. package/dist/create-config/render-state.d.cts.map +1 -1
  45. package/dist/create-config/render-state.d.mts +44 -10
  46. package/dist/create-config/render-state.d.mts.map +1 -1
  47. package/dist/create-config/render-state.mjs +18 -3
  48. package/dist/create-config/render-state.mjs.map +1 -1
  49. package/dist/create-config/state-composable.cjs +44 -0
  50. package/dist/create-config/state-composable.cjs.map +1 -0
  51. package/dist/create-config/state-composable.d.cts +27 -0
  52. package/dist/create-config/state-composable.d.cts.map +1 -0
  53. package/dist/create-config/state-composable.d.mts +27 -0
  54. package/dist/create-config/state-composable.d.mts.map +1 -0
  55. package/dist/create-config/state-composable.mjs +42 -0
  56. package/dist/create-config/state-composable.mjs.map +1 -0
  57. package/dist/index.d.cts +3 -2
  58. package/dist/index.d.mts +3 -2
  59. package/package.json +1 -1
@@ -44,13 +44,20 @@ function createDefinedResourceLayout(configuration) {
44
44
  lazyDefaults = defaults;
45
45
  lazyDefaultsDefined = true;
46
46
  }
47
- const boundDefineResourceLayout = ((layout) => defineBoundLayout({
48
- options,
49
- layout: {
50
- ...layout,
51
- composables
52
- }
53
- }));
47
+ const boundDefineResourceLayout = ((layout) => {
48
+ const localComposables = layout.composables;
49
+ return defineBoundLayout({
50
+ options,
51
+ namespace: layout.namespace ?? configuration.namespace,
52
+ layout: {
53
+ ...layout,
54
+ composables: composables || localComposables ? (create, states) => ({
55
+ ...composables?.(create, states),
56
+ ...localComposables?.(create, states)
57
+ }) : void 0
58
+ }
59
+ });
60
+ });
54
61
  boundDefineResourceLayout.lazy = (lazyOptions) => {
55
62
  lazyLayoutCreated = true;
56
63
  return require_lazy_resource_layout.createLazyResourceLayout(lazyOptions, lazyDefaults);
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","createLazyResourceLayout","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import type { ComposableComponents } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type {\n IncludedComponentPropDefinitions,\n MergedLayoutInProps,\n} from '../props';\nimport type { ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapBuiltInRenderStatesOptions,\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type TypedBuiltInRenderStates,\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 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> = {\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> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render };\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> = {\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n >(\n layout: Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables'\n >,\n ): DefinedResourceLayout<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n {}\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 */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n DefaultComposables extends ComposableComponents = {},\n const DefaultIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & DefaultComposables\n > = {},\n DefaultCustomProps extends InPropsObject = {},\n LoadingComposables extends ComposableComponents = {},\n const LoadingIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & LoadingComposables\n > = {},\n LoadingCustomProps extends InPropsObject = {},\n ErrorComposables extends ComposableComponents = {},\n const ErrorIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & ErrorComposables\n > = {},\n ErrorCustomProps extends InPropsObject = {},\n NotFoundComposables extends ComposableComponents = {},\n const NotFoundIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & NotFoundComposables\n > = {},\n NotFoundCustomProps extends InPropsObject = {},\n const RenderStates extends { default: unknown } & Record<string, unknown> = {\n default: unknown;\n },\n >(\n layout: Omit<\n CreateViewMapBuiltInRenderStatesOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n TypedBuiltInRenderStates<\n Resources,\n Options,\n Composables,\n DefaultComposables,\n DefaultIncludeProps,\n DefaultCustomProps,\n LoadingComposables,\n LoadingIncludeProps,\n LoadingCustomProps,\n ErrorComposables,\n ErrorIncludeProps,\n ErrorCustomProps,\n NotFoundComposables,\n NotFoundIncludeProps,\n NotFoundCustomProps\n > & RenderStates\n >['layout'],\n 'composables'\n >,\n ): DefinedResourceLayout<\n Resources,\n Options,\n Composables &\n DefaultComposables &\n LoadingComposables &\n ErrorComposables &\n NotFoundComposables,\n DefaultIncludeProps &\n LoadingIncludeProps &\n ErrorIncludeProps &\n NotFoundIncludeProps,\n DefaultCustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<\n Resources,\n Options,\n Composables & DefaultComposables\n >,\n DefaultIncludeProps\n >,\n RenderStates\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> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables>;\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 >;\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>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\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 defineBoundLayout({\n options,\n layout: { ...layout, composables },\n } as never)) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables\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 return createLazyResourceLayout(lazyOptions, lazyDefaults);\n };\n\n return {\n createRenderState: createRenderStateBuilder({\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuQA,SAAgB,4BAKd,eAKoE;CACpE,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,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,WAClC,kBAAkB;EAChB;EACA,QAAQ;GAAE,GAAG;GAAQ;EAAY;CACnC,CAAU;CAMZ,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,OAAOC,sDAAyB,aAAa,YAAY;CAC3D;CAEA,OAAO;EACL,mBAAmBC,8CAAyB;GAC1C;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD;AACF"}
1
+ {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","createLazyResourceLayout","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import 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> = {\n namespace?: DefaultNamespace;\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'>;\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> = {\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 >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>,\n 'composables'\n > & {\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>;\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 >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n Namespace\n >>,\n 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n {},\n Namespace\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> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables>;\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 >;\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>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\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 return defineBoundLayout({\n options,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\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 }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace\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 return createLazyResourceLayout(lazyOptions, lazyDefaults);\n };\n\n return {\n createRenderState: createRenderStateBuilder({\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqNA,SAAgB,4BAMd,eAMsF;CACtF,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,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,OAAO,kBAAkB;GACvB;GACA,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;CACZ;CAOA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,OAAOC,sDAAyB,aAAa,YAAY;CAC3D;CAEA,OAAO;EACL,mBAAmBC,8CAAyB;GAC1C;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD;AACF"}
@@ -1,35 +1,48 @@
1
- import { ResourceDefinition } from "../resource.cjs";
2
- import { InPropsDefinition, InPropsObject, IncludedComponentPropDefinitions, MergedLayoutInProps } from "../props.cjs";
3
- import { CreateRenderState, LayoutComposablesDefinition } from "./render-state.cjs";
4
- import { CreateViewMapBuiltInRenderStatesOptions, CreateViewMapFunctionRenderOptions, DefinedResourceLayout, LayoutIncludeProps, LayoutResourcesAccessor, TypedBuiltInRenderStates } from "./define-layout.cjs";
1
+ import { LayoutResourceKey, ResourceDefinition } from "../resource.cjs";
2
+ import { InPropsDefinition, InPropsObject } from "../props.cjs";
3
+ import { CreateRenderState, LayoutComposablesDefinition, RenderStateReferences } from "./render-state.cjs";
4
+ import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor } from "./define-layout.cjs";
5
5
  import { LazyResourceLayoutOptions, LazyResourceStates, createLazyResourceLayout } from "./lazy-resource-layout.cjs";
6
- import { ComposableComponents } from "@jfdevelops/react-layout-composables";
6
+ import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
7
7
 
8
8
  //#region src/create-config/create-defined-resource-layout.d.ts
9
9
  /** A resource tuple with at least one entry, preserving literal and nested paths. */
10
10
  type NonEmptyResources = readonly [ResourceDefinition, ...ResourceDefinition[]];
11
11
  /** Configuration shared by every layout created from one defined-layout factory. */
12
- type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = {
13
- /** Resources supported by every layout created from this factory. */resources: Resources; /** Props that render states can opt into through `props.include`. */
12
+ type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
13
+ namespace?: DefaultNamespace; /** Resources supported by every layout created from this factory. */
14
+ resources: Resources; /** Props that render states can opt into through `props.include`. */
14
15
  options?: Options; /** Layout-wide composables available to every render state. */
15
16
  composables?: LayoutComposablesDefinition<Resources, Composables>;
16
17
  };
17
18
  /** The flat layout definition accepted after shared configuration is bound. */
18
- type DefinedResourceLayoutInput<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>, CustomProps extends InPropsObject, Render> = Omit<CreateViewMapFunctionRenderOptions<Resources, Options, Composables, IncludeProps, CustomProps>['layout'], 'composables' | 'render'> & {
19
+ type DefinedResourceLayoutInput<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>, CustomProps extends InPropsObject, Render, Namespace extends boolean = false> = Omit<CreateViewMapFunctionRenderOptions<Resources, Options, Composables, IncludeProps, CustomProps>['layout'], 'composables' | 'render'> & {
19
20
  render: Render;
21
+ namespace?: Namespace;
20
22
  };
23
+ type BoundLayoutComposables<Shared extends ComposableComponents, Local extends ComposableComponents> = Omit<Shared, keyof Local> & Local;
24
+ /** Flattens a definition's layout while preserving its namespace setting. */
25
+ type BoundLayoutInput<Definition extends {
26
+ layout: unknown;
27
+ namespace?: boolean;
28
+ }> = Definition['layout'] & Pick<Definition, 'namespace'>;
21
29
  /** A `defineResourceLayout` function with its shared configuration pre-bound. */
22
- type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = {
23
- /** Defines a layout whose `render` value is a single default-state callback. */<const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}>(layout: Omit<CreateViewMapFunctionRenderOptions<Resources, Options, Composables, IncludeProps, CustomProps>['layout'], 'composables'>): DefinedResourceLayout<Resources, Options, Composables, IncludeProps, CustomProps, {}>;
30
+ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
24
31
  /**
25
32
  * Defines a layout whose `render` map contains the required `default` state
26
33
  * and any built-in or custom compound component states.
34
+ * Keep this overload first so incomplete render objects suggest state keys.
35
+ * Use `createRenderState` for state-local `composables(create)` callbacks;
36
+ * the helper infers their render context independently of the enclosing map.
27
37
  */
28
- <const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}, DefaultComposables extends ComposableComponents = {}, const DefaultIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & DefaultComposables> = {}, DefaultCustomProps extends InPropsObject = {}, LoadingComposables extends ComposableComponents = {}, const LoadingIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & LoadingComposables> = {}, LoadingCustomProps extends InPropsObject = {}, ErrorComposables extends ComposableComponents = {}, const ErrorIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & ErrorComposables> = {}, ErrorCustomProps extends InPropsObject = {}, NotFoundComposables extends ComposableComponents = {}, const NotFoundIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & NotFoundComposables> = {}, NotFoundCustomProps extends InPropsObject = {}, const RenderStates extends {
38
+ <const Render extends {
29
39
  default: unknown;
30
- } & Record<string, unknown> = {
31
- default: unknown;
32
- }>(layout: Omit<CreateViewMapBuiltInRenderStatesOptions<Resources, Options, Composables, IncludeProps, CustomProps, TypedBuiltInRenderStates<Resources, Options, Composables, DefaultComposables, DefaultIncludeProps, DefaultCustomProps, LoadingComposables, LoadingIncludeProps, LoadingCustomProps, ErrorComposables, ErrorIncludeProps, ErrorCustomProps, NotFoundComposables, NotFoundIncludeProps, NotFoundCustomProps> & RenderStates>['layout'], 'composables'>): DefinedResourceLayout<Resources, Options, Composables & DefaultComposables & LoadingComposables & ErrorComposables & NotFoundComposables, DefaultIncludeProps & LoadingIncludeProps & ErrorIncludeProps & NotFoundIncludeProps, DefaultCustomProps & IncludedComponentPropDefinitions<MergedLayoutInProps<Resources, Options, Composables & DefaultComposables>, DefaultIncludeProps>, RenderStates>;
40
+ } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>, 'composables'> & {
41
+ composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: RenderStateReferences<Resources, Options, Composables, Render>) => LocalComposables;
42
+ }): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace>; /** Defines a layout whose `render` value is a single default-state callback. */
43
+ <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, Namespace>>, 'composables'> & {
44
+ composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => LocalComposables;
45
+ }): DefinedResourceLayout<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, {}, Namespace>;
33
46
  /**
34
47
  * Creates a lazy proxy for the single library-defined component exported by
35
48
  * a resource module.
@@ -48,10 +61,10 @@ type DefineLazyDefaults = {
48
61
  (defaults: LazyResourceStates): void;
49
62
  };
50
63
  /** Reusable helpers produced by {@link createDefinedResourceLayout}. */
51
- type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = {
64
+ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
52
65
  /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables>; /** Sets the shared loading and module-error UI used by lazy layouts. */
53
66
  defineLazyDefaults: DefineLazyDefaults; /** Defines a layout using the resources, options, and composables already bound. */
54
- defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables>; /** Reads, selects, or validates the resources bound to this factory. */
67
+ defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace>; /** Reads, selects, or validates the resources bound to this factory. */
55
68
  resources: LayoutResourcesAccessor<Resources>;
56
69
  };
57
70
  /**
@@ -82,7 +95,7 @@ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Opti
82
95
  * });
83
96
  * ```
84
97
  */
85
- declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables>): CreateDefinedResourceLayoutResult<Resources, Options, Composables>;
98
+ declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}, DefaultNamespace extends boolean = false>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables, DefaultNamespace>): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace>;
86
99
  //#endregion
87
100
  export { BoundDefineResourceLayout, CreateDefinedResourceLayoutOptions, CreateDefinedResourceLayoutResult, DefineLazyDefaults, DefinedResourceLayoutInput, NonEmptyResources, createDefinedResourceLayout };
88
101
  //# sourceMappingURL=create-defined-resource-layout.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.d.cts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":";;;;;;;;;KA8BY,iBAAA,aACV,kBAAA,KACG,kBAAkB;AAAA;AAAA,KAIX,kCAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA;EAHwB,qEAM5C,SAAA,EAAW,SAAA,EALO;EAOlB,OAAA,GAAU,OAAA,EANM;EAQhB,WAAA,GAAc,2BAAA,CAA4B,SAAA,EAAW,WAAA;AAAA;;KAI3C,0BAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA,uBACC,kBAAA,CAAmB,SAAA,EAAW,OAAA,EAAS,WAAA,uBACxC,aAAA,YAElB,IAAA,CACF,kCAAA,CACE,SAAA,EACA,OAAA,EACA,WAAA,EACA,YAAA,EACA,WAAA;EAGE,MAAA,EAAQ,MAAA;AAAA;;KAGF,yBAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA;EAnCpB,4GAuC6B,kBAAA,CACzB,SAAA,EACA,OAAA,EACA,WAAA,4BAEkB,aAAA,OAEpB,MAAA,EAAQ,IAAA,CACN,kCAAA,CACE,SAAA,EACA,OAAA,EACA,WAAA,EACA,YAAA,EACA,WAAA,8BAIH,qBAAA,CACD,SAAA,EACA,OAAA,EACA,WAAA,EACA,YAAA,EACA,WAAA;EA5DF;;;;EAAA,4BAoE6B,kBAAA,CACzB,SAAA,EACA,OAAA,EACA,WAAA,4BAEkB,aAAA,kCACO,oBAAA,yCACO,kBAAA,CAChC,SAAA,EACA,OAAA,EACA,WAAA,GAAc,kBAAA,mCAEW,aAAA,kCACA,oBAAA,yCACO,kBAAA,CAChC,SAAA,EACA,OAAA,EACA,WAAA,GAAc,kBAAA,mCAEW,aAAA,gCACF,oBAAA,uCACO,kBAAA,CAC9B,SAAA,EACA,OAAA,EACA,WAAA,GAAc,gBAAA,iCAES,aAAA,mCACG,oBAAA,0CACO,kBAAA,CACjC,SAAA,EACA,OAAA,EACA,WAAA,GAAc,mBAAA,oCAEY,aAAA;IACC,OAAA;EAAA,IAAqB,MAAA;IAChD,OAAA;EAAA,GAGF,MAAA,EAAQ,IAAA,CACN,uCAAA,CACE,SAAA,EACA,OAAA,EACA,WAAA,EACA,YAAA,EACA,WAAA,EACA,wBAAA,CACE,SAAA,EACA,OAAA,EACA,WAAA,EACA,kBAAA,EACA,mBAAA,EACA,kBAAA,EACA,kBAAA,EACA,mBAAA,EACA,kBAAA,EACA,gBAAA,EACA,iBAAA,EACA,gBAAA,EACA,mBAAA,EACA,oBAAA,EACA,mBAAA,IACE,YAAA,8BAIP,qBAAA,CACD,SAAA,EACA,OAAA,EACA,WAAA,GACE,kBAAA,GACA,kBAAA,GACA,gBAAA,GACA,mBAAA,EACF,mBAAA,GACE,mBAAA,GACA,iBAAA,GACA,oBAAA,EACF,kBAAA,GACE,gCAAA,CACE,mBAAA,CACE,SAAA,EACA,OAAA,EACA,WAAA,GAAc,kBAAA,GAEhB,mBAAA,GAEJ,YAAA;EAlJF;;;;;AAAgE;EA0JhE,IAAA,gBAAoB,MAAA,mBAClB,OAAA,EAAS,yBAAA,CAA0B,SAAA,EAAW,MAAA,IAC7C,UAAA,QAAkB,wBAAA,CAAyB,SAAA,EAAW,MAAA;AAAA;;KAI/C,kBAAA;EA1JwB;;;;;EAAA,CAgKjC,QAA4B,EAAlB,kBAAkB;AAAA;;KAInB,iCAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA;EA/JlB,8EAkKF,iBAAA,EAAmB,iBAAA,CAAkB,SAAA,EAAW,OAAA,EAAS,WAAA,GAhKvD;EAkKF,kBAAA,EAAoB,kBAAA,EAtKpB;EAwKA,oBAAA,EAAsB,yBAAA,CACpB,SAAA,EACA,OAAA,EACA,WAAA,GAnKU;EAsKZ,SAAA,EAAW,uBAAA,CAAwB,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;AAtKjB;AAGpB;;iBAkMgB,2BAAA,yBACU,iBAAA,wBACF,iBAAA,CAAkB,SAAA,4BACpB,oBAAA,OAEpB,aAAA,EAAe,kCAAA,CACb,SAAA,EACA,OAAA,EACA,WAAA,IAED,iCAAA,CAAkC,SAAA,EAAW,OAAA,EAAS,WAAA"}
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,35 +1,48 @@
1
- import { ResourceDefinition } from "../resource.mjs";
2
- import { InPropsDefinition, InPropsObject, IncludedComponentPropDefinitions, MergedLayoutInProps } from "../props.mjs";
3
- import { CreateRenderState, LayoutComposablesDefinition } from "./render-state.mjs";
4
- import { CreateViewMapBuiltInRenderStatesOptions, CreateViewMapFunctionRenderOptions, DefinedResourceLayout, LayoutIncludeProps, LayoutResourcesAccessor, TypedBuiltInRenderStates } from "./define-layout.mjs";
1
+ import { LayoutResourceKey, ResourceDefinition } from "../resource.mjs";
2
+ import { InPropsDefinition, InPropsObject } from "../props.mjs";
3
+ import { CreateRenderState, LayoutComposablesDefinition, RenderStateReferences } from "./render-state.mjs";
4
+ import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor } from "./define-layout.mjs";
5
5
  import { LazyResourceLayoutOptions, LazyResourceStates, createLazyResourceLayout } from "./lazy-resource-layout.mjs";
6
- import { ComposableComponents } from "@jfdevelops/react-layout-composables";
6
+ import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
7
7
 
8
8
  //#region src/create-config/create-defined-resource-layout.d.ts
9
9
  /** A resource tuple with at least one entry, preserving literal and nested paths. */
10
10
  type NonEmptyResources = readonly [ResourceDefinition, ...ResourceDefinition[]];
11
11
  /** Configuration shared by every layout created from one defined-layout factory. */
12
- type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = {
13
- /** Resources supported by every layout created from this factory. */resources: Resources; /** Props that render states can opt into through `props.include`. */
12
+ type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
13
+ namespace?: DefaultNamespace; /** Resources supported by every layout created from this factory. */
14
+ resources: Resources; /** Props that render states can opt into through `props.include`. */
14
15
  options?: Options; /** Layout-wide composables available to every render state. */
15
16
  composables?: LayoutComposablesDefinition<Resources, Composables>;
16
17
  };
17
18
  /** The flat layout definition accepted after shared configuration is bound. */
18
- type DefinedResourceLayoutInput<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>, CustomProps extends InPropsObject, Render> = Omit<CreateViewMapFunctionRenderOptions<Resources, Options, Composables, IncludeProps, CustomProps>['layout'], 'composables' | 'render'> & {
19
+ type DefinedResourceLayoutInput<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>, CustomProps extends InPropsObject, Render, Namespace extends boolean = false> = Omit<CreateViewMapFunctionRenderOptions<Resources, Options, Composables, IncludeProps, CustomProps>['layout'], 'composables' | 'render'> & {
19
20
  render: Render;
21
+ namespace?: Namespace;
20
22
  };
23
+ type BoundLayoutComposables<Shared extends ComposableComponents, Local extends ComposableComponents> = Omit<Shared, keyof Local> & Local;
24
+ /** Flattens a definition's layout while preserving its namespace setting. */
25
+ type BoundLayoutInput<Definition extends {
26
+ layout: unknown;
27
+ namespace?: boolean;
28
+ }> = Definition['layout'] & Pick<Definition, 'namespace'>;
21
29
  /** A `defineResourceLayout` function with its shared configuration pre-bound. */
22
- type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = {
23
- /** Defines a layout whose `render` value is a single default-state callback. */<const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}>(layout: Omit<CreateViewMapFunctionRenderOptions<Resources, Options, Composables, IncludeProps, CustomProps>['layout'], 'composables'>): DefinedResourceLayout<Resources, Options, Composables, IncludeProps, CustomProps, {}>;
30
+ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
24
31
  /**
25
32
  * Defines a layout whose `render` map contains the required `default` state
26
33
  * and any built-in or custom compound component states.
34
+ * Keep this overload first so incomplete render objects suggest state keys.
35
+ * Use `createRenderState` for state-local `composables(create)` callbacks;
36
+ * the helper infers their render context independently of the enclosing map.
27
37
  */
28
- <const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}, DefaultComposables extends ComposableComponents = {}, const DefaultIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & DefaultComposables> = {}, DefaultCustomProps extends InPropsObject = {}, LoadingComposables extends ComposableComponents = {}, const LoadingIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & LoadingComposables> = {}, LoadingCustomProps extends InPropsObject = {}, ErrorComposables extends ComposableComponents = {}, const ErrorIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & ErrorComposables> = {}, ErrorCustomProps extends InPropsObject = {}, NotFoundComposables extends ComposableComponents = {}, const NotFoundIncludeProps extends LayoutIncludeProps<Resources, Options, Composables & NotFoundComposables> = {}, NotFoundCustomProps extends InPropsObject = {}, const RenderStates extends {
38
+ <const Render extends {
29
39
  default: unknown;
30
- } & Record<string, unknown> = {
31
- default: unknown;
32
- }>(layout: Omit<CreateViewMapBuiltInRenderStatesOptions<Resources, Options, Composables, IncludeProps, CustomProps, TypedBuiltInRenderStates<Resources, Options, Composables, DefaultComposables, DefaultIncludeProps, DefaultCustomProps, LoadingComposables, LoadingIncludeProps, LoadingCustomProps, ErrorComposables, ErrorIncludeProps, ErrorCustomProps, NotFoundComposables, NotFoundIncludeProps, NotFoundCustomProps> & RenderStates>['layout'], 'composables'>): DefinedResourceLayout<Resources, Options, Composables & DefaultComposables & LoadingComposables & ErrorComposables & NotFoundComposables, DefaultIncludeProps & LoadingIncludeProps & ErrorIncludeProps & NotFoundIncludeProps, DefaultCustomProps & IncludedComponentPropDefinitions<MergedLayoutInProps<Resources, Options, Composables & DefaultComposables>, DefaultIncludeProps>, RenderStates>;
40
+ } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>, 'composables'> & {
41
+ composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: RenderStateReferences<Resources, Options, Composables, Render>) => LocalComposables;
42
+ }): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace>; /** Defines a layout whose `render` value is a single default-state callback. */
43
+ <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, Namespace>>, 'composables'> & {
44
+ composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => LocalComposables;
45
+ }): DefinedResourceLayout<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, {}, Namespace>;
33
46
  /**
34
47
  * Creates a lazy proxy for the single library-defined component exported by
35
48
  * a resource module.
@@ -48,10 +61,10 @@ type DefineLazyDefaults = {
48
61
  (defaults: LazyResourceStates): void;
49
62
  };
50
63
  /** Reusable helpers produced by {@link createDefinedResourceLayout}. */
51
- type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents> = {
64
+ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
52
65
  /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables>; /** Sets the shared loading and module-error UI used by lazy layouts. */
53
66
  defineLazyDefaults: DefineLazyDefaults; /** Defines a layout using the resources, options, and composables already bound. */
54
- defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables>; /** Reads, selects, or validates the resources bound to this factory. */
67
+ defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace>; /** Reads, selects, or validates the resources bound to this factory. */
55
68
  resources: LayoutResourcesAccessor<Resources>;
56
69
  };
57
70
  /**
@@ -82,7 +95,7 @@ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Opti
82
95
  * });
83
96
  * ```
84
97
  */
85
- declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables>): CreateDefinedResourceLayoutResult<Resources, Options, Composables>;
98
+ declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}, DefaultNamespace extends boolean = false>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables, DefaultNamespace>): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace>;
86
99
  //#endregion
87
100
  export { BoundDefineResourceLayout, CreateDefinedResourceLayoutOptions, CreateDefinedResourceLayoutResult, DefineLazyDefaults, DefinedResourceLayoutInput, NonEmptyResources, createDefinedResourceLayout };
88
101
  //# sourceMappingURL=create-defined-resource-layout.d.mts.map
@@ -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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"}
@@ -44,13 +44,20 @@ function createDefinedResourceLayout(configuration) {
44
44
  lazyDefaults = defaults;
45
45
  lazyDefaultsDefined = true;
46
46
  }
47
- const boundDefineResourceLayout = ((layout) => defineBoundLayout({
48
- options,
49
- layout: {
50
- ...layout,
51
- composables
52
- }
53
- }));
47
+ const boundDefineResourceLayout = ((layout) => {
48
+ const localComposables = layout.composables;
49
+ return defineBoundLayout({
50
+ options,
51
+ namespace: layout.namespace ?? configuration.namespace,
52
+ layout: {
53
+ ...layout,
54
+ composables: composables || localComposables ? (create, states) => ({
55
+ ...composables?.(create, states),
56
+ ...localComposables?.(create, states)
57
+ }) : void 0
58
+ }
59
+ });
60
+ });
54
61
  boundDefineResourceLayout.lazy = (lazyOptions) => {
55
62
  lazyLayoutCreated = true;
56
63
  return createLazyResourceLayout(lazyOptions, lazyDefaults);
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import type { ComposableComponents } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type {\n IncludedComponentPropDefinitions,\n MergedLayoutInProps,\n} from '../props';\nimport type { ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapBuiltInRenderStatesOptions,\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type TypedBuiltInRenderStates,\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 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> = {\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> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render };\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> = {\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n >(\n layout: Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables'\n >,\n ): DefinedResourceLayout<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n {}\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 */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables\n > = {},\n CustomProps extends InPropsObject = {},\n DefaultComposables extends ComposableComponents = {},\n const DefaultIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & DefaultComposables\n > = {},\n DefaultCustomProps extends InPropsObject = {},\n LoadingComposables extends ComposableComponents = {},\n const LoadingIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & LoadingComposables\n > = {},\n LoadingCustomProps extends InPropsObject = {},\n ErrorComposables extends ComposableComponents = {},\n const ErrorIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & ErrorComposables\n > = {},\n ErrorCustomProps extends InPropsObject = {},\n NotFoundComposables extends ComposableComponents = {},\n const NotFoundIncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n Composables & NotFoundComposables\n > = {},\n NotFoundCustomProps extends InPropsObject = {},\n const RenderStates extends { default: unknown } & Record<string, unknown> = {\n default: unknown;\n },\n >(\n layout: Omit<\n CreateViewMapBuiltInRenderStatesOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps,\n TypedBuiltInRenderStates<\n Resources,\n Options,\n Composables,\n DefaultComposables,\n DefaultIncludeProps,\n DefaultCustomProps,\n LoadingComposables,\n LoadingIncludeProps,\n LoadingCustomProps,\n ErrorComposables,\n ErrorIncludeProps,\n ErrorCustomProps,\n NotFoundComposables,\n NotFoundIncludeProps,\n NotFoundCustomProps\n > & RenderStates\n >['layout'],\n 'composables'\n >,\n ): DefinedResourceLayout<\n Resources,\n Options,\n Composables &\n DefaultComposables &\n LoadingComposables &\n ErrorComposables &\n NotFoundComposables,\n DefaultIncludeProps &\n LoadingIncludeProps &\n ErrorIncludeProps &\n NotFoundIncludeProps,\n DefaultCustomProps &\n IncludedComponentPropDefinitions<\n MergedLayoutInProps<\n Resources,\n Options,\n Composables & DefaultComposables\n >,\n DefaultIncludeProps\n >,\n RenderStates\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> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables>;\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 >;\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>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\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 defineBoundLayout({\n options,\n layout: { ...layout, composables },\n } as never)) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables\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 return createLazyResourceLayout(lazyOptions, lazyDefaults);\n };\n\n return {\n createRenderState: createRenderStateBuilder({\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuQA,SAAgB,4BAKd,eAKoE;CACpE,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,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,WAClC,kBAAkB;EAChB;EACA,QAAQ;GAAE,GAAG;GAAQ;EAAY;CACnC,CAAU;CAMZ,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,OAAO,yBAAyB,aAAa,YAAY;CAC3D;CAEA,OAAO;EACL,mBAAmB,yBAAyB;GAC1C;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD;AACF"}
1
+ {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import 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> = {\n namespace?: DefaultNamespace;\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'>;\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> = {\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 >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>,\n 'composables'\n > & {\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>;\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 >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n Namespace\n >>,\n 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n {},\n Namespace\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> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables>;\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 >;\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>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\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 return defineBoundLayout({\n options,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\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 }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace\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 return createLazyResourceLayout(lazyOptions, lazyDefaults);\n };\n\n return {\n createRenderState: createRenderStateBuilder({\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqNA,SAAgB,4BAMd,eAMsF;CACtF,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,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,OAAO,kBAAkB;GACvB;GACA,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;CACZ;CAOA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,OAAO,yBAAyB,aAAa,YAAY;CAC3D;CAEA,OAAO;EACL,mBAAmB,yBAAyB;GAC1C;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD;AACF"}
@@ -11,6 +11,7 @@ const require_create_resource_links = require('./create-resource-links.cjs');
11
11
  const require_for_resource = require('./for-resource.cjs');
12
12
  const require_create_for_resources = require('./for-resources/create-for-resources.cjs');
13
13
  const require_shell_context = require('./shell-context.cjs');
14
+ const require_state_composable = require('./state-composable.cjs');
14
15
  const require_render_state = require('./render-state.cjs');
15
16
  let _jfdevelops_react_layout_composables = require("@jfdevelops/react-layout-composables");
16
17
  let react = require("react");
@@ -137,8 +138,8 @@ function assertUnreservedResourceSlugs(resources, owner) {
137
138
  if (typeof resource !== "string") assertUnreservedResourceSlugs(resource.subResources, slug);
138
139
  }
139
140
  }
140
- function defineResourceLayoutImpl(options) {
141
- const { options: inProps = {}, resources, layout } = options;
141
+ function defineResourceLayoutImpl(options, inheritedStateScope) {
142
+ const { options: inProps = {}, resources, layout, namespace: defaultNamespace = false } = options;
142
143
  const shellId = options.shellId;
143
144
  assertUnreservedResourceSlugs(resources);
144
145
  const resourcesAccessor = createLayoutResourcesAccessor(resources);
@@ -157,7 +158,7 @@ function defineResourceLayoutImpl(options) {
157
158
  const normalizedResources = require_resource.normalizeResources(resources);
158
159
  const resourcesEnum = (0, _jfdevelops_react_layout_validator.createPrimitivePropBuilder)("string").enum(require_resource.toResourceEnum(normalizedResources));
159
160
  const definedResourceLayout = ((layoutOptions) => {
160
- const { name, props: instancePropDefinitions, ...layoutOptionProps } = layoutOptions;
161
+ const { name, props: instancePropDefinitions, namespace = defaultNamespace, ...layoutOptionProps } = layoutOptions;
161
162
  const createComposableLayout = (0, _jfdevelops_react_layout_composables.makeComposable)();
162
163
  const nameProp = _jfdevelops_react_layout_validator.createProp.string().literal(name);
163
164
  const { resolvedInProps, splitInProps } = splitLayoutInProps({
@@ -170,6 +171,19 @@ function defineResourceLayoutImpl(options) {
170
171
  });
171
172
  const { composables, props: legacyLayoutProps } = layout;
172
173
  const renderStates = typeof layout.render === "function" ? { default: layout.render } : layout.render;
174
+ const referenceComponents = /* @__PURE__ */ new Map();
175
+ const stateScope = inheritedStateScope ?? {
176
+ states: require_state_composable.createStateReferences(renderStates),
177
+ resolve(source) {
178
+ for (const [stateName, input] of Object.entries(renderStates)) if (input === source.input) return stateName === "default" ? Component : stateComponents[stateName];
179
+ let reference = referenceComponents.get(source.input);
180
+ if (!reference) {
181
+ reference = createStateComponent(source.name, source.input, false);
182
+ referenceComponents.set(source.input, reference);
183
+ }
184
+ return reference;
185
+ }
186
+ };
173
187
  const defaultRenderInput = renderStates.default;
174
188
  const createdDefaultState = require_render_state.isDeferredRenderState(defaultRenderInput) || require_render_state.isLazyRenderState(defaultRenderInput);
175
189
  const defaultRenderDefinition = getSynchronousRenderStateDefinition(defaultRenderInput, legacyLayoutProps) ?? { render: () => null };
@@ -190,10 +204,10 @@ function defineResourceLayoutImpl(options) {
190
204
  layoutName: name,
191
205
  resource: layoutContext.resource
192
206
  };
193
- const defaultComposables = defaultState.composables ? (create) => ({
194
- ...composables?.(create) ?? {},
195
- ...defaultState.composables?.(create)
196
- }) : composables;
207
+ const defaultComposables = composables || defaultState.composables ? (create) => ({
208
+ ...composables?.(create, stateScope.states) ?? {},
209
+ ...defaultState.composables?.(create, stateScope.states)
210
+ }) : void 0;
197
211
  const resolvedComposables = defaultComposables ? (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(defaultComposables, layoutContext) : void 0;
198
212
  const mergedResolvedInProps = { ...resolvedInProps };
199
213
  for (const { props: presetPropDefinitions } of (0, _jfdevelops_react_layout_composables.collectComposablePresetEntries)(resolvedComposables)) Object.assign(mergedResolvedInProps, presetPropDefinitions);
@@ -254,7 +268,13 @@ function defineResourceLayoutImpl(options) {
254
268
  resource: layoutContext.resource,
255
269
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_jfdevelops_react_layout_composables.LayoutComposablePresetProvider, {
256
270
  value: composablePresetProps,
257
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderDefaultState, { renderProps: layoutRenderProps })
271
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_state_composable.StateComposableContext.Provider, {
272
+ value: {
273
+ scope: stateScope,
274
+ props: layoutRenderProps
275
+ },
276
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderDefaultState, { renderProps: layoutRenderProps })
277
+ })
258
278
  })
259
279
  });
260
280
  const ErrorComponent = stateComponents.Error;
@@ -273,7 +293,7 @@ function defineResourceLayoutImpl(options) {
273
293
  if (!compositionOptions.components) return {};
274
294
  return { makeComposable: createComposableLayout(compositionOptions) };
275
295
  }
276
- function createStateComponent(stateName, input) {
296
+ function createStateComponent(stateName, input, validateStateName = true) {
277
297
  if (require_render_state.isLazyRenderState(input)) {
278
298
  const loadState = input[require_render_state.lazyRenderStateSymbol];
279
299
  function createLazyState() {
@@ -281,8 +301,8 @@ function defineResourceLayoutImpl(options) {
281
301
  const stateDefinition = require_render_state.findDefinedRenderState(await loadState().catch((error) => {
282
302
  throw new require_resource_state_error.ResourceModuleLoadError(String(layoutContext.resource), error);
283
303
  }));
284
- if (stateDefinition.state !== void 0 && stateDefinition.state !== stateName) throw new require_layout_configuration_error.LayoutConfigurationError(`Lazy render state "${stateDefinition.state}" cannot be used as "${stateName}"`);
285
- return { default: createLoadedStateComponent(stateName, stateDefinition) };
304
+ if (validateStateName && stateDefinition.state !== void 0 && stateDefinition.state !== stateName) throw new require_layout_configuration_error.LayoutConfigurationError(`Lazy render state "${stateDefinition.state}" cannot be used as "${stateName}"`);
305
+ return { default: createLoadedStateComponent(validateStateName ? stateName : stateDefinition.state ?? stateName, stateDefinition) };
286
306
  });
287
307
  }
288
308
  function LazyStateComponent(props) {
@@ -339,10 +359,10 @@ function defineResourceLayoutImpl(options) {
339
359
  return DeferredStateComponent;
340
360
  }
341
361
  function createLoadedStateComponent(stateName, definition) {
342
- const stateComposables = definition.composables ? (create) => ({
343
- ...composables?.(create) ?? {},
344
- ...definition.composables?.(create)
345
- }) : composables;
362
+ const stateComposables = composables || definition.composables ? (create) => ({
363
+ ...composables?.(create, stateScope.states) ?? {},
364
+ ...definition.composables?.(create, stateScope.states)
365
+ }) : void 0;
346
366
  const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => definition.render(props, {
347
367
  ...context,
348
368
  retry
@@ -355,7 +375,10 @@ function defineResourceLayoutImpl(options) {
355
375
  props: definition.props,
356
376
  render: stateRender
357
377
  }
358
- }).createResourceLayout(layoutOptions);
378
+ }, stateScope).createResourceLayout({
379
+ ...layoutOptions,
380
+ namespace: false
381
+ });
359
382
  StateComponent.displayName = `${name}.${stateName}`;
360
383
  return StateComponent;
361
384
  }
@@ -364,6 +387,7 @@ function defineResourceLayoutImpl(options) {
364
387
  if (stateName === "default") continue;
365
388
  if ([
366
389
  "__proto__",
390
+ "asComposable",
367
391
  "apply",
368
392
  "arguments",
369
393
  "bind",
@@ -384,7 +408,7 @@ function defineResourceLayoutImpl(options) {
384
408
  const definition = mergedResolvedInProps[key];
385
409
  return [[key, isIncludedPropRequired(includeLayoutProps?.[key]) ? definition : definition.optional?.() ?? definition]];
386
410
  }));
387
- return (0, _jfdevelops_react_layout_validator.attachComponentPropDefinitions)(Object.assign(Component, {
411
+ const rootComponent = (0, _jfdevelops_react_layout_validator.attachComponentPropDefinitions)(Object.assign(Component, {
388
412
  displayName: name,
389
413
  props: void 0,
390
414
  resource: void 0,
@@ -398,10 +422,21 @@ function defineResourceLayoutImpl(options) {
398
422
  ...customLayoutProps,
399
423
  ...includedComponentDefinitions
400
424
  });
425
+ if (namespace) {
426
+ if (Object.prototype.hasOwnProperty.call(stateComponents, "Root")) throw new require_layout_configuration_error.LayoutConfigurationError("Render state name \"Root\" is reserved when namespace is true");
427
+ return {
428
+ Root: rootComponent,
429
+ ...stateComponents
430
+ };
431
+ }
432
+ return rootComponent;
401
433
  });
402
434
  const createTopLevelMakeComposable = () => {
403
435
  return (options) => {
404
- const layout = definedResourceLayout(options);
436
+ const layout = definedResourceLayout({
437
+ ...options,
438
+ namespace: false
439
+ });
405
440
  if (!("makeComposable" in layout) || typeof layout.makeComposable !== "function") throw new require_layout_configuration_error.LayoutConfigurationError("makeComposable requires composables to be defined in the layout");
406
441
  return layout.makeComposable();
407
442
  };
@@ -412,11 +447,13 @@ function defineResourceLayoutImpl(options) {
412
447
  resource: resourcesEnum,
413
448
  name: _jfdevelops_react_layout_validator.createProp.string().literal(componentName)
414
449
  }) : inProps);
415
- const defaultState = getSynchronousRenderStateDefinition((typeof layout.render === "function" ? { default: layout.render } : layout.render).default, layout.props);
416
- const defaultComposables = defaultState?.composables ? (create) => ({
417
- ...layout.composables?.(create) ?? {},
418
- ...defaultState.composables?.(create)
419
- }) : layout.composables;
450
+ const renderStates = typeof layout.render === "function" ? { default: layout.render } : layout.render;
451
+ const defaultState = getSynchronousRenderStateDefinition(renderStates.default, layout.props);
452
+ const stateReferences = require_state_composable.createStateReferences(renderStates);
453
+ const defaultComposables = layout.composables || defaultState?.composables ? (create) => ({
454
+ ...layout.composables?.(create, stateReferences) ?? {},
455
+ ...defaultState?.composables?.(create, stateReferences)
456
+ }) : void 0;
420
457
  const resolvedComposables = defaultComposables ? (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(defaultComposables, {
421
458
  resource,
422
459
  name: componentName,
@@ -619,6 +656,7 @@ function defineResourceLayoutWithLayoutImpl(options) {
619
656
  resources,
620
657
  options: inProps,
621
658
  layout: resolvedLayout,
659
+ namespace: options.namespace,
622
660
  shellId
623
661
  });
624
662
  const Shell = createResourceLayoutShellComponent(resources, inProps ?? {}, shell, shellId);