@jfdevelops/react-layout 1.2.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 (57) 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 +140 -22
  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 +140 -22
  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/inspection.cjs +65 -0
  24. package/dist/create-config/inspection.cjs.map +1 -0
  25. package/dist/create-config/inspection.mjs +64 -0
  26. package/dist/create-config/inspection.mjs.map +1 -0
  27. package/dist/create-config/layout-name.cjs +21 -0
  28. package/dist/create-config/layout-name.cjs.map +1 -0
  29. package/dist/create-config/layout-name.d.cts +49 -0
  30. package/dist/create-config/layout-name.d.cts.map +1 -0
  31. package/dist/create-config/layout-name.d.mts +49 -0
  32. package/dist/create-config/layout-name.d.mts.map +1 -0
  33. package/dist/create-config/layout-name.mjs +20 -0
  34. package/dist/create-config/layout-name.mjs.map +1 -0
  35. package/dist/create-config/merge-layout-props.cjs +20 -0
  36. package/dist/create-config/merge-layout-props.cjs.map +1 -0
  37. package/dist/create-config/merge-layout-props.mjs +19 -0
  38. package/dist/create-config/merge-layout-props.mjs.map +1 -0
  39. package/dist/create-config/render-state.cjs.map +1 -1
  40. package/dist/create-config/render-state.d.cts +17 -13
  41. package/dist/create-config/render-state.d.cts.map +1 -1
  42. package/dist/create-config/render-state.d.mts +17 -13
  43. package/dist/create-config/render-state.d.mts.map +1 -1
  44. package/dist/create-config/render-state.mjs.map +1 -1
  45. package/dist/create-config/state-composable.cjs +3 -0
  46. package/dist/create-config/state-composable.cjs.map +1 -1
  47. package/dist/create-config/state-composable.mjs +3 -1
  48. package/dist/create-config/state-composable.mjs.map +1 -1
  49. package/dist/index.cjs +2 -0
  50. package/dist/index.d.cts +2 -1
  51. package/dist/index.d.mts +2 -1
  52. package/dist/index.mjs +2 -1
  53. package/dist/utils/capitalize.d.cts +6 -0
  54. package/dist/utils/capitalize.d.cts.map +1 -0
  55. package/dist/utils/capitalize.d.mts +6 -0
  56. package/dist/utils/capitalize.d.mts.map +1 -0
  57. package/package.json +5 -4
@@ -1,7 +1,9 @@
1
1
  const require_layout_configuration_error = require('../errors/layout-configuration-error.cjs');
2
+ const require_merge_layout_props = require('./merge-layout-props.cjs');
2
3
  const require_render_state = require('./render-state.cjs');
3
4
  const require_define_layout = require('./define-layout.cjs');
4
5
  const require_lazy_resource_layout = require('./lazy-resource-layout.cjs');
6
+ let _jfdevelops_react_layout_devtools_core = require("@jfdevelops/react-layout-devtools-core");
5
7
 
6
8
  //#region src/create-config/create-defined-resource-layout.ts
7
9
  /**
@@ -35,6 +37,7 @@ const require_lazy_resource_layout = require('./lazy-resource-layout.cjs');
35
37
  function createDefinedResourceLayout(configuration) {
36
38
  const { resources, options = {}, composables } = configuration;
37
39
  const defineBoundLayout = require_define_layout.defineResourceLayout.forResources(...resources);
40
+ const inspection = (0, _jfdevelops_react_layout_devtools_core.createInspectionStore)();
38
41
  let lazyDefaults = {};
39
42
  let lazyDefaultsDefined = false;
40
43
  let lazyLayoutCreated = false;
@@ -46,24 +49,57 @@ function createDefinedResourceLayout(configuration) {
46
49
  }
47
50
  const boundDefineResourceLayout = ((layout) => {
48
51
  const localComposables = layout.composables;
49
- return defineBoundLayout({
52
+ const definition = defineBoundLayout({
50
53
  options,
54
+ name: layout.name ?? configuration.name,
51
55
  namespace: layout.namespace ?? configuration.namespace,
52
56
  layout: {
53
57
  ...layout,
58
+ props: require_merge_layout_props.mergeLayoutProps(configuration.props, layout.props),
54
59
  composables: composables || localComposables ? (create, states) => ({
55
60
  ...composables?.(create, states),
56
61
  ...localComposables?.(create, states)
57
62
  }) : void 0
58
63
  }
59
64
  });
65
+ inspection.connect(definition);
66
+ return definition;
60
67
  });
61
68
  boundDefineResourceLayout.lazy = (lazyOptions) => {
62
69
  lazyLayoutCreated = true;
63
- return require_lazy_resource_layout.createLazyResourceLayout(lazyOptions, lazyDefaults);
70
+ const id = (0, _jfdevelops_react_layout_devtools_core.inspectionId)("lazy");
71
+ const label = lazyOptions.resource;
72
+ inspection.node({
73
+ id,
74
+ kind: "lazy",
75
+ label,
76
+ unresolved: true
77
+ });
78
+ return require_lazy_resource_layout.createLazyResourceLayout({
79
+ ...lazyOptions,
80
+ load: async () => {
81
+ const module = await lazyOptions.load();
82
+ for (const entry of Object.values(module)) {
83
+ const component = entry && typeof entry === "object" && "Root" in entry ? entry.Root : entry;
84
+ if ((typeof component === "object" && component !== null || typeof component === "function") && _jfdevelops_react_layout_devtools_core.layoutInspection in component) {
85
+ inspection.connect(component);
86
+ const target = (0, _jfdevelops_react_layout_devtools_core.getInspectionSource)(component).getSnapshot().nodes.find((n) => n.kind === "layout" && n.label === component.displayName);
87
+ if (target) inspection.edge(id, target.id, "references");
88
+ }
89
+ }
90
+ inspection.node({
91
+ id,
92
+ kind: "lazy",
93
+ label,
94
+ unresolved: false
95
+ });
96
+ return module;
97
+ }
98
+ }, lazyDefaults);
64
99
  };
65
- return {
100
+ return inspection.attach({
66
101
  createRenderState: require_render_state.createRenderStateBuilder({
102
+ props: configuration.props,
67
103
  composables,
68
104
  options,
69
105
  resources
@@ -71,7 +107,7 @@ function createDefinedResourceLayout(configuration) {
71
107
  defineLazyDefaults,
72
108
  defineResourceLayout: boundDefineResourceLayout,
73
109
  resources: require_define_layout.createLayoutResourcesAccessor(resources)
74
- };
110
+ });
75
111
  }
76
112
 
77
113
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","createLazyResourceLayout","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import type { ComposableComponents, CreateLayoutComposable } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[],\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n> = {\n namespace?: DefaultNamespace;\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false,\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents,\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<Definition extends { layout: unknown; namespace?: boolean }> =\n Definition['layout'] & Pick<Definition, 'namespace'>;\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>,\n 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>,\n ) => LocalComposables;\n },\n ): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace>;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n Namespace\n >>,\n 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n {},\n Namespace\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables>;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.',\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.',\n );\n }\n\n lazyDefaults = defaults;\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as LayoutComposablesDefinition<Resources, ComposableComponents> | undefined;\n return defineBoundLayout({\n options,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n composables: composables || localComposables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n return createLazyResourceLayout(lazyOptions, lazyDefaults);\n };\n\n return {\n createRenderState: createRenderStateBuilder({\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqNA,SAAgB,4BAMd,eAMsF;CACtF,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAIC,4DACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAIA,4DACR,gFACF;EAGF,eAAe;EACf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAChC,OAAO,kBAAkB;GACvB;GACA,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;CACZ;CAOA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,OAAOC,sDAAyB,aAAa,YAAY;CAC3D;CAEA,OAAO;EACL,mBAAmBC,8CAAyB;GAC1C;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD;AACF"}
1
+ {"version":3,"file":"create-defined-resource-layout.cjs","names":["defineResourceLayout","LayoutConfigurationError","mergeLayoutProps","createLazyResourceLayout","layoutInspection","createRenderStateBuilder","createLayoutResourcesAccessor"],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { createInspectionStore, inspectionId, layoutInspection, getInspectionSource } from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type { ComposableComponents, CreateLayoutComposable } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[],\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: { include?: SharedInclude; custom?: SharedCustom };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false,\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents,\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<Definition extends { layout: unknown; namespace?: boolean }> =\n Definition['layout'] & Pick<Definition, 'namespace'> & (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>,\n ) => LocalComposables;\n },\n ): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Naming>;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.',\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.',\n );\n }\n\n lazyDefaults = defaults;\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as LayoutComposablesDefinition<Resources, ComposableComponents> | undefined;\n const definition = defineBoundLayout({\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(configuration.props, layout.props as { include?: object; custom?: object }),\n composables: composables || localComposables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n inspection.connect(definition);\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n const id = inspectionId('lazy');\n const label = (lazyOptions as unknown as { resource: string }).resource;\n inspection.node({ id, kind: 'lazy', label, unresolved: true });\n return createLazyResourceLayout({ ...lazyOptions, load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n for (const entry of Object.values(module)) {\n const component = entry && typeof entry === 'object' && 'Root' in entry ? entry.Root : entry;\n if ((typeof component === 'object' && component !== null || typeof component === 'function') && layoutInspection in component) {\n inspection.connect(component);\n const target = getInspectionSource(component).getSnapshot().nodes.find(n => n.kind === 'layout' && n.label === (component as { displayName?: string }).displayName);\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n inspection.node({ id, kind: 'lazy', label, unresolved: false });\n return module as Module;\n } }, lazyDefaults);\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder({\n props: configuration.props,\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkPA,SAAgB,4BASd,eASkI;CAClI,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoBA,2CAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,+EAAmC;CACzC,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAIC,4DACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAIA,4DACR,gFACF;EAGF,eAAe;EACf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAChC,MAAM,aAAa,kBAAkB;GACnC;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAOC,4CAAiB,cAAc,OAAO,OAAO,KAA8C;IAClG,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;EACV,WAAW,QAAQ,UAAU;EAC7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,MAAM,8DAAkB,MAAM;EAC9B,MAAM,QAAS,YAAgD;EAC/D,WAAW,KAAK;GAAE;GAAI,MAAM;GAAQ;GAAO,YAAY;EAAK,CAAC;EAC7D,OAAOC,sDAAyB;GAAE,GAAG;GAAa,MAAM,YAAY;IAClE,MAAM,SAAkC,MAAM,YAAY,KAAK;IAC/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YAAY,SAAS,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,OAAO;KACvF,KAAK,OAAO,cAAc,YAAY,cAAc,QAAQ,OAAO,cAAc,eAAeC,2DAAoB,WAAW;MAC7H,WAAW,QAAQ,SAAS;MAC5B,MAAM,yEAA6B,SAAS,EAAE,YAAY,EAAE,MAAM,MAAK,MAAK,EAAE,SAAS,YAAY,EAAE,UAAW,UAAuC,WAAW;MAClK,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IACA,WAAW,KAAK;KAAE;KAAI,MAAM;KAAQ;KAAO,YAAY;IAAM,CAAC;IAC9D,OAAO;GACT;EAAE,GAAG,YAAY;CACnB;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmBC,8CAAyB;GAC1C,OAAO,cAAc;GACrB;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAWC,oDAA8B,SAAS;CACpD,CAAC;AACH"}
@@ -1,7 +1,8 @@
1
1
  import { LayoutResourceKey, ResourceDefinition } from "../resource.cjs";
2
2
  import { InPropsDefinition, InPropsObject } from "../props.cjs";
3
3
  import { CreateRenderState, LayoutComposablesDefinition, RenderStateReferences } from "./render-state.cjs";
4
- import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor } from "./define-layout.cjs";
4
+ import { LayoutNameInput } from "./layout-name.cjs";
5
+ import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor, MergeContract } from "./define-layout.cjs";
5
6
  import { LazyResourceLayoutOptions, LazyResourceStates, createLazyResourceLayout } from "./lazy-resource-layout.cjs";
6
7
  import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
7
8
 
@@ -9,8 +10,13 @@ import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-
9
10
  /** A resource tuple with at least one entry, preserving literal and nested paths. */
10
11
  type NonEmptyResources = readonly [ResourceDefinition, ...ResourceDefinition[]];
11
12
  /** Configuration shared by every layout created from one defined-layout factory. */
12
- type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
13
- namespace?: DefaultNamespace; /** Resources supported by every layout created from this factory. */
13
+ type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
14
+ namespace?: DefaultNamespace; /** Default naming convention; explicit definition and component names override it. */
15
+ name?: DefaultNaming; /** Shared prop contracts, merged by key with layout and state contracts. */
16
+ props?: {
17
+ include?: SharedInclude;
18
+ custom?: SharedCustom;
19
+ }; /** Resources supported by every layout created from this factory. */
14
20
  resources: Resources; /** Props that render states can opt into through `props.include`. */
15
21
  options?: Options; /** Layout-wide composables available to every render state. */
16
22
  composables?: LayoutComposablesDefinition<Resources, Composables>;
@@ -25,9 +31,13 @@ type BoundLayoutComposables<Shared extends ComposableComponents, Local extends C
25
31
  type BoundLayoutInput<Definition extends {
26
32
  layout: unknown;
27
33
  namespace?: boolean;
28
- }> = Definition['layout'] & Pick<Definition, 'namespace'>;
34
+ }> = Definition['layout'] & Pick<Definition, 'namespace'> & (Definition extends {
35
+ name?: infer Name;
36
+ } ? {
37
+ name?: Name;
38
+ } : {});
29
39
  /** A `defineResourceLayout` function with its shared configuration pre-bound. */
30
- type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
40
+ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
31
41
  /**
32
42
  * Defines a layout whose `render` map contains the required `default` state
33
43
  * and any built-in or custom compound component states.
@@ -37,12 +47,22 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
37
47
  */
38
48
  <const Render extends {
39
49
  default: unknown;
40
- } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>, 'composables'> & {
50
+ } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>, 'composables' | 'name' | 'props'> & {
51
+ name?: Naming;
52
+ props?: {
53
+ include?: IncludeProps;
54
+ custom?: CustomProps;
55
+ };
41
56
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: RenderStateReferences<Resources, Options, Composables, Render>) => LocalComposables;
42
- }): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace>; /** Defines a layout whose `render` value is a single default-state callback. */
43
- <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, Namespace>>, 'composables'> & {
57
+ }): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Naming>; /** Defines a layout whose `render` value is a single default-state callback. */
58
+ <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Namespace>>, 'composables' | 'name' | 'props'> & {
59
+ name?: Naming;
60
+ props?: {
61
+ include?: IncludeProps;
62
+ custom?: CustomProps;
63
+ };
44
64
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => LocalComposables;
45
- }): DefinedResourceLayout<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, {}, Namespace>;
65
+ }): DefinedResourceLayout<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, {}, Namespace, Naming>;
46
66
  /**
47
67
  * Creates a lazy proxy for the single library-defined component exported by
48
68
  * a resource module.
@@ -61,10 +81,10 @@ type DefineLazyDefaults = {
61
81
  (defaults: LazyResourceStates): void;
62
82
  };
63
83
  /** Reusable helpers produced by {@link createDefinedResourceLayout}. */
64
- type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
65
- /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables>; /** Sets the shared loading and module-error UI used by lazy layouts. */
84
+ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
85
+ /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>; /** Sets the shared loading and module-error UI used by lazy layouts. */
66
86
  defineLazyDefaults: DefineLazyDefaults; /** Defines a layout using the resources, options, and composables already bound. */
67
- defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace>; /** Reads, selects, or validates the resources bound to this factory. */
87
+ defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>; /** Reads, selects, or validates the resources bound to this factory. */
68
88
  resources: LayoutResourcesAccessor<Resources>;
69
89
  };
70
90
  /**
@@ -95,7 +115,7 @@ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Opti
95
115
  * });
96
116
  * ```
97
117
  */
98
- declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}, DefaultNamespace extends boolean = false>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables, DefaultNamespace>): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace>;
118
+ declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}, DefaultNamespace extends boolean = false, const SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, const SharedCustom extends InPropsObject = {}, const DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>;
99
119
  //#endregion
100
120
  export { BoundDefineResourceLayout, CreateDefinedResourceLayoutOptions, CreateDefinedResourceLayoutResult, DefineLazyDefaults, DefinedResourceLayoutInput, NonEmptyResources, createDefinedResourceLayout };
101
121
  //# sourceMappingURL=create-defined-resource-layout.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.d.cts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":";;;;;;;;;KA2BY,iBAAA,aACV,kBAAA,KACG,kBAAkB;;KAIX,kCAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA;EAGpB,SAAA,GAAY,gBAAA,EANgC;EAQ5C,SAAA,EAAW,SAAA,EAPO;EASlB,OAAA,GAAU,OAAA,EARM;EAUhB,WAAA,GAAc,2BAAA,CAA4B,SAAA,EAAW,WAAA;AAAA;;KAI3C,0BAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA,uBACC,kBAAA,CAAmB,SAAA,EAAW,OAAA,EAAS,WAAA,uBACxC,aAAA,+CAGlB,IAAA,CACF,kCAAA,CACE,SAAA,EACA,OAAA,EACA,WAAA,EACA,YAAA,EACA,WAAA;EAGE,MAAA,EAAQ,MAAA;EAAQ,SAAA,GAAY,SAAA;AAAA;AAAA,KAE7B,sBAAA,gBACY,oBAAA,gBACD,oBAAA,IACZ,IAAA,CAAK,MAAA,QAAc,KAAA,IAAS,KAAA;;KAG3B,gBAAA;EAAsC,MAAA;EAAiB,SAAA;AAAA,KAC1D,UAAA,aAAuB,IAAA,CAAK,UAAA;;KAGlB,yBAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA;EA7CA;;;;;;;EAAA;IAwDK,OAAA;EAAA,IAAqB,MAAA,4CACnB,oBAAA,mCACG,gBAAA,EAE5B,MAAA,EAAQ,IAAA,CACN,gBAAA,CAAiB,gCAAA,CAAiC,SAAA,EAAW,OAAA,EAAS,sBAAA,CAAuB,WAAA,EAAa,gBAAA,WAA2B,MAAA,EAAQ,SAAA;IAG7I,WAAA,IACE,MAAA,EAAQ,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,IACjD,MAAA,EAAQ,qBAAA,CAAsB,SAAA,EAAW,OAAA,EAAS,WAAA,EAAa,MAAA,MAC5D,gBAAA;EAAA,IAEN,+BAAA,CAAgC,SAAA,EAAW,OAAA,EAAS,sBAAA,CAAuB,WAAA,EAAa,gBAAA,GAAmB,MAAA,EAAQ,SAAA,GA5DtD;EAAA,4BA+DnC,kBAAA,CACzB,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,6BAElB,aAAA,gCACK,oBAAA,mCACG,gBAAA,EAE5B,MAAA,EAAQ,IAAA,CACN,gBAAA,CAAiB,kCAAA,CACf,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,GACpC,YAAA,EACA,WAAA,EACA,SAAA;IAIF,WAAA,IACE,MAAA,EAAQ,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,IACjD,MAAA,SACG,gBAAA;EAAA,IAEN,qBAAA,CACD,SAAA,EACA,OAAA,EACA,sBAAA,CAAuB,WAAA,EAAa,gBAAA,GACpC,YAAA,EACA,WAAA,MAEA,SAAA;EA3FkC;;;;;;EAmGpC,IAAA,gBAAoB,MAAA,mBAClB,OAAA,EAAS,yBAAA,CAA0B,SAAA,EAAW,MAAA,IAC7C,UAAA,QAAkB,wBAAA,CAAyB,SAAA,EAAW,MAAA;AAAA;;KAI/C,kBAAA;EA/FR;;;;;EAAA,CAqGD,QAA4B,EAAlB,kBAAkB;AAAA;;KAInB,iCAAA,mBACQ,iBAAA,kBACF,iBAAA,CAAkB,SAAA,uBACd,oBAAA;EArGqB,8EAyGzC,iBAAA,EAAmB,iBAAA,CAAkB,SAAA,EAAW,OAAA,EAAS,WAAA,GAzHzD;EA2HA,kBAAA,EAAoB,kBAAA,EA1HpB;EA4HA,oBAAA,EAAsB,yBAAA,CACpB,SAAA,EACA,OAAA,EACA,WAAA,EACA,gBAAA,GAhIgC;EAmIlC,SAAA,EAAW,uBAAA,CAAwB,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;AApHM;AAAG;;;;;;iBAmJ9B,2BAAA,yBACU,iBAAA,wBACF,iBAAA,CAAkB,SAAA,4BACpB,oBAAA,iDAGpB,aAAA,EAAe,kCAAA,CACb,SAAA,EACA,OAAA,EACA,WAAA,EACA,gBAAA,IAED,iCAAA,CAAkC,SAAA,EAAW,OAAA,EAAS,WAAA,EAAa,gBAAA"}
1
+ {"version":3,"file":"create-defined-resource-layout.d.cts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { LayoutResourceKey, ResourceDefinition } from "../resource.mjs";
2
2
  import { InPropsDefinition, InPropsObject } from "../props.mjs";
3
3
  import { CreateRenderState, LayoutComposablesDefinition, RenderStateReferences } from "./render-state.mjs";
4
- import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor } from "./define-layout.mjs";
4
+ import { LayoutNameInput } from "./layout-name.mjs";
5
+ import { CreateViewMapFunctionRenderOptions, CreateViewMapRenderStatesOptions, DefinedResourceLayout, DefinedResourceLayoutFromStates, LayoutIncludeProps, LayoutResourcesAccessor, MergeContract } from "./define-layout.mjs";
5
6
  import { LazyResourceLayoutOptions, LazyResourceStates, createLazyResourceLayout } from "./lazy-resource-layout.mjs";
6
7
  import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-layout-composables";
7
8
 
@@ -9,8 +10,13 @@ import { ComposableComponents, CreateLayoutComposable } from "@jfdevelops/react-
9
10
  /** A resource tuple with at least one entry, preserving literal and nested paths. */
10
11
  type NonEmptyResources = readonly [ResourceDefinition, ...ResourceDefinition[]];
11
12
  /** Configuration shared by every layout created from one defined-layout factory. */
12
- type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
13
- namespace?: DefaultNamespace; /** Resources supported by every layout created from this factory. */
13
+ type CreateDefinedResourceLayoutOptions<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
14
+ namespace?: DefaultNamespace; /** Default naming convention; explicit definition and component names override it. */
15
+ name?: DefaultNaming; /** Shared prop contracts, merged by key with layout and state contracts. */
16
+ props?: {
17
+ include?: SharedInclude;
18
+ custom?: SharedCustom;
19
+ }; /** Resources supported by every layout created from this factory. */
14
20
  resources: Resources; /** Props that render states can opt into through `props.include`. */
15
21
  options?: Options; /** Layout-wide composables available to every render state. */
16
22
  composables?: LayoutComposablesDefinition<Resources, Composables>;
@@ -25,9 +31,13 @@ type BoundLayoutComposables<Shared extends ComposableComponents, Local extends C
25
31
  type BoundLayoutInput<Definition extends {
26
32
  layout: unknown;
27
33
  namespace?: boolean;
28
- }> = Definition['layout'] & Pick<Definition, 'namespace'>;
34
+ }> = Definition['layout'] & Pick<Definition, 'namespace'> & (Definition extends {
35
+ name?: infer Name;
36
+ } ? {
37
+ name?: Name;
38
+ } : {});
29
39
  /** A `defineResourceLayout` function with its shared configuration pre-bound. */
30
- type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
40
+ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
31
41
  /**
32
42
  * Defines a layout whose `render` map contains the required `default` state
33
43
  * and any built-in or custom compound component states.
@@ -37,12 +47,22 @@ type BoundDefineResourceLayout<Resources extends NonEmptyResources, Options exte
37
47
  */
38
48
  <const Render extends {
39
49
  default: unknown;
40
- } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>, 'composables'> & {
50
+ } & Record<string, unknown>, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {}, CustomProps extends InPropsObject = {}, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>, 'composables' | 'name' | 'props'> & {
51
+ name?: Naming;
52
+ props?: {
53
+ include?: IncludeProps;
54
+ custom?: CustomProps;
55
+ };
41
56
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: RenderStateReferences<Resources, Options, Composables, Render>) => LocalComposables;
42
- }): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace>; /** Defines a layout whose `render` value is a single default-state callback. */
43
- <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, Namespace>>, 'composables'> & {
57
+ }): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Naming>; /** Defines a layout whose `render` value is a single default-state callback. */
58
+ <const IncludeProps extends LayoutIncludeProps<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>> = {}, CustomProps extends InPropsObject = {}, LocalComposables extends ComposableComponents = {}, Namespace extends boolean = DefaultNamespace, const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming>(layout: Omit<BoundLayoutInput<CreateViewMapFunctionRenderOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Namespace>>, 'composables' | 'name' | 'props'> & {
59
+ name?: Naming;
60
+ props?: {
61
+ include?: IncludeProps;
62
+ custom?: CustomProps;
63
+ };
44
64
  composables?: (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => LocalComposables;
45
- }): DefinedResourceLayout<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, IncludeProps, CustomProps, {}, Namespace>;
65
+ }): DefinedResourceLayout<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, {}, Namespace, Naming>;
46
66
  /**
47
67
  * Creates a lazy proxy for the single library-defined component exported by
48
68
  * a resource module.
@@ -61,10 +81,10 @@ type DefineLazyDefaults = {
61
81
  (defaults: LazyResourceStates): void;
62
82
  };
63
83
  /** Reusable helpers produced by {@link createDefinedResourceLayout}. */
64
- type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false> = {
65
- /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables>; /** Sets the shared loading and module-error UI used by lazy layouts. */
84
+ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Options extends InPropsDefinition<Resources>, Composables extends ComposableComponents, DefaultNamespace extends boolean = false, SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, SharedCustom extends InPropsObject = {}, DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined> = {
85
+ /** Creates eager, deferred, or separately imported render-state fragments. */createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>; /** Sets the shared loading and module-error UI used by lazy layouts. */
66
86
  defineLazyDefaults: DefineLazyDefaults; /** Defines a layout using the resources, options, and composables already bound. */
67
- defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace>; /** Reads, selects, or validates the resources bound to this factory. */
87
+ defineResourceLayout: BoundDefineResourceLayout<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>; /** Reads, selects, or validates the resources bound to this factory. */
68
88
  resources: LayoutResourcesAccessor<Resources>;
69
89
  };
70
90
  /**
@@ -95,7 +115,7 @@ type CreateDefinedResourceLayoutResult<Resources extends NonEmptyResources, Opti
95
115
  * });
96
116
  * ```
97
117
  */
98
- declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}, DefaultNamespace extends boolean = false>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables, DefaultNamespace>): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace>;
118
+ declare function createDefinedResourceLayout<const Resources extends NonEmptyResources, const Options extends InPropsDefinition<Resources> = {}, Composables extends ComposableComponents = {}, DefaultNamespace extends boolean = false, const SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {}, const SharedCustom extends InPropsObject = {}, const DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined>(configuration: CreateDefinedResourceLayoutOptions<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming>;
99
119
  //#endregion
100
120
  export { BoundDefineResourceLayout, CreateDefinedResourceLayoutOptions, CreateDefinedResourceLayoutResult, DefineLazyDefaults, DefinedResourceLayoutInput, NonEmptyResources, createDefinedResourceLayout };
101
121
  //# sourceMappingURL=create-defined-resource-layout.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.d.mts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
1
+ {"version":3,"file":"create-defined-resource-layout.d.mts","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import { LayoutConfigurationError } from "../errors/layout-configuration-error.mjs";
2
+ import { mergeLayoutProps } from "./merge-layout-props.mjs";
2
3
  import { createRenderStateBuilder } from "./render-state.mjs";
3
4
  import { createLayoutResourcesAccessor, defineResourceLayout } from "./define-layout.mjs";
4
5
  import { createLazyResourceLayout } from "./lazy-resource-layout.mjs";
6
+ import { createInspectionStore, getInspectionSource, inspectionId, layoutInspection } from "@jfdevelops/react-layout-devtools-core";
5
7
 
6
8
  //#region src/create-config/create-defined-resource-layout.ts
7
9
  /**
@@ -35,6 +37,7 @@ import { createLazyResourceLayout } from "./lazy-resource-layout.mjs";
35
37
  function createDefinedResourceLayout(configuration) {
36
38
  const { resources, options = {}, composables } = configuration;
37
39
  const defineBoundLayout = defineResourceLayout.forResources(...resources);
40
+ const inspection = createInspectionStore();
38
41
  let lazyDefaults = {};
39
42
  let lazyDefaultsDefined = false;
40
43
  let lazyLayoutCreated = false;
@@ -46,24 +49,57 @@ function createDefinedResourceLayout(configuration) {
46
49
  }
47
50
  const boundDefineResourceLayout = ((layout) => {
48
51
  const localComposables = layout.composables;
49
- return defineBoundLayout({
52
+ const definition = defineBoundLayout({
50
53
  options,
54
+ name: layout.name ?? configuration.name,
51
55
  namespace: layout.namespace ?? configuration.namespace,
52
56
  layout: {
53
57
  ...layout,
58
+ props: mergeLayoutProps(configuration.props, layout.props),
54
59
  composables: composables || localComposables ? (create, states) => ({
55
60
  ...composables?.(create, states),
56
61
  ...localComposables?.(create, states)
57
62
  }) : void 0
58
63
  }
59
64
  });
65
+ inspection.connect(definition);
66
+ return definition;
60
67
  });
61
68
  boundDefineResourceLayout.lazy = (lazyOptions) => {
62
69
  lazyLayoutCreated = true;
63
- return createLazyResourceLayout(lazyOptions, lazyDefaults);
70
+ const id = inspectionId("lazy");
71
+ const label = lazyOptions.resource;
72
+ inspection.node({
73
+ id,
74
+ kind: "lazy",
75
+ label,
76
+ unresolved: true
77
+ });
78
+ return createLazyResourceLayout({
79
+ ...lazyOptions,
80
+ load: async () => {
81
+ const module = await lazyOptions.load();
82
+ for (const entry of Object.values(module)) {
83
+ const component = entry && typeof entry === "object" && "Root" in entry ? entry.Root : entry;
84
+ if ((typeof component === "object" && component !== null || typeof component === "function") && layoutInspection in component) {
85
+ inspection.connect(component);
86
+ const target = getInspectionSource(component).getSnapshot().nodes.find((n) => n.kind === "layout" && n.label === component.displayName);
87
+ if (target) inspection.edge(id, target.id, "references");
88
+ }
89
+ }
90
+ inspection.node({
91
+ id,
92
+ kind: "lazy",
93
+ label,
94
+ unresolved: false
95
+ });
96
+ return module;
97
+ }
98
+ }, lazyDefaults);
64
99
  };
65
- return {
100
+ return inspection.attach({
66
101
  createRenderState: createRenderStateBuilder({
102
+ props: configuration.props,
67
103
  composables,
68
104
  options,
69
105
  resources
@@ -71,7 +107,7 @@ function createDefinedResourceLayout(configuration) {
71
107
  defineLazyDefaults,
72
108
  defineResourceLayout: boundDefineResourceLayout,
73
109
  resources: createLayoutResourcesAccessor(resources)
74
- };
110
+ });
75
111
  }
76
112
 
77
113
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import type { ComposableComponents, CreateLayoutComposable } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[],\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n> = {\n namespace?: DefaultNamespace;\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false,\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents,\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<Definition extends { layout: unknown; namespace?: boolean }> =\n Definition['layout'] & Pick<Definition, 'namespace'>;\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, {}, {}, Render, Namespace>>,\n 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>,\n ) => LocalComposables;\n },\n ): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace>;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n Namespace\n >>,\n 'composables'\n > & {\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n IncludeProps,\n CustomProps,\n {},\n Namespace\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables>;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.',\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.',\n );\n }\n\n lazyDefaults = defaults;\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as LayoutComposablesDefinition<Resources, ComposableComponents> | undefined;\n return defineBoundLayout({\n options,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n composables: composables || localComposables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n return createLazyResourceLayout(lazyOptions, lazyDefaults);\n };\n\n return {\n createRenderState: createRenderStateBuilder({\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqNA,SAAgB,4BAMd,eAMsF;CACtF,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAI,yBACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAI,yBACR,gFACF;EAGF,eAAe;EACf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAChC,OAAO,kBAAkB;GACvB;GACA,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;CACZ;CAOA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,OAAO,yBAAyB,aAAa,YAAY;CAC3D;CAEA,OAAO;EACL,mBAAmB,yBAAyB;GAC1C;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD;AACF"}
1
+ {"version":3,"file":"create-defined-resource-layout.mjs","names":[],"sources":["../../src/create-config/create-defined-resource-layout.ts"],"sourcesContent":["import { createInspectionStore, inspectionId, layoutInspection, getInspectionSource } from '@jfdevelops/react-layout-devtools-core';\nimport { mergeLayoutProps } from './merge-layout-props';\nimport type { LayoutNameInput } from './layout-name';\nimport type { MergeContract } from './define-layout';\nimport type { ComposableComponents, CreateLayoutComposable } from '@jfdevelops/react-layout-composables';\nimport { LayoutConfigurationError } from '../errors';\nimport type { InPropsDefinition, InPropsObject } from '../props';\nimport type { LayoutResourceKey, ResourceDefinition } from '../resource';\nimport {\n type CreateViewMapFunctionRenderOptions,\n type DefinedResourceLayout,\n defineResourceLayout,\n type LayoutIncludeProps,\n type LayoutResourcesAccessor,\n type CreateViewMapRenderStatesOptions,\n type DefinedResourceLayoutFromStates,\n createLayoutResourcesAccessor,\n} from './define-layout';\nimport {\n createLazyResourceLayout,\n type LazyResourceLayoutOptions,\n type LazyResourceStates,\n} from './lazy-resource-layout';\nimport {\n createRenderStateBuilder,\n type CreateRenderState,\n type RenderStateReferences,\n type LayoutComposablesDefinition,\n} from './render-state';\n\n/** A resource tuple with at least one entry, preserving literal and nested paths. */\nexport type NonEmptyResources = readonly [\n ResourceDefinition,\n ...ResourceDefinition[],\n];\n\n/** Configuration shared by every layout created from one defined-layout factory. */\nexport type CreateDefinedResourceLayoutOptions<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n namespace?: DefaultNamespace;\n /** Default naming convention; explicit definition and component names override it. */\n name?: DefaultNaming;\n /** Shared prop contracts, merged by key with layout and state contracts. */\n props?: { include?: SharedInclude; custom?: SharedCustom };\n /** Resources supported by every layout created from this factory. */\n resources: Resources;\n /** Props that render states can opt into through `props.include`. */\n options?: Options;\n /** Layout-wide composables available to every render state. */\n composables?: LayoutComposablesDefinition<Resources, Composables>;\n};\n\n/** The flat layout definition accepted after shared configuration is bound. */\nexport type DefinedResourceLayoutInput<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n IncludeProps extends LayoutIncludeProps<Resources, Options, Composables>,\n CustomProps extends InPropsObject,\n Render,\n Namespace extends boolean = false,\n> = Omit<\n CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n Composables,\n IncludeProps,\n CustomProps\n >['layout'],\n 'composables' | 'render'\n> & { render: Render; namespace?: Namespace };\n\ntype BoundLayoutComposables<\n Shared extends ComposableComponents,\n Local extends ComposableComponents,\n> = Omit<Shared, keyof Local> & Local;\n\n/** Flattens a definition's layout while preserving its namespace setting. */\ntype BoundLayoutInput<Definition extends { layout: unknown; namespace?: boolean }> =\n Definition['layout'] & Pick<Definition, 'namespace'> & (Definition extends { name?: infer Name } ? { name?: Name } : {});\n\n/** A `defineResourceLayout` function with its shared configuration pre-bound. */\nexport type BoundDefineResourceLayout<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /**\n * Defines a layout whose `render` map contains the required `default` state\n * and any built-in or custom compound component states.\n * Keep this overload first so incomplete render objects suggest state keys.\n * Use `createRenderState` for state-local `composables(create)` callbacks;\n * the helper infers their render context independently of the enclosing map.\n */\n <\n const Render extends { default: unknown } & Record<string, unknown>,\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const IncludeProps extends LayoutIncludeProps<Resources, Options, Composables> = {},\n CustomProps extends InPropsObject = {},\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, ('default' | keyof Render) & string> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapRenderStatesOptions<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Render, Namespace>>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: RenderStateReferences<Resources, Options, Composables, Render>,\n ) => LocalComposables;\n },\n ): DefinedResourceLayoutFromStates<Resources, Options, BoundLayoutComposables<Composables, LocalComposables>, Render, Namespace, MergeContract<SharedInclude, IncludeProps>, MergeContract<SharedCustom, CustomProps>, Naming>;\n /** Defines a layout whose `render` value is a single default-state callback. */\n <\n const IncludeProps extends LayoutIncludeProps<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>\n > = {},\n CustomProps extends InPropsObject = {},\n LocalComposables extends ComposableComponents = {},\n Namespace extends boolean = DefaultNamespace,\n const Naming extends LayoutNameInput<LayoutResourceKey<Resources>, 'default'> | undefined = DefaultNaming,\n >(\n layout: Omit<\n BoundLayoutInput<CreateViewMapFunctionRenderOptions<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n Namespace\n >>,\n 'composables' | 'name' | 'props'\n > & {\n name?: Naming;\n props?: { include?: IncludeProps; custom?: CustomProps };\n composables?: (\n create: CreateLayoutComposable<LayoutResourceKey<Resources>>,\n states: {},\n ) => LocalComposables;\n },\n ): DefinedResourceLayout<\n Resources,\n Options,\n BoundLayoutComposables<Composables, LocalComposables>,\n MergeContract<SharedInclude, IncludeProps>,\n MergeContract<SharedCustom, CustomProps>,\n {},\n Namespace,\n Naming\n >;\n /**\n * Creates a lazy proxy for the single library-defined component exported by\n * a resource module.\n *\n * @param options - Resource path and named-module import callback.\n */\n lazy<Module extends Record<string, unknown>>(\n options: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>>;\n};\n\n/** Registers loading and module-error components used by lazy layouts. */\nexport type DefineLazyDefaults = {\n /**\n * Sets defaults once, before the factory creates its first lazy layout.\n *\n * @param defaults - Shared components for pending module loads and failures.\n */\n (defaults: LazyResourceStates): void;\n};\n\n/** Reusable helpers produced by {@link createDefinedResourceLayout}. */\nexport type CreateDefinedResourceLayoutResult<\n Resources extends NonEmptyResources,\n Options extends InPropsDefinition<Resources>,\n Composables extends ComposableComponents,\n DefaultNamespace extends boolean = false,\n SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n SharedCustom extends InPropsObject = {},\n DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n> = {\n /** Creates eager, deferred, or separately imported render-state fragments. */\n createRenderState: CreateRenderState<Resources, Options, Composables, SharedInclude, SharedCustom>;\n /** Sets the shared loading and module-error UI used by lazy layouts. */\n defineLazyDefaults: DefineLazyDefaults;\n /** Defines a layout using the resources, options, and composables already bound. */\n defineResourceLayout: BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n /** Reads, selects, or validates the resources bound to this factory. */\n resources: LayoutResourcesAccessor<Resources>;\n};\n\n/**\n * Creates type-linked layout helpers from one shared configuration. The returned\n * `defineResourceLayout` accepts the layout directly, while `createRenderState`\n * carries the same resource and option types across file boundaries.\n *\n * @param configuration - Resources and optional shared props/composables to\n * bind to every returned helper.\n * @returns Helpers that share the configuration's inferred literal types.\n *\n * @example\n * ```tsx\n * const { createRenderState, defineResourceLayout } =\n * createDefinedResourceLayout({\n * resources: ['users'],\n * options: { title: createProp.string() },\n * });\n *\n * const Loading = createRenderState({\n * state: 'Loading',\n * props: { include: { title: true } },\n * render: ({ title }) => <p>Loading {title}</p>,\n * });\n *\n * export const usersLayout = defineResourceLayout({\n * render: { default: () => <Users />, ...Loading },\n * });\n * ```\n */\nexport function createDefinedResourceLayout<\n const Resources extends NonEmptyResources,\n const Options extends InPropsDefinition<Resources> = {},\n Composables extends ComposableComponents = {},\n DefaultNamespace extends boolean = false,\n const SharedInclude extends LayoutIncludeProps<Resources, Options, Composables> = {},\n const SharedCustom extends InPropsObject = {},\n const DefaultNaming extends LayoutNameInput<LayoutResourceKey<Resources>> | undefined = undefined,\n>(\n configuration: CreateDefinedResourceLayoutOptions<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >,\n): CreateDefinedResourceLayoutResult<Resources, Options, Composables, DefaultNamespace, SharedInclude, SharedCustom, DefaultNaming> {\n const { resources, options = {} as Options, composables } = configuration;\n const defineBoundLayout = defineResourceLayout.forResources(...resources);\n const inspection = createInspectionStore();\n let lazyDefaults: LazyResourceStates = {};\n let lazyDefaultsDefined = false;\n let lazyLayoutCreated = false;\n\n function defineLazyDefaults(defaults: LazyResourceStates): void {\n if (lazyDefaultsDefined) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults can only be defined once.',\n );\n }\n\n if (lazyLayoutCreated) {\n throw new LayoutConfigurationError(\n 'Lazy resource defaults must be defined before creating a lazy resource layout.',\n );\n }\n\n lazyDefaults = defaults;\n lazyDefaultsDefined = true;\n }\n\n const boundDefineResourceLayout = ((layout: Record<string, unknown>) => {\n const localComposables = layout.composables as LayoutComposablesDefinition<Resources, ComposableComponents> | undefined;\n const definition = defineBoundLayout({\n options,\n name: layout.name ?? configuration.name,\n namespace: layout.namespace ?? configuration.namespace,\n layout: {\n ...layout,\n props: mergeLayoutProps(configuration.props, layout.props as { include?: object; custom?: object }),\n composables: composables || localComposables\n ? (create: CreateLayoutComposable<LayoutResourceKey<Resources>>, states: {}) => ({\n ...composables?.(create, states),\n ...localComposables?.(create, states),\n })\n : undefined,\n },\n } as never);\n inspection.connect(definition);\n return definition;\n }) as unknown as BoundDefineResourceLayout<\n Resources,\n Options,\n Composables,\n DefaultNamespace,\n SharedInclude,\n SharedCustom,\n DefaultNaming\n >;\n\n boundDefineResourceLayout.lazy = <Module extends Record<string, unknown>>(\n lazyOptions: LazyResourceLayoutOptions<Resources, Module>,\n ): ReturnType<typeof createLazyResourceLayout<Resources, Module>> => {\n lazyLayoutCreated = true;\n const id = inspectionId('lazy');\n const label = (lazyOptions as unknown as { resource: string }).resource;\n inspection.node({ id, kind: 'lazy', label, unresolved: true });\n return createLazyResourceLayout({ ...lazyOptions, load: async () => {\n const module: Record<string, unknown> = await lazyOptions.load();\n for (const entry of Object.values(module)) {\n const component = entry && typeof entry === 'object' && 'Root' in entry ? entry.Root : entry;\n if ((typeof component === 'object' && component !== null || typeof component === 'function') && layoutInspection in component) {\n inspection.connect(component);\n const target = getInspectionSource(component).getSnapshot().nodes.find(n => n.kind === 'layout' && n.label === (component as { displayName?: string }).displayName);\n if (target) inspection.edge(id, target.id, 'references');\n }\n }\n inspection.node({ id, kind: 'lazy', label, unresolved: false });\n return module as Module;\n } }, lazyDefaults);\n };\n\n return inspection.attach({\n createRenderState: createRenderStateBuilder({\n props: configuration.props,\n composables,\n options,\n resources,\n }),\n defineLazyDefaults,\n defineResourceLayout: boundDefineResourceLayout,\n resources: createLayoutResourcesAccessor(resources),\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkPA,SAAgB,4BASd,eASkI;CAClI,MAAM,EAAE,WAAW,UAAU,CAAC,GAAc,gBAAgB;CAC5D,MAAM,oBAAoB,qBAAqB,aAAa,GAAG,SAAS;CACxE,MAAM,aAAa,sBAAsB;CACzC,IAAI,eAAmC,CAAC;CACxC,IAAI,sBAAsB;CAC1B,IAAI,oBAAoB;CAExB,SAAS,mBAAmB,UAAoC;EAC9D,IAAI,qBACF,MAAM,IAAI,yBACR,kDACF;EAGF,IAAI,mBACF,MAAM,IAAI,yBACR,gFACF;EAGF,eAAe;EACf,sBAAsB;CACxB;CAEA,MAAM,8BAA8B,WAAoC;EACtE,MAAM,mBAAmB,OAAO;EAChC,MAAM,aAAa,kBAAkB;GACnC;GACA,MAAM,OAAO,QAAQ,cAAc;GACnC,WAAW,OAAO,aAAa,cAAc;GAC7C,QAAQ;IACN,GAAG;IACH,OAAO,iBAAiB,cAAc,OAAO,OAAO,KAA8C;IAClG,aAAa,eAAe,oBACvB,QAA8D,YAAgB;KAC7E,GAAG,cAAc,QAAQ,MAAM;KAC/B,GAAG,mBAAmB,QAAQ,MAAM;IACtC,KACA;GACN;EACF,CAAU;EACV,WAAW,QAAQ,UAAU;EAC7B,OAAO;CACT;CAUA,0BAA0B,QACxB,gBACmE;EACnE,oBAAoB;EACpB,MAAM,KAAK,aAAa,MAAM;EAC9B,MAAM,QAAS,YAAgD;EAC/D,WAAW,KAAK;GAAE;GAAI,MAAM;GAAQ;GAAO,YAAY;EAAK,CAAC;EAC7D,OAAO,yBAAyB;GAAE,GAAG;GAAa,MAAM,YAAY;IAClE,MAAM,SAAkC,MAAM,YAAY,KAAK;IAC/D,KAAK,MAAM,SAAS,OAAO,OAAO,MAAM,GAAG;KACzC,MAAM,YAAY,SAAS,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,OAAO;KACvF,KAAK,OAAO,cAAc,YAAY,cAAc,QAAQ,OAAO,cAAc,eAAe,oBAAoB,WAAW;MAC7H,WAAW,QAAQ,SAAS;MAC5B,MAAM,SAAS,oBAAoB,SAAS,EAAE,YAAY,EAAE,MAAM,MAAK,MAAK,EAAE,SAAS,YAAY,EAAE,UAAW,UAAuC,WAAW;MAClK,IAAI,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI,YAAY;KACzD;IACF;IACA,WAAW,KAAK;KAAE;KAAI,MAAM;KAAQ;KAAO,YAAY;IAAM,CAAC;IAC9D,OAAO;GACT;EAAE,GAAG,YAAY;CACnB;CAEA,OAAO,WAAW,OAAO;EACvB,mBAAmB,yBAAyB;GAC1C,OAAO,cAAc;GACrB;GACA;GACA;EACF,CAAC;EACD;EACA,sBAAsB;EACtB,WAAW,8BAA8B,SAAS;CACpD,CAAC;AACH"}