@jfdevelops/react-layout 1.1.0 → 1.3.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 (63) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +40 -4
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +33 -13
  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 +33 -13
  6. package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
  7. package/dist/create-config/create-defined-resource-layout.mjs +40 -4
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +149 -30
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +46 -15
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +46 -15
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +149 -30
  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 +2 -1
  19. package/dist/create-config/for-resource.d.cts.map +1 -1
  20. package/dist/create-config/for-resource.d.mts +2 -1
  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/index.d.cts +1 -1
  24. package/dist/create-config/index.d.mts +1 -1
  25. package/dist/create-config/inspection.cjs +65 -0
  26. package/dist/create-config/inspection.cjs.map +1 -0
  27. package/dist/create-config/inspection.mjs +64 -0
  28. package/dist/create-config/inspection.mjs.map +1 -0
  29. package/dist/create-config/layout-name.cjs +21 -0
  30. package/dist/create-config/layout-name.cjs.map +1 -0
  31. package/dist/create-config/layout-name.d.cts +49 -0
  32. package/dist/create-config/layout-name.d.cts.map +1 -0
  33. package/dist/create-config/layout-name.d.mts +49 -0
  34. package/dist/create-config/layout-name.d.mts.map +1 -0
  35. package/dist/create-config/layout-name.mjs +20 -0
  36. package/dist/create-config/layout-name.mjs.map +1 -0
  37. package/dist/create-config/merge-layout-props.cjs +20 -0
  38. package/dist/create-config/merge-layout-props.cjs.map +1 -0
  39. package/dist/create-config/merge-layout-props.mjs +19 -0
  40. package/dist/create-config/merge-layout-props.mjs.map +1 -0
  41. package/dist/create-config/render-state.cjs +80 -5
  42. package/dist/create-config/render-state.cjs.map +1 -1
  43. package/dist/create-config/render-state.d.cts +72 -17
  44. package/dist/create-config/render-state.d.cts.map +1 -1
  45. package/dist/create-config/render-state.d.mts +72 -17
  46. package/dist/create-config/render-state.d.mts.map +1 -1
  47. package/dist/create-config/render-state.mjs +81 -6
  48. package/dist/create-config/render-state.mjs.map +1 -1
  49. package/dist/create-config/state-composable.cjs +9 -1
  50. package/dist/create-config/state-composable.cjs.map +1 -1
  51. package/dist/create-config/state-composable.d.cts.map +1 -1
  52. package/dist/create-config/state-composable.d.mts.map +1 -1
  53. package/dist/create-config/state-composable.mjs +8 -2
  54. package/dist/create-config/state-composable.mjs.map +1 -1
  55. package/dist/index.cjs +2 -0
  56. package/dist/index.d.cts +3 -2
  57. package/dist/index.d.mts +3 -2
  58. package/dist/index.mjs +2 -1
  59. package/dist/utils/capitalize.d.cts +6 -0
  60. package/dist/utils/capitalize.d.cts.map +1 -0
  61. package/dist/utils/capitalize.d.mts +6 -0
  62. package/dist/utils/capitalize.d.mts.map +1 -0
  63. package/package.json +5 -4
@@ -1,7 +1,8 @@
1
1
  import { LayoutResourceKey, ResourceDefinition } from "../resource.mjs";
2
- import { InPropsDefinition, InPropsObject, IncludedProps, LayoutRenderProps, MergedLayoutInProps, ResolvedIncludedComponentProps } from "../props.mjs";
2
+ import { InPropsDefinition, InPropsObject, IncludedProps, LayoutRenderProps, MergedLayoutInProps, ResolvedIncludedComponentProps, ResolvedIncludedProps } from "../props.mjs";
3
3
  import { StateComposable, StateComposableHandle } from "./state-composable.mjs";
4
- import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
4
+ import { LayoutRenderResourcesAccessor, MergeContract } from "./define-layout.mjs";
5
+ import { ComposableComponents, ComposablePresetMeta, CreateLayoutComposable, MergePresetProps, composablePresetMetaKey } from "@jfdevelops/react-layout-composables";
5
6
  import { JSX } from "react";
6
7
  import { ResolveProps } from "@jfdevelops/react-layout-validator";
7
8
 
@@ -48,7 +49,8 @@ type RenderStateComposablesDefinition<Resources extends ReadonlyArray<ResourceDe
48
49
  type LayoutComposablesDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Composables extends ComposableComponents> = RenderStateComposablesDefinition<Resources, Composables>;
49
50
  type BuilderRenderComposables<Composables extends ComposableComponents> = [keyof Composables] extends [never] ? undefined : Composables;
50
51
  /** Values available as the second argument of a created state's `render`. */
51
- type RenderStateContext<Composables extends ComposableComponents> = {
52
+ type RenderStateContext<Composables extends ComposableComponents, Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>> = {
53
+ resources: LayoutRenderResourcesAccessor<Resources>;
52
54
  composables: BuilderRenderComposables<Composables>;
53
55
  retry?: () => void;
54
56
  };
@@ -57,21 +59,21 @@ type RenderStateContext<Composables extends ComposableComponents> = {
57
59
  * props to the values received by its render callback.
58
60
  */
59
61
  type RenderStateProps<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, Composables>>, CustomProps extends InPropsObject> = LayoutRenderProps<Resources, Options, Composables, IncludeProps, CustomProps>;
60
- type TypedRenderStateDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, State extends string, CustomProps extends InPropsObject, SharedComposables extends ComposableComponents, StateComposables extends ComposableComponents, IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>>> = {
62
+ type TypedRenderStateDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, State extends string, CustomProps extends InPropsObject, SharedComposables extends ComposableComponents, StateComposables extends ComposableComponents, IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>>, SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {}, SharedCustom extends InPropsObject = {}> = {
61
63
  composables?: RenderStateComposablesDefinition<Resources, StateComposables>;
62
64
  props?: {
63
65
  include?: IncludeProps;
64
66
  custom?: CustomProps;
65
67
  };
66
- render: (props: RenderStateProps<Resources, Options, SharedComposables & StateComposables, IncludeProps, CustomProps>, context: RenderStateContext<SharedComposables & StateComposables>) => JSX.Element;
68
+ render: (props: RenderStateProps<Resources, Options, SharedComposables & StateComposables, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>>, context: RenderStateContext<SharedComposables & StateComposables, Resources>) => JSX.Element;
67
69
  state: State;
68
70
  };
69
71
  /**
70
72
  * Callback shorthand for a created state, typed with the bound resources,
71
73
  * options, and shared composables.
72
74
  */
73
- type TypedRenderStateCallback<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents> = (props: RenderStateProps<Resources, Options, SharedComposables, {}, {}>, context: RenderStateContext<SharedComposables>) => JSX.Element;
74
- type NormalizeRenderStateDefinition<Input> = Input extends DeferredRenderState<infer Definition> ? Definition : Input extends RenderStateCallback ? {
75
+ type TypedRenderStateCallback<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents, SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {}, SharedCustom extends InPropsObject = {}> = (props: RenderStateProps<Resources, Options, SharedComposables, SharedInclude, SharedCustom>, context: RenderStateContext<SharedComposables, Resources>) => JSX.Element;
76
+ type NormalizeRenderStateDefinition<Input> = Input extends LazyRenderState<infer Definition> ? Definition : Input extends DeferredRenderState<infer Definition> ? Definition : Input extends RenderStateCallback ? {
75
77
  render: Input;
76
78
  state: 'default';
77
79
  } : Input extends AnyRenderStateDefinition ? Input : never;
@@ -127,11 +129,58 @@ type RenderStateEntry<Definition, Deferred extends boolean> = Deferred extends t
127
129
  * accepts a full definition, a definition without `state`, or a render
128
130
  * callback; `Deferred` decides whether the returned entry is deferred.
129
131
  */
130
- interface RenderStateOverloads<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents, Deferred extends boolean> {
131
- <const State extends RenderStateName, const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>): BoundRenderStateFragment<Resources, Options, SharedComposables, RenderStateEntry<TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps>, Deferred>>;
132
- <const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: Omit<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>, 'state'>): BoundRenderStateFragment<Resources, Options, SharedComposables, RenderStateEntry<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps>, Deferred>>;
133
- (render: TypedRenderStateCallback<Resources, Options, SharedComposables>): BoundRenderStateFragment<Resources, Options, SharedComposables, RenderStateEntry<TypedRenderStateCallback<Resources, Options, SharedComposables>, Deferred>>;
132
+ interface RenderStateOverloads<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents, Deferred extends boolean, SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {}, SharedCustom extends InPropsObject = {}> {
133
+ <const State extends RenderStateName, const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps, SharedInclude, SharedCustom>): BoundRenderStateFragment<Resources, Options, SharedComposables, RenderStateEntry<TypedRenderStateDefinition<Resources, Options, State, CustomProps, SharedComposables, StateComposables, IncludeProps, SharedInclude, SharedCustom>, Deferred>>;
134
+ <const CustomProps extends InPropsObject = {}, const StateComposables extends ComposableComponents = {}, const IncludeProps extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables & StateComposables>> = {}>(definition: Omit<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps, SharedInclude, SharedCustom>, 'state'>): BoundRenderStateFragment<Resources, Options, SharedComposables, RenderStateEntry<TypedRenderStateDefinition<Resources, Options, 'default', CustomProps, SharedComposables, StateComposables, IncludeProps, SharedInclude, SharedCustom>, Deferred>>;
135
+ (render: TypedRenderStateCallback<Resources, Options, SharedComposables, SharedInclude, SharedCustom>): BoundRenderStateFragment<Resources, Options, SharedComposables, RenderStateEntry<TypedRenderStateCallback<Resources, Options, SharedComposables, SharedInclude, SharedCustom>, Deferred>>;
134
136
  }
137
+ type RenderStateReference = ({
138
+ readonly [definedRenderStateSymbol]: AnyRenderStateDefinition;
139
+ } | LazyRenderState<AnyRenderStateDefinition>) & StateComposableHandle<any>;
140
+ type ReferenceDefinition<Ref extends RenderStateReference> = Ref extends LazyRenderState<infer Definition> ? Definition : Ref extends {
141
+ readonly [definedRenderStateSymbol]: infer Definition extends AnyRenderStateDefinition;
142
+ } ? Definition : never;
143
+ type FromStateEntry<Ref extends RenderStateReference, Definition extends AnyRenderStateDefinition> = Ref extends LazyRenderState<AnyRenderStateDefinition> ? LazyRenderState<Definition> : Extract<Ref[Exclude<keyof Ref, 'asComposable' | typeof definedRenderStateSymbol>], LazyRenderState<AnyRenderStateDefinition>> extends never ? Definition : LazyRenderState<Definition>;
144
+ type ReferenceSchemas<Ref extends RenderStateReference> = StateCustomProps<ReferenceDefinition<Ref>> & MergePresetProps<StateLocalComposables<ReferenceDefinition<Ref>>>;
145
+ type DefaultReferenceIncludes<Ref extends RenderStateReference, CustomProps> = Omit<StateIncludes<ReferenceDefinition<Ref>>, keyof CustomProps | keyof StateCustomProps<ReferenceDefinition<Ref>>> & { [Key in Exclude<keyof StateCustomProps<ReferenceDefinition<Ref>>, keyof CustomProps>]: {
146
+ visibility: StateCustomProps<ReferenceDefinition<Ref>>[Key] extends {
147
+ visibility: infer Visibility;
148
+ } ? Visibility : 'required';
149
+ passthrough: 'component';
150
+ } };
151
+ type ReferenceIncludes<Ref extends RenderStateReference, CustomProps, Include> = Include extends object ? Include : DefaultReferenceIncludes<Ref, CustomProps>;
152
+ type FromStateInProps<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Shared extends ComposableComponents, Ref extends RenderStateReference, Local extends ComposableComponents> = (MergedLayoutInProps<Resources, Options, Shared & StateLocalComposables<ReferenceDefinition<Ref>> & Local> & StateCustomProps<ReferenceDefinition<Ref>>) extends infer Props extends InPropsObject ? Props : {};
153
+ type SelectedReferenceSchemas<Ref extends RenderStateReference, Include> = Pick<ReferenceSchemas<Ref>, Extract<keyof Include, keyof ReferenceSchemas<Ref>>> extends infer Selected extends InPropsObject ? Selected : {};
154
+ type ReferenceCarriedProps<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Shared extends ComposableComponents, Ref extends RenderStateReference, Include> = Pick<FromStateInProps<Resources, Options, Shared, Ref, {}>, Extract<keyof Include, keyof FromStateInProps<Resources, Options, Shared, Ref, {}>>> extends infer Selected extends InPropsObject ? ResolveProps<Selected> : {};
155
+ type ReferenceRenderProps<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Shared extends ComposableComponents, Ref extends RenderStateReference> = RenderStateProps<Resources, Options, Shared & StateLocalComposables<ReferenceDefinition<Ref>>, StateIncludes<ReferenceDefinition<Ref>> extends infer Include extends IncludedProps<MergedLayoutInProps<Resources, Options, Shared & StateLocalComposables<ReferenceDefinition<Ref>>>> ? Include : {}, StateCustomProps<ReferenceDefinition<Ref>>>;
156
+ type FromStateComposables<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Shared extends ComposableComponents, Ref extends RenderStateReference, Local extends ComposableComponents, Include> = Local & {
157
+ Ref: StateComposable<ReferenceRenderProps<Resources, Options, Shared, Ref>, Extract<keyof ReferenceCarriedProps<Resources, Options, Shared, Ref, Include>, keyof ReferenceRenderProps<Resources, Options, Shared, Ref>>> & {
158
+ [composablePresetMetaKey]: ComposablePresetMeta<SelectedReferenceSchemas<Ref, Include>>;
159
+ };
160
+ };
161
+ type FromStateDefinition<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Shared extends ComposableComponents, Ref extends RenderStateReference, State extends string, CustomProps extends InPropsObject, Local extends ComposableComponents, Include> = {
162
+ state: State;
163
+ props?: {
164
+ custom?: CustomProps;
165
+ include?: ReferenceIncludes<Ref, CustomProps, Include>;
166
+ };
167
+ composables: RenderStateComposablesDefinition<Resources, FromStateComposables<Resources, Options, Shared, Ref, Local, ReferenceIncludes<Ref, CustomProps, Include>>>;
168
+ render: (props: ResolveProps<CustomProps> & ResolvedIncludedProps<FromStateInProps<Resources, Options, Shared, Ref, Local>, ReferenceIncludes<Ref, CustomProps, Include> extends infer Selected extends IncludedProps<FromStateInProps<Resources, Options, Shared, Ref, Local>> ? Selected : {}>, context: RenderStateContext<Shared & FromStateComposables<Resources, Options, Shared, Ref, Local, ReferenceIncludes<Ref, CustomProps, Include>>, Resources>) => JSX.Element;
169
+ };
170
+ /** Creates a state with inherited props and a composable reference to its source. */
171
+ type CreateRenderStateFromState<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, Shared extends ComposableComponents> = <const Ref extends RenderStateReference, const State extends RenderStateName = 'default', const CustomProps extends InPropsObject = {}, const Local extends ComposableComponents = {}, const Include extends IncludedProps<FromStateInProps<Resources, Options, Shared, Ref, Local>> | undefined = undefined>(definition: {
172
+ ref: Ref; /** Defer Ref rendering through React.lazy. Defaults to false. */
173
+ lazy?: boolean;
174
+ state?: State;
175
+ props?: {
176
+ custom?: CustomProps;
177
+ include?: Include & Record<Exclude<keyof Include, keyof FromStateInProps<Resources, Options, Shared, Ref, Local>>, never>;
178
+ };
179
+ composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => Local & {
180
+ Ref?: never;
181
+ };
182
+ render: FromStateDefinition<Resources, Options, Shared, Ref, State, CustomProps, Local, Include>['render'];
183
+ }) => BoundRenderStateFragment<Resources, Options, Shared, FromStateEntry<Ref, FromStateDefinition<Resources, Options, Shared, Ref, State, CustomProps, Local, Include>>>;
135
184
  /**
136
185
  * Creates independently typed render-state fragments.
137
186
  *
@@ -140,19 +189,25 @@ interface RenderStateOverloads<Resources extends ReadonlyArray<ResourceDefinitio
140
189
  * does not create a separate JavaScript chunk.
141
190
  * - `.lazy(() => import(...))` imports a complete named state definition as a
142
191
  * separate chunk.
192
+ * - `.fromState({ ref, ... })` inherits a state's props and exposes it as `Ref`.
143
193
  */
144
- interface CreateRenderState<Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources> = {}, SharedComposables extends ComposableComponents = {}> extends RenderStateOverloads<Resources, Options, SharedComposables, false> {
145
- defer: RenderStateOverloads<Resources, Options, SharedComposables, true>;
194
+ interface CreateRenderState<Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources> = {}, SharedComposables extends ComposableComponents = {}, SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {}, SharedCustom extends InPropsObject = {}> extends RenderStateOverloads<Resources, Options, SharedComposables, false, SharedInclude, SharedCustom> {
195
+ fromState: CreateRenderStateFromState<Resources, Options, SharedComposables>;
196
+ defer: RenderStateOverloads<Resources, Options, SharedComposables, true, SharedInclude, SharedCustom>;
146
197
  lazy<Module extends Record<string, unknown>>(load: () => Promise<Module>): LazyRenderState<DefinedRenderStateFromModule<Module>> & StateComposableHandle<RenderStateCallProps<Resources, Options, SharedComposables, DefinedRenderStateFromModule<Module>>>;
147
198
  }
148
199
  /** Inputs used internally to bind resource and option types to a state builder. */
149
- type CreateRenderStateBuilderArguments<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}> = {
150
- /** Shared composables whose components and preset props every state can use. */composables?: LayoutComposablesDefinition<Resources, SharedComposables>; /** Option props that individual states can expose through `props.include`. */
200
+ type CreateRenderStateBuilderArguments<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}, SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {}, SharedCustom extends InPropsObject = {}> = {
201
+ props?: {
202
+ include?: SharedInclude;
203
+ custom?: SharedCustom;
204
+ }; /** Shared composables whose components and preset props every state can use. */
205
+ composables?: LayoutComposablesDefinition<Resources, SharedComposables>; /** Option props that individual states can expose through `props.include`. */
151
206
  options: Options; /** Resources used to constrain composable names and resource-specific props. */
152
207
  resources: Resources;
153
208
  };
154
209
  /** The state factory produced for a particular resource and option definition. */
155
- type CreateRenderStateBuilderResult<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}> = CreateRenderState<Resources, Options, SharedComposables>;
210
+ type CreateRenderStateBuilderResult<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>, SharedComposables extends ComposableComponents = {}, SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {}, SharedCustom extends InPropsObject = {}> = CreateRenderState<Resources, Options, SharedComposables, SharedInclude, SharedCustom>;
156
211
  /** Identity helper that contextually types a reusable composables callback. */
157
212
  type DefineLayoutComposables<Resources extends ReadonlyArray<ResourceDefinition>> = <const Composables extends ComposableComponents>(definition: LayoutComposablesDefinition<Resources, Composables>) => LayoutComposablesDefinition<Resources, Composables>;
158
213
  /** Public cross-file building blocks returned by a defined layout builder. */
@@ -165,5 +220,5 @@ type CreateLayoutBuildingBlocksArguments<Resources extends ReadonlyArray<Resourc
165
220
  /** Layout helpers produced for the supplied resource and option bindings. */
166
221
  type CreateLayoutBuildingBlocksResult<Resources extends ReadonlyArray<ResourceDefinition>, Options extends InPropsDefinition<Resources>> = CreateLayoutBuildingBlocks<Resources, Options>;
167
222
  //#endregion
168
- export { AnyRenderStateDefinition, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallProps, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateName, RenderStateOverloads, RenderStateProps, RenderStateReferences, TypedRenderStateCallback, definedResourceLayoutComponentSymbol };
223
+ export { AnyRenderStateDefinition, CreateLayoutBuildingBlocks, CreateLayoutBuildingBlocksArguments, CreateLayoutBuildingBlocksResult, CreateRenderState, CreateRenderStateBuilderArguments, CreateRenderStateBuilderResult, CreateRenderStateFromState, DeferredRenderState, DefineLayoutComposables, LayoutComposablesDefinition, LazyRenderState, RenderStateCallProps, RenderStateCallback, RenderStateComposablesDefinition, RenderStateContext, RenderStateFragment, RenderStateName, RenderStateOverloads, RenderStateProps, RenderStateReferences, TypedRenderStateCallback, definedResourceLayoutComponentSymbol };
169
224
  //# sourceMappingURL=render-state.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-state.d.mts","names":[],"sources":["../../src/create-config/render-state.ts"],"mappings":"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"}
1
+ {"version":3,"file":"render-state.d.mts","names":[],"sources":["../../src/create-config/render-state.ts"],"mappings":"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"}
@@ -1,4 +1,6 @@
1
- import { withStateComposable } from "./state-composable.mjs";
1
+ import { LayoutConfigurationError } from "../errors/layout-configuration-error.mjs";
2
+ import { createStateComposable, withStateComposable } from "./state-composable.mjs";
3
+ import { collectComposablePresetEntries, composablePresetMetaKey } from "@jfdevelops/react-layout-composables";
2
4
 
3
5
  //#region src/create-config/render-state.ts
4
6
  const deferredRenderStateSymbol = Symbol("deferredRenderState");
@@ -30,10 +32,82 @@ function createRenderStateBuilder(_arguments) {
30
32
  function createRenderState(input) {
31
33
  return toFragment(normalizeDefinition(input));
32
34
  }
35
+ createRenderState.fromState = (input) => {
36
+ const entry = isLazyRenderState(input.ref) ? input.ref : Object.values(input.ref)[0];
37
+ if (isLazyRenderState(entry)) {
38
+ const lazyState = { [lazyRenderStateSymbol]: async () => {
39
+ const source = await findDefinedRenderState(await entry[lazyRenderStateSymbol]());
40
+ return { Derived: createRenderState.fromState({
41
+ ...input,
42
+ ref: toFragment(source)
43
+ }) };
44
+ } };
45
+ const name = input.state ?? "default";
46
+ const fragment = { [name]: lazyState };
47
+ Object.defineProperty(fragment, definedRenderStateSymbol, { value: lazyState });
48
+ return withStateComposable(fragment, {
49
+ input: lazyState,
50
+ name
51
+ });
52
+ }
53
+ const source = isDeferredRenderState(entry) ? entry[deferredRenderStateSymbol] : definedRenderStateSymbol in input.ref ? input.ref[definedRenderStateSymbol] : void 0;
54
+ if (!source || typeof source.render !== "function") throw new LayoutConfigurationError("fromState requires a created render state");
55
+ const custom = input.props?.custom ?? {};
56
+ const includes = input.props?.include ?? Object.fromEntries(Object.entries({
57
+ ...source.props?.include,
58
+ ...Object.fromEntries(Object.entries(source.props?.custom ?? {}).map(([key, prop]) => [key, {
59
+ visibility: prop.visibility,
60
+ passthrough: "component"
61
+ }]))
62
+ }).filter(([key]) => !(key in custom)));
63
+ return toFragment({
64
+ state: input.state ?? "default",
65
+ props: {
66
+ custom,
67
+ include: includes
68
+ },
69
+ composables: (create, states) => {
70
+ const inherited = source.composables?.(create, states) ?? {};
71
+ const local = input.composables?.(create, states) ?? {};
72
+ if (Object.prototype.hasOwnProperty.call(local, "Ref")) throw new LayoutConfigurationError("Composable name \"Ref\" is reserved by fromState");
73
+ const schemas = Object.assign({}, ...collectComposablePresetEntries(inherited).map(({ props }) => props), source.props?.custom);
74
+ const selected = Object.fromEntries(Object.entries(schemas).filter(([key]) => key in includes));
75
+ const referenceSource = {
76
+ ...source,
77
+ props: {
78
+ ...source.props,
79
+ include: Object.fromEntries(Object.entries(source.props?.include ?? {}).map(([key, behavior]) => [key, {
80
+ visibility: behavior === "optional" || typeof behavior === "object" && behavior !== null && "visibility" in behavior && behavior.visibility === "optional" ? "optional" : "required",
81
+ passthrough: "component"
82
+ }]))
83
+ }
84
+ };
85
+ const Ref = createStateComposable({
86
+ input: input.lazy || isDeferredRenderState(entry) ? { [deferredRenderStateSymbol]: referenceSource } : referenceSource,
87
+ name: source.state ?? "default",
88
+ fallbackStateName: input.state
89
+ }, {
90
+ props: { include: Object.fromEntries(Object.keys(includes).map((key) => [key, true])) },
91
+ normalizeIncludedKeys: true
92
+ });
93
+ Object.defineProperty(Ref, composablePresetMetaKey, { value: {
94
+ key: "Ref",
95
+ props: selected
96
+ } });
97
+ return {
98
+ ...local,
99
+ Ref
100
+ };
101
+ },
102
+ render: input.render
103
+ });
104
+ };
33
105
  createRenderState.defer = (input) => {
34
106
  const definition = normalizeDefinition(input);
35
107
  const deferred = { [deferredRenderStateSymbol]: definition };
36
- return withStateComposable({ [definition.state ?? "default"]: deferred }, {
108
+ const fragment = { [definition.state ?? "default"]: deferred };
109
+ Object.defineProperty(fragment, definedRenderStateSymbol, { value: definition });
110
+ return withStateComposable(fragment, {
37
111
  input: deferred,
38
112
  name: definition.state ?? "default"
39
113
  });
@@ -56,13 +130,14 @@ function isLazyRenderState(value) {
56
130
  return typeof value === "object" && value !== null && lazyRenderStateSymbol in value;
57
131
  }
58
132
  /**
59
- * Selects the single state definition exported by a lazy module. Throws when
60
- * the module exports none or more than one, avoiding ambiguous selection.
133
+ * Resolves the single state exported by a lazy module, including derived lazy
134
+ * states. Throws when a module exports none or more than one.
61
135
  */
62
- function findDefinedRenderState(module) {
136
+ async function findDefinedRenderState(module) {
63
137
  const definitions = Object.values(module).filter((value) => typeof value === "object" && value !== null && definedRenderStateSymbol in value);
64
138
  if (definitions.length !== 1) throw new Error(`A lazy render-state module must export exactly one defined render state; received ${definitions.length}.`);
65
- return definitions[0][definedRenderStateSymbol];
139
+ const definition = definitions[0][definedRenderStateSymbol];
140
+ return isLazyRenderState(definition) ? findDefinedRenderState(await definition[lazyRenderStateSymbol]()) : definition;
66
141
  }
67
142
 
68
143
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"render-state.mjs","names":[],"sources":["../../src/create-config/render-state.ts"],"sourcesContent":["import type { JSX } from 'react';\nimport { withStateComposable, type StateComposable, type StateComposableHandle } from './state-composable';\nimport type { ResolveProps } from '@jfdevelops/react-layout-validator';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '../props';\nimport type {\n IncludedProps,\n InPropsDefinition,\n LayoutRenderProps,\n MergedLayoutInProps,\n ResolvedIncludedComponentProps,\n} from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\n\nexport const deferredRenderStateSymbol: unique symbol = Symbol(\n 'deferredRenderState',\n) as never;\nexport const lazyRenderStateSymbol: unique symbol = Symbol(\n 'lazyRenderState',\n) as never;\nexport const definedRenderStateSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/render-state',\n) as never;\nexport const definedResourceLayoutComponentSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/resource-layout-component',\n) as never;\n\n/** Runtime-compatible render-state shape used when inspecting lazy modules. */\nexport type AnyRenderStateDefinition = {\n composables?: (create: CreateLayoutComposable<any>, states: any) => ComposableComponents;\n props?: {\n include?: Record<string, unknown>;\n custom?: InPropsObject;\n };\n render: (props: any, context: any) => JSX.Element;\n state?: string;\n};\n\n/** An inline state whose first render is scheduled through `React.lazy`. */\nexport type DeferredRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [deferredRenderStateSymbol]: Definition;\n};\n\n/** A state definition supplied by a separately imported module. */\nexport type LazyRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [lazyRenderStateSymbol]: () => Promise<Record<string, unknown>>;\n readonly definition?: Definition;\n};\n\n/**\n * State names accepted by `createRenderState`. Built-in states are suggested by\n * autocomplete while any other string still creates a custom compound state.\n */\nexport type RenderStateName =\n | 'default'\n | 'Loading'\n | 'Error'\n | 'NotFound'\n | (string & {});\n\n/** Callback shorthand for a render state with no local configuration. */\nexport type RenderStateCallback = (props: any, context: any) => JSX.Element;\n\n/**\n * Defines state-local composable components with a `create` helper narrowed to\n * the resources bound to the surrounding builder.\n */\nexport type RenderStateComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n States = {},\n> = (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: States,\n) => Composables;\n\n/**\n * Defines reusable layout-level composables while preserving their inferred\n * names, props, and bound resource union.\n */\nexport type LayoutComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n> = RenderStateComposablesDefinition<Resources, Composables>;\n\ntype BuilderRenderComposables<Composables extends ComposableComponents> = [\n keyof Composables,\n] extends [never]\n ? undefined\n : Composables;\n\n/** Values available as the second argument of a created state's `render`. */\nexport type RenderStateContext<\n Composables extends ComposableComponents,\n> = {\n composables: BuilderRenderComposables<Composables>;\n retry?: () => void;\n};\n\n/**\n * Resolves one state's custom props and explicitly included option/composable\n * props to the values received by its render callback.\n */\nexport type RenderStateProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n >,\n CustomProps extends InPropsObject,\n> = LayoutRenderProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n>;\n\ntype TypedRenderStateDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n State extends string,\n CustomProps extends InPropsObject,\n SharedComposables extends ComposableComponents,\n StateComposables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n >,\n> = {\n composables?: RenderStateComposablesDefinition<Resources, StateComposables>;\n props?: {\n include?: IncludeProps;\n custom?: CustomProps;\n };\n render: (\n props: RenderStateProps<\n Resources,\n Options,\n SharedComposables & StateComposables,\n IncludeProps,\n CustomProps\n >,\n context: RenderStateContext<SharedComposables & StateComposables>,\n ) => JSX.Element;\n state: State;\n};\n\n/**\n * Callback shorthand for a created state, typed with the bound resources,\n * options, and shared composables.\n */\nexport type TypedRenderStateCallback<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents,\n> = (\n props: RenderStateProps<Resources, Options, SharedComposables, {}, {}>,\n context: RenderStateContext<SharedComposables>,\n) => JSX.Element;\n\ntype NormalizeRenderStateDefinition<Input> =\n Input extends DeferredRenderState<infer Definition>\n ? Definition\n : Input extends RenderStateCallback\n ? { render: Input; state: 'default' }\n : Input extends AnyRenderStateDefinition\n ? Input\n : never;\n\ntype StateName<Definition> = Definition extends DeferredRenderState<\n infer DeferredDefinition\n>\n ? StateName<DeferredDefinition>\n : Definition extends { state?: infer State extends string }\n ? State\n : 'default';\n\n/**\n * A spreadable state entry keyed by its literal state name. Spreading this into\n * `layout.render` is what creates compound members such as `Users.Loading`.\n */\nexport type RenderStateFragment<Definition, CallProps extends object = ResolveProps<StateCustomProps<Definition>>> = {\n [State in StateName<NormalizeRenderStateDefinition<Definition>>]: Definition;\n} & {\n readonly [definedRenderStateSymbol]: NormalizeRenderStateDefinition<Definition>;\n} & StateComposableHandle<CallProps>;\n\ntype StateCustomProps<Input> = NormalizeStateInput<Input> extends {\n props?: { custom?: infer Props extends InPropsObject };\n} ? Props : {};\n\ntype StateIncludes<Input> = NormalizeStateInput<Input> extends {\n props?: { include?: infer Includes };\n} ? Includes : {};\n\ntype NormalizeStateInput<Input> = Input extends DeferredRenderState<infer Definition>\n ? Definition\n : Input extends LazyRenderState<infer Definition> ? Definition : Input;\n\ntype StateLocalComposables<Input> = NormalizeStateInput<Input> extends {\n composables?: (...args: any[]) => infer Components extends ComposableComponents;\n} ? Components : {};\n\n/**\n * A composables callback cannot infer its own return value into its arguments.\n * Preserve the declared call-site contract for props supplied by local presets,\n * even when their value types are not yet available in the callback context.\n */\ntype UnresolvedStateComponentProps<Props, Includes> = {\n [Key in Exclude<keyof Includes, keyof Props> as Includes[Key] extends {\n visibility: 'required'; passthrough: 'component';\n } ? Key : never]: unknown;\n} & {\n [Key in Exclude<keyof Includes, keyof Props> as Includes[Key] extends\n | 'optional'\n | { visibility: 'optional'; passthrough: 'component' }\n ? Key : never]?: unknown;\n};\n\ntype StateComponentProps<Props extends InPropsObject, Includes> =\n ResolvedIncludedComponentProps<Props,\n Pick<Includes, Extract<keyof Includes, keyof Props>> extends infer Known extends IncludedProps<Props>\n ? Known : {}\n > & UnresolvedStateComponentProps<Props, Includes>;\n\n/** Call-site props of a referenced state; creation-time options stay bound. */\nexport type RenderStateCallProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input,\n> = ResolveProps<StateCustomProps<Input>> & StateComponentProps<\n MergedLayoutInProps<Resources, Options, Composables & StateLocalComposables<Input>>,\n StateIncludes<Input>\n>;\n\n/** Typed references to all the states declared in an inline render map. */\nexport type RenderStateReferences<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States,\n> = {\n readonly [State in keyof States & string]: StateComposable<\n RenderStateCallProps<Resources, Options, Composables, States[State]>\n >;\n};\n\ntype BoundRenderStateFragment<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Definition,\n> = RenderStateFragment<Definition, RenderStateCallProps<\n Resources, Options, Composables, Definition\n>>;\n\ntype DefinedRenderStateFromModule<Module> = Extract<\n Module[keyof Module],\n { readonly [definedRenderStateSymbol]: AnyRenderStateDefinition }\n>[typeof definedRenderStateSymbol];\n\n/** Wraps a state definition in the deferred marker when `Deferred` is `true`. */\ntype RenderStateEntry<Definition, Deferred extends boolean> = Deferred extends true\n ? DeferredRenderState<NormalizeRenderStateDefinition<Definition>>\n : Definition;\n\n/**\n * Overloads shared by `createRenderState` and `createRenderState.defer`. Each\n * accepts a full definition, a definition without `state`, or a render\n * callback; `Deferred` decides whether the returned entry is deferred.\n */\nexport interface RenderStateOverloads<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents,\n Deferred extends boolean,\n> {\n <\n const State extends RenderStateName,\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n ): BoundRenderStateFragment<Resources, Options, SharedComposables,\n RenderStateEntry<\n TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n Deferred\n >\n >;\n <\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: Omit<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n 'state'\n >,\n ): BoundRenderStateFragment<Resources, Options, SharedComposables,\n RenderStateEntry<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps\n >,\n Deferred\n >\n >;\n (\n render: TypedRenderStateCallback<Resources, Options, SharedComposables>,\n ): BoundRenderStateFragment<Resources, Options, SharedComposables,\n RenderStateEntry<\n TypedRenderStateCallback<Resources, Options, SharedComposables>,\n Deferred\n >\n >;\n}\n\n/**\n * Creates independently typed render-state fragments.\n *\n * - Calling it directly creates an eager state.\n * - `.defer(...)` schedules an inline definition through `React.lazy`, but\n * does not create a separate JavaScript chunk.\n * - `.lazy(() => import(...))` imports a complete named state definition as a\n * separate chunk.\n */\nexport interface CreateRenderState<\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n SharedComposables extends ComposableComponents = {},\n> extends RenderStateOverloads<Resources, Options, SharedComposables, false> {\n defer: RenderStateOverloads<Resources, Options, SharedComposables, true>;\n lazy<Module extends Record<string, unknown>>(\n load: () => Promise<Module>,\n ): LazyRenderState<DefinedRenderStateFromModule<Module>> & StateComposableHandle<\n RenderStateCallProps<Resources, Options, SharedComposables, DefinedRenderStateFromModule<Module>>\n >;\n}\n\nfunction normalizeDefinition(\n input: AnyRenderStateDefinition | RenderStateCallback,\n): AnyRenderStateDefinition {\n return typeof input === 'function'\n ? { render: input, state: 'default' }\n : input;\n}\n\nfunction toFragment<Definition extends AnyRenderStateDefinition>(\n definition: Definition,\n) {\n const fragment = {\n [definition.state ?? 'default']: definition,\n } as RenderStateFragment<Definition>;\n\n Object.defineProperty(fragment, definedRenderStateSymbol, {\n enumerable: false,\n value: definition,\n });\n\n return withStateComposable(fragment, { input: definition, name: definition.state ?? 'default' });\n}\n\n/** Inputs used internally to bind resource and option types to a state builder. */\nexport type CreateRenderStateBuilderArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n> = {\n /** Shared composables whose components and preset props every state can use. */\n composables?: LayoutComposablesDefinition<Resources, SharedComposables>;\n /** Option props that individual states can expose through `props.include`. */\n options: Options;\n /** Resources used to constrain composable names and resource-specific props. */\n resources: Resources;\n};\n\n/** The state factory produced for a particular resource and option definition. */\nexport type CreateRenderStateBuilderResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n> = CreateRenderState<Resources, Options, SharedComposables>;\n\n/**\n * Creates a state factory whose `props.include` keys are constrained by the\n * supplied resources and options.\n */\nexport function createRenderStateBuilder<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n>(\n _arguments: CreateRenderStateBuilderArguments<\n Resources,\n Options,\n SharedComposables\n >,\n): CreateRenderStateBuilderResult<Resources, Options, SharedComposables> {\n function createRenderState(\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) {\n return toFragment(normalizeDefinition(input));\n }\n\n createRenderState.defer = (\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) => {\n const definition = normalizeDefinition(input);\n\n const deferred = { [deferredRenderStateSymbol]: definition };\n return withStateComposable({ [definition.state ?? 'default']: deferred }, {\n input: deferred, name: definition.state ?? 'default',\n });\n };\n createRenderState.lazy = (\n load: () => Promise<Record<string, unknown>>,\n ) => {\n const lazyState = { [lazyRenderStateSymbol]: load };\n return withStateComposable(lazyState, { input: lazyState, name: 'lazy' });\n };\n\n return createRenderState as unknown as CreateRenderStateBuilderResult<\n Resources,\n Options,\n SharedComposables\n >;\n}\n\n/** Type guard for states created with `createRenderState.defer(...)`. */\nexport function isDeferredRenderState(\n value: unknown,\n): value is DeferredRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' &&\n value !== null &&\n deferredRenderStateSymbol in value\n );\n}\n\n/** Type guard for states created with `createRenderState.lazy(...)`. */\nexport function isLazyRenderState(\n value: unknown,\n): value is LazyRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' && value !== null && lazyRenderStateSymbol in value\n );\n}\n\n/**\n * Selects the single state definition exported by a lazy module. Throws when\n * the module exports none or more than one, avoiding ambiguous selection.\n */\nexport function findDefinedRenderState(\n module: Record<string, unknown>,\n): AnyRenderStateDefinition {\n const definitions = Object.values(module).filter(\n (value) =>\n typeof value === 'object' && value !== null && definedRenderStateSymbol in value,\n ) as Array<Record<typeof definedRenderStateSymbol, AnyRenderStateDefinition>>;\n\n if (definitions.length !== 1) {\n throw new Error(\n `A lazy render-state module must export exactly one defined render state; received ${definitions.length}.`,\n );\n }\n\n return definitions[0][definedRenderStateSymbol];\n}\n\n/** Identity helper that contextually types a reusable composables callback. */\nexport type DefineLayoutComposables<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = <const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n) => LayoutComposablesDefinition<Resources, Composables>;\n\n/** Public cross-file building blocks returned by a defined layout builder. */\nexport type CreateLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = {\n composables: DefineLayoutComposables<Resources>;\n createRenderState: CreateRenderState<Resources, Options>;\n};\n\n/** Resource and option bindings used to create layout building blocks. */\nexport type CreateLayoutBuildingBlocksArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateRenderStateBuilderArguments<Resources, Options>;\n\n/** Layout helpers produced for the supplied resource and option bindings. */\nexport type CreateLayoutBuildingBlocksResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateLayoutBuildingBlocks<Resources, Options>;\n\n/**\n * Creates the reusable `composables` and `createRenderState` helpers without\n * introducing an identity wrapper around the layout object itself.\n */\nexport function createLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n>(\n arguments_: CreateLayoutBuildingBlocksArguments<Resources, Options>,\n): CreateLayoutBuildingBlocksResult<Resources, Options> {\n function composables<const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n ): LayoutComposablesDefinition<Resources, Composables> {\n return definition;\n }\n\n return {\n composables,\n createRenderState: createRenderStateBuilder(arguments_),\n };\n}\n\n/** Preserves a bound resource tuple for consumers that need to re-export it. */\nexport type BoundResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = Resources;\n"],"mappings":";;;AAiBA,MAAa,4BAA2C,OACtD,qBACF;AACA,MAAa,wBAAuC,OAClD,iBACF;AACA,MAAa,2BAA0C,OAAO,IAC5D,uCACF;AACA,MAAa,uCAAsD,OAAO,IACxE,oDACF;AA0WA,SAAS,oBACP,OAC0B;CAC1B,OAAO,OAAO,UAAU,aACpB;EAAE,QAAQ;EAAO,OAAO;CAAU,IAClC;AACN;AAEA,SAAS,WACP,YACA;CACA,MAAM,WAAW,GACd,WAAW,SAAS,YAAY,WACnC;CAEA,OAAO,eAAe,UAAU,0BAA0B;EACxD,YAAY;EACZ,OAAO;CACT,CAAC;CAED,OAAO,oBAAoB,UAAU;EAAE,OAAO;EAAY,MAAM,WAAW,SAAS;CAAU,CAAC;AACjG;;;;;AA2BA,SAAgB,yBAKd,YAKuE;CACvE,SAAS,kBACP,OACA;EACA,OAAO,WAAW,oBAAoB,KAAK,CAAC;CAC9C;CAEA,kBAAkB,SAChB,UACG;EACH,MAAM,aAAa,oBAAoB,KAAK;EAE5C,MAAM,WAAW,GAAG,4BAA4B,WAAW;EAC3D,OAAO,oBAAoB,GAAG,WAAW,SAAS,YAAY,SAAS,GAAG;GACxE,OAAO;GAAU,MAAM,WAAW,SAAS;EAC7C,CAAC;CACH;CACA,kBAAkB,QAChB,SACG;EACH,MAAM,YAAY,GAAG,wBAAwB,KAAK;EAClD,OAAO,oBAAoB,WAAW;GAAE,OAAO;GAAW,MAAM;EAAO,CAAC;CAC1E;CAEA,OAAO;AAKT;;AAGA,SAAgB,sBACd,OACwD;CACxD,OACE,OAAO,UAAU,YACjB,UAAU,QACV,6BAA6B;AAEjC;;AAGA,SAAgB,kBACd,OACoD;CACpD,OACE,OAAO,UAAU,YAAY,UAAU,QAAQ,yBAAyB;AAE5E;;;;;AAMA,SAAgB,uBACd,QAC0B;CAC1B,MAAM,cAAc,OAAO,OAAO,MAAM,EAAE,QACvC,UACC,OAAO,UAAU,YAAY,UAAU,QAAQ,4BAA4B,KAC/E;CAEA,IAAI,YAAY,WAAW,GACzB,MAAM,IAAI,MACR,qFAAqF,YAAY,OAAO,EAC1G;CAGF,OAAO,YAAY,GAAG;AACxB"}
1
+ {"version":3,"file":"render-state.mjs","names":[],"sources":["../../src/create-config/render-state.ts"],"sourcesContent":["import type { MergeContract } from './define-layout';\nimport type { JSX } from 'react';\nimport { collectComposablePresetEntries, composablePresetMetaKey, type MergePresetProps, type ComposablePresetMeta } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport { createStateComposable, withStateComposable, type StateComposable, type StateComposableHandle } from './state-composable';\nimport type { ResolveProps } from '@jfdevelops/react-layout-validator';\nimport type {\n ComposableComponents,\n CreateLayoutComposable,\n} from '@jfdevelops/react-layout-composables';\nimport type { InPropsObject } from '../props';\nimport type {\n IncludedProps,\n InPropsDefinition,\n LayoutRenderProps,\n MergedLayoutInProps,\n ResolvedIncludedComponentProps,\n ResolvedIncludedProps,\n} from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport type { LayoutRenderResourcesAccessor } from './define-layout';\n\nexport const deferredRenderStateSymbol: unique symbol = Symbol(\n 'deferredRenderState',\n) as never;\nexport const lazyRenderStateSymbol: unique symbol = Symbol(\n 'lazyRenderState',\n) as never;\nexport const definedRenderStateSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/render-state',\n) as never;\nexport const definedResourceLayoutComponentSymbol: unique symbol = Symbol.for(\n '@jfdevelops/react-layout/resource-layout-component',\n) as never;\n\n/** Runtime-compatible render-state shape used when inspecting lazy modules. */\nexport type AnyRenderStateDefinition = {\n composables?: (create: CreateLayoutComposable<any>, states: any) => ComposableComponents;\n props?: {\n include?: Record<string, unknown>;\n custom?: InPropsObject;\n };\n render: (props: any, context: any) => JSX.Element;\n state?: string;\n};\n\n/** An inline state whose first render is scheduled through `React.lazy`. */\nexport type DeferredRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [deferredRenderStateSymbol]: Definition;\n};\n\n/** A state definition supplied by a separately imported module. */\nexport type LazyRenderState<Definition extends AnyRenderStateDefinition> = {\n readonly [lazyRenderStateSymbol]: () => Promise<Record<string, unknown>>;\n readonly definition?: Definition;\n};\n\n/**\n * State names accepted by `createRenderState`. Built-in states are suggested by\n * autocomplete while any other string still creates a custom compound state.\n */\nexport type RenderStateName =\n | 'default'\n | 'Loading'\n | 'Error'\n | 'NotFound'\n | (string & {});\n\n/** Callback shorthand for a render state with no local configuration. */\nexport type RenderStateCallback = (props: any, context: any) => JSX.Element;\n\n/**\n * Defines state-local composable components with a `create` helper narrowed to\n * the resources bound to the surrounding builder.\n */\nexport type RenderStateComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n States = {},\n> = (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: States,\n) => Composables;\n\n/**\n * Defines reusable layout-level composables while preserving their inferred\n * names, props, and bound resource union.\n */\nexport type LayoutComposablesDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Composables extends ComposableComponents,\n> = RenderStateComposablesDefinition<Resources, Composables>;\n\ntype BuilderRenderComposables<Composables extends ComposableComponents> = [\n keyof Composables,\n] extends [never]\n ? undefined\n : Composables;\n\n/** Values available as the second argument of a created state's `render`. */\nexport type RenderStateContext<\n Composables extends ComposableComponents,\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n> = {\n resources: LayoutRenderResourcesAccessor<Resources>;\n composables: BuilderRenderComposables<Composables>;\n retry?: () => void;\n};\n\n/**\n * Resolves one state's custom props and explicitly included option/composable\n * props to the values received by its render callback.\n */\nexport type RenderStateProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<Resources, Options, Composables>\n >,\n CustomProps extends InPropsObject,\n> = LayoutRenderProps<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n>;\n\ntype TypedRenderStateDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n State extends string,\n CustomProps extends InPropsObject,\n SharedComposables extends ComposableComponents,\n StateComposables extends ComposableComponents,\n IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n >,\n SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {},\n SharedCustom extends InPropsObject = {},\n> = {\n composables?: RenderStateComposablesDefinition<Resources, StateComposables>;\n props?: {\n include?: IncludeProps;\n custom?: CustomProps;\n };\n render: (\n props: RenderStateProps<\n Resources,\n Options,\n SharedComposables & StateComposables,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>\n >,\n context: RenderStateContext<SharedComposables & StateComposables, Resources>,\n ) => JSX.Element;\n state: State;\n};\n\n/**\n * Callback shorthand for a created state, typed with the bound resources,\n * options, and shared composables.\n */\nexport type TypedRenderStateCallback<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents,\n SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {},\n SharedCustom extends InPropsObject = {},\n> = (\n props: RenderStateProps<Resources, Options, SharedComposables, SharedInclude, SharedCustom>,\n context: RenderStateContext<SharedComposables, Resources>,\n) => JSX.Element;\n\ntype NormalizeRenderStateDefinition<Input> =\n Input extends LazyRenderState<infer Definition>\n ? Definition\n : Input extends DeferredRenderState<infer Definition>\n ? Definition\n : Input extends RenderStateCallback\n ? { render: Input; state: 'default' }\n : Input extends AnyRenderStateDefinition\n ? Input\n : never;\n\ntype StateName<Definition> = Definition extends DeferredRenderState<\n infer DeferredDefinition\n>\n ? StateName<DeferredDefinition>\n : Definition extends { state?: infer State extends string }\n ? State\n : 'default';\n\n/**\n * A spreadable state entry keyed by its literal state name. Spreading this into\n * `layout.render` is what creates compound members such as `Users.Loading`.\n */\nexport type RenderStateFragment<Definition, CallProps extends object = ResolveProps<StateCustomProps<Definition>>> = {\n [State in StateName<NormalizeRenderStateDefinition<Definition>>]: Definition;\n} & {\n readonly [definedRenderStateSymbol]: NormalizeRenderStateDefinition<Definition>;\n} & StateComposableHandle<CallProps>;\n\ntype StateCustomProps<Input> = NormalizeStateInput<Input> extends {\n props?: { custom?: infer Props extends InPropsObject };\n} ? Props : {};\n\ntype StateIncludes<Input> = NormalizeStateInput<Input> extends {\n props?: { include?: infer Includes };\n} ? Includes : {};\n\ntype NormalizeStateInput<Input> = Input extends DeferredRenderState<infer Definition>\n ? Definition\n : Input extends LazyRenderState<infer Definition> ? Definition : Input;\n\ntype StateLocalComposables<Input> = NormalizeStateInput<Input> extends {\n composables?: (...args: any[]) => infer Components extends ComposableComponents;\n} ? Components : {};\n\n/**\n * A composables callback cannot infer its own return value into its arguments.\n * Preserve the declared call-site contract for props supplied by local presets,\n * even when their value types are not yet available in the callback context.\n */\ntype UnresolvedStateComponentProps<Props, Includes> = {\n [Key in Exclude<keyof Includes, keyof Props> as Includes[Key] extends {\n visibility: 'required'; passthrough: 'component';\n } ? Key : never]: unknown;\n} & {\n [Key in Exclude<keyof Includes, keyof Props> as Includes[Key] extends\n | 'optional'\n | { visibility: 'optional'; passthrough: 'component' }\n ? Key : never]?: unknown;\n};\n\ntype StateComponentProps<Props extends InPropsObject, Includes> =\n ResolvedIncludedComponentProps<Props,\n Pick<Includes, Extract<keyof Includes, keyof Props>> extends infer Known extends IncludedProps<Props>\n ? Known : {}\n > & UnresolvedStateComponentProps<Props, Includes>;\n\n/** Call-site props of a referenced state; creation-time options stay bound. */\nexport type RenderStateCallProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Input,\n> = ResolveProps<StateCustomProps<Input>> & StateComponentProps<\n MergedLayoutInProps<Resources, Options, Composables & StateLocalComposables<Input>>,\n StateIncludes<Input>\n>;\n\n/** Typed references to all the states declared in an inline render map. */\nexport type RenderStateReferences<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n States,\n> = {\n readonly [State in keyof States & string]: StateComposable<\n RenderStateCallProps<Resources, Options, Composables, States[State]>\n >;\n};\n\ntype BoundRenderStateFragment<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n Definition,\n> = RenderStateFragment<Definition, RenderStateCallProps<\n Resources, Options, Composables, Definition\n>>;\n\ntype DefinedRenderStateFromModule<Module> = Extract<\n Module[keyof Module],\n { readonly [definedRenderStateSymbol]: AnyRenderStateDefinition }\n>[typeof definedRenderStateSymbol];\n\n/** Wraps a state definition in the deferred marker when `Deferred` is `true`. */\ntype RenderStateEntry<Definition, Deferred extends boolean> = Deferred extends true\n ? DeferredRenderState<NormalizeRenderStateDefinition<Definition>>\n : Definition;\n\n/**\n * Overloads shared by `createRenderState` and `createRenderState.defer`. Each\n * accepts a full definition, a definition without `state`, or a render\n * callback; `Deferred` decides whether the returned entry is deferred.\n */\nexport interface RenderStateOverloads<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents,\n Deferred extends boolean,\n SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {},\n SharedCustom extends InPropsObject = {},\n> {\n <\n const State extends RenderStateName,\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps,\n SharedInclude,\n SharedCustom\n >,\n ): BoundRenderStateFragment<Resources, Options, SharedComposables,\n RenderStateEntry<\n TypedRenderStateDefinition<\n Resources,\n Options,\n State,\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps,\n SharedInclude,\n SharedCustom\n >,\n Deferred\n >\n >;\n <\n const CustomProps extends InPropsObject = {},\n const StateComposables extends ComposableComponents = {},\n const IncludeProps extends IncludedProps<\n MergedLayoutInProps<\n Resources,\n Options,\n SharedComposables & StateComposables\n >\n > = {},\n >(\n definition: Omit<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps,\n SharedInclude,\n SharedCustom\n >,\n 'state'\n >,\n ): BoundRenderStateFragment<Resources, Options, SharedComposables,\n RenderStateEntry<\n TypedRenderStateDefinition<\n Resources,\n Options,\n 'default',\n CustomProps,\n SharedComposables,\n StateComposables,\n IncludeProps,\n SharedInclude,\n SharedCustom\n >,\n Deferred\n >\n >;\n (\n render: TypedRenderStateCallback<Resources, Options, SharedComposables, SharedInclude, SharedCustom>,\n ): BoundRenderStateFragment<Resources, Options, SharedComposables,\n RenderStateEntry<\n TypedRenderStateCallback<Resources, Options, SharedComposables, SharedInclude, SharedCustom>,\n Deferred\n >\n >;\n}\n\ntype RenderStateReference = (\n | { readonly [definedRenderStateSymbol]: AnyRenderStateDefinition }\n | LazyRenderState<AnyRenderStateDefinition>\n) & StateComposableHandle<any>;\n\ntype ReferenceDefinition<Ref extends RenderStateReference> =\n Ref extends LazyRenderState<infer Definition> ? Definition\n : Ref extends { readonly [definedRenderStateSymbol]: infer Definition extends AnyRenderStateDefinition }\n ? Definition : never;\n\ntype FromStateEntry<Ref extends RenderStateReference, Definition extends AnyRenderStateDefinition> =\n Ref extends LazyRenderState<AnyRenderStateDefinition> ? LazyRenderState<Definition>\n : Extract<Ref[Exclude<keyof Ref, 'asComposable' | typeof definedRenderStateSymbol>], LazyRenderState<AnyRenderStateDefinition>> extends never\n ? Definition : LazyRenderState<Definition>;\ntype ReferenceSchemas<Ref extends RenderStateReference> =\n StateCustomProps<ReferenceDefinition<Ref>> & MergePresetProps<StateLocalComposables<ReferenceDefinition<Ref>>>;\n\ntype DefaultReferenceIncludes<Ref extends RenderStateReference, CustomProps> =\n Omit<StateIncludes<ReferenceDefinition<Ref>>, keyof CustomProps | keyof StateCustomProps<ReferenceDefinition<Ref>>> & {\n [Key in Exclude<keyof StateCustomProps<ReferenceDefinition<Ref>>, keyof CustomProps>]: {\n visibility: StateCustomProps<ReferenceDefinition<Ref>>[Key] extends { visibility: infer Visibility }\n ? Visibility : 'required';\n passthrough: 'component';\n };\n };\n\ntype ReferenceIncludes<Ref extends RenderStateReference, CustomProps, Include> =\n Include extends object ? Include : DefaultReferenceIncludes<Ref, CustomProps>;\n\ntype FromStateInProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Shared extends ComposableComponents,\n Ref extends RenderStateReference,\n Local extends ComposableComponents,\n> = (MergedLayoutInProps<Resources, Options, Shared & StateLocalComposables<ReferenceDefinition<Ref>> & Local> &\n StateCustomProps<ReferenceDefinition<Ref>>) extends infer Props extends InPropsObject ? Props : {};\n\ntype SelectedReferenceSchemas<Ref extends RenderStateReference, Include> =\n Pick<ReferenceSchemas<Ref>, Extract<keyof Include, keyof ReferenceSchemas<Ref>>> extends infer Selected extends InPropsObject\n ? Selected : {};\n\ntype ReferenceCarriedProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Shared extends ComposableComponents,\n Ref extends RenderStateReference,\n Include,\n> = Pick<FromStateInProps<Resources, Options, Shared, Ref, {}>,\n Extract<keyof Include, keyof FromStateInProps<Resources, Options, Shared, Ref, {}>>\n> extends infer Selected extends InPropsObject ? ResolveProps<Selected> : {};\n\ntype ReferenceRenderProps<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Shared extends ComposableComponents,\n Ref extends RenderStateReference,\n> = RenderStateProps<Resources, Options, Shared & StateLocalComposables<ReferenceDefinition<Ref>>,\n StateIncludes<ReferenceDefinition<Ref>> extends infer Include extends IncludedProps<MergedLayoutInProps<Resources, Options, Shared & StateLocalComposables<ReferenceDefinition<Ref>>>> ? Include : {},\n StateCustomProps<ReferenceDefinition<Ref>>>;\n\ntype FromStateComposables<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Shared extends ComposableComponents,\n Ref extends RenderStateReference,\n Local extends ComposableComponents,\n Include,\n> = Local & {\n Ref: StateComposable<\n ReferenceRenderProps<Resources, Options, Shared, Ref>,\n Extract<keyof ReferenceCarriedProps<Resources, Options, Shared, Ref, Include>, keyof ReferenceRenderProps<Resources, Options, Shared, Ref>>\n > & { [composablePresetMetaKey]: ComposablePresetMeta<SelectedReferenceSchemas<Ref, Include>> };\n};\n\ntype FromStateDefinition<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Shared extends ComposableComponents,\n Ref extends RenderStateReference,\n State extends string,\n CustomProps extends InPropsObject,\n Local extends ComposableComponents,\n Include,\n> = {\n state: State;\n props?: { custom?: CustomProps; include?: ReferenceIncludes<Ref, CustomProps, Include> };\n composables: RenderStateComposablesDefinition<Resources,\n FromStateComposables<Resources, Options, Shared, Ref, Local, ReferenceIncludes<Ref, CustomProps, Include>>>;\n render: (\n props: ResolveProps<CustomProps> & ResolvedIncludedProps<FromStateInProps<Resources, Options, Shared, Ref, Local>,\n ReferenceIncludes<Ref, CustomProps, Include> extends infer Selected extends IncludedProps<FromStateInProps<Resources, Options, Shared, Ref, Local>> ? Selected : {}>,\n context: RenderStateContext<Shared & FromStateComposables<Resources, Options, Shared, Ref, Local, ReferenceIncludes<Ref, CustomProps, Include>>, Resources>,\n ) => JSX.Element;\n};\n\n/** Creates a state with inherited props and a composable reference to its source. */\nexport type CreateRenderStateFromState<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n Shared extends ComposableComponents,\n> = <\n const Ref extends RenderStateReference,\n const State extends RenderStateName = 'default',\n const CustomProps extends InPropsObject = {},\n const Local extends ComposableComponents = {},\n const Include extends IncludedProps<FromStateInProps<Resources, Options, Shared, Ref, Local>> | undefined = undefined,\n>(definition: {\n ref: Ref;\n /** Defer Ref rendering through React.lazy. Defaults to false. */\n lazy?: boolean;\n state?: State;\n props?: {\n custom?: CustomProps;\n include?: Include & Record<Exclude<keyof Include, keyof FromStateInProps<Resources, Options, Shared, Ref, Local>>, never>;\n };\n composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => Local & { Ref?: never };\n render: FromStateDefinition<Resources, Options, Shared, Ref, State, CustomProps, Local, Include>['render'];\n}) => BoundRenderStateFragment<Resources, Options, Shared,\n FromStateEntry<Ref, FromStateDefinition<Resources, Options, Shared, Ref, State, CustomProps, Local, Include>>>;\n\n/**\n * Creates independently typed render-state fragments.\n *\n * - Calling it directly creates an eager state.\n * - `.defer(...)` schedules an inline definition through `React.lazy`, but\n * does not create a separate JavaScript chunk.\n * - `.lazy(() => import(...))` imports a complete named state definition as a\n * separate chunk.\n * - `.fromState({ ref, ... })` inherits a state's props and exposes it as `Ref`.\n */\nexport interface CreateRenderState<\n Resources extends ReadonlyArray<ResourceDefinition> = ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources> = {},\n SharedComposables extends ComposableComponents = {},\n SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {},\n SharedCustom extends InPropsObject = {},\n> extends RenderStateOverloads<Resources, Options, SharedComposables, false, SharedInclude, SharedCustom> {\n fromState: CreateRenderStateFromState<Resources, Options, SharedComposables>;\n defer: RenderStateOverloads<Resources, Options, SharedComposables, true, SharedInclude, SharedCustom>;\n lazy<Module extends Record<string, unknown>>(\n load: () => Promise<Module>,\n ): LazyRenderState<DefinedRenderStateFromModule<Module>> & StateComposableHandle<\n RenderStateCallProps<Resources, Options, SharedComposables, DefinedRenderStateFromModule<Module>>\n >;\n}\n\nfunction normalizeDefinition(\n input: AnyRenderStateDefinition | RenderStateCallback,\n): AnyRenderStateDefinition {\n return typeof input === 'function'\n ? { render: input, state: 'default' }\n : input;\n}\n\nfunction toFragment<Definition extends AnyRenderStateDefinition>(\n definition: Definition,\n) {\n const fragment = {\n [definition.state ?? 'default']: definition,\n } as RenderStateFragment<Definition>;\n\n Object.defineProperty(fragment, definedRenderStateSymbol, {\n enumerable: false,\n value: definition,\n });\n\n return withStateComposable(fragment, { input: definition, name: definition.state ?? 'default' });\n}\n\n/** Inputs used internally to bind resource and option types to a state builder. */\nexport type CreateRenderStateBuilderArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {},\n SharedCustom extends InPropsObject = {},\n> = {\n props?: { include?: SharedInclude; custom?: SharedCustom };\n /** Shared composables whose components and preset props every state can use. */\n composables?: LayoutComposablesDefinition<Resources, SharedComposables>;\n /** Option props that individual states can expose through `props.include`. */\n options: Options;\n /** Resources used to constrain composable names and resource-specific props. */\n resources: Resources;\n};\n\n/** The state factory produced for a particular resource and option definition. */\nexport type CreateRenderStateBuilderResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {},\n SharedCustom extends InPropsObject = {},\n> = CreateRenderState<Resources, Options, SharedComposables, SharedInclude, SharedCustom>;\n\n/**\n * Creates a state factory whose `props.include` keys are constrained by the\n * supplied resources and options.\n */\nexport function createRenderStateBuilder<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n SharedComposables extends ComposableComponents = {},\n SharedInclude extends IncludedProps<MergedLayoutInProps<Resources, Options, SharedComposables>> = {},\n SharedCustom extends InPropsObject = {},\n>(\n _arguments: CreateRenderStateBuilderArguments<\n Resources,\n Options,\n SharedComposables,\n SharedInclude,\n SharedCustom\n >,\n): CreateRenderStateBuilderResult<Resources, Options, SharedComposables, SharedInclude, SharedCustom> {\n function createRenderState(\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) {\n return toFragment(normalizeDefinition(input));\n }\n\n createRenderState.fromState = (input: {\n ref: RenderStateReference;\n lazy?: boolean;\n state?: string;\n props?: AnyRenderStateDefinition['props'];\n composables?: AnyRenderStateDefinition['composables'];\n render: AnyRenderStateDefinition['render'];\n }): object => {\n const entry = isLazyRenderState(input.ref) ? input.ref : Object.values(input.ref)[0];\n if (isLazyRenderState(entry)) {\n const lazyState = {\n [lazyRenderStateSymbol]: async () => {\n const source = await findDefinedRenderState(await entry[lazyRenderStateSymbol]());\n return { Derived: createRenderState.fromState({ ...input, ref: toFragment(source) }) };\n },\n };\n const name = input.state ?? 'default';\n const fragment = { [name]: lazyState };\n Object.defineProperty(fragment, definedRenderStateSymbol, { value: lazyState });\n return withStateComposable(fragment, { input: lazyState, name });\n }\n const source = isDeferredRenderState(entry)\n ? entry[deferredRenderStateSymbol]\n : definedRenderStateSymbol in input.ref ? input.ref[definedRenderStateSymbol] : undefined;\n if (!source || typeof source.render !== 'function') {\n throw new LayoutConfigurationError('fromState requires a created render state');\n }\n const custom = input.props?.custom ?? {};\n const includes = input.props?.include ?? Object.fromEntries(\n Object.entries({\n ...source.props?.include,\n ...Object.fromEntries(Object.entries(source.props?.custom ?? {}).map(([key, prop]) => [\n key, { visibility: prop.visibility, passthrough: 'component' },\n ])),\n }).filter(([key]) => !(key in custom)),\n );\n return toFragment({\n state: input.state ?? 'default',\n props: { custom, include: includes },\n composables: (create, states) => {\n const inherited = source.composables?.(create, states) ?? {};\n const local = input.composables?.(create, states) ?? {};\n if (Object.prototype.hasOwnProperty.call(local, 'Ref')) {\n throw new LayoutConfigurationError('Composable name \"Ref\" is reserved by fromState');\n }\n const schemas = Object.assign({},\n ...collectComposablePresetEntries(inherited).map(({ props }) => props),\n source.props?.custom,\n ) as InPropsObject;\n const selected = Object.fromEntries(Object.entries(schemas).filter(([key]) => key in includes));\n const referenceSource = {\n ...source,\n props: {\n ...source.props,\n include: Object.fromEntries(Object.entries(source.props?.include ?? {}).map(([key, behavior]) => [\n key, {\n visibility: behavior === 'optional' || (typeof behavior === 'object' && behavior !== null && 'visibility' in behavior && behavior.visibility === 'optional')\n ? 'optional' : 'required',\n passthrough: 'component',\n },\n ])),\n },\n };\n const Ref = createStateComposable({\n input: input.lazy || isDeferredRenderState(entry) ? { [deferredRenderStateSymbol]: referenceSource } : referenceSource,\n name: source.state ?? 'default',\n fallbackStateName: input.state,\n }, {\n props: { include: Object.fromEntries(Object.keys(includes).map((key) => [key, true as const])) },\n normalizeIncludedKeys: true,\n });\n Object.defineProperty(Ref, composablePresetMetaKey, {\n value: { key: 'Ref', props: selected },\n });\n return { ...local, Ref };\n },\n render: input.render,\n });\n };\n\n createRenderState.defer = (\n input: AnyRenderStateDefinition | RenderStateCallback,\n ) => {\n const definition = normalizeDefinition(input);\n\n const deferred = { [deferredRenderStateSymbol]: definition };\n const fragment = { [definition.state ?? 'default']: deferred };\n Object.defineProperty(fragment, definedRenderStateSymbol, { value: definition });\n return withStateComposable(fragment, {\n input: deferred, name: definition.state ?? 'default',\n });\n };\n createRenderState.lazy = (\n load: () => Promise<Record<string, unknown>>,\n ) => {\n const lazyState = { [lazyRenderStateSymbol]: load };\n return withStateComposable(lazyState, { input: lazyState, name: 'lazy' });\n };\n\n return createRenderState as unknown as CreateRenderStateBuilderResult<\n Resources,\n Options,\n SharedComposables,\n SharedInclude,\n SharedCustom\n >;\n}\n\n/** Type guard for states created with `createRenderState.defer(...)`. */\nexport function isDeferredRenderState(\n value: unknown,\n): value is DeferredRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' &&\n value !== null &&\n deferredRenderStateSymbol in value\n );\n}\n\n/** Type guard for states created with `createRenderState.lazy(...)`. */\nexport function isLazyRenderState(\n value: unknown,\n): value is LazyRenderState<AnyRenderStateDefinition> {\n return (\n typeof value === 'object' && value !== null && lazyRenderStateSymbol in value\n );\n}\n\n/**\n * Resolves the single state exported by a lazy module, including derived lazy\n * states. Throws when a module exports none or more than one.\n */\nexport async function findDefinedRenderState(\n module: Record<string, unknown>,\n): Promise<AnyRenderStateDefinition> {\n const definitions = Object.values(module).filter(\n (value) =>\n typeof value === 'object' && value !== null && definedRenderStateSymbol in value,\n ) as Array<Record<typeof definedRenderStateSymbol, AnyRenderStateDefinition>>;\n\n if (definitions.length !== 1) {\n throw new Error(\n `A lazy render-state module must export exactly one defined render state; received ${definitions.length}.`,\n );\n }\n\n const definition = definitions[0][definedRenderStateSymbol];\n return isLazyRenderState(definition)\n ? findDefinedRenderState(await definition[lazyRenderStateSymbol]())\n : definition;\n}\n\n/** Identity helper that contextually types a reusable composables callback. */\nexport type DefineLayoutComposables<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = <const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n) => LayoutComposablesDefinition<Resources, Composables>;\n\n/** Public cross-file building blocks returned by a defined layout builder. */\nexport type CreateLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = {\n composables: DefineLayoutComposables<Resources>;\n createRenderState: CreateRenderState<Resources, Options>;\n};\n\n/** Resource and option bindings used to create layout building blocks. */\nexport type CreateLayoutBuildingBlocksArguments<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateRenderStateBuilderArguments<Resources, Options>;\n\n/** Layout helpers produced for the supplied resource and option bindings. */\nexport type CreateLayoutBuildingBlocksResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n> = CreateLayoutBuildingBlocks<Resources, Options>;\n\n/**\n * Creates the reusable `composables` and `createRenderState` helpers without\n * introducing an identity wrapper around the layout object itself.\n */\nexport function createLayoutBuildingBlocks<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Options extends InPropsDefinition<Resources>,\n>(\n arguments_: CreateLayoutBuildingBlocksArguments<Resources, Options>,\n): CreateLayoutBuildingBlocksResult<Resources, Options> {\n function composables<const Composables extends ComposableComponents>(\n definition: LayoutComposablesDefinition<Resources, Composables>,\n ): LayoutComposablesDefinition<Resources, Composables> {\n return definition;\n }\n\n return {\n composables,\n createRenderState: createRenderStateBuilder(arguments_),\n };\n}\n\n/** Preserves a bound resource tuple for consumers that need to re-export it. */\nexport type BoundResources<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = Resources;\n"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  const require_layout_configuration_error = require('../errors/layout-configuration-error.cjs');
2
+ const require_capitalize = require('../utils/capitalize.cjs');
2
3
  let react = require("react");
3
4
 
4
5
  //#region src/create-config/state-composable.ts
6
+ const stateReferenceSource = Symbol.for("@jfdevelops/react-layout/state-reference");
5
7
  /** @internal Each rendered state supplies its own resolved values for carry-over. */
6
8
  const StateComposableContext = (0, react.createContext)(void 0);
7
9
  /** @internal Defers state resolution until render, allowing forward references. */
@@ -9,12 +11,16 @@ function createStateComposable(source, options = {}) {
9
11
  function StateReference(callProps) {
10
12
  const context = (0, react.useContext)(StateComposableContext);
11
13
  if (!context) throw new require_layout_configuration_error.LayoutConfigurationError(`Render state "${source.name}" must be used inside a resource layout`);
12
- const inherited = Object.fromEntries(Object.keys(options.props?.include ?? {}).flatMap((key) => Object.prototype.hasOwnProperty.call(context.props, key) ? [[key, context.props[key]]] : []));
14
+ const inherited = Object.fromEntries(Object.keys(options.props?.include ?? {}).map((key) => {
15
+ const definition = context.definitions[key];
16
+ return options.normalizeIncludedKeys && typeof definition === "function" && "type" in definition && definition.type === "JSX.Element" ? require_capitalize.capitalize(key) : key;
17
+ }).flatMap((key) => Object.prototype.hasOwnProperty.call(context.props, key) && context.props[key] !== void 0 ? [[key, context.props[key]]] : []));
13
18
  return (0, react.createElement)(context.scope.resolve(source), {
14
19
  ...inherited,
15
20
  ...callProps
16
21
  });
17
22
  }
23
+ Object.defineProperty(StateReference, stateReferenceSource, { value: source });
18
24
  return withStateComposable(Object.assign(StateReference, {
19
25
  displayName: `State.${source.name}`,
20
26
  props: void 0
@@ -39,6 +45,8 @@ function createStateReferences(states) {
39
45
 
40
46
  //#endregion
41
47
  exports.StateComposableContext = StateComposableContext;
48
+ exports.createStateComposable = createStateComposable;
42
49
  exports.createStateReferences = createStateReferences;
50
+ exports.stateReferenceSource = stateReferenceSource;
43
51
  exports.withStateComposable = withStateComposable;
44
52
  //# sourceMappingURL=state-composable.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-composable.cjs","names":["LayoutConfigurationError"],"sources":["../../src/create-config/state-composable.ts"],"sourcesContent":["import {\n createContext,\n createElement,\n useContext,\n type ComponentType,\n type JSX,\n} from 'react';\nimport { LayoutConfigurationError } from '../errors';\nimport type { IncludedProps } from '../props';\n\n/** Props selected here are inherited from the containing state's render props. */\nexport type StateComposableOptions<\n Props extends object,\n Include extends IncludedProps<Props> = {},\n> = {\n props?: {\n include?: Include & { [Key in Exclude<keyof Include, keyof Props>]: never };\n };\n};\n\ntype StateComposableCallProps<Props extends object, Carried extends keyof Props> =\n Omit<Props, Carried> & Partial<Pick<Props, Carried>>;\n\n/** Non-enumerable state helpers; class methods stay out of object-spread types. */\nexport declare class StateComposableHandle<Props extends object> {\n asComposable<const Include extends IncludedProps<Props> = {}>(\n options?: StateComposableOptions<Props, Include>,\n ): StateComposable<Props, keyof Include & keyof Props>;\n}\n\n/** A state component usable in a composables map, optionally inheriting props. */\nexport type StateComposable<\n Props extends object,\n Carried extends keyof Props = never,\n> = {\n (props: StateComposableCallProps<Props, Carried>): JSX.Element;\n displayName: string;\n props: StateComposableCallProps<Props, Carried>;\n asComposable: AsStateComposable<Props>;\n};\n\n/** Converts a state into a composable; unselected required props remain required. */\nexport type AsStateComposable<Props extends object> = <\n const Include extends IncludedProps<Props> = {},\n>(\n options?: StateComposableOptions<Props, Include>,\n) => StateComposable<Props, keyof Include & keyof Props>;\n\n/** @internal The definition is kept by identity so builder references need no registration. */\nexport type StateComposableSource = {\n input: unknown;\n name: string;\n};\n\n/** @internal Shared by all states in one created resource layout. */\nexport type RenderStateScope = {\n states: Record<string, StateComposable<Record<string, unknown>>>;\n resolve: (source: StateComposableSource) => ComponentType<Record<string, unknown>>;\n};\n\n/** @internal Each rendered state supplies its own resolved values for carry-over. */\nexport const StateComposableContext = createContext<{\n scope: RenderStateScope;\n props: Record<string, unknown>;\n} | undefined>(undefined);\n\n/** @internal Defers state resolution until render, allowing forward references. */\nexport function createStateComposable(\n source: StateComposableSource,\n options: StateComposableOptions<Record<string, unknown>, IncludedProps<Record<string, unknown>>> = {},\n): StateComposable<Record<string, unknown>> {\n function StateReference(callProps: Record<string, unknown>) {\n const context = useContext(StateComposableContext);\n if (!context) {\n throw new LayoutConfigurationError(\n `Render state \"${source.name}\" must be used inside a resource layout`,\n );\n }\n const inherited = Object.fromEntries(\n Object.keys(options.props?.include ?? {}).flatMap((key) =>\n Object.prototype.hasOwnProperty.call(context.props, key)\n ? [[key, context.props[key]]]\n : [],\n ),\n );\n return createElement(context.scope.resolve(source), {\n ...inherited,\n ...callProps,\n });\n }\n return withStateComposable(Object.assign(StateReference, {\n displayName: `State.${source.name}`,\n props: undefined as unknown as Record<string, unknown>,\n }), source) as StateComposable<Record<string, unknown>>;\n}\n\n/** @internal Keeps helper methods out of spreadable state maps. */\nexport function withStateComposable<Value extends object>(\n value: Value,\n source: StateComposableSource,\n): Value & { asComposable: AsStateComposable<Record<string, unknown>> } {\n if (Object.prototype.hasOwnProperty.call(value, 'asComposable')) {\n throw new LayoutConfigurationError(\n 'Render state name \"asComposable\" is reserved',\n );\n }\n Object.defineProperty(value, 'asComposable', {\n enumerable: false,\n value: (options?: StateComposableOptions<Record<string, unknown>, IncludedProps<Record<string, unknown>>>) =>\n createStateComposable(source, options),\n });\n return value as Value & { asComposable: AsStateComposable<Record<string, unknown>> };\n}\n\n/** @internal References are descriptors, so reading them never constructs a layout. */\nexport function createStateReferences(states: Record<string, unknown>) {\n return Object.fromEntries(Object.entries(states).map(([name, input]) => [\n name, createStateComposable({ input, name }),\n ]));\n}\n"],"mappings":";;;;;AA6DA,MAAa,kDAGE,MAAS;;AAGxB,SAAgB,sBACd,QACA,UAAmG,CAAC,GAC1D;CAC1C,SAAS,eAAe,WAAoC;EAC1D,MAAM,gCAAqB,sBAAsB;EACjD,IAAI,CAAC,SACH,MAAM,IAAIA,4DACR,iBAAiB,OAAO,KAAK,wCAC/B;EAEF,MAAM,YAAY,OAAO,YACvB,OAAO,KAAK,QAAQ,OAAO,WAAW,CAAC,CAAC,EAAE,SAAS,QACjD,OAAO,UAAU,eAAe,KAAK,QAAQ,OAAO,GAAG,IACnD,CAAC,CAAC,KAAK,QAAQ,MAAM,IAAI,CAAC,IAC1B,CAAC,CACP,CACF;EACA,gCAAqB,QAAQ,MAAM,QAAQ,MAAM,GAAG;GAClD,GAAG;GACH,GAAG;EACL,CAAC;CACH;CACA,OAAO,oBAAoB,OAAO,OAAO,gBAAgB;EACvD,aAAa,SAAS,OAAO;EAC7B,OAAO;CACT,CAAC,GAAG,MAAM;AACZ;;AAGA,SAAgB,oBACd,OACA,QACsE;CACtE,IAAI,OAAO,UAAU,eAAe,KAAK,OAAO,cAAc,GAC5D,MAAM,IAAIA,4DACR,gDACF;CAEF,OAAO,eAAe,OAAO,gBAAgB;EAC3C,YAAY;EACZ,QAAQ,YACN,sBAAsB,QAAQ,OAAO;CACzC,CAAC;CACD,OAAO;AACT;;AAGA,SAAgB,sBAAsB,QAAiC;CACrE,OAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC,MAAM,WAAW,CACtE,MAAM,sBAAsB;EAAE;EAAO;CAAK,CAAC,CAC7C,CAAC,CAAC;AACJ"}
1
+ {"version":3,"file":"state-composable.cjs","names":["LayoutConfigurationError","capitalize"],"sources":["../../src/create-config/state-composable.ts"],"sourcesContent":["import {\n createContext,\n createElement,\n useContext,\n type ComponentType,\n type JSX,\n} from 'react';\nimport { LayoutConfigurationError } from '../errors';\nimport type { IncludedProps } from '../props';\nimport { capitalize } from '../utils/capitalize';\n\n/** Props selected here are inherited from the containing state's render props. */\nexport type StateComposableOptions<\n Props extends object,\n Include extends IncludedProps<Props> = {},\n> = {\n props?: {\n include?: Include & { [Key in Exclude<keyof Include, keyof Props>]: never };\n };\n};\n\ntype StateComposableCallProps<Props extends object, Carried extends keyof Props> =\n Omit<Props, Carried> & Partial<Pick<Props, Carried>>;\n\n/** Non-enumerable state helpers; class methods stay out of object-spread types. */\nexport declare class StateComposableHandle<Props extends object> {\n asComposable<const Include extends IncludedProps<Props> = {}>(\n options?: StateComposableOptions<Props, Include>,\n ): StateComposable<Props, keyof Include & keyof Props>;\n}\n\n/** A state component usable in a composables map, optionally inheriting props. */\nexport type StateComposable<\n Props extends object,\n Carried extends keyof Props = never,\n> = {\n (props: StateComposableCallProps<Props, Carried>): JSX.Element;\n displayName: string;\n props: StateComposableCallProps<Props, Carried>;\n asComposable: AsStateComposable<Props>;\n};\n\n/** Converts a state into a composable; unselected required props remain required. */\nexport type AsStateComposable<Props extends object> = <\n const Include extends IncludedProps<Props> = {},\n>(\n options?: StateComposableOptions<Props, Include>,\n) => StateComposable<Props, keyof Include & keyof Props>;\n\n/** @internal The definition is kept by identity so builder references need no registration. */\nexport type StateComposableSource = {\n input: unknown;\n name: string;\n /** Fallback state that must not recursively render this reference. */\n fallbackStateName?: string;\n};\n\nexport const stateReferenceSource = Symbol.for('@jfdevelops/react-layout/state-reference');\n\n/** @internal Shared by all states in one created resource layout. */\nexport type RenderStateScope = {\n states: Record<string, StateComposable<Record<string, unknown>>>;\n resolve: (source: StateComposableSource) => ComponentType<Record<string, unknown>>;\n};\n\n/** @internal Each rendered state supplies its own resolved values for carry-over. */\nexport const StateComposableContext = createContext<{\n scope: RenderStateScope;\n props: Record<string, unknown>;\n definitions: Record<string, unknown>;\n} | undefined>(undefined);\n\n/** @internal Defers state resolution until render, allowing forward references. */\nexport function createStateComposable(\n source: StateComposableSource,\n options: StateComposableOptions<Record<string, unknown>, IncludedProps<Record<string, unknown>>> & {\n normalizeIncludedKeys?: boolean;\n } = {},\n): StateComposable<Record<string, unknown>> {\n function StateReference(callProps: Record<string, unknown>) {\n const context = useContext(StateComposableContext);\n if (!context) {\n throw new LayoutConfigurationError(\n `Render state \"${source.name}\" must be used inside a resource layout`,\n );\n }\n const inherited = Object.fromEntries(\n Object.keys(options.props?.include ?? {}).map((key) => {\n const definition = context.definitions[key];\n return options.normalizeIncludedKeys && typeof definition === 'function' &&\n 'type' in definition && definition.type === 'JSX.Element' ? capitalize(key) : key;\n }).flatMap((key) =>\n Object.prototype.hasOwnProperty.call(context.props, key) && context.props[key] !== undefined\n ? [[key, context.props[key]]]\n : [],\n ),\n );\n return createElement(context.scope.resolve(source), {\n ...inherited,\n ...callProps,\n });\n }\n Object.defineProperty(StateReference, stateReferenceSource, { value: source });\n return withStateComposable(Object.assign(StateReference, {\n displayName: `State.${source.name}`,\n props: undefined as unknown as Record<string, unknown>,\n }), source) as StateComposable<Record<string, unknown>>;\n}\n\n/** @internal Keeps helper methods out of spreadable state maps. */\nexport function withStateComposable<Value extends object>(\n value: Value,\n source: StateComposableSource,\n): Value & { asComposable: AsStateComposable<Record<string, unknown>> } {\n if (Object.prototype.hasOwnProperty.call(value, 'asComposable')) {\n throw new LayoutConfigurationError(\n 'Render state name \"asComposable\" is reserved',\n );\n }\n Object.defineProperty(value, 'asComposable', {\n enumerable: false,\n value: (options?: StateComposableOptions<Record<string, unknown>, IncludedProps<Record<string, unknown>>>) =>\n createStateComposable(source, options),\n });\n return value as Value & { asComposable: AsStateComposable<Record<string, unknown>> };\n}\n\n/** @internal References are descriptors, so reading them never constructs a layout. */\nexport function createStateReferences(states: Record<string, unknown>) {\n return Object.fromEntries(Object.entries(states).map(([name, input]) => [\n name, createStateComposable({ input, name }),\n ]));\n}\n"],"mappings":";;;;;AAyDA,MAAa,uBAAuB,OAAO,IAAI,0CAA0C;;AASzF,MAAa,kDAIE,MAAS;;AAGxB,SAAgB,sBACd,QACA,UAEI,CAAC,GACqC;CAC1C,SAAS,eAAe,WAAoC;EAC1D,MAAM,gCAAqB,sBAAsB;EACjD,IAAI,CAAC,SACH,MAAM,IAAIA,4DACR,iBAAiB,OAAO,KAAK,wCAC/B;EAEF,MAAM,YAAY,OAAO,YACvB,OAAO,KAAK,QAAQ,OAAO,WAAW,CAAC,CAAC,EAAE,KAAK,QAAQ;GACrD,MAAM,aAAa,QAAQ,YAAY;GACvC,OAAO,QAAQ,yBAAyB,OAAO,eAAe,cAC5D,UAAU,cAAc,WAAW,SAAS,gBAAgBC,8BAAW,GAAG,IAAI;EAClF,CAAC,EAAE,SAAS,QACV,OAAO,UAAU,eAAe,KAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,MAAM,SAAS,SAC/E,CAAC,CAAC,KAAK,QAAQ,MAAM,IAAI,CAAC,IAC1B,CAAC,CACP,CACF;EACA,gCAAqB,QAAQ,MAAM,QAAQ,MAAM,GAAG;GAClD,GAAG;GACH,GAAG;EACL,CAAC;CACH;CACA,OAAO,eAAe,gBAAgB,sBAAsB,EAAE,OAAO,OAAO,CAAC;CAC7E,OAAO,oBAAoB,OAAO,OAAO,gBAAgB;EACvD,aAAa,SAAS,OAAO;EAC7B,OAAO;CACT,CAAC,GAAG,MAAM;AACZ;;AAGA,SAAgB,oBACd,OACA,QACsE;CACtE,IAAI,OAAO,UAAU,eAAe,KAAK,OAAO,cAAc,GAC5D,MAAM,IAAID,4DACR,gDACF;CAEF,OAAO,eAAe,OAAO,gBAAgB;EAC3C,YAAY;EACZ,QAAQ,YACN,sBAAsB,QAAQ,OAAO;CACzC,CAAC;CACD,OAAO;AACT;;AAGA,SAAgB,sBAAsB,QAAiC;CACrE,OAAO,OAAO,YAAY,OAAO,QAAQ,MAAM,EAAE,KAAK,CAAC,MAAM,WAAW,CACtE,MAAM,sBAAsB;EAAE;EAAO;CAAK,CAAC,CAC7C,CAAC,CAAC;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-composable.d.cts","names":[],"sources":["../../src/create-config/state-composable.ts"],"mappings":";;;;;KAWY,sBAAA,uCAEM,aAAA,CAAc,KAAA;EAE9B,KAAA;IACE,OAAA,GAAU,OAAA,aAAoB,OAAA,OAAc,OAAA,QAAe,KAAA;EAAA;AAAA;AAAA,KAI1D,wBAAA,6CAAqE,KAAA,IACxE,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,OAAA;;cAGxB,qBAAA;EACnB,YAAA,uBAAmC,aAAA,CAAc,KAAA,QAC/C,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,IACvC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA;AAAA;;KAItC,eAAA,6CAEY,KAAA;EAAA,CAErB,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA,IAAW,GAAA,CAAI,OAAA;EACvD,WAAA;EACA,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA;EACvC,YAAA,EAAc,iBAAA,CAAkB,KAAA;AAAA;;KAItB,iBAAA,gDACY,aAAA,CAAc,KAAA,QAEpC,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,MACrC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA"}
1
+ {"version":3,"file":"state-composable.d.cts","names":[],"sources":["../../src/create-config/state-composable.ts"],"mappings":";;;;;KAYY,sBAAA,uCAEM,aAAA,CAAc,KAAA;EAE9B,KAAA;IACE,OAAA,GAAU,OAAA,aAAoB,OAAA,OAAc,OAAA,QAAe,KAAA;EAAA;AAAA;AAAA,KAI1D,wBAAA,6CAAqE,KAAA,IACxE,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,OAAA;;cAGxB,qBAAA;EACnB,YAAA,uBAAmC,aAAA,CAAc,KAAA,QAC/C,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,IACvC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA;AAAA;;KAItC,eAAA,6CAEY,KAAA;EAAA,CAErB,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA,IAAW,GAAA,CAAI,OAAA;EACvD,WAAA;EACA,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA;EACvC,YAAA,EAAc,iBAAA,CAAkB,KAAA;AAAA;;KAItB,iBAAA,gDACY,aAAA,CAAc,KAAA,QAEpC,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,MACrC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"state-composable.d.mts","names":[],"sources":["../../src/create-config/state-composable.ts"],"mappings":";;;;;KAWY,sBAAA,uCAEM,aAAA,CAAc,KAAA;EAE9B,KAAA;IACE,OAAA,GAAU,OAAA,aAAoB,OAAA,OAAc,OAAA,QAAe,KAAA;EAAA;AAAA;AAAA,KAI1D,wBAAA,6CAAqE,KAAA,IACxE,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,OAAA;;cAGxB,qBAAA;EACnB,YAAA,uBAAmC,aAAA,CAAc,KAAA,QAC/C,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,IACvC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA;AAAA;;KAItC,eAAA,6CAEY,KAAA;EAAA,CAErB,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA,IAAW,GAAA,CAAI,OAAA;EACvD,WAAA;EACA,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA;EACvC,YAAA,EAAc,iBAAA,CAAkB,KAAA;AAAA;;KAItB,iBAAA,gDACY,aAAA,CAAc,KAAA,QAEpC,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,MACrC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA"}
1
+ {"version":3,"file":"state-composable.d.mts","names":[],"sources":["../../src/create-config/state-composable.ts"],"mappings":";;;;;KAYY,sBAAA,uCAEM,aAAA,CAAc,KAAA;EAE9B,KAAA;IACE,OAAA,GAAU,OAAA,aAAoB,OAAA,OAAc,OAAA,QAAe,KAAA;EAAA;AAAA;AAAA,KAI1D,wBAAA,6CAAqE,KAAA,IACxE,IAAA,CAAK,KAAA,EAAO,OAAA,IAAW,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,OAAA;;cAGxB,qBAAA;EACnB,YAAA,uBAAmC,aAAA,CAAc,KAAA,QAC/C,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,IACvC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA;AAAA;;KAItC,eAAA,6CAEY,KAAA;EAAA,CAErB,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA,IAAW,GAAA,CAAI,OAAA;EACvD,WAAA;EACA,KAAA,EAAO,wBAAA,CAAyB,KAAA,EAAO,OAAA;EACvC,YAAA,EAAc,iBAAA,CAAkB,KAAA;AAAA;;KAItB,iBAAA,gDACY,aAAA,CAAc,KAAA,QAEpC,OAAA,GAAU,sBAAA,CAAuB,KAAA,EAAO,OAAA,MACrC,eAAA,CAAgB,KAAA,QAAa,OAAA,SAAgB,KAAA"}
@@ -1,7 +1,9 @@
1
1
  import { LayoutConfigurationError } from "../errors/layout-configuration-error.mjs";
2
+ import { capitalize } from "../utils/capitalize.mjs";
2
3
  import { createContext, createElement, useContext } from "react";
3
4
 
4
5
  //#region src/create-config/state-composable.ts
6
+ const stateReferenceSource = Symbol.for("@jfdevelops/react-layout/state-reference");
5
7
  /** @internal Each rendered state supplies its own resolved values for carry-over. */
6
8
  const StateComposableContext = createContext(void 0);
7
9
  /** @internal Defers state resolution until render, allowing forward references. */
@@ -9,12 +11,16 @@ function createStateComposable(source, options = {}) {
9
11
  function StateReference(callProps) {
10
12
  const context = useContext(StateComposableContext);
11
13
  if (!context) throw new LayoutConfigurationError(`Render state "${source.name}" must be used inside a resource layout`);
12
- const inherited = Object.fromEntries(Object.keys(options.props?.include ?? {}).flatMap((key) => Object.prototype.hasOwnProperty.call(context.props, key) ? [[key, context.props[key]]] : []));
14
+ const inherited = Object.fromEntries(Object.keys(options.props?.include ?? {}).map((key) => {
15
+ const definition = context.definitions[key];
16
+ return options.normalizeIncludedKeys && typeof definition === "function" && "type" in definition && definition.type === "JSX.Element" ? capitalize(key) : key;
17
+ }).flatMap((key) => Object.prototype.hasOwnProperty.call(context.props, key) && context.props[key] !== void 0 ? [[key, context.props[key]]] : []));
13
18
  return createElement(context.scope.resolve(source), {
14
19
  ...inherited,
15
20
  ...callProps
16
21
  });
17
22
  }
23
+ Object.defineProperty(StateReference, stateReferenceSource, { value: source });
18
24
  return withStateComposable(Object.assign(StateReference, {
19
25
  displayName: `State.${source.name}`,
20
26
  props: void 0
@@ -38,5 +44,5 @@ function createStateReferences(states) {
38
44
  }
39
45
 
40
46
  //#endregion
41
- export { StateComposableContext, createStateReferences, withStateComposable };
47
+ export { StateComposableContext, createStateComposable, createStateReferences, stateReferenceSource, withStateComposable };
42
48
  //# sourceMappingURL=state-composable.mjs.map