@rebasepro/admin 0.2.3 → 0.2.4

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 (210) hide show
  1. package/dist/{CollectionEditorDialog-CmGXXSY9.js → CollectionEditorDialog-D0VqpLPO.js} +70 -77
  2. package/dist/CollectionEditorDialog-D0VqpLPO.js.map +1 -0
  3. package/dist/{CollectionsStudioView-DcLHT5bU.js → CollectionsStudioView-Bc3Rxxc2.js} +5 -4
  4. package/dist/{CollectionsStudioView-DcLHT5bU.js.map → CollectionsStudioView-Bc3Rxxc2.js.map} +1 -1
  5. package/dist/{ExportCollectionAction-BfN34eWX.js → ExportCollectionAction-Ckc-09BQ.js} +4 -3
  6. package/dist/ExportCollectionAction-Ckc-09BQ.js.map +1 -0
  7. package/dist/{ImportCollectionAction-SZrInjhx.js → ImportCollectionAction-BqjIrC3Z.js} +3 -2
  8. package/dist/{ImportCollectionAction-SZrInjhx.js.map → ImportCollectionAction-BqjIrC3Z.js.map} +1 -1
  9. package/dist/{PropertyEditView-Cvryrb3B.js → PropertyEditView-CvRSV-A2.js} +128 -121
  10. package/dist/PropertyEditView-CvRSV-A2.js.map +1 -0
  11. package/dist/collection_editor/ConfigControllerProvider.d.ts +0 -5
  12. package/dist/collection_editor/index.d.ts +0 -1
  13. package/dist/collection_editor/types/collection_editor_controller.d.ts +0 -2
  14. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +3 -3
  15. package/dist/collection_editor_ui.js +3 -3
  16. package/dist/components/ArrayContainer.d.ts +2 -2
  17. package/dist/components/DefaultAppBar.d.ts +18 -1
  18. package/dist/components/DefaultDrawer.d.ts +51 -3
  19. package/dist/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +2 -2
  20. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  21. package/dist/components/EntityCollectionTable/table_bindings.d.ts +4 -3
  22. package/dist/components/EntityCollectionView/hooks/useKanbanDragAndDrop.d.ts +4 -3
  23. package/dist/components/EntityEditView.d.ts +2 -1
  24. package/dist/components/HomePage/HomePageDnD.d.ts +3 -3
  25. package/dist/components/PropertyCollectionView.d.ts +1 -1
  26. package/dist/components/PropertyIdCopyTooltip.d.ts +1 -1
  27. package/dist/components/SelectableTable/SelectionStore.d.ts +4 -1
  28. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +2 -2
  29. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -2
  30. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -2
  31. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +2 -2
  32. package/dist/components/admin/RolesView.d.ts +3 -3
  33. package/dist/components/admin/UsersView.d.ts +3 -3
  34. package/dist/components/app/Drawer.d.ts +8 -1
  35. package/dist/data_export/export/export.d.ts +3 -3
  36. package/dist/editor/components/editor-bubble.d.ts +5 -1
  37. package/dist/editor/components/image-bubble.d.ts +5 -1
  38. package/dist/editor/components/index.d.ts +3 -3
  39. package/dist/editor/components/table-bubble.d.ts +5 -1
  40. package/dist/editor/nodeViews/ReactNodeView.d.ts +4 -1
  41. package/dist/editor/useProseMirror.d.ts +2 -2
  42. package/dist/editor/utils/remove_classes.d.ts +1 -1
  43. package/dist/editor.js +15 -14
  44. package/dist/editor.js.map +1 -1
  45. package/dist/form/EntityForm.d.ts +2 -2
  46. package/dist/form/components/StorageUploadProgress.d.ts +2 -2
  47. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +1 -1
  48. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +1 -1
  49. package/dist/form/validation.d.ts +3 -3
  50. package/dist/hooks/navigation/useResolvedCollections.d.ts +6 -0
  51. package/dist/hooks/navigation/useResolvedViews.d.ts +3 -4
  52. package/dist/{index-PLIQXpTt.js → index-BCcLwgfe.js} +3 -2
  53. package/dist/{index-PLIQXpTt.js.map → index-BCcLwgfe.js.map} +1 -1
  54. package/dist/{index-DjduZG1T.js → index-DY2k5TtG.js} +3 -3
  55. package/dist/index-DY2k5TtG.js.map +1 -0
  56. package/dist/{index-MKPc70-v.js → index-UQOMHwt1.js} +3 -3
  57. package/dist/index-UQOMHwt1.js.map +1 -0
  58. package/dist/index.d.ts +1 -1
  59. package/dist/index.js +2813 -372
  60. package/dist/index.js.map +1 -1
  61. package/dist/{markdown-z2Ir7Cgo.js → markdown-DD2JDU1X.js} +2 -2
  62. package/dist/markdown-DD2JDU1X.js.map +1 -0
  63. package/dist/preview/components/UrlComponentPreview.d.ts +1 -0
  64. package/dist/types/components/EntityFormActionsProps.d.ts +1 -1
  65. package/dist/types/components/EntityFormProps.d.ts +2 -2
  66. package/dist/types/fields.d.ts +1 -1
  67. package/dist/{util-DbWax_sV.js → util-ZM9gQuCv.js} +2031 -2078
  68. package/dist/util-ZM9gQuCv.js.map +1 -0
  69. package/package.json +8 -8
  70. package/src/collection_editor/ConfigControllerProvider.tsx +3 -13
  71. package/src/collection_editor/index.ts +1 -3
  72. package/src/collection_editor/types/collection_editor_controller.tsx +0 -3
  73. package/src/collection_editor/ui/EditorCollectionAction.tsx +1 -6
  74. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +1 -6
  75. package/src/collection_editor/ui/EditorEntityAction.tsx +1 -6
  76. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +7 -14
  77. package/src/collection_editor/ui/NewCollectionCard.tsx +1 -5
  78. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +3 -8
  79. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +8 -12
  80. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +21 -21
  81. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +4 -4
  82. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +1 -1
  83. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +3 -3
  84. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +3 -3
  85. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +8 -8
  86. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +5 -5
  87. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +2 -2
  88. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +5 -5
  89. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +5 -5
  90. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +2 -2
  91. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +2 -2
  92. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +8 -8
  93. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +5 -5
  94. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +3 -2
  95. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +2 -2
  96. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +2 -2
  97. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +1 -1
  98. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +4 -7
  99. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +4 -4
  100. package/src/components/ArrayContainer.tsx +3 -3
  101. package/src/components/DefaultAppBar.tsx +52 -31
  102. package/src/components/DefaultDrawer.tsx +279 -66
  103. package/src/components/DrawerNavigationItem.tsx +1 -1
  104. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +6 -5
  105. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +9 -7
  106. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +5 -5
  107. package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +12 -9
  108. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +2 -2
  109. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +1 -1
  110. package/src/components/EntityCollectionTable/table_bindings.tsx +5 -4
  111. package/src/components/EntityCollectionView/EntityCollectionView.tsx +6 -4
  112. package/src/components/EntityCollectionView/hooks/useCollectionInlineEditor.ts +1 -1
  113. package/src/components/EntityCollectionView/hooks/useKanbanDragAndDrop.ts +7 -6
  114. package/src/components/EntityDetailView.tsx +46 -24
  115. package/src/components/EntityEditView.tsx +51 -28
  116. package/src/components/EntityEditViewFormActions.tsx +4 -4
  117. package/src/components/EntityPreview.tsx +9 -4
  118. package/src/components/HomePage/HomePageDnD.tsx +3 -2
  119. package/src/components/PropertyCollectionView.tsx +1 -1
  120. package/src/components/PropertyIdCopyTooltip.tsx +1 -1
  121. package/src/components/RebaseLayout.tsx +5 -1
  122. package/src/components/RebaseNavigation.tsx +2 -2
  123. package/src/components/RebaseRouteDefs.tsx +4 -7
  124. package/src/components/RebaseShell.tsx +16 -13
  125. package/src/components/SearchIconsView.tsx +1 -8
  126. package/src/components/SelectableTable/SelectableTable.tsx +8 -11
  127. package/src/components/SelectableTable/SelectionStore.ts +1 -1
  128. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +3 -3
  129. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +3 -3
  130. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +5 -5
  131. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +3 -3
  132. package/src/components/SideEntityProvider.tsx +2 -1
  133. package/src/components/admin/RolesView.tsx +7 -2
  134. package/src/components/admin/UsersView.tsx +12 -6
  135. package/src/components/app/Drawer.tsx +9 -1
  136. package/src/components/app/Scaffold.tsx +5 -1
  137. package/src/data_export/export/export.ts +17 -17
  138. package/src/data_import/components/DataNewPropertiesMapping.tsx +1 -1
  139. package/src/editor/components/editor-bubble.tsx +32 -9
  140. package/src/editor/components/image-bubble.tsx +27 -11
  141. package/src/editor/components/index.ts +3 -3
  142. package/src/editor/components/table-bubble.tsx +79 -17
  143. package/src/editor/extensions/HighlightDecorationExtension.ts +3 -2
  144. package/src/editor/nodeViews/ReactNodeView.tsx +1 -1
  145. package/src/editor/nodeViews/TaskItemComponent.tsx +9 -8
  146. package/src/editor/schema.ts +135 -59
  147. package/src/editor/selectors/link-selector.tsx +8 -5
  148. package/src/editor/useProseMirror.ts +2 -2
  149. package/src/editor/utils/remove_classes.ts +6 -5
  150. package/src/form/EntityForm.tsx +15 -15
  151. package/src/form/EntityFormActions.tsx +2 -2
  152. package/src/form/PropertyFieldBinding.tsx +64 -64
  153. package/src/form/components/FieldHelperText.tsx +4 -4
  154. package/src/form/components/StorageUploadProgress.tsx +2 -2
  155. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +1 -1
  156. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +1 -1
  157. package/src/form/field_bindings/BlockFieldBinding.tsx +54 -53
  158. package/src/form/field_bindings/KeyValueFieldBinding.tsx +290 -289
  159. package/src/form/field_bindings/MapFieldBinding.tsx +2 -2
  160. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +2 -2
  161. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +1 -1
  162. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +1 -1
  163. package/src/form/field_bindings/ReferenceFieldBinding.tsx +8 -6
  164. package/src/form/field_bindings/RelationFieldBinding.tsx +4 -4
  165. package/src/form/field_bindings/RepeatFieldBinding.tsx +1 -1
  166. package/src/form/field_bindings/SelectFieldBinding.tsx +1 -1
  167. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +84 -84
  168. package/src/form/field_bindings/SwitchFieldBinding.tsx +16 -16
  169. package/src/form/field_bindings/TextFieldBinding.tsx +77 -73
  170. package/src/form/field_bindings/UserSelectFieldBinding.tsx +17 -17
  171. package/src/form/validation.ts +43 -43
  172. package/src/hooks/navigation/useBuildNavigationStateController.tsx +3 -5
  173. package/src/hooks/navigation/useResolvedCollections.ts +27 -7
  174. package/src/hooks/navigation/useResolvedViews.tsx +24 -44
  175. package/src/index.ts +2 -0
  176. package/src/preview/PropertyPreview.tsx +2 -2
  177. package/src/preview/components/ImagePreview.tsx +2 -1
  178. package/src/preview/components/UrlComponentPreview.tsx +11 -2
  179. package/src/preview/components/UserPreview.tsx +1 -1
  180. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +2 -2
  181. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +4 -4
  182. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +3 -3
  183. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +3 -3
  184. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +3 -2
  185. package/src/preview/property_previews/ArrayOneOfPreview.tsx +6 -8
  186. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +1 -1
  187. package/src/preview/property_previews/ArrayPropertyPreview.tsx +3 -3
  188. package/src/preview/property_previews/MapPropertyPreview.tsx +4 -3
  189. package/src/preview/property_previews/NumberPropertyPreview.tsx +5 -3
  190. package/src/preview/property_previews/StringPropertyPreview.tsx +10 -8
  191. package/src/types/components/EntityFormActionsProps.tsx +1 -1
  192. package/src/types/components/EntityFormProps.tsx +2 -2
  193. package/src/types/fields.tsx +2 -2
  194. package/dist/CollectionEditorDialog-CmGXXSY9.js.map +0 -1
  195. package/dist/ContentHomePage-C7vFqKSe.js +0 -1784
  196. package/dist/ContentHomePage-C7vFqKSe.js.map +0 -1
  197. package/dist/ExportCollectionAction-BfN34eWX.js.map +0 -1
  198. package/dist/PropertyEditView-Cvryrb3B.js.map +0 -1
  199. package/dist/RoleChip-QtUFXeTp.js +0 -67
  200. package/dist/RoleChip-QtUFXeTp.js.map +0 -1
  201. package/dist/RolesView-BCb7qwWs.js +0 -437
  202. package/dist/RolesView-BCb7qwWs.js.map +0 -1
  203. package/dist/UsersView-Cex24r8H.js +0 -408
  204. package/dist/UsersView-Cex24r8H.js.map +0 -1
  205. package/dist/collection_editor/types/config_permissions.d.ts +0 -19
  206. package/dist/index-DjduZG1T.js.map +0 -1
  207. package/dist/index-MKPc70-v.js.map +0 -1
  208. package/dist/markdown-z2Ir7Cgo.js.map +0 -1
  209. package/dist/util-DbWax_sV.js.map +0 -1
  210. package/src/collection_editor/types/config_permissions.ts +0 -20
@@ -1 +0,0 @@
1
- {"version":3,"file":"CollectionEditorDialog-CmGXXSY9.js","sources":["../src/collection_editor/ui/collection_editor/CollectionYupValidation.tsx","../src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx","../src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx","../src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx","../src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx","../src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx","../src/collection_editor/ui/collection_editor/GetCodeDialog.tsx","../src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx","../src/collection_editor/ui/collection_editor/templates/products_template.ts","../src/collection_editor/ui/collection_editor/templates/blog_template.ts","../src/collection_editor/ui/collection_editor/templates/users_template.ts","../src/collection_editor/ui/collection_editor/templates/pages_template.ts","../src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx","../src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/collection_editor/ui/collection_editor/import/clean_import_data.ts","../src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx","../src/collection_editor/pgColumnToProperty.ts","../src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx"],"sourcesContent":["import { z } from \"zod\";\n\nexport const CollectionEditorSchema = z.object({\n slug: z.string().min(1, \"Required\"),\n name: z.string().min(1, \"Required\"),\n table: z.string().min(1, \"Required\")\n});\n\n\n","\nimport { IconForView } from \"@rebasepro/core\";\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { SearchIconsView } from \"../../_cms_internals\";\nimport type { EntityCollection, PostgresCollection } from \"@rebasepro/types\";\nimport {\n BooleanSwitchWithLabel,\n Chip,\n cls,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n HistoryIcon,\n IconButton,\n iconSize,\n SearchIcon,\n Select,\n SelectItem,\n TextField,\n Tooltip,\n Typography\n} from \"@rebasepro/ui\";\nimport { Field, getIn, useFormex } from \"@rebasepro/formex\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\nimport { singular, toSnakeCase } from \"@rebasepro/utils\";\n\nexport function GeneralSettingsForm({\n isNewCollection,\n existingPaths,\n existingIds,\n parentCollection\n}: {\n isNewCollection: boolean;\n existingPaths?: string[];\n existingIds?: string[];\n parentCollection?: EntityCollection;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n submitCount\n } = useFormex<PostgresCollection>();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const configController = useCollectionsConfigController();\n\n const updateDatabaseId = (databaseId: string) => {\n setFieldValue(\"databaseId\", databaseId ?? undefined);\n }\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"table\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"table\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"slug\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"slug\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n };\n\n const collectionIcon = <IconForView collectionOrView={values}/>;\n const isSubcollection = !!parentCollection;\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <div className=\"flex flex-row gap-2 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <DefaultDatabaseField databaseId={values.databaseId}\n disabled={configController?.readOnly}\n onDatabaseIdUpdate={updateDatabaseId}/>\n\n <Tooltip title={\"Change icon\"}\n asChild={true}>\n <IconButton\n shape={\"square\"}\n disabled={configController?.readOnly}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"teal\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n\n <fieldset disabled={configController?.readOnly} className=\"contents\">\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Name */}\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => updateName(e.target.value)}\n label={\"Name\"}\n autoFocus={true}\n required\n error={showErrors && Boolean(errors.name)}/>\n <FieldCaption error={touched.name && Boolean(errors.name)}>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n {/* Table name */}\n <div className={cls(\"col-span-12\")}>\n <Field name={\"table\"}\n as={DebouncedTextField}\n label={\"Table name\"}\n required\n error={showErrors && Boolean(errors.table)}/>\n\n <FieldCaption error={touched.table && Boolean(errors.table)}>\n {touched.table && Boolean(errors.table)\n ? errors.table\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"PostgreSQL table name for this collection\"}\n </FieldCaption>\n </div>\n\n\n {/* Singular Name */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.singularName)}\n name={\"singularName\"}\n aria-describedby={\"singularName-helper\"}\n onChange={(e) => {\n setFieldTouched(\"singularName\", true);\n return handleChange(e);\n }}\n value={values.singularName ?? \"\"}\n label={\"Singular name\"}/>\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define a singular name for your entities\"}\n </FieldCaption>\n </div>\n\n {/* Description */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.description)}\n name=\"description\"\n value={values.description ?? \"\"}\n onChange={handleChange}\n multiline\n minRows={2}\n aria-describedby=\"description-helper-text\"\n label=\"Description\"\n />\n <FieldCaption error={showErrors && Boolean(errors.description)}>\n {showErrors && Boolean(errors.description) ? errors.description : \"Description of the collection, you can use markdown\"}\n </FieldCaption>\n </div>\n\n {/* Collection ID */}\n <div className={\"col-span-12\"}>\n <DebouncedTextField\n name={\"slug\"}\n value={values.slug ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => setFieldValue(\"slug\", e.target.value)}\n disabled={!isNewCollection}\n label={\"Collection ID\"}\n error={showErrors && Boolean(errors.slug)}/>\n <FieldCaption error={touched.slug && Boolean(errors.slug)}>\n {touched.slug && Boolean(errors.slug) ? errors.slug : \"This ID identifies this collection. Typically the same as the path.\"}\n </FieldCaption>\n </div>\n\n </div>\n\n {/* Advanced Settings */}\n {/* eslint-disable-next-line no-constant-condition */}\n {false ? <ExpandablePanel\n title={<Typography variant=\"subtitle2\">Advanced settings</Typography>}\n initiallyExpanded={false}\n className=\"mt-4\"\n innerClassName=\"p-4 flex flex-col gap-4\"\n >\n {/* HistoryIcon revisions */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n allowIndeterminate={true}\n label={<span className=\"flex items-center gap-2\"><HistoryIcon size={iconSize.smallest}/>{values.history === null || values.history === undefined ? \"Document history revisions enabled if enabled globally\" : (\n values.history ? \"Document history revisions ENABLED\" : \"Document history revisions NOT enabled\"\n )}</span>}\n onValueChange={(v) => setFieldValue(\"history\", v)}\n value={values.history ?? null}\n />\n <FieldCaption>\n When enabled, each document in this collection will have a history of changes.\n This is useful for auditing purposes. The data is stored in a subcollection of the document\n in your database, called <b>__history</b>.\n </FieldCaption>\n </div>\n\n </ExpandablePanel> : null}\n </fieldset>\n\n <div style={{ height: \"52px\" }}/>\n\n <Dialog\n open={iconDialogOpen}\n onOpenChange={setIconDialogOpen}\n maxWidth={\"xl\"}\n fullWidth\n >\n <div className={\"p-4 overflow-auto min-h-[200px]\"}>\n <SearchIconsView selectedIcon={typeof values.icon === \"string\" ? values.icon : undefined}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }}/>\n </div>\n </Dialog>\n\n </Container>\n </div>\n );\n}\n\nfunction DefaultDatabaseField({\n databaseId,\n disabled = false,\n onDatabaseIdUpdate\n}: { databaseId?: string, disabled?: boolean, onDatabaseIdUpdate: (databaseId: string) => void }) {\n\n return <Tooltip title={\"Database ID\"}\n side={\"top\"}\n align={\"start\"}>\n <TextField size={\"small\"}\n invisible={true}\n inputClassName={\"text-end\"}\n disabled={disabled}\n value={databaseId ?? \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => onDatabaseIdUpdate(e.target.value)}\n placeholder={\"(default)\"}></TextField>\n </Tooltip>\n}\n","import {\n AppWindow,\n cls,\n ColumnsIcon,\n PanelLeftIcon,\n SquareIcon,\n ToggleButtonGroup,\n Typography\n} from \"@rebasepro/ui\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n}: {\n value: \"side_panel\" | \"full_screen\" | \"split\" | \"dialog\";\n onChange: (value: \"side_panel\" | \"full_screen\" | \"split\" | \"dialog\") => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Document view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"side_panel\",\n label: \"Side panel\",\n icon: <ColumnsIcon/>\n },\n {\n value: \"full_screen\",\n label: \"Full screen\",\n icon: <SquareIcon/>\n },\n {\n value: \"split\",\n label: \"Split view\",\n icon: <PanelLeftIcon/>\n },\n {\n value: \"dialog\",\n label: \"Centered dialog\",\n icon: <AppWindow/>\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen, inline side dialog, or centered dialog</Typography>\n </div>\n}\n","import { ViewMode } from \"@rebasepro/types\";\nimport {\n cls,\n KanbanIcon,\n LayoutGridIcon,\n ListIcon,\n TableIcon,\n ToggleButtonGroup,\n Typography\n} from \"@rebasepro/ui\";\n\nexport function ViewModeSwitch({\n value,\n onChange,\n className\n}: {\n value: ViewMode;\n onChange: (value: ViewMode) => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Default collection view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"list\",\n label: \"List\",\n icon: <ListIcon/>\n },\n {\n value: \"table\",\n label: \"Table\",\n icon: <TableIcon/>\n },\n {\n value: \"cards\",\n label: \"Cards\",\n icon: <LayoutGridIcon/>\n },\n {\n value: \"kanban\",\n label: \"Kanban\",\n icon: <KanbanIcon/>\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Choose how entities should be displayed by default</Typography>\n </div>\n}\n","\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { EntityCollection, Property } from \"@rebasepro/types\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { getFieldConfig } from \"../../../components/field_configs\";\nimport { Button, IconButton, iconSize, Select, SelectItem, Typography, XIcon } from \"@rebasepro/ui\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\nimport { unslugify } from \"@rebasepro/utils\";\n\nexport function KanbanConfigSection({\n className,\n forceExpanded\n}: {\n className?: string;\n forceExpanded?: boolean;\n}) {\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const { values, setFieldValue } = useFormex<EntityCollection>();\n const panelRef = useRef<HTMLDivElement>(null);\n const [columnPropertyDialogOpen, setColumnPropertyDialogOpen] = useState(false);\n\n // Get enum string properties (for columnProperty)\n const enumStringProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property }[] = [];\n if (!values.properties) return result;\n\n Object.entries(values.properties).forEach(([key, prop]) => {\n if (prop && \"type\" in prop && prop.type === \"string\" && prop.enum) {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [values.properties]);\n\n const kanbanConfig = values.kanban;\n\n // Check if columnProperty references a non-existent property\n const columnPropertyMissing = Boolean(kanbanConfig?.columnProperty) &&\n !enumStringProperties.some(p => p.key === kanbanConfig?.columnProperty);\n\n // Scroll to section when forceExpanded\n React.useEffect(() => {\n if (forceExpanded && panelRef.current) {\n setTimeout(() => {\n panelRef.current?.scrollIntoView({ behavior: \"smooth\",\nblock: \"center\" });\n }, 100);\n }\n }, [forceExpanded]);\n\n const showCreateButton = !kanbanConfig?.columnProperty || columnPropertyMissing;\n const dialogPropertyKey = columnPropertyMissing && kanbanConfig?.columnProperty\n ? kanbanConfig.columnProperty\n : \"status\";\n const dialogPropertyName = columnPropertyMissing && kanbanConfig?.columnProperty\n ? unslugify(kanbanConfig.columnProperty)\n : \"Status\";\n\n return (\n <div className={className} ref={panelRef}>\n <Select\n key={`column-select-${enumStringProperties.length}`}\n name=\"kanban.columnProperty\"\n label=\"Kanban Column Property\"\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={enumStringProperties.length === 0}\n error={columnPropertyMissing}\n value={kanbanConfig?.columnProperty ?? \"\"}\n onValueChange={(v) => {\n if (v) {\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: v\n });\n } else {\n setFieldValue(\"kanban\", undefined);\n }\n }}\n renderValue={(value) => {\n if (columnPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = enumStringProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={kanbanConfig?.columnProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"kanban\", undefined);\n }}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n ) : undefined}\n >\n {enumStringProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Enum\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={columnPropertyMissing}>\n {columnPropertyMissing\n ? `Property \"${kanbanConfig?.columnProperty}\" does not exist or is not an enum string property. Please select a valid property or clear the selection.`\n : enumStringProperties.length === 0\n ? \"No enum string properties found. Add a string property with enum to use Kanban view.\"\n : \"Select a string property with enum values to group entities into columns\"\n }\n </FieldCaption>\n\n {showCreateButton && (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n className=\"ml-3.5 mt-2\"\n onClick={() => setColumnPropertyDialogOpen(true)}\n >\n + Create &quot;{dialogPropertyKey}&quot; property\n </Button>\n <PropertyFormDialog\n open={columnPropertyDialogOpen}\n onCancel={() => setColumnPropertyDialogOpen(false)}\n property={{\n type: \"string\",\n name: dialogPropertyName,\n enum: [\n { id: \"todo\",\nlabel: \"To Do\" },\n { id: \"in_progress\",\nlabel: \"In Progress\" },\n { id: \"done\",\nlabel: \"Done\" }\n ]\n } as Property}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: id\n });\n setColumnPropertyDialogOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n","\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useMemo, useState } from \"react\";\nimport { useAuthController, useCustomizationController } from \"@rebasepro/core\";\nimport { getFieldConfig } from \"../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { EntityCollection, Property } from \"@rebasepro/types\";\nimport {\n BooleanSwitchWithLabel,\n Button,\n Container,\n IconButton,\n iconSize,\n Select,\n SelectItem,\n TextField,\n Typography,\n XIcon\n} from \"@rebasepro/ui\";\n\nimport { useFormex } from \"@rebasepro/formex\";\nimport { LayoutModeSwitch } from \"./LayoutModeSwitch\";\nimport { ViewModeSwitch } from \"./ViewModeSwitch\";\nimport { KanbanConfigSection } from \"./KanbanConfigSection\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\nimport { unslugify } from \"@rebasepro/utils\";\n\nexport function DisplaySettingsForm({\n expandKanban\n}: {\n expandKanban?: boolean;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [orderPropertyDialogOpen, setOrderPropertyDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const configController = useCollectionsConfigController();\n\n // Get text properties (for orderProperty - uses string fractional indexing keys)\n const textProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property; }[] = [];\n if (!values.properties) return result;\n\n Object.entries(values.properties).forEach(([key, prop]) => {\n if (prop && \"type\" in prop && prop.type === \"string\") {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [values.properties]);\n\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <Typography variant={\"h5\"} className={\"flex-grow\"}>\n Display settings\n </Typography>\n </div>\n\n <fieldset disabled={configController?.readOnly} className=\"contents\">\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Layout Mode (Side dialog vs Full screen) */}\n <LayoutModeSwitch\n className={\"col-span-12\"}\n value={values.openEntityMode ?? \"side_panel\"}\n onChange={(value) => setFieldValue(\"openEntityMode\", value)}/>\n\n {/* View Mode (Table/Cards/Kanban) */}\n <ViewModeSwitch\n className={\"col-span-12\"}\n value={values.defaultViewMode ?? \"table\"}\n onChange={(value) => setFieldValue(\"defaultViewMode\", value)}/>\n\n {/* Kanban Column Property */}\n <KanbanConfigSection className={\"col-span-12\"} forceExpanded={expandKanban}/>\n\n {/* Order Property */}\n <div className={\"col-span-12 mt-4\"}>\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !textProperties.some(p => p.key === values.orderProperty);\n\n return (\n <>\n <Select\n key={`order-select-${textProperties.length}`}\n name=\"orderProperty\"\n label=\"Order Property\"\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={textProperties.length === 0}\n error={orderPropertyMissing}\n value={values.orderProperty ?? \"\"}\n onValueChange={(v) => {\n setFieldValue(\"orderProperty\", v || undefined);\n }}\n renderValue={(value) => {\n if (orderPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = textProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={values.orderProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"orderProperty\", undefined);\n }}\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n ) : undefined}\n >\n {textProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig}/>\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Text\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={orderPropertyMissing}>\n {orderPropertyMissing\n ? `Property \"${values.orderProperty}\" does not exist or is not a text property. Please select a valid property or clear the selection.`\n : textProperties.length === 0\n ? \"No text properties found. Add a text property to enable ordering.\"\n : \"Select a text property to persist the order of items\"\n }\n </FieldCaption>\n </>\n );\n })()}\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !textProperties.some(p => p.key === values.orderProperty);\n const showCreateButton = !values.orderProperty || orderPropertyMissing;\n\n const dialogPropertyKey = orderPropertyMissing && values.orderProperty\n ? values.orderProperty\n : \"__order\";\n const dialogPropertyName = orderPropertyMissing && values.orderProperty\n ? unslugify(values.orderProperty)\n : \"Order\";\n\n if (!showCreateButton) return null;\n\n return (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n className=\"ml-3.5 mt-2\"\n onClick={() => setOrderPropertyDialogOpen(true)}\n >\n + Create &quot;{dialogPropertyKey}&quot; property\n </Button>\n <PropertyFormDialog\n open={orderPropertyDialogOpen}\n onCancel={() => setOrderPropertyDialogOpen(false)}\n property={{\n type: \"string\",\n name: dialogPropertyName,\n ui: { disabled: true, hideFromCollection: true }\n }}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"orderProperty\", id);\n setOrderPropertyDialogOpen(false);\n }}\n />\n </>\n );\n })()}\n </div>\n\n {/* Default row size */}\n <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n fullWidth={true}\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: string) => value.toUpperCase()}\n >\n {[\"xs\", \"s\", \"m\", \"l\", \"xl\"].map((value) => (\n <SelectItem\n key={`size-select-${value}`}\n value={value}>\n {value.toUpperCase()}\n </SelectItem>\n ))}\n </Select>\n </div>\n\n {/* Side dialog width */}\n <div className={\"col-span-12\"}>\n <TextField\n name={\"sideDialogWidth\"}\n type={\"number\"}\n aria-describedby={\"sideDialogWidth-helper\"}\n onChange={(e) => {\n const value = e.target.value;\n if (!value) {\n setFieldValue(\"sideDialogWidth\", null);\n } else if (!isNaN(Number(value))) {\n setFieldValue(\"sideDialogWidth\", Number(value));\n }\n }}\n endAdornment={<IconButton\n size={\"small\"}\n onClick={() => {\n setFieldValue(\"sideDialogWidth\", null);\n }}\n disabled={!values.sideDialogWidth}>\n <XIcon size={iconSize.small}/>\n </IconButton>}\n value={values.sideDialogWidth ?? \"\"}\n label={\"Side dialog width\"}/>\n <FieldCaption>\n Optionally define the width (in pixels) of entities side dialog. Default is 768px\n </FieldCaption>\n </div>\n\n {/* Inline editing */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label={values.inlineEditing === undefined || values.inlineEditing ? \"Data can be edited directly in the table view\" : \"Data can be edited only in the form view\"}\n onValueChange={(v) => setFieldValue(\"inlineEditing\", v)}\n value={values.inlineEditing === undefined ? true : values.inlineEditing}\n />\n <FieldCaption>\n Allow editing data directly in the table view, without opening the form view.\n </FieldCaption>\n </div>\n\n {/* Include JSON view */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n label={values.includeJsonView === undefined || values.includeJsonView ? \"Include JSON view\" : \"Do not include JSON view\"}\n onValueChange={(v) => setFieldValue(\"includeJsonView\", v)}\n value={values.includeJsonView === undefined ? true : values.includeJsonView}\n />\n <FieldCaption>\n Allows removing the form view JSON tab if you think it is confusing for your users.\n </FieldCaption>\n </div>\n\n </div>\n </fieldset>\n\n <div style={{ height: \"52px\" }}/>\n\n </Container>\n </div>\n );\n}\n","import { useSnackbarController } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { Button, CopyIcon, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@rebasepro/ui\";\nimport React from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\nimport { clone } from \"@rebasepro/formex\";\nimport { isEmptyObject } from \"@rebasepro/utils\";\n\nexport function GetCodeDialog({\n collection,\n onOpenChange,\n open\n}: { onOpenChange: (open: boolean) => void, collection: EntityCollection, open: boolean }) {\n\n const snackbarController = useSnackbarController();\n\n const code = collection\n ? \"import { EntityCollection } from \\\"@rebasepro/core\\\";\\n\\nconst \" + (collection?.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionToCode({ ...collection }), null, \"\\t\")\n : \"No collection selected\";\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <DialogTitle variant={\"h6\"}>Code for {collection.name}</DialogTitle>\n <DialogContent>\n\n <Typography variant={\"body2\"} className={\"my-4 mb-8\"}>\n If you want to customise the collection in code, you can add this collection code to your CMS\n app configuration.\n More info in the <a\n rel=\"noopener noreferrer\"\n href={\"https://rebase.pro/docs/cloud/quickstart\"}>docs</a>.\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language=\"typescript\"\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps\n }) => (\n <pre style={style} className={\"p-4 rounded-xs text-sm\"}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })}/>\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n\n </DialogContent>\n <DialogActions>\n <Button\n variant={\"text\"}\n size={\"small\"}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n snackbarController.open({\n type: \"success\",\n message: \"Copied\"\n })\n return navigator.clipboard.writeText(code);\n }}>\n <CopyIcon/>\n CopyIcon to clipboard\n </Button>\n <Button onClick={() => onOpenChange(false)}>Close</Button>\n </DialogActions>\n </Dialog>;\n}\n\nfunction collectionToCode(collection: EntityCollection): object {\n\n const propertyCleanup = (value: unknown): unknown => {\n if (value === undefined || value === null) {\n return value;\n }\n const valueCopy = clone(value);\n if (typeof valueCopy === \"function\") {\n return valueCopy;\n }\n if (Array.isArray(valueCopy)) {\n return valueCopy.map((v: unknown) => propertyCleanup(v));\n }\n if (typeof valueCopy === \"object\") {\n if (valueCopy === null)\n return valueCopy;\n const obj = valueCopy as Record<string, any>;\n Object.keys(obj).forEach((key) => {\n if (!isEmptyObject(obj)) {\n const childRes = propertyCleanup(obj[key]);\n if (childRes !== null && childRes !== undefined && childRes !== false && !isEmptyObject(childRes)) {\n obj[key] = childRes;\n } else {\n delete obj[key];\n }\n }\n });\n delete obj.resolved;\n delete obj.propertiesOrder;\n delete obj.propertyConfig;\n\n }\n\n return valueCopy;\n }\n\n return {\n id: collection.slug,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.slug,\n description: collection.description,\n\n icon: collection.icon,\n defaultFilter: collection.defaultFilter,\n sort: collection.sort,\n properties: Object.entries({\n ...(collection.properties ?? {})\n })\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({\n ...a,\n ...b\n }), {})\n // subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","\nimport React, { useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@rebasepro/formex\";\nimport {\n useLargeLayout,\n useSnackbarController\n} from \"@rebasepro/core\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport {\n Button,\n CircularProgress,\n cls,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n FileSearchIcon,\n IconButton,\n PlusIcon,\n Tooltip,\n Typography\n} from \"@rebasepro/ui\";\nimport { EntityCollection, MapProperty, Properties, Property, PropertyConfig, User } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\ntype PropertyOrBuilder = Property | any;\n\ntype CollectionEditorFormProps = {\n showErrors: boolean;\n isNewCollection: boolean;\n propertyErrorsRef?: React.MutableRefObject<any>;\n onPropertyError: (propertyKey: string, namespace: string | undefined, error?: Record<string, any>) => void;\n setDirty?: (dirty: boolean) => void;\n extraIcon: React.ReactNode | any;\n getUser?: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference?: (collection: EntityCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs\n\n}: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<EntityCollection>();\n\n const snackbarController = useSnackbarController();\n const configController = useCollectionsConfigController();\n\n const largeLayout = useLargeLayout();\n const asDialog = !largeLayout\n\n // index of the selected property within the namespace\n const [selectedPropertyIndex, setSelectedPropertyIndex] = useState<number | undefined>();\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n const [codeDialogOpen, setCodeDialogOpen] = useState<boolean>(false);\n\n const [inferringProperties, setInferringProperties] = useState<boolean>(false);\n\n const [newPropertyDialogOpen, setNewPropertyDialogOpen] = useState<boolean>(false);\n const [inferredPropertyKeys, setInferredPropertyKeys] = useState<string[]>([]);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n useEffect(() => {\n if (setDirty)\n setDirty(dirty);\n }, [dirty]);\n\n const inferPropertiesFromData = doCollectionInference\n ? (): void => {\n if (!doCollectionInference || configController?.readOnly)\n return;\n\n setInferringProperties(true);\n\n console.debug(\"CollectionEditor: inferring properties from data\", values);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n\n // Helper function to find all new property keys including nested ones\n const findNewPropertyKeys = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined,\n namespace?: string\n ): string[] => {\n if (!newProps) return [];\n const keys: string[] = [];\n\n for (const key of Object.keys(newProps)) {\n const fullKey = namespace ? `${namespace}.${key}` : key;\n const existingProp = existingProps?.[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This is a completely new property\n keys.push(fullKey);\n } else if (\n typeof newProp === \"object\" &&\n \"type\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // This is a map property, check for new nested properties\n const existingMapProps = typeof existingProp === \"object\" &&\n \"type\" in existingProp &&\n existingProp.dataType === \"map\"\n ? (existingProp as MapProperty).properties\n : undefined;\n keys.push(...findNewPropertyKeys(existingMapProps, newProp.properties as Record<string, PropertyOrBuilder>, fullKey));\n }\n }\n return keys;\n };\n\n // Helper function to add only new properties without overwriting existing ones\n // This preserves existing property configurations while adding missing nested properties\n const addNewPropertiesOnly = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined\n ): Record<string, PropertyOrBuilder> => {\n if (!newProps) return existingProps ?? {};\n if (!existingProps) return newProps;\n\n const result = { ...existingProps };\n\n for (const key of Object.keys(newProps)) {\n const existingProp = existingProps[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This property doesn't exist, add it\n result[key] = newProp;\n } else if (\n typeof existingProp === \"object\" &&\n \"type\" in existingProp &&\n existingProp.dataType === \"map\" &&\n typeof newProp === \"object\" &&\n \"type\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // Both are map properties, recursively add new nested properties\n // Only if the existing map has properties, merge them; otherwise keep existing as-is\n const existingMapProps = (existingProp as MapProperty).properties as Record<string, PropertyOrBuilder> | undefined;\n if (existingMapProps) {\n result[key] = {\n ...existingProp,\n properties: addNewPropertiesOnly(\n existingMapProps,\n newProp.properties as Record<string, PropertyOrBuilder>\n )\n };\n }\n // If existingProp doesn't have properties, keep it as-is (don't overwrite with inferred)\n }\n // Otherwise, keep the existing property as-is (don't overwrite)\n }\n\n return result;\n };\n\n // Add only new properties from inferred collection without replacing existing ones\n const updatedProperties = addNewPropertiesOnly(\n values.properties ?? {},\n newCollection.properties as Record<string, PropertyOrBuilder>\n ) as { [key: string]: PropertyOrBuilder };\n\n // Find all new property keys including nested ones\n const allNewPropertyKeys = findNewPropertyKeys(\n values.properties,\n newCollection.properties as Record<string, PropertyOrBuilder>\n );\n\n // Find new top-level property keys for the properties order\n const newTopLevelPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n\n // Check if there are any changes (new properties or modified nested properties)\n if (allNewPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n\n // Update properties order: keep existing order and append new keys at the beginning\n // Use Object.keys from updatedProperties to ensure all properties are included\n const allExistingKeys = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const updatedPropertiesOrder = [\n ...newTopLevelPropertyKeys,\n ...allExistingKeys.filter(key => !newTopLevelPropertyKeys.includes(key))\n ];\n\n setFieldValue(\"properties\", updatedProperties, false);\n updatePropertiesOrder(updatedPropertiesOrder);\n setInferredPropertyKeys(allNewPropertyKeys);\n\n snackbarController.open({\n type: \"success\",\n message: `Added ${allNewPropertyKeys.length} new ${allNewPropertyKeys.length === 1 ? \"property\" : \"properties\"}`\n });\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"] ?? getIn(values, namespaceToPropertiesOrderPath());\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n };\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n if (configController?.readOnly) return;\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(idToPropertiesPath(fullId), undefined, false);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n if (currentPropertiesOrder) {\n const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n }\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n if (configController?.readOnly) return;\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\n if (configController?.readOnly) return;\n if (!id) {\n throw Error(\"Need to include an ID when creating a new property\")\n }\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n updatePropertiesOrder(newPropertiesOrder);\n\n setNewPropertyDialogOpen(false);\n if (largeLayout) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n if (id) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = (id: string, namespace?: string, error?: Record<string, any>) => {\n const propertyPath = id ? getFullId(id, namespace) : undefined;\n console.debug(\"onPropertyErrorInternal\", {\n id,\n namespace,\n error,\n propertyPath\n });\n if (propertyPath) {\n const hasError = error && Object.keys(error).length > 0;\n onPropertyError(id, namespace, hasError ? error : undefined);\n setFieldError(idToPropertiesPath(propertyPath), hasError ? \"Property error\" : undefined);\n }\n }\n\n const closePropertyDialog = () => {\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n };\n\n const initialErrors = selectedPropertyKey && propertyErrorsRef?.current?.properties ? propertyErrorsRef.current.properties[selectedPropertyKey] : undefined;\n\n const emptyCollection = (values?.propertiesOrder === undefined || values.propertiesOrder.length === 0)\n && (!values?.properties || Object.keys(values.properties).length === 0);\n\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId && getUser ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n // Get AI generation counter for key to force remount on AI changes\n const aiModifiedPaths = useAIModifiedPaths();\n const generationCounter = aiModifiedPaths?.generationCounter ?? 0;\n\n const onPropertyClick = (propertyKey: string, namespace?: string) => {\n console.debug(\"CollectionEditor: onPropertyClick\", {\n propertyKey,\n namespace\n });\n setSelectedPropertyIndex(usedPropertiesOrder.indexOf(propertyKey));\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n };\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-white dark:bg-surface-950\"}>\n <div className={cls(\n \"bg-surface-50 dark:bg-surface-900\",\n \"p-4 md:p-8\",\n \"col-span-12 lg:col-span-5 h-full overflow-auto\",\n !asDialog && \"border-r \" + defaultBorderMixin\n )}>\n\n <div className=\"flex my-2\">\n\n <div className=\"grow mb-4\">\n\n <Field\n name={\"name\"}\n as={DebouncedTextField}\n invisible={true}\n className=\"-ml-1\"\n inputClassName=\"text-2xl font-headers\"\n placeholder={\"Collection name\"}\n size={\"small\"}\n required\n error={Boolean(errors?.name)}/>\n\n {owner &&\n <Typography variant={\"body2\"}\n className={\"ml-2\"}\n color={\"secondary\"}>\n Created by {owner.displayName}\n </Typography>}\n </div>\n\n {extraIcon && <div className=\"ml-4\">\n {extraIcon}\n </div>}\n\n <div className=\"ml-4 flex flex-row gap-2 items-center flex-shrink-0\">\n {/* <Tooltip title={\"Get the code for this collection\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={() => setCodeDialogOpen(true)}>\n <CodeIcon />\n </IconButton>\n </Tooltip> */}\n {inferPropertiesFromData && <Tooltip title={\"Add new properties based on data\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"}/> : <FileSearchIcon/>}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}>\n <PlusIcon/>\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"mt-2\"}\n inferredPropertyKeys={inferredPropertyKeys}\n selectedPropertyKey={selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined}\n properties={values.properties}\n additionalFields={values.additionalFields}\n propertiesOrder={usedPropertiesOrder}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={(isNewCollection || (inferredPropertyKeys && inferredPropertyKeys.length > 0)) && !configController?.readOnly ? deleteProperty : undefined}\n\n errors={errors}/>\n </ErrorBoundary>\n\n <Button className={\"mt-4 xl:mt-8 w-full\"}\n variant=\"filled\"\n color=\"neutral\"\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<PlusIcon/>}>\n Add new property\n </Button>\n </div>\n\n {!asDialog &&\n <div className={\"col-span-12 lg:col-span-7 p-4 md:py-8 md:px-4 h-full overflow-auto\"}>\n <div\n className=\"sticky top-8 min-h-full w-full flex flex-col justify-center\">\n\n {selectedPropertyFullId &&\n selectedProperty &&\n !isPropertyBuilder(selectedProperty) &&\n <PropertyForm\n inArray={false}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n existingProperty={!isNewCollection}\n autoUpdateId={false}\n allowDataInference={!isNewCollection}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n\n />}\n\n {!selectedProperty &&\n <div className={\"w-full flex flex-col items-center justify-center h-full gap-4\"}>\n <Typography variant={\"label\"} className=\"\">\n {emptyCollection\n ? \"Now you can add your first property\"\n : \"Select a property to edit it\"}\n </Typography>\n <Button\n disabled={configController?.readOnly}\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <PlusIcon/>\n Add new property\n </Button>\n </div>}\n\n {selectedProperty && isPropertyBuilder(selectedProperty) &&\n <Typography variant={\"label\"} className=\"flex items-center justify-center\">\n {\"This property is defined as a property builder in code\"}\n </Typography>}\n </div>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n autoUpdateId={!selectedProperty}\n allowDataInference={!isNewCollection}\n existingProperty={true}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n\n onCancel={closePropertyDialog}\n onOkClicked={asDialog\n ? closePropertyDialog\n : undefined\n }/>}\n\n </div>);\n\n return (<>\n\n {body}\n\n {/* This is the dialog used for new properties*/}\n <PropertyFormDialog\n inArray={false}\n existingProperty={false}\n autoOpenTypeSelect={true}\n autoUpdateId={true}\n forceShowErrors={showErrors}\n open={newPropertyDialogOpen}\n onCancel={() => setNewPropertyDialogOpen(false)}\n onPropertyChanged={onPropertyCreated}\n getData={getData}\n allowDataInference={!isNewCollection}\n propertyConfigs={propertyConfigs}\n existingPropertyKeys={values.propertiesOrder as string[]}/>\n\n <ErrorBoundary>\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen}/>\n </ErrorBoundary>\n </>\n );\n}\n","\nimport React, { useCallback, useState } from \"react\";\nimport {\n Alert,\n Button,\n cls,\n CodeIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n iconSize,\n Typography\n} from \"@rebasepro/ui\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { validateCollectionJson, CollectionValidationError } from \"../../validateCollectionJson\";\n\nconst EXAMPLE_JSON = `{\n \"id\": \"products\",\n \"name\": \"Products\",\n \"path\": \"products\",\n \"icon\": \"shopping_cart\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"name\": \"Name\",\n \"validation\": { \"required\": true }\n },\n \"price\": {\n \"type\": \"number\",\n \"name\": \"Price\"\n },\n \"available\": {\n \"type\": \"boolean\",\n \"name\": \"Available\"\n }\n }\n}`;\n\nexport interface CollectionJsonImportDialogProps {\n open: boolean;\n onClose: () => void;\n onImport: (collection: EntityCollection) => void;\n}\n\nexport function CollectionJsonImportDialog({\n open,\n onClose,\n onImport\n}: CollectionJsonImportDialogProps) {\n const [jsonValue, setJsonValue] = useState<string>(\"\");\n const [errors, setErrors] = useState<CollectionValidationError[]>([]);\n const [touched, setTouched] = useState(false);\n\n const handleJsonChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setJsonValue(value);\n setTouched(true);\n\n if (!value.trim()) {\n setErrors([]);\n return;\n }\n\n const result = validateCollectionJson(value);\n setErrors(result.errors);\n }, []);\n\n const handleImport = useCallback(() => {\n const result = validateCollectionJson(jsonValue);\n if (result.valid && result.collection) {\n onImport(result.collection);\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }\n }, [jsonValue, onImport, onClose]);\n\n const handleClose = useCallback(() => {\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }, [onClose]);\n\n const isValid = touched && jsonValue.trim() && errors.length === 0;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open && handleClose()}\n maxWidth=\"2xl\"\n >\n <DialogTitle className=\"flex items-center gap-2\">\n <CodeIcon size={iconSize.smallest}/>\n Import Collection from JSON\n </DialogTitle>\n <DialogContent className=\"flex flex-col gap-4\">\n <Typography variant=\"body2\" color=\"secondary\">\n Paste a JSON object representing your collection configuration.\n The JSON must include <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">id</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">name</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">path</code>, and\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">properties</code>.\n </Typography>\n\n <textarea\n value={jsonValue}\n onChange={handleJsonChange}\n placeholder={EXAMPLE_JSON}\n rows={12}\n className={cls(\n \"w-full p-3 font-mono text-sm rounded-md border resize-none overflow-y-auto\",\n \"bg-surface-50 dark:bg-surface-800\",\n \"focus:outline-none focus:ring-2 focus:ring-primary\",\n \"h-[300px]\",\n errors.length > 0 && touched\n ? \"border-red-500 dark:border-red-400\"\n : \"border-surface-300 dark:border-surface-600\"\n )}\n />\n\n {errors.length > 0 && touched && (\n <Alert color=\"error\">\n <Typography variant=\"body2\" className=\"font-medium mb-2\">\n Validation errors:\n </Typography>\n <ul className=\"list-disc list-inside space-y-1\">\n {errors.map((error, index) => (\n <li key={index} className=\"text-sm\">\n {error.path ? (\n <>\n <code className=\"bg-red-100 dark:bg-red-900/40 px-1 rounded\">\n {error.path}\n </code>\n : {error.message}\n </>\n ) : (\n error.message\n )}\n </li>\n ))}\n </ul>\n </Alert>\n )}\n\n {isValid && (\n <Alert color=\"success\">\n <Typography variant=\"body2\">\n ✓ JSON is valid and ready to import\n </Typography>\n </Alert>\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n onClick={handleClose}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleImport}\n disabled={!isValid}\n >\n Import Collection\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const productsCollectionTemplate = {\n slug: \"products\",\n table: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"ShoppingCart\",\n description: \"List of the products currently sold in your shop\",\n properties: {\n name: {\n type: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n type: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n type: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n type: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n },\n description: \"Upload field for images\"\n },\n available: {\n type: \"boolean\",\n name: \"Available\",\n ui: { columnWidth: 100 },\n description: \"Is this product available in the website\"\n },\n price: {\n type: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n type: \"array\",\n name: \"Images\",\n ui: { hideFromCollection: true },\n of: {\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n type: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n type: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n type: \"map\",\n keyValue: true\n },\n added_on: {\n type: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const blogCollectionTemplate = {\n slug: \"blog\",\n table: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"FileText\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: {\n name: {\n name: \"Name\",\n validation: { required: true },\n type: \"string\"\n },\n header_image: {\n name: \"Header image\",\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n content: {\n name: \"Content\",\n description: \"Content blocks for the blog entry\",\n validation: { required: true },\n type: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n type: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n type: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n type: \"array\",\n of: {\n type: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n description: \"This fields allows uploading multiple images at once and reordering\"\n },\n products: {\n name: \"Products\",\n type: \"array\",\n of: {\n type: \"reference\",\n path: \"products\",\n previewProperties: [\"name\", \"main_image\"]\n }\n }\n },\n propertiesOrder: [\"text\", \"quote\", \"images\", \"products\"]\n }\n },\n created_on: {\n name: \"Created on\",\n type: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n type: \"string\",\n enum: {\n published: {\n id: \"published\",\n label: \"Published\"\n },\n draft: \"Draft\"\n },\n defaultValue: \"draft\"\n },\n publish_date: {\n name: \"Publish date\",\n type: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n type: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n type: \"array\",\n of: {\n type: \"string\",\n previewAsTag: true\n }\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const usersCollectionTemplate = {\n slug: \"users\",\n table: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"User\",\n properties: {\n displayName: {\n name: \"Display name\",\n type: \"string\"\n },\n email: {\n name: \"Email\",\n type: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n type: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n type: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n type: \"array\",\n of: {\n type: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n type: \"string\",\n url: \"image\"\n }\n }\n} as unknown as EntityCollection;\n","import { EntityCollection } from \"@rebasepro/types\";\n\nexport const pagesCollectionTemplate = {\n slug: \"pages\",\n table: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"File\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n type: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n type: \"string\",\n name: \"URL Slug\",\n validation: {\n required: true,\n unique: true,\n matches: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\",\n matchesMessage: \"Must be lowercase, alphanumeric, and hyphenated\"\n }\n },\n hero_section: {\n type: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n type: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n type: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n type: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n call_to_action: {\n type: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n type: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n type: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n type: \"map\",\n name: \"Section\",\n properties: {\n title: {\n type: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n type: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n type: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n type: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n type: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n type: \"array\",\n name: \"Slider\",\n of: {\n type: \"map\",\n properties: {\n title: {\n type: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n type: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n }\n }\n }\n },\n sidebar: {\n type: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n type: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n type: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n type: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n type: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n type: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n type: \"array\",\n name: \"Focus Keywords\",\n of: {\n type: \"string\"\n }\n }\n }\n },\n footer_override: {\n type: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n type: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n type: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n type: \"boolean\",\n name: \"Is Published\",\n ui: { columnWidth: 100 },\n description: \"Should this page be live on the site?\"\n }\n }\n} as unknown as EntityCollection;\n","\nimport { AIIcon } from \"@rebasepro/core\";\nimport { useCollectionRegistryController } from \"../../_cms_internals\";\nimport React, { useState } from \"react\";\nimport { useSnackbarController } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport {\n Button,\n CircularProgress,\n IconButton,\n Menu,\n SendIcon,\n TextField,\n Tooltip,\n Typography\n} from \"@rebasepro/ui\";\nimport {\n CollectionGenerationCallback,\n CollectionGenerationApiError,\n CollectionOperation\n} from \"../../api/generateCollectionApi\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\nexport interface AICollectionGeneratorPopoverProps {\n /**\n * Current collection being edited (if modifying an existing collection)\n */\n existingCollection?: EntityCollection<any>;\n\n /**\n * Callback when a collection is generated or modified.\n * Includes the collection and optionally the operations that were applied.\n */\n onGenerated: (collection: EntityCollection, operations?: CollectionOperation[]) => void;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection: CollectionGenerationCallback;\n\n /**\n * Optional custom trigger button. If not provided, a default AI button is used.\n */\n trigger?: React.ReactNode | any;\n\n /**\n * Size of the button\n */\n size?: \"small\" | \"medium\" | \"large\";\n\n /**\n * Whether to show the label text\n */\n showLabel?: boolean;\n\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n}\n\nexport function AICollectionGeneratorPopover({\n existingCollection,\n onGenerated,\n generateCollection,\n trigger,\n size = \"small\",\n showLabel = true,\n onAnalyticsEvent\n}: AICollectionGeneratorPopoverProps) {\n const [menuOpen, setMenuOpen] = useState(false);\n const [prompt, setPrompt] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const collectionRegistry = useCollectionRegistryController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const existingCollections = collectionRegistry.collections ?? [];\n\n const handleGenerate = async () => {\n if (!prompt.trim()) return;\n\n setLoading(true);\n setError(null);\n\n const mode = existingCollection ? \"modify\" : \"create\";\n onAnalyticsEvent?.(\"ai_collection_generate_start\", { mode });\n\n try {\n const collectionsContext = existingCollections.map(c => ({\n slug: c.slug,\n name: c.name,\n properties: c.properties,\n propertiesOrder: c.propertiesOrder\n }));\n\n const result = await generateCollection({\n prompt: prompt.trim(),\n existingCollections: collectionsContext.slice(0, 30),\n ...(existingCollection && {\n existingCollection: {\n slug: existingCollection.slug,\n name: existingCollection.name,\n properties: existingCollection.properties,\n propertiesOrder: existingCollection.propertiesOrder\n }\n })\n });\n\n onGenerated(result.collection, result.operations);\n setMenuOpen(false);\n setPrompt(\"\");\n onAnalyticsEvent?.(\"ai_collection_generate_success\", {\n mode,\n operationsCount: result.operations?.length\n });\n snackbarController.open({\n type: \"success\",\n message: existingCollection\n ? \"Collection updated with AI suggestions\"\n : \"Collection generated successfully\"\n });\n } catch (e) {\n console.error(\"Error generating collection:\", e);\n const errorMessage = e instanceof CollectionGenerationApiError\n ? e.message\n : \"Failed to generate collection. Please try again.\";\n setError(errorMessage);\n onAnalyticsEvent?.(\"ai_collection_generate_error\", {\n mode,\n error: errorMessage\n });\n snackbarController.open({\n type: \"error\",\n message: errorMessage\n });\n } finally {\n setLoading(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n const tooltipTitle = configController?.readOnly\n ? (configController.readOnlyReason || \"Collection generation is disabled\")\n : undefined;\n\n const defaultTrigger = showLabel ? (\n <Tooltip title={tooltipTitle} asChild={true}>\n <Button\n variant=\"text\"\n size={size}\n disabled={loading || configController?.readOnly}\n startIcon={loading\n ? <CircularProgress size=\"smallest\"/>\n : <AIIcon size=\"small\"/>\n }\n >\n AI Assist\n </Button>\n </Tooltip>\n ) : (\n <Tooltip title={tooltipTitle} asChild={true}>\n <IconButton\n size={size}\n disabled={loading || configController?.readOnly}\n aria-label=\"AI Assist\"\n >\n {loading\n ? <CircularProgress size=\"smallest\"/>\n : <AIIcon size=\"small\"/>\n }\n </IconButton>\n </Tooltip>\n );\n\n return (\n <Menu\n open={menuOpen}\n onOpenChange={(open) => {\n setMenuOpen(open);\n if (!open) {\n setError(null);\n }\n }}\n trigger={trigger ?? defaultTrigger}\n >\n <div className=\"p-4 flex flex-col gap-3 min-w-[360px] max-w-[480px]\">\n <div className=\"flex items-center gap-2\">\n <AIIcon size=\"small\"/>\n <Typography variant=\"subtitle2\">\n {existingCollection ? \"Modify Collection with AI\" : \"Generate Collection with AI\"}\n </Typography>\n </div>\n\n <Typography variant=\"caption\" color=\"secondary\">\n {existingCollection\n ? \"Describe the changes you want to make to this collection.\"\n : \"Describe the collection you want to create.\"\n }\n </Typography>\n\n <TextField\n size=\"small\"\n multiline\n autoFocus\n className=\"w-full text-text-primary dark:text-text-primary-dark\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={existingCollection\n ? \"e.g., Add a thumbnail image field with storage, make price required...\"\n : \"e.g., Create a products collection with name, price, description, and category...\"\n }\n disabled={loading}\n />\n\n {error && (\n <Typography variant=\"caption\" className=\"text-red-500\">\n {error}\n </Typography>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setMenuOpen(false)}\n disabled={loading}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n size=\"small\"\n onClick={handleGenerate}\n disabled={!prompt.trim() || loading}\n startIcon={loading ? <CircularProgress size=\"smallest\"/> : undefined}\n >\n {loading ? \"Generating...\" : \"Generate\"}\n </Button>\n </div>\n </div>\n </Menu>\n );\n}\n","import { AIIcon } from \"@rebasepro/core\";\n;\nimport React, { useState } from \"react\";\n;\nimport { EntityCollection } from \"@rebasepro/types\";\nimport {\n Button,\n Card,\n Chip,\n cls,\n CodeIcon,\n Container,\n FileIcon,\n FileTextIcon,\n iconSize,\n ShoppingCartIcon,\n TableIcon,\n Tooltip,\n Typography,\n UserIcon\n} from \"@rebasepro/ui\";\nimport { CollectionJsonImportDialog } from \"./CollectionJsonImportDialog\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"../../_cms_internals\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { useCollectionEditorController } from \"../../useCollectionEditorController\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\n\nexport function CollectionEditorWelcomeView({\n path,\n parentCollection,\n onContinue,\n existingCollectionPaths,\n generateCollection,\n onAnalyticsEvent,\n unmappedTables,\n onImportFromTable\n}: {\n path: string;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[], propertiesOrder?: string[]) => void;\n existingCollectionPaths?: string[];\n generateCollection?: CollectionGenerationCallback;\n onAnalyticsEvent?: (event: string, params?: object) => void;\n unmappedTables?: string[];\n onImportFromTable?: (tableName: string) => void;\n}) {\n\n const { pathSuggestions } = useCollectionEditorController();\n\n const filteredSuggestions = (pathSuggestions ?? []).filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [jsonImportOpen, setJsonImportOpen] = useState(false);\n const [importingTable, setImportingTable] = useState<string | null>(null);\n\n // Filter unmapped tables that aren't already mapped\n const filteredUnmappedTables = (unmappedTables ?? []).filter(\n t => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === t.trim().toLowerCase())\n );\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={\"h4\"} className={\"grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"teal\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n {filteredUnmappedTables.length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Import from an existing database table:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredUnmappedTables.map((tableName) => (\n <Chip key={tableName}\n colorScheme={\"purple\"}\n onClick={() => {\n if (onImportFromTable) {\n setImportingTable(tableName);\n onImportFromTable(tableName);\n } else {\n // Fallback: just set path/name like pathSuggestions\n setFieldValue(\"name\", prettifyIdentifier(tableName));\n setFieldValue(\"id\", tableName);\n setFieldValue(\"path\", tableName);\n onContinue();\n }\n }}\n size=\"small\">\n <TableIcon size={iconSize.smallest}/>\n {importingTable === tableName ? \"Loading...\" : tableName}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n\n {(filteredSuggestions ?? []).length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Use one of the existing paths in your database:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyan\"}\n onClick={() => {\n setFieldValue(\"name\", prettifyIdentifier(suggestion));\n setFieldValue(\"id\", suggestion);\n setFieldValue(\"path\", suggestion);\n setFieldValue(\"properties\", undefined);\n onContinue();\n }}\n size=\"small\">\n {suggestion}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n <div className=\"flex flex-row gap-8\">\n\n {generateCollection && (\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Describe your collection to AI:\n </Typography>\n\n <AICollectionGeneratorPopover\n onGenerated={(generatedCollection) => {\n setValues(generatedCollection);\n onContinue();\n }}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n trigger={\n <Button\n variant=\"filled\"\n color=\"neutral\"\n startIcon={<AIIcon size=\"small\"/>}\n >\n Generate with AI\n </Button>\n }\n />\n </div>\n )}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create from JSON configuration:\n </Typography>\n\n <Button\n variant=\"filled\"\n color=\"neutral\"\n onClick={() => setJsonImportOpen(true)}\n startIcon={<CodeIcon size={iconSize.small}/>}\n >\n Paste JSON Configuration\n </Button>\n\n <CollectionJsonImportDialog\n open={jsonImportOpen}\n onClose={() => setJsonImportOpen(false)}\n onImport={(collection) => {\n setValues(collection);\n onContinue();\n }}\n />\n </div>\n\n </div>\n\n {!parentCollection && <div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create a collection from a file (csv, json, xls, xslx...)\n </Typography>\n\n <ImportFileUpload onDataAdded={(data, propertiesOrder) => onContinue(data, propertiesOrder)}/>\n\n </div>}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Select a template:\n </Typography>\n\n <div className={\"flex gap-2\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<ShoppingCartIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(productsCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Users\"}\n subtitle={\"A collection of users with emails, names and roles\"}\n icon={<UserIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(usersCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Blog posts\"}\n subtitle={\"A collection of blog posts with images, authors and complex content\"}\n icon={<FileTextIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(blogCollectionTemplate);\n onContinue();\n }}/>\n <TemplateButton title={\"Pages\"}\n subtitle={\"A collection of pages with images, authors and complex content\"}\n icon={<FileIcon size={iconSize.small}/>}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }}/>\n </div>\n\n </div>\n\n </Container>\n </div>\n );\n}\n\nexport function TemplateButton({\n title,\n subtitle,\n icon,\n onClick\n}: {\n title: string,\n icon: React.ReactNode | any,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}\n asChild={true}>\n <Card\n onClick={onClick}\n className={cls(\n \"my-2 rounded-md border px-4 py-3 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-text-secondary dark:text-text-secondary-dark\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-surface-400 dark:border-surface-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle2\"}>\n {title}\n </Typography>\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import { DataNewPropertiesMapping } from \"../../../../data_import/components/DataNewPropertiesMapping\";\nimport { getInferenceType } from \"../../../../data_import/utils/get_import_inference_type\";\nimport { ImportConfig } from \"../../../../data_import/types\";\nimport { ImportNewPropertyFieldPreview } from \"../../../../data_import/components/ImportNewPropertyFieldPreview\";\nimport { getIn, useFormex } from \"@rebasepro/formex\";\n\nimport { getFieldConfig, getFieldId } from \"../../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../../components/PropertyConfigBadge\";\nimport { EntityCollection, Properties, Property, PropertyConfig } from \"@rebasepro/types\";\nimport { cls, Container, Select, SelectItem, Tooltip, Typography } from \"@rebasepro/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@rebasepro/schema-inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs\n}:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n }) {\n\n // const {\n // values,\n // setFieldValue,\n // setFieldTouched,\n // setValues,\n // submitCount\n // } = useFormex();\n\n const {\n setFieldValue,\n setFieldTouched,\n values\n } = useFormex<EntityCollection>();\n const [selectedProperty, setSelectedProperty] = useState<PropertyWithId | undefined>(undefined);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n const propertyKey = selectedProperty ? selectedProperty.id : undefined;\n const property = selectedProperty || undefined;\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // setSelectedProperty(property);\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n // replace previousId with id in headersMapping\n const newHeadersMapping = { ...importConfig.headersMapping };\n Object.keys(newHeadersMapping).forEach((key) => {\n if (newHeadersMapping[key] === previousId) {\n newHeadersMapping[key] = id ?? \"\";\n }\n });\n importConfig.setHeadersMapping(newHeadersMapping);\n\n // if (id) {\n // setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n // setSelectedPropertyKey(id);\n // }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n };\n const onPropertyTypeChanged = async ({\n id,\n importKey,\n property,\n namespace\n }: OnPropertyChangedParams & {\n importKey: string\n }) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // we try to infer the rest of the properties of a property, from the type and the data\n const propertyData = importConfig.importData.map((d) => getIn(d, importKey));\n const inferredNewProperty = {\n ...buildPropertyFromData(propertyData, property, getInferenceType)\n };\n\n if (propertyPath) {\n if (inferredNewProperty) {\n setFieldValue(propertyPath, inferredNewProperty, false);\n } else {\n setFieldValue(propertyPath, property, false);\n }\n setFieldTouched(propertyPath, true, false);\n }\n };\n\n return (\n\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"6xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <Typography variant=\"h6\" className={\"my-4 ml-3.5\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping importConfig={importConfig}\n destinationProperties={values.properties as Properties}\n buildPropertyView={({\n property,\n propertyKey,\n importKey,\n isIdColumn\n }) => {\n if (isIdColumn) {\n return <Typography> This column will be used as ID</Typography>\n }\n\n return <ImportNewPropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onPropertyNameChanged={(propertyKey: string, value: string) => setFieldValue(`properties.${propertyKey}.name`, value, false)}\n onEditClick={() => {\n if (!propertyKey || !property) return;\n setSelectedProperty({\n ...property,\n id: propertyKey\n });\n }}\n propertyTypeView={<PropertySelect property={property}\n disabled={false}\n onPropertyChanged={(props) => onPropertyTypeChanged({\n ...props,\n importKey\n })}\n propertyKey={propertyKey}\n propertyConfigs={propertyConfigs}/>}\n />;\n }}/>\n </Container>\n\n <PropertyFormDialog\n open={selectedProperty !== undefined}\n propertyKey={propertyKey}\n property={property}\n inArray={false}\n autoUpdateId={false}\n onPropertyChanged={onPropertyChanged}\n allowDataInference={false}\n\n onOkClicked={() => {\n setSelectedProperty(undefined);\n }}\n onCancel={() => {\n setSelectedProperty(undefined);\n }}\n autoOpenTypeSelect={false}\n existingProperty={false}\n propertyConfigs={propertyConfigs}/>\n\n <div style={{ height: \"52px\" }}/>\n </div>\n );\n\n}\n\nfunction PropertySelect({\n property,\n onPropertyChanged,\n propertyKey,\n propertyConfigs,\n disabled\n}: {\n property: Property | null,\n propertyKey: string | null,\n onPropertyChanged: ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n disabled?: boolean\n}) {\n\n const fieldId = property ? getFieldId(property) : null;\n const widget = property ? getFieldConfig(property, propertyConfigs) : null;\n\n const [selectOpen, setSelectOpen] = useState(false);\n\n return <Tooltip title={property && widget ? `${widget?.name} - ${property.type}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n className={\"w-full\"}\n disabled={disabled}\n error={!widget}\n fullWidth={true}\n value={fieldId ?? \"\"}\n placeholder={\"Select a property widget\"}\n position={\"item-aligned\"}\n renderValue={(value) => {\n if (!widget) return null;\n return <PropertyConfigBadge propertyConfig={widget}/>\n }}\n onValueChange={(newSelectedWidgetId) => {\n const newProperty = updatePropertyFromWidget(property, newSelectedWidgetId, propertyConfigs)\n if (!propertyKey) return;\n onPropertyChanged({\n id: propertyKey,\n property: newProperty,\n previousId: propertyKey,\n namespace: undefined\n });\n }}>\n {Object.entries(supportedFields).map(([key, widget]) => {\n return <ImportPropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n\nexport interface ImportPropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function ImportPropertySelectItem({ value, optionDisabled, propertyConfig, existing }: ImportPropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n optionDisabled ? \"w-full\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <div>\n <div>{propertyConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}\n className={\"max-w-sm\"}>\n {existing && optionDisabled ? \"You can only switch to widgets that use the same data type\" : propertyConfig.description}\n </Typography>\n </div>\n </div>\n </SelectItem>\n}\n","import { useCollectionRegistryController } from \"../../../_cms_internals\";\nimport { convertDataToEntity, ImportConfig } from \"../../../_cms_internals\";\nimport { useAuthController } from \"@rebasepro/core\";\nimport { EntityCollectionTable } from \"../../../../components/EntityCollectionTable/EntityCollectionTable\";\nimport { useSelectionController } from \"../../../../components/EntityCollectionView/useSelectionController\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport { Properties } from \"@rebasepro/types\";\nimport { useEffect, useState } from \"react\";\nimport { Typography } from \"@rebasepro/ui\";\n\nexport function CollectionEditorImportDataPreview({\n importConfig,\n properties,\n propertiesOrder\n}: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n const authController = useAuthController();\n const registry = useCollectionRegistryController();\n const [loading, setLoading] = useState<boolean>(false);\n\n async function loadEntities() {\n const mappedData = importConfig.importData.map(d => convertDataToEntity(authController,\n registry,\n d,\n importConfig.idColumn,\n importConfig.headersMapping,\n properties,\n \"TEMP_PATH\",\n importConfig.defaultValues));\n importConfig.setEntities(mappedData);\n }\n\n useEffect(() => {\n loadEntities().finally(() => setLoading(false));\n }, []);\n\n const selectionController = useSelectionController();\n if (loading)\n return <CircularProgressCenter/>\n\n return <EntityCollectionTable\n title={<div>\n <Typography variant={\"subtitle2\"}>Imported data preview</Typography>\n <Typography variant={\"caption\"}>Entities with the same id will be overwritten</Typography>\n </div>}\n tableController={{\n data: importConfig.entities,\n dataLoading: false,\n noMoreToLoad: false\n }}\n endAdornment={<div className={\"h-12\"}/>}\n filterable={false}\n sortable={false}\n selectionController={selectionController}\n displayedColumnIds={propertiesOrder.map(p => ({\n key: p,\n disabled: false\n }))}\n openEntityMode={\"side_panel\"}\n properties={properties}\n enablePopupIcon={false}/>\n\n}\n","import { Properties } from \"@rebasepro/types\";\nimport { ImportConfig } from \"../../../_cms_internals\";\nimport { slugify } from \"@rebasepro/utils\";\n\nexport function cleanPropertiesFromImport(properties: Properties, parentSlug = \"\"): {\n headersMapping: ImportConfig[\"headersMapping\"],\n properties: Properties,\n idColumn?: ImportConfig[\"idColumn\"],\n} {\n\n const result = Object.keys(properties).reduce((acc, key) => {\n const property = properties[key];\n const slug = slugify(key);\n const fullSlug = parentSlug ? `${parentSlug}.${slug}` : slug;\n\n if (property.type === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping,\n[key]: fullSlug },\n properties: {\n ...acc.properties,\n [slug]: {\n ...property,\n properties: slugifiedResult.properties,\n propertiesOrder: Object.keys(slugifiedResult.properties)\n }\n }\n }\n }\n\n const updatedProperties = {\n ...acc.properties,\n [slug]: property\n } as Properties;\n\n const headersMapping = { ...acc.headersMapping,\n[key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties\n }\n }, { headersMapping: {},\nproperties: {} });\n\n const firstKey = Object.keys(result.headersMapping)?.[0];\n let idColumn: string | undefined;\n if (firstKey?.includes(\"id\") || firstKey?.includes(\"key\")) {\n idColumn = firstKey;\n }\n\n return {\n ...result,\n idColumn\n };\n}\n","\nimport { EntityCollection } from \"@rebasepro/types\";\nimport React, { useState, useEffect } from \"react\";\n\n/**\n * Validates and double-quotes a SQL identifier to prevent injection.\n * Only allows safe Postgres identifiers (letters, digits, underscores).\n * Throws if the identifier contains unsafe characters.\n */\nfunction sanitizeSqlIdentifier(name: string): string {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(`Invalid SQL identifier: \"${name}\". Only letters, digits, and underscores are allowed.`);\n }\n return `\"${name}\"`;\n}\nimport {\n Button,\n Chip,\n CircularProgress,\n cls,\n Container,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n iconSize,\n KeyIcon,\n MultiSelect,\n MultiSelectItem,\n Paper,\n Select,\n SelectItem,\n TextField,\n Tooltip,\n Trash2Icon,\n Typography\n} from \"@rebasepro/ui\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { useRebaseContext } from \"@rebasepro/core\";\n\n/** Postgres RLS policy shape — defined inline to avoid depending on @rebasepro/studio */\nexport interface PostgresPolicy {\n policyname: string;\n tablename: string;\n permissive: \"PERMISSIVE\" | \"RESTRICTIVE\";\n roles: string[];\n cmd: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\";\n qual: string | null;\n with_check: string | null;\n status?: \"live\" | \"code_only\" | \"both\";\n}\n\ninterface SecurityRule {\n name: string;\n operation?: string;\n mode?: string;\n using?: string;\n withCheck?: string;\n roles?: string[];\n}\n\ntype CollectionWithSecurity = EntityCollection & {\n securityRules?: SecurityRule[];\n id?: string;\n table?: string;\n alias?: string;\n};\n\nexport function CollectionRLSTab() {\n const { values, setFieldValue } = useFormex<CollectionWithSecurity>();\n const [editingPolicy, setEditingPolicy] = useState<PostgresPolicy | \"new\" | null>(null);\n\n const rules: SecurityRule[] = values.securityRules || [];\n\n const { databaseAdmin } = useRebaseContext();\n const [dbPolicies, setDbPolicies] = useState<PostgresPolicy[]>([]);\n const [isLoadingDb, setIsLoadingDb] = useState(false);\n\n useEffect(() => {\n const fetchLivePolicies = async () => {\n const tableName = values.id || values.table || values.alias;\n if (!tableName || !databaseAdmin?.executeSql) return;\n\n setIsLoadingDb(true);\n try {\n const safeTableName = sanitizeSqlIdentifier(tableName);\n // safeTableName is validated to be [a-zA-Z_][a-zA-Z0-9_]* — safe for string literal\n const quotedName = safeTableName.slice(1, -1); // strip double quotes to get raw name\n const sql = `\n SELECT policyname, permissive, roles, cmd, qual, with_check\n FROM pg_policies\n WHERE tablename = '${quotedName}' AND schemaname NOT IN ('information_schema', 'pg_catalog');\n `;\n const result = await databaseAdmin.executeSql(sql);\n const extractRows = (res: unknown): Record<string, unknown>[] => {\n if (res && typeof res === \"object\" && \"rows\" in res && Array.isArray((res as { rows: Record<string, unknown>[] }).rows)) {\n return (res as { rows: Record<string, unknown>[] }).rows;\n }\n if (Array.isArray(res)) return res as Record<string, unknown>[];\n return [];\n };\n const pRows = extractRows(result);\n const policies: PostgresPolicy[] = pRows.map((p: any) => {\n let parsedRoles: string[] = [];\n const r = p.roles || p.ROLES;\n if (Array.isArray(r)) {\n parsedRoles = r as string[];\n } else if (typeof r === \"string\") {\n parsedRoles = r.replace(/^{|}$/g, \"\").split(\",\").map((s: string) => s.trim());\n }\n return {\n policyname: (p.policyname || p.POLICYNAME || \"\") as string,\n tablename: tableName,\n permissive: (p.permissive || p.PERMISSIVE || \"PERMISSIVE\") as \"PERMISSIVE\" | \"RESTRICTIVE\",\n roles: parsedRoles,\n cmd: (p.cmd || p.CMD || \"ALL\") as \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\",\n qual: (p.qual || p.QUAL || null) as string | null,\n with_check: (p.with_check || p.WITH_CHECK || null) as string | null\n };\n });\n setDbPolicies(policies);\n } catch (e) {\n console.error(\"Failed to fetch DB policies\", e);\n } finally {\n setIsLoadingDb(false);\n }\n };\n fetchLivePolicies();\n }, [databaseAdmin, values.id, values.table, values.alias]);\n\n const unmappedPolicies = dbPolicies.filter(dp => !rules.some(r => r.name === dp.policyname));\n\n const handleSave = async (newPolicy: Partial<PostgresPolicy>) => {\n const rule: SecurityRule = {\n name: newPolicy.policyname ?? \"\",\n operation: newPolicy.cmd?.toLowerCase(),\n mode: newPolicy.permissive?.toLowerCase(),\n using: newPolicy.qual || undefined,\n withCheck: newPolicy.with_check || undefined,\n roles: newPolicy.roles\n };\n\n let newRules;\n if (editingPolicy === \"new\") {\n newRules = [...rules, rule];\n } else {\n newRules = rules.map((r: SecurityRule) => r.name === (editingPolicy as PostgresPolicy).policyname ? rule : r);\n }\n setFieldValue(\"securityRules\", newRules);\n setEditingPolicy(null);\n };\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n <div className=\"w-full flex flex-col\">\n <div className=\"flex items-center justify-between mb-8\">\n <Typography variant=\"h5\">Row Level Security</Typography>\n <Button variant=\"filled\" color=\"neutral\" onClick={() => setEditingPolicy(\"new\")}>\n CREATE POLICY\n </Button>\n </div>\n\n {rules.length === 0 ? (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled py-12\">\n <Typography variant=\"body2\">No RLS policies defined for this collection.</Typography>\n </div>\n ) : (\n <div className=\"flex flex-col gap-3\">\n {rules.map((rule: SecurityRule) => (\n <Paper key={rule.name}\n className={\"p-4 border border-transparent hover:border-surface-200 dark:hover:border-surface-700 rounded-lg flex flex-col sm:flex-row sm:items-center justify-between gap-4 transition-colors bg-white dark:bg-surface-800 shadow-sm\"}>\n <div className=\"flex flex-col gap-1.5 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-text-disabled dark:text-text-disabled-dark shrink-0\"/>\n <Typography variant=\"subtitle2\" className=\"truncate\">{rule.name}</Typography>\n </div>\n <div className=\"flex gap-2 text-xs pl-6 overflow-x-auto hide-scrollbar\">\n <Chip size=\"small\" className=\"bg-surface-100 dark:bg-surface-900 text-text-secondary border-none\">Action: {rule.operation || \"ALL\"}</Chip>\n <Chip size=\"small\" className=\"bg-surface-100 dark:bg-surface-900 text-text-secondary border-none\">Roles: {Array.isArray(rule.roles) ? rule.roles.join(\", \") : rule.roles}</Chip>\n </div>\n </div>\n <div className=\"flex items-center gap-1 sm:gap-2 shrink-0\">\n <Button size=\"small\" variant=\"text\" onClick={() => setEditingPolicy({\n policyname: rule.name,\n tablename: values.id || values.table || values.alias || \"your_table\",\n permissive: (rule.mode || \"permissive\").toUpperCase() as PostgresPolicy[\"permissive\"],\n cmd: (rule.operation || \"ALL\").toUpperCase() as PostgresPolicy[\"cmd\"],\n roles: rule.roles || [\"public\"],\n qual: rule.using || null,\n with_check: rule.withCheck || null\n })}>\n EDIT\n </Button>\n <IconButton size=\"small\" onClick={() => {\n setFieldValue(\"securityRules\", rules.filter((r: SecurityRule) => r.name !== rule.name));\n }}>\n <Trash2Icon size={iconSize.smallest} className=\"text-text-secondary dark:text-text-secondary-dark hover:text-red-500 dark:hover:text-red-500 transition-colors\"/>\n </IconButton>\n </div>\n </Paper>\n ))}\n </div>\n )}\n\n {isLoadingDb && unmappedPolicies.length === 0 && (\n <div className=\"flex justify-center mt-8\">\n <CircularProgress size=\"small\"/>\n </div>\n )}\n\n {!isLoadingDb && unmappedPolicies.length > 0 && (\n <div className=\"mt-12 flex flex-col gap-4\">\n <Typography variant=\"h6\" className=\"text-text-secondary\">Unmapped Database Policies</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary opacity-80 -mt-2\">\n These policies exist in your Postgres database but are not mapped to this collection&apos;s codebase configuration.\n </Typography>\n <div className=\"flex flex-col gap-3\">\n {unmappedPolicies.map(dp => (\n <Paper key={dp.policyname}\n className={\"p-4 border border-orange-200 dark:border-orange-900/50 bg-orange-50/50 dark:bg-orange-900/10 rounded-lg flex flex-col sm:flex-row sm:items-center justify-between gap-4 transition-colors\"}>\n <div className=\"flex flex-col gap-1.5 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-orange-500 shrink-0\"/>\n <Typography variant=\"subtitle2\" className=\"truncate\">{dp.policyname}</Typography>\n <Tooltip title=\"This policy is live in the database but missing from your codebase schema.\">\n <div className=\"px-1.5 py-0.5 rounded text-[10px] uppercase bg-orange-500/10 text-orange-600 border border-orange-500/20 shrink-0\">\n DB Only\n </div>\n </Tooltip>\n </div>\n <div className=\"flex gap-2 text-xs pl-6 overflow-x-auto hide-scrollbar\">\n <Chip size=\"small\" className=\"bg-white dark:bg-surface-900 text-text-secondary border-none\">Action: {dp.cmd || \"ALL\"}</Chip>\n <Chip size=\"small\" className=\"bg-white dark:bg-surface-900 text-text-secondary border-none\">Roles: {Array.isArray(dp.roles) ? dp.roles.join(\", \") : dp.roles}</Chip>\n </div>\n </div>\n <div className=\"flex items-center gap-1 sm:gap-2 shrink-0\">\n <Button size=\"small\" variant=\"outlined\" color=\"primary\" onClick={() => {\n const rule: SecurityRule = {\n name: dp.policyname,\n operation: dp.cmd?.toLowerCase(),\n mode: dp.permissive?.toLowerCase(),\n using: dp.qual || undefined,\n withCheck: dp.with_check || undefined,\n roles: dp.roles\n };\n setFieldValue(\"securityRules\", [...rules, rule]);\n }}>\n Import to codebase\n </Button>\n </div>\n </Paper>\n ))}\n </div>\n </div>\n )}\n </div>\n <Dialog open={!!editingPolicy} onOpenChange={(open) => !open && setEditingPolicy(null)} maxWidth=\"4xl\">\n {editingPolicy && (\n <InlinePolicyEditor\n policy={editingPolicy === \"new\" ? undefined : editingPolicy}\n table={values.id || values.table || values.alias || \"your_table\"}\n onSave={handleSave}\n onCancel={() => setEditingPolicy(null)}\n />\n )}\n </Dialog>\n </Container>\n </div>\n );\n}\n\n// ─── Inline Policy Editor (no Monaco dependency) ────────────────────\n\ntype PolicyCommand = \"ALL\" | \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\";\nconst COMMAND_OPTIONS: PolicyCommand[] = [\"ALL\", \"SELECT\", \"INSERT\", \"UPDATE\", \"DELETE\"];\nconst ROLE_OPTIONS = [\"public\", \"authenticated\", \"anon\", \"admin\"];\n\nfunction InlinePolicyEditor({\n policy,\n table,\n onSave,\n onCancel\n}: {\n policy?: PostgresPolicy;\n table: string;\n onSave: (policyData: Partial<PostgresPolicy>) => void;\n onCancel: () => void;\n}) {\n const [name, setName] = useState(policy?.policyname || \"\");\n const [behavior, setBehavior] = useState<\"PERMISSIVE\" | \"RESTRICTIVE\">(policy?.permissive || \"PERMISSIVE\");\n const [command, setCommand] = useState<PolicyCommand>((policy?.cmd as PolicyCommand) || \"ALL\");\n const [roles, setRoles] = useState<string[]>(\n policy?.roles ? (Array.isArray(policy.roles) ? policy.roles : [policy.roles]) : [\"public\"]\n );\n const [usingExpr, setUsingExpr] = useState(policy?.qual || \"\");\n const [checkExpr, setCheckExpr] = useState(policy?.with_check || \"\");\n\n const showCheck = command === \"ALL\" || command === \"INSERT\" || command === \"UPDATE\";\n\n return (\n <>\n <DialogTitle variant=\"h6\">\n {policy ? \"Edit Policy\" : \"Create Policy\"}\n <div className=\"text-sm font-normal text-text-secondary dark:text-text-secondary-dark tracking-wide mt-1\">\n Define RLS rules for <span className=\"font-mono text-primary bg-primary-bg dark:bg-primary-bg-dark px-1 py-0.5 rounded\">public.{table}</span>\n </div>\n </DialogTitle>\n <DialogContent className=\"p-4 md:p-6 border-t dark:border-surface-700 bg-surface-50 dark:bg-surface-800\" includeMargin={false}>\n <Paper className={cls(\"p-4 md:p-6 flex flex-col gap-6 bg-white dark:bg-surface-800 border-none sm:border-solid rounded-none sm:rounded-xl\", defaultBorderMixin)}>\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Policy Name</Typography>\n <TextField value={name} onChange={(e: any) => setName(e.target.value)} placeholder=\"e.g. allow_read_all\"/>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Behavior</Typography>\n <Select value={behavior} onValueChange={(val: string) => setBehavior(val as \"PERMISSIVE\" | \"RESTRICTIVE\")} position=\"item-aligned\">\n <SelectItem value=\"PERMISSIVE\">Permissive</SelectItem>\n <SelectItem value=\"RESTRICTIVE\">Restrictive</SelectItem>\n </Select>\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Command</Typography>\n <div className=\"flex flex-wrap gap-1.5\">\n {COMMAND_OPTIONS.map(cmd => (\n <Button key={cmd} size=\"small\" variant={command === cmd ? \"filled\" : \"text\"} color=\"neutral\" onClick={() => setCommand(cmd)}>\n {cmd}\n </Button>\n ))}\n </div>\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">Target Roles</Typography>\n <MultiSelect size=\"small\" value={roles} onValueChange={setRoles} placeholder=\"Select roles\">\n {ROLE_OPTIONS.map(r => <MultiSelectItem key={r} value={r}>{r}</MultiSelectItem>)}\n </MultiSelect>\n </div>\n {command !== \"INSERT\" && (\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">USING expression</Typography>\n <TextField value={usingExpr} onChange={(e: any) => setUsingExpr(e.target.value)} placeholder=\"e.g. auth.uid() = user_id\"/>\n </div>\n )}\n {showCheck && (\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">WITH CHECK expression</Typography>\n <TextField value={checkExpr} onChange={(e: any) => setCheckExpr(e.target.value)} placeholder=\"e.g. auth.uid() = user_id\"/>\n </div>\n )}\n </Paper>\n </DialogContent>\n <DialogActions>\n <Button size=\"small\" variant=\"text\" color=\"neutral\" onClick={onCancel}>Cancel</Button>\n <Button size=\"small\" variant=\"filled\" color=\"primary\" disabled={!name}\n onClick={() => onSave({ policyname: name,\npermissive: behavior,\ncmd: command,\nroles,\nqual: usingExpr,\nwith_check: showCheck ? checkExpr : null })}\n >Save</Button>\n </DialogActions>\n </>\n );\n}\n","import { EntityCollection, Property, StringProperty, NumberProperty, ArrayProperty, TableColumnInfo, TableMetadata } from \"@rebasepro/types\";\nimport { prettifyIdentifier } from \"@rebasepro/utils\";\n\n/**\n * Maps a PostgreSQL column data type to a Rebase property type.\n */\nfunction pgTypeToRebaseProperty(column: TableColumnInfo): Property | null {\n const {\n column_name,\n data_type,\n udt_name,\n is_nullable,\n column_default,\n enum_values\n } = column;\n\n const required = is_nullable === \"NO\";\n const prettifiedName = prettifyIdentifier(column_name);\n\n // Detect if this column is a primary key (auto-generated id)\n const isAutoId = column_default != null && (\n column_default.includes(\"nextval\") ||\n column_default.includes(\"gen_random_uuid\") ||\n column_default.includes(\"uuid_generate\") ||\n column_default.includes(\"identity\")\n );\n\n // USER-DEFINED = PostgreSQL enums\n if (data_type === \"USER-DEFINED\" && enum_values && enum_values.length > 0) {\n return {\n type: \"string\",\n name: prettifiedName,\n enum: enum_values.map((v: string) => ({ id: v,\nlabel: prettifyIdentifier(v) })),\n validation: required ? { required: true } : undefined\n } as StringProperty;\n }\n\n const dt = data_type.toLowerCase();\n switch (dt) {\n case \"character varying\":\n case \"varchar\":\n case \"text\":\n case \"char\":\n case \"character\":\n case \"citext\": {\n let colType: \"varchar\" | \"text\" | \"char\" = \"varchar\";\n if (dt === \"text\" || dt === \"citext\") colType = \"text\";\n if (dt === \"char\" || dt === \"character\") colType = \"char\";\n const prop: StringProperty = {\n type: \"string\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n if (isAutoId) {\n prop.isId = \"manual\";\n }\n return prop;\n }\n\n case \"uuid\": {\n const prop: StringProperty = {\n type: \"string\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n if (isAutoId) {\n prop.isId = \"uuid\";\n }\n return prop;\n }\n\n case \"integer\":\n case \"bigint\":\n case \"smallint\": {\n const colType = dt === \"bigint\" ? \"bigint\" : \"integer\";\n const prop: NumberProperty = {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n validation: {\n ...(required ? { required: true } : {}),\n integer: true\n }\n };\n if (isAutoId) {\n prop.isId = \"increment\";\n }\n return prop;\n }\n\n case \"serial\":\n case \"bigserial\":\n case \"smallserial\": {\n const colType = dt === \"bigserial\" ? \"bigserial\" : \"serial\";\n return {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n isId: \"increment\",\n validation: {\n ...(required ? { required: true } : {}),\n integer: true\n }\n } as NumberProperty;\n }\n\n case \"numeric\":\n case \"decimal\":\n case \"real\":\n case \"double precision\": {\n let colType: \"numeric\" | \"real\" | \"double precision\" = \"numeric\";\n if (dt === \"real\") colType = \"real\";\n if (dt === \"double precision\") colType = \"double precision\";\n return {\n type: \"number\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n }\n\n case \"boolean\":\n return {\n type: \"boolean\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n\n case \"timestamp with time zone\":\n case \"timestamp without time zone\":\n case \"timestamp\":\n case \"timestamptz\":\n case \"date\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"time\": {\n let colType: \"timestamp\" | \"date\" | \"time\" = \"timestamp\";\n if (dt.startsWith(\"date\")) colType = \"date\";\n if (dt.startsWith(\"time \") || dt === \"time\") colType = \"time\";\n return {\n type: \"date\",\n name: prettifiedName,\n columnType: colType,\n validation: required ? { required: true } : undefined\n };\n }\n\n case \"jsonb\":\n case \"json\":\n return {\n type: \"map\",\n name: prettifiedName,\n columnType: dt === \"jsonb\" ? \"jsonb\" : \"json\",\n keyValue: true,\n properties: {}\n };\n\n case \"array\":\n case \"ARRAY\":\n return {\n type: \"array\",\n name: prettifiedName,\n of: { type: \"string\" }\n } as ArrayProperty;\n\n default:\n // Fallback: treat unknown types as string\n return {\n type: \"string\",\n name: prettifiedName,\n validation: required ? { required: true } : undefined\n };\n }\n}\n\n/**\n * Builds a partial EntityCollection from PostgreSQL table metadata.\n * This is used when creating a new collection from an existing database table.\n */\nexport function buildCollectionFromTableMetadata(\n tableName: string,\n metadata: TableMetadata\n): Partial<EntityCollection> {\n const properties: Record<string, Property> = {};\n const propertiesOrder: string[] = [];\n const relations: any[] = []; // In the builder/editor, target can be a string path before hydration\n const securityRules: any[] = [];\n\n // Parse columns\n for (const column of metadata.columns) {\n const property = pgTypeToRebaseProperty(column);\n if (property) {\n // Remove undefined keys so we don't output \"validation: undefined\"\n const propRecord = property as unknown as Record<string, unknown>;\n Object.keys(propRecord).forEach(key => propRecord[key] === undefined && delete propRecord[key]);\n\n properties[column.column_name] = property;\n propertiesOrder.push(column.column_name);\n }\n }\n\n // Parse Outgoing Foreign Keys -> Many-to-One / One-to-One\n if (metadata.foreignKeys) {\n for (const fk of metadata.foreignKeys) {\n const relName = fk.column_name.endsWith(\"_id\") ? fk.column_name.substring(0, fk.column_name.length - 3) : fk.column_name;\n relations.push({\n id: fk.column_name,\n relationName: relName,\n target: fk.foreign_table_name, // Will be hydrated later\n cardinality: \"one\",\n direction: \"owning\",\n localKey: fk.column_name\n });\n }\n }\n\n // Parse Incoming Junctions -> Many-to-Many\n if (metadata.junctions) {\n for (const junction of metadata.junctions) {\n const relName = junction.target_table_name; // E.g., 'roles'\n relations.push({\n id: junction.target_table_name + \"_relation\",\n relationName: relName,\n target: junction.target_table_name, // Will be hydrated later\n cardinality: \"many\",\n direction: \"owning\",\n through: {\n table: junction.junction_table_name,\n sourceColumn: junction.source_column_name,\n targetColumn: junction.target_column_name\n }\n });\n }\n }\n\n // Parse RLS Policies\n if (metadata.policies) {\n for (const policy of metadata.policies) {\n // Attempt to map typical cmds to operations.\n // Postgres cmd: SELECT, INSERT, UPDATE, DELETE, ALL\n let operations: string[] = [];\n switch (policy.cmd) {\n case \"ALL\": operations = [\"read\", \"create\", \"update\", \"delete\"]; break;\n case \"SELECT\": operations = [\"read\"]; break;\n case \"INSERT\": operations = [\"create\"]; break;\n case \"UPDATE\": operations = [\"update\"]; break;\n case \"DELETE\": operations = [\"delete\"]; break;\n }\n securityRules.push({\n name: policy.policy_name,\n operations,\n // roles is string[] e.g., [\"public\", \"authenticated\"]\n roles: policy.roles ?? [],\n qual: policy.qual,\n with_check: policy.with_check\n });\n }\n }\n\n const prettifiedName = prettifyIdentifier(tableName);\n\n return {\n name: prettifiedName,\n slug: tableName,\n table: tableName,\n properties,\n propertiesOrder,\n ...(relations.length > 0 ? { relations } : {}),\n ...(securityRules.length > 0 ? { securityRules } : {})\n };\n}\n","\nimport { useUnsavedChangesDialog, UnsavedChangesDialog } from \"@rebasepro/core\";\nimport { useNavigationStateController, useCollectionRegistryController, useUrlController } from \"../../_cms_internals\";\nimport * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { ConfirmationDialog, ErrorView, useAuthController, useCustomizationController, useSnackbarController } from \"@rebasepro/core\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\nimport {\n ArrowLeftIcon,\n Button,\n CheckIcon,\n cls,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n LoadingButton,\n Tab,\n Tabs,\n Typography\n} from \"@rebasepro/ui\";\nimport { Entity, EntityCollection, MapProperty, Properties, Property, PropertyConfig, User, getDataSourceCapabilities } from \"@rebasepro/types\";\nimport type { PostgresCollection } from \"@rebasepro/types\";\nimport { getSubcollections, isPropertyBuilder, removeInitialAndTrailingSlashes, getTableName } from \"@rebasepro/common\";\nimport { CollectionEditorSchema } from \"./CollectionYupValidation\";\nimport { GeneralSettingsForm } from \"./GeneralSettingsForm\";\nimport { DisplaySettingsForm } from \"./DisplaySettingsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"../../_cms_internals\";\nimport { buildEntityPropertiesFromData } from \"@rebasepro/schema-inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { Formex, FormexController, useCreateFormex } from \"@rebasepro/formex\";\nimport { getFullIdPath } from \"./util\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { AIModifiedPathsProvider, useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { CollectionOperation, CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\nimport { CollectionRLSTab } from \"./CollectionRLSTab\";\nimport { buildCollectionFromTableMetadata } from \"../../pgColumnToProperty\";\nimport { TableMetadata } from \"@rebasepro/types\";\nimport { mergeDeep, randomString, removeUndefined } from \"@rebasepro/utils\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n slug?: string,\n name?: string,\n }\n /**\n * A collection to duplicate from. If provided, the new collection will be\n * pre-populated with the same properties (but with empty name, path, and id).\n */\n copyFrom?: EntityCollection;\n editedCollectionId?: string;\n path?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionSlugs?: string[], parentEntityIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode | any\n };\n getUser?: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: EntityCollection;\n existingEntities?: Entity<any>[];\n /**\n * Initial view to open when editing: \"general\", \"display\", or \"properties\".\n * For new collections, this is ignored.\n */\n initialView?: \"general\" | \"display\" | \"properties\";\n /**\n * If true, auto-expand the Kanban configuration section.\n */\n expandKanban?: boolean;\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n /**\n * If true, it indicates that the editor is rendered inline (not in a dialog) and therefore updates headers and footers to adapt to the layout.\n */\n fullScreen?: boolean;\n /**\n * List of unmapped database tables available for import.\n */\n unmappedTables?: string[];\n /**\n * Callback to fetch column metadata for a table.\n */\n onFetchTableMetadata?: (tableName: string) => Promise<TableMetadata | undefined>;\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n\n const { dialogProps, triggerDialog } = useUnsavedChangesDialog(\n open && formDirty,\n () => props.handleClose(undefined)\n );\n\n const handleCancel = () => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n triggerDialog();\n }\n };\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n fullWidth={true}\n fullHeight={true}\n scrollable={false}\n maxWidth={\"7xl\"}\n onOpenChange={(open) => !open ? handleCancel() : undefined}\n >\n <DialogTitle hidden>Collection editor</DialogTitle>\n <AIModifiedPathsProvider>\n {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty}/>}\n\n <UnsavedChangesDialog {...dialogProps}/>\n </AIModifiedPathsProvider>\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"general\"\n | \"display\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"rls\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigationState = useNavigationStateController();\n const collectionRegistry = useCollectionRegistryController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation\n } = navigationState;\n const {\n collections\n } = collectionRegistry;\n\n const initialValuesProp = props.initialValues;\n const copyFromProp = props.copyFrom;\n // Skip templates when duplicating (copyFrom is provided)\n const includeTemplates = !copyFromProp && !initialValuesProp?.slug && (props.parentCollectionSlugs ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? getSubcollections(props.parentCollection) : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => getTableName(col)?.trim().toLowerCase()).filter(Boolean);\n const existingIds = collectionsInThisLevel.map(col => col.slug?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<EntityCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (collectionRegistry.initialised) {\n if (props.editedCollectionId) {\n // We must use getRawCollection so the editor schema fields\n // aren't polluted with dynamically injected runtime `relations`.\n // The path lookup relies on generating a fake child path to resolve through the registry\n const collectionPath = [...(props.parentCollectionSlugs ?? []), props.editedCollectionId]\n .reduce((acc, segment, i) => i === 0 ? segment : `${acc}/fake_id/${segment}`, \"\");\n\n setCollection(collectionRegistry.getRawCollection(collectionPath) as EntityCollection<any>);\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [props.editedCollectionId, props.parentCollectionSlugs, props.parentEntityIds, collectionRegistry.initialised, collectionRegistry.getRawCollection]);\n\n\n\n const initialCollection = collection\n ? {\n ...collection,\n slug: collection.slug ?? randomString(16)\n }\n : undefined;\n\n // Build initial values - handle copyFrom for duplication\n const initialValues: EntityCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : copyFromProp\n ? (() => {\n // When duplicating, copy all properties but clear identifiers\n const { subcollections: _sub, ...rest } = copyFromProp as unknown as Record<string, unknown>;\n return {\n ...rest,\n name: \"\",\n ownerId: authController.user?.uid ?? \"\"\n } as EntityCollection<any>;\n })()\n : {\n slug: initialValuesProp?.slug ?? randomString(16),\n table: initialValuesProp?.slug ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n properties: {} as Properties,\n propertiesOrder: [],\n icon: coolIconKeys[Math.floor(Math.random() * coolIconKeys.length)],\n ownerId: authController.user?.uid ?? \"\"\n };\n\n if (!initialLoadingCompleted) {\n return <CircularProgressCenter/>;\n }\n\n if (!props.isNewCollection && (!collectionRegistry.initialised || !initialLoadingCompleted)) {\n return <CircularProgressCenter/>;\n }\n\n return <CollectionEditorInternal\n {...props}\n initialValues={initialValues}\n existingPaths={existingPaths}\n existingIds={existingIds}\n includeTemplates={includeTemplates}\n collection={collection}\n setCollection={setCollection}\n propertyConfigs={propertyConfigs}/>\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, unknown>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionSlugs, parentEntityIds,\n path,\n collectionInference,\n handleClose,\n extraView,\n handleCancel,\n setFormDirty,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n existingEntities,\n initialView: initialViewProp,\n expandKanban,\n generateCollection,\n onAnalyticsEvent,\n fullScreen,\n unmappedTables,\n onFetchTableMetadata\n}: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: EntityCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: EntityCollection<M> | undefined,\n setCollection: (collection: EntityCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n}\n) {\n\n const importConfig = useImportConfig();\n const urlController = useUrlController();\n const collectionRegistry = useCollectionRegistryController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef<Record<string, any>>({});\n\n const initialView = isNewCollection\n ? (includeTemplates ? \"welcome\" : \"general\")\n : (initialViewProp ?? \"properties\");\n const [currentView, setCurrentView] = useState<EditorView>(initialView); // this view can edit either the details view or the properties one\n\n const [error, setError] = React.useState<Error | undefined>();\n\n const saveCollection = (updatedCollection: EntityCollection<M>): Promise<boolean> => {\n const id = updatedCollection.slug;\n\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionSlugs\n })\n .then(() => {\n setError(undefined);\n return true;\n })\n .catch((e) => {\n setError(e);\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n };\n\n const setNextMode = () => {\n if (currentView === \"general\") {\n if (importConfig.inUse) {\n setCurrentView(\"import_data_saving\");\n } else if (extraView) {\n setCurrentView(\"extra_view\");\n } else {\n setCurrentView(\"properties\");\n }\n } else if (currentView === \"welcome\") {\n setCurrentView(\"general\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"general\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"general\");\n }\n\n };\n\n const doCollectionInference = collectionInference ? (collection: EntityCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(\n collection.slug,\n parentPaths ?? [],\n collection.databaseId\n );\n } : undefined;\n\n const inferCollectionFromData = async (newCollection: EntityCollection<M>) => {\n\n try {\n if (!doCollectionInference) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n\n setCurrentView(\"loading\");\n\n const inferredCollection = await doCollectionInference?.(newCollection);\n\n if (!inferredCollection) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n const values = {\n ...(newCollection ?? {})\n };\n\n if (Object.keys(inferredCollection.properties ?? {}).length > 0) {\n values.properties = inferredCollection.properties as Properties;\n values.propertiesOrder = inferredCollection.propertiesOrder as Extract<keyof M, string>[];\n }\n\n if (!values.propertiesOrder) {\n values.propertiesOrder = Object.keys(values.properties) as Extract<keyof M, string>[];\n return values;\n }\n\n setCollection(values);\n console.debug(\"Inferred collection\", {\n newCollection: newCollection ?? {},\n values\n });\n return values;\n } catch (e: unknown) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e instanceof Error ? e.message : \"Details in the console\")\n });\n return newCollection;\n }\n };\n\n const onSubmit = async (newCollectionState: EntityCollection<M>, formexController: FormexController<EntityCollection<M>>) => {\n console.debug(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n const success = await saveCollection(newCollectionState);\n if (success) {\n aiModifiedPaths?.clearAllPaths();\n formexController.resetForm({ values: newCollectionState });\n handleClose(newCollectionState as EntityCollection);\n }\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"general\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n const values = await inferCollectionFromData(newCollectionState);\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n setNextMode();\n } else {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n }\n } else if (currentView === \"extra_view\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"import_data_mapping\") {\n setNextMode();\n } else if (currentView === \"import_data_preview\") {\n setNextMode();\n } else if (currentView === \"properties\") {\n const success = await saveCollection(newCollectionState);\n if (success) {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState as EntityCollection);\n }\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: unknown) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e instanceof Error ? e.message : \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: EntityCollection<M>) => {\n\n let errors: Record<string, string> = {};\n const schema = (currentView === \"properties\" || currentView === \"general\") && CollectionEditorSchema;\n if (schema) {\n const result = schema.safeParse(col);\n if (!result.success) {\n result.error.issues.forEach((issue) => {\n const path = issue.path.join(\".\");\n if (path) {\n errors[path] = issue.message;\n }\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors,\n...propertyErrorsRef.current };\n }\n if (currentView === \"general\") {\n const pathError = validatePath(getTableName(col), isNewCollection, existingPaths, col.slug);\n if (pathError) {\n errors.slug = pathError;\n }\n const idError = validateId(col.slug, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n if (Object.keys(errors).length > 0) {\n console.error(\"Formex validation blocked save:\", errors, \"Current view:\", currentView);\n }\n return errors;\n };\n\n const formController = useCreateFormex<EntityCollection<M>>({\n initialValues,\n onSubmit,\n validation,\n debugId: \"COLLECTION_EDITOR\"\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n const usedPath = getTableName(values);\n const pathError = validatePath(usedPath, isNewCollection, existingPaths, values.slug);\n\n const parentPaths = !pathError && parentCollectionSlugs ? collectionRegistry.convertIdsToPaths(parentCollectionSlugs) : undefined;\n\n const updatedFullPath = parentPaths && parentPaths.length > 0\n ? [...parentPaths, usedPath].join(\"/fake_id/\")\n : (path?.includes(\"/\") ? path.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + usedPath : usedPath);\n\n const resolvedPath = !pathError ? urlController.resolveDatabasePathsFrom(updatedFullPath) : undefined;\n const getDataWithPath = resolvedPath && getData ? async () => {\n const data = await getData!(resolvedPath, parentPaths ?? []);\n if (existingEntities) {\n const existingData = existingEntities.map(e => e.values);\n data.push(...existingData);\n }\n return data;\n } : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[], propertiesOrder?: string[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties: any) => {\n const res = cleanPropertiesFromImport(properties as Properties);\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n const filteredHeadingsOrder = ((propertiesOrder ?? [])\n .filter((key) => res.headersMapping[key]) as string[]) ?? Object.keys(res.properties);\n importConfig.setHeadingsOrder(filteredHeadingsOrder);\n importConfig.setOriginProperties(res.properties);\n\n const mappedHeadings = (propertiesOrder ?? []).map((key) => res.headersMapping[key]).filter(Boolean) as string[] ?? Object.keys(res.properties);\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", mappedHeadings);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.slug);\n\n const onImportMappingComplete = () => {\n const updatedProperties = { ...values.properties };\n if (importConfig.idColumn)\n delete updatedProperties[importConfig.idColumn];\n setFieldValue(\"properties\", updatedProperties);\n // setFieldValue(\"propertiesOrder\", Object.values(importConfig.headersMapping));\n setNextMode();\n };\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n if (!collection) return;\n configController?.deleteCollection({ id: collection.slug }).then(() => {\n setDeleteRequested(false);\n handleCancel();\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n const onWelcomeScreenContinue = (importData?: object[], propertiesOrder?: string[]) => {\n if (importData) {\n onImportDataSet(importData, propertiesOrder);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"general\");\n }\n };\n\n const aiModifiedPaths = useAIModifiedPaths();\n\n const handleAIGenerated = (generatedCollection: EntityCollection, operations?: CollectionOperation[]) => {\n formController.setValues(generatedCollection as EntityCollection<M>);\n if (operations && aiModifiedPaths) {\n aiModifiedPaths.addModifiedPaths(operations);\n }\n };\n\n return <div className=\"h-full w-full flex flex-col bg-white dark:bg-surface-950\">\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <div className={cls(\"px-4 py-2 w-full flex shrink-0 items-center justify-between gap-4 bg-surface-50 dark:bg-surface-950 border-b\", defaultBorderMixin)}>\n <div className=\"flex flex-1 items-center justify-end gap-4 min-w-0\">\n <Tabs value={currentView}\n className=\"bg-transparent !w-fit max-w-full\"\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"general\"}>\n General\n </Tab>\n <Tab value={\"display\"}>\n Display\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n {getDataSourceCapabilities(values.driver).supportsRLS && <Tab value={\"rls\"}>\n RLS\n </Tab>}\n </Tabs>\n </div>\n <div className=\"flex items-center gap-4\">\n {generateCollection && (\n <AICollectionGeneratorPopover\n existingCollection={values}\n onGenerated={handleAIGenerated}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n />\n )}\n {fullScreen && !isNewCollection && (\n <div className=\"flex items-center gap-2\">\n <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n onClick={() => formController.handleSubmit()}\n disabled={!dirty || isSubmitting || configController?.readOnly}\n loading={isSubmitting}\n >\n {configController?.readOnly ? \"Update (Read-only)\" : \"Update\"}\n </LoadingButton>\n </div>\n )}\n </div>\n </div>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className=\"flex-grow flex flex-col min-h-0 relative\">\n\n <div className=\"flex-grow flex flex-col min-h-0 overflow-y-auto no-scrollbar relative w-full h-full\">\n\n {currentView === \"loading\" &&\n <CircularProgressCenter/>}\n\n {currentView === \"extra_view\" &&\n usedPath &&\n extraView?.View &&\n <extraView.View path={usedPath}/>}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={usedPath}\n onContinue={onWelcomeScreenContinue}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n unmappedTables={unmappedTables}\n onImportFromTable={onFetchTableMetadata ? async (tableName: string) => {\n try {\n const columns = await onFetchTableMetadata!(tableName);\n if (!columns) return;\n const collectionData = buildCollectionFromTableMetadata(tableName, columns);\n formController.setValues({\n ...formController.values,\n ...collectionData\n } as EntityCollection<M>);\n onWelcomeScreenContinue();\n } catch (e: unknown) {\n console.error(\"Error importing table:\", e);\n snackbarController.open({\n type: \"error\",\n message: \"Error importing table: \" + (e instanceof Error ? e.message : \"Unknown error\")\n });\n }\n } : undefined}/>}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n propertyConfigs={propertyConfigs}/>}\n\n {currentView === \"import_data_preview\" && importConfig &&\n <CollectionEditorImportDataPreview importConfig={importConfig}\n properties={values.properties as Properties}\n propertiesOrder={values.propertiesOrder as string[]}/>}\n\n {currentView === \"import_data_saving\" && importConfig &&\n <ImportSaveInProgress importConfig={importConfig}\n collection={values}\n path={usedPath}\n onImportSuccess={async (importedCollection) => {\n snackbarController.open({\n type: \"info\",\n message: \"Data imported successfully\"\n });\n await saveCollection(values);\n handleClose(importedCollection);\n }}\n />}\n\n {currentView === \"general\" &&\n <GeneralSettingsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection}/>\n }\n\n {currentView === \"display\" &&\n <DisplaySettingsForm expandKanban={expandKanban}/>\n }\n\n {currentView === \"rls\" && getDataSourceCapabilities(values.driver).supportsRLS &&\n <CollectionRLSTab/>\n }\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true) as Record<string, any>;\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>}/>\n }\n\n </div>\n {(!fullScreen || isNewCollection || !!error) && (\n <div className=\"shrink-0 w-full p-4 sm:px-6 sm:py-4 border-t border-surface-200 dark:border-surface-900 flex items-center justify-between gap-4 bg-white dark:bg-surface-950\">\n {error && <ErrorView error={error}/>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_mapping\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n importConfig.setInUse(false);\n return setCurrentView(\"welcome\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_preview\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n setCurrentView(\"import_data_mapping\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"general\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n color={\"neutral\"}\n onClick={() => setCurrentView(\"general\")}>\n <ArrowLeftIcon/>\n Back\n </Button>}\n\n {(!fullScreen || isNewCollection) && (\n <Button variant={\"text\"}\n color={\"neutral\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\n </Button>\n )}\n\n {currentView === \"welcome\" &&\n <Button variant={\"text\"} onClick={() => onWelcomeScreenContinue()}>\n Continue from scratch\n </Button>}\n\n {isNewCollection && currentView === \"import_data_mapping\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={onImportMappingComplete}\n >\n Next\n </Button>}\n\n {isNewCollection && currentView === \"import_data_preview\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={() => {\n setNextMode();\n }}\n >\n Next\n </Button>}\n\n {isNewCollection && (currentView === \"general\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"general\" && !validValues) || configController?.readOnly}\n startIcon={currentView === \"properties\"\n ? <CheckIcon/>\n : undefined}\n >\n {currentView === \"general\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && !fullScreen && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n disabled={isSubmitting || configController?.readOnly}\n loading={isSubmitting}\n >\n {configController?.readOnly ? \"Update collection (Read-only)\" : \"Update collection\"}\n </LoadingButton>}\n\n </div>\n )}\n </form>\n </>\n\n </Formex>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete the stored config?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the stored config, and reset to the code state.</>}/>\n\n </div>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, unknown> = Record<string, unknown>>(collection: EntityCollection<M>, propertyConfigs: Record<string, PropertyConfig>): EntityCollection<M> {\n const {\n properties,\n ...rest\n } = collection;\n const propertiesResult: Properties = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n const prop = properties[key];\n if (prop == null) return;\n propertiesResult[key] = applyPropertiesConfig(prop, propertyConfigs);\n });\n }\n\n return {\n ...rest,\n properties: propertiesResult\n };\n}\n\nfunction applyPropertiesConfig(property: Property, propertyConfigs: Record<string, PropertyConfig>) {\n let internalProperty = property;\n if (propertyConfigs && internalProperty && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property as Property)) {\n internalProperty = propertyConfig.property as Property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property as Property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.type === \"map\" && internalProperty.properties) {\n const properties: Record<string, Property> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = {\n ...internalProperty,\n properties\n };\n }\n\n }\n }\n return internalProperty;\n\n}\n\nconst validatePath = (value: string, isNewCollection: boolean, existingPaths: string[], idValue?: string) => {\n let error;\n if (!value) {\n error = \"You must specify a path in the database for this collection\";\n }\n // if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n // error = \"There is already a collection which uses this path as an id\";\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()) && !idValue)\n error = \"There is already a collection with the specified path. If you want to have multiple collections referring to the same database path, make sure the have different ids\";\n\n const subpaths = removeInitialAndTrailingSlashes(value).split(\"/\");\n if (subpaths.length % 2 === 0) {\n error = `Collection paths must have an odd number of segments: ${value}`;\n }\n return error;\n};\n\nconst validateId = (value: string, isNewCollection: boolean, existingPaths: string[], existingIds: string[]) => {\n if (!value) return undefined;\n let error;\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection that uses this value as a path\";\n if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection which uses this id\";\n // if (error) {\n // setAdvancedPanelExpanded(true);\n // }\n return error;\n};\n"],"names":["CollectionEditorSchema","z","object","slug","string","min","name","table","GeneralSettingsForm","t0","$","_c","isNewCollection","parentCollection","values","setFieldValue","handleChange","touched","errors","setFieldTouched","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","useAuthController","useCustomizationController","configController","useCollectionsConfigController","t1","databaseId","undefined","updateDatabaseId","t2","pathTouched","getIn","toSnakeCase","idTouched","singularNameTouched","singular","updateName","t3","collectionIcon","isSubcollection","showErrors","t4","t5","t6","t7","readOnly","t8","t9","t10","Symbol","for","t11","t12","t13","t14","t15","t16","t17","e","target","value","t18","Boolean","t19","t20","t21","t22","t23","t24","cls","t25","t26","DebouncedTextField","t27","t28","t29","t30","t31","singularName","t32","e_0","t33","t34","t35","t36","t37","t38","t39","description","t40","t41","t42","t43","t44","t45","t46","t47","e_1","t48","t49","t50","t51","t52","t53","t54","t55","t56","history","t57","t58","height","t59","icon","t60","t61","t62","t63","DefaultDatabaseField","disabled","onDatabaseIdUpdate","LayoutModeSwitch","onChange","className","label","ViewModeSwitch","KanbanConfigSection","forceExpanded","customizationController","panelRef","useRef","columnPropertyDialogOpen","setColumnPropertyDialogOpen","enumStringProperties","useMemo","result","properties","Object","entries","forEach","key","prop","type","enum","push","property","kanbanConfig","kanban","columnPropertyMissing","columnProperty","some","p","React","useEffect","current","setTimeout","scrollIntoView","behavior","block","showCreateButton","dialogPropertyKey","dialogPropertyName","unslugify","length","v","find","fieldConfig","getFieldConfig","propertyConfigs","stopPropagation","iconSize","smallest","map","id","keys","newProperties","newPropertiesOrder","propertiesOrder","DisplaySettingsForm","expandKanban","orderPropertyDialogOpen","setOrderPropertyDialogOpen","textProperties","openEntityMode","defaultViewMode","orderPropertyMissing","orderProperty","ui","hideFromCollection","defaultSize","toUpperCase","isNaN","Number","sideDialogWidth","small","inlineEditing","includeJsonView","GetCodeDialog","collection","onOpenChange","open","snackbarController","useSnackbarController","code","camelCase","JSON5","stringify","collectionToCode","themes","vsDark","_temp","preventDefault","message","navigator","clipboard","writeText","style","tokens","getLineProps","getTokenProps","line","i","token","propertyCleanup","valueCopy","clone","Array","isArray","obj","isEmptyObject","childRes","resolved","propertyConfig","path","defaultFilter","sort","reduce","a","b","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","extraIcon","getUser","getData","doCollectionInference","setFieldError","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","selectedPropertyKey","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","selectedPropertyFullId","getFullId","selectedProperty","replaceAll","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","inferredPropertyKeys","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","console","debug","then","newCollection","findNewPropertyKeys","existingProps","newProps","namespace","fullKey","existingProp","newProp","dataType","existingMapProps","addNewPropertiesOnly","updatedProperties","allNewPropertyKeys","newTopLevelPropertyKeys","filter","propertyKey","allExistingKeys","updatedPropertiesOrder","includes","updatePropertiesOrder","finally","getCurrentPropertiesOrder","namespaceToPropertiesOrderPath","propertiesOrderPath","deleteProperty","fullId","Error","idToPropertiesPath","currentPropertiesOrder","onPropertyMove","onPropertyCreated","indexOf","onPropertyChanged","previousId","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","error","hasError","closePropertyDialog","initialErrors","emptyCollection","usedPropertiesOrder","owner","ownerId","aiModifiedPaths","useAIModifiedPaths","generationCounter","onPropertyClick","body","defaultBorderMixin","displayName","additionalFields","isPropertyBuilder","EXAMPLE_JSON","CollectionJsonImportDialog","onClose","onImport","jsonValue","setJsonValue","setErrors","setTouched","trim","validateCollectionJson","handleJsonChange","result_0","valid","handleImport","handleClose","isValid","open_0","index","productsCollectionTemplate","validation","required","brand","markdown","main_image","storage","storagePath","acceptedFiles","available","columnWidth","price","requiredMessage","images","of","related_products","metadata","keyValue","added_on","autoValue","blogCollectionTemplate","header_image","cacheControl","content","oneOf","typeField","valueField","text","quote","multiline","products","previewProperties","created_on","status","published","draft","defaultValue","publish_date","clearable","reviewed","tags","previewAsTag","usersCollectionTemplate","email","emailVerified","phone","favourite_products","photoURL","url","pagesCollectionTemplate","title","unique","matches","matchesMessage","hero_section","headline","subhead","background_image","call_to_action","call_to_action_link","section","image","link","slider","sidebar","seo_metadata","meta_title","meta_description","focus_keywords","footer_override","last_updated","is_published","AICollectionGeneratorPopover","existingCollection","onGenerated","generateCollection","trigger","size","showLabel","onAnalyticsEvent","menuOpen","setMenuOpen","prompt","setPrompt","loading","setLoading","setError","collectionRegistry","useCollectionRegistryController","existingCollections","collections","handleGenerate","mode","collectionsContext","c","slice","operations","operationsCount","errorMessage","CollectionGenerationApiError","handleKeyDown","shiftKey","tooltipTitle","readOnlyReason","defaultTrigger","CollectionEditorWelcomeView","onContinue","existingCollectionPaths","unmappedTables","onImportFromTable","pathSuggestions","useCollectionEditorController","s","toLowerCase","filteredSuggestions","setValues","jsonImportOpen","setJsonImportOpen","importingTable","setImportingTable","T0","t","c_0","filteredUnmappedTables","Container","tableName","prettifyIdentifier","suggestion","generatedCollection","data","TemplateButton","subtitle","onClick","CollectionEditorImportMapping","importConfig","setSelectedProperty","property_0","namespace_0","namespace_1","newPropertiesOrder_0","newHeadersMapping","headersMapping","setHeadersMapping","importData","id_0","importKey","property_1","namespace_2","fullId_0","propertyPath_0","propertyData","d","inferredNewProperty","buildPropertyFromData","getInferenceType","onPropertyTypeChanged","property_2","propertyKey_0","importKey_0","isIdColumn","propertyKey_1","props","p_0","PropertySelect","getFieldId","fieldId","widget","selectOpen","setSelectOpen","newSelectedWidgetId","newProperty","updatePropertyFromWidget","supportedFields","_temp2","widget_0","ImportPropertySelectItem","optionDisabled","existing","CollectionEditorImportDataPreview","authController","registry","loadEntities","mappedData","convertDataToEntity","idColumn","defaultValues","setEntities","selectionController","useSelectionController","entities","dataLoading","noMoreToLoad","cleanPropertiesFromImport","parentSlug","acc","slugify","fullSlug","slugifiedResult","firstKey","sanitizeSqlIdentifier","test","CollectionRLSTab","editingPolicy","setEditingPolicy","rules","securityRules","databaseAdmin","useRebaseContext","dbPolicies","setDbPolicies","isLoadingDb","setIsLoadingDb","fetchLivePolicies","alias","executeSql","safeTableName","quotedName","sql","extractRows","res","rows","pRows","policies","parsedRoles","r","roles","ROLES","replace","split","policyname","POLICYNAME","tablename","permissive","PERMISSIVE","cmd","CMD","qual","QUAL","with_check","WITH_CHECK","unmappedPolicies","dp","handleSave","newPolicy","rule","operation","using","withCheck","newRules","join","COMMAND_OPTIONS","ROLE_OPTIONS","InlinePolicyEditor","policy","onSave","onCancel","setName","setBehavior","command","setCommand","setRoles","usingExpr","setUsingExpr","checkExpr","setCheckExpr","showCheck","val","pgTypeToRebaseProperty","column","column_name","data_type","udt_name","is_nullable","column_default","enum_values","prettifiedName","isAutoId","dt","colType","columnType","isId","integer","startsWith","buildCollectionFromTableMetadata","relations","columns","propRecord","foreignKeys","fk","relName","endsWith","substring","relationName","foreign_table_name","cardinality","direction","localKey","junctions","junction","target_table_name","through","junction_table_name","sourceColumn","source_column_name","targetColumn","target_column_name","policy_name","CollectionEditorDialog","formDirty","setFormDirty","dialogProps","triggerDialog","useUnsavedChangesDialog","handleCancel","CollectionEditor","navigationState","useNavigationStateController","topLevelNavigation","initialValuesProp","initialValues","copyFromProp","copyFrom","includeTemplates","parentCollectionSlugs","collectionsInThisLevel","getSubcollections","existingPaths","col","getTableName","existingIds","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialised","editedCollectionId","collectionPath","segment","getRawCollection","parentEntityIds","initialCollection","randomString","applyPropertyConfigs","subcollections","_sub","rest","user","uid","coolIconKeys","Math","floor","random","CollectionEditorInternal","collectionInference","extraView","existingEntities","initialView","initialViewProp","fullScreen","onFetchTableMetadata","useImportConfig","urlController","useUrlController","currentView","setCurrentView","saveCollection","updatedCollection","collectionData","catch","setNextMode","inUse","parentPaths","inferCollectionFromData","Promise","resolve","inferredCollection","onSubmit","newCollectionState","formexController","success","clearAllPaths","resetForm","schema","safeParse","issues","issue","pathError","validatePath","idError","validateId","formController","useCreateFormex","debugId","isSubmitting","usedPath","convertIdsToPaths","updatedFullPath","resolvedPath","resolveDatabasePathsFrom","getDataWithPath","existingData","onImportDataSet","setInUse","buildEntityPropertiesFromData","setIdColumn","setImportData","filteredHeadingsOrder","setHeadingsOrder","setOriginProperties","mappedHeadings","validValues","onImportMappingComplete","deleteRequested","setDeleteRequested","deleteCollection","onWelcomeScreenContinue","handleAIGenerated","addModifiedPaths","getDataSourceCapabilities","driver","supportsRLS","handleSubmit","View","importedCollection","removeUndefined","getFullIdPath","validate","propertiesResult","applyPropertiesConfig","internalProperty","mergeDeep","idValue","subpaths","removeInitialAndTrailingSlashes"],"mappings":"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"}