@webiny/api-headless-cms 0.0.0-unstable.df7a8bb475 → 0.0.0-unstable.e2758ee1cf

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 (204) hide show
  1. package/constants.d.ts +2 -1
  2. package/constants.js +4 -0
  3. package/constants.js.map +1 -1
  4. package/crud/contentEntry/entryDataFactories/createEntryData.js +4 -3
  5. package/crud/contentEntry/entryDataFactories/createEntryData.js.map +1 -1
  6. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js +4 -3
  7. package/crud/contentEntry/entryDataFactories/createEntryRevisionFromData.js.map +1 -1
  8. package/crud/contentEntry/entryDataFactories/createPublishEntryData.js +4 -1
  9. package/crud/contentEntry/entryDataFactories/createPublishEntryData.js.map +1 -1
  10. package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js +4 -1
  11. package/crud/contentEntry/entryDataFactories/createRepublishEntryData.js.map +1 -1
  12. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js +2 -1
  13. package/crud/contentEntry/entryDataFactories/createUnpublishEntryData.js.map +1 -1
  14. package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js +4 -3
  15. package/crud/contentEntry/entryDataFactories/createUpdateEntryData.js.map +1 -1
  16. package/crud/contentEntry/entryDataFactories/system.d.ts +10 -0
  17. package/crud/contentEntry/entryDataFactories/system.js +14 -0
  18. package/crud/contentEntry/entryDataFactories/system.js.map +1 -0
  19. package/crud/contentEntry/searchableFields.js +6 -2
  20. package/crud/contentEntry/searchableFields.js.map +1 -1
  21. package/crud/contentModel/validation.d.ts +9 -9
  22. package/crud/contentModel/validation.js +3 -3
  23. package/crud/contentModel/validation.js.map +1 -1
  24. package/domain/contentModel/errors.d.ts +1 -1
  25. package/domain/contentModel/errors.js.map +1 -1
  26. package/domain/contentModel/schemas.d.ts +126 -8
  27. package/domain/contentModel/schemas.js +12 -13
  28. package/domain/contentModel/schemas.js.map +1 -1
  29. package/export/graphql/index.js +1 -1
  30. package/export/graphql/index.js.map +1 -1
  31. package/exports/api/cms/model.d.ts +1 -0
  32. package/exports/api/cms/model.js.map +1 -1
  33. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.d.ts +2 -2
  34. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js +3 -4
  35. package/features/contentEntry/GetUniqueFieldValues/GetUniqueFieldValuesUseCase.js.map +1 -1
  36. package/features/contentModel/CreateModel/CreateModelRepository.js +4 -1
  37. package/features/contentModel/CreateModel/CreateModelRepository.js.map +1 -1
  38. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js +12 -3
  39. package/features/contentModel/CreateModelFrom/CreateModelFromRepository.js.map +1 -1
  40. package/features/contentModel/UpdateModel/UpdateModelRepository.js +8 -2
  41. package/features/contentModel/UpdateModel/UpdateModelRepository.js.map +1 -1
  42. package/features/contentModel/UpdateModel/UpdateModelUseCase.js +4 -1
  43. package/features/contentModel/UpdateModel/UpdateModelUseCase.js.map +1 -1
  44. package/features/modelBuilder/feature.js +6 -0
  45. package/features/modelBuilder/feature.js.map +1 -1
  46. package/features/modelBuilder/fields/BaseFieldBuilder.d.ts +36 -0
  47. package/features/modelBuilder/fields/BaseFieldBuilder.js +41 -0
  48. package/features/modelBuilder/fields/BaseFieldBuilder.js.map +1 -0
  49. package/features/modelBuilder/fields/DataFieldBuilder.d.ts +228 -0
  50. package/features/modelBuilder/fields/DataFieldBuilder.js +219 -0
  51. package/features/modelBuilder/fields/DataFieldBuilder.js.map +1 -0
  52. package/features/modelBuilder/fields/DynamicZoneFieldType.d.ts +2 -2
  53. package/features/modelBuilder/fields/DynamicZoneFieldType.js +10 -3
  54. package/features/modelBuilder/fields/DynamicZoneFieldType.js.map +1 -1
  55. package/features/modelBuilder/fields/FieldBuilder.d.ts +5 -50
  56. package/features/modelBuilder/fields/FieldBuilder.js +3 -165
  57. package/features/modelBuilder/fields/FieldBuilder.js.map +1 -1
  58. package/features/modelBuilder/fields/FieldBuilderRegistry.js +11 -1
  59. package/features/modelBuilder/fields/FieldBuilderRegistry.js.map +1 -1
  60. package/features/modelBuilder/fields/LayoutFieldBuilder.d.ts +7 -0
  61. package/features/modelBuilder/fields/LayoutFieldBuilder.js +9 -0
  62. package/features/modelBuilder/fields/LayoutFieldBuilder.js.map +1 -0
  63. package/features/modelBuilder/fields/ObjectFieldType.d.ts +4 -3
  64. package/features/modelBuilder/fields/ObjectFieldType.js +19 -4
  65. package/features/modelBuilder/fields/ObjectFieldType.js.map +1 -1
  66. package/features/modelBuilder/fields/UiAlertFieldType.d.ts +19 -0
  67. package/features/modelBuilder/fields/UiAlertFieldType.js +36 -0
  68. package/features/modelBuilder/fields/UiAlertFieldType.js.map +1 -0
  69. package/features/modelBuilder/fields/UiSeparatorFieldType.d.ts +17 -0
  70. package/features/modelBuilder/fields/UiSeparatorFieldType.js +31 -0
  71. package/features/modelBuilder/fields/UiSeparatorFieldType.js.map +1 -0
  72. package/features/modelBuilder/fields/UiTabsFieldType.d.ts +28 -0
  73. package/features/modelBuilder/fields/UiTabsFieldType.js +75 -0
  74. package/features/modelBuilder/fields/UiTabsFieldType.js.map +1 -0
  75. package/features/modelBuilder/fields/abstractions.d.ts +2 -2
  76. package/features/modelBuilder/fields/abstractions.js.map +1 -1
  77. package/features/modelBuilder/index.d.ts +3 -0
  78. package/features/modelBuilder/index.js +3 -0
  79. package/features/modelBuilder/index.js.map +1 -1
  80. package/features/modelBuilder/models/BaseModelBuilder.d.ts +9 -4
  81. package/features/modelBuilder/models/BaseModelBuilder.js +19 -0
  82. package/features/modelBuilder/models/BaseModelBuilder.js.map +1 -1
  83. package/features/modelBuilder/models/PrivateModelBuilder.js +4 -2
  84. package/features/modelBuilder/models/PrivateModelBuilder.js.map +1 -1
  85. package/features/modelBuilder/models/PublicModelBuilder.js +16 -4
  86. package/features/modelBuilder/models/PublicModelBuilder.js.map +1 -1
  87. package/graphql/index.js +2 -1
  88. package/graphql/index.js.map +1 -1
  89. package/graphql/schema/baseSchema.js +17 -15
  90. package/graphql/schema/baseSchema.js.map +1 -1
  91. package/graphql/schema/cms/createEntryResolver.d.ts +10 -0
  92. package/graphql/schema/cms/createEntryResolver.js +56 -0
  93. package/graphql/schema/cms/createEntryResolver.js.map +1 -0
  94. package/graphql/schema/cms/deleteEntryResolver.d.ts +10 -0
  95. package/graphql/schema/cms/deleteEntryResolver.js +56 -0
  96. package/graphql/schema/cms/deleteEntryResolver.js.map +1 -0
  97. package/graphql/schema/cms/getEntryResolver.d.ts +11 -0
  98. package/graphql/schema/cms/getEntryResolver.js +58 -0
  99. package/graphql/schema/cms/getEntryResolver.js.map +1 -0
  100. package/graphql/schema/cms/helpers/buildFieldsSelection.d.ts +23 -0
  101. package/graphql/schema/cms/helpers/buildFieldsSelection.js +79 -0
  102. package/graphql/schema/cms/helpers/buildFieldsSelection.js.map +1 -0
  103. package/graphql/schema/cms/helpers/getErrorMessage.d.ts +4 -0
  104. package/graphql/schema/cms/helpers/getErrorMessage.js +14 -0
  105. package/graphql/schema/cms/helpers/getErrorMessage.js.map +1 -0
  106. package/graphql/schema/cms/helpers/getModel.d.ts +6 -0
  107. package/graphql/schema/cms/helpers/getModel.js +12 -0
  108. package/graphql/schema/cms/helpers/getModel.js.map +1 -0
  109. package/graphql/schema/cms/helpers/index.d.ts +5 -0
  110. package/graphql/schema/cms/helpers/index.js +7 -0
  111. package/graphql/schema/cms/helpers/index.js.map +1 -0
  112. package/graphql/schema/cms/helpers/transformSortToArray.d.ts +18 -0
  113. package/graphql/schema/cms/helpers/transformSortToArray.js +38 -0
  114. package/graphql/schema/cms/helpers/transformSortToArray.js.map +1 -0
  115. package/graphql/schema/cms/helpers/transformWhereToNested.d.ts +17 -0
  116. package/graphql/schema/cms/helpers/transformWhereToNested.js +54 -0
  117. package/graphql/schema/cms/helpers/transformWhereToNested.js.map +1 -0
  118. package/graphql/schema/cms/helpers.d.ts +5 -0
  119. package/graphql/schema/cms/helpers.js +7 -0
  120. package/graphql/schema/cms/helpers.js.map +1 -0
  121. package/graphql/schema/cms/index.d.ts +2 -0
  122. package/graphql/schema/cms/index.js +26 -0
  123. package/graphql/schema/cms/index.js.map +1 -0
  124. package/graphql/schema/cms/listEntriesResolver.d.ts +14 -0
  125. package/graphql/schema/cms/listEntriesResolver.js +97 -0
  126. package/graphql/schema/cms/listEntriesResolver.js.map +1 -0
  127. package/graphql/schema/cms/publishEntryResolver.d.ts +10 -0
  128. package/graphql/schema/cms/publishEntryResolver.js +56 -0
  129. package/graphql/schema/cms/publishEntryResolver.js.map +1 -0
  130. package/graphql/schema/cms/resolvers/createEntry.d.ts +8 -0
  131. package/graphql/schema/cms/resolvers/createEntry.js +17 -0
  132. package/graphql/schema/cms/resolvers/createEntry.js.map +1 -0
  133. package/graphql/schema/cms/resolvers/deleteEntryRevision.d.ts +8 -0
  134. package/graphql/schema/cms/resolvers/deleteEntryRevision.js +17 -0
  135. package/graphql/schema/cms/resolvers/deleteEntryRevision.js.map +1 -0
  136. package/graphql/schema/cms/resolvers/getEntry.d.ts +8 -0
  137. package/graphql/schema/cms/resolvers/getEntry.js +17 -0
  138. package/graphql/schema/cms/resolvers/getEntry.js.map +1 -0
  139. package/graphql/schema/cms/resolvers/index.d.ts +9 -0
  140. package/graphql/schema/cms/resolvers/index.js +11 -0
  141. package/graphql/schema/cms/resolvers/index.js.map +1 -0
  142. package/graphql/schema/cms/resolvers/listEntries.d.ts +8 -0
  143. package/graphql/schema/cms/resolvers/listEntries.js +17 -0
  144. package/graphql/schema/cms/resolvers/listEntries.js.map +1 -0
  145. package/graphql/schema/cms/resolvers/mutationCms.d.ts +8 -0
  146. package/graphql/schema/cms/resolvers/mutationCms.js +24 -0
  147. package/graphql/schema/cms/resolvers/mutationCms.js.map +1 -0
  148. package/graphql/schema/cms/resolvers/publishEntryRevision.d.ts +8 -0
  149. package/graphql/schema/cms/resolvers/publishEntryRevision.js +17 -0
  150. package/graphql/schema/cms/resolvers/publishEntryRevision.js.map +1 -0
  151. package/graphql/schema/cms/resolvers/queryCms.d.ts +8 -0
  152. package/graphql/schema/cms/resolvers/queryCms.js +23 -0
  153. package/graphql/schema/cms/resolvers/queryCms.js.map +1 -0
  154. package/graphql/schema/cms/resolvers/unpublishEntryRevision.d.ts +8 -0
  155. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js +17 -0
  156. package/graphql/schema/cms/resolvers/unpublishEntryRevision.js.map +1 -0
  157. package/graphql/schema/cms/resolvers/updateEntryRevision.d.ts +8 -0
  158. package/graphql/schema/cms/resolvers/updateEntryRevision.js +17 -0
  159. package/graphql/schema/cms/resolvers/updateEntryRevision.js.map +1 -0
  160. package/graphql/schema/cms/typeDefs/index.d.ts +3 -0
  161. package/graphql/schema/cms/typeDefs/index.js +5 -0
  162. package/graphql/schema/cms/typeDefs/index.js.map +1 -0
  163. package/graphql/schema/cms/typeDefs/mutation.d.ts +8 -0
  164. package/graphql/schema/cms/typeDefs/mutation.js +42 -0
  165. package/graphql/schema/cms/typeDefs/mutation.js.map +1 -0
  166. package/graphql/schema/cms/typeDefs/query.d.ts +8 -0
  167. package/graphql/schema/cms/typeDefs/query.js +35 -0
  168. package/graphql/schema/cms/typeDefs/query.js.map +1 -0
  169. package/graphql/schema/cms/typeDefs/responses.d.ts +8 -0
  170. package/graphql/schema/cms/typeDefs/responses.js +35 -0
  171. package/graphql/schema/cms/typeDefs/responses.js.map +1 -0
  172. package/graphql/schema/cms/unpublishEntryResolver.d.ts +10 -0
  173. package/graphql/schema/cms/unpublishEntryResolver.js +56 -0
  174. package/graphql/schema/cms/unpublishEntryResolver.js.map +1 -0
  175. package/graphql/schema/cms/updateEntryResolver.d.ts +11 -0
  176. package/graphql/schema/cms/updateEntryResolver.js +58 -0
  177. package/graphql/schema/cms/updateEntryResolver.js.map +1 -0
  178. package/graphql/schema/contentModels.js +21 -3
  179. package/graphql/schema/contentModels.js.map +1 -1
  180. package/graphql/schema/createManageSDL.js +4 -2
  181. package/graphql/schema/createManageSDL.js.map +1 -1
  182. package/graphqlFields/index.js.map +1 -1
  183. package/package.json +24 -23
  184. package/plugins/CmsModelPlugin.js +19 -4
  185. package/plugins/CmsModelPlugin.js.map +1 -1
  186. package/types/fields/objectField.d.ts +2 -0
  187. package/types/fields/objectField.js.map +1 -1
  188. package/types/model.d.ts +32 -3
  189. package/types/model.js.map +1 -1
  190. package/types/modelField.d.ts +19 -3
  191. package/types/modelField.js.map +1 -1
  192. package/types/types.d.ts +12 -9
  193. package/types/types.js.map +1 -1
  194. package/utils/createModelField.js +4 -2
  195. package/utils/createModelField.js.map +1 -1
  196. package/crud/contentEntry/entryDataFactories/state.d.ts +0 -10
  197. package/crud/contentEntry/entryDataFactories/state.js +0 -16
  198. package/crud/contentEntry/entryDataFactories/state.js.map +0 -1
  199. package/crud/contentModel/validateModel.d.ts +0 -9
  200. package/crud/contentModel/validateModel.js +0 -21
  201. package/crud/contentModel/validateModel.js.map +0 -1
  202. package/crud/contentModel/validateModelFields.d.ts +0 -9
  203. package/crud/contentModel/validateModelFields.js +0 -267
  204. package/crud/contentModel/validateModelFields.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["FieldType","FieldBuilder","DynamicZoneFieldBuilder","templates","constructor","registry","required","message","validation","name","settings","template","id","config","fieldBuilders","fields","key","fieldBuilder","Object","entries","fieldId","push","build","gqlTypeName","icon","description","layout","DynamicZoneFieldTypeFactory","type","create","DynamicZoneFieldType","createImplementation","implementation","dependencies"],"sources":["DynamicZoneFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { FieldBuilder } from \"./FieldBuilder.js\";\nimport { type IFieldBuilderRegistry } from \"../abstractions.js\";\nimport type { CmsIcon, CmsModelFieldValidation } from \"~/types/index.js\";\n\ninterface IDynamicZoneTemplate {\n id: string;\n name: string;\n gqlTypeName: string;\n icon: CmsIcon | undefined;\n description: string;\n fields: any[];\n layout: string[][];\n validation: CmsModelFieldValidation[];\n}\n\nexport interface IDynamicZoneFieldBuilder extends FieldBuilder<\"dynamicZone\"> {\n required(message?: string): this;\n template(\n id: string,\n config: {\n name: string;\n gqlTypeName: string;\n icon?: CmsIcon;\n description?: string;\n fields: (registry: IFieldBuilderRegistry) => Record<string, FieldBuilder<any>>;\n layout?: string[][];\n }\n ): this;\n}\n\ninterface IDynamicZoneFieldBuilderTemplateConfig {\n name: string;\n gqlTypeName: string;\n icon?: CmsIcon;\n description?: string;\n fields: (registry: IFieldBuilderRegistry) => Record<string, FieldBuilder<any>>;\n layout?: string[][];\n}\n\nclass DynamicZoneFieldBuilder\n extends FieldBuilder<\"dynamicZone\">\n implements IDynamicZoneFieldBuilder\n{\n private readonly templates: IDynamicZoneTemplate[] = [];\n\n public constructor(private registry: IFieldBuilderRegistry) {\n super(\"dynamicZone\");\n }\n\n public required(message?: string): this {\n return this.validation({\n name: \"required\",\n message: message || \"Field is required\",\n settings: {}\n });\n }\n\n public template(id: string, config: IDynamicZoneFieldBuilderTemplateConfig): this {\n const fieldBuilders = config.fields(this.registry);\n const fields: any[] = [];\n\n for (const [key, fieldBuilder] of Object.entries(fieldBuilders)) {\n // Automatically set the fieldId from the object key\n // This ensures the key and fieldId are always in sync\n fieldBuilder.fieldId(key);\n fields.push((fieldBuilder as any).build());\n }\n\n this.templates.push({\n id,\n name: config.name,\n gqlTypeName: config.gqlTypeName,\n icon: config.icon,\n description: config.description || \"\",\n fields,\n layout: config.layout || [],\n validation: []\n });\n\n return this;\n }\n\n public override build() {\n // Set templates in settings before building\n this.config.settings = this.config.settings || {};\n this.config.settings.templates = this.templates;\n return super.build();\n }\n}\n\nclass DynamicZoneFieldTypeFactory implements IFieldTypeFactory {\n public readonly type = \"dynamicZone\";\n\n public create(registry: IFieldBuilderRegistry): IDynamicZoneFieldBuilder {\n return new DynamicZoneFieldBuilder(registry);\n }\n}\n\nexport const DynamicZoneFieldType = FieldType.createImplementation({\n implementation: DynamicZoneFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n dynamicZone(): IDynamicZoneFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,SAASC,YAAY;AAuCrB,MAAMC,uBAAuB,SACjBD,YAAY,CAExB;EACqBE,SAAS,GAA2B,EAAE;EAEhDC,WAAWA,CAASC,QAA+B,EAAE;IACxD,KAAK,CAAC,aAAa,CAAC;IAAC,KADEA,QAA+B,GAA/BA,QAA+B;EAE1D;EAEOC,QAAQA,CAACC,OAAgB,EAAQ;IACpC,OAAO,IAAI,CAACC,UAAU,CAAC;MACnBC,IAAI,EAAE,UAAU;MAChBF,OAAO,EAAEA,OAAO,IAAI,mBAAmB;MACvCG,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;EACN;EAEOC,QAAQA,CAACC,EAAU,EAAEC,MAA8C,EAAQ;IAC9E,MAAMC,aAAa,GAAGD,MAAM,CAACE,MAAM,CAAC,IAAI,CAACV,QAAQ,CAAC;IAClD,MAAMU,MAAa,GAAG,EAAE;IAExB,KAAK,MAAM,CAACC,GAAG,EAAEC,YAAY,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,aAAa,CAAC,EAAE;MAC7D;MACA;MACAG,YAAY,CAACG,OAAO,CAACJ,GAAG,CAAC;MACzBD,MAAM,CAACM,IAAI,CAAEJ,YAAY,CAASK,KAAK,CAAC,CAAC,CAAC;IAC9C;IAEA,IAAI,CAACnB,SAAS,CAACkB,IAAI,CAAC;MAChBT,EAAE;MACFH,IAAI,EAAEI,MAAM,CAACJ,IAAI;MACjBc,WAAW,EAAEV,MAAM,CAACU,WAAW;MAC/BC,IAAI,EAAEX,MAAM,CAACW,IAAI;MACjBC,WAAW,EAAEZ,MAAM,CAACY,WAAW,IAAI,EAAE;MACrCV,MAAM;MACNW,MAAM,EAAEb,MAAM,CAACa,MAAM,IAAI,EAAE;MAC3BlB,UAAU,EAAE;IAChB,CAAC,CAAC;IAEF,OAAO,IAAI;EACf;EAEgBc,KAAKA,CAAA,EAAG;IACpB;IACA,IAAI,CAACT,MAAM,CAACH,QAAQ,GAAG,IAAI,CAACG,MAAM,CAACH,QAAQ,IAAI,CAAC,CAAC;IACjD,IAAI,CAACG,MAAM,CAACH,QAAQ,CAACP,SAAS,GAAG,IAAI,CAACA,SAAS;IAC/C,OAAO,KAAK,CAACmB,KAAK,CAAC,CAAC;EACxB;AACJ;AAEA,MAAMK,2BAA2B,CAA8B;EAC3CC,IAAI,GAAG,aAAa;EAE7BC,MAAMA,CAACxB,QAA+B,EAA4B;IACrE,OAAO,IAAIH,uBAAuB,CAACG,QAAQ,CAAC;EAChD;AACJ;AAEA,OAAO,MAAMyB,oBAAoB,GAAG9B,SAAS,CAAC+B,oBAAoB,CAAC;EAC/DC,cAAc,EAAEL,2BAA2B;EAC3CM,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
1
+ {"version":3,"names":["FieldType","FieldBuilder","DynamicZoneFieldBuilder","templates","constructor","registry","required","message","validation","name","settings","template","id","config","fieldBuilders","fields","key","fieldBuilder","Object","entries","fieldId","result","build","type","push","field","gqlTypeName","icon","description","layout","listValidation","DynamicZoneFieldTypeFactory","create","DynamicZoneFieldType","createImplementation","implementation","dependencies"],"sources":["DynamicZoneFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { type FieldBuildResult } from \"./BaseFieldBuilder.js\";\nimport { FieldBuilder, type BaseFieldBuilder } from \"./FieldBuilder.js\";\nimport { type IFieldBuilderRegistry } from \"../abstractions.js\";\nimport type { CmsIcon, CmsModelField, CmsModelFieldValidation } from \"~/types/index.js\";\n\ninterface IDynamicZoneTemplate {\n id: string;\n name: string;\n gqlTypeName: string;\n icon: CmsIcon | undefined;\n description: string;\n fields: any[];\n layout: string[][];\n validation: CmsModelFieldValidation[];\n}\n\nexport interface IDynamicZoneFieldBuilder extends FieldBuilder<\"dynamicZone\"> {\n required(message?: string): this;\n template(\n id: string,\n config: {\n name: string;\n gqlTypeName: string;\n icon?: CmsIcon;\n description?: string;\n fields: (registry: IFieldBuilderRegistry) => Record<string, BaseFieldBuilder<any>>;\n layout?: string[][];\n }\n ): this;\n}\n\ninterface IDynamicZoneFieldBuilderTemplateConfig {\n name: string;\n gqlTypeName: string;\n icon?: CmsIcon;\n description?: string;\n fields: (registry: IFieldBuilderRegistry) => Record<string, BaseFieldBuilder<any>>;\n layout?: string[][];\n}\n\nclass DynamicZoneFieldBuilder\n extends FieldBuilder<\"dynamicZone\">\n implements IDynamicZoneFieldBuilder\n{\n private readonly templates: IDynamicZoneTemplate[] = [];\n\n public constructor(private registry: IFieldBuilderRegistry) {\n super(\"dynamicZone\");\n }\n\n public required(message?: string): this {\n return this.validation({\n name: \"required\",\n message: message || \"Field is required\",\n settings: {}\n });\n }\n\n public template(id: string, config: IDynamicZoneFieldBuilderTemplateConfig): this {\n const fieldBuilders = config.fields(this.registry);\n const fields: CmsModelField[] = [];\n\n for (const [key, fieldBuilder] of Object.entries(fieldBuilders)) {\n fieldBuilder.fieldId(key);\n const result: FieldBuildResult = (fieldBuilder as any).build();\n if (result.type === \"data\") {\n fields.push(result.field);\n } else if (result.fields) {\n fields.push(...result.fields);\n }\n }\n\n this.templates.push({\n id,\n name: config.name,\n gqlTypeName: config.gqlTypeName,\n icon: config.icon,\n description: config.description || \"\",\n fields,\n layout: config.layout || [],\n validation: []\n });\n\n return this;\n }\n\n public override build() {\n // Set templates in settings before building\n this.config.settings = this.config.settings || {};\n this.config.settings.templates = this.templates;\n this.config.listValidation = [{ name: \"dynamicZone\", message: \"\" }];\n return super.build();\n }\n}\n\nclass DynamicZoneFieldTypeFactory implements IFieldTypeFactory {\n public readonly type = \"dynamicZone\";\n\n public create(registry: IFieldBuilderRegistry): IDynamicZoneFieldBuilder {\n return new DynamicZoneFieldBuilder(registry);\n }\n}\n\nexport const DynamicZoneFieldType = FieldType.createImplementation({\n implementation: DynamicZoneFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n dynamicZone(): IDynamicZoneFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,YAAY;AAuCrB,MAAMC,uBAAuB,SACjBD,YAAY,CAExB;EACqBE,SAAS,GAA2B,EAAE;EAEhDC,WAAWA,CAASC,QAA+B,EAAE;IACxD,KAAK,CAAC,aAAa,CAAC;IAAC,KADEA,QAA+B,GAA/BA,QAA+B;EAE1D;EAEOC,QAAQA,CAACC,OAAgB,EAAQ;IACpC,OAAO,IAAI,CAACC,UAAU,CAAC;MACnBC,IAAI,EAAE,UAAU;MAChBF,OAAO,EAAEA,OAAO,IAAI,mBAAmB;MACvCG,QAAQ,EAAE,CAAC;IACf,CAAC,CAAC;EACN;EAEOC,QAAQA,CAACC,EAAU,EAAEC,MAA8C,EAAQ;IAC9E,MAAMC,aAAa,GAAGD,MAAM,CAACE,MAAM,CAAC,IAAI,CAACV,QAAQ,CAAC;IAClD,MAAMU,MAAuB,GAAG,EAAE;IAElC,KAAK,MAAM,CAACC,GAAG,EAAEC,YAAY,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACL,aAAa,CAAC,EAAE;MAC7DG,YAAY,CAACG,OAAO,CAACJ,GAAG,CAAC;MACzB,MAAMK,MAAwB,GAAIJ,YAAY,CAASK,KAAK,CAAC,CAAC;MAC9D,IAAID,MAAM,CAACE,IAAI,KAAK,MAAM,EAAE;QACxBR,MAAM,CAACS,IAAI,CAACH,MAAM,CAACI,KAAK,CAAC;MAC7B,CAAC,MAAM,IAAIJ,MAAM,CAACN,MAAM,EAAE;QACtBA,MAAM,CAACS,IAAI,CAAC,GAAGH,MAAM,CAACN,MAAM,CAAC;MACjC;IACJ;IAEA,IAAI,CAACZ,SAAS,CAACqB,IAAI,CAAC;MAChBZ,EAAE;MACFH,IAAI,EAAEI,MAAM,CAACJ,IAAI;MACjBiB,WAAW,EAAEb,MAAM,CAACa,WAAW;MAC/BC,IAAI,EAAEd,MAAM,CAACc,IAAI;MACjBC,WAAW,EAAEf,MAAM,CAACe,WAAW,IAAI,EAAE;MACrCb,MAAM;MACNc,MAAM,EAAEhB,MAAM,CAACgB,MAAM,IAAI,EAAE;MAC3BrB,UAAU,EAAE;IAChB,CAAC,CAAC;IAEF,OAAO,IAAI;EACf;EAEgBc,KAAKA,CAAA,EAAG;IACpB;IACA,IAAI,CAACT,MAAM,CAACH,QAAQ,GAAG,IAAI,CAACG,MAAM,CAACH,QAAQ,IAAI,CAAC,CAAC;IACjD,IAAI,CAACG,MAAM,CAACH,QAAQ,CAACP,SAAS,GAAG,IAAI,CAACA,SAAS;IAC/C,IAAI,CAACU,MAAM,CAACiB,cAAc,GAAG,CAAC;MAAErB,IAAI,EAAE,aAAa;MAAEF,OAAO,EAAE;IAAG,CAAC,CAAC;IACnE,OAAO,KAAK,CAACe,KAAK,CAAC,CAAC;EACxB;AACJ;AAEA,MAAMS,2BAA2B,CAA8B;EAC3CR,IAAI,GAAG,aAAa;EAE7BS,MAAMA,CAAC3B,QAA+B,EAA4B;IACrE,OAAO,IAAIH,uBAAuB,CAACG,QAAQ,CAAC;EAChD;AACJ;AAEA,OAAO,MAAM4B,oBAAoB,GAAGjC,SAAS,CAACkC,oBAAoB,CAAC;EAC/DC,cAAc,EAAEJ,2BAA2B;EAC3CK,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
@@ -1,50 +1,5 @@
1
- import type { CmsModelField, CmsModelFieldValidation, CmsModelFieldPredefinedValues } from "../../../types/index.js";
2
- export interface FieldBuilderConfig extends Omit<CmsModelField, "id" | "fieldId" | "storageId" | "type"> {
3
- _storageId?: string;
4
- _fieldId?: string;
5
- description?: string | null;
6
- note?: string | null;
7
- }
8
- /**
9
- * Base FieldBuilder class providing common field configuration methods
10
- */
11
- export declare class FieldBuilder<TType extends string = string> {
12
- readonly type: TType;
13
- protected config: FieldBuilderConfig;
14
- constructor(type: TType, label?: string);
15
- label(text: string): this;
16
- help(text: string): this;
17
- description(text: string): this;
18
- note(text: string): this;
19
- placeholder(text: string): this;
20
- storageId(id: string): this;
21
- fieldId(id: string): this;
22
- defaultValue(value: any): this;
23
- list(): this;
24
- tags(tags: string[]): this;
25
- /**
26
- * List validators - these methods are available after calling list()
27
- */
28
- listMinLength(value: number, message?: string): this;
29
- listMaxLength(value: number, message?: string): this;
30
- /**
31
- * Add a validation rule to this field.
32
- * This method is protected and should only be used by field-specific validator methods.
33
- * @internal
34
- */
35
- protected validation(validation: CmsModelFieldValidation): this;
36
- /**
37
- * Add a list validation rule to this field (for list fields).
38
- * This method is protected and should only be used by field-specific validator methods.
39
- * @internal
40
- */
41
- protected listValidation(validation: CmsModelFieldValidation): this;
42
- predefinedValues(values: CmsModelFieldPredefinedValues["values"]): this;
43
- renderer(name: string, settings?: Record<string, any>): this;
44
- settings(settings: Record<string, any>): this;
45
- /**
46
- * Build the final CmsModelField
47
- * @internal
48
- */
49
- build(): CmsModelField;
50
- }
1
+ export { DataFieldBuilder, DataFieldBuilder as FieldBuilder } from "./DataFieldBuilder.js";
2
+ export { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
3
+ export { BaseFieldBuilder } from "./BaseFieldBuilder.js";
4
+ export type { FieldBuildResult, DataFieldBuildResult, LayoutFieldBuildResult } from "./BaseFieldBuilder.js";
5
+ export type { FieldRendererRegistry, FieldRendererName, FieldRendererSettings, FieldBuilderConfig } from "./DataFieldBuilder.js";
@@ -1,167 +1,5 @@
1
- import camelCase from "lodash/camelCase.js";
2
- /**
3
- * Base FieldBuilder class providing common field configuration methods
4
- */
5
- export class FieldBuilder {
6
- constructor(type, label) {
7
- this.type = type;
8
- this.config = {
9
- label: label || "",
10
- validation: [],
11
- listValidation: [],
12
- list: false,
13
- predefinedValues: {
14
- enabled: false,
15
- values: []
16
- },
17
- help: null,
18
- placeholder: null,
19
- description: null,
20
- note: null,
21
- renderer: null,
22
- settings: {},
23
- tags: []
24
- };
25
- }
26
- label(text) {
27
- this.config.label = text;
28
- return this;
29
- }
30
- help(text) {
31
- this.config.help = text;
32
- return this;
33
- }
34
- description(text) {
35
- this.config.description = text;
36
- return this;
37
- }
38
- note(text) {
39
- this.config.note = text;
40
- return this;
41
- }
42
- placeholder(text) {
43
- this.config.placeholder = text;
44
- return this;
45
- }
46
- storageId(id) {
47
- // We do not allow developers to specify the field type!
48
- this.config._storageId = id.split("@").pop();
49
- return this;
50
- }
51
- fieldId(id) {
52
- this.config._fieldId = id;
53
- return this;
54
- }
55
- defaultValue(value) {
56
- this.config.settings = {
57
- ...this.config.settings,
58
- defaultValue: value
59
- };
60
- return this;
61
- }
62
- list() {
63
- this.config.list = true;
64
- return this;
65
- }
66
- tags(tags) {
67
- this.config.tags = tags;
68
- return this;
69
- }
70
-
71
- /**
72
- * List validators - these methods are available after calling list()
73
- */
74
- listMinLength(value, message) {
75
- return this.listValidation({
76
- name: "minLength",
77
- message: message || `At least ${value} item(s) required.`,
78
- settings: {
79
- value
80
- }
81
- });
82
- }
83
- listMaxLength(value, message) {
84
- return this.listValidation({
85
- name: "maxLength",
86
- message: message || `At most ${value} item(s) allowed.`,
87
- settings: {
88
- value
89
- }
90
- });
91
- }
92
-
93
- /**
94
- * Add a validation rule to this field.
95
- * This method is protected and should only be used by field-specific validator methods.
96
- * @internal
97
- */
98
- validation(validation) {
99
- this.config.validation = this.config.validation || [];
100
- this.config.validation.push(validation);
101
- return this;
102
- }
103
-
104
- /**
105
- * Add a list validation rule to this field (for list fields).
106
- * This method is protected and should only be used by field-specific validator methods.
107
- * @internal
108
- */
109
- listValidation(validation) {
110
- this.config.listValidation = this.config.listValidation || [];
111
- this.config.listValidation.push(validation);
112
- return this;
113
- }
114
- predefinedValues(values) {
115
- this.config.predefinedValues = {
116
- enabled: true,
117
- values
118
- };
119
- return this;
120
- }
121
- renderer(name, settings) {
122
- this.config.renderer = {
123
- name,
124
- settings: settings || null
125
- };
126
- return this;
127
- }
128
- settings(settings) {
129
- this.config.settings = {
130
- ...this.config.settings,
131
- ...settings
132
- };
133
- return this;
134
- }
135
-
136
- /**
137
- * Build the final CmsModelField
138
- * @internal
139
- */
140
- build() {
141
- const fieldId = this.config._fieldId || camelCase(this.config.label);
142
- const storageId = `${this.type}@${this.config._storageId ?? fieldId}`;
143
- return {
144
- id: fieldId,
145
- fieldId,
146
- storageId,
147
- type: this.type,
148
- label: this.config.label,
149
- validation: this.config.validation || [],
150
- listValidation: this.config.listValidation || [],
151
- list: this.config.list || false,
152
- predefinedValues: this.config.predefinedValues || {
153
- enabled: false,
154
- values: []
155
- },
156
- help: this.config.help || null,
157
- placeholder: this.config.placeholder || null,
158
- description: this.config.description || null,
159
- note: this.config.note || null,
160
- renderer: this.config.renderer || null,
161
- settings: this.config.settings || {},
162
- tags: this.config.tags || []
163
- };
164
- }
165
- }
1
+ export { DataFieldBuilder, DataFieldBuilder as FieldBuilder } from "./DataFieldBuilder.js";
2
+ export { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
3
+ export { BaseFieldBuilder } from "./BaseFieldBuilder.js";
166
4
 
167
5
  //# sourceMappingURL=FieldBuilder.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["camelCase","FieldBuilder","constructor","type","label","config","validation","listValidation","list","predefinedValues","enabled","values","help","placeholder","description","note","renderer","settings","tags","text","storageId","id","_storageId","split","pop","fieldId","_fieldId","defaultValue","value","listMinLength","message","name","listMaxLength","push","build"],"sources":["FieldBuilder.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport type {\n CmsModelField,\n CmsModelFieldValidation,\n CmsModelFieldPredefinedValues\n} from \"~/types/index.js\";\n\nexport interface FieldBuilderConfig\n extends Omit<CmsModelField, \"id\" | \"fieldId\" | \"storageId\" | \"type\"> {\n _storageId?: string;\n _fieldId?: string;\n description?: string | null;\n note?: string | null;\n}\n\n/**\n * Base FieldBuilder class providing common field configuration methods\n */\nexport class FieldBuilder<TType extends string = string> {\n public readonly type: TType;\n protected config: FieldBuilderConfig;\n\n public constructor(type: TType, label?: string) {\n this.type = type;\n this.config = {\n label: label || \"\",\n validation: [],\n listValidation: [],\n list: false,\n predefinedValues: {\n enabled: false,\n values: []\n },\n help: null,\n placeholder: null,\n description: null,\n note: null,\n renderer: null,\n settings: {},\n tags: []\n };\n }\n\n label(text: string): this {\n this.config.label = text;\n return this;\n }\n\n help(text: string): this {\n this.config.help = text;\n return this;\n }\n\n description(text: string): this {\n this.config.description = text;\n return this;\n }\n\n note(text: string): this {\n this.config.note = text;\n return this;\n }\n\n placeholder(text: string): this {\n this.config.placeholder = text;\n return this;\n }\n\n storageId(id: string): this {\n // We do not allow developers to specify the field type!\n this.config._storageId = id.split(\"@\").pop();\n return this;\n }\n\n fieldId(id: string): this {\n this.config._fieldId = id;\n return this;\n }\n\n defaultValue(value: any): this {\n this.config.settings = { ...this.config.settings, defaultValue: value };\n return this;\n }\n\n list(): this {\n this.config.list = true;\n return this as this;\n }\n\n tags(tags: string[]): this {\n this.config.tags = tags;\n return this;\n }\n\n /**\n * List validators - these methods are available after calling list()\n */\n listMinLength(value: number, message?: string): this {\n return this.listValidation({\n name: \"minLength\",\n message: message || `At least ${value} item(s) required.`,\n settings: { value }\n });\n }\n\n listMaxLength(value: number, message?: string): this {\n return this.listValidation({\n name: \"maxLength\",\n message: message || `At most ${value} item(s) allowed.`,\n settings: { value }\n });\n }\n\n /**\n * Add a validation rule to this field.\n * This method is protected and should only be used by field-specific validator methods.\n * @internal\n */\n protected validation(validation: CmsModelFieldValidation): this {\n this.config.validation = this.config.validation || [];\n this.config.validation.push(validation);\n return this;\n }\n\n /**\n * Add a list validation rule to this field (for list fields).\n * This method is protected and should only be used by field-specific validator methods.\n * @internal\n */\n protected listValidation(validation: CmsModelFieldValidation): this {\n this.config.listValidation = this.config.listValidation || [];\n this.config.listValidation.push(validation);\n return this;\n }\n\n predefinedValues(values: CmsModelFieldPredefinedValues[\"values\"]): this {\n this.config.predefinedValues = {\n enabled: true,\n values\n };\n return this;\n }\n\n renderer(name: string, settings?: Record<string, any>): this {\n this.config.renderer = {\n name,\n settings: settings || null\n };\n return this;\n }\n\n settings(settings: Record<string, any>): this {\n this.config.settings = { ...this.config.settings, ...settings };\n return this;\n }\n\n /**\n * Build the final CmsModelField\n * @internal\n */\n build(): CmsModelField {\n const fieldId = this.config._fieldId || camelCase(this.config.label);\n const storageId = `${this.type}@${this.config._storageId ?? fieldId}`;\n\n return {\n id: fieldId,\n fieldId,\n storageId,\n type: this.type,\n label: this.config.label,\n validation: this.config.validation || [],\n listValidation: this.config.listValidation || [],\n list: this.config.list || false,\n predefinedValues: this.config.predefinedValues || {\n enabled: false,\n values: []\n },\n help: this.config.help || null,\n placeholder: this.config.placeholder || null,\n description: this.config.description || null,\n note: this.config.note || null,\n renderer: this.config.renderer || null,\n settings: this.config.settings || {},\n tags: this.config.tags || []\n };\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DataFieldBuilder","FieldBuilder","LayoutFieldBuilder","BaseFieldBuilder"],"sources":["FieldBuilder.ts"],"sourcesContent":["export { DataFieldBuilder, DataFieldBuilder as FieldBuilder } from \"./DataFieldBuilder.js\";\nexport { LayoutFieldBuilder } from \"./LayoutFieldBuilder.js\";\nexport { BaseFieldBuilder } from \"./BaseFieldBuilder.js\";\nexport type {\n FieldBuildResult,\n DataFieldBuildResult,\n LayoutFieldBuildResult\n} from \"./BaseFieldBuilder.js\";\nexport type {\n FieldRendererRegistry,\n FieldRendererName,\n FieldRendererSettings,\n FieldBuilderConfig\n} from \"./DataFieldBuilder.js\";\n"],"mappings":"AAAA,SAASA,gBAAgB,EAAEA,gBAAgB,IAAIC,YAAY;AAC3D,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB","ignoreList":[]}
@@ -1,4 +1,8 @@
1
- // @ts-nocheck This class operates via a Proxy, so it's difficult to type check.
1
+ /**
2
+ * This file has multiple @ts-expect-error comments because the dynamic nature of the registry makes it difficult to type correctly.
3
+ * The registry is designed to allow dynamic method access for field types, which is not easily expressed in TypeScript.
4
+ * The @ts-expect-error comments are used to suppress type errors in places where we know the code is correct but TypeScript cannot verify it.
5
+ */
2
6
  import camelCase from "lodash/camelCase.js";
3
7
  import { FieldBuilderRegistry as RegistryAbstraction } from "../abstractions.js";
4
8
  import { FieldType } from "./abstractions.js";
@@ -15,6 +19,10 @@ class FieldBuilderRegistryImpl {
15
19
  if (factory.type.includes("-")) {
16
20
  this.fieldTypes.set(camelCase(factory.type), factory);
17
21
  }
22
+ // also register camelCase aliases for subtypes.
23
+ if (factory.type.includes(":")) {
24
+ this.fieldTypes.set(camelCase(factory.type), factory);
25
+ }
18
26
  }
19
27
 
20
28
  // Return Proxy for dynamic method access
@@ -52,7 +60,9 @@ class FieldBuilderRegistryImpl {
52
60
  }
53
61
  }
54
62
  export const FieldBuilderRegistry = RegistryAbstraction.createImplementation({
63
+ // @ts-expect-error
55
64
  implementation: FieldBuilderRegistryImpl,
65
+ // @ts-expect-error
56
66
  dependencies: [[FieldType, {
57
67
  multiple: true
58
68
  }]]
@@ -1 +1 @@
1
- {"version":3,"names":["camelCase","FieldBuilderRegistry","RegistryAbstraction","FieldType","FieldBuilderRegistryImpl","fieldTypes","Map","extendMode","constructor","fieldTypeFactories","factory","set","type","includes","proxy","Proxy","get","target","prop","builder","create","_extendMode","createImplementation","implementation","dependencies","multiple"],"sources":["FieldBuilderRegistry.ts"],"sourcesContent":["// @ts-nocheck This class operates via a Proxy, so it's difficult to type check.\nimport camelCase from \"lodash/camelCase.js\";\nimport {\n FieldBuilderRegistry as RegistryAbstraction,\n type IFieldBuilderRegistry\n} from \"../abstractions.js\";\nimport { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\n\n// @ts-expect-error\nclass FieldBuilderRegistryImpl implements IFieldBuilderRegistry {\n private fieldTypes = new Map<string, IFieldTypeFactory>();\n private extendMode = false;\n public existingFields?: Map<string, any>;\n\n public constructor(fieldTypeFactories: IFieldTypeFactory[]) {\n // Register all field types by their type name\n for (const factory of fieldTypeFactories) {\n this.fieldTypes.set(factory.type, factory);\n // Also register camelCase aliases for hyphenated types\n if (factory.type.includes(\"-\")) {\n this.fieldTypes.set(camelCase(factory.type), factory);\n }\n }\n\n // Return Proxy for dynamic method access\n const proxy = new Proxy(this, {\n get(target, prop: string) {\n // Handle extend() method\n if (prop === \"extend\") {\n return () => {\n target.extendMode = true;\n return proxy;\n };\n }\n\n // Check if it's a registered field type\n const factory = target.fieldTypes.get(prop);\n if (factory) {\n return () => {\n const builder = factory.create(proxy as IFieldBuilderRegistry);\n\n // If in extend mode, mark the builder with extend flag\n // BaseModelBuilder will handle merging operations by field ID\n if (target.extendMode) {\n (builder as any)._extendMode = true;\n target.extendMode = false; // Reset for next field\n }\n\n return builder;\n };\n }\n\n // Otherwise return the actual property\n return (target as any)[prop];\n }\n }) as any;\n\n return proxy;\n }\n}\n\nexport const FieldBuilderRegistry = RegistryAbstraction.createImplementation({\n implementation: FieldBuilderRegistryImpl,\n dependencies: [[FieldType, { multiple: true }]]\n});\n"],"mappings":"AAAA;AACA,OAAOA,SAAS,MAAM,qBAAqB;AAC3C,SACIC,oBAAoB,IAAIC,mBAAmB;AAG/C,SAASC,SAAS;;AAElB;AACA,MAAMC,wBAAwB,CAAkC;EACpDC,UAAU,GAAG,IAAIC,GAAG,CAA4B,CAAC;EACjDC,UAAU,GAAG,KAAK;EAGnBC,WAAWA,CAACC,kBAAuC,EAAE;IACxD;IACA,KAAK,MAAMC,OAAO,IAAID,kBAAkB,EAAE;MACtC,IAAI,CAACJ,UAAU,CAACM,GAAG,CAACD,OAAO,CAACE,IAAI,EAAEF,OAAO,CAAC;MAC1C;MACA,IAAIA,OAAO,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,CAACR,UAAU,CAACM,GAAG,CAACX,SAAS,CAACU,OAAO,CAACE,IAAI,CAAC,EAAEF,OAAO,CAAC;MACzD;IACJ;;IAEA;IACA,MAAMI,KAAK,GAAG,IAAIC,KAAK,CAAC,IAAI,EAAE;MAC1BC,GAAGA,CAACC,MAAM,EAAEC,IAAY,EAAE;QACtB;QACA,IAAIA,IAAI,KAAK,QAAQ,EAAE;UACnB,OAAO,MAAM;YACTD,MAAM,CAACV,UAAU,GAAG,IAAI;YACxB,OAAOO,KAAK;UAChB,CAAC;QACL;;QAEA;QACA,MAAMJ,OAAO,GAAGO,MAAM,CAACZ,UAAU,CAACW,GAAG,CAACE,IAAI,CAAC;QAC3C,IAAIR,OAAO,EAAE;UACT,OAAO,MAAM;YACT,MAAMS,OAAO,GAAGT,OAAO,CAACU,MAAM,CAACN,KAA8B,CAAC;;YAE9D;YACA;YACA,IAAIG,MAAM,CAACV,UAAU,EAAE;cAClBY,OAAO,CAASE,WAAW,GAAG,IAAI;cACnCJ,MAAM,CAACV,UAAU,GAAG,KAAK,CAAC,CAAC;YAC/B;YAEA,OAAOY,OAAO;UAClB,CAAC;QACL;;QAEA;QACA,OAAQF,MAAM,CAASC,IAAI,CAAC;MAChC;IACJ,CAAC,CAAQ;IAET,OAAOJ,KAAK;EAChB;AACJ;AAEA,OAAO,MAAMb,oBAAoB,GAAGC,mBAAmB,CAACoB,oBAAoB,CAAC;EACzEC,cAAc,EAAEnB,wBAAwB;EACxCoB,YAAY,EAAE,CAAC,CAACrB,SAAS,EAAE;IAAEsB,QAAQ,EAAE;EAAK,CAAC,CAAC;AAClD,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["camelCase","FieldBuilderRegistry","RegistryAbstraction","FieldType","FieldBuilderRegistryImpl","fieldTypes","Map","extendMode","constructor","fieldTypeFactories","factory","set","type","includes","proxy","Proxy","get","target","prop","builder","create","_extendMode","createImplementation","implementation","dependencies","multiple"],"sources":["FieldBuilderRegistry.ts"],"sourcesContent":["/**\n * This file has multiple @ts-expect-error comments because the dynamic nature of the registry makes it difficult to type correctly.\n * The registry is designed to allow dynamic method access for field types, which is not easily expressed in TypeScript.\n * The @ts-expect-error comments are used to suppress type errors in places where we know the code is correct but TypeScript cannot verify it.\n */\nimport camelCase from \"lodash/camelCase.js\";\nimport {\n FieldBuilderRegistry as RegistryAbstraction,\n type IFieldBuilderRegistry\n} from \"../abstractions.js\";\nimport { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\n\n// @ts-expect-error\nclass FieldBuilderRegistryImpl implements IFieldBuilderRegistry {\n private fieldTypes = new Map<string, IFieldTypeFactory>();\n private extendMode = false;\n public existingFields?: Map<string, any>;\n\n public constructor(fieldTypeFactories: IFieldTypeFactory[]) {\n // Register all field types by their type name\n for (const factory of fieldTypeFactories) {\n this.fieldTypes.set(factory.type, factory);\n // Also register camelCase aliases for hyphenated types\n if (factory.type.includes(\"-\")) {\n this.fieldTypes.set(camelCase(factory.type), factory);\n }\n // also register camelCase aliases for subtypes.\n if (factory.type.includes(\":\")) {\n this.fieldTypes.set(camelCase(factory.type), factory);\n }\n }\n\n // Return Proxy for dynamic method access\n const proxy = new Proxy(this, {\n get(target, prop: string) {\n // Handle extend() method\n if (prop === \"extend\") {\n return () => {\n target.extendMode = true;\n return proxy;\n };\n }\n\n // Check if it's a registered field type\n const factory = target.fieldTypes.get(prop);\n if (factory) {\n return () => {\n const builder = factory.create(proxy as IFieldBuilderRegistry);\n\n // If in extend mode, mark the builder with extend flag\n // BaseModelBuilder will handle merging operations by field ID\n if (target.extendMode) {\n (builder as any)._extendMode = true;\n target.extendMode = false; // Reset for next field\n }\n\n return builder;\n };\n }\n\n // Otherwise return the actual property\n return target[prop as keyof typeof target];\n }\n }) as any;\n\n return proxy;\n }\n}\n\nexport const FieldBuilderRegistry = RegistryAbstraction.createImplementation({\n // @ts-expect-error\n implementation: FieldBuilderRegistryImpl,\n // @ts-expect-error\n dependencies: [[FieldType, { multiple: true }]]\n});\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,qBAAqB;AAC3C,SACIC,oBAAoB,IAAIC,mBAAmB;AAG/C,SAASC,SAAS;;AAElB;AACA,MAAMC,wBAAwB,CAAkC;EACpDC,UAAU,GAAG,IAAIC,GAAG,CAA4B,CAAC;EACjDC,UAAU,GAAG,KAAK;EAGnBC,WAAWA,CAACC,kBAAuC,EAAE;IACxD;IACA,KAAK,MAAMC,OAAO,IAAID,kBAAkB,EAAE;MACtC,IAAI,CAACJ,UAAU,CAACM,GAAG,CAACD,OAAO,CAACE,IAAI,EAAEF,OAAO,CAAC;MAC1C;MACA,IAAIA,OAAO,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,CAACR,UAAU,CAACM,GAAG,CAACX,SAAS,CAACU,OAAO,CAACE,IAAI,CAAC,EAAEF,OAAO,CAAC;MACzD;MACA;MACA,IAAIA,OAAO,CAACE,IAAI,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,CAACR,UAAU,CAACM,GAAG,CAACX,SAAS,CAACU,OAAO,CAACE,IAAI,CAAC,EAAEF,OAAO,CAAC;MACzD;IACJ;;IAEA;IACA,MAAMI,KAAK,GAAG,IAAIC,KAAK,CAAC,IAAI,EAAE;MAC1BC,GAAGA,CAACC,MAAM,EAAEC,IAAY,EAAE;QACtB;QACA,IAAIA,IAAI,KAAK,QAAQ,EAAE;UACnB,OAAO,MAAM;YACTD,MAAM,CAACV,UAAU,GAAG,IAAI;YACxB,OAAOO,KAAK;UAChB,CAAC;QACL;;QAEA;QACA,MAAMJ,OAAO,GAAGO,MAAM,CAACZ,UAAU,CAACW,GAAG,CAACE,IAAI,CAAC;QAC3C,IAAIR,OAAO,EAAE;UACT,OAAO,MAAM;YACT,MAAMS,OAAO,GAAGT,OAAO,CAACU,MAAM,CAACN,KAA8B,CAAC;;YAE9D;YACA;YACA,IAAIG,MAAM,CAACV,UAAU,EAAE;cAClBY,OAAO,CAASE,WAAW,GAAG,IAAI;cACnCJ,MAAM,CAACV,UAAU,GAAG,KAAK,CAAC,CAAC;YAC/B;YAEA,OAAOY,OAAO;UAClB,CAAC;QACL;;QAEA;QACA,OAAOF,MAAM,CAACC,IAAI,CAAwB;MAC9C;IACJ,CAAC,CAAQ;IAET,OAAOJ,KAAK;EAChB;AACJ;AAEA,OAAO,MAAMb,oBAAoB,GAAGC,mBAAmB,CAACoB,oBAAoB,CAAC;EACzE;EACAC,cAAc,EAAEnB,wBAAwB;EACxC;EACAoB,YAAY,EAAE,CAAC,CAACrB,SAAS,EAAE;IAAEsB,QAAQ,EAAE;EAAK,CAAC,CAAC;AAClD,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
2
+ /**
3
+ * Slim base class for layout fields (separators, alerts, tabs, etc.).
4
+ * Layout fields only support label, description, help, and note — no list(), storageId(), etc.
5
+ */
6
+ export declare abstract class LayoutFieldBuilder<TType extends string = string> extends BaseFieldBuilder<TType> {
7
+ }
@@ -0,0 +1,9 @@
1
+ import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
2
+
3
+ /**
4
+ * Slim base class for layout fields (separators, alerts, tabs, etc.).
5
+ * Layout fields only support label, description, help, and note — no list(), storageId(), etc.
6
+ */
7
+ export class LayoutFieldBuilder extends BaseFieldBuilder {}
8
+
9
+ //# sourceMappingURL=LayoutFieldBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BaseFieldBuilder","LayoutFieldBuilder"],"sources":["LayoutFieldBuilder.ts"],"sourcesContent":["import { BaseFieldBuilder } from \"./BaseFieldBuilder.js\";\n\n/**\n * Slim base class for layout fields (separators, alerts, tabs, etc.).\n * Layout fields only support label, description, help, and note — no list(), storageId(), etc.\n */\nexport abstract class LayoutFieldBuilder<\n TType extends string = string\n> extends BaseFieldBuilder<TType> {}\n"],"mappings":"AAAA,SAASA,gBAAgB;;AAEzB;AACA;AACA;AACA;AACA,OAAO,MAAeC,kBAAkB,SAE9BD,gBAAgB,CAAQ","ignoreList":[]}
@@ -1,10 +1,11 @@
1
1
  import { type IFieldTypeFactory } from "./abstractions.js";
2
+ import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
2
3
  import { FieldBuilder } from "./FieldBuilder.js";
3
4
  import { FieldBuilderRegistry } from "../abstractions.js";
4
5
  import { LayoutBuilder } from "../LayoutBuilder.js";
5
6
  export interface IObjectFieldBuilder extends FieldBuilder<"object"> {
6
7
  required(message?: string): this;
7
- fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string, FieldBuilder<any>>): this;
8
+ fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>): this;
8
9
  layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this;
9
10
  }
10
11
  export declare class ObjectFieldBuilder extends FieldBuilder<"object"> implements IObjectFieldBuilder {
@@ -13,9 +14,9 @@ export declare class ObjectFieldBuilder extends FieldBuilder<"object"> implement
13
14
  private fieldBuildersMap;
14
15
  constructor(registry: FieldBuilderRegistry.Interface);
15
16
  required(message?: string): this;
16
- fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string, FieldBuilder<any>>): this;
17
+ fields(builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>): this;
17
18
  layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this;
18
- build(): import("../../../types/modelField.js").CmsModelField;
19
+ build(): import("./BaseFieldBuilder.js").DataFieldBuildResult;
19
20
  }
20
21
  declare class ObjectFieldTypeFactory implements IFieldTypeFactory {
21
22
  readonly type = "object";
@@ -40,12 +40,27 @@ export class ObjectFieldBuilder extends FieldBuilder {
40
40
  return this;
41
41
  }
42
42
  build() {
43
- // Build all nested fields from field builders
44
43
  this.config.settings = this.config.settings || {};
45
- this.config.settings.fields = Array.from(this.fieldBuildersMap.values()).map(builder => builder.build());
46
44
 
47
- // Build layout
48
- this.config.settings.layout = this.layoutBuilder.build();
45
+ // Build nested fields, separating data fields from layout fields
46
+ const fields = [];
47
+ const layoutReplacements = new Map();
48
+ for (const [fieldId, builder] of this.fieldBuildersMap) {
49
+ const result = builder.build();
50
+ if (result.type === "layout") {
51
+ layoutReplacements.set(fieldId, result.layoutCell);
52
+ if (result.fields) {
53
+ fields.push(...result.fields);
54
+ }
55
+ } else {
56
+ fields.push(result.field);
57
+ }
58
+ }
59
+ this.config.settings.fields = fields;
60
+
61
+ // Build layout and apply replacements
62
+ const rawLayout = this.layoutBuilder.build();
63
+ this.config.settings.layout = rawLayout.map(row => row.map(cell => layoutReplacements.get(cell) ?? cell));
49
64
  return super.build();
50
65
  }
51
66
  }
@@ -1 +1 @@
1
- {"version":3,"names":["FieldType","FieldBuilder","LayoutBuilder","ObjectFieldBuilder","fieldBuildersMap","Map","constructor","registry","layoutBuilder","required","message","validation","name","config","push","fields","builder","existingFields","fieldBuilders","key","fieldBuilder","Object","entries","fieldId","set","layout","layoutOrBuilder","Array","isArray","setLayout","addModifier","build","settings","from","values","map","ObjectFieldTypeFactory","type","create","ObjectFieldType","createImplementation","implementation","dependencies"],"sources":["ObjectFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { FieldBuilder } from \"./FieldBuilder.js\";\nimport { FieldBuilderRegistry } from \"../abstractions.js\";\nimport { LayoutBuilder } from \"../LayoutBuilder.js\";\n\nexport interface IObjectFieldBuilder extends FieldBuilder<\"object\"> {\n required(message?: string): this;\n fields(\n builder: (registry: FieldBuilderRegistry.Interface) => Record<string, FieldBuilder<any>>\n ): this;\n layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private layoutBuilder: LayoutBuilder;\n private fieldBuildersMap = new Map<string, FieldBuilder<any>>();\n\n public constructor(private registry: FieldBuilderRegistry.Interface) {\n super(\"object\");\n this.layoutBuilder = new LayoutBuilder();\n }\n\n required(message?: string): this {\n const validation = {\n name: \"required\",\n message: message || \"Value is required.\"\n };\n this.config.validation = this.config.validation || [];\n this.config.validation.push(validation);\n return this;\n }\n\n fields(\n builder: (registry: FieldBuilderRegistry.Interface) => Record<string, FieldBuilder<any>>\n ): this {\n // Pass existing fields to registry so it can return them when extending\n (this.registry as any).existingFields = this.fieldBuildersMap;\n\n const fieldBuilders = builder(this.registry);\n for (const [key, fieldBuilder] of Object.entries(fieldBuilders)) {\n // Automatically set the fieldId from the object key\n fieldBuilder.fieldId(key);\n // Store builder (not built field)\n this.fieldBuildersMap.set(key, fieldBuilder);\n }\n\n return this;\n }\n\n layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this {\n if (Array.isArray(layoutOrBuilder)) {\n // Set base layout and clear modifiers\n this.layoutBuilder.setLayout(layoutOrBuilder);\n } else {\n // Queue the modifier callback\n this.layoutBuilder.addModifier(layoutOrBuilder);\n }\n\n return this;\n }\n\n override build() {\n // Build all nested fields from field builders\n this.config.settings = this.config.settings || {};\n this.config.settings.fields = Array.from(this.fieldBuildersMap.values()).map(builder =>\n builder.build()\n );\n\n // Build layout\n this.config.settings.layout = this.layoutBuilder.build();\n\n return super.build();\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n\n create(registry: FieldBuilderRegistry.Interface): IObjectFieldBuilder {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAClB,SAASC,YAAY;AAErB,SAASC,aAAa;AAUtB,OAAO,MAAMC,kBAAkB,SAASF,YAAY,CAA0C;EAElFG,gBAAgB,GAAG,IAAIC,GAAG,CAA4B,CAAC;EAExDC,WAAWA,CAASC,QAAwC,EAAE;IACjE,KAAK,CAAC,QAAQ,CAAC;IAAC,KADOA,QAAwC,GAAxCA,QAAwC;IAE/D,IAAI,CAACC,aAAa,GAAG,IAAIN,aAAa,CAAC,CAAC;EAC5C;EAEAO,QAAQA,CAACC,OAAgB,EAAQ;IAC7B,MAAMC,UAAU,GAAG;MACfC,IAAI,EAAE,UAAU;MAChBF,OAAO,EAAEA,OAAO,IAAI;IACxB,CAAC;IACD,IAAI,CAACG,MAAM,CAACF,UAAU,GAAG,IAAI,CAACE,MAAM,CAACF,UAAU,IAAI,EAAE;IACrD,IAAI,CAACE,MAAM,CAACF,UAAU,CAACG,IAAI,CAACH,UAAU,CAAC;IACvC,OAAO,IAAI;EACf;EAEAI,MAAMA,CACFC,OAAwF,EACpF;IACJ;IACC,IAAI,CAACT,QAAQ,CAASU,cAAc,GAAG,IAAI,CAACb,gBAAgB;IAE7D,MAAMc,aAAa,GAAGF,OAAO,CAAC,IAAI,CAACT,QAAQ,CAAC;IAC5C,KAAK,MAAM,CAACY,GAAG,EAAEC,YAAY,CAAC,IAAIC,MAAM,CAACC,OAAO,CAACJ,aAAa,CAAC,EAAE;MAC7D;MACAE,YAAY,CAACG,OAAO,CAACJ,GAAG,CAAC;MACzB;MACA,IAAI,CAACf,gBAAgB,CAACoB,GAAG,CAACL,GAAG,EAAEC,YAAY,CAAC;IAChD;IAEA,OAAO,IAAI;EACf;EAEAK,MAAMA,CAACC,eAAgE,EAAQ;IAC3E,IAAIC,KAAK,CAACC,OAAO,CAACF,eAAe,CAAC,EAAE;MAChC;MACA,IAAI,CAAClB,aAAa,CAACqB,SAAS,CAACH,eAAe,CAAC;IACjD,CAAC,MAAM;MACH;MACA,IAAI,CAAClB,aAAa,CAACsB,WAAW,CAACJ,eAAe,CAAC;IACnD;IAEA,OAAO,IAAI;EACf;EAESK,KAAKA,CAAA,EAAG;IACb;IACA,IAAI,CAAClB,MAAM,CAACmB,QAAQ,GAAG,IAAI,CAACnB,MAAM,CAACmB,QAAQ,IAAI,CAAC,CAAC;IACjD,IAAI,CAACnB,MAAM,CAACmB,QAAQ,CAACjB,MAAM,GAAGY,KAAK,CAACM,IAAI,CAAC,IAAI,CAAC7B,gBAAgB,CAAC8B,MAAM,CAAC,CAAC,CAAC,CAACC,GAAG,CAACnB,OAAO,IAChFA,OAAO,CAACe,KAAK,CAAC,CAClB,CAAC;;IAED;IACA,IAAI,CAAClB,MAAM,CAACmB,QAAQ,CAACP,MAAM,GAAG,IAAI,CAACjB,aAAa,CAACuB,KAAK,CAAC,CAAC;IAExD,OAAO,KAAK,CAACA,KAAK,CAAC,CAAC;EACxB;AACJ;AAEA,MAAMK,sBAAsB,CAA8B;EAC7CC,IAAI,GAAG,QAAQ;EAExBC,MAAMA,CAAC/B,QAAwC,EAAuB;IAClE,OAAO,IAAIJ,kBAAkB,CAACI,QAAQ,CAAC;EAC3C;AACJ;AAEA,OAAO,MAAMgC,eAAe,GAAGvC,SAAS,CAACwC,oBAAoB,CAAC;EAC1DC,cAAc,EAAEL,sBAAsB;EACtCM,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
1
+ {"version":3,"names":["FieldType","FieldBuilder","LayoutBuilder","ObjectFieldBuilder","fieldBuildersMap","Map","constructor","registry","layoutBuilder","required","message","validation","name","config","push","fields","builder","existingFields","fieldBuilders","key","fieldBuilder","Object","entries","fieldId","set","layout","layoutOrBuilder","Array","isArray","setLayout","addModifier","build","settings","layoutReplacements","result","type","layoutCell","field","rawLayout","map","row","cell","get","ObjectFieldTypeFactory","create","ObjectFieldType","createImplementation","implementation","dependencies"],"sources":["ObjectFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { BaseFieldBuilder } from \"./BaseFieldBuilder.js\";\nimport { FieldBuilder } from \"./FieldBuilder.js\";\nimport { FieldBuilderRegistry } from \"../abstractions.js\";\nimport { LayoutBuilder } from \"../LayoutBuilder.js\";\nimport type { CmsModelField, CmsModelLayoutCell } from \"~/types/index.js\";\n\nexport interface IObjectFieldBuilder extends FieldBuilder<\"object\"> {\n required(message?: string): this;\n fields(\n builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>\n ): this;\n layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private layoutBuilder: LayoutBuilder;\n private fieldBuildersMap = new Map<string, BaseFieldBuilder<any>>();\n\n public constructor(private registry: FieldBuilderRegistry.Interface) {\n super(\"object\");\n this.layoutBuilder = new LayoutBuilder();\n }\n\n required(message?: string): this {\n const validation = {\n name: \"required\",\n message: message || \"Value is required.\"\n };\n this.config.validation = this.config.validation || [];\n this.config.validation.push(validation);\n return this;\n }\n\n fields(\n builder: (registry: FieldBuilderRegistry.Interface) => Record<string, BaseFieldBuilder<any>>\n ): this {\n // Pass existing fields to registry so it can return them when extending\n (this.registry as any).existingFields = this.fieldBuildersMap;\n\n const fieldBuilders = builder(this.registry);\n for (const [key, fieldBuilder] of Object.entries(fieldBuilders)) {\n // Automatically set the fieldId from the object key\n fieldBuilder.fieldId(key);\n // Store builder (not built field)\n this.fieldBuildersMap.set(key, fieldBuilder);\n }\n\n return this;\n }\n\n layout(layoutOrBuilder: string[][] | ((builder: LayoutBuilder) => void)): this {\n if (Array.isArray(layoutOrBuilder)) {\n // Set base layout and clear modifiers\n this.layoutBuilder.setLayout(layoutOrBuilder);\n } else {\n // Queue the modifier callback\n this.layoutBuilder.addModifier(layoutOrBuilder);\n }\n\n return this;\n }\n\n override build() {\n this.config.settings = this.config.settings || {};\n\n // Build nested fields, separating data fields from layout fields\n const fields: CmsModelField[] = [];\n const layoutReplacements = new Map<string, CmsModelLayoutCell>();\n\n for (const [fieldId, builder] of this.fieldBuildersMap) {\n const result = builder.build();\n if (result.type === \"layout\") {\n layoutReplacements.set(fieldId, result.layoutCell);\n if (result.fields) {\n fields.push(...result.fields);\n }\n } else {\n fields.push(result.field);\n }\n }\n\n this.config.settings.fields = fields;\n\n // Build layout and apply replacements\n const rawLayout = this.layoutBuilder.build();\n this.config.settings.layout = rawLayout.map(row =>\n row.map(cell => layoutReplacements.get(cell) ?? cell)\n );\n\n return super.build();\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n\n create(registry: FieldBuilderRegistry.Interface): IObjectFieldBuilder {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ import { type IFieldTypeFactory } from "./abstractions.js";
2
+ import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
3
+ type AlertType = "info" | "success" | "warning" | "danger";
4
+ export interface IUiAlertFieldBuilder extends LayoutFieldBuilder<"uiAlert"> {
5
+ alertType(type: AlertType): this;
6
+ }
7
+ declare class UiAlertFieldTypeFactory implements IFieldTypeFactory {
8
+ readonly type = "uiAlert";
9
+ create(): IUiAlertFieldBuilder;
10
+ }
11
+ export declare const UiAlertFieldType: typeof UiAlertFieldTypeFactory & {
12
+ __abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
13
+ };
14
+ declare module "../abstractions.js" {
15
+ interface IFieldBuilderRegistry {
16
+ uiAlert(): IUiAlertFieldBuilder;
17
+ }
18
+ }
19
+ export {};
@@ -0,0 +1,36 @@
1
+ import { FieldType } from "./abstractions.js";
2
+ import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
3
+ class AlertFieldBuilder extends LayoutFieldBuilder {
4
+ _alertType = "warning";
5
+ constructor() {
6
+ super("uiAlert");
7
+ }
8
+ alertType(type) {
9
+ this._alertType = type;
10
+ return this;
11
+ }
12
+ build() {
13
+ return {
14
+ type: "layout",
15
+ layoutCell: {
16
+ type: "alert",
17
+ label: this.config.label,
18
+ alertType: this._alertType
19
+ }
20
+ };
21
+ }
22
+ }
23
+ class UiAlertFieldTypeFactory {
24
+ type = "uiAlert";
25
+ create() {
26
+ return new AlertFieldBuilder();
27
+ }
28
+ }
29
+ export const UiAlertFieldType = FieldType.createImplementation({
30
+ implementation: UiAlertFieldTypeFactory,
31
+ dependencies: []
32
+ });
33
+
34
+ // Module augmentation for TypeScript autocomplete
35
+
36
+ //# sourceMappingURL=UiAlertFieldType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FieldType","LayoutFieldBuilder","AlertFieldBuilder","_alertType","constructor","alertType","type","build","layoutCell","label","config","UiAlertFieldTypeFactory","create","UiAlertFieldType","createImplementation","implementation","dependencies"],"sources":["UiAlertFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { type LayoutFieldBuildResult } from \"./BaseFieldBuilder.js\";\nimport { LayoutFieldBuilder } from \"./LayoutFieldBuilder.js\";\n\ntype AlertType = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface IUiAlertFieldBuilder extends LayoutFieldBuilder<\"uiAlert\"> {\n alertType(type: AlertType): this;\n}\n\nclass AlertFieldBuilder extends LayoutFieldBuilder<\"uiAlert\"> implements IUiAlertFieldBuilder {\n private _alertType: AlertType = \"warning\";\n\n public constructor() {\n super(\"uiAlert\");\n }\n\n public alertType(type: AlertType): this {\n this._alertType = type;\n return this;\n }\n\n public override build(): LayoutFieldBuildResult {\n return {\n type: \"layout\",\n layoutCell: {\n type: \"alert\",\n label: this.config.label,\n alertType: this._alertType\n }\n };\n }\n}\n\nclass UiAlertFieldTypeFactory implements IFieldTypeFactory {\n public readonly type = \"uiAlert\";\n\n public create(): IUiAlertFieldBuilder {\n return new AlertFieldBuilder();\n }\n}\n\nexport const UiAlertFieldType = FieldType.createImplementation({\n implementation: UiAlertFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n uiAlert(): IUiAlertFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB;AAQ3B,MAAMC,iBAAiB,SAASD,kBAAkB,CAA4C;EAClFE,UAAU,GAAc,SAAS;EAElCC,WAAWA,CAAA,EAAG;IACjB,KAAK,CAAC,SAAS,CAAC;EACpB;EAEOC,SAASA,CAACC,IAAe,EAAQ;IACpC,IAAI,CAACH,UAAU,GAAGG,IAAI;IACtB,OAAO,IAAI;EACf;EAEgBC,KAAKA,CAAA,EAA2B;IAC5C,OAAO;MACHD,IAAI,EAAE,QAAQ;MACdE,UAAU,EAAE;QACRF,IAAI,EAAE,OAAO;QACbG,KAAK,EAAE,IAAI,CAACC,MAAM,CAACD,KAAK;QACxBJ,SAAS,EAAE,IAAI,CAACF;MACpB;IACJ,CAAC;EACL;AACJ;AAEA,MAAMQ,uBAAuB,CAA8B;EACvCL,IAAI,GAAG,SAAS;EAEzBM,MAAMA,CAAA,EAAyB;IAClC,OAAO,IAAIV,iBAAiB,CAAC,CAAC;EAClC;AACJ;AAEA,OAAO,MAAMW,gBAAgB,GAAGb,SAAS,CAACc,oBAAoB,CAAC;EAC3DC,cAAc,EAAEJ,uBAAuB;EACvCK,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ import { type IFieldTypeFactory } from "./abstractions.js";
2
+ import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
3
+ export interface IUiSeparatorFieldBuilder extends LayoutFieldBuilder<"uiSeparator"> {
4
+ }
5
+ declare class UiSeparatorFieldTypeFactory implements IFieldTypeFactory {
6
+ readonly type = "uiSeparator";
7
+ create(): IUiSeparatorFieldBuilder;
8
+ }
9
+ export declare const UiSeparatorFieldType: typeof UiSeparatorFieldTypeFactory & {
10
+ __abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
11
+ };
12
+ declare module "../abstractions.js" {
13
+ interface IFieldBuilderRegistry {
14
+ uiSeparator(): IUiSeparatorFieldBuilder;
15
+ }
16
+ }
17
+ export {};
@@ -0,0 +1,31 @@
1
+ import { FieldType } from "./abstractions.js";
2
+ import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
3
+ class SeparatorFieldBuilder extends LayoutFieldBuilder {
4
+ constructor() {
5
+ super("uiSeparator");
6
+ }
7
+ build() {
8
+ return {
9
+ type: "layout",
10
+ layoutCell: {
11
+ type: "separator",
12
+ label: this.config.label,
13
+ description: this.config.description
14
+ }
15
+ };
16
+ }
17
+ }
18
+ class UiSeparatorFieldTypeFactory {
19
+ type = "uiSeparator";
20
+ create() {
21
+ return new SeparatorFieldBuilder();
22
+ }
23
+ }
24
+ export const UiSeparatorFieldType = FieldType.createImplementation({
25
+ implementation: UiSeparatorFieldTypeFactory,
26
+ dependencies: []
27
+ });
28
+
29
+ // Module augmentation for TypeScript autocomplete
30
+
31
+ //# sourceMappingURL=UiSeparatorFieldType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FieldType","LayoutFieldBuilder","SeparatorFieldBuilder","constructor","build","type","layoutCell","label","config","description","UiSeparatorFieldTypeFactory","create","UiSeparatorFieldType","createImplementation","implementation","dependencies"],"sources":["UiSeparatorFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"./abstractions.js\";\nimport { type LayoutFieldBuildResult } from \"./BaseFieldBuilder.js\";\nimport { LayoutFieldBuilder } from \"./LayoutFieldBuilder.js\";\n\nexport interface IUiSeparatorFieldBuilder extends LayoutFieldBuilder<\"uiSeparator\"> {}\n\nclass SeparatorFieldBuilder\n extends LayoutFieldBuilder<\"uiSeparator\">\n implements IUiSeparatorFieldBuilder\n{\n public constructor() {\n super(\"uiSeparator\");\n }\n\n public override build(): LayoutFieldBuildResult {\n return {\n type: \"layout\",\n layoutCell: {\n type: \"separator\",\n label: this.config.label,\n description: this.config.description\n }\n };\n }\n}\n\nclass UiSeparatorFieldTypeFactory implements IFieldTypeFactory {\n public readonly type = \"uiSeparator\";\n\n public create(): IUiSeparatorFieldBuilder {\n return new SeparatorFieldBuilder();\n }\n}\n\nexport const UiSeparatorFieldType = FieldType.createImplementation({\n implementation: UiSeparatorFieldTypeFactory,\n dependencies: []\n});\n\n// Module augmentation for TypeScript autocomplete\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n uiSeparator(): IUiSeparatorFieldBuilder;\n }\n}\n"],"mappings":"AAAA,SAASA,SAAS;AAElB,SAASC,kBAAkB;AAI3B,MAAMC,qBAAqB,SACfD,kBAAkB,CAE9B;EACWE,WAAWA,CAAA,EAAG;IACjB,KAAK,CAAC,aAAa,CAAC;EACxB;EAEgBC,KAAKA,CAAA,EAA2B;IAC5C,OAAO;MACHC,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE;QACRD,IAAI,EAAE,WAAW;QACjBE,KAAK,EAAE,IAAI,CAACC,MAAM,CAACD,KAAK;QACxBE,WAAW,EAAE,IAAI,CAACD,MAAM,CAACC;MAC7B;IACJ,CAAC;EACL;AACJ;AAEA,MAAMC,2BAA2B,CAA8B;EAC3CL,IAAI,GAAG,aAAa;EAE7BM,MAAMA,CAAA,EAA6B;IACtC,OAAO,IAAIT,qBAAqB,CAAC,CAAC;EACtC;AACJ;AAEA,OAAO,MAAMU,oBAAoB,GAAGZ,SAAS,CAACa,oBAAoB,CAAC;EAC/DC,cAAc,EAAEJ,2BAA2B;EAC3CK,YAAY,EAAE;AAClB,CAAC,CAAC;;AAEF","ignoreList":[]}
@@ -0,0 +1,28 @@
1
+ import { type IFieldTypeFactory } from "./abstractions.js";
2
+ import { BaseFieldBuilder } from "./BaseFieldBuilder.js";
3
+ import { LayoutFieldBuilder } from "./LayoutFieldBuilder.js";
4
+ import { type IFieldBuilderRegistry } from "../abstractions.js";
5
+ import type { CmsIcon } from "../../../types/index.js";
6
+ interface ITabConfig {
7
+ label: string;
8
+ icon?: CmsIcon;
9
+ description?: string;
10
+ fields: (registry: IFieldBuilderRegistry) => Record<string, BaseFieldBuilder<any>>;
11
+ layout?: string[][];
12
+ }
13
+ export interface IUiTabsFieldBuilder extends LayoutFieldBuilder<"uiTabs"> {
14
+ tab(id: string, config: ITabConfig): this;
15
+ }
16
+ declare class TabsFieldTypeFactory implements IFieldTypeFactory {
17
+ readonly type = "uiTabs";
18
+ create(registry: IFieldBuilderRegistry): IUiTabsFieldBuilder;
19
+ }
20
+ export declare const UiTabsFieldType: typeof TabsFieldTypeFactory & {
21
+ __abstraction: import("@webiny/di").Abstraction<IFieldTypeFactory>;
22
+ };
23
+ declare module "../abstractions.js" {
24
+ interface IFieldBuilderRegistry {
25
+ uiTabs(): IUiTabsFieldBuilder;
26
+ }
27
+ }
28
+ export {};