@rebasepro/admin 0.0.1-canary.f81da60 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/{CollectionEditorDialog-D509-IMx.js → CollectionEditorDialog-MbvXGzEq.js} +18 -18
  2. package/dist/CollectionEditorDialog-MbvXGzEq.js.map +1 -0
  3. package/dist/{CollectionsStudioView-B549BDpU.js → CollectionsStudioView-D9X6aiAr.js} +4 -4
  4. package/dist/{CollectionsStudioView-B549BDpU.js.map → CollectionsStudioView-D9X6aiAr.js.map} +1 -1
  5. package/dist/{ContentHomePage--Bl1FXk7.js → ContentHomePage-CfVB1eUo.js} +26 -26
  6. package/dist/ContentHomePage-CfVB1eUo.js.map +1 -0
  7. package/dist/{ExportCollectionAction-CttNAdM1.js → ExportCollectionAction-CUwJg4F9.js} +2 -2
  8. package/dist/{ExportCollectionAction-CttNAdM1.js.map → ExportCollectionAction-CUwJg4F9.js.map} +1 -1
  9. package/dist/{ImportCollectionAction-BB33kxAN.js → ImportCollectionAction-DGa_SF_8.js} +2 -2
  10. package/dist/{ImportCollectionAction-BB33kxAN.js.map → ImportCollectionAction-DGa_SF_8.js.map} +1 -1
  11. package/dist/{PropertyEditView-UtDO8g0A.js → PropertyEditView-C4nlYmAc.js} +79 -101
  12. package/dist/PropertyEditView-C4nlYmAc.js.map +1 -0
  13. package/dist/{RolesView-B0E7L0hE.js → RolesView-CNWxnR8e.js} +2 -2
  14. package/dist/{RolesView-B0E7L0hE.js.map → RolesView-CNWxnR8e.js.map} +1 -1
  15. package/dist/{UsersView-BM2_7VPV.js → UsersView-YiTIcXkA.js} +6 -28
  16. package/dist/UsersView-YiTIcXkA.js.map +1 -0
  17. package/dist/collection_editor/ConfigControllerProvider.d.ts +0 -4
  18. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +1 -3
  19. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +0 -2
  20. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +1 -2
  21. package/dist/collection_editor_ui.js +3 -3
  22. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -1
  23. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -1
  24. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +2 -1
  25. package/dist/components/EntityEditView.d.ts +6 -0
  26. package/dist/components/RebaseCMS.d.ts +1 -1
  27. package/dist/{index-CNDetux9.js → index-CtzpHzMQ.js} +2 -2
  28. package/dist/{index-CNDetux9.js.map → index-CtzpHzMQ.js.map} +1 -1
  29. package/dist/{index-C9YDsMC9.js → index-DKlrVD1m.js} +3 -3
  30. package/dist/index-DKlrVD1m.js.map +1 -0
  31. package/dist/{index-DO7lMeNB.js → index-kHJXfLNI.js} +3 -3
  32. package/dist/index-kHJXfLNI.js.map +1 -0
  33. package/dist/index.js +18 -14
  34. package/dist/index.js.map +1 -1
  35. package/dist/util/navigation_utils.d.ts +10 -1
  36. package/dist/{util-DK1O3uM0.js → util-CwLmSpGp.js} +708 -598
  37. package/dist/util-CwLmSpGp.js.map +1 -0
  38. package/package.json +8 -8
  39. package/src/collection_editor/ConfigControllerProvider.tsx +1 -10
  40. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +3 -47
  41. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +2 -10
  42. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +1 -3
  43. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +3 -3
  44. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +0 -1
  45. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +6 -6
  46. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +1 -1
  47. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +15 -49
  48. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +2 -3
  49. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +1 -1
  50. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +2 -2
  51. package/src/components/DefaultAppBar.tsx +2 -2
  52. package/src/components/DefaultDrawer.tsx +25 -17
  53. package/src/components/DrawerNavigationGroup.tsx +4 -4
  54. package/src/components/DrawerNavigationItem.tsx +6 -6
  55. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +8 -2
  56. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +1 -1
  57. package/src/components/EntityCollectionTable/table_bindings.tsx +37 -27
  58. package/src/components/EntityCollectionView/EntityCard.tsx +2 -2
  59. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +4 -3
  60. package/src/components/EntityCollectionView/EntityCollectionListView.tsx +5 -4
  61. package/src/components/EntityCollectionView/EntityCollectionView.tsx +50 -7
  62. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +17 -8
  63. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +8 -4
  64. package/src/components/EntityCollectionView/useEntityPreviewSlots.ts +33 -5
  65. package/src/components/EntityEditView.tsx +80 -81
  66. package/src/components/EntitySidePanel.tsx +11 -7
  67. package/src/components/HomePage/ContentHomePage.tsx +24 -15
  68. package/src/components/HomePage/NavigationCard.tsx +4 -4
  69. package/src/components/HomePage/NavigationGroup.tsx +2 -2
  70. package/src/components/RebaseAuthGate.tsx +2 -0
  71. package/src/components/RebaseCMS.tsx +4 -3
  72. package/src/components/RebaseNavigation.tsx +7 -4
  73. package/src/components/RelationSelector.tsx +30 -2
  74. package/src/components/SelectableTable/SelectableTable.tsx +1 -1
  75. package/src/components/UserSelector.tsx +1 -1
  76. package/src/components/admin/UsersView.tsx +2 -17
  77. package/src/components/app/Scaffold.tsx +3 -3
  78. package/src/components/field_configs.tsx +3 -3
  79. package/src/form/PropertyFieldBinding.tsx +10 -6
  80. package/src/hooks/navigation/useResolvedViews.tsx +1 -3
  81. package/src/hooks/navigation/useTopLevelNavigation.ts +1 -1
  82. package/src/hooks/navigation/utils.ts +1 -1
  83. package/src/preview/PropertyPreview.tsx +17 -13
  84. package/src/routes/RebaseRoute.tsx +27 -2
  85. package/src/util/navigation_utils.ts +16 -2
  86. package/src/util/previews.ts +14 -5
  87. package/dist/CollectionEditorDialog-D509-IMx.js.map +0 -1
  88. package/dist/ContentHomePage--Bl1FXk7.js.map +0 -1
  89. package/dist/PropertyEditView-UtDO8g0A.js.map +0 -1
  90. package/dist/UsersView-BM2_7VPV.js.map +0 -1
  91. package/dist/index-C9YDsMC9.js.map +0 -1
  92. package/dist/index-DO7lMeNB.js.map +0 -1
  93. package/dist/util-DK1O3uM0.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollectionEditorDialog-MbvXGzEq.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/CollectionRelationsTab.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 { BooleanSwitchWithLabel, Chip, cls, Container, DebouncedTextField, Dialog, ExpandablePanel, IconButton, Select, SelectItem, TextField, Tooltip, Typography , iconSize } from \"@rebasepro/ui\";\nimport { HistoryIcon, SearchIcon } from \"lucide-react\";\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 { cls, ToggleButtonGroup, Typography } from \"@rebasepro/ui\";\nimport { ColumnsIcon, PanelLeftIcon, SquareIcon } from \"lucide-react\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n}: {\n value: \"side_panel\" | \"full_screen\" | \"split\";\n onChange: (value: \"side_panel\" | \"full_screen\" | \"split\") => 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 />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen or in an inline side dialog</Typography>\n </div>\n}\n","import { ViewMode } from \"@rebasepro/types\";\nimport { cls, ToggleButtonGroup, Typography } from \"@rebasepro/ui\";\nimport { KanbanIcon, LayoutGridIcon, ListIcon, TableIcon } from \"lucide-react\";\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 { IconButton, Select, SelectItem, Typography, Button , iconSize } from \"@rebasepro/ui\";\nimport { XIcon } from \"lucide-react\";\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 { BooleanSwitchWithLabel, Container, IconButton, Select, SelectItem, TextField, Typography, Button , iconSize } from \"@rebasepro/ui\";\nimport { XIcon } from \"lucide-react\";\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, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@rebasepro/ui\";\nimport { CopyIcon } from \"lucide-react\";\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 { PlusIcon, CodeIcon, FileSearchIcon } from \"lucide-react\";\nimport { EntityCollection, MapProperty, Properties, Property, PropertyConfig, User } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport { Button, CircularProgress, cls, DebouncedTextField, defaultBorderMixin, IconButton, Tooltip, Typography } from \"@rebasepro/ui\";\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, { useState } from \"react\";\nimport { Button, IconButton, Typography, Table, TableHeader, TableCell, TableBody, TableRow, TextField, Select, SelectItem, Container, Dialog, DialogTitle, DialogContent, DialogActions, cls, defaultBorderMixin } from \"@rebasepro/ui\";\nimport { Trash2Icon } from \"lucide-react\";\nimport { useFormex } from \"@rebasepro/formex\";\nimport { PostgresCollection, Relation } from \"@rebasepro/types\";\nimport { useCollectionsConfigController } from \"../../useCollectionsConfigController\";\n\nexport function CollectionRelationsTab() {\n const { values, setFieldValue } = useFormex<PostgresCollection>();\n const { collections } = useCollectionsConfigController();\n const [editingRelationIndex, setEditingRelationIndex] = useState<number | null>(null);\n const [editingRelationState, setEditingRelationState] = useState<Partial<Relation> | null>(null);\n\n const getTargetSlug = (target: any) => {\n if (typeof target === \"string\") {\n const match = target.match(/\\(\\)\\s*=>\\s*([a-zA-Z0-9_]+)/);\n return match ? match[1] : target;\n }\n if (typeof target === \"function\") {\n try {\n // If we attached a slug manually\n if (target.slug) return target.slug;\n const col = target();\n return col?.slug || col?.name || \"\";\n } catch (e) {\n return \"\";\n }\n }\n return \"\";\n };\n\n const relations = values.relations || [];\n\n const handleDelete = (index: number) => {\n const newRelations = [...relations];\n newRelations.splice(index, 1);\n setFieldValue(\"relations\", newRelations);\n };\n\n const handleSave = () => {\n if (!editingRelationState) return;\n\n const newRelations = [...relations];\n if (editingRelationIndex === -1) {\n newRelations.push(editingRelationState as Relation);\n } else if (editingRelationIndex !== null) {\n newRelations[editingRelationIndex] = editingRelationState as Relation;\n }\n setFieldValue(\"relations\", newRelations);\n\n setEditingRelationIndex(null);\n setEditingRelationState(null);\n };\n\n const handleCancel = () => {\n setEditingRelationIndex(null);\n setEditingRelationState(null);\n };\n\n return (\n <div className=\"overflow-auto my-auto h-full w-full\">\n <Container maxWidth=\"4xl\" className=\"flex flex-col gap-4 p-8 m-auto h-full\">\n <div className=\"flex items-center justify-between mb-8\">\n <Typography variant=\"h5\">Relations</Typography>\n <Button variant=\"filled\" color=\"neutral\" onClick={() => {\n setEditingRelationIndex(-1);\n setEditingRelationState({ relationName: \"\",\ntarget: \"\" as unknown as Relation[\"target\"],\ncardinality: \"many\",\ndirection: \"owning\" });\n }}>\n ADD RELATION\n </Button>\n </div>\n\n {relations.length > 0 ? (\n <div className=\"w-full overflow-auto border dark:border-surface-800 rounded-lg\">\n <Table className=\"w-full\">\n <TableHeader>\n <TableCell header className=\"w-16\"></TableCell>\n <TableCell header>Name</TableCell>\n <TableCell header>Target</TableCell>\n <TableCell header>Cardinality</TableCell>\n <TableCell header>Direction</TableCell>\n </TableHeader>\n <TableBody>\n {relations.map((relation, index) => (\n <TableRow key={index}\n className=\"cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-800\"\n onClick={() => {\n setEditingRelationIndex(index);\n setEditingRelationState(relation);\n }}>\n <TableCell style={{ width: \"64px\" }}>\n <IconButton size=\"small\" onClick={(e) => {\n e.stopPropagation();\n handleDelete(index);\n }}>\n <Trash2Icon/>\n </IconButton>\n </TableCell>\n <TableCell className=\"font-medium\">{relation.relationName}</TableCell>\n <TableCell>{getTargetSlug(relation.target) || \"Function\"}</TableCell>\n <TableCell>{relation.cardinality}</TableCell>\n <TableCell>{relation.direction || \"owning\"}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n ) : (\n <div className=\"flex-grow flex flex-col border border-dashed dark:border-surface-700 rounded-lg items-center justify-center text-text-disabled py-20\">\n <Typography variant=\"body2\" className=\"mb-4\">No relations defined for this collection.</Typography>\n <Button variant=\"text\" onClick={() => {\n setEditingRelationIndex(-1);\n setEditingRelationState({ relationName: \"\",\ntarget: \"\" as unknown as Relation[\"target\"],\ncardinality: \"many\",\ndirection: \"owning\" });\n }}>Create your first relation</Button>\n </div>\n )}\n\n <Dialog open={!!editingRelationState} onOpenChange={(open) => !open && handleCancel()} maxWidth=\"2xl\">\n {editingRelationState && (\n <>\n <DialogTitle className=\"flex justify-between items-center w-full\" variant=\"h6\">\n {editingRelationIndex === -1 ? \"New Relation\" : \"Edit Relation\"}\n </DialogTitle>\n <DialogContent includeMargin={false} className={cls(\"p-4 md:p-6 border-t bg-white dark:bg-surface-900\", defaultBorderMixin)}>\n <div className=\"flex flex-col gap-4 max-w-2xl mx-auto\">\n <TextField\n label=\"Relation Name\"\n name=\"relationName\"\n placeholder=\"e.g. posts\"\n value={editingRelationState.relationName || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nrelationName: e.target.value } : null)}\n />\n <Select\n fullWidth\n label=\"Target Collection\"\n value={getTargetSlug(editingRelationState.target)}\n onValueChange={(val) => {\n setEditingRelationState(prev => {\n if (!prev) return null;\n const targetFn = () => collections?.find(c => c.slug === val) || { slug: val };\n (targetFn as { slug?: string }).slug = val;\n return { ...prev,\ntarget: targetFn as unknown as Relation[\"target\"] };\n });\n }}\n >\n {collections?.map(col => (\n <SelectItem key={col.slug} value={col.slug}>{col.name || col.slug}</SelectItem>\n ))}\n </Select>\n <Select\n fullWidth\n label=\"Cardinality\"\n value={editingRelationState.cardinality || \"many\"}\n onValueChange={(val) => setEditingRelationState(prev => prev ? { ...prev,\ncardinality: val as Relation[\"cardinality\"] } : null)}\n >\n <SelectItem value=\"many\">Many</SelectItem>\n <SelectItem value=\"one\">One</SelectItem>\n </Select>\n <Select\n fullWidth\n label=\"Direction\"\n value={editingRelationState.direction || \"owning\"}\n onValueChange={(val) => setEditingRelationState(prev => prev ? { ...prev,\ndirection: val as Relation[\"direction\"] } : null)}\n >\n <SelectItem value=\"owning\">Owning</SelectItem>\n <SelectItem value=\"inverse\">Inverse</SelectItem>\n </Select>\n\n {editingRelationState.cardinality === \"many\" && editingRelationState.direction === \"owning\" && (\n <div className={cls(\"flex flex-col gap-4 mt-4 pt-4 border-t\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-text-primary\">Intermediate Table</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary -mt-3\">\n Required for many-to-many relationships. This defines the junction table linking both collections.\n </Typography>\n\n <TextField\n label=\"Table Name\"\n name=\"throughTable\"\n placeholder=\"e.g. user_roles\"\n value={editingRelationState.through?.table || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { sourceColumn: \"\",\ntargetColumn: \"\" }),\ntable: e.target.value } } : null)}\n />\n <div className=\"flex gap-4\">\n <TextField\n className=\"flex-1\"\n label=\"Source Column\"\n name=\"sourceColumn\"\n placeholder=\"FK to this collection\"\n value={editingRelationState.through?.sourceColumn || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { table: \"\",\ntargetColumn: \"\" }),\nsourceColumn: e.target.value } } : null)}\n />\n <TextField\n className=\"flex-1\"\n label=\"Target Column\"\n name=\"targetColumn\"\n placeholder=\"FK to target collection\"\n value={editingRelationState.through?.targetColumn || \"\"}\n onChange={(e) => setEditingRelationState(prev => prev ? { ...prev,\nthrough: { ...(prev.through || { table: \"\",\nsourceColumn: \"\" }),\ntargetColumn: e.target.value } } : null)}\n />\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={handleCancel}>Cancel</Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleSave}\n disabled={!editingRelationState.relationName || !editingRelationState.target}\n >\n Save\n </Button>\n </DialogActions>\n </>\n )}\n </Dialog>\n </Container>\n </div>\n );\n}\n","\nimport React, { useCallback, useState } from \"react\";\nimport { Button, cls, Dialog, DialogActions, DialogContent, DialogTitle, Typography , iconSize } from \"@rebasepro/ui\";\nimport { CodeIcon } from \"lucide-react\";\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 <div className=\"p-3 bg-red-50 dark:bg-red-900/20 rounded-md border border-red-200 dark:border-red-800\">\n <Typography variant=\"body2\" className=\"font-medium text-red-700 dark:text-red-400 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 text-red-600 dark:text-red-400\">\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 </div>\n )}\n\n {isValid && (\n <div className=\"p-3 bg-green-50 dark:bg-green-900/20 rounded-md border border-green-200 dark:border-green-800\">\n <Typography variant=\"body2\" className=\"text-green-700 dark:text-green-400\">\n ✓ JSON is valid and ready to import\n </Typography>\n </div>\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 { Button, CircularProgress, IconButton, Menu, TextField, Tooltip, Typography } from \"@rebasepro/ui\";\nimport { SendIcon } from \"lucide-react\";\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 { Button, Card, Chip, cls, Container, Tooltip, Typography , iconSize } from \"@rebasepro/ui\";\nimport { CodeIcon, TableIcon, ShoppingCartIcon, UserIcon, FileTextIcon, FileIcon } from \"lucide-react\";\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 { Button, IconButton, Typography, cls, defaultBorderMixin, Chip, Paper, Container, Tooltip, CircularProgress, Dialog, DialogTitle, DialogContent, DialogActions, TextField, Select, SelectItem, MultiSelect, MultiSelectItem , iconSize } from \"@rebasepro/ui\";\nimport { KeyIcon, Trash2Icon } from \"lucide-react\";\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 { ArrowLeftIcon, CheckIcon } from \"lucide-react\";\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 { Button, cls, coolIconKeys, defaultBorderMixin, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, LoadingButton, Tab, Tabs, Typography } from \"@rebasepro/ui\";\nimport { CollectionEditorSchema } from \"./CollectionYupValidation\";\nimport { GeneralSettingsForm } from \"./GeneralSettingsForm\";\nimport { DisplaySettingsForm } from \"./DisplaySettingsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { CollectionRelationsTab } from \"./CollectionRelationsTab\";\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 | \"relations\"\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 unknown 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 unknown 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 === \"relations\" || 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: Record<string, unknown>) => {\n const res = cleanPropertiesFromImport(properties as unknown 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 {getDataSourceCapabilities(values.driver).supportsRelations && <Tab value={\"relations\"}>\n Relations\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 === \"relations\" && getDataSourceCapabilities(values.driver).supportsRelations &&\n <CollectionRelationsTab/>\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 unknown 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","CollectionRelationsTab","collections","editingRelationIndex","setEditingRelationIndex","editingRelationState","setEditingRelationState","getTargetSlug","match","col","relations","handleDelete","index","newRelations","splice","handleSave","handleCancel","relationName","cardinality","direction","relation","width","prev","val","targetFn","c","through","sourceColumn","targetColumn","EXAMPLE_JSON","CollectionJsonImportDialog","onClose","onImport","jsonValue","setJsonValue","setErrors","setTouched","trim","validateCollectionJson","handleJsonChange","result_0","valid","handleImport","handleClose","isValid","open_0","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","handleGenerate","mode","collectionsContext","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","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","pgTypeToRebaseProperty","column","column_name","data_type","udt_name","is_nullable","column_default","enum_values","prettifiedName","isAutoId","dt","colType","columnType","isId","integer","startsWith","buildCollectionFromTableMetadata","columns","propRecord","foreignKeys","fk","relName","endsWith","substring","foreign_table_name","localKey","junctions","junction","target_table_name","junction_table_name","source_column_name","target_column_name","policy_name","CollectionEditorDialog","formDirty","setFormDirty","dialogProps","triggerDialog","useUnsavedChangesDialog","CollectionEditor","navigationState","useNavigationStateController","topLevelNavigation","initialValuesProp","initialValues","copyFromProp","copyFrom","includeTemplates","parentCollectionSlugs","collectionsInThisLevel","getSubcollections","existingPaths","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","supportsRelations","handleSubmit","View","importedCollection","removeUndefined","getFullIdPath","validate","propertiesResult","applyPropertiesConfig","internalProperty","mergeDeep","idValue","subpaths","removeInitialAndTrailingSlashes"],"mappings":"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"}