@jfdevelops/react-layout 1.6.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +26 -14
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +12 -6
  4. package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -1
  5. package/dist/create-config/create-defined-resource-layout.d.mts +12 -6
  6. package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -1
  7. package/dist/create-config/create-defined-resource-layout.mjs +27 -15
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/define-layout.cjs +129 -58
  10. package/dist/create-config/define-layout.cjs.map +1 -1
  11. package/dist/create-config/define-layout.d.cts +9 -13
  12. package/dist/create-config/define-layout.d.cts.map +1 -1
  13. package/dist/create-config/define-layout.d.mts +9 -13
  14. package/dist/create-config/define-layout.d.mts.map +1 -1
  15. package/dist/create-config/define-layout.mjs +130 -59
  16. package/dist/create-config/define-layout.mjs.map +1 -1
  17. package/dist/create-config/for-resources/create-component.d.cts +62 -38
  18. package/dist/create-config/for-resources/create-component.d.cts.map +1 -1
  19. package/dist/create-config/for-resources/create-component.d.mts +62 -38
  20. package/dist/create-config/for-resources/create-component.d.mts.map +1 -1
  21. package/dist/create-config/for-resources/create-for-resources.cjs +88 -12
  22. package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
  23. package/dist/create-config/for-resources/create-for-resources.mjs +88 -12
  24. package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
  25. package/dist/create-config/for-resources/scoped-layout.d.cts +2 -2
  26. package/dist/create-config/for-resources/scoped-layout.d.cts.map +1 -1
  27. package/dist/create-config/for-resources/scoped-layout.d.mts +2 -2
  28. package/dist/create-config/for-resources/scoped-layout.d.mts.map +1 -1
  29. package/dist/create-config/for-resources/scoped-render.cjs +39 -4
  30. package/dist/create-config/for-resources/scoped-render.cjs.map +1 -1
  31. package/dist/create-config/for-resources/scoped-render.d.cts +8 -1
  32. package/dist/create-config/for-resources/scoped-render.d.cts.map +1 -1
  33. package/dist/create-config/for-resources/scoped-render.d.mts +8 -1
  34. package/dist/create-config/for-resources/scoped-render.d.mts.map +1 -1
  35. package/dist/create-config/for-resources/scoped-render.mjs +39 -4
  36. package/dist/create-config/for-resources/scoped-render.mjs.map +1 -1
  37. package/dist/create-config/index.d.cts +3 -2
  38. package/dist/create-config/index.d.mts +3 -2
  39. package/dist/create-config/layout-name.cjs +1 -1
  40. package/dist/create-config/layout-name.mjs +1 -1
  41. package/dist/create-config/lazy-resource-layout.cjs +70 -86
  42. package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
  43. package/dist/create-config/lazy-resource-layout.d.cts +9 -31
  44. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
  45. package/dist/create-config/lazy-resource-layout.d.mts +9 -31
  46. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
  47. package/dist/create-config/lazy-resource-layout.mjs +70 -86
  48. package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
  49. package/dist/create-config/preview.cjs +1 -1
  50. package/dist/create-config/preview.d.cts +2 -0
  51. package/dist/create-config/preview.d.cts.map +1 -1
  52. package/dist/create-config/preview.d.mts +2 -0
  53. package/dist/create-config/preview.d.mts.map +1 -1
  54. package/dist/create-config/preview.mjs +1 -1
  55. package/dist/create-config/render-state-context.cjs +24 -0
  56. package/dist/create-config/render-state-context.cjs.map +1 -0
  57. package/dist/create-config/render-state-context.mjs +22 -0
  58. package/dist/create-config/render-state-context.mjs.map +1 -0
  59. package/dist/create-config/render-state.cjs +58 -18
  60. package/dist/create-config/render-state.cjs.map +1 -1
  61. package/dist/create-config/render-state.d.cts +44 -21
  62. package/dist/create-config/render-state.d.cts.map +1 -1
  63. package/dist/create-config/render-state.d.mts +44 -21
  64. package/dist/create-config/render-state.d.mts.map +1 -1
  65. package/dist/create-config/render-state.mjs +55 -18
  66. package/dist/create-config/render-state.mjs.map +1 -1
  67. package/dist/create-config/state-composable.cjs +4 -2
  68. package/dist/create-config/state-composable.cjs.map +1 -1
  69. package/dist/create-config/state-composable.d.cts.map +1 -1
  70. package/dist/create-config/state-composable.d.mts.map +1 -1
  71. package/dist/create-config/state-composable.mjs +4 -2
  72. package/dist/create-config/state-composable.mjs.map +1 -1
  73. package/dist/errors/lazy-resource-error.cjs +37 -0
  74. package/dist/errors/lazy-resource-error.cjs.map +1 -0
  75. package/dist/errors/lazy-resource-error.d.cts +26 -0
  76. package/dist/errors/lazy-resource-error.d.cts.map +1 -0
  77. package/dist/errors/lazy-resource-error.d.mts +26 -0
  78. package/dist/errors/lazy-resource-error.d.mts.map +1 -0
  79. package/dist/errors/lazy-resource-error.mjs +35 -0
  80. package/dist/errors/lazy-resource-error.mjs.map +1 -0
  81. package/dist/errors/react-layout-error.cjs +1 -1
  82. package/dist/errors/react-layout-error.mjs +1 -1
  83. package/dist/errors/resource-state-error.cjs +4 -1
  84. package/dist/errors/resource-state-error.cjs.map +1 -1
  85. package/dist/errors/resource-state-error.d.cts +1 -0
  86. package/dist/errors/resource-state-error.d.cts.map +1 -1
  87. package/dist/errors/resource-state-error.d.mts +1 -0
  88. package/dist/errors/resource-state-error.d.mts.map +1 -1
  89. package/dist/errors/resource-state-error.mjs +4 -1
  90. package/dist/errors/resource-state-error.mjs.map +1 -1
  91. package/dist/index.cjs +6 -2
  92. package/dist/index.d.cts +9 -5
  93. package/dist/index.d.mts +9 -5
  94. package/dist/index.mjs +4 -3
  95. package/dist/lazy/create-lazy-loader.cjs +78 -0
  96. package/dist/lazy/create-lazy-loader.cjs.map +1 -0
  97. package/dist/lazy/create-lazy-loader.d.cts +19 -0
  98. package/dist/lazy/create-lazy-loader.d.cts.map +1 -0
  99. package/dist/lazy/create-lazy-loader.d.mts +19 -0
  100. package/dist/lazy/create-lazy-loader.d.mts.map +1 -0
  101. package/dist/lazy/create-lazy-loader.mjs +78 -0
  102. package/dist/lazy/create-lazy-loader.mjs.map +1 -0
  103. package/dist/lazy/create-render-state.cjs +59 -0
  104. package/dist/lazy/create-render-state.cjs.map +1 -0
  105. package/dist/lazy/create-render-state.d.cts +33 -0
  106. package/dist/lazy/create-render-state.d.cts.map +1 -0
  107. package/dist/lazy/create-render-state.d.mts +33 -0
  108. package/dist/lazy/create-render-state.d.mts.map +1 -0
  109. package/dist/lazy/create-render-state.mjs +59 -0
  110. package/dist/lazy/create-render-state.mjs.map +1 -0
  111. package/dist/lazy/fallback-props.cjs +9 -0
  112. package/dist/lazy/fallback-props.cjs.map +1 -0
  113. package/dist/lazy/fallback-props.mjs +9 -0
  114. package/dist/lazy/fallback-props.mjs.map +1 -0
  115. package/dist/lazy/inspection.cjs +51 -0
  116. package/dist/lazy/inspection.cjs.map +1 -0
  117. package/dist/lazy/inspection.d.cts +28 -0
  118. package/dist/lazy/inspection.d.cts.map +1 -0
  119. package/dist/lazy/inspection.d.mts +28 -0
  120. package/dist/lazy/inspection.d.mts.map +1 -0
  121. package/dist/lazy/inspection.mjs +50 -0
  122. package/dist/lazy/inspection.mjs.map +1 -0
  123. package/dist/lazy/lazy-boundary.cjs +63 -0
  124. package/dist/lazy/lazy-boundary.cjs.map +1 -0
  125. package/dist/lazy/lazy-boundary.mjs +63 -0
  126. package/dist/lazy/lazy-boundary.mjs.map +1 -0
  127. package/dist/lazy/scoped-content.cjs +87 -0
  128. package/dist/lazy/scoped-content.cjs.map +1 -0
  129. package/dist/lazy/scoped-content.d.cts +19 -0
  130. package/dist/lazy/scoped-content.d.cts.map +1 -0
  131. package/dist/lazy/scoped-content.d.mts +19 -0
  132. package/dist/lazy/scoped-content.d.mts.map +1 -0
  133. package/dist/lazy/scoped-content.mjs +86 -0
  134. package/dist/lazy/scoped-content.mjs.map +1 -0
  135. package/dist/lazy/types.cjs +10 -0
  136. package/dist/lazy/types.cjs.map +1 -0
  137. package/dist/lazy/types.d.cts +40 -0
  138. package/dist/lazy/types.d.cts.map +1 -0
  139. package/dist/lazy/types.d.mts +40 -0
  140. package/dist/lazy/types.d.mts.map +1 -0
  141. package/dist/lazy/types.mjs +8 -0
  142. package/dist/lazy/types.mjs.map +1 -0
  143. package/dist/props.cjs +4 -2
  144. package/dist/props.cjs.map +1 -1
  145. package/dist/props.d.cts +6 -50
  146. package/dist/props.d.cts.map +1 -1
  147. package/dist/props.d.mts +6 -50
  148. package/dist/props.d.mts.map +1 -1
  149. package/dist/props.mjs +5 -2
  150. package/dist/props.mjs.map +1 -1
  151. package/dist/resource.cjs.map +1 -1
  152. package/dist/resource.d.cts +1 -1
  153. package/dist/resource.d.cts.map +1 -1
  154. package/dist/resource.d.mts +1 -1
  155. package/dist/resource.d.mts.map +1 -1
  156. package/dist/resource.mjs.map +1 -1
  157. package/package.json +2 -2
@@ -1,7 +1,12 @@
1
- import { InvalidConfigError } from "../errors/invalid-config.mjs";
2
- import { MissingResourceProviderError } from "../errors/missing-resource-provider.mjs";
1
+ import { ReferencedRenderStateContext, RenderStateFallback, RenderStateNameContext } from "./render-state-context.mjs";
3
2
  import { LayoutConfigurationError } from "../errors/layout-configuration-error.mjs";
4
3
  import { ResourceModuleLoadError, ResourceRenderError } from "../errors/resource-state-error.mjs";
4
+ import { LazyResourceStateNotFoundError } from "../errors/lazy-resource-error.mjs";
5
+ import { LazyBoundary } from "../lazy/lazy-boundary.mjs";
6
+ import { LazyFallbackPropsContext } from "../lazy/fallback-props.mjs";
7
+ import { lazyDefaultsSymbol, lazyStatesSymbol } from "../lazy/types.mjs";
8
+ import { InvalidConfigError } from "../errors/invalid-config.mjs";
9
+ import { MissingResourceProviderError } from "../errors/missing-resource-provider.mjs";
5
10
  import { capitalize } from "../utils/capitalize.mjs";
6
11
  import { StateComposableContext, createStateReferences, stateReferenceSource } from "./state-composable.mjs";
7
12
  import { mergeLayoutProps } from "./merge-layout-props.mjs";
@@ -14,13 +19,13 @@ import { isResourceConfigComponentKey } from "./component-keys.mjs";
14
19
  import { createResourceConfig } from "./get-component.mjs";
15
20
  import { createResourceLinksFn } from "./create-resource-links.mjs";
16
21
  import { createForResource } from "./for-resource.mjs";
22
+ import { deferredRenderStateSymbol, definedResourceLayoutComponentSymbol, isDeferredRenderState, isLazyRenderState, lazyInspectionSymbol, lazyLoaderSymbol, lazyOptionsSymbol } from "./render-state.mjs";
17
23
  import { createForResources } from "./for-resources/create-for-resources.mjs";
18
24
  import { ResourceLayoutShellPublisherContext, useResourceLayoutShellPublisher } from "./shell-context.mjs";
19
- import { deferredRenderStateSymbol, definedResourceLayoutComponentSymbol, findDefinedRenderState, isDeferredRenderState, isLazyRenderState, lazyRenderStateSymbol } from "./render-state.mjs";
20
25
  import { LayoutComposablePresetProvider, collectComposablePresetEntries, makeComposable, resolveLayoutComposables } from "@jfdevelops/react-layout-composables";
21
- import { Component, Suspense, createContext, lazy, useCallback, useContext, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
22
- import { getLayoutDebug, inspectionId, layoutDebug, layoutPreviewFixtures } from "@jfdevelops/react-layout-devtools-core";
26
+ import { Component, Suspense, createContext, lazy, useCallback, useContext, useLayoutEffect, useMemo, useRef, useState } from "react";
23
27
  import { Fragment, jsx } from "react/jsx-runtime";
28
+ import { getLayoutDebug, inspectionId, layoutDebug, layoutPreviewFixtures } from "@jfdevelops/react-layout-devtools-core";
24
29
  import { attachComponentPropDefinitions, createPrimitivePropBuilder, createProp, resolvePropDefinitionValues, validateProps } from "@jfdevelops/react-layout-validator";
25
30
 
26
31
  //#region src/create-config/define-layout.tsx
@@ -35,7 +40,10 @@ var RenderStateBoundary = class extends Component {
35
40
  this.setState({ error: void 0 });
36
41
  };
37
42
  render() {
38
- if (this.state.error !== void 0) return this.props.fallback(this.state.error, this.retry);
43
+ if (this.state.error !== void 0) return /* @__PURE__ */ jsx(RenderStateFallback, {
44
+ state: "Error",
45
+ children: this.props.fallback(this.state.error, this.retry)
46
+ });
39
47
  return this.props.children;
40
48
  }
41
49
  };
@@ -120,6 +128,28 @@ function resolveLayoutOptionDefaults(defaults, options) {
120
128
  else resolved[key] = functionalUpdate(defaultValue, options[key]);
121
129
  return resolved;
122
130
  }
131
+ function optionalStateChildren(props) {
132
+ if (!props) return props;
133
+ const children = props.custom?.children;
134
+ const childrenInclude = props.include?.children;
135
+ return {
136
+ ...props,
137
+ include: props.include && {
138
+ ...props.include,
139
+ ..."children" in props.include ? { children: typeof childrenInclude === "object" && childrenInclude !== null ? {
140
+ ...childrenInclude,
141
+ required: false
142
+ } : childrenInclude === true || childrenInclude === "required" ? {
143
+ required: false,
144
+ suppliedVia: "config"
145
+ } : "optional" } : {}
146
+ },
147
+ custom: props.custom && {
148
+ ...props.custom,
149
+ ...children ? { children: children.visibility === "required" ? children.optional?.() ?? children : children } : {}
150
+ }
151
+ };
152
+ }
123
153
  function getSynchronousRenderStateDefinition(input, fallbackProps) {
124
154
  if (isLazyRenderState(input)) return;
125
155
  if (isDeferredRenderState(input)) return input[deferredRenderStateSymbol];
@@ -139,8 +169,9 @@ function assertUnreservedResourceSlugs(resources, owner) {
139
169
  if (typeof resource !== "string") assertUnreservedResourceSlugs(resource.subResources, slug);
140
170
  }
141
171
  }
142
- function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspection) {
172
+ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspection, renderStateName = "default") {
143
173
  const { options: inProps = {}, resources, layout, namespace: defaultNamespace = false } = options;
174
+ const getLazyDefaults = options[lazyDefaultsSymbol] ?? (() => ({}));
144
175
  const shellId = options.shellId;
145
176
  const inspection = inheritedInspection ? void 0 : inspectDefinition(resources, getLayoutDebug(options)?.source ?? getLayoutDebug(layout)?.source);
146
177
  if (inspection) inspection.store.node({
@@ -319,10 +350,10 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
319
350
  }));
320
351
  const mergedRenderContext = {
321
352
  composables: resolvedComposables,
322
- resource: layoutContext.resource,
323
353
  resources: createLayoutRenderResourcesAccessor(resources, layoutContext.resource),
324
354
  name: layoutContext.name,
325
- inProps: splitInProps
355
+ inProps: splitInProps,
356
+ state: renderStateName
326
357
  };
327
358
  const stateComponents = {};
328
359
  let CreatedDefaultStateComponent;
@@ -331,11 +362,20 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
331
362
  if (CreatedDefaultStateComponent) return;
332
363
  return inspectionStore.mount(activeInspection.layout, activeInspection.state, ...resourceId ? [resourceId] : []);
333
364
  }, []);
334
- if (CreatedDefaultStateComponent) return /* @__PURE__ */ jsx(CreatedDefaultStateComponent, { ...renderProps });
335
- return render(renderProps, mergedRenderContext);
365
+ const state = useContext(RenderStateNameContext);
366
+ if (CreatedDefaultStateComponent) return /* @__PURE__ */ jsx(ReferencedRenderStateContext.Provider, {
367
+ value: state,
368
+ children: /* @__PURE__ */ jsx(CreatedDefaultStateComponent, { ...renderProps })
369
+ });
370
+ return render(renderProps, {
371
+ ...mergedRenderContext,
372
+ state
373
+ });
336
374
  }
337
375
  function Component(props) {
376
+ const state = useContext(ReferencedRenderStateContext) ?? renderStateName;
338
377
  const publishResource = useResourceLayoutShellPublisher();
378
+ const fallbackOptions = useContext(LazyFallbackPropsContext);
339
379
  useLayoutEffect(() => {
340
380
  publishResource?.(layoutContext.resource, shellId);
341
381
  return () => publishResource?.(void 0, shellId);
@@ -348,7 +388,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
348
388
  const definition = mergedResolvedInProps[key];
349
389
  const includeBehavior = includeLayoutProps?.[key];
350
390
  const callSiteValue = allowsComponentPassthrough(includeBehavior) ? readLayoutOptionValue(key, definition, props) : void 0;
351
- const layoutOptionValue = allowsConfigPassthrough(includeBehavior) ? readLayoutOptionValue(key, definition, layoutOptionValues) : void 0;
391
+ const layoutOptionValue = allowsConfigPassthrough(includeBehavior) ? readLayoutOptionValue(key, definition, fallbackOptions?.owner === activeInspection.layout ? fallbackOptions.props : layoutOptionValues) : void 0;
352
392
  const splitValue = key in splitInProps ? splitInProps[key] : void 0;
353
393
  const value = callSiteValue ?? layoutOptionValue ?? splitValue;
354
394
  if (value !== void 0) includedPropValues[key] = value;
@@ -367,17 +407,23 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
367
407
  ...validatedProps,
368
408
  ...layoutRenderIncludedProps
369
409
  };
370
- const rendered = /* @__PURE__ */ jsx(ResourceProvider, {
371
- resource: layoutContext.resource,
372
- children: /* @__PURE__ */ jsx(LayoutComposablePresetProvider, {
373
- value: composablePresetProps,
374
- children: /* @__PURE__ */ jsx(StateComposableContext.Provider, {
375
- value: {
376
- scope: stateScope,
377
- props: layoutRenderProps,
378
- definitions: mergedResolvedInProps
379
- },
380
- children: /* @__PURE__ */ jsx(RenderDefaultState, { renderProps: layoutRenderProps })
410
+ const rendered = /* @__PURE__ */ jsx(ReferencedRenderStateContext.Provider, {
411
+ value: void 0,
412
+ children: /* @__PURE__ */ jsx(RenderStateNameContext.Provider, {
413
+ value: state,
414
+ children: /* @__PURE__ */ jsx(ResourceProvider, {
415
+ resource: layoutContext.resource,
416
+ children: /* @__PURE__ */ jsx(LayoutComposablePresetProvider, {
417
+ value: composablePresetProps,
418
+ children: /* @__PURE__ */ jsx(StateComposableContext.Provider, {
419
+ value: {
420
+ scope: stateScope,
421
+ props: layoutRenderProps,
422
+ definitions: mergedResolvedInProps
423
+ },
424
+ children: /* @__PURE__ */ jsx(RenderDefaultState, { renderProps: layoutRenderProps })
425
+ })
426
+ })
381
427
  })
382
428
  })
383
429
  });
@@ -400,41 +446,38 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
400
446
  function createStateComponent(stateName, input, validateStateName = true, fallbackStateName = stateName) {
401
447
  const inspectedId = validateStateName ? stateIds.get(stateName) : getReferenceStateId(input, stateName);
402
448
  if (isLazyRenderState(input)) {
403
- const loadState = input[lazyRenderStateSymbol];
404
- function createLazyState() {
405
- return lazy(async () => {
406
- const stateDefinition = await findDefinedRenderState(await loadState().catch((error) => {
407
- throw new ResourceModuleLoadError(String(layoutContext.resource), error);
408
- }));
409
- if (validateStateName && stateDefinition.state !== void 0 && stateDefinition.state !== stateName) throw new LayoutConfigurationError(`Lazy render state "${stateDefinition.state}" cannot be used as "${stateName}"`);
410
- return { default: createLoadedStateComponent(validateStateName ? stateName : stateDefinition.state ?? stateName, stateDefinition, inspectedId) };
411
- });
412
- }
449
+ const loader = input[lazyLoaderSymbol];
450
+ const lazyOptions = input[lazyOptionsSymbol];
451
+ const lazyInspection = input[lazyInspectionSymbol];
452
+ inspectionStore.connect(input);
453
+ inspectionStore.edge(inspectedId ?? layoutId, lazyInspection.id, "declares");
454
+ const label = `${layoutContext.resource}:${stateName}`;
455
+ lazyInspection.setLabel(label);
456
+ const map = (stateDefinition) => {
457
+ if (validateStateName && stateDefinition.state !== void 0 && stateDefinition.state !== stateName) throw new LazyResourceStateNotFoundError(label, stateName);
458
+ return createLoadedStateComponent(validateStateName ? stateName : stateDefinition.state ?? stateName, stateDefinition, inspectedId);
459
+ };
413
460
  function LazyStateComponent(props) {
414
- const [, rerender] = useReducer((version) => version + 1, 0);
415
- const LazyState = useRef(createLazyState());
416
- const CurrentLazyState = LazyState.current;
461
+ const defaults = lazyOptions.defaults();
417
462
  const LoadingComponent = fallbackStateName === "Loading" ? void 0 : stateComponents.Loading;
418
- const ErrorComponent = fallbackStateName === "Error" ? void 0 : stateComponents.Error;
419
- function retry() {
420
- LazyState.current = createLazyState();
421
- rerender();
422
- }
423
- const rendered = /* @__PURE__ */ jsx(Suspense, {
424
- fallback: LoadingComponent ? /* @__PURE__ */ jsx(LoadingComponent, {}) : null,
425
- children: /* @__PURE__ */ jsx(CurrentLazyState, { ...props })
463
+ const ErrorState = fallbackStateName === "Error" ? void 0 : stateComponents.Error;
464
+ const LoadingDefault = defaults.Loading;
465
+ const ErrorComponent = ErrorState ? ({ error, retry }) => /* @__PURE__ */ jsx(RenderStateRetryContext.Provider, {
466
+ value: retry,
467
+ children: /* @__PURE__ */ jsx(ErrorState, {
468
+ error,
469
+ retry
470
+ })
471
+ }) : defaults.Error;
472
+ return /* @__PURE__ */ jsx(LazyBoundary, {
473
+ loader,
474
+ map,
475
+ resource: String(layoutContext.resource),
476
+ componentProps: props,
477
+ ErrorComponent,
478
+ onMount: lazyInspection.hooks.onMount,
479
+ fallback: lazyOptions.fallback !== void 0 ? lazyOptions.fallback : LoadingComponent ? /* @__PURE__ */ jsx(LoadingComponent, {}) : LoadingDefault ? /* @__PURE__ */ jsx(LoadingDefault, { resource: String(layoutContext.resource) }) : null
426
480
  });
427
- return ErrorComponent ? /* @__PURE__ */ jsx(RenderStateBoundary, {
428
- fallback: (error, reset) => /* @__PURE__ */ jsx(RenderStateRetryContext.Provider, {
429
- value: reset,
430
- children: /* @__PURE__ */ jsx(ErrorComponent, {
431
- error: toResourceStateError(String(layoutContext.resource), stateName, error),
432
- retry: reset
433
- })
434
- }),
435
- onRetry: retry,
436
- children: rendered
437
- }) : rendered;
438
481
  }
439
482
  return LazyStateComponent;
440
483
  }
@@ -447,7 +490,10 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
447
490
  const LoadingComponent = fallbackStateName === "Loading" ? void 0 : stateComponents.Loading;
448
491
  const ErrorComponent = fallbackStateName === "Error" ? void 0 : stateComponents.Error;
449
492
  const rendered = /* @__PURE__ */ jsx(Suspense, {
450
- fallback: LoadingComponent ? /* @__PURE__ */ jsx(LoadingComponent, {}) : null,
493
+ fallback: /* @__PURE__ */ jsx(RenderStateFallback, {
494
+ state: "Loading",
495
+ children: LoadingComponent ? /* @__PURE__ */ jsx(LoadingComponent, {}) : null
496
+ }),
451
497
  children: /* @__PURE__ */ jsx(DeferredState, { ...props })
452
498
  });
453
499
  return ErrorComponent ? /* @__PURE__ */ jsx(RenderStateBoundary, {
@@ -488,13 +534,13 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
488
534
  options: inProps,
489
535
  layout: {
490
536
  composables: stateComposables,
491
- props: mergeLayoutProps(legacyLayoutProps, definition.props),
537
+ props: optionalStateChildren(mergeLayoutProps(legacyLayoutProps, definition.props)),
492
538
  render: stateRender
493
539
  }
494
540
  }, stateScope, {
495
541
  ...activeInspection,
496
542
  state: inspectedState ?? getReferenceStateId(definition, stateName)
497
- }).createResourceLayout({
543
+ }, stateName).createResourceLayout({
498
544
  ...layoutOptions,
499
545
  name,
500
546
  namespace: false
@@ -557,6 +603,17 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
557
603
  name
558
604
  }),
559
605
  ...exposedStates,
606
+ [lazyStatesSymbol]: {
607
+ owner: layoutId,
608
+ Loading: stateComponents.Loading,
609
+ Error: stateComponents.Error ? ({ error, retry }) => /* @__PURE__ */ jsx(RenderStateRetryContext.Provider, {
610
+ value: retry,
611
+ children: /* @__PURE__ */ jsx(stateComponents.Error, {
612
+ error,
613
+ retry
614
+ })
615
+ }) : void 0
616
+ },
560
617
  [definedResourceLayoutComponentSymbol]: true
561
618
  });
562
619
  previewRoot = createdComponent;
@@ -618,7 +675,21 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
618
675
  createLayoutForResource: createLayoutForResourceBuilder,
619
676
  ...layout.composables ? { createMakeComposableLayout: createTopLevelMakeComposable } : {},
620
677
  createResourceLayout: definedResourceLayout,
621
- getComponentPropDefinitions
678
+ getComponentPropDefinitions,
679
+ lazyEnvironment: {
680
+ store: inheritedInspection?.store ?? inspection.store,
681
+ parent: inheritedInspection?.layout ?? inspection.definition,
682
+ defaults: getLazyDefaults,
683
+ states(resource, props) {
684
+ if (typeof layout.render !== "object" || !layout.render || !("Loading" in layout.render || "Error" in layout.render)) return {};
685
+ return definedResourceLayout({
686
+ ...props,
687
+ resource,
688
+ namespace: false,
689
+ name: capitalize(resource)
690
+ })[lazyStatesSymbol];
691
+ }
692
+ }
622
693
  })
623
694
  };
624
695
  if (layout.composables) createResourceLayoutExtras.makeComposable = createTopLevelMakeComposable();