@jfdevelops/react-layout 2.1.0 → 2.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 (125) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +6 -3
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -1
  3. package/dist/create-config/create-defined-resource-layout.d.cts +16 -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 +16 -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 +6 -3
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -1
  9. package/dist/create-config/create-resource-links.cjs.map +1 -1
  10. package/dist/create-config/create-resource-links.d.cts +3 -1
  11. package/dist/create-config/create-resource-links.d.cts.map +1 -1
  12. package/dist/create-config/create-resource-links.d.mts +3 -1
  13. package/dist/create-config/create-resource-links.d.mts.map +1 -1
  14. package/dist/create-config/create-resource-links.mjs.map +1 -1
  15. package/dist/create-config/create-reusable.cjs +49 -0
  16. package/dist/create-config/create-reusable.cjs.map +1 -0
  17. package/dist/create-config/create-reusable.d.cts +41 -0
  18. package/dist/create-config/create-reusable.d.cts.map +1 -0
  19. package/dist/create-config/create-reusable.d.mts +41 -0
  20. package/dist/create-config/create-reusable.d.mts.map +1 -0
  21. package/dist/create-config/create-reusable.mjs +49 -0
  22. package/dist/create-config/create-reusable.mjs.map +1 -0
  23. package/dist/create-config/define-layout.cjs +19 -12
  24. package/dist/create-config/define-layout.cjs.map +1 -1
  25. package/dist/create-config/define-layout.d.cts +43 -42
  26. package/dist/create-config/define-layout.d.cts.map +1 -1
  27. package/dist/create-config/define-layout.d.mts +43 -42
  28. package/dist/create-config/define-layout.d.mts.map +1 -1
  29. package/dist/create-config/define-layout.mjs +22 -15
  30. package/dist/create-config/define-layout.mjs.map +1 -1
  31. package/dist/create-config/for-paths/builder.cjs +1 -0
  32. package/dist/create-config/for-paths/builder.cjs.map +1 -1
  33. package/dist/create-config/for-paths/builder.d.cts +5 -3
  34. package/dist/create-config/for-paths/builder.d.cts.map +1 -1
  35. package/dist/create-config/for-paths/builder.d.mts +5 -3
  36. package/dist/create-config/for-paths/builder.d.mts.map +1 -1
  37. package/dist/create-config/for-paths/builder.mjs +1 -0
  38. package/dist/create-config/for-paths/builder.mjs.map +1 -1
  39. package/dist/create-config/for-resource.cjs.map +1 -1
  40. package/dist/create-config/for-resource.d.cts +7 -6
  41. package/dist/create-config/for-resource.d.cts.map +1 -1
  42. package/dist/create-config/for-resource.d.mts +7 -6
  43. package/dist/create-config/for-resource.d.mts.map +1 -1
  44. package/dist/create-config/for-resource.mjs.map +1 -1
  45. package/dist/create-config/for-resources/create-component.d.cts +34 -33
  46. package/dist/create-config/for-resources/create-component.d.cts.map +1 -1
  47. package/dist/create-config/for-resources/create-component.d.mts +34 -33
  48. package/dist/create-config/for-resources/create-component.d.mts.map +1 -1
  49. package/dist/create-config/for-resources/create-for-resources.cjs +7 -6
  50. package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
  51. package/dist/create-config/for-resources/create-for-resources.d.cts +2 -1
  52. package/dist/create-config/for-resources/create-for-resources.d.mts +2 -1
  53. package/dist/create-config/for-resources/create-for-resources.mjs +7 -6
  54. package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
  55. package/dist/create-config/for-resources/scoped-layout.d.cts +5 -4
  56. package/dist/create-config/for-resources/scoped-layout.d.cts.map +1 -1
  57. package/dist/create-config/for-resources/scoped-layout.d.mts +5 -4
  58. package/dist/create-config/for-resources/scoped-layout.d.mts.map +1 -1
  59. package/dist/create-config/index.d.cts +1 -0
  60. package/dist/create-config/index.d.mts +1 -0
  61. package/dist/create-config/inspection.cjs +23 -1
  62. package/dist/create-config/inspection.cjs.map +1 -1
  63. package/dist/create-config/inspection.mjs +24 -3
  64. package/dist/create-config/inspection.mjs.map +1 -1
  65. package/dist/create-config/layout-name.cjs +1 -1
  66. package/dist/create-config/layout-name.mjs +1 -1
  67. package/dist/create-config/lazy-resource-layout.cjs +5 -5
  68. package/dist/create-config/lazy-resource-layout.cjs.map +1 -1
  69. package/dist/create-config/lazy-resource-layout.d.cts +2 -2
  70. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -1
  71. package/dist/create-config/lazy-resource-layout.d.mts +2 -2
  72. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -1
  73. package/dist/create-config/lazy-resource-layout.mjs +5 -5
  74. package/dist/create-config/lazy-resource-layout.mjs.map +1 -1
  75. package/dist/create-config/render-state.cjs +3 -2
  76. package/dist/create-config/render-state.cjs.map +1 -1
  77. package/dist/create-config/render-state.d.cts +27 -25
  78. package/dist/create-config/render-state.d.cts.map +1 -1
  79. package/dist/create-config/render-state.d.mts +27 -25
  80. package/dist/create-config/render-state.d.mts.map +1 -1
  81. package/dist/create-config/render-state.mjs +3 -2
  82. package/dist/create-config/render-state.mjs.map +1 -1
  83. package/dist/create-config/state-composable.cjs +1 -1
  84. package/dist/create-config/state-composable.mjs +1 -1
  85. package/dist/custom-props.cjs +15 -0
  86. package/dist/custom-props.cjs.map +1 -0
  87. package/dist/custom-props.d.cts +17 -0
  88. package/dist/custom-props.d.cts.map +1 -0
  89. package/dist/custom-props.d.mts +17 -0
  90. package/dist/custom-props.d.mts.map +1 -0
  91. package/dist/custom-props.mjs +15 -0
  92. package/dist/custom-props.mjs.map +1 -0
  93. package/dist/errors/react-layout-error.cjs +1 -1
  94. package/dist/errors/react-layout-error.mjs +1 -1
  95. package/dist/index.cjs +3 -3
  96. package/dist/index.d.cts +3 -1
  97. package/dist/index.d.mts +3 -1
  98. package/dist/index.mjs +3 -3
  99. package/dist/lazy/create-lazy-loader.cjs +30 -9
  100. package/dist/lazy/create-lazy-loader.cjs.map +1 -1
  101. package/dist/lazy/create-lazy-loader.mjs +31 -10
  102. package/dist/lazy/create-lazy-loader.mjs.map +1 -1
  103. package/dist/lazy/create-render-state.cjs.map +1 -1
  104. package/dist/lazy/create-render-state.d.cts +5 -5
  105. package/dist/lazy/create-render-state.d.cts.map +1 -1
  106. package/dist/lazy/create-render-state.d.mts +5 -5
  107. package/dist/lazy/create-render-state.d.mts.map +1 -1
  108. package/dist/lazy/create-render-state.mjs.map +1 -1
  109. package/dist/lazy/lazy-boundary.cjs +1 -1
  110. package/dist/lazy/lazy-boundary.mjs +1 -1
  111. package/dist/lazy/types.cjs.map +1 -1
  112. package/dist/lazy/types.d.cts +5 -4
  113. package/dist/lazy/types.d.cts.map +1 -1
  114. package/dist/lazy/types.d.mts +5 -4
  115. package/dist/lazy/types.d.mts.map +1 -1
  116. package/dist/lazy/types.mjs.map +1 -1
  117. package/dist/props.cjs.map +1 -1
  118. package/dist/props.d.cts +4 -3
  119. package/dist/props.d.cts.map +1 -1
  120. package/dist/props.d.mts +4 -3
  121. package/dist/props.d.mts.map +1 -1
  122. package/dist/props.mjs.map +1 -1
  123. package/dist/resource.d.cts +1 -1
  124. package/dist/resource.d.mts +1 -1
  125. package/package.json +5 -5
@@ -0,0 +1,41 @@
1
+ import { ResourceDefinition, ResourceEnum } from "../resource.cjs";
2
+ import { InPropsDefinition, InPropsObject, InferredInProps } from "../props.cjs";
3
+ import { AnyBuiltPropDefinition, ExtractDefinitionValue, ResolvedBuiltPropShape } from "@jfdevelops/react-layout-validator";
4
+
5
+ //#region src/create-config/create-reusable.d.ts
6
+ /** Object definitions can be selected recursively; other definitions are leaves. */
7
+ type ReusableOptionSelection<Props extends InPropsObject> = { [Key in keyof Props]?: Props[Key] extends {
8
+ type: 'object';
9
+ properties: infer Shape extends InPropsObject;
10
+ } ? true | ReusableOptionSelection<Shape> : true };
11
+ type OptionDefinitions<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = InferredInProps<Resources, Options> extends infer Props extends InPropsObject ? Props : never;
12
+ /** Only data sources declared by the factory are available for selection. */
13
+ type ReusableInclude<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = {
14
+ resources?: true;
15
+ } & (keyof OptionDefinitions<Resources, Options> extends never ? {} : {
16
+ options?: true | ReusableOptionSelection<OptionDefinitions<Resources, Options>>;
17
+ });
18
+ type SelectedOptionValue<Definition extends AnyBuiltPropDefinition, Selection> = Selection extends true ? ExtractDefinitionValue<Definition> : Definition extends {
19
+ properties: infer Shape extends InPropsObject;
20
+ } ? SelectedOptionProps<Shape, Selection> : never;
21
+ type SelectedOptionProps<Props extends InPropsObject, Selection> = { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'required' ? Key : never]: SelectedOptionValue<Props[Key], Selection[Key]> } & { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'optional' ? Key : never]?: SelectedOptionValue<Props[Key], Selection[Key]> };
22
+ /** Options are flattened one level, so `options: { meta: true }` supplies `meta`. */
23
+ type ReusableProps<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>, Include, Custom extends InPropsObject> = (Include extends {
24
+ resources: true;
25
+ } ? {
26
+ resources: ResourceEnum<Resources>[number][];
27
+ } : {}) & (Include extends {
28
+ options: infer Selection;
29
+ } ? Selection extends true ? ResolvedBuiltPropShape<OptionDefinitions<Resources, Options>> : SelectedOptionProps<OptionDefinitions<Resources, Options>, Selection> : {}) & ResolvedBuiltPropShape<Custom>;
30
+ type ExactSelection<Selection, Allowed> = { [Key in keyof Selection]: Key extends keyof Allowed ? Selection[Key] extends object ? ExactSelection<Selection[Key], Exclude<Allowed[Key], true | undefined>> : Allowed[Key] : never };
31
+ /** Creates a validated ordinary function with the shared configuration's types. */
32
+ type CreateReusable<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = <const Include extends ReusableInclude<Resources, Options> = {}, const Custom extends InPropsObject = {}, Result = unknown>(definition: {
33
+ props?: {
34
+ include?: ReusableInclude<Resources, Options> & Include & ExactSelection<Include, ReusableInclude<Resources, Options>>;
35
+ custom?: Custom;
36
+ };
37
+ fn: (props: ReusableProps<Resources, Options, Include, Custom>) => Result;
38
+ }) => (...args: {} extends ReusableProps<Resources, Options, Include, Custom> ? [props?: ReusableProps<Resources, Options, Include, Custom>] : [props: ReusableProps<Resources, Options, Include, Custom>]) => Result;
39
+ //#endregion
40
+ export { CreateReusable, ReusableInclude, ReusableOptionSelection, ReusableProps };
41
+ //# sourceMappingURL=create-reusable.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-reusable.d.cts","names":[],"sources":["../../src/create-config/create-reusable.ts"],"mappings":";;;;;;KAgBY,uBAAA,eAAsC,aAAA,oBAClC,KAAA,IAAS,KAAA,CAAM,GAAA;EAC3B,IAAA;EACA,UAAA,sBAAgC,aAAA;AAAA,WAEvB,uBAAA,CAAwB,KAAA;AAAA,KAIhC,iBAAA,4BACwB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,KAChC,eAAA,CACF,SAAA,EACA,OAAA,8BAC4B,aAAA,GAC1B,KAAA;;KAIQ,eAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA;EAC9B,SAAA;AAAA,WAA4B,iBAAA,CAChC,SAAA,EACA,OAAA;EAII,OAAA,UAEI,uBAAA,CAAwB,iBAAA,CAAkB,SAAA,EAAW,OAAA;AAAA;AAAA,KAG1D,mBAAA,oBACgB,sBAAA,eAEjB,SAAA,gBACA,sBAAA,CAAuB,UAAA,IACvB,UAAA;EAAqB,UAAA,sBAAgC,aAAA;AAAA,IACrD,mBAAA,CAAoB,KAAA,EAAO,SAAA;AAAA,KAG1B,mBAAA,eAAkC,aAAA,+BACvB,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,WACQ,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA,uBAExC,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,YACS,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA;;KAI7C,aAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,2BAEnB,aAAA,KACZ,OAAA;EAAkB,SAAA;AAAA;EACjB,SAAA,EAAW,YAAA,CAAa,SAAA;AAAA,WAE3B,OAAA;EAAkB,OAAA;AAAA,IACf,SAAA,gBACE,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,EAAW,OAAA,KACpD,mBAAA,CAAoB,iBAAA,CAAkB,SAAA,EAAW,OAAA,GAAU,SAAA,UAEjE,sBAAA,CAAuB,MAAA;AAAA,KAGpB,cAAA,uCACW,SAAA,GAAY,GAAA,eAAkB,OAAA,GACxC,SAAA,CAAU,GAAA,mBACR,cAAA,CAAe,SAAA,CAAU,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,GAAA,wBAC/C,OAAA,CAAQ,GAAA;;KAKJ,cAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,4BAEZ,eAAA,CAAgB,SAAA,EAAW,OAAA,6BAC5B,aAAA,yBAErB,UAAA;EACA,KAAA;IACE,OAAA,GAAU,eAAA,CAAgB,SAAA,EAAW,OAAA,IACnC,OAAA,GACA,cAAA,CAAe,OAAA,EAAS,eAAA,CAAgB,SAAA,EAAW,OAAA;IACrD,MAAA,GAAS,MAAA;EAAA;EAEX,EAAA,GAAK,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MAAY,MAAA;AAAA,UAEhE,IAAA,aAAiB,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,KAC1D,KAAA,GAAQ,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MACnD,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,OACpD,MAAA"}
@@ -0,0 +1,41 @@
1
+ import { ResourceDefinition, ResourceEnum } from "../resource.mjs";
2
+ import { InPropsDefinition, InPropsObject, InferredInProps } from "../props.mjs";
3
+ import { AnyBuiltPropDefinition, ExtractDefinitionValue, ResolvedBuiltPropShape } from "@jfdevelops/react-layout-validator";
4
+
5
+ //#region src/create-config/create-reusable.d.ts
6
+ /** Object definitions can be selected recursively; other definitions are leaves. */
7
+ type ReusableOptionSelection<Props extends InPropsObject> = { [Key in keyof Props]?: Props[Key] extends {
8
+ type: 'object';
9
+ properties: infer Shape extends InPropsObject;
10
+ } ? true | ReusableOptionSelection<Shape> : true };
11
+ type OptionDefinitions<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = InferredInProps<Resources, Options> extends infer Props extends InPropsObject ? Props : never;
12
+ /** Only data sources declared by the factory are available for selection. */
13
+ type ReusableInclude<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = {
14
+ resources?: true;
15
+ } & (keyof OptionDefinitions<Resources, Options> extends never ? {} : {
16
+ options?: true | ReusableOptionSelection<OptionDefinitions<Resources, Options>>;
17
+ });
18
+ type SelectedOptionValue<Definition extends AnyBuiltPropDefinition, Selection> = Selection extends true ? ExtractDefinitionValue<Definition> : Definition extends {
19
+ properties: infer Shape extends InPropsObject;
20
+ } ? SelectedOptionProps<Shape, Selection> : never;
21
+ type SelectedOptionProps<Props extends InPropsObject, Selection> = { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'required' ? Key : never]: SelectedOptionValue<Props[Key], Selection[Key]> } & { [Key in keyof Props & keyof Selection as Props[Key]['visibility'] extends 'optional' ? Key : never]?: SelectedOptionValue<Props[Key], Selection[Key]> };
22
+ /** Options are flattened one level, so `options: { meta: true }` supplies `meta`. */
23
+ type ReusableProps<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>, Include, Custom extends InPropsObject> = (Include extends {
24
+ resources: true;
25
+ } ? {
26
+ resources: ResourceEnum<Resources>[number][];
27
+ } : {}) & (Include extends {
28
+ options: infer Selection;
29
+ } ? Selection extends true ? ResolvedBuiltPropShape<OptionDefinitions<Resources, Options>> : SelectedOptionProps<OptionDefinitions<Resources, Options>, Selection> : {}) & ResolvedBuiltPropShape<Custom>;
30
+ type ExactSelection<Selection, Allowed> = { [Key in keyof Selection]: Key extends keyof Allowed ? Selection[Key] extends object ? ExactSelection<Selection[Key], Exclude<Allowed[Key], true | undefined>> : Allowed[Key] : never };
31
+ /** Creates a validated ordinary function with the shared configuration's types. */
32
+ type CreateReusable<Resources extends readonly ResourceDefinition[], Options extends InPropsDefinition<Resources>> = <const Include extends ReusableInclude<Resources, Options> = {}, const Custom extends InPropsObject = {}, Result = unknown>(definition: {
33
+ props?: {
34
+ include?: ReusableInclude<Resources, Options> & Include & ExactSelection<Include, ReusableInclude<Resources, Options>>;
35
+ custom?: Custom;
36
+ };
37
+ fn: (props: ReusableProps<Resources, Options, Include, Custom>) => Result;
38
+ }) => (...args: {} extends ReusableProps<Resources, Options, Include, Custom> ? [props?: ReusableProps<Resources, Options, Include, Custom>] : [props: ReusableProps<Resources, Options, Include, Custom>]) => Result;
39
+ //#endregion
40
+ export { CreateReusable, ReusableInclude, ReusableOptionSelection, ReusableProps };
41
+ //# sourceMappingURL=create-reusable.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-reusable.d.mts","names":[],"sources":["../../src/create-config/create-reusable.ts"],"mappings":";;;;;;KAgBY,uBAAA,eAAsC,aAAA,oBAClC,KAAA,IAAS,KAAA,CAAM,GAAA;EAC3B,IAAA;EACA,UAAA,sBAAgC,aAAA;AAAA,WAEvB,uBAAA,CAAwB,KAAA;AAAA,KAIhC,iBAAA,4BACwB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,KAChC,eAAA,CACF,SAAA,EACA,OAAA,8BAC4B,aAAA,GAC1B,KAAA;;KAIQ,eAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA;EAC9B,SAAA;AAAA,WAA4B,iBAAA,CAChC,SAAA,EACA,OAAA;EAII,OAAA,UAEI,uBAAA,CAAwB,iBAAA,CAAkB,SAAA,EAAW,OAAA;AAAA;AAAA,KAG1D,mBAAA,oBACgB,sBAAA,eAEjB,SAAA,gBACA,sBAAA,CAAuB,UAAA,IACvB,UAAA;EAAqB,UAAA,sBAAgC,aAAA;AAAA,IACrD,mBAAA,CAAoB,KAAA,EAAO,SAAA;AAAA,KAG1B,mBAAA,eAAkC,aAAA,+BACvB,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,WACQ,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA,uBAExC,KAAA,SACN,SAAA,IAAa,KAAA,CAAM,GAAA,qCACvB,GAAA,YACS,mBAAA,CAAoB,KAAA,CAAM,GAAA,GAAM,SAAA,CAAU,GAAA;;KAI7C,aAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,2BAEnB,aAAA,KACZ,OAAA;EAAkB,SAAA;AAAA;EACjB,SAAA,EAAW,YAAA,CAAa,SAAA;AAAA,WAE3B,OAAA;EAAkB,OAAA;AAAA,IACf,SAAA,gBACE,sBAAA,CAAuB,iBAAA,CAAkB,SAAA,EAAW,OAAA,KACpD,mBAAA,CAAoB,iBAAA,CAAkB,SAAA,EAAW,OAAA,GAAU,SAAA,UAEjE,sBAAA,CAAuB,MAAA;AAAA,KAGpB,cAAA,uCACW,SAAA,GAAY,GAAA,eAAkB,OAAA,GACxC,SAAA,CAAU,GAAA,mBACR,cAAA,CAAe,SAAA,CAAU,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,GAAA,wBAC/C,OAAA,CAAQ,GAAA;;KAKJ,cAAA,4BACiB,kBAAA,oBACX,iBAAA,CAAkB,SAAA,4BAEZ,eAAA,CAAgB,SAAA,EAAW,OAAA,6BAC5B,aAAA,yBAErB,UAAA;EACA,KAAA;IACE,OAAA,GAAU,eAAA,CAAgB,SAAA,EAAW,OAAA,IACnC,OAAA,GACA,cAAA,CAAe,OAAA,EAAS,eAAA,CAAgB,SAAA,EAAW,OAAA;IACrD,MAAA,GAAS,MAAA;EAAA;EAEX,EAAA,GAAK,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MAAY,MAAA;AAAA,UAEhE,IAAA,aAAiB,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,KAC1D,KAAA,GAAQ,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,MACnD,KAAA,EAAO,aAAA,CAAc,SAAA,EAAW,OAAA,EAAS,OAAA,EAAS,MAAA,OACpD,MAAA"}
@@ -0,0 +1,49 @@
1
+ import { LayoutConfigurationError } from "../errors/layout-configuration-error.mjs";
2
+ import { createProp, validateProps } from "@jfdevelops/react-layout-validator";
3
+
4
+ //#region src/create-config/create-reusable.ts
5
+ function selectOptions(definitions, selection) {
6
+ const selected = {};
7
+ for (const [key, include] of Object.entries(selection)) {
8
+ const definition = definitions[key];
9
+ if (!Object.hasOwn(definitions, key)) throw new LayoutConfigurationError(`Unknown reusable option "${key}".`);
10
+ if (include === true) {
11
+ selected[key] = definition;
12
+ continue;
13
+ }
14
+ if (!include || typeof include !== "object" || !("properties" in definition) || !("type" in definition) || definition.type !== "object") throw new LayoutConfigurationError(`Invalid reusable selection for "${key}".`);
15
+ const nested = createProp.object(selectOptions(definition.properties, include));
16
+ selected[key] = definition.visibility === "optional" ? nested.optional() : nested;
17
+ }
18
+ return selected;
19
+ }
20
+ function createReusableBuilder(resources, options) {
21
+ const keys = resources.map((entry) => typeof entry === "string" ? entry : entry.value);
22
+ const resource = createProp.string.enum(keys);
23
+ function createReusable(definition) {
24
+ const include = definition.props?.include ?? {};
25
+ for (const key of Object.keys(include)) if (key !== "resources" && key !== "options") throw new LayoutConfigurationError(`Unknown reusable source "${key}".`);
26
+ const optionDefinitions = typeof options === "function" ? options({
27
+ name: createProp.string.literal("Reusable"),
28
+ resource
29
+ }) : options;
30
+ const definitions = { ...include.options === true ? optionDefinitions : include.options ? selectOptions(optionDefinitions, include.options) : {} };
31
+ if (include.resources) {
32
+ if (Object.hasOwn(definitions, "resources")) throw new LayoutConfigurationError("Reusable prop \"resources\" is selected more than once.");
33
+ definitions.resources = createProp.array(resource);
34
+ }
35
+ for (const [key, custom] of Object.entries(definition.props?.custom ?? {})) {
36
+ if (Object.hasOwn(definitions, key)) throw new LayoutConfigurationError(`Reusable prop "${key}" is selected more than once.`);
37
+ definitions[key] = custom;
38
+ }
39
+ return function reusable(props = {}) {
40
+ validateProps(definitions, props);
41
+ return definition.fn(props);
42
+ };
43
+ }
44
+ return createReusable;
45
+ }
46
+
47
+ //#endregion
48
+ export { createReusableBuilder };
49
+ //# sourceMappingURL=create-reusable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-reusable.mjs","names":[],"sources":["../../src/create-config/create-reusable.ts"],"sourcesContent":["import {\n createProp,\n validateProps,\n type AnyBuiltPropDefinition,\n type ExtractDefinitionValue,\n type ResolvedBuiltPropShape,\n} from '@jfdevelops/react-layout-validator';\nimport type {\n InferredInProps,\n InPropsDefinition,\n InPropsObject,\n} from '../props';\nimport type { ResourceDefinition, ResourceEnum } from '../resource';\nimport { LayoutConfigurationError } from '../errors';\n\n/** Object definitions can be selected recursively; other definitions are leaves. */\nexport type ReusableOptionSelection<Props extends InPropsObject> = {\n [Key in keyof Props]?: Props[Key] extends {\n type: 'object';\n properties: infer Shape extends InPropsObject;\n }\n ? true | ReusableOptionSelection<Shape>\n : true;\n};\n\ntype OptionDefinitions<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n> = InferredInProps<\n Resources,\n Options\n> extends infer Props extends InPropsObject\n ? Props\n : never;\n\n/** Only data sources declared by the factory are available for selection. */\nexport type ReusableInclude<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n> = { resources?: true } & (keyof OptionDefinitions<\n Resources,\n Options\n> extends never\n ? {}\n : {\n options?:\n | true\n | ReusableOptionSelection<OptionDefinitions<Resources, Options>>;\n });\n\ntype SelectedOptionValue<\n Definition extends AnyBuiltPropDefinition,\n Selection,\n> = Selection extends true\n ? ExtractDefinitionValue<Definition>\n : Definition extends { properties: infer Shape extends InPropsObject }\n ? SelectedOptionProps<Shape, Selection>\n : never;\n\ntype SelectedOptionProps<Props extends InPropsObject, Selection> = {\n [Key in keyof Props &\n keyof Selection as Props[Key]['visibility'] extends 'required'\n ? Key\n : never]: SelectedOptionValue<Props[Key], Selection[Key]>;\n} & {\n [Key in keyof Props &\n keyof Selection as Props[Key]['visibility'] extends 'optional'\n ? Key\n : never]?: SelectedOptionValue<Props[Key], Selection[Key]>;\n};\n\n/** Options are flattened one level, so `options: { meta: true }` supplies `meta`. */\nexport type ReusableProps<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n Include,\n Custom extends InPropsObject,\n> = (Include extends { resources: true }\n ? { resources: ResourceEnum<Resources>[number][] }\n : {}) &\n (Include extends { options: infer Selection }\n ? Selection extends true\n ? ResolvedBuiltPropShape<OptionDefinitions<Resources, Options>>\n : SelectedOptionProps<OptionDefinitions<Resources, Options>, Selection>\n : {}) &\n ResolvedBuiltPropShape<Custom>;\n\n// Generic constraints alone accept extra keys on structurally compatible objects.\ntype ExactSelection<Selection, Allowed> = {\n [Key in keyof Selection]: Key extends keyof Allowed\n ? Selection[Key] extends object\n ? ExactSelection<Selection[Key], Exclude<Allowed[Key], true | undefined>>\n : Allowed[Key]\n : never;\n};\n\n/** Creates a validated ordinary function with the shared configuration's types. */\nexport type CreateReusable<\n Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n> = <\n const Include extends ReusableInclude<Resources, Options> = {},\n const Custom extends InPropsObject = {},\n Result = unknown,\n>(definition: {\n props?: {\n include?: ReusableInclude<Resources, Options> &\n Include &\n ExactSelection<Include, ReusableInclude<Resources, Options>>;\n custom?: Custom;\n };\n fn: (props: ReusableProps<Resources, Options, Include, Custom>) => Result;\n}) => (\n ...args: {} extends ReusableProps<Resources, Options, Include, Custom>\n ? [props?: ReusableProps<Resources, Options, Include, Custom>]\n : [props: ReusableProps<Resources, Options, Include, Custom>]\n) => Result;\n\nfunction selectOptions(\n definitions: InPropsObject,\n selection: Record<string, unknown>,\n) {\n const selected: InPropsObject = {};\n for (const [key, include] of Object.entries(selection)) {\n const definition = definitions[key];\n if (!Object.hasOwn(definitions, key)) {\n throw new LayoutConfigurationError(`Unknown reusable option \"${key}\".`);\n }\n if (include === true) {\n selected[key] = definition;\n continue;\n }\n if (\n !include ||\n typeof include !== 'object' ||\n !('properties' in definition) ||\n !('type' in definition) ||\n definition.type !== 'object'\n ) {\n throw new LayoutConfigurationError(\n `Invalid reusable selection for \"${key}\".`,\n );\n }\n const nested = createProp.object(\n selectOptions(\n definition.properties as InPropsObject,\n include as Record<string, unknown>,\n ),\n );\n selected[key] =\n definition.visibility === 'optional' ? nested.optional() : nested;\n }\n return selected;\n}\n\nexport function createReusableBuilder<\n const Resources extends readonly ResourceDefinition[],\n Options extends InPropsDefinition<Resources>,\n>(resources: Resources, options: Options): CreateReusable<Resources, Options>;\nexport function createReusableBuilder(\n resources: readonly ResourceDefinition[],\n options: InPropsObject | ((...args: any[]) => InPropsObject),\n) {\n const keys = resources.map((entry) =>\n typeof entry === 'string' ? entry : entry.value,\n );\n const resource = createProp.string.enum(keys as [string, ...string[]]);\n\n function createReusable(definition: {\n props?: { include?: Record<string, unknown>; custom?: InPropsObject };\n fn: (props: Record<string, unknown>) => unknown;\n }) {\n const include = definition.props?.include ?? {};\n for (const key of Object.keys(include)) {\n if (key !== 'resources' && key !== 'options') {\n throw new LayoutConfigurationError(`Unknown reusable source \"${key}\".`);\n }\n }\n const optionDefinitions =\n typeof options === 'function'\n ? options({ name: createProp.string.literal('Reusable'), resource })\n : options;\n const selected =\n include.options === true\n ? optionDefinitions\n : include.options\n ? selectOptions(\n optionDefinitions,\n include.options as Record<string, unknown>,\n )\n : {};\n const definitions: InPropsObject = { ...selected };\n if (include.resources) {\n if (Object.hasOwn(definitions, 'resources')) {\n throw new LayoutConfigurationError(\n 'Reusable prop \"resources\" is selected more than once.',\n );\n }\n definitions.resources = createProp.array(resource);\n }\n for (const [key, custom] of Object.entries(\n definition.props?.custom ?? {},\n )) {\n if (Object.hasOwn(definitions, key)) {\n throw new LayoutConfigurationError(\n `Reusable prop \"${key}\" is selected more than once.`,\n );\n }\n definitions[key] = custom;\n }\n\n return function reusable(props: Record<string, unknown> = {}) {\n validateProps(definitions, props);\n return definition.fn(props);\n };\n }\n\n return createReusable as unknown;\n}\n"],"mappings":";;;;AAsHA,SAAS,cACP,aACA,WACA;CACA,MAAM,WAA0B,CAAC;CACjC,KAAK,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,GAAG;EACtD,MAAM,aAAa,YAAY;EAC/B,IAAI,CAAC,OAAO,OAAO,aAAa,GAAG,GACjC,MAAM,IAAI,yBAAyB,4BAA4B,IAAI,GAAG;EAExE,IAAI,YAAY,MAAM;GACpB,SAAS,OAAO;GAChB;EACF;EACA,IACE,CAAC,WACD,OAAO,YAAY,YACnB,EAAE,gBAAgB,eAClB,EAAE,UAAU,eACZ,WAAW,SAAS,UAEpB,MAAM,IAAI,yBACR,mCAAmC,IAAI,GACzC;EAEF,MAAM,SAAS,WAAW,OACxB,cACE,WAAW,YACX,OACF,CACF;EACA,SAAS,OACP,WAAW,eAAe,aAAa,OAAO,SAAS,IAAI;CAC/D;CACA,OAAO;AACT;AAMA,SAAgB,sBACd,WACA,SACA;CACA,MAAM,OAAO,UAAU,KAAK,UAC1B,OAAO,UAAU,WAAW,QAAQ,MAAM,KAC5C;CACA,MAAM,WAAW,WAAW,OAAO,KAAK,IAA6B;CAErE,SAAS,eAAe,YAGrB;EACD,MAAM,UAAU,WAAW,OAAO,WAAW,CAAC;EAC9C,KAAK,MAAM,OAAO,OAAO,KAAK,OAAO,GACnC,IAAI,QAAQ,eAAe,QAAQ,WACjC,MAAM,IAAI,yBAAyB,4BAA4B,IAAI,GAAG;EAG1E,MAAM,oBACJ,OAAO,YAAY,aACf,QAAQ;GAAE,MAAM,WAAW,OAAO,QAAQ,UAAU;GAAG;EAAS,CAAC,IACjE;EAUN,MAAM,cAA6B,EAAE,GARnC,QAAQ,YAAY,OAChB,oBACA,QAAQ,UACR,cACE,mBACA,QAAQ,OACV,IACA,CAAC,EAC0C;EACjD,IAAI,QAAQ,WAAW;GACrB,IAAI,OAAO,OAAO,aAAa,WAAW,GACxC,MAAM,IAAI,yBACR,yDACF;GAEF,YAAY,YAAY,WAAW,MAAM,QAAQ;EACnD;EACA,KAAK,MAAM,CAAC,KAAK,WAAW,OAAO,QACjC,WAAW,OAAO,UAAU,CAAC,CAC/B,GAAG;GACD,IAAI,OAAO,OAAO,aAAa,GAAG,GAChC,MAAM,IAAI,yBACR,kBAAkB,IAAI,8BACxB;GAEF,YAAY,OAAO;EACrB;EAEA,OAAO,SAAS,SAAS,QAAiC,CAAC,GAAG;GAC5D,cAAc,aAAa,KAAK;GAChC,OAAO,WAAW,GAAG,KAAK;EAC5B;CACF;CAEA,OAAO;AACT"}
@@ -1,12 +1,13 @@
1
- const require_render_state_context = require('./render-state-context.cjs');
1
+ const require_invalid_config = require('../errors/invalid-config.cjs');
2
+ const require_missing_resource_provider = require('../errors/missing-resource-provider.cjs');
2
3
  const require_layout_configuration_error = require('../errors/layout-configuration-error.cjs');
3
4
  const require_resource_state_error = require('../errors/resource-state-error.cjs');
4
5
  const require_lazy_resource_error = require('../errors/lazy-resource-error.cjs');
6
+ const require_custom_props = require('../custom-props.cjs');
7
+ const require_render_state_context = require('./render-state-context.cjs');
5
8
  const require_lazy_boundary = require('../lazy/lazy-boundary.cjs');
6
9
  const require_fallback_props = require('../lazy/fallback-props.cjs');
7
10
  const require_types = require('../lazy/types.cjs');
8
- const require_invalid_config = require('../errors/invalid-config.cjs');
9
- const require_missing_resource_provider = require('../errors/missing-resource-provider.cjs');
10
11
  const require_capitalize = require('../utils/capitalize.cjs');
11
12
  const require_state_composable = require('./state-composable.cjs');
12
13
  const require_merge_layout_props = require('./merge-layout-props.cjs');
@@ -23,10 +24,10 @@ const require_render_state = require('./render-state.cjs');
23
24
  const require_create_for_resources = require('./for-resources/create-for-resources.cjs');
24
25
  const require_shell_context = require('./shell-context.cjs');
25
26
  let _jfdevelops_react_layout_composables = require("@jfdevelops/react-layout-composables");
27
+ let _jfdevelops_react_layout_validator = require("@jfdevelops/react-layout-validator");
26
28
  let react = require("react");
27
29
  let react_jsx_runtime = require("react/jsx-runtime");
28
30
  let _jfdevelops_react_layout_devtools_core = require("@jfdevelops/react-layout-devtools-core");
29
- let _jfdevelops_react_layout_validator = require("@jfdevelops/react-layout-validator");
30
31
 
31
32
  //#region src/create-config/define-layout.tsx
32
33
  const RenderStateRetryContext = (0, react.createContext)(void 0);
@@ -131,6 +132,7 @@ function resolveLayoutOptionDefaults(defaults, options) {
131
132
  function optionalStateChildren(props) {
132
133
  if (!props) return props;
133
134
  const children = props.custom?.children;
135
+ const stateChildren = children && typeof children !== "string" && children.visibility === "required" && "optional" in children && typeof children.optional === "function" ? children.optional() : children;
134
136
  const childrenInclude = props.include?.children;
135
137
  return {
136
138
  ...props,
@@ -146,7 +148,7 @@ function optionalStateChildren(props) {
146
148
  },
147
149
  custom: props.custom && {
148
150
  ...props.custom,
149
- ...children ? { children: children.visibility === "required" ? children.optional?.() ?? children : children } : {}
151
+ ...children ? { children: stateChildren } : {}
150
152
  }
151
153
  };
152
154
  }
@@ -301,7 +303,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
301
303
  });
302
304
  const render = defaultState.render;
303
305
  const layoutProps = require_merge_layout_props.mergeLayoutProps(legacyLayoutProps, defaultState.props);
304
- const customLayoutProps = layoutProps?.custom;
306
+ const customLayoutProps = require_custom_props.normalizeCustomProps(layoutProps?.custom ?? {});
305
307
  const includeLayoutProps = layoutProps?.include;
306
308
  const layoutOptionValues = layoutOptionProps;
307
309
  const resolvedLayoutProps = { ...customLayoutProps };
@@ -367,10 +369,14 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
367
369
  value: state,
368
370
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CreatedDefaultStateComponent, { ...renderProps })
369
371
  });
370
- return render(renderProps, {
372
+ return require_inspection.markInspectionRoots(render(renderProps, {
371
373
  ...mergedRenderContext,
372
374
  state
373
- });
375
+ }), [
376
+ activeInspection.layout,
377
+ activeInspection.state,
378
+ ...resourceId ? [resourceId] : []
379
+ ]);
374
380
  }
375
381
  function Component(props) {
376
382
  const state = (0, react.useContext)(require_render_state_context.ReferencedRenderStateContext) ?? renderStateName;
@@ -525,10 +531,10 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
525
531
  ...composables?.(create, stateScope.states) ?? {},
526
532
  ...definition.composables?.(create, stateScope.states)
527
533
  }) : void 0;
528
- const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => definition.render(props, {
534
+ const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => require_inspection.markInspectionRoots(definition.render(props, {
529
535
  ...context,
530
536
  retry
531
- }) }) : definition.render;
537
+ }), [activeInspection.layout, ...inspectedState ? [inspectedState] : []]) }) : definition.render;
532
538
  const StateComponent = defineResourceLayoutImpl({
533
539
  resources,
534
540
  options: inProps,
@@ -662,7 +668,7 @@ function defineResourceLayoutImpl(options, inheritedStateScope, inheritedInspect
662
668
  for (const { props: presetPropDefinitions } of (0, _jfdevelops_react_layout_composables.collectComposablePresetEntries)(resolvedComposables)) Object.assign(resolvedInProps, presetPropDefinitions);
663
669
  return {
664
670
  ...resolvedInProps,
665
- ...require_merge_layout_props.mergeLayoutProps(layout.props, defaultState?.props)?.custom
671
+ ...require_custom_props.normalizeCustomProps(require_merge_layout_props.mergeLayoutProps(layout.props, defaultState?.props)?.custom ?? {})
666
672
  };
667
673
  }
668
674
  const { createLayoutForResourceBuilder, forResource } = require_for_resource.createForResource({
@@ -743,7 +749,7 @@ function createResourceLayoutShellComponent(resources, inProps, shell, shellId)
743
749
  }) : inProps);
744
750
  const includeShellProps = shell.props?.include;
745
751
  const includeShellPropKeys = Object.keys(includeShellProps ?? {});
746
- const shellCustomDefinitions = { ...shell.props?.custom ?? {} };
752
+ const shellCustomDefinitions = require_custom_props.normalizeCustomProps(shell.props?.custom ?? {});
747
753
  function syncShellComposableDisplayNames(stable, resource) {
748
754
  if (!shell.composables) return;
749
755
  const named = (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(shell.composables, {
@@ -830,6 +836,7 @@ function createResourceLayoutShellComponent(resources, inProps, shell, shellId)
830
836
  ...validatedCustomProps,
831
837
  ...renderIncludedProps
832
838
  };
839
+ if (typeof shell.props?.custom?.children !== "function") renderProps.children = outlet == null ? outlet : shellChildren;
833
840
  const renderContext = {
834
841
  composables: resolvedComposables,
835
842
  resource,