@jfdevelops/react-layout 0.24.3 → 1.0.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 (77) hide show
  1. package/dist/create-config/create-defined-resource-layout.cjs +72 -0
  2. package/dist/create-config/create-defined-resource-layout.cjs.map +1 -0
  3. package/dist/create-config/create-defined-resource-layout.d.cts +88 -0
  4. package/dist/create-config/create-defined-resource-layout.d.cts.map +1 -0
  5. package/dist/create-config/create-defined-resource-layout.d.mts +88 -0
  6. package/dist/create-config/create-defined-resource-layout.d.mts.map +1 -0
  7. package/dist/create-config/create-defined-resource-layout.mjs +72 -0
  8. package/dist/create-config/create-defined-resource-layout.mjs.map +1 -0
  9. package/dist/create-config/create-resource-links.cjs.map +1 -1
  10. package/dist/create-config/create-resource-links.d.cts +1 -1
  11. package/dist/create-config/create-resource-links.d.cts.map +1 -1
  12. package/dist/create-config/create-resource-links.d.mts +1 -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/define-layout.cjs +199 -9
  16. package/dist/create-config/define-layout.cjs.map +1 -1
  17. package/dist/create-config/define-layout.d.cts +172 -29
  18. package/dist/create-config/define-layout.d.cts.map +1 -1
  19. package/dist/create-config/define-layout.d.mts +172 -29
  20. package/dist/create-config/define-layout.d.mts.map +1 -1
  21. package/dist/create-config/define-layout.mjs +202 -13
  22. package/dist/create-config/define-layout.mjs.map +1 -1
  23. package/dist/create-config/for-resources/create-for-resources.cjs +7 -0
  24. package/dist/create-config/for-resources/create-for-resources.cjs.map +1 -1
  25. package/dist/create-config/for-resources/create-for-resources.mjs +7 -0
  26. package/dist/create-config/for-resources/create-for-resources.mjs.map +1 -1
  27. package/dist/create-config/get-component.cjs +22 -1
  28. package/dist/create-config/get-component.cjs.map +1 -1
  29. package/dist/create-config/get-component.d.cts +25 -3
  30. package/dist/create-config/get-component.d.cts.map +1 -1
  31. package/dist/create-config/get-component.d.mts +25 -3
  32. package/dist/create-config/get-component.d.mts.map +1 -1
  33. package/dist/create-config/get-component.mjs +22 -1
  34. package/dist/create-config/get-component.mjs.map +1 -1
  35. package/dist/create-config/index.d.cts +5 -2
  36. package/dist/create-config/index.d.mts +5 -2
  37. package/dist/create-config/lazy-resource-layout.cjs +111 -0
  38. package/dist/create-config/lazy-resource-layout.cjs.map +1 -0
  39. package/dist/create-config/lazy-resource-layout.d.cts +51 -0
  40. package/dist/create-config/lazy-resource-layout.d.cts.map +1 -0
  41. package/dist/create-config/lazy-resource-layout.d.mts +51 -0
  42. package/dist/create-config/lazy-resource-layout.d.mts.map +1 -0
  43. package/dist/create-config/lazy-resource-layout.mjs +111 -0
  44. package/dist/create-config/lazy-resource-layout.mjs.map +1 -0
  45. package/dist/create-config/render-state.cjs +62 -0
  46. package/dist/create-config/render-state.cjs.map +1 -0
  47. package/dist/create-config/render-state.d.cts +121 -0
  48. package/dist/create-config/render-state.d.cts.map +1 -0
  49. package/dist/create-config/render-state.d.mts +121 -0
  50. package/dist/create-config/render-state.d.mts.map +1 -0
  51. package/dist/create-config/render-state.mjs +55 -0
  52. package/dist/create-config/render-state.mjs.map +1 -0
  53. package/dist/errors/resource-state-error.cjs +29 -0
  54. package/dist/errors/resource-state-error.cjs.map +1 -0
  55. package/dist/errors/resource-state-error.d.cts +19 -0
  56. package/dist/errors/resource-state-error.d.cts.map +1 -0
  57. package/dist/errors/resource-state-error.d.mts +19 -0
  58. package/dist/errors/resource-state-error.d.mts.map +1 -0
  59. package/dist/errors/resource-state-error.mjs +27 -0
  60. package/dist/errors/resource-state-error.mjs.map +1 -0
  61. package/dist/index.cjs +6 -0
  62. package/dist/index.d.cts +9 -5
  63. package/dist/index.d.mts +9 -5
  64. package/dist/index.mjs +4 -2
  65. package/dist/props.d.cts +6 -1
  66. package/dist/props.d.cts.map +1 -1
  67. package/dist/props.d.mts +6 -1
  68. package/dist/props.d.mts.map +1 -1
  69. package/dist/resource.cjs +17 -0
  70. package/dist/resource.cjs.map +1 -1
  71. package/dist/resource.d.cts +33 -1
  72. package/dist/resource.d.cts.map +1 -1
  73. package/dist/resource.d.mts +33 -1
  74. package/dist/resource.d.mts.map +1 -1
  75. package/dist/resource.mjs +17 -1
  76. package/dist/resource.mjs.map +1 -1
  77. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"create-resource-links.d.cts","names":[],"sources":["../../src/create-config/create-resource-links.ts"],"mappings":"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"}
1
+ {"version":3,"file":"create-resource-links.d.cts","names":[],"sources":["../../src/create-config/create-resource-links.ts"],"mappings":"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"}
@@ -184,7 +184,7 @@ type CreateResourceLinksWithGroupsResult<Resources extends ReadonlyArray<Resourc
184
184
  *
185
185
  * @param resource The active resource key.
186
186
  */
187
- (resource: LayoutResourceKey<Resources>): ResolvedResourceLinksWithGroupsResult<Resources, Resource, GroupIcon, LinkIcon>;
187
+ <TargetResource extends LayoutResourceKey<Resources>>(resource: TargetResource): ResolvedResourceLinksWithGroupsResult<Resources, TargetResource, GroupIcon, LinkIcon>;
188
188
  /**
189
189
  * Creates a resource map for this layout. Same helper as
190
190
  * `createResourceLinks.createResourceMap`.
@@ -1 +1 @@
1
- {"version":3,"file":"create-resource-links.d.mts","names":[],"sources":["../../src/create-config/create-resource-links.ts"],"mappings":"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"}
1
+ {"version":3,"file":"create-resource-links.d.mts","names":[],"sources":["../../src/create-config/create-resource-links.ts"],"mappings":";;;;;;KAaY,oBAAA,6BACV,QAAA,EAAU,QAAQ;AAAA,KAGR,gBAAA,qCAER,oBAAoB,CAAC,QAAA;AAAA,KAEb,0BAAA,mBACQ,aAAA,CAAc,kBAAA,KAC9B,iBAAA,CAAkB,SAAA;AAAA,KAEV,cAAA,oBAAkC,QAAA,EAAU,QAAA,KAAa,SAAS;AAAA,KAElE,YAAA,mBAA+B,SAAA,GAAY,cAAA,CAAe,QAAA;AAAA,cAExD,uBAAA;AAAA,cACA,gCAAA;AAAA,KAET,uBAAA;EAAA,UACO,uBAAuB,GAAG,KAAA;AAAA;AAAA,KAGjC,gCAAA,cAA8C,WAAA;EAAA,UACvC,gCAAA,GAAmC,IAAA;AAAA;AAAA,KAGnC,wBAAA,eACV,UAAA,SAAmB,gCAAA,eACf,IAAA,GACA,UAAA,SAAmB,uBAAA,gBACjB,KAAA,GACA,UAAA,SAAmB,aAAA,8BACC,UAAA,GAAa,wBAAA,CAAyB,UAAA,CAAW,KAAA,OACnE,UAAA,kCACkB,UAAA,GAAa,wBAAA,CAAyB,UAAA,CAAW,GAAA,OACjE,UAAA;AAAA,UAEK,8BAAA,mBACG,aAAA,CAAc,kBAAA;EAEhC,QAAA,IAAY,uBAAA,CAAwB,iBAAA,CAAkB,SAAA;EACtD,IAAA,cAAkB,WAAA,GAAc,WAAA,KAAgB,gCAAA,CAAiC,IAAA;AAAA;AAAA,UAGlE,6BAAA,mBACG,aAAA,CAAc,kBAAA;EAGhC,MAAA,CACE,MAAA,GAAS,OAAA;IACP,QAAA,EAAU,6BAAA,CAA8B,SAAA;IACxC,KAAA,EAAO,wBAAA,CAAyB,UAAA;EAAA,MAC5B,SAAA,IAEN,KAAA,EAAO,wBAAA,CAAyB,UAAA,MAC7B,cAAA,CAAe,6BAAA,CAA8B,SAAA;AAAA;AAAA,UAGnC,oBAAA,mBACG,aAAA,CAAc,kBAAA;EAAA,cAElB,WAAA,GAAc,WAAA,EAC1B,MAAA,GAAS,OAAA;IACP,QAAA,EAAU,6BAAA,CAA8B,SAAA;IACxC,IAAA,EAAM,IAAA;EAAA,MACF,SAAA,IACJ,IAAA,EAAM,IAAA,KAAS,cAAA,CAAe,6BAAA,CAA8B,SAAA;EAChE,KAAA,aACE,WAAA,GACE,OAAA,EAAS,8BAAA,CAA+B,SAAA,MACrC,UAAA,GACJ,6BAAA,CAA8B,SAAA,EAAW,UAAA;AAAA;AAAA,UAE7B,yBAAA,mBACG,aAAA,CAAc,kBAAA,oBACf,0BAAA,CAA2B,SAAA,UACrC,YAAA,CAAa,6BAAA,CAA8B,SAAA;EAjExC;;;EAsEV,KAAA;EAtEyB;;;EA0EzB,UAAA,GAAa,SAAA;EA1E+D;AAAA;AAE9E;;EA6EE,IAAA,GAAO,IAAA;EA7EkC;;;;EAkFzC,IAAA,GAAO,gBAAA,CAAiB,QAAA;EAlFD;;;;;AAAqD;EAyF5E,IAAA,GAAO,gBAAA,CAAiB,QAAA;AAAA;AAAA,KAGd,wBAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,0BAAA,CAA2B,SAAA,IAAa,0BAAA,CAA2B,SAAA,UAC7E,YAAA,CAAa,6BAAA,CAA8B,SAAA,gBAE1C,QAAA,IAAY,yBAAA,CAClB,SAAA,EACA,GAAA,EACA,IAAA;AAAA,KAIQ,6BAAA,uCAEG,gBAAA,CAAiB,QAAA,KAC5B,IAAA,kBACA,IAAA,GACA,IAAA,SAAa,oBAAA,CAAqB,QAAA,IAChC,UAAA,CAAW,IAAA;AAAA,KAGL,mBAAA;;;AA9GiD;EAkH3D,IAAA;EAhH0B;;;EAoH1B,KAAK;AAAA;AAAA,KAGK,uBAAA,iCAEH,YAAA;EAEP,UAAA,GAAa,SAAA;EACb,IAAA,EAAM,mBAAA;EACN,KAAA;EACA,QAAA,EAAU,QAAA;EACV,IAAA,EAAM,IAAA;AAAA;AAAA,KAEI,0BAAA,uCAEG,gBAAA,CAAiB,QAAA,UACvB,YAAA,IACL,IAAA,CAAK,uBAAA,CAAwB,QAAA,EAAU,IAAA;EACzC,IAAA,EAAM,mBAAA;IACJ,IAAA,EAAM,6BAAA,CAA8B,QAAA,EAAU,IAAA;EAAA;AAAA;AAAA,KAItC,mBAAA,mBACQ,aAAA,CAAc,kBAAA,kBAEzB,YAAA,yBAEY,MAAA,KAAW,QAAA,SAAiB,0BAAA,CAA2B,SAAA,IACtE,MAAA,CAAO,QAAA;EACL,IAAA,qBAAyB,gBAAA,CAAiB,QAAA;AAAA,IAE1C,0BAAA,CAA2B,QAAA,EAAU,IAAA,EAAM,IAAA,IAC3C,uBAAA,CAAwB,QAAA,EAAU,IAAA,kBAElC,MAAA;AAAA,KAEH,sBAAA,gCACgB,MAAA,0BAAgC,WAAA,CACjD,MAAA,CAAO,QAAA,KAEL,WAAA,CAAY,MAAA,CAAO,QAAA;EAAqB,IAAA;AAAA,IACtC,IAAA,yBAGA,MAAA;AAAA,UAES,qBAAA,mBACG,aAAA,CAAc,kBAAA;EAAA,wBAGP,0BAAA,CAA2B,SAAA,gCAGlD,MAAA,EAAQ,wBAAA,CAAyB,SAAA,EAAW,QAAA,IAAY,MAAA,GACvD,KAAA,CACD,mBAAA,CACE,SAAA,EACA,MAAA,EACA,sBAAA,CAAuB,MAAA;EAG3B,iBAAA,EAAmB,mBAAA,CAAoB,SAAA;EACvC,UAAA,EAAY,oBAAA,CAAqB,SAAA;EACjC,UAAA,EAAY,+BAAA,CAAgC,SAAA;AAAA;AAAA,UAG7B,8BAAA,mBACG,aAAA,CAAc,kBAAA,0BAE9B,wBAAA,CAAyB,SAAA,UACpB,YAAA,CAAa,6BAAA,CAA8B,SAAA;EA7KX;;;;;;;;EAuLvC,EAAA;EA7LmC;;;EAiMnC,KAAA;EA/LI;;;EAmMJ,UAAA,GAAa,SAAA;EAjMP;;;;EAsMN,IAAA,GAAO,IAAA;EApMgC;;;EAwMvC,KAAA,EAAO,KAAA;AAAA;AAAA,KAGG,4BAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,0BAAA,CAA2B,SAAA,IAAa,0BAAA,CAA2B,SAAA,UAC7E,YAAA,CAAa,6BAAA,CAA8B,SAAA,MAChD,8BAAA,CACF,SAAA,EACA,wBAAA,CAAyB,SAAA,EAAW,QAAA,EAAU,IAAA,GAC9C,IAAA;AAAA,KAGG,yBAAA,gBAAyC,aAAA,aAC5C,MAAA,+BACI,KAAA;EAAgB,KAAA;AAAA,IACd,OAAA,OAAc,KAAA;AAAA,KAIjB,qBAAA,gBAAqC,aAAA,aACxC,MAAA,oDACyB,KAAA,GACnB,KAAA;EAAgB,IAAA;AAAA,IACd,IAAA;AAAA,KAKL,yBAAA,gBAAyC,aAAA,aAC5C,MAAA,+BACI,KAAA;EAAgB,KAAA;AAAA,IACd,sBAAA,CAAuB,KAAA;AAAA,KAInB,sBAAA,mBACQ,aAAA,CAAc,kBAAA,UACzB,YAAA,mBAEM,iBAAA,CAAkB,SAAA,IAC3B,uBAAA,CAAwB,QAAA,EAAU,IAAA,IAClC,0BAAA,CAA2B,QAAA,UAAkB,IAAA,IACjD,iBAAA,CAAkB,SAAA;AAAA,KAER,6BAAA,mBACQ,aAAA,CAAc,kBAAA,eACpB,YAAA,CAAa,6BAAA,CAA8B,SAAA,eAC5C,YAAA,CAAa,6BAAA,CAA8B,SAAA;EAEtD,UAAA,GAAa,SAAA;EACb,EAAA;EACA,KAAA;EACA,IAAA,EAAM,SAAA;EACN,KAAA,EAAO,KAAA,CAAM,sBAAA,CAAuB,SAAA,EAAW,QAAA;AAAA;AAAA,KAG5C,mBAAA,SAA4B,IAAA,cAAiB,IAAA,4BAC9C,MAAA,GACA,IAAI;AAAA,KAEI,+BAAA,mBACQ,aAAA,CAAc,kBAAA,eACpB,YAAA,CAAa,6BAAA,CAA8B,SAAA,eAC5C,YAAA,CAAa,6BAAA,CAA8B,SAAA,MACpD,IAAA,CACF,6BAAA,CAA8B,SAAA,EAAW,SAAA,EAAW,QAAA;EAGpD,IAAA,EAAM,mBAAA,CAAoB,SAAA;EAC1B,KAAA,EAAO,KAAA,CACL,IAAA,CAAK,sBAAA,CAAuB,SAAA,EAAW,QAAA;IACrC,IAAA,EAAM,mBAAA,CAAoB,QAAA;EAAA;AAAA;AAAA,KAKpB,iBAAA,mBACQ,aAAA,CAAc,kBAAA,YAE9B,OAAA,CAAQ,MAAA,CAAO,iBAAA,CAAkB,SAAA,GAAY,KAAA;AAAA,KAErC,gBAAA,gDAGR,QAAA,SAAiB,OAAA,OAAc,GAAA,YAAe,QAAA;AAAA,KAEtC,kBAAA,uBAAyC,GAAA;EACnD,eAAA,CAAgB,KAAA,YAAiB,KAAA,IAAS,OAAA,OAAc,GAAA;EACxD,GAAA,gCACE,QAAA,EAAU,gBAAA,CAAiB,QAAA,EAAU,GAAA,IACpC,GAAA,QAAW,QAAA;AAAA;AAAA,UAGC,mBAAA,mBACG,aAAA,CAAc,kBAAA;EA9RqD;AAAA;AAGvF;;;;EAHuF,mBAsSlE,iBAAA,CAAkB,SAAA,YACnC,GAAA,EAAK,GAAA,GACJ,kBAAA,CAAmB,GAAA;AAAA;AAAA,UAGP,+BAAA,mBACG,aAAA,CAAc,kBAAA;EAlSI;;;;;;EAAA,wBA2SX,0BAAA,CAA2B,SAAA,wBAC7B,aAAA,WAErB,MAAA,EAAQ,qBAAA,CACN,4BAAA,CAA6B,SAAA,EAAW,QAAA,KAExC,MAAA,GACD,mCAAA,CACD,SAAA,EACA,yBAAA,CAA0B,MAAA,GAC1B,qBAAA,CAAsB,MAAA,GACtB,yBAAA,CAA0B,MAAA;AAAA;AAAA,KAIlB,mCAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,0BAAA,CAA2B,SAAA,IAAa,0BAAA,CAA2B,SAAA,eACxE,YAAA,CAAa,6BAAA,CAA8B,SAAA,eAC5C,YAAA,CAAa,6BAAA,CAA8B,SAAA,MACpD,KAAA,CAAM,6BAAA,CAA8B,SAAA,EAAW,SAAA,EAAW,QAAA;EA3TzC;;;;;;;;EAAA,wBAoUK,iBAAA,CAAkB,SAAA,GACxC,QAAA,EAAU,cAAA,GACT,qCAAA,CACD,SAAA,EACA,cAAA,EACA,SAAA,EACA,QAAA;EA9UE;;;;;;;EAuVJ,iBAAA,EAAmB,mBAAA,CAAoB,SAAA;EApVrC;;;;;AACyD;AAG7D;;EAyVE,YAAA,iCACkC,iBAAA,CAAkB,SAAA,IAAa,QAAA,EAE/D,QAAA,EAAU,iBAAA,GACT,uBAAA,CACD,SAAA,EACA,QAAA,EACA,iBAAA,EACA,SAAA,EACA,QAAA;AAAA;AAAA,KAIQ,qCAAA,mBACQ,aAAA,CAAc,kBAAA,oBACf,0BAAA,CAA2B,SAAA,IAAa,0BAAA,CAA2B,SAAA,eACxE,YAAA,CAAa,6BAAA,CAA8B,SAAA,eAC5C,YAAA,CAAa,6BAAA,CAA8B,SAAA,MACpD,KAAA,CACF,+BAAA,CAAgC,SAAA,EAAW,SAAA,EAAW,QAAA;EAzWxC,iEA4Wd,YAAA,iCACkC,iBAAA,CAAkB,SAAA,IAAa,QAAA,EAE/D,QAAA,EAAU,iBAAA,GACT,+BAAA,CACD,SAAA,EACA,QAAA,EACA,iBAAA,EACA,SAAA,EACA,QAAA;AAAA;AAAA,KAIQ,uBAAA,mBACQ,aAAA,CAAc,kBAAA,kFAGpB,YAAA,CAAa,6BAAA,CAA8B,SAAA,eAC5C,YAAA,CAAa,6BAAA,CAA8B,SAAA,MACpD,iBAAA,mBACA,iBAAA,SAA0B,gBAAA,GACxB,6BAAA,CAA8B,SAAA,EAAW,SAAA,EAAW,QAAA;AAAA,KAI9C,+BAAA,mBACQ,aAAA,CAAc,kBAAA,kFAGpB,YAAA,CAAa,6BAAA,CAA8B,SAAA,eAC5C,YAAA,CAAa,6BAAA,CAA8B,SAAA,MACpD,iBAAA,mBACA,iBAAA,SAA0B,gBAAA,GACxB,+BAAA,CAAgC,SAAA,EAAW,SAAA,EAAW,QAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-resource-links.mjs","names":[],"sources":["../../src/create-config/create-resource-links.ts"],"sourcesContent":["import type { ElementType, ReactNode } from 'react';\nimport type { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport {\n createIsValidResourceFn,\n type LayoutResourceKey,\n type ResourceDefinition,\n} from '../resource';\nimport { LayoutConfigurationError } from '../errors';\nimport type {\n LayoutRenderResourcesAccessor,\n ResourceSelection,\n} from './define-layout';\n\nexport type ResourceAnchorLinkFn<Resource extends string> = (\n resource: Resource,\n) => string;\n\nexport type ResourceLinkHref<Resource extends string> =\n | string\n | ResourceAnchorLinkFn<Resource>;\n\nexport type ResourceLinkConfigResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = LayoutResourceKey<Resources> | (string & {});\n\nexport type ResourceIconFn<Resource = any> = (resource: Resource) => ReactNode;\n\nexport type ResourceIcon<Resource = any> = ReactNode | ResourceIconFn<Resource>;\n\ndeclare const resourceIconInputMarker: unique symbol;\ndeclare const resourceIconComponentInputMarker: unique symbol;\n\ntype ResourceIconInputMarker<Value> = {\n readonly [resourceIconInputMarker]: Value;\n};\n\ntype ResourceIconComponentInputMarker<Icon extends ElementType> = {\n readonly [resourceIconComponentInputMarker]: Icon;\n};\n\nexport type ResolveResourceIconInput<Definition> =\n Definition extends ResourceIconComponentInputMarker<infer Icon>\n ? Icon\n : Definition extends ResourceIconInputMarker<infer Value>\n ? Value\n : Definition extends ReadonlyArray<unknown>\n ? { [Index in keyof Definition]: ResolveResourceIconInput<Definition[Index]> }\n : Definition extends object\n ? { [Key in keyof Definition]: ResolveResourceIconInput<Definition[Key]> }\n : Definition;\n\nexport interface DefineResourceIconInputHelpers<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n resource(): ResourceIconInputMarker<LayoutResourceKey<Resources>>;\n icon<Icon extends ElementType = ElementType>(): ResourceIconComponentInputMarker<Icon>;\n}\n\nexport interface DefineResourceIconInputResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Definition,\n> {\n render(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n input: ResolveResourceIconInput<Definition>;\n }) => ReactNode,\n ): (\n input: ResolveResourceIconInput<Definition>,\n ) => ResourceIconFn<LayoutRenderResourcesAccessor<Resources>>;\n}\n\nexport interface DefineResourceIconFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n <Icon extends ElementType = ElementType>(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n Icon: Icon;\n }) => ReactNode,\n ): (Icon: Icon) => ResourceIconFn<LayoutRenderResourcesAccessor<Resources>>;\n input<Definition>(\n defineInput: (\n helpers: DefineResourceIconInputHelpers<Resources>,\n ) => Definition,\n ): DefineResourceIconInputResult<Resources, Definition>;\n}\nexport interface CreateResourceLinkOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> {\n /**\n * The label of the link. This is the text that will be displayed in the link.\n */\n label: string;\n /**\n * An optional icon to render when the link is active.\n */\n activeIcon?: ReactNode;\n /**\n * An optional icon to register with the link. This is a headless approach, meaning you have full control\n * over the icon's rendering.\n */\n icon?: Icon;\n /**\n * The href of the link. By default, the href will be `\"/\"`. While you **don't** need to include a hash,\n * if you do, it will override the `hash` property (if provided).\n */\n href?: ResourceLinkHref<Resource>;\n /**\n * The hash of the link. By default, the hash will be the resource name. If you need to customize it, you can provide\n * a string or a function that returns a string.\n *\n * @remarks A `\"#\"` is not required. The generated href will include it automatically.\n */\n hash?: ResourceLinkHref<Resource>;\n}\n\nexport type CreateResourceLinkConfig<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = {\n [Key in Resource]?: CreateResourceLinkOptions<\n Resources,\n Key,\n Icon\n >;\n};\n\nexport type InferHashFromResourceLinkHref<\n Resource extends string,\n Hash extends ResourceLinkHref<Resource>,\n> = Hash extends string\n ? Hash\n : Hash extends ResourceAnchorLinkFn<Resource>\n ? ReturnType<Hash>\n : never;\n\nexport type CreatedResourceHref = {\n /**\n * The full generated href with the `hash` if provided.\n */\n full: string;\n /**\n * The given href. This is the same value as the `href` property of the config.\n */\n given: string;\n};\n\nexport type CreatedResourceLinkBase<\n Resource extends string,\n Icon = ResourceIcon,\n> = {\n activeIcon?: ReactNode;\n href: CreatedResourceHref;\n label: string;\n resource: Resource;\n icon: Icon | null;\n};\nexport type CreateResourceLinkWithHash<\n Resource extends string,\n Hash extends ResourceLinkHref<Resource>,\n Icon = ResourceIcon,\n> = Omit<CreatedResourceLinkBase<Resource, Icon>, 'href'> & {\n href: CreatedResourceHref & {\n hash: InferHashFromResourceLinkHref<Resource, Hash>;\n };\n};\n\nexport type CreatedResourceLink<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Config,\n Icon = ResourceIcon,\n> = {\n [Resource in keyof Config]-?: Resource extends ResourceLinkConfigResource<Resources>\n ? Config[Resource] extends {\n hash: infer hash extends ResourceLinkHref<Resource>;\n }\n ? CreateResourceLinkWithHash<Resource, hash, Icon>\n : CreatedResourceLinkBase<Resource, Icon>\n : never;\n}[keyof Config];\n\ntype ResourceLinkConfigIcon<Config> = {\n [Resource in keyof Config]-?: 'icon' extends keyof NonNullable<\n Config[Resource]\n >\n ? NonNullable<Config[Resource]> extends { icon?: infer Icon }\n ? Icon\n : never\n : never;\n}[keyof Config];\n\nexport interface CreateResourceLinksFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n <\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Config extends object,\n >(\n config: CreateResourceLinkConfig<Resources, Resource> & Config,\n ): Array<\n CreatedResourceLink<\n Resources,\n Config,\n ResourceLinkConfigIcon<Config>\n >\n >;\n createResourceMap: CreateResourceMapFn<Resources>;\n defineIcon: DefineResourceIconFn<Resources>;\n withGroups: CreateResourceLinksWithGroupsFn<Resources>;\n}\n\nexport interface CreateResourceLinkGroupOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Links extends object =\n CreateResourceLinkConfig<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> {\n /**\n * An optional, caller-provided identity for the group. Provide this when you\n * combine groups from more than one `withGroups()` call into one list (e.g.\n * a module-owned nav section alongside a feature-owned one) — without it,\n * the id is derived from the group's `label` and its link resources, which\n * is enough to keep groups from a single call apart but can't distinguish\n * two independently-defined groups that happen to look identical.\n */\n id?: string;\n /**\n * The label of the group. This is the text that will be displayed for the group.\n */\n label?: string;\n /**\n * An optional icon to render when the group is active.\n */\n activeIcon?: ReactNode;\n /**\n * An optional icon to register with the group. This is a headless approach, meaning you have full control\n * over the icon's rendering.\n */\n icon?: Icon;\n /**\n * The resource links in this group.\n */\n links: Links;\n}\n\nexport type CreateResourceLinkGroupInput<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = CreateResourceLinkGroupOptions<\n Resources,\n CreateResourceLinkConfig<Resources, Resource, Icon>,\n Icon\n>;\n\ntype ResourceLinkGroupResource<Groups extends ReadonlyArray<unknown>> =\n Groups[number] extends infer Group\n ? Group extends { links: infer Links }\n ? Extract<keyof Links, string>\n : never\n : never;\n\ntype ResourceLinkGroupIcon<Groups extends ReadonlyArray<unknown>> =\n Groups[number] extends infer Group\n ? 'icon' extends keyof Group\n ? Group extends { icon?: infer Icon }\n ? Icon\n : never\n : never\n : never;\n\ntype ResourceLinkGroupLinkIcon<Groups extends ReadonlyArray<unknown>> =\n Groups[number] extends infer Group\n ? Group extends { links: infer Links }\n ? ResourceLinkConfigIcon<Links>\n : never\n : never;\n\nexport type AnyCreatedResourceLink<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Icon = ResourceIcon,\n> = {\n [Resource in LayoutResourceKey<Resources>]:\n | CreatedResourceLinkBase<Resource, Icon>\n | CreateResourceLinkWithHash<Resource, string, Icon>;\n}[LayoutResourceKey<Resources>];\n\nexport type CreateResourceLinksWithGroups<\n Resources extends ReadonlyArray<ResourceDefinition>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = {\n activeIcon?: ReactNode;\n id: string;\n label: string | null;\n icon: GroupIcon | null;\n links: Array<AnyCreatedResourceLink<Resources, LinkIcon>>;\n};\n\ntype ResolveResourceIcon<Icon> = Icon extends (...args: any[]) => infer Result\n ? Result\n : Icon;\n\nexport type ResolvedResourceLinksWithGroups<\n Resources extends ReadonlyArray<ResourceDefinition>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = Omit<\n CreateResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>,\n 'icon' | 'links'\n> & {\n icon: ResolveResourceIcon<GroupIcon> | null;\n links: Array<\n Omit<AnyCreatedResourceLink<Resources, LinkIcon>, 'icon'> & {\n icon: ResolveResourceIcon<LinkIcon> | null;\n }\n >;\n};\n\nexport type CreateResourceMap<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Value,\n> = Partial<Record<LayoutResourceKey<Resources>, Value>>;\n\nexport type ValidateResource<\n Resource extends string,\n Map extends object,\n> = Resource extends Extract<keyof Map, string> ? Resource : never;\n\nexport type CreatedResourceMap<Map extends object> = Map & {\n isValidResource(value: unknown): value is Extract<keyof Map, string>;\n get<const Resource extends string>(\n resource: ValidateResource<Resource, Map>,\n ): Map[typeof resource];\n};\n\nexport interface CreateResourceMapFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n /**\n * Creates a resource map for this layout.\n *\n * @param map Values keyed by this layout's resources. An unknown resource,\n * or a key that collides with a map helper, is rejected.\n */\n <const Map extends CreateResourceMap<Resources, unknown>>(\n map: Map,\n ): CreatedResourceMap<Map>;\n}\n\nexport interface CreateResourceLinksWithGroupsFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n /**\n * Groups resource links into sections.\n *\n * @param groups The sections to create. At least one is required. The link\n * keys in those sections are the resources `findResource` can resolve.\n */\n <\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Groups extends ReadonlyArray<unknown>,\n >(\n groups: NonEmptyReadonlyArray<\n CreateResourceLinkGroupInput<Resources, Resource>\n > &\n Groups,\n ): CreateResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n >;\n}\n\nexport type CreateResourceLinksWithGroupsResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = Array<CreateResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>> & {\n /**\n * Resolves each group's icon and its link icons for the active resource.\n *\n * Functional icons receive the resources accessor for `resource`. Read the\n * groups value directly when you do not need to resolve icons.\n *\n * @param resource The active resource key.\n */\n (\n resource: LayoutResourceKey<Resources>,\n ): ResolvedResourceLinksWithGroupsResult<\n Resources,\n Resource,\n GroupIcon,\n LinkIcon\n >;\n /**\n * Creates a resource map for this layout. Same helper as\n * `createResourceLinks.createResourceMap`.\n *\n * @param map Values keyed by this layout's resources. An unknown resource,\n * or a key that collides with a map helper, is rejected.\n */\n createResourceMap: CreateResourceMapFn<Resources>;\n /**\n * Returns the group whose links include `resource`.\n *\n * The result is `undefined` when that resource was not configured in any\n * group. A resource outside this layout is rejected by the type.\n *\n * @param resource The resource whose group should be returned.\n */\n findResource<\n const RequestedResource extends LayoutResourceKey<Resources> | Resource,\n >(\n resource: RequestedResource,\n ): FindResourceGroupResult<\n Resources,\n Resource,\n RequestedResource,\n GroupIcon,\n LinkIcon\n >;\n};\n\nexport type ResolvedResourceLinksWithGroupsResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = Array<\n ResolvedResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>\n> & {\n /** Returns the resolved group whose links include `resource`. */\n findResource<\n const RequestedResource extends LayoutResourceKey<Resources> | Resource,\n >(\n resource: RequestedResource,\n ): FindResolvedResourceGroupResult<\n Resources,\n Resource,\n RequestedResource,\n GroupIcon,\n LinkIcon\n >;\n};\n\nexport type FindResourceGroupResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n IncludedResource extends string,\n RequestedResource extends string,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = RequestedResource extends unknown\n ? RequestedResource extends IncludedResource\n ? CreateResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>\n : undefined\n : never;\n\nexport type FindResolvedResourceGroupResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n IncludedResource extends string,\n RequestedResource extends string,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = RequestedResource extends unknown\n ? RequestedResource extends IncludedResource\n ? ResolvedResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>\n : undefined\n : never;\n\nfunction resolveResourceLinkHref<Resource extends string>(\n value: ResourceLinkHref<Resource> | undefined,\n resource: Resource,\n fallback: string,\n) {\n return typeof value === 'function' ? value(resource) : (value ?? fallback);\n}\n\nfunction normalizeResourceLinkHash(hash: string) {\n return hash.replace(/^#+/, '');\n}\n\nfunction createFullResourceLinkHref(href: string, hash: string) {\n if (href.includes('#')) {\n return href;\n }\n\n return `${href}#${normalizeResourceLinkHash(hash)}`;\n}\n\nfunction createResourceLinksFromConfig<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources>,\n>(config: CreateResourceLinkConfig<Resources, Resource>) {\n return Object.entries(config).map(([resource, config]) => {\n if (!config) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"config\" is required for the ${resource} resource.`,\n );\n }\n\n if (typeof config !== 'object') {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"config\" must be an object for the ${resource} resource. Received ${typeof config}`,\n );\n }\n\n if (!('label' in config)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"label\" is required for the ${resource} resource.`,\n );\n }\n\n if (typeof config.label !== 'string') {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"label\" must be a string for the ${resource} resource. Received ${typeof config.label}`,\n );\n }\n\n const linkConfig = config as CreateResourceLinkOptions<\n Resources,\n typeof resource,\n ResourceIcon<LayoutRenderResourcesAccessor<Resources>>\n >;\n\n if (\n 'href' in linkConfig &&\n linkConfig.href !== undefined &&\n typeof linkConfig.href !== 'string' &&\n typeof linkConfig.href !== 'function'\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"href\" must be a string or function for the ${resource} resource. Received ${typeof linkConfig.href}`,\n );\n }\n\n if (\n 'hash' in linkConfig &&\n linkConfig.hash !== undefined &&\n typeof linkConfig.hash !== 'string' &&\n typeof linkConfig.hash !== 'function'\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"hash\" must be a string or function for the ${resource} resource. Received ${typeof linkConfig.hash}`,\n );\n }\n\n const givenHref = resolveResourceLinkHref(linkConfig.href, resource, '/');\n const givenHash = resolveResourceLinkHref(\n linkConfig.hash,\n resource,\n resource,\n );\n const href = {\n given: givenHref,\n full: createFullResourceLinkHref(givenHref, givenHash),\n ...(linkConfig.hash !== undefined && !givenHref.includes('#')\n ? { hash: normalizeResourceLinkHash(givenHash) }\n : {}),\n };\n\n return {\n ...(linkConfig.activeIcon !== undefined\n ? { activeIcon: linkConfig.activeIcon }\n : {}),\n href,\n label: config.label,\n resource,\n icon: 'icon' in config ? config.icon : null,\n };\n });\n}\n\n/**\n * Deterministic, not random: a random id (the previous implementation used\n * `crypto.randomUUID()` / `Math.random()`) would make `withGroups()` unsafe to\n * call from module scope — some runtimes (e.g. Cloudflare Workers) disallow\n * generating random values outside a request handler, and config arrays like\n * this are routinely defined as top-level constants.\n *\n * Falls back to the group's own shape — its `label` and its link resource\n * keys — rather than just the array index, so groups from *separate*\n * `withGroups()` calls that get concatenated into one list (a module-owned nav\n * section next to a feature-owned one, say) don't collide just because they're\n * both first in their own call. Two groups that are genuinely identical in\n * shape will still collide; pass an explicit `id` on the group to rule that\n * out entirely.\n */\nfunction createResourceLinkGroupId(\n group: { id?: unknown; label?: unknown; links: object },\n index: number,\n) {\n if (typeof group.id === 'string' && group.id.length > 0) {\n return group.id;\n }\n\n const label = typeof group.label === 'string' ? group.label : '';\n const linkKeys = Object.keys(group.links).join(',');\n return `group-${index}-${label}-${linkKeys}`;\n}\n\nfunction readResourceValue(resource: ResourceDefinition) {\n return typeof resource === 'string' ? resource : resource.value;\n}\n\nfunction createResourceSelection(\n definitions: ReadonlyArray<ResourceDefinition>,\n): ResourceSelection<ReadonlyArray<ResourceDefinition>> {\n const selection = (() => definitions) as ResourceSelection<\n ReadonlyArray<ResourceDefinition>\n >;\n\n selection.isResource = createIsValidResourceFn(definitions);\n\n return selection;\n}\n\nfunction createRenderResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources, current: LayoutResourceKey<Resources>) {\n const accessor = Object.assign(() => resources, {\n current,\n }) as LayoutRenderResourcesAccessor<Resources>;\n\n accessor.isResource = createIsValidResourceFn(resources);\n accessor.omit = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => !keys.includes(readResourceValue(resource))),\n )) as LayoutRenderResourcesAccessor<Resources>['omit'];\n accessor.pick = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => keys.includes(readResourceValue(resource))),\n )) as LayoutRenderResourcesAccessor<Resources>['pick'];\n\n return accessor;\n}\n\nfunction createResourceMapFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): CreateResourceMapFn<Resources> {\n const helperNames = new Set(['get', 'isValidResource']);\n const resourceKeys = new Set(\n resources.map((resource) =>\n typeof resource === 'string' ? resource : resource.value,\n ),\n );\n\n return function createResourceMap<\n const Map extends CreateResourceMap<Resources, unknown>,\n >(map: Map) {\n const configuredResources = Object.keys(map);\n\n for (const resource of configuredResources) {\n if (!resourceKeys.has(resource)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.createResourceMap]: unknown resource \"${resource}\".`,\n );\n }\n\n if (helperNames.has(resource)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.createResourceMap]: resource \"${resource}\" conflicts with a map helper.`,\n );\n }\n }\n\n const configuredResourceKeys = new Set(configuredResources);\n const resourceValues = new Map(\n configuredResources.map((resource) => [\n resource,\n (map as Record<string, unknown>)[resource],\n ]),\n );\n\n Object.defineProperties(map, {\n get: {\n value(resource: string) {\n return resourceValues.get(resource);\n },\n },\n isValidResource: {\n value(value: unknown): value is Extract<keyof Map, string> {\n return (\n typeof value === 'string' && configuredResourceKeys.has(value)\n );\n },\n },\n });\n\n return map as CreatedResourceMap<Map>;\n };\n}\n\nfunction createResourceLinksWithGroups<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources>,\n const Groups extends ReadonlyArray<unknown>,\n>(\n resources: Resources,\n createResourceMap: CreateResourceMapFn<Resources>,\n groups: ReadonlyArray<CreateResourceLinkGroupInput<Resources, Resource>> &\n Groups,\n): CreateResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n> {\n if (!Array.isArray(groups)) {\n throw new LayoutConfigurationError(\n '[createResourceLinks.withGroups]: \"groups\" must be an array.',\n );\n }\n\n if (groups.length === 0) {\n throw new LayoutConfigurationError(\n '[createResourceLinks.withGroups]: \"groups\" must include at least one group.',\n );\n }\n\n const createdGroups = groups.map((group, index) => {\n if (!group) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: group at index ${index} is required.`,\n );\n }\n\n if (typeof group !== 'object') {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: group at index ${index} must be an object. Received ${typeof group}`,\n );\n }\n\n if (\n 'label' in group &&\n group.label !== undefined &&\n typeof group.label !== 'string'\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"label\" must be a string for group at index ${index}. Received ${typeof group.label}`,\n );\n }\n\n if ('id' in group && group.id !== undefined && typeof group.id !== 'string') {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"id\" must be a string for group at index ${index}. Received ${typeof group.id}`,\n );\n }\n\n if (!('links' in group)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"links\" is required for group at index ${index}.`,\n );\n }\n\n if (\n typeof group.links !== 'object' ||\n group.links === null ||\n Array.isArray(group.links)\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"links\" must be an object for group at index ${index}. Received ${Array.isArray(group.links) ? 'array' : typeof group.links}`,\n );\n }\n\n return {\n ...(group.activeIcon !== undefined\n ? { activeIcon: group.activeIcon }\n : {}),\n id: createResourceLinkGroupId(group, index),\n label: 'label' in group ? (group.label ?? null) : null,\n icon: 'icon' in group ? group.icon : null,\n links: createResourceLinksFromConfig(group.links),\n };\n }) as Array<CreateResourceLinksWithGroups<Resources>>;\n\n function resolveGroups(resource?: LayoutResourceKey<Resources>) {\n if (resource === undefined) {\n throw new LayoutConfigurationError(\n '[createResourceLinks.withGroups]: \"resource\" is required.',\n );\n }\n\n const currentResources = createRenderResourcesAccessor(resources, resource);\n\n const resolvedGroups = createdGroups.map((group) => ({\n ...group,\n icon:\n typeof group.icon === 'function'\n ? group.icon(currentResources)\n : group.icon,\n links: group.links.map((link) => ({\n ...link,\n icon:\n typeof link.icon === 'function'\n ? link.icon(currentResources)\n : link.icon,\n })),\n }));\n\n Object.defineProperty(resolvedGroups, 'findResource', {\n value(requestedResource: ResourceLinkConfigResource<Resources>) {\n return resolvedGroups.find((group) =>\n group.links.some((link) => link.resource === requestedResource),\n );\n },\n });\n\n return resolvedGroups as ResolvedResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n >;\n }\n\n const callableGroups = new Proxy(resolveGroups, {\n get(target, property, receiver) {\n if (property === 'createResourceMap') {\n return createResourceMap;\n }\n\n if (property === Symbol.iterator) {\n return createdGroups[Symbol.iterator].bind(createdGroups);\n }\n\n if (property === 'toJSON') {\n return () => createdGroups;\n }\n\n if (property in createdGroups) {\n const value = Reflect.get(createdGroups, property);\n return typeof value === 'function' ? value.bind(createdGroups) : value;\n }\n\n return Reflect.get(target, property, receiver);\n },\n getOwnPropertyDescriptor(target, property) {\n return (\n Reflect.getOwnPropertyDescriptor(createdGroups, property) ??\n Reflect.getOwnPropertyDescriptor(target, property)\n );\n },\n getPrototypeOf() {\n return Array.prototype;\n },\n ownKeys(target) {\n return [\n ...new Set([\n ...Reflect.ownKeys(target),\n ...Reflect.ownKeys(createdGroups),\n ]),\n ];\n },\n set(target, property, value, receiver) {\n if (property in createdGroups || /^\\d+$/.test(String(property))) {\n return Reflect.set(createdGroups, property, value);\n }\n\n return Reflect.set(target, property, value, receiver);\n },\n });\n Object.defineProperty(createdGroups, 'findResource', {\n value(resource: ResourceLinkConfigResource<Resources>) {\n return createdGroups.find((group) =>\n group.links.some((link) => link.resource === resource),\n );\n },\n });\n\n return callableGroups as CreateResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n >;\n}\n\nfunction createDefineIcon<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(): DefineResourceIconFn<Resources> {\n function defineIcon<Icon extends ElementType = ElementType>(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n Icon: Icon;\n }) => ReactNode,\n ) {\n return function createIcon(Icon: Icon) {\n return function renderIcon(\n resource: LayoutRenderResourcesAccessor<Resources>,\n ) {\n return render({ resource, Icon });\n };\n };\n }\n\n defineIcon.input = function defineIconInput<Definition>(\n defineInput: (\n helpers: DefineResourceIconInputHelpers<Resources>,\n ) => Definition,\n ): DefineResourceIconInputResult<Resources, Definition> {\n const resourceMarker = {} as ResourceIconInputMarker<never>;\n const componentMarker = {} as ResourceIconComponentInputMarker<ElementType>;\n\n defineInput({\n resource() {\n return resourceMarker;\n },\n icon<Icon extends ElementType = ElementType>() {\n return componentMarker as ResourceIconComponentInputMarker<Icon>;\n },\n });\n\n return {\n render(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n input: ResolveResourceIconInput<Definition>;\n }) => ReactNode,\n ) {\n return function createIcon(\n input: ResolveResourceIconInput<Definition>,\n ) {\n return function renderIcon(\n resource: LayoutRenderResourcesAccessor<Resources>,\n ) {\n return render({ resource, input });\n };\n };\n },\n };\n };\n\n return defineIcon;\n}\n\nexport function createResourceLinksFn<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n>(_resources: Resources): CreateResourceLinksFn<Resources> {\n const createResourceMap = createResourceMapFn(_resources);\n const defineIcon = createDefineIcon<Resources>();\n\n function createResourceLinks<\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Config extends object,\n >(config: CreateResourceLinkConfig<Resources, Resource> & Config) {\n return createResourceLinksFromConfig(config);\n }\n\n function withGroups<\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Groups extends ReadonlyArray<unknown>,\n >(\n groups: NonEmptyReadonlyArray<\n CreateResourceLinkGroupInput<Resources, Resource>\n > &\n Groups,\n ) {\n return createResourceLinksWithGroups(_resources, createResourceMap, groups);\n }\n\n return Object.assign(createResourceLinks, {\n createResourceMap,\n defineIcon,\n withGroups,\n }) as CreateResourceLinksFn<Resources>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"create-resource-links.mjs","names":[],"sources":["../../src/create-config/create-resource-links.ts"],"sourcesContent":["import type { ElementType, ReactNode } from 'react';\nimport type { NonEmptyReadonlyArray } from '@jfdevelops/react-layout-validator';\nimport {\n createIsValidResourceFn,\n type LayoutResourceKey,\n type ResourceDefinition,\n} from '../resource';\nimport { LayoutConfigurationError } from '../errors';\nimport type {\n LayoutRenderResourcesAccessor,\n ResourceSelection,\n} from './define-layout';\n\nexport type ResourceAnchorLinkFn<Resource extends string> = (\n resource: Resource,\n) => string;\n\nexport type ResourceLinkHref<Resource extends string> =\n | string\n | ResourceAnchorLinkFn<Resource>;\n\nexport type ResourceLinkConfigResource<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> = LayoutResourceKey<Resources> | (string & {});\n\nexport type ResourceIconFn<Resource = any> = (resource: Resource) => ReactNode;\n\nexport type ResourceIcon<Resource = any> = ReactNode | ResourceIconFn<Resource>;\n\ndeclare const resourceIconInputMarker: unique symbol;\ndeclare const resourceIconComponentInputMarker: unique symbol;\n\ntype ResourceIconInputMarker<Value> = {\n readonly [resourceIconInputMarker]: Value;\n};\n\ntype ResourceIconComponentInputMarker<Icon extends ElementType> = {\n readonly [resourceIconComponentInputMarker]: Icon;\n};\n\nexport type ResolveResourceIconInput<Definition> =\n Definition extends ResourceIconComponentInputMarker<infer Icon>\n ? Icon\n : Definition extends ResourceIconInputMarker<infer Value>\n ? Value\n : Definition extends ReadonlyArray<unknown>\n ? { [Index in keyof Definition]: ResolveResourceIconInput<Definition[Index]> }\n : Definition extends object\n ? { [Key in keyof Definition]: ResolveResourceIconInput<Definition[Key]> }\n : Definition;\n\nexport interface DefineResourceIconInputHelpers<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n resource(): ResourceIconInputMarker<LayoutResourceKey<Resources>>;\n icon<Icon extends ElementType = ElementType>(): ResourceIconComponentInputMarker<Icon>;\n}\n\nexport interface DefineResourceIconInputResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Definition,\n> {\n render(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n input: ResolveResourceIconInput<Definition>;\n }) => ReactNode,\n ): (\n input: ResolveResourceIconInput<Definition>,\n ) => ResourceIconFn<LayoutRenderResourcesAccessor<Resources>>;\n}\n\nexport interface DefineResourceIconFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n <Icon extends ElementType = ElementType>(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n Icon: Icon;\n }) => ReactNode,\n ): (Icon: Icon) => ResourceIconFn<LayoutRenderResourcesAccessor<Resources>>;\n input<Definition>(\n defineInput: (\n helpers: DefineResourceIconInputHelpers<Resources>,\n ) => Definition,\n ): DefineResourceIconInputResult<Resources, Definition>;\n}\nexport interface CreateResourceLinkOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> {\n /**\n * The label of the link. This is the text that will be displayed in the link.\n */\n label: string;\n /**\n * An optional icon to render when the link is active.\n */\n activeIcon?: ReactNode;\n /**\n * An optional icon to register with the link. This is a headless approach, meaning you have full control\n * over the icon's rendering.\n */\n icon?: Icon;\n /**\n * The href of the link. By default, the href will be `\"/\"`. While you **don't** need to include a hash,\n * if you do, it will override the `hash` property (if provided).\n */\n href?: ResourceLinkHref<Resource>;\n /**\n * The hash of the link. By default, the hash will be the resource name. If you need to customize it, you can provide\n * a string or a function that returns a string.\n *\n * @remarks A `\"#\"` is not required. The generated href will include it automatically.\n */\n hash?: ResourceLinkHref<Resource>;\n}\n\nexport type CreateResourceLinkConfig<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = {\n [Key in Resource]?: CreateResourceLinkOptions<\n Resources,\n Key,\n Icon\n >;\n};\n\nexport type InferHashFromResourceLinkHref<\n Resource extends string,\n Hash extends ResourceLinkHref<Resource>,\n> = Hash extends string\n ? Hash\n : Hash extends ResourceAnchorLinkFn<Resource>\n ? ReturnType<Hash>\n : never;\n\nexport type CreatedResourceHref = {\n /**\n * The full generated href with the `hash` if provided.\n */\n full: string;\n /**\n * The given href. This is the same value as the `href` property of the config.\n */\n given: string;\n};\n\nexport type CreatedResourceLinkBase<\n Resource extends string,\n Icon = ResourceIcon,\n> = {\n activeIcon?: ReactNode;\n href: CreatedResourceHref;\n label: string;\n resource: Resource;\n icon: Icon | null;\n};\nexport type CreateResourceLinkWithHash<\n Resource extends string,\n Hash extends ResourceLinkHref<Resource>,\n Icon = ResourceIcon,\n> = Omit<CreatedResourceLinkBase<Resource, Icon>, 'href'> & {\n href: CreatedResourceHref & {\n hash: InferHashFromResourceLinkHref<Resource, Hash>;\n };\n};\n\nexport type CreatedResourceLink<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Config,\n Icon = ResourceIcon,\n> = {\n [Resource in keyof Config]-?: Resource extends ResourceLinkConfigResource<Resources>\n ? Config[Resource] extends {\n hash: infer hash extends ResourceLinkHref<Resource>;\n }\n ? CreateResourceLinkWithHash<Resource, hash, Icon>\n : CreatedResourceLinkBase<Resource, Icon>\n : never;\n}[keyof Config];\n\ntype ResourceLinkConfigIcon<Config> = {\n [Resource in keyof Config]-?: 'icon' extends keyof NonNullable<\n Config[Resource]\n >\n ? NonNullable<Config[Resource]> extends { icon?: infer Icon }\n ? Icon\n : never\n : never;\n}[keyof Config];\n\nexport interface CreateResourceLinksFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n <\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Config extends object,\n >(\n config: CreateResourceLinkConfig<Resources, Resource> & Config,\n ): Array<\n CreatedResourceLink<\n Resources,\n Config,\n ResourceLinkConfigIcon<Config>\n >\n >;\n createResourceMap: CreateResourceMapFn<Resources>;\n defineIcon: DefineResourceIconFn<Resources>;\n withGroups: CreateResourceLinksWithGroupsFn<Resources>;\n}\n\nexport interface CreateResourceLinkGroupOptions<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Links extends object =\n CreateResourceLinkConfig<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> {\n /**\n * An optional, caller-provided identity for the group. Provide this when you\n * combine groups from more than one `withGroups()` call into one list (e.g.\n * a module-owned nav section alongside a feature-owned one) — without it,\n * the id is derived from the group's `label` and its link resources, which\n * is enough to keep groups from a single call apart but can't distinguish\n * two independently-defined groups that happen to look identical.\n */\n id?: string;\n /**\n * The label of the group. This is the text that will be displayed for the group.\n */\n label?: string;\n /**\n * An optional icon to render when the group is active.\n */\n activeIcon?: ReactNode;\n /**\n * An optional icon to register with the group. This is a headless approach, meaning you have full control\n * over the icon's rendering.\n */\n icon?: Icon;\n /**\n * The resource links in this group.\n */\n links: Links;\n}\n\nexport type CreateResourceLinkGroupInput<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n Icon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = CreateResourceLinkGroupOptions<\n Resources,\n CreateResourceLinkConfig<Resources, Resource, Icon>,\n Icon\n>;\n\ntype ResourceLinkGroupResource<Groups extends ReadonlyArray<unknown>> =\n Groups[number] extends infer Group\n ? Group extends { links: infer Links }\n ? Extract<keyof Links, string>\n : never\n : never;\n\ntype ResourceLinkGroupIcon<Groups extends ReadonlyArray<unknown>> =\n Groups[number] extends infer Group\n ? 'icon' extends keyof Group\n ? Group extends { icon?: infer Icon }\n ? Icon\n : never\n : never\n : never;\n\ntype ResourceLinkGroupLinkIcon<Groups extends ReadonlyArray<unknown>> =\n Groups[number] extends infer Group\n ? Group extends { links: infer Links }\n ? ResourceLinkConfigIcon<Links>\n : never\n : never;\n\nexport type AnyCreatedResourceLink<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Icon = ResourceIcon,\n> = {\n [Resource in LayoutResourceKey<Resources>]:\n | CreatedResourceLinkBase<Resource, Icon>\n | CreateResourceLinkWithHash<Resource, string, Icon>;\n}[LayoutResourceKey<Resources>];\n\nexport type CreateResourceLinksWithGroups<\n Resources extends ReadonlyArray<ResourceDefinition>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = {\n activeIcon?: ReactNode;\n id: string;\n label: string | null;\n icon: GroupIcon | null;\n links: Array<AnyCreatedResourceLink<Resources, LinkIcon>>;\n};\n\ntype ResolveResourceIcon<Icon> = Icon extends (...args: any[]) => infer Result\n ? Result\n : Icon;\n\nexport type ResolvedResourceLinksWithGroups<\n Resources extends ReadonlyArray<ResourceDefinition>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = Omit<\n CreateResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>,\n 'icon' | 'links'\n> & {\n icon: ResolveResourceIcon<GroupIcon> | null;\n links: Array<\n Omit<AnyCreatedResourceLink<Resources, LinkIcon>, 'icon'> & {\n icon: ResolveResourceIcon<LinkIcon> | null;\n }\n >;\n};\n\nexport type CreateResourceMap<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Value,\n> = Partial<Record<LayoutResourceKey<Resources>, Value>>;\n\nexport type ValidateResource<\n Resource extends string,\n Map extends object,\n> = Resource extends Extract<keyof Map, string> ? Resource : never;\n\nexport type CreatedResourceMap<Map extends object> = Map & {\n isValidResource(value: unknown): value is Extract<keyof Map, string>;\n get<const Resource extends string>(\n resource: ValidateResource<Resource, Map>,\n ): Map[typeof resource];\n};\n\nexport interface CreateResourceMapFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n /**\n * Creates a resource map for this layout.\n *\n * @param map Values keyed by this layout's resources. An unknown resource,\n * or a key that collides with a map helper, is rejected.\n */\n <const Map extends CreateResourceMap<Resources, unknown>>(\n map: Map,\n ): CreatedResourceMap<Map>;\n}\n\nexport interface CreateResourceLinksWithGroupsFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n> {\n /**\n * Groups resource links into sections.\n *\n * @param groups The sections to create. At least one is required. The link\n * keys in those sections are the resources `findResource` can resolve.\n */\n <\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Groups extends ReadonlyArray<unknown>,\n >(\n groups: NonEmptyReadonlyArray<\n CreateResourceLinkGroupInput<Resources, Resource>\n > &\n Groups,\n ): CreateResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n >;\n}\n\nexport type CreateResourceLinksWithGroupsResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = Array<CreateResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>> & {\n /**\n * Resolves each group's icon and its link icons for the active resource.\n *\n * Functional icons receive the resources accessor for `resource`. Read the\n * groups value directly when you do not need to resolve icons.\n *\n * @param resource The active resource key.\n */\n <TargetResource extends LayoutResourceKey<Resources>>(\n resource: TargetResource,\n ): ResolvedResourceLinksWithGroupsResult<\n Resources,\n TargetResource,\n GroupIcon,\n LinkIcon\n >;\n /**\n * Creates a resource map for this layout. Same helper as\n * `createResourceLinks.createResourceMap`.\n *\n * @param map Values keyed by this layout's resources. An unknown resource,\n * or a key that collides with a map helper, is rejected.\n */\n createResourceMap: CreateResourceMapFn<Resources>;\n /**\n * Returns the group whose links include `resource`.\n *\n * The result is `undefined` when that resource was not configured in any\n * group. A resource outside this layout is rejected by the type.\n *\n * @param resource The resource whose group should be returned.\n */\n findResource<\n const RequestedResource extends LayoutResourceKey<Resources> | Resource,\n >(\n resource: RequestedResource,\n ): FindResourceGroupResult<\n Resources,\n Resource,\n RequestedResource,\n GroupIcon,\n LinkIcon\n >;\n};\n\nexport type ResolvedResourceLinksWithGroupsResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources> = ResourceLinkConfigResource<Resources>,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = Array<\n ResolvedResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>\n> & {\n /** Returns the resolved group whose links include `resource`. */\n findResource<\n const RequestedResource extends LayoutResourceKey<Resources> | Resource,\n >(\n resource: RequestedResource,\n ): FindResolvedResourceGroupResult<\n Resources,\n Resource,\n RequestedResource,\n GroupIcon,\n LinkIcon\n >;\n};\n\nexport type FindResourceGroupResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n IncludedResource extends string,\n RequestedResource extends string,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = RequestedResource extends unknown\n ? RequestedResource extends IncludedResource\n ? CreateResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>\n : undefined\n : never;\n\nexport type FindResolvedResourceGroupResult<\n Resources extends ReadonlyArray<ResourceDefinition>,\n IncludedResource extends string,\n RequestedResource extends string,\n GroupIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n LinkIcon = ResourceIcon<LayoutRenderResourcesAccessor<Resources>>,\n> = RequestedResource extends unknown\n ? RequestedResource extends IncludedResource\n ? ResolvedResourceLinksWithGroups<Resources, GroupIcon, LinkIcon>\n : undefined\n : never;\n\nfunction resolveResourceLinkHref<Resource extends string>(\n value: ResourceLinkHref<Resource> | undefined,\n resource: Resource,\n fallback: string,\n) {\n return typeof value === 'function' ? value(resource) : (value ?? fallback);\n}\n\nfunction normalizeResourceLinkHash(hash: string) {\n return hash.replace(/^#+/, '');\n}\n\nfunction createFullResourceLinkHref(href: string, hash: string) {\n if (href.includes('#')) {\n return href;\n }\n\n return `${href}#${normalizeResourceLinkHash(hash)}`;\n}\n\nfunction createResourceLinksFromConfig<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources>,\n>(config: CreateResourceLinkConfig<Resources, Resource>) {\n return Object.entries(config).map(([resource, config]) => {\n if (!config) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"config\" is required for the ${resource} resource.`,\n );\n }\n\n if (typeof config !== 'object') {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"config\" must be an object for the ${resource} resource. Received ${typeof config}`,\n );\n }\n\n if (!('label' in config)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"label\" is required for the ${resource} resource.`,\n );\n }\n\n if (typeof config.label !== 'string') {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"label\" must be a string for the ${resource} resource. Received ${typeof config.label}`,\n );\n }\n\n const linkConfig = config as CreateResourceLinkOptions<\n Resources,\n typeof resource,\n ResourceIcon<LayoutRenderResourcesAccessor<Resources>>\n >;\n\n if (\n 'href' in linkConfig &&\n linkConfig.href !== undefined &&\n typeof linkConfig.href !== 'string' &&\n typeof linkConfig.href !== 'function'\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"href\" must be a string or function for the ${resource} resource. Received ${typeof linkConfig.href}`,\n );\n }\n\n if (\n 'hash' in linkConfig &&\n linkConfig.hash !== undefined &&\n typeof linkConfig.hash !== 'string' &&\n typeof linkConfig.hash !== 'function'\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks]: \"hash\" must be a string or function for the ${resource} resource. Received ${typeof linkConfig.hash}`,\n );\n }\n\n const givenHref = resolveResourceLinkHref(linkConfig.href, resource, '/');\n const givenHash = resolveResourceLinkHref(\n linkConfig.hash,\n resource,\n resource,\n );\n const href = {\n given: givenHref,\n full: createFullResourceLinkHref(givenHref, givenHash),\n ...(linkConfig.hash !== undefined && !givenHref.includes('#')\n ? { hash: normalizeResourceLinkHash(givenHash) }\n : {}),\n };\n\n return {\n ...(linkConfig.activeIcon !== undefined\n ? { activeIcon: linkConfig.activeIcon }\n : {}),\n href,\n label: config.label,\n resource,\n icon: 'icon' in config ? config.icon : null,\n };\n });\n}\n\n/**\n * Deterministic, not random: a random id (the previous implementation used\n * `crypto.randomUUID()` / `Math.random()`) would make `withGroups()` unsafe to\n * call from module scope — some runtimes (e.g. Cloudflare Workers) disallow\n * generating random values outside a request handler, and config arrays like\n * this are routinely defined as top-level constants.\n *\n * Falls back to the group's own shape — its `label` and its link resource\n * keys — rather than just the array index, so groups from *separate*\n * `withGroups()` calls that get concatenated into one list (a module-owned nav\n * section next to a feature-owned one, say) don't collide just because they're\n * both first in their own call. Two groups that are genuinely identical in\n * shape will still collide; pass an explicit `id` on the group to rule that\n * out entirely.\n */\nfunction createResourceLinkGroupId(\n group: { id?: unknown; label?: unknown; links: object },\n index: number,\n) {\n if (typeof group.id === 'string' && group.id.length > 0) {\n return group.id;\n }\n\n const label = typeof group.label === 'string' ? group.label : '';\n const linkKeys = Object.keys(group.links).join(',');\n return `group-${index}-${label}-${linkKeys}`;\n}\n\nfunction readResourceValue(resource: ResourceDefinition) {\n return typeof resource === 'string' ? resource : resource.value;\n}\n\nfunction createResourceSelection(\n definitions: ReadonlyArray<ResourceDefinition>,\n): ResourceSelection<ReadonlyArray<ResourceDefinition>> {\n const selection = (() => definitions) as ResourceSelection<\n ReadonlyArray<ResourceDefinition>\n >;\n\n selection.isResource = createIsValidResourceFn(definitions);\n\n return selection;\n}\n\nfunction createRenderResourcesAccessor<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources, current: LayoutResourceKey<Resources>) {\n const accessor = Object.assign(() => resources, {\n current,\n }) as LayoutRenderResourcesAccessor<Resources>;\n\n accessor.isResource = createIsValidResourceFn(resources);\n accessor.omit = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => !keys.includes(readResourceValue(resource))),\n )) as LayoutRenderResourcesAccessor<Resources>['omit'];\n accessor.pick = ((...keys: string[]) =>\n createResourceSelection(\n resources.filter((resource) => keys.includes(readResourceValue(resource))),\n )) as LayoutRenderResourcesAccessor<Resources>['pick'];\n\n return accessor;\n}\n\nfunction createResourceMapFn<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(resources: Resources): CreateResourceMapFn<Resources> {\n const helperNames = new Set(['get', 'isValidResource']);\n const resourceKeys = new Set(\n resources.map((resource) =>\n typeof resource === 'string' ? resource : resource.value,\n ),\n );\n\n return function createResourceMap<\n const Map extends CreateResourceMap<Resources, unknown>,\n >(map: Map) {\n const configuredResources = Object.keys(map);\n\n for (const resource of configuredResources) {\n if (!resourceKeys.has(resource)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.createResourceMap]: unknown resource \"${resource}\".`,\n );\n }\n\n if (helperNames.has(resource)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.createResourceMap]: resource \"${resource}\" conflicts with a map helper.`,\n );\n }\n }\n\n const configuredResourceKeys = new Set(configuredResources);\n const resourceValues = new Map(\n configuredResources.map((resource) => [\n resource,\n (map as Record<string, unknown>)[resource],\n ]),\n );\n\n Object.defineProperties(map, {\n get: {\n value(resource: string) {\n return resourceValues.get(resource);\n },\n },\n isValidResource: {\n value(value: unknown): value is Extract<keyof Map, string> {\n return (\n typeof value === 'string' && configuredResourceKeys.has(value)\n );\n },\n },\n });\n\n return map as CreatedResourceMap<Map>;\n };\n}\n\nfunction createResourceLinksWithGroups<\n Resources extends ReadonlyArray<ResourceDefinition>,\n Resource extends ResourceLinkConfigResource<Resources>,\n const Groups extends ReadonlyArray<unknown>,\n>(\n resources: Resources,\n createResourceMap: CreateResourceMapFn<Resources>,\n groups: ReadonlyArray<CreateResourceLinkGroupInput<Resources, Resource>> &\n Groups,\n): CreateResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n> {\n if (!Array.isArray(groups)) {\n throw new LayoutConfigurationError(\n '[createResourceLinks.withGroups]: \"groups\" must be an array.',\n );\n }\n\n if (groups.length === 0) {\n throw new LayoutConfigurationError(\n '[createResourceLinks.withGroups]: \"groups\" must include at least one group.',\n );\n }\n\n const createdGroups = groups.map((group, index) => {\n if (!group) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: group at index ${index} is required.`,\n );\n }\n\n if (typeof group !== 'object') {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: group at index ${index} must be an object. Received ${typeof group}`,\n );\n }\n\n if (\n 'label' in group &&\n group.label !== undefined &&\n typeof group.label !== 'string'\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"label\" must be a string for group at index ${index}. Received ${typeof group.label}`,\n );\n }\n\n if ('id' in group && group.id !== undefined && typeof group.id !== 'string') {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"id\" must be a string for group at index ${index}. Received ${typeof group.id}`,\n );\n }\n\n if (!('links' in group)) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"links\" is required for group at index ${index}.`,\n );\n }\n\n if (\n typeof group.links !== 'object' ||\n group.links === null ||\n Array.isArray(group.links)\n ) {\n throw new LayoutConfigurationError(\n `[createResourceLinks.withGroups]: \"links\" must be an object for group at index ${index}. Received ${Array.isArray(group.links) ? 'array' : typeof group.links}`,\n );\n }\n\n return {\n ...(group.activeIcon !== undefined\n ? { activeIcon: group.activeIcon }\n : {}),\n id: createResourceLinkGroupId(group, index),\n label: 'label' in group ? (group.label ?? null) : null,\n icon: 'icon' in group ? group.icon : null,\n links: createResourceLinksFromConfig(group.links),\n };\n }) as Array<CreateResourceLinksWithGroups<Resources>>;\n\n function resolveGroups(resource?: LayoutResourceKey<Resources>) {\n if (resource === undefined) {\n throw new LayoutConfigurationError(\n '[createResourceLinks.withGroups]: \"resource\" is required.',\n );\n }\n\n const currentResources = createRenderResourcesAccessor(resources, resource);\n\n const resolvedGroups = createdGroups.map((group) => ({\n ...group,\n icon:\n typeof group.icon === 'function'\n ? group.icon(currentResources)\n : group.icon,\n links: group.links.map((link) => ({\n ...link,\n icon:\n typeof link.icon === 'function'\n ? link.icon(currentResources)\n : link.icon,\n })),\n }));\n\n Object.defineProperty(resolvedGroups, 'findResource', {\n value(requestedResource: ResourceLinkConfigResource<Resources>) {\n return resolvedGroups.find((group) =>\n group.links.some((link) => link.resource === requestedResource),\n );\n },\n });\n\n return resolvedGroups as ResolvedResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n >;\n }\n\n const callableGroups = new Proxy(resolveGroups, {\n get(target, property, receiver) {\n if (property === 'createResourceMap') {\n return createResourceMap;\n }\n\n if (property === Symbol.iterator) {\n return createdGroups[Symbol.iterator].bind(createdGroups);\n }\n\n if (property === 'toJSON') {\n return () => createdGroups;\n }\n\n if (property in createdGroups) {\n const value = Reflect.get(createdGroups, property);\n return typeof value === 'function' ? value.bind(createdGroups) : value;\n }\n\n return Reflect.get(target, property, receiver);\n },\n getOwnPropertyDescriptor(target, property) {\n return (\n Reflect.getOwnPropertyDescriptor(createdGroups, property) ??\n Reflect.getOwnPropertyDescriptor(target, property)\n );\n },\n getPrototypeOf() {\n return Array.prototype;\n },\n ownKeys(target) {\n return [\n ...new Set([\n ...Reflect.ownKeys(target),\n ...Reflect.ownKeys(createdGroups),\n ]),\n ];\n },\n set(target, property, value, receiver) {\n if (property in createdGroups || /^\\d+$/.test(String(property))) {\n return Reflect.set(createdGroups, property, value);\n }\n\n return Reflect.set(target, property, value, receiver);\n },\n });\n Object.defineProperty(createdGroups, 'findResource', {\n value(resource: ResourceLinkConfigResource<Resources>) {\n return createdGroups.find((group) =>\n group.links.some((link) => link.resource === resource),\n );\n },\n });\n\n return callableGroups as CreateResourceLinksWithGroupsResult<\n Resources,\n ResourceLinkGroupResource<Groups>,\n ResourceLinkGroupIcon<Groups>,\n ResourceLinkGroupLinkIcon<Groups>\n >;\n}\n\nfunction createDefineIcon<\n Resources extends ReadonlyArray<ResourceDefinition>,\n>(): DefineResourceIconFn<Resources> {\n function defineIcon<Icon extends ElementType = ElementType>(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n Icon: Icon;\n }) => ReactNode,\n ) {\n return function createIcon(Icon: Icon) {\n return function renderIcon(\n resource: LayoutRenderResourcesAccessor<Resources>,\n ) {\n return render({ resource, Icon });\n };\n };\n }\n\n defineIcon.input = function defineIconInput<Definition>(\n defineInput: (\n helpers: DefineResourceIconInputHelpers<Resources>,\n ) => Definition,\n ): DefineResourceIconInputResult<Resources, Definition> {\n const resourceMarker = {} as ResourceIconInputMarker<never>;\n const componentMarker = {} as ResourceIconComponentInputMarker<ElementType>;\n\n defineInput({\n resource() {\n return resourceMarker;\n },\n icon<Icon extends ElementType = ElementType>() {\n return componentMarker as ResourceIconComponentInputMarker<Icon>;\n },\n });\n\n return {\n render(\n render: (options: {\n resource: LayoutRenderResourcesAccessor<Resources>;\n input: ResolveResourceIconInput<Definition>;\n }) => ReactNode,\n ) {\n return function createIcon(\n input: ResolveResourceIconInput<Definition>,\n ) {\n return function renderIcon(\n resource: LayoutRenderResourcesAccessor<Resources>,\n ) {\n return render({ resource, input });\n };\n };\n },\n };\n };\n\n return defineIcon;\n}\n\nexport function createResourceLinksFn<\n const Resources extends ReadonlyArray<ResourceDefinition>,\n>(_resources: Resources): CreateResourceLinksFn<Resources> {\n const createResourceMap = createResourceMapFn(_resources);\n const defineIcon = createDefineIcon<Resources>();\n\n function createResourceLinks<\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Config extends object,\n >(config: CreateResourceLinkConfig<Resources, Resource> & Config) {\n return createResourceLinksFromConfig(config);\n }\n\n function withGroups<\n const Resource extends ResourceLinkConfigResource<Resources>,\n const Groups extends ReadonlyArray<unknown>,\n >(\n groups: NonEmptyReadonlyArray<\n CreateResourceLinkGroupInput<Resources, Resource>\n > &\n Groups,\n ) {\n return createResourceLinksWithGroups(_resources, createResourceMap, groups);\n }\n\n return Object.assign(createResourceLinks, {\n createResourceMap,\n defineIcon,\n withGroups,\n }) as CreateResourceLinksFn<Resources>;\n}\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  const require_invalid_config = require('../errors/invalid-config.cjs');
2
2
  const require_missing_resource_provider = require('../errors/missing-resource-provider.cjs');
3
3
  const require_layout_configuration_error = require('../errors/layout-configuration-error.cjs');
4
+ const require_resource_state_error = require('../errors/resource-state-error.cjs');
4
5
  const require_resource = require('../resource.cjs');
5
6
  const require_utils = require('../utils.cjs');
6
7
  const require_capitalize = require('../utils/capitalize.cjs');
@@ -10,19 +11,48 @@ const require_create_resource_links = require('./create-resource-links.cjs');
10
11
  const require_for_resource = require('./for-resource.cjs');
11
12
  const require_create_for_resources = require('./for-resources/create-for-resources.cjs');
12
13
  const require_shell_context = require('./shell-context.cjs');
14
+ const require_render_state = require('./render-state.cjs');
13
15
  let _jfdevelops_react_layout_composables = require("@jfdevelops/react-layout-composables");
14
16
  let react = require("react");
15
17
  let _jfdevelops_react_layout_validator = require("@jfdevelops/react-layout-validator");
16
18
  let react_jsx_runtime = require("react/jsx-runtime");
17
19
 
18
20
  //#region src/create-config/define-layout.tsx
21
+ const RenderStateRetryContext = (0, react.createContext)(void 0);
22
+ var RenderStateBoundary = class extends react.Component {
23
+ state = {};
24
+ static getDerivedStateFromError(error) {
25
+ return { error };
26
+ }
27
+ retry = () => {
28
+ this.props.onRetry?.();
29
+ this.setState({ error: void 0 });
30
+ };
31
+ render() {
32
+ if (this.state.error !== void 0) return this.props.fallback(this.state.error, this.retry);
33
+ return this.props.children;
34
+ }
35
+ };
36
+ function toResourceStateError(resource, state, error) {
37
+ return error instanceof require_resource_state_error.ResourceModuleLoadError || error instanceof require_resource_state_error.ResourceRenderError ? error : new require_resource_state_error.ResourceRenderError(resource, state, error);
38
+ }
19
39
  function createResourceSelection(definitions) {
20
40
  const selection = (() => definitions);
21
41
  selection.isResource = require_resource.createIsValidResourceFn(definitions);
22
42
  return selection;
23
43
  }
44
+ /**
45
+ * Creates the callable resource accessor shared by global and bound layout
46
+ * definitions.
47
+ *
48
+ * @param resources - Resource definitions to expose and normalize.
49
+ * @returns A callable normalized accessor with raw, selection, and guard APIs.
50
+ * @internal
51
+ */
24
52
  function createLayoutResourcesAccessor(resources) {
25
- const accessor = (() => resources);
53
+ const normalizedResources = require_resource.normalizeResourceDefinitions(resources);
54
+ const accessor = ((select) => select ? select(normalizedResources) : normalizedResources);
55
+ accessor.raw = ((select) => select ? select(resources) : resources);
26
56
  accessor.isResource = require_resource.createIsValidResourceFn(resources);
27
57
  accessor.omit = ((...keys) => createResourceSelection(resources.filter((resource) => !keys.includes(readResourceSlug(resource)))));
28
58
  accessor.pick = ((...keys) => createResourceSelection(resources.filter((resource) => keys.includes(readResourceSlug(resource)))));
@@ -88,6 +118,15 @@ function resolveLayoutOptionDefaults(defaults, options) {
88
118
  else resolved[key] = require_utils.functionalUpdate(defaultValue, options[key]);
89
119
  return resolved;
90
120
  }
121
+ function getSynchronousRenderStateDefinition(input, fallbackProps) {
122
+ if (require_render_state.isLazyRenderState(input)) return;
123
+ if (require_render_state.isDeferredRenderState(input)) return input[require_render_state.deferredRenderStateSymbol];
124
+ if (typeof input === "function") return {
125
+ props: fallbackProps,
126
+ render: input
127
+ };
128
+ return typeof input === "object" && input !== null ? input : void 0;
129
+ }
91
130
  function readResourceSlug(resource) {
92
131
  return typeof resource === "string" ? resource : resource.value;
93
132
  }
@@ -129,7 +168,15 @@ function defineResourceLayoutImpl(options) {
129
168
  ...instancePropDefinitions,
130
169
  ...layoutOptionProps
131
170
  });
132
- const { composables, render, props: layoutProps } = layout;
171
+ const { composables, props: legacyLayoutProps } = layout;
172
+ const renderStates = typeof layout.render === "function" ? { default: layout.render } : layout.render;
173
+ const defaultRenderInput = renderStates.default;
174
+ const createdDefaultState = require_render_state.isDeferredRenderState(defaultRenderInput) || require_render_state.isLazyRenderState(defaultRenderInput);
175
+ const defaultRenderDefinition = getSynchronousRenderStateDefinition(defaultRenderInput, legacyLayoutProps) ?? { render: () => null };
176
+ if (typeof defaultRenderDefinition !== "object" || defaultRenderDefinition === null || !("render" in defaultRenderDefinition) || typeof defaultRenderDefinition.render !== "function") throw new require_layout_configuration_error.LayoutConfigurationError("The \"default\" render state must define a render function");
177
+ const defaultState = defaultRenderDefinition;
178
+ const render = defaultState.render;
179
+ const layoutProps = defaultState.props ?? legacyLayoutProps;
133
180
  const customLayoutProps = layoutProps?.custom;
134
181
  const includeLayoutProps = layoutProps?.include;
135
182
  const layoutOptionValues = layoutOptionProps;
@@ -143,7 +190,11 @@ function defineResourceLayoutImpl(options) {
143
190
  layoutName: name,
144
191
  resource: layoutContext.resource
145
192
  };
146
- const resolvedComposables = composables ? (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(composables, layoutContext) : void 0;
193
+ const defaultComposables = defaultState.composables ? (create) => ({
194
+ ...composables?.(create) ?? {},
195
+ ...defaultState.composables?.(create)
196
+ }) : composables;
197
+ const resolvedComposables = defaultComposables ? (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(defaultComposables, layoutContext) : void 0;
147
198
  const mergedResolvedInProps = { ...resolvedInProps };
148
199
  for (const { props: presetPropDefinitions } of (0, _jfdevelops_react_layout_composables.collectComposablePresetEntries)(resolvedComposables)) Object.assign(mergedResolvedInProps, presetPropDefinitions);
149
200
  const composablePresetProps = Object.fromEntries((0, _jfdevelops_react_layout_composables.collectComposablePresetEntries)(resolvedComposables).map(({ key, props: presetPropDefinitions }) => {
@@ -160,6 +211,12 @@ function defineResourceLayoutImpl(options) {
160
211
  name: layoutContext.name,
161
212
  inProps: splitInProps
162
213
  };
214
+ const stateComponents = {};
215
+ let CreatedDefaultStateComponent;
216
+ function RenderDefaultState({ renderProps }) {
217
+ if (CreatedDefaultStateComponent) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CreatedDefaultStateComponent, { ...renderProps });
218
+ return render(renderProps, mergedRenderContext);
219
+ }
163
220
  function Component(props) {
164
221
  const publishResource = require_shell_context.useResourceLayoutShellPublisher();
165
222
  (0, react.useLayoutEffect)(() => {
@@ -193,26 +250,153 @@ function defineResourceLayoutImpl(options) {
193
250
  ...validatedProps,
194
251
  ...layoutRenderIncludedProps
195
252
  };
196
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResourceProvider, {
253
+ const rendered = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ResourceProvider, {
197
254
  resource: layoutContext.resource,
198
255
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_jfdevelops_react_layout_composables.LayoutComposablePresetProvider, {
199
256
  value: composablePresetProps,
200
- children: render(layoutRenderProps, mergedRenderContext)
257
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderDefaultState, { renderProps: layoutRenderProps })
201
258
  })
202
259
  });
260
+ const ErrorComponent = stateComponents.Error;
261
+ return ErrorComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateBoundary, {
262
+ fallback: (error, retry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Provider, {
263
+ value: retry,
264
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorComponent, {
265
+ error: toResourceStateError(String(layoutContext.resource), "default", error),
266
+ retry
267
+ })
268
+ }),
269
+ children: rendered
270
+ }) : rendered;
203
271
  }
204
272
  function createComposition(compositionOptions) {
205
273
  if (!compositionOptions.components) return {};
206
274
  return { makeComposable: createComposableLayout(compositionOptions) };
207
275
  }
208
- return Object.assign(Component, {
276
+ function createStateComponent(stateName, input) {
277
+ if (require_render_state.isLazyRenderState(input)) {
278
+ const loadState = input[require_render_state.lazyRenderStateSymbol];
279
+ function createLazyState() {
280
+ return (0, react.lazy)(async () => {
281
+ const stateDefinition = require_render_state.findDefinedRenderState(await loadState().catch((error) => {
282
+ throw new require_resource_state_error.ResourceModuleLoadError(String(layoutContext.resource), error);
283
+ }));
284
+ if (stateDefinition.state !== void 0 && stateDefinition.state !== stateName) throw new require_layout_configuration_error.LayoutConfigurationError(`Lazy render state "${stateDefinition.state}" cannot be used as "${stateName}"`);
285
+ return { default: createLoadedStateComponent(stateName, stateDefinition) };
286
+ });
287
+ }
288
+ function LazyStateComponent(props) {
289
+ const [, rerender] = (0, react.useReducer)((version) => version + 1, 0);
290
+ const LazyState = (0, react.useRef)(createLazyState());
291
+ const CurrentLazyState = LazyState.current;
292
+ const LoadingComponent = stateName === "Loading" ? void 0 : stateComponents.Loading;
293
+ const ErrorComponent = stateName === "Error" ? void 0 : stateComponents.Error;
294
+ function retry() {
295
+ LazyState.current = createLazyState();
296
+ rerender();
297
+ }
298
+ const rendered = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Suspense, {
299
+ fallback: LoadingComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LoadingComponent, {}) : null,
300
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CurrentLazyState, { ...props })
301
+ });
302
+ return ErrorComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateBoundary, {
303
+ fallback: (error, reset) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Provider, {
304
+ value: reset,
305
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorComponent, {
306
+ error: toResourceStateError(String(layoutContext.resource), stateName, error),
307
+ retry: reset
308
+ })
309
+ }),
310
+ onRetry: retry,
311
+ children: rendered
312
+ }) : rendered;
313
+ }
314
+ return LazyStateComponent;
315
+ }
316
+ const definition = require_render_state.isDeferredRenderState(input) ? input[require_render_state.deferredRenderStateSymbol] : typeof input === "function" ? { render: input } : input;
317
+ if (typeof definition !== "object" || definition === null || !("render" in definition) || typeof definition.render !== "function") throw new require_layout_configuration_error.LayoutConfigurationError(`Render state "${stateName}" must define a render function`);
318
+ const StateComponent = createLoadedStateComponent(stateName, definition);
319
+ if (!require_render_state.isDeferredRenderState(input)) return StateComponent;
320
+ const DeferredState = (0, react.lazy)(() => Promise.resolve({ default: StateComponent }));
321
+ function DeferredStateComponent(props) {
322
+ const LoadingComponent = stateName === "Loading" ? void 0 : stateComponents.Loading;
323
+ const ErrorComponent = stateName === "Error" ? void 0 : stateComponents.Error;
324
+ const rendered = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react.Suspense, {
325
+ fallback: LoadingComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LoadingComponent, {}) : null,
326
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DeferredState, { ...props })
327
+ });
328
+ return ErrorComponent ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateBoundary, {
329
+ fallback: (error, retry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Provider, {
330
+ value: retry,
331
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ErrorComponent, {
332
+ error: toResourceStateError(String(layoutContext.resource), stateName, error),
333
+ retry
334
+ })
335
+ }),
336
+ children: rendered
337
+ }) : rendered;
338
+ }
339
+ return DeferredStateComponent;
340
+ }
341
+ function createLoadedStateComponent(stateName, definition) {
342
+ const stateComposables = definition.composables ? (create) => ({
343
+ ...composables?.(create) ?? {},
344
+ ...definition.composables?.(create)
345
+ }) : composables;
346
+ const stateRender = stateName === "Error" ? (props, context) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(RenderStateRetryContext.Consumer, { children: (retry) => definition.render(props, {
347
+ ...context,
348
+ retry
349
+ }) }) : definition.render;
350
+ const StateComponent = defineResourceLayoutImpl({
351
+ resources,
352
+ options: inProps,
353
+ layout: {
354
+ composables: stateComposables,
355
+ props: definition.props,
356
+ render: stateRender
357
+ }
358
+ }).createResourceLayout(layoutOptions);
359
+ StateComponent.displayName = `${name}.${stateName}`;
360
+ return StateComponent;
361
+ }
362
+ if (createdDefaultState) CreatedDefaultStateComponent = createStateComponent("default", defaultRenderInput);
363
+ for (const [stateName, input] of Object.entries(renderStates)) {
364
+ if (stateName === "default") continue;
365
+ if ([
366
+ "__proto__",
367
+ "apply",
368
+ "arguments",
369
+ "bind",
370
+ "call",
371
+ "caller",
372
+ "displayName",
373
+ "length",
374
+ "makeComposable",
375
+ "name",
376
+ "props",
377
+ "prototype",
378
+ "resource"
379
+ ].includes(stateName)) throw new require_layout_configuration_error.LayoutConfigurationError(`Render state name "${stateName}" is reserved`);
380
+ stateComponents[stateName] = createStateComponent(stateName, input);
381
+ }
382
+ const includedComponentDefinitions = Object.fromEntries(Object.keys(includeLayoutProps ?? {}).flatMap((key) => {
383
+ if (!allowsComponentPassthrough(includeLayoutProps?.[key]) || !(key in mergedResolvedInProps)) return [];
384
+ const definition = mergedResolvedInProps[key];
385
+ return [[key, isIncludedPropRequired(includeLayoutProps?.[key]) ? definition : definition.optional?.() ?? definition]];
386
+ }));
387
+ return (0, _jfdevelops_react_layout_validator.attachComponentPropDefinitions)(Object.assign(Component, {
209
388
  displayName: name,
210
389
  props: void 0,
211
390
  resource: void 0,
212
391
  ...createComposition({
213
392
  components: resolvedComposables,
214
393
  name
215
- })
394
+ }),
395
+ ...stateComponents,
396
+ [require_render_state.definedResourceLayoutComponentSymbol]: true
397
+ }), {
398
+ ...customLayoutProps,
399
+ ...includedComponentDefinitions
216
400
  });
217
401
  });
218
402
  const createTopLevelMakeComposable = () => {
@@ -228,7 +412,12 @@ function defineResourceLayoutImpl(options) {
228
412
  resource: resourcesEnum,
229
413
  name: _jfdevelops_react_layout_validator.createProp.string().literal(componentName)
230
414
  }) : inProps);
231
- const resolvedComposables = layout.composables ? (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(layout.composables, {
415
+ const defaultState = getSynchronousRenderStateDefinition((typeof layout.render === "function" ? { default: layout.render } : layout.render).default, layout.props);
416
+ const defaultComposables = defaultState?.composables ? (create) => ({
417
+ ...layout.composables?.(create) ?? {},
418
+ ...defaultState.composables?.(create)
419
+ }) : layout.composables;
420
+ const resolvedComposables = defaultComposables ? (0, _jfdevelops_react_layout_composables.resolveLayoutComposables)(defaultComposables, {
232
421
  resource,
233
422
  name: componentName,
234
423
  capitalize: require_capitalize.capitalize
@@ -236,7 +425,7 @@ function defineResourceLayoutImpl(options) {
236
425
  for (const { props: presetPropDefinitions } of (0, _jfdevelops_react_layout_composables.collectComposablePresetEntries)(resolvedComposables)) Object.assign(resolvedInProps, presetPropDefinitions);
237
426
  return {
238
427
  ...resolvedInProps,
239
- ...layout.props?.custom
428
+ ...(defaultState?.props ?? layout.props)?.custom
240
429
  };
241
430
  }
242
431
  const { createLayoutForResourceBuilder, forResource } = require_for_resource.createForResource({
@@ -445,5 +634,6 @@ const defineResourceLayout = Object.assign(defineResourceLayoutImpl, {
445
634
  });
446
635
 
447
636
  //#endregion
637
+ exports.createLayoutResourcesAccessor = createLayoutResourcesAccessor;
448
638
  exports.defineResourceLayout = defineResourceLayout;
449
639
  //# sourceMappingURL=define-layout.cjs.map