@rebasepro/admin 0.0.1-canary.eae7889 → 0.0.1-canary.eb08332

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 (716) hide show
  1. package/LICENSE +21 -6
  2. package/README.md +139 -0
  3. package/dist/CollectionEditorDialog-DKGlYDPc.js +3630 -0
  4. package/dist/CollectionEditorDialog-DKGlYDPc.js.map +1 -0
  5. package/dist/PropertyEditView-h0N-AMCY.js +3808 -0
  6. package/dist/PropertyEditView-h0N-AMCY.js.map +1 -0
  7. package/dist/RouterCollectionsStudioView-DdEStpFk.js +192 -0
  8. package/dist/RouterCollectionsStudioView-DdEStpFk.js.map +1 -0
  9. package/dist/collection_editor/ConfigControllerProvider.d.ts +2 -11
  10. package/dist/collection_editor/_cms_internals.d.ts +4 -4
  11. package/dist/collection_editor/api/generateCollectionApi.d.ts +10 -9
  12. package/dist/collection_editor/extensibility_types.d.ts +135 -0
  13. package/dist/collection_editor/index.d.ts +6 -1
  14. package/dist/collection_editor/pgColumnToProperty.d.ts +3 -3
  15. package/dist/collection_editor/serializable_types.d.ts +370 -0
  16. package/dist/collection_editor/serializable_utils.d.ts +50 -0
  17. package/dist/collection_editor/types/collection_editor_controller.d.ts +11 -10
  18. package/dist/collection_editor/types/collection_inference.d.ts +2 -2
  19. package/dist/collection_editor/types/config_controller.d.ts +21 -14
  20. package/dist/collection_editor/ui/AddKanbanColumnAction.d.ts +7 -5
  21. package/dist/collection_editor/ui/CollectionViewHeaderAction.d.ts +7 -5
  22. package/dist/collection_editor/ui/EditorCollectionAction.d.ts +1 -1
  23. package/dist/collection_editor/ui/EditorCollectionActionStart.d.ts +1 -1
  24. package/dist/collection_editor/ui/EditorEntityAction.d.ts +1 -1
  25. package/dist/collection_editor/ui/HomePageEditorCollectionAction.d.ts +1 -1
  26. package/dist/collection_editor/ui/KanbanSetupAction.d.ts +7 -5
  27. package/dist/collection_editor/ui/MissingReferenceWidget.d.ts +1 -1
  28. package/dist/collection_editor/ui/NewCollectionButton.d.ts +1 -1
  29. package/dist/collection_editor/ui/NewCollectionCard.d.ts +1 -1
  30. package/dist/collection_editor/ui/PropertyAddColumnComponent.d.ts +6 -5
  31. package/dist/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.d.ts +4 -4
  32. package/dist/collection_editor/ui/collection_editor/AIModifiedPathsContext.d.ts +1 -1
  33. package/dist/collection_editor/ui/collection_editor/CollectionDetailsForm.d.ts +7 -7
  34. package/dist/collection_editor/ui/collection_editor/CollectionEditorDialog.d.ts +10 -11
  35. package/dist/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.d.ts +4 -4
  36. package/dist/collection_editor/ui/collection_editor/CollectionJsonImportDialog.d.ts +4 -3
  37. package/dist/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.d.ts +17 -7
  38. package/dist/collection_editor/ui/collection_editor/CollectionRLSTab.d.ts +2 -1
  39. package/dist/collection_editor/ui/collection_editor/CollectionRelationsTab.d.ts +2 -1
  40. package/dist/collection_editor/ui/collection_editor/CollectionStudioView.d.ts +14 -1
  41. package/dist/collection_editor/ui/collection_editor/CollectionYupValidation.d.ts +1 -9
  42. package/dist/collection_editor/ui/collection_editor/CollectionsStudioView.d.ts +25 -2
  43. package/dist/collection_editor/ui/collection_editor/DisplaySettingsForm.d.ts +4 -2
  44. package/dist/collection_editor/ui/collection_editor/EntityActionsEditTab.d.ts +4 -3
  45. package/dist/collection_editor/ui/collection_editor/EntityActionsSelectDialog.d.ts +2 -1
  46. package/dist/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.d.ts +2 -1
  47. package/dist/collection_editor/ui/collection_editor/EnumForm.d.ts +2 -1
  48. package/dist/collection_editor/ui/collection_editor/GeneralSettingsForm.d.ts +8 -4
  49. package/dist/collection_editor/ui/collection_editor/GetCodeDialog.d.ts +4 -3
  50. package/dist/collection_editor/ui/collection_editor/KanbanConfigSection.d.ts +2 -1
  51. package/dist/collection_editor/ui/collection_editor/LayoutModeSwitch.d.ts +3 -3
  52. package/dist/collection_editor/ui/collection_editor/PropertyEditView.d.ts +17 -5
  53. package/dist/collection_editor/ui/collection_editor/PropertyFieldPreview.d.ts +2 -2
  54. package/dist/collection_editor/ui/collection_editor/PropertyTree.d.ts +2 -2
  55. package/dist/collection_editor/ui/collection_editor/RouterCollectionStudioView.d.ts +15 -0
  56. package/dist/collection_editor/ui/collection_editor/RouterCollectionsStudioView.d.ts +14 -0
  57. package/dist/collection_editor/ui/collection_editor/SubcollectionsEditTab.d.ts +8 -6
  58. package/dist/collection_editor/ui/collection_editor/SwitchControl.d.ts +3 -2
  59. package/dist/collection_editor/ui/collection_editor/ViewModeSwitch.d.ts +1 -1
  60. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.d.ts +1 -1
  61. package/dist/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.d.ts +3 -2
  62. package/dist/collection_editor/ui/collection_editor/properties/BlockPropertyField.d.ts +2 -1
  63. package/dist/collection_editor/ui/collection_editor/properties/BooleanPropertyField.d.ts +2 -1
  64. package/dist/collection_editor/ui/collection_editor/properties/DateTimePropertyField.d.ts +2 -1
  65. package/dist/collection_editor/ui/collection_editor/properties/EnumPropertyField.d.ts +2 -1
  66. package/dist/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.d.ts +2 -1
  67. package/dist/collection_editor/ui/collection_editor/properties/MapPropertyField.d.ts +2 -1
  68. package/dist/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.d.ts +2 -1
  69. package/dist/collection_editor/ui/collection_editor/properties/NumberPropertyField.d.ts +2 -1
  70. package/dist/collection_editor/ui/collection_editor/properties/ReferencePropertyField.d.ts +3 -2
  71. package/dist/collection_editor/ui/collection_editor/properties/RelationPropertyField.d.ts +3 -8
  72. package/dist/collection_editor/ui/collection_editor/properties/RepeatPropertyField.d.ts +2 -1
  73. package/dist/collection_editor/ui/collection_editor/properties/StoragePropertyField.d.ts +2 -1
  74. package/dist/collection_editor/ui/collection_editor/properties/StringPropertyField.d.ts +2 -1
  75. package/dist/collection_editor/ui/collection_editor/properties/UrlPropertyField.d.ts +2 -1
  76. package/dist/collection_editor/ui/collection_editor/properties/VectorPropertyField.d.ts +4 -0
  77. package/dist/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.d.ts +2 -1
  78. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.d.ts +2 -1
  79. package/dist/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.d.ts +1 -1
  80. package/dist/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.d.ts +2 -1
  81. package/dist/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.d.ts +2 -1
  82. package/dist/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.d.ts +2 -1
  83. package/dist/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.d.ts +2 -1
  84. package/dist/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.d.ts +2 -1
  85. package/dist/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.d.ts +1 -1
  86. package/dist/collection_editor/ui/collection_editor/templates/blog_template.d.ts +2 -2
  87. package/dist/collection_editor/ui/collection_editor/templates/pages_template.d.ts +2 -2
  88. package/dist/collection_editor/ui/collection_editor/templates/products_template.d.ts +2 -2
  89. package/dist/collection_editor/ui/collection_editor/templates/users_template.d.ts +2 -2
  90. package/dist/collection_editor/useJsonCollectionsConfigController.d.ts +37 -0
  91. package/dist/collection_editor/useLocalCollectionsConfigController.d.ts +2 -2
  92. package/dist/collection_editor/useSafeSnackbarController.d.ts +2 -0
  93. package/dist/collection_editor/validateCollectionJson.d.ts +2 -2
  94. package/dist/collection_editor_ui.d.ts +4 -0
  95. package/dist/collection_editor_ui.js +33 -11
  96. package/dist/collection_editor_ui.js.map +1 -1
  97. package/dist/components/ArrayContainer.d.ts +5 -5
  98. package/dist/components/ClearFilterSortButton.d.ts +1 -1
  99. package/dist/components/CollectionEditorDialogs.d.ts +2 -1
  100. package/dist/components/CollectionPanel.d.ts +58 -0
  101. package/dist/components/{EntityCollectionTable/EntityCollectionRowActions.d.ts → CollectionTableBinding/CollectionRowActions.d.ts} +5 -5
  102. package/dist/components/CollectionTableBinding/CollectionTableBinding.d.ts +28 -0
  103. package/dist/components/{EntityCollectionTable/EntityCollectionTableProps.d.ts → CollectionTableBinding/CollectionTableBindingProps.d.ts} +4 -4
  104. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.d.ts +2 -2
  105. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.d.ts +6 -6
  106. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.d.ts +6 -6
  107. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.d.ts +6 -6
  108. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.d.ts +3 -2
  109. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.d.ts +4 -4
  110. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.d.ts +1 -1
  111. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.d.ts +1 -1
  112. package/dist/components/CollectionTableBinding/index.d.ts +6 -0
  113. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.d.ts +5 -1
  114. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.d.ts +3 -3
  115. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.d.ts +1 -1
  116. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.d.ts +2 -2
  117. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.d.ts +7 -6
  118. package/dist/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.d.ts +4 -3
  119. package/dist/components/CollectionViewBinding/BoardCardBinding.d.ts +31 -0
  120. package/dist/components/CollectionViewBinding/CollectionBoardViewBinding.d.ts +22 -0
  121. package/dist/components/{EntityCollectionView/EntityCollectionCardView.d.ts → CollectionViewBinding/CollectionCardViewBinding.d.ts} +5 -5
  122. package/dist/components/CollectionViewBinding/CollectionListViewBinding.d.ts +50 -0
  123. package/dist/components/CollectionViewBinding/CollectionViewActions.d.ts +20 -0
  124. package/dist/components/CollectionViewBinding/CollectionViewBinding.d.ts +41 -0
  125. package/dist/components/CollectionViewBinding/CollectionViewStartActions.d.ts +21 -0
  126. package/dist/components/CollectionViewBinding/EntityCardBinding.d.ts +21 -0
  127. package/dist/components/CollectionViewBinding/FilterPresetsButton.d.ts +22 -0
  128. package/dist/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.d.ts +3 -2
  129. package/dist/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.d.ts +6 -5
  130. package/dist/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.d.ts +2 -1
  131. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.d.ts +3 -3
  132. package/dist/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.d.ts +7 -6
  133. package/dist/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.d.ts +2 -2
  134. package/dist/components/{EntityCollectionView/useEntityPreviewSlots.d.ts → CollectionViewBinding/usePreviewSlots.d.ts} +5 -5
  135. package/dist/components/DefaultAppBar.d.ts +18 -1
  136. package/dist/components/DefaultDrawer.d.ts +53 -5
  137. package/dist/components/DeleteEntityDialog.d.ts +6 -5
  138. package/dist/components/DetailViewBinding.d.ts +28 -0
  139. package/dist/components/DrawerNavigationGroup.d.ts +1 -1
  140. package/dist/components/DrawerNavigationItem.d.ts +1 -1
  141. package/dist/components/EditFormActions.d.ts +3 -0
  142. package/dist/components/EditViewBinding.d.ts +58 -0
  143. package/dist/components/{EntityPreview.d.ts → EntityPreviewBinding.d.ts} +14 -14
  144. package/dist/components/EntityViewBinding.d.ts +13 -0
  145. package/dist/components/FieldCaption.d.ts +1 -1
  146. package/dist/components/HomePage/ContentHomePage.d.ts +1 -1
  147. package/dist/components/HomePage/FavouritesView.d.ts +1 -1
  148. package/dist/components/HomePage/HomePageDnD.d.ts +7 -7
  149. package/dist/components/HomePage/NavigationCard.d.ts +1 -1
  150. package/dist/components/HomePage/NavigationCardBinding.d.ts +2 -1
  151. package/dist/components/HomePage/NavigationGroup.d.ts +2 -2
  152. package/dist/components/HomePage/RenameGroupDialog.d.ts +2 -1
  153. package/dist/components/HomePage/SmallNavigationCard.d.ts +1 -1
  154. package/dist/components/JsonPreviewBinding.d.ts +4 -0
  155. package/dist/components/PropertyCollectionView.d.ts +3 -2
  156. package/dist/components/PropertyIdCopyTooltip.d.ts +3 -3
  157. package/dist/components/{RebaseCMS.d.ts → RebaseAdmin.d.ts} +2 -2
  158. package/dist/components/RebaseAuthGate.d.ts +1 -1
  159. package/dist/components/RebaseLayout.d.ts +6 -5
  160. package/dist/components/RebaseNavigation.d.ts +2 -2
  161. package/dist/components/RebaseRouteDefs.d.ts +2 -2
  162. package/dist/components/RebaseShell.d.ts +2 -1
  163. package/dist/components/ReferenceTable/{EntitySelectionTable.d.ts → SelectionTableBinding.d.ts} +6 -6
  164. package/dist/components/ReferenceWidget.d.ts +3 -2
  165. package/dist/components/RelationSelector.d.ts +1 -1
  166. package/dist/components/SearchIconsView.d.ts +2 -1
  167. package/dist/components/SelectableTable/SelectableTable.d.ts +11 -11
  168. package/dist/components/SelectableTable/SelectableTableContext.d.ts +3 -3
  169. package/dist/components/SelectableTable/SelectionStore.d.ts +16 -22
  170. package/dist/components/SelectableTable/filters/BooleanFilterField.d.ts +9 -3
  171. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +10 -3
  172. package/dist/components/SelectableTable/filters/FilterFieldBinding.d.ts +40 -0
  173. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +10 -3
  174. package/dist/components/SelectableTable/filters/RelationFilterField.d.ts +8 -1
  175. package/dist/components/SelectableTable/filters/StringNumberFilterField.d.ts +10 -3
  176. package/dist/components/SideDialogs.d.ts +2 -2
  177. package/dist/components/SidePanelBinding.d.ts +11 -0
  178. package/dist/components/{SideEntityProvider.d.ts → SidePanelProvider.d.ts} +8 -8
  179. package/dist/components/admin/CreationResultDialog.d.ts +6 -0
  180. package/dist/components/admin/index.d.ts +1 -3
  181. package/dist/components/app/AppBar.d.ts +1 -1
  182. package/dist/components/app/Drawer.d.ts +9 -2
  183. package/dist/components/common/default_entity_actions.d.ts +8 -1
  184. package/dist/components/field_configs.d.ts +1 -1
  185. package/dist/components/history/EntityHistoryEntry.d.ts +3 -3
  186. package/dist/components/history/EntityHistoryView.d.ts +1 -1
  187. package/dist/components/history/LastEditedByFormAction.d.ts +2 -1
  188. package/dist/components/history/LastEditedByIndicator.d.ts +4 -3
  189. package/dist/components/history/UserChip.d.ts +1 -1
  190. package/dist/components/index.d.ts +16 -13
  191. package/dist/contexts/SidePanelControllerContext.d.ts +3 -0
  192. package/dist/data_export/export/BasicExportAction.d.ts +2 -1
  193. package/dist/data_export/export/ExportCollectionAction.d.ts +4 -4
  194. package/dist/data_export/export/export.d.ts +3 -3
  195. package/dist/data_import/components/DataNewPropertiesMapping.d.ts +1 -1
  196. package/dist/data_import/components/ImportFileUpload.d.ts +1 -1
  197. package/dist/data_import/components/ImportNewPropertyFieldPreview.d.ts +2 -1
  198. package/dist/data_import/components/ImportSaveInProgress.d.ts +3 -3
  199. package/dist/data_import/import/ImportCollectionAction.d.ts +4 -3
  200. package/dist/data_import/utils/data.d.ts +1 -1
  201. package/dist/data_import/utils/file_headers.d.ts +6 -1
  202. package/dist/data_import/utils/file_to_json.d.ts +1 -11
  203. package/dist/data_import/utils/transforms.d.ts +11 -0
  204. package/dist/editor/components/SlashCommandMenu.d.ts +2 -1
  205. package/dist/editor/components/editor-bubble.d.ts +5 -1
  206. package/dist/editor/components/image-bubble.d.ts +5 -1
  207. package/dist/editor/components/index.d.ts +3 -3
  208. package/dist/editor/components/table-bubble.d.ts +5 -1
  209. package/dist/editor/editor.d.ts +4 -4
  210. package/dist/editor/nodeViews/ReactNodeView.d.ts +4 -1
  211. package/dist/editor/selectors/color-selector.d.ts +1 -1
  212. package/dist/editor/selectors/link-selector.d.ts +1 -1
  213. package/dist/editor/selectors/node-selector.d.ts +1 -1
  214. package/dist/editor/selectors/text-buttons.d.ts +1 -1
  215. package/dist/editor/useProseMirror.d.ts +2 -2
  216. package/dist/editor/utils/remove_classes.d.ts +1 -1
  217. package/dist/editor.js +2625 -3569
  218. package/dist/editor.js.map +1 -1
  219. package/dist/form/EntityForm.d.ts +11 -9
  220. package/dist/form/EntityFormActions.d.ts +2 -1
  221. package/dist/form/EntityFormBinding.d.ts +27 -0
  222. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  223. package/dist/form/components/FieldHelperText.d.ts +1 -1
  224. package/dist/form/components/FormEntry.d.ts +1 -1
  225. package/dist/form/components/FormLayout.d.ts +1 -1
  226. package/dist/form/components/LabelWithIconAndTooltip.d.ts +1 -1
  227. package/dist/form/components/LocalChangesMenu.d.ts +3 -2
  228. package/dist/form/components/StorageItemPreview.d.ts +2 -1
  229. package/dist/form/components/StorageUploadProgress.d.ts +10 -4
  230. package/dist/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +2 -1
  231. package/dist/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +2 -1
  232. package/dist/form/field_bindings/BlockFieldBinding.d.ts +2 -1
  233. package/dist/form/field_bindings/DateTimeFieldBinding.d.ts +2 -1
  234. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +2 -1
  235. package/dist/form/field_bindings/MapFieldBinding.d.ts +2 -1
  236. package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +4 -3
  237. package/dist/form/field_bindings/MultiSelectFieldBinding.d.ts +2 -1
  238. package/dist/form/field_bindings/MultipleRelationFieldBinding.d.ts +2 -1
  239. package/dist/form/field_bindings/ReadOnlyFieldBinding.d.ts +2 -1
  240. package/dist/form/field_bindings/ReferenceFieldBinding.d.ts +2 -1
  241. package/dist/form/field_bindings/RelationFieldBinding.d.ts +2 -1
  242. package/dist/form/field_bindings/RepeatFieldBinding.d.ts +2 -1
  243. package/dist/form/field_bindings/SelectFieldBinding.d.ts +2 -1
  244. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +5 -4
  245. package/dist/form/field_bindings/SwitchFieldBinding.d.ts +2 -1
  246. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -1
  247. package/dist/form/field_bindings/UserSelectFieldBinding.d.ts +2 -1
  248. package/dist/form/field_bindings/VectorFieldBinding.d.ts +12 -0
  249. package/dist/form/form_utils.d.ts +8 -0
  250. package/dist/form/index.d.ts +6 -2
  251. package/dist/form/validation.d.ts +3 -3
  252. package/dist/history-C0FdqGNz.js +311 -0
  253. package/dist/history-C0FdqGNz.js.map +1 -0
  254. package/dist/hooks/index.d.ts +4 -4
  255. package/dist/hooks/navigation/contexts/CollectionRegistryContext.d.ts +2 -2
  256. package/dist/hooks/navigation/useAsyncResolver.d.ts +26 -0
  257. package/dist/hooks/navigation/useBuildCollectionRegistryController.d.ts +2 -0
  258. package/dist/hooks/navigation/useBuildNavigationStateController.d.ts +6 -8
  259. package/dist/hooks/navigation/useNavigationResolution.d.ts +6 -7
  260. package/dist/hooks/navigation/useResolvedCollections.d.ts +11 -7
  261. package/dist/hooks/navigation/useResolvedViews.d.ts +2 -5
  262. package/dist/hooks/navigation/useTopLevelNavigation.d.ts +3 -3
  263. package/dist/hooks/navigation/utils.d.ts +5 -5
  264. package/dist/hooks/useBreadcrumbsController.d.ts +2 -32
  265. package/dist/hooks/useBuildSidePanel.d.ts +6 -0
  266. package/dist/hooks/useCMSContext.d.ts +2 -2
  267. package/dist/hooks/{useEntityHistory.d.ts → useHistory.d.ts} +2 -2
  268. package/dist/hooks/useResolvedNavigationFrom.d.ts +3 -3
  269. package/dist/hooks/{useEntitySelectionDialog.d.ts → useSelectionDialog.d.ts} +2 -2
  270. package/dist/hooks/useSideDialogsController.d.ts +1 -1
  271. package/dist/hooks/useSidePanel.d.ts +11 -0
  272. package/dist/index.d.ts +6 -3
  273. package/dist/index.js +2 -799
  274. package/dist/markdown-CklalUUk.js +526 -0
  275. package/dist/markdown-CklalUUk.js.map +1 -0
  276. package/dist/preview/components/ArrayEnumPreview.d.ts +2 -1
  277. package/dist/preview/components/EmptyValue.d.ts +2 -1
  278. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  279. package/dist/preview/components/ImagePreview.d.ts +2 -1
  280. package/dist/preview/components/ReferencePreview.d.ts +2 -1
  281. package/dist/preview/components/RelationPreview.d.ts +2 -1
  282. package/dist/preview/components/StorageThumbnail.d.ts +3 -1
  283. package/dist/preview/components/UrlComponentPreview.d.ts +1 -0
  284. package/dist/preview/components/UserPreview.d.ts +6 -3
  285. package/dist/preview/property_previews/ArrayOfMapsPreview.d.ts +2 -1
  286. package/dist/preview/property_previews/ArrayOfReferencesPreview.d.ts +1 -1
  287. package/dist/preview/property_previews/ArrayOfRelationsPreview.d.ts +1 -1
  288. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +2 -1
  289. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +2 -1
  290. package/dist/preview/property_previews/ArrayOneOfPreview.d.ts +2 -1
  291. package/dist/preview/property_previews/ArrayPropertyEnumPreview.d.ts +1 -1
  292. package/dist/preview/property_previews/ArrayPropertyPreview.d.ts +2 -1
  293. package/dist/preview/property_previews/MapPropertyPreview.d.ts +3 -2
  294. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +5 -4
  295. package/dist/rolldown-runtime-D7D4PA-g.js +13 -0
  296. package/dist/routes/CustomViewRoute.d.ts +2 -1
  297. package/dist/routes/RebaseRoute.d.ts +1 -1
  298. package/dist/src-DLAFyeZI.js +24222 -0
  299. package/dist/src-DLAFyeZI.js.map +1 -0
  300. package/dist/types/components/EntityFormActionsProps.d.ts +4 -4
  301. package/dist/types/components/EntityFormProps.d.ts +65 -5
  302. package/dist/types/components/PropertyPreviewProps.d.ts +6 -1
  303. package/dist/types/components/formex.d.ts +1 -40
  304. package/dist/types/fields.d.ts +23 -12
  305. package/dist/util/dataControllerAdapter.d.ts +27 -0
  306. package/dist/util/navigation_utils.d.ts +16 -6
  307. package/dist/util/previews.d.ts +8 -3
  308. package/dist/util/propertyConfigMapper.d.ts +17 -0
  309. package/dist/util/property_utils.d.ts +3 -3
  310. package/dist/util/resolutions.d.ts +1 -2
  311. package/dist/util/view_constants.d.ts +6 -0
  312. package/package.json +56 -55
  313. package/src/collection_editor/ConfigControllerProvider.tsx +37 -53
  314. package/src/collection_editor/_cms_internals.ts +4 -4
  315. package/src/collection_editor/api/generateCollectionApi.ts +10 -9
  316. package/src/collection_editor/extensibility_types.ts +168 -0
  317. package/src/collection_editor/index.ts +47 -3
  318. package/src/collection_editor/pgColumnToProperty.ts +23 -6
  319. package/src/collection_editor/serializable_types.ts +474 -0
  320. package/src/collection_editor/serializable_utils.ts +576 -0
  321. package/src/collection_editor/types/collection_editor_controller.tsx +8 -11
  322. package/src/collection_editor/types/collection_inference.ts +2 -2
  323. package/src/collection_editor/types/config_controller.tsx +14 -14
  324. package/src/collection_editor/ui/AddKanbanColumnAction.tsx +21 -9
  325. package/src/collection_editor/ui/CollectionViewHeaderAction.tsx +8 -8
  326. package/src/collection_editor/ui/EditorCollectionAction.tsx +9 -14
  327. package/src/collection_editor/ui/EditorCollectionActionStart.tsx +13 -18
  328. package/src/collection_editor/ui/EditorEntityAction.tsx +9 -14
  329. package/src/collection_editor/ui/HomePageEditorCollectionAction.tsx +13 -19
  330. package/src/collection_editor/ui/KanbanSetupAction.tsx +8 -6
  331. package/src/collection_editor/ui/MissingReferenceWidget.tsx +5 -3
  332. package/src/collection_editor/ui/NewCollectionButton.tsx +4 -4
  333. package/src/collection_editor/ui/NewCollectionCard.tsx +8 -13
  334. package/src/collection_editor/ui/PropertyAddColumnComponent.tsx +11 -16
  335. package/src/collection_editor/ui/collection_editor/AICollectionGeneratorPopover.tsx +20 -12
  336. package/src/collection_editor/ui/collection_editor/CollectionDetailsForm.tsx +29 -59
  337. package/src/collection_editor/ui/collection_editor/CollectionEditorDialog.tsx +213 -135
  338. package/src/collection_editor/ui/collection_editor/CollectionEditorWelcomeView.tsx +21 -7
  339. package/src/collection_editor/ui/collection_editor/CollectionJsonImportDialog.tsx +29 -23
  340. package/src/collection_editor/ui/collection_editor/CollectionPropertiesEditorForm.tsx +142 -112
  341. package/src/collection_editor/ui/collection_editor/CollectionRLSTab.tsx +49 -12
  342. package/src/collection_editor/ui/collection_editor/CollectionRelationsTab.tsx +29 -10
  343. package/src/collection_editor/ui/collection_editor/CollectionStudioView.tsx +26 -23
  344. package/src/collection_editor/ui/collection_editor/CollectionsStudioView.tsx +104 -37
  345. package/src/collection_editor/ui/collection_editor/DisplaySettingsForm.tsx +26 -14
  346. package/src/collection_editor/ui/collection_editor/EntityActionsEditTab.tsx +21 -8
  347. package/src/collection_editor/ui/collection_editor/EntityActionsSelectDialog.tsx +1 -1
  348. package/src/collection_editor/ui/collection_editor/EntityCustomViewsSelectDialog.tsx +1 -1
  349. package/src/collection_editor/ui/collection_editor/EnumForm.tsx +20 -5
  350. package/src/collection_editor/ui/collection_editor/GeneralSettingsForm.tsx +45 -12
  351. package/src/collection_editor/ui/collection_editor/GetCodeDialog.tsx +10 -12
  352. package/src/collection_editor/ui/collection_editor/KanbanConfigSection.tsx +5 -6
  353. package/src/collection_editor/ui/collection_editor/LayoutModeSwitch.tsx +17 -5
  354. package/src/collection_editor/ui/collection_editor/PropertyEditView.tsx +190 -27
  355. package/src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx +58 -49
  356. package/src/collection_editor/ui/collection_editor/PropertyTree.tsx +17 -4
  357. package/src/collection_editor/ui/collection_editor/RouterCollectionStudioView.tsx +44 -0
  358. package/src/collection_editor/ui/collection_editor/RouterCollectionsStudioView.tsx +41 -0
  359. package/src/collection_editor/ui/collection_editor/SubcollectionsEditTab.tsx +27 -13
  360. package/src/collection_editor/ui/collection_editor/SwitchControl.tsx +1 -1
  361. package/src/collection_editor/ui/collection_editor/ViewModeSwitch.tsx +9 -2
  362. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx +4 -4
  363. package/src/collection_editor/ui/collection_editor/import/CollectionEditorImportMapping.tsx +4 -4
  364. package/src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx +5 -6
  365. package/src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx +1 -1
  366. package/src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx +5 -5
  367. package/src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx +10 -10
  368. package/src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx +10 -9
  369. package/src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx +7 -8
  370. package/src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx +17 -10
  371. package/src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx +7 -7
  372. package/src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx +19 -53
  373. package/src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx +43 -60
  374. package/src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx +3 -3
  375. package/src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx +56 -13
  376. package/src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx +7 -7
  377. package/src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx +4 -3
  378. package/src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx +34 -0
  379. package/src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx +5 -6
  380. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsEditor.tsx +18 -9
  381. package/src/collection_editor/ui/collection_editor/properties/conditions/ConditionsPanel.tsx +1 -2
  382. package/src/collection_editor/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx +17 -5
  383. package/src/collection_editor/ui/collection_editor/properties/conditions/property_paths.ts +1 -1
  384. package/src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx +4 -4
  385. package/src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx +3 -3
  386. package/src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx +6 -9
  387. package/src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx +6 -6
  388. package/src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx +1 -2
  389. package/src/collection_editor/ui/collection_editor/templates/blog_template.ts +3 -3
  390. package/src/collection_editor/ui/collection_editor/templates/pages_template.ts +3 -3
  391. package/src/collection_editor/ui/collection_editor/templates/products_template.ts +4 -4
  392. package/src/collection_editor/ui/collection_editor/templates/users_template.ts +2 -2
  393. package/src/collection_editor/ui/collection_editor/utils/supported_fields.tsx +0 -1
  394. package/src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts +7 -29
  395. package/src/collection_editor/useJsonCollectionsConfigController.tsx +286 -0
  396. package/src/collection_editor/useLocalCollectionsConfigController.tsx +11 -8
  397. package/src/collection_editor/useSafeSnackbarController.ts +9 -0
  398. package/src/collection_editor/validateCollectionJson.ts +111 -24
  399. package/src/collection_editor_ui.ts +6 -0
  400. package/src/components/AdminModeSyncer.tsx +2 -2
  401. package/src/components/ArrayContainer.tsx +28 -24
  402. package/src/components/ClearFilterSortButton.tsx +2 -3
  403. package/src/components/CollectionEditorDialogs.tsx +1 -1
  404. package/src/components/CollectionPanel.tsx +178 -0
  405. package/src/components/{EntityCollectionTable/EntityCollectionRowActions.tsx → CollectionTableBinding/CollectionRowActions.tsx} +26 -16
  406. package/src/components/{EntityCollectionTable/EntityCollectionTable.tsx → CollectionTableBinding/CollectionTableBinding.tsx} +34 -31
  407. package/src/components/{EntityCollectionTable/EntityCollectionTableProps.tsx → CollectionTableBinding/CollectionTableBindingProps.tsx} +4 -4
  408. package/src/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.tsx +14 -12
  409. package/src/components/{EntityCollectionTable → CollectionTableBinding}/column_utils.tsx +4 -4
  410. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableMultipleRelationField.tsx +13 -13
  411. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableReferenceField.tsx +39 -19
  412. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationField.tsx +14 -14
  413. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableRelationSelectorField.tsx +3 -3
  414. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/TableStorageUpload.tsx +29 -27
  415. package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableSelect.tsx +0 -1
  416. package/src/components/CollectionTableBinding/index.tsx +14 -0
  417. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/CollectionTableToolbar.tsx +22 -28
  418. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCell.tsx +8 -9
  419. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/EntityTableCellActions.tsx +2 -3
  420. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/common.tsx +7 -7
  421. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/PopupFormField.tsx +12 -13
  422. package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.tsx +5 -2
  423. package/src/components/{EntityCollectionTable → CollectionTableBinding}/table_bindings.tsx +101 -104
  424. package/src/components/{EntityCollectionView/EntityBoardCard.tsx → CollectionViewBinding/BoardCardBinding.tsx} +39 -40
  425. package/src/components/{EntityCollectionView/EntityCollectionBoardView.tsx → CollectionViewBinding/CollectionBoardViewBinding.tsx} +88 -52
  426. package/src/components/CollectionViewBinding/CollectionCardViewBinding.tsx +157 -0
  427. package/src/components/{EntityCollectionView/EntityCollectionListView.tsx → CollectionViewBinding/CollectionListViewBinding.tsx} +234 -151
  428. package/src/components/{EntityCollectionView/EntityCollectionViewActions.tsx → CollectionViewBinding/CollectionViewActions.tsx} +36 -26
  429. package/src/components/{EntityCollectionView/EntityCollectionView.tsx → CollectionViewBinding/CollectionViewBinding.tsx} +392 -213
  430. package/src/components/{EntityCollectionView/EntityCollectionViewStartActions.tsx → CollectionViewBinding/CollectionViewStartActions.tsx} +42 -23
  431. package/src/components/{EntityCollectionView/EntityCard.tsx → CollectionViewBinding/EntityCardBinding.tsx} +14 -14
  432. package/src/components/CollectionViewBinding/FilterPresetsButton.tsx +294 -0
  433. package/src/components/{EntityCollectionView → CollectionViewBinding}/FiltersDialog.tsx +37 -79
  434. package/src/components/{EntityCollectionView → CollectionViewBinding}/SplitListView.tsx +97 -30
  435. package/src/components/{EntityCollectionView → CollectionViewBinding}/ViewModeToggle.tsx +20 -8
  436. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useCollectionInlineEditor.ts +9 -8
  437. package/src/components/{EntityCollectionView → CollectionViewBinding}/hooks/useKanbanDragAndDrop.ts +17 -16
  438. package/src/components/{EntityCollectionView → CollectionViewBinding}/useBoardDataController.tsx +118 -70
  439. package/src/components/{EntityCollectionView/useEntityPreviewSlots.ts → CollectionViewBinding/usePreviewSlots.ts} +136 -48
  440. package/src/components/DefaultAppBar.tsx +73 -41
  441. package/src/components/DefaultDrawer.tsx +317 -85
  442. package/src/components/DeleteEntityDialog.tsx +7 -7
  443. package/src/components/DetailViewBinding.tsx +670 -0
  444. package/src/components/DrawerNavigationGroup.tsx +11 -11
  445. package/src/components/DrawerNavigationItem.tsx +6 -6
  446. package/src/components/{EntityEditViewFormActions.tsx → EditFormActions.tsx} +78 -59
  447. package/src/components/EditViewBinding.tsx +761 -0
  448. package/src/components/{EntityPreview.tsx → EntityPreviewBinding.tsx} +53 -39
  449. package/src/components/{EntityView.tsx → EntityViewBinding.tsx} +8 -9
  450. package/src/components/HomePage/ContentHomePage.tsx +35 -17
  451. package/src/components/HomePage/FavouritesView.tsx +2 -3
  452. package/src/components/HomePage/HomePageDnD.tsx +3 -2
  453. package/src/components/HomePage/NavigationCard.tsx +9 -16
  454. package/src/components/HomePage/NavigationCardBinding.tsx +6 -7
  455. package/src/components/HomePage/NavigationGroup.tsx +4 -5
  456. package/src/components/HomePage/RenameGroupDialog.tsx +1 -1
  457. package/src/components/HomePage/SmallNavigationCard.tsx +0 -5
  458. package/src/components/{EntityJsonPreview.tsx → JsonPreviewBinding.tsx} +2 -2
  459. package/src/components/PropertyCollectionView.tsx +2 -1
  460. package/src/components/PropertyIdCopyTooltip.tsx +2 -3
  461. package/src/components/{RebaseCMS.tsx → RebaseAdmin.tsx} +8 -6
  462. package/src/components/RebaseAuthGate.tsx +5 -3
  463. package/src/components/RebaseLayout.tsx +10 -9
  464. package/src/components/RebaseNavigation.tsx +107 -31
  465. package/src/components/RebaseRouteDefs.tsx +10 -13
  466. package/src/components/RebaseShell.tsx +18 -14
  467. package/src/components/ReferenceTable/{EntitySelectionTable.tsx → SelectionTableBinding.tsx} +40 -33
  468. package/src/components/ReferenceWidget.tsx +7 -7
  469. package/src/components/RelationSelector.tsx +82 -24
  470. package/src/components/SearchIconsView.tsx +13 -12
  471. package/src/components/SelectableTable/SelectableTable.tsx +68 -115
  472. package/src/components/SelectableTable/SelectableTableContext.tsx +4 -3
  473. package/src/components/SelectableTable/SelectionStore.ts +20 -44
  474. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +13 -5
  475. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +37 -16
  476. package/src/components/SelectableTable/filters/FilterFieldBinding.tsx +187 -0
  477. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +27 -13
  478. package/src/components/SelectableTable/filters/RelationFilterField.tsx +17 -3
  479. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +95 -35
  480. package/src/components/SideDialogs.tsx +58 -40
  481. package/src/components/SidePanelBinding.tsx +261 -0
  482. package/src/components/{SideEntityProvider.tsx → SidePanelProvider.tsx} +17 -16
  483. package/src/components/UserSelector.tsx +123 -9
  484. package/src/components/admin/CreationResultDialog.tsx +138 -0
  485. package/src/components/admin/index.ts +1 -3
  486. package/src/components/app/Drawer.tsx +9 -1
  487. package/src/components/app/Scaffold.tsx +16 -9
  488. package/src/components/common/default_entity_actions.tsx +270 -29
  489. package/src/components/field_configs.tsx +68 -46
  490. package/src/components/history/EntityHistoryEntry.tsx +4 -5
  491. package/src/components/history/EntityHistoryView.tsx +18 -8
  492. package/src/components/history/LastEditedByIndicator.tsx +4 -4
  493. package/src/components/index.ts +20 -17
  494. package/src/contexts/BreacrumbsContext.tsx +15 -6
  495. package/src/contexts/SidePanelControllerContext.tsx +5 -0
  496. package/src/data_export/export/BasicExportAction.tsx +42 -43
  497. package/src/data_export/export/ExportCollectionAction.tsx +55 -54
  498. package/src/data_export/export/export.ts +17 -17
  499. package/src/data_import/components/DataNewPropertiesMapping.tsx +17 -4
  500. package/src/data_import/components/ImportFileUpload.tsx +2 -3
  501. package/src/data_import/components/ImportNewPropertyFieldPreview.tsx +2 -3
  502. package/src/data_import/components/ImportSaveInProgress.tsx +4 -4
  503. package/src/data_import/import/ImportCollectionAction.tsx +26 -13
  504. package/src/data_import/utils/data.ts +26 -8
  505. package/src/data_import/utils/file_headers.ts +13 -89
  506. package/src/data_import/utils/file_to_json.ts +43 -68
  507. package/src/data_import/utils/get_properties_mapping.ts +1 -1
  508. package/src/data_import/utils/transforms.ts +47 -0
  509. package/src/editor/components/SlashCommandMenu.tsx +17 -2
  510. package/src/editor/components/editor-bubble-item.tsx +1 -1
  511. package/src/editor/components/editor-bubble.tsx +32 -9
  512. package/src/editor/components/image-bubble.tsx +28 -12
  513. package/src/editor/components/index.ts +3 -3
  514. package/src/editor/components/table-bubble.tsx +80 -18
  515. package/src/editor/editor.tsx +34 -15
  516. package/src/editor/extensions/HighlightDecorationExtension.ts +3 -2
  517. package/src/editor/extensions/Image/index.ts +3 -3
  518. package/src/editor/extensions/Image.ts +3 -3
  519. package/src/editor/extensions/clipboard.ts +2 -2
  520. package/src/editor/markdown-it-plugins.d.ts +24 -0
  521. package/src/editor/markdown.ts +2 -3
  522. package/src/editor/nodeViews/ReactNodeView.tsx +1 -1
  523. package/src/editor/nodeViews/TaskItemComponent.tsx +9 -8
  524. package/src/editor/schema.ts +135 -59
  525. package/src/editor/selectors/ai-selector.tsx +0 -1
  526. package/src/editor/selectors/color-selector.tsx +1 -2
  527. package/src/editor/selectors/link-selector.tsx +9 -7
  528. package/src/editor/selectors/node-selector.tsx +17 -3
  529. package/src/editor/selectors/text-buttons.tsx +1 -2
  530. package/src/editor/useProseMirror.ts +2 -2
  531. package/src/editor/utils/prosemirror-utils.ts +1 -1
  532. package/src/editor/utils/remove_classes.ts +6 -5
  533. package/src/form/EntityForm.tsx +222 -442
  534. package/src/form/EntityFormActions.tsx +49 -55
  535. package/src/form/EntityFormBinding.tsx +323 -0
  536. package/src/form/PropertyFieldBinding.tsx +81 -84
  537. package/src/form/components/ErrorFocus.tsx +1 -1
  538. package/src/form/components/FieldHelperText.tsx +6 -7
  539. package/src/form/components/FormLayout.tsx +1 -1
  540. package/src/form/components/LocalChangesMenu.tsx +20 -5
  541. package/src/form/components/StorageItemPreview.tsx +2 -3
  542. package/src/form/components/StorageUploadProgress.tsx +14 -7
  543. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +5 -5
  544. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +12 -13
  545. package/src/form/field_bindings/BlockFieldBinding.tsx +59 -58
  546. package/src/form/field_bindings/DateTimeFieldBinding.tsx +2 -2
  547. package/src/form/field_bindings/KeyValueFieldBinding.tsx +319 -303
  548. package/src/form/field_bindings/MapFieldBinding.tsx +14 -56
  549. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +28 -10
  550. package/src/form/field_bindings/MultiSelectFieldBinding.tsx +3 -4
  551. package/src/form/field_bindings/MultipleRelationFieldBinding.tsx +11 -12
  552. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +9 -2
  553. package/src/form/field_bindings/ReferenceFieldBinding.tsx +17 -15
  554. package/src/form/field_bindings/RelationFieldBinding.tsx +157 -156
  555. package/src/form/field_bindings/RepeatFieldBinding.tsx +8 -8
  556. package/src/form/field_bindings/SelectFieldBinding.tsx +3 -4
  557. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +107 -103
  558. package/src/form/field_bindings/SwitchFieldBinding.tsx +17 -17
  559. package/src/form/field_bindings/TextFieldBinding.tsx +90 -78
  560. package/src/form/field_bindings/UserSelectFieldBinding.tsx +18 -18
  561. package/src/form/field_bindings/VectorFieldBinding.tsx +202 -0
  562. package/src/form/form_utils.ts +163 -0
  563. package/src/form/index.tsx +15 -6
  564. package/src/form/useClearRestoreValue.tsx +1 -1
  565. package/src/form/validation.ts +104 -50
  566. package/src/hooks/index.ts +4 -4
  567. package/src/hooks/navigation/contexts/CollectionRegistryContext.tsx +5 -4
  568. package/src/hooks/navigation/contexts/NavigationStateContext.tsx +2 -2
  569. package/src/hooks/navigation/contexts/UrlContext.tsx +1 -2
  570. package/src/hooks/navigation/useAsyncResolver.ts +100 -0
  571. package/src/hooks/navigation/useBuildCollectionRegistryController.tsx +40 -21
  572. package/src/hooks/navigation/useBuildNavigationStateController.tsx +21 -22
  573. package/src/hooks/navigation/useNavigationResolution.ts +193 -21
  574. package/src/hooks/navigation/useResolvedCollections.ts +45 -77
  575. package/src/hooks/navigation/useResolvedViews.tsx +44 -123
  576. package/src/hooks/navigation/useTopLevelNavigation.ts +22 -18
  577. package/src/hooks/navigation/utils.ts +12 -9
  578. package/src/hooks/useBreadcrumbsController.tsx +2 -34
  579. package/src/hooks/{useBuildSideEntityController.tsx → useBuildSidePanel.tsx} +63 -24
  580. package/src/hooks/useCMSContext.tsx +7 -7
  581. package/src/hooks/{useEntityHistory.ts → useHistory.ts} +9 -4
  582. package/src/hooks/useResolvedNavigationFrom.tsx +8 -5
  583. package/src/hooks/{useEntitySelectionDialog.tsx → useSelectionDialog.tsx} +7 -7
  584. package/src/hooks/useSideDialogsController.tsx +1 -1
  585. package/src/hooks/useSidePanel.tsx +13 -0
  586. package/src/index.ts +34 -20
  587. package/src/preview/PropertyPreview.tsx +34 -41
  588. package/src/preview/components/DatePreview.tsx +1 -1
  589. package/src/preview/components/EnumValuesChip.tsx +1 -1
  590. package/src/preview/components/ImagePreview.tsx +4 -3
  591. package/src/preview/components/ReferencePreview.tsx +69 -18
  592. package/src/preview/components/RelationPreview.tsx +107 -18
  593. package/src/preview/components/StorageThumbnail.tsx +28 -8
  594. package/src/preview/components/UrlComponentPreview.tsx +12 -4
  595. package/src/preview/components/UserPreview.tsx +6 -15
  596. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +5 -5
  597. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +5 -5
  598. package/src/preview/property_previews/ArrayOfRelationsPreview.tsx +4 -4
  599. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +4 -4
  600. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +3 -2
  601. package/src/preview/property_previews/ArrayOneOfPreview.tsx +7 -9
  602. package/src/preview/property_previews/ArrayPropertyEnumPreview.tsx +1 -1
  603. package/src/preview/property_previews/ArrayPropertyPreview.tsx +4 -4
  604. package/src/preview/property_previews/MapPropertyPreview.tsx +4 -3
  605. package/src/preview/property_previews/NumberPropertyPreview.tsx +5 -3
  606. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +24 -25
  607. package/src/preview/property_previews/StringPropertyPreview.tsx +13 -11
  608. package/src/routes/CustomViewRoute.tsx +14 -6
  609. package/src/routes/RebaseRoute.tsx +112 -36
  610. package/src/types/components/EntityFormActionsProps.tsx +4 -4
  611. package/src/types/components/EntityFormProps.tsx +75 -5
  612. package/src/types/components/PropertyPreviewProps.tsx +6 -1
  613. package/src/types/components/formex.tsx +1 -45
  614. package/src/types/fields.tsx +26 -15
  615. package/src/util/dataControllerAdapter.ts +87 -0
  616. package/src/util/navigation_utils.ts +43 -13
  617. package/src/util/previews.ts +149 -13
  618. package/src/util/propertyConfigMapper.ts +134 -0
  619. package/src/util/property_utils.tsx +24 -9
  620. package/src/util/resolutions.ts +4 -8
  621. package/src/util/view_constants.ts +6 -0
  622. package/dist/CollectionEditorDialog-B2M9lCyL.js +0 -4720
  623. package/dist/CollectionEditorDialog-B2M9lCyL.js.map +0 -1
  624. package/dist/CollectionsStudioView-WG6soyfs.js +0 -218
  625. package/dist/CollectionsStudioView-WG6soyfs.js.map +0 -1
  626. package/dist/ContentHomePage-CDF_a6Lp.js +0 -1786
  627. package/dist/ContentHomePage-CDF_a6Lp.js.map +0 -1
  628. package/dist/ExportCollectionAction-Dc0VOWMN.js +0 -439
  629. package/dist/ExportCollectionAction-Dc0VOWMN.js.map +0 -1
  630. package/dist/ImportCollectionAction-DpCagAOy.js +0 -686
  631. package/dist/ImportCollectionAction-DpCagAOy.js.map +0 -1
  632. package/dist/PropertyEditView-DS67DxoT.js +0 -8138
  633. package/dist/PropertyEditView-DS67DxoT.js.map +0 -1
  634. package/dist/RoleChip-QtUFXeTp.js +0 -67
  635. package/dist/RoleChip-QtUFXeTp.js.map +0 -1
  636. package/dist/RolesView-CIuYBimF.js +0 -424
  637. package/dist/RolesView-CIuYBimF.js.map +0 -1
  638. package/dist/UsersView-B5zelXnH.js +0 -493
  639. package/dist/UsersView-B5zelXnH.js.map +0 -1
  640. package/dist/collection_editor/types/config_permissions.d.ts +0 -19
  641. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -27
  642. package/dist/components/EntityCollectionTable/fields/VirtualTableDateField.d.ts +0 -12
  643. package/dist/components/EntityCollectionTable/fields/VirtualTableInput.d.ts +0 -9
  644. package/dist/components/EntityCollectionTable/fields/VirtualTableNumberInput.d.ts +0 -8
  645. package/dist/components/EntityCollectionTable/fields/VirtualTableSwitch.d.ts +0 -7
  646. package/dist/components/EntityCollectionTable/index.d.ts +0 -6
  647. package/dist/components/EntityCollectionView/Board.d.ts +0 -2
  648. package/dist/components/EntityCollectionView/BoardColumn.d.ts +0 -42
  649. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +0 -9
  650. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +0 -14
  651. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +0 -31
  652. package/dist/components/EntityCollectionView/EntityCard.d.ts +0 -20
  653. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +0 -21
  654. package/dist/components/EntityCollectionView/EntityCollectionListView.d.ts +0 -34
  655. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +0 -64
  656. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +0 -18
  657. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +0 -18
  658. package/dist/components/EntityCollectionView/board_types.d.ts +0 -105
  659. package/dist/components/EntityEditView.d.ts +0 -49
  660. package/dist/components/EntityEditViewFormActions.d.ts +0 -2
  661. package/dist/components/EntityJsonPreview.d.ts +0 -3
  662. package/dist/components/EntitySidePanel.d.ts +0 -10
  663. package/dist/components/EntityView.d.ts +0 -12
  664. package/dist/components/admin/RoleChip.d.ts +0 -4
  665. package/dist/components/admin/RolesView.d.ts +0 -4
  666. package/dist/components/admin/UsersView.d.ts +0 -4
  667. package/dist/contexts/SideEntityControllerContext.d.ts +0 -3
  668. package/dist/form/field_bindings/ReferenceAsStringFieldBinding.d.ts +0 -10
  669. package/dist/hooks/navigation/useNavigationRegistry.d.ts +0 -11
  670. package/dist/hooks/navigation/useNavigationURLs.d.ts +0 -11
  671. package/dist/hooks/useBuildSideEntityController.d.ts +0 -6
  672. package/dist/hooks/useSideEntityController.d.ts +0 -11
  673. package/dist/index-CBhrgpR7.js +0 -12
  674. package/dist/index-CBhrgpR7.js.map +0 -1
  675. package/dist/index-CHxgwt6E.js +0 -456
  676. package/dist/index-CHxgwt6E.js.map +0 -1
  677. package/dist/index-Dey5WJpO.js +0 -8
  678. package/dist/index-Dey5WJpO.js.map +0 -1
  679. package/dist/index.js.map +0 -1
  680. package/dist/markdown-z2Ir7Cgo.js +0 -618
  681. package/dist/markdown-z2Ir7Cgo.js.map +0 -1
  682. package/dist/useEntityHistory-Dcj4zhGj.js +0 -121
  683. package/dist/useEntityHistory-Dcj4zhGj.js.map +0 -1
  684. package/dist/util-BQ82ySL3.js +0 -27720
  685. package/dist/util-BQ82ySL3.js.map +0 -1
  686. package/src/collection_editor/types/config_permissions.ts +0 -20
  687. package/src/components/EntityCollectionTable/fields/VirtualTableDateField.tsx +0 -39
  688. package/src/components/EntityCollectionTable/fields/VirtualTableInput.tsx +0 -90
  689. package/src/components/EntityCollectionTable/fields/VirtualTableNumberInput.tsx +0 -80
  690. package/src/components/EntityCollectionTable/fields/VirtualTableSwitch.tsx +0 -32
  691. package/src/components/EntityCollectionTable/index.tsx +0 -14
  692. package/src/components/EntityCollectionView/Board.tsx +0 -474
  693. package/src/components/EntityCollectionView/BoardColumn.tsx +0 -158
  694. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +0 -45
  695. package/src/components/EntityCollectionView/BoardSortableList.tsx +0 -177
  696. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +0 -267
  697. package/src/components/EntityCollectionView/board_types.ts +0 -113
  698. package/src/components/EntityEditView.tsx +0 -632
  699. package/src/components/EntitySidePanel.tsx +0 -160
  700. package/src/components/admin/RoleChip.tsx +0 -23
  701. package/src/components/admin/RolesView.tsx +0 -419
  702. package/src/components/admin/UsersView.tsx +0 -782
  703. package/src/contexts/SideEntityControllerContext.tsx +0 -5
  704. package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +0 -141
  705. package/src/hooks/navigation/useNavigationRegistry.ts +0 -153
  706. package/src/hooks/navigation/useNavigationURLs.ts +0 -56
  707. package/src/hooks/useSideEntityController.tsx +0 -13
  708. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/PropertyTableCell.d.ts +0 -0
  709. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useDraggable.d.ts +0 -0
  710. /package/dist/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.d.ts +0 -0
  711. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.d.ts +0 -0
  712. /package/dist/components/{EntityCollectionView → CollectionViewBinding}/utils.d.ts +0 -0
  713. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/fields/VirtualTableUserSelect.tsx +0 -0
  714. /package/src/components/{EntityCollectionTable → CollectionTableBinding}/internal/popup_field/useWindowSize.tsx +0 -0
  715. /package/src/components/{EntityCollectionView → CollectionViewBinding}/useSelectionController.tsx +0 -0
  716. /package/src/components/{EntityCollectionView → CollectionViewBinding}/utils.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyEditView-h0N-AMCY.js","names":[],"sources":["../src/collection_editor/useSafeSnackbarController.ts","../src/collection_editor/ui/collection_editor/EnumForm.tsx","../src/collection_editor/ui/collection_editor/SwitchControl.tsx","../src/collection_editor/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx","../src/collection_editor/ui/collection_editor/properties/validation/StringPropertyValidation.tsx","../src/collection_editor/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx","../src/collection_editor/ui/collection_editor/properties/validation/ValidationPanel.tsx","../src/collection_editor/ui/collection_editor/properties/EnumPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/StoragePropertyField.tsx","../src/collection_editor/ui/collection_editor/PropertyFieldPreview.tsx","../src/collection_editor/ui/collection_editor/AIModifiedPathsContext.tsx","../src/collection_editor/ui/collection_editor/PropertyTree.tsx","../src/collection_editor/ui/collection_editor/properties/MapPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/RepeatPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/CommonPropertyFields.tsx","../src/collection_editor/ui/collection_editor/properties/StringPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/BooleanPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/BlockPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx","../src/collection_editor/ui/collection_editor/properties/NumberPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/ReferencePropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/DateTimePropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx","../src/collection_editor/ui/collection_editor/properties/VectorPropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/KeyValuePropertyField.tsx","../src/collection_editor/ui/collection_editor/properties/RelationPropertyField.tsx","../src/collection_editor/ui/collection_editor/utils/update_property_for_widget.ts","../src/collection_editor/ui/collection_editor/properties/UrlPropertyField.tsx","../src/collection_editor/ui/collection_editor/utils/supported_fields.tsx","../src/collection_editor/ui/collection_editor/properties/MarkdownPropertyField.tsx","../src/collection_editor/ui/collection_editor/PropertyEditView.tsx"],"sourcesContent":["import { useSnackbarController } from \"@rebasepro/app\";\n\nexport function useSafeSnackbarController(): ReturnType<typeof useSnackbarController> | undefined {\n try {\n return useSnackbarController();\n } catch {\n return undefined;\n }\n}\n","\nimport { FieldCaption } from \"../../_cms_internals\";\nimport React, { useEffect } from \"react\";\nimport { deepEqual as equal } from \"fast-equals\"\n\n;\nimport { EnumValueConfig, EnumValues } from \"@rebasepro/types\";\nimport { ArrayContainer, ArrayEntryParams } from \"../../_cms_internals\";\nimport {\n Badge,\n Button,\n CircularProgress,\n DebouncedTextField,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n iconSize,\n ListIcon,\n Paper,\n RefreshCcwIcon,\n SettingsIcon,\n Typography\n} from \"@rebasepro/ui\";\nimport { extractEnumFromValues } from \"@rebasepro/inference\";\nimport { Field, Formex, getIn, useCreateFormex, useFormex } from \"@rebasepro/forms\";\n\ntype EnumFormProps = {\n enumValues: EnumValueConfig[];\n onValuesChanged?: (enumValues: EnumValueConfig[]) => void;\n onError?: (error: boolean) => void;\n updateIds: boolean;\n disabled: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<string[]>;\n};\n\nexport function EnumForm({\n enumValues,\n onValuesChanged,\n onError,\n updateIds,\n disabled,\n allowDataInference,\n getData\n}: EnumFormProps) {\n\n const formex = useCreateFormex<{\n enum: EnumValueConfig[]\n }>({\n initialValues: { enum: enumValues },\n validateOnChange: true,\n validation: (values) => {\n interface EnumFieldError { label?: string; id?: string; }\n const enumErrors: EnumFieldError[] = [];\n let hasAnyError = false;\n if (values.enum) {\n values.enum.forEach((enumValue, index) => {\n const fieldError: EnumFieldError = {};\n if (!enumValue?.label) {\n fieldError.label = \"You must specify a label for this enum value entry\";\n hasAnyError = true;\n }\n if (!enumValue?.id) {\n fieldError.id = \"You must specify an ID for this enum value entry\";\n hasAnyError = true;\n }\n enumErrors[index] = fieldError;\n });\n }\n const errors = hasAnyError ? { enum: enumErrors } : {};\n onError?.(hasAnyError);\n return errors as Record<string, string>;\n }\n });\n\n const {\n values,\n errors\n } = formex;\n\n useEffect(() => {\n if (onValuesChanged) {\n onValuesChanged(values.enum);\n }\n }, [values.enum]);\n\n return <Formex value={formex as ReturnType<typeof useCreateFormex>}>\n <EnumFormFields enumValuesPath={\"enum\"}\n values={values}\n errors={errors}\n shouldUpdateId={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}/>\n </Formex>\n\n}\n\ntype EnumFormFieldsProps = {\n values: {\n enum: EnumValueConfig[]\n };\n errors: { enum?: Array<{ label?: string; id?: string }> };\n enumValuesPath: string;\n shouldUpdateId: boolean;\n disabled: boolean;\n getData?: () => Promise<string[]>;\n allowDataInference?: boolean;\n};\n\n// const EnumFormFields = React.memo(\nfunction EnumFormFields({\n values,\n errors,\n disabled,\n enumValuesPath,\n shouldUpdateId,\n allowDataInference,\n getData\n}: EnumFormFieldsProps) {\n\n const {\n setFieldValue\n } = useFormex();\n\n const [lastInternalIdAdded, setLastInternalIdAdded] = React.useState<number | undefined>();\n const [editDialogIndex, setEditDialogIndex] = React.useState<number | undefined>();\n const [inferring, setInferring] = React.useState(false);\n\n const inferredValuesRef = React.useRef(new Set());\n const inferredValues = inferredValuesRef.current;\n\n const buildEntry = ({\n index,\n internalId\n }: ArrayEntryParams) => {\n const justAdded = lastInternalIdAdded === internalId;\n const entryError = errors?.enum?.[index];\n return <EnumEntry index={index}\n disabled={disabled}\n enumValuesPath={enumValuesPath}\n autoFocus={justAdded}\n entryError={entryError}\n shouldUpdateId={shouldUpdateId || justAdded}\n onDialogOpen={() => setEditDialogIndex(index)}\n inferredEntry={inferredValues.has(values.enum[index]?.id as string)}\n key={`${internalId}`}/>;\n };\n\n const inferValues = async () => {\n if (!getData)\n return;\n setInferring(true);\n getData?.().then((data) => {\n if (!data)\n return;\n\n const flatData = data.flat();\n\n const fieldData = Array.from(new Set(flatData));\n\n const currentEnumValues = values.enum;\n const foundEnumValues = extractEnumFromValues(fieldData);\n\n // add only new enum values\n const newEnumValues = foundEnumValues.filter((enumValue) => {\n if (!enumValue) return false;\n return !currentEnumValues?.some((v: EnumValueConfig) => v.id === enumValue.id);\n });\n\n newEnumValues.forEach((enumValue) => {\n if (enumValue) inferredValues.add(enumValue.id);\n });\n setFieldValue(enumValuesPath, [...newEnumValues, ...currentEnumValues], true);\n }).catch(e => {\n console.error(e);\n })\n .finally(() => setInferring(false));\n }\n\n return (\n <div className={\"col-span-12\"}>\n <div className=\"ml-3.5 flex flex-row items-center\">\n <ListIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-2 grow\">\n Values\n </Typography>\n {allowDataInference &&\n <Button loading={inferring}\n disabled={disabled || inferring}\n variant={\"text\"}\n size={\"small\"}\n onClick={inferValues}>\n {inferring ? <CircularProgress size={\"smallest\"}/> : <RefreshCcwIcon/>}\n Infer values from data\n </Button>}\n </div>\n\n <Paper className=\"p-4 m-1\">\n\n <ArrayContainer droppableId={enumValuesPath}\n addLabel={\"Add enum value\"}\n value={values.enum}\n disabled={disabled}\n size={\"small\"}\n buildEntry={buildEntry}\n onInternalIdAdded={setLastInternalIdAdded}\n canAddElements={true}\n onValueChange={(value: EnumValueConfig[]) => setFieldValue(enumValuesPath, value)}\n newDefaultEntry={{\n id: \"\",\n label: \"\"\n }}/>\n\n <EnumEntryDialog index={editDialogIndex}\n open={editDialogIndex !== undefined}\n enumValuesPath={enumValuesPath}\n onClose={() => setEditDialogIndex(undefined)}/>\n </Paper>\n </div>\n );\n}\n\ntype EnumEntryProps = {\n index: number,\n enumValuesPath: string,\n shouldUpdateId: boolean,\n autoFocus: boolean,\n onDialogOpen: () => void;\n disabled: boolean;\n inferredEntry?: boolean;\n entryError?: { label?: string, id?: string }\n};\n\nconst EnumEntry = React.memo(\n function EnumEntryInternal({\n index,\n shouldUpdateId: updateId,\n enumValuesPath,\n autoFocus,\n onDialogOpen,\n disabled,\n inferredEntry,\n entryError\n }: EnumEntryProps) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<EnumValues>();\n\n const shouldUpdateIdRef = React.useRef(!getIn(values, `${enumValuesPath}[${index}].id`));\n const shouldUpdateId = updateId || shouldUpdateIdRef.current;\n\n const idValue = getIn(values, `${enumValuesPath}[${index}].id`);\n const labelValue = getIn(values, `${enumValuesPath}[${index}].label`);\n\n const currentLabelRef = React.useRef(labelValue);\n\n React.useEffect(() => {\n if ((currentLabelRef.current === idValue || !idValue) && shouldUpdateId) {\n setFieldValue(`${enumValuesPath}[${index}].id`, labelValue);\n }\n currentLabelRef.current = labelValue;\n }, [labelValue]);\n\n return (\n <>\n <div className={\"flex w-full align-center justify-center\"}>\n <Field name={`${enumValuesPath}[${index}].label`}\n as={DebouncedTextField}\n className={\"grow\"}\n required\n disabled={disabled}\n size=\"small\"\n autoFocus={autoFocus}\n autoComplete=\"off\"\n endAdornment={inferredEntry && <RefreshCcwIcon size={iconSize.small}/>}\n error={Boolean(entryError?.label)}/>\n\n {!disabled &&\n <Badge color={\"error\"} invisible={!entryError?.id}>\n <IconButton\n size=\"small\"\n aria-label=\"edit\"\n className={\"m-1\"}\n onClick={() => onDialogOpen()}>\n <SettingsIcon size={iconSize.small}/>\n </IconButton>\n </Badge>}\n\n </div>\n\n {entryError?.label && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.label}\n </Typography>}\n\n {entryError?.id && <Typography variant={\"caption\"}\n className={\"ml-3.5 text-red-500 dark:text-red-500\"}>\n {entryError?.id}\n </Typography>}\n\n </>);\n },\n function areEqual(prevProps: EnumEntryProps, nextProps: EnumEntryProps) {\n return prevProps.index === nextProps.index &&\n prevProps.enumValuesPath === nextProps.enumValuesPath &&\n prevProps.shouldUpdateId === nextProps.shouldUpdateId &&\n prevProps.inferredEntry === nextProps.inferredEntry &&\n equal(prevProps.entryError, nextProps.entryError) &&\n prevProps.autoFocus === nextProps.autoFocus;\n }\n);\n\nfunction EnumEntryDialog({\n index,\n open,\n onClose,\n enumValuesPath\n}: {\n index?: number;\n open: boolean;\n enumValuesPath: string;\n onClose: () => void;\n}) {\n\n const {\n errors\n } = useFormex<EnumValues>();\n\n const idError = index !== undefined ? getIn(errors, `${enumValuesPath}[${index}].id`) as string | undefined : undefined;\n return <Dialog\n maxWidth=\"md\"\n aria-labelledby=\"enum-edit-dialog\"\n open={open}\n onOpenChange={(open) => !open ? onClose() : undefined}\n >\n <DialogTitle hidden>Enum form dialog</DialogTitle>\n <DialogContent>\n {index !== undefined &&\n <div>\n <Field name={`${enumValuesPath}[${index}].id`}\n as={DebouncedTextField}\n required\n label={\"ID\"}\n size=\"small\"\n autoComplete=\"off\"\n error={Boolean(idError)}/>\n\n <FieldCaption error={Boolean(idError)}>\n {idError ?? \"Value saved in the data source\"}\n </FieldCaption>\n </div>}\n </DialogContent>\n\n <DialogActions>\n <Button\n autoFocus\n onClick={onClose}>\n Ok\n </Button>\n </DialogActions>\n\n </Dialog>\n}\n\n","import React from \"react\";\n\nimport { BooleanSwitchWithLabel, Tooltip } from \"@rebasepro/ui\";\nimport { FormexFieldProps } from \"@rebasepro/forms\";\n\nexport function SwitchControl({\n field,\n form,\n label,\n tooltip,\n disabled,\n size = \"small\",\n allowIndeterminate\n}: FormexFieldProps & {\n label: string,\n tooltip?: string,\n disabled?: boolean,\n size?: \"small\" | \"medium\",\n allowIndeterminate?: boolean\n}) {\n\n const formControlLabel = <BooleanSwitchWithLabel\n label={label}\n size={size}\n position={\"start\"}\n value={field.value}\n disabled={disabled}\n allowIndeterminate={allowIndeterminate}\n onValueChange={(checked: boolean | null) => form.setFieldValue(field.name, checked)}/>;\n\n if (tooltip)\n return (\n <Tooltip\n title={tooltip}>\n {formControlLabel}\n </Tooltip>\n );\n return formControlLabel;\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@rebasepro/forms\";\nimport { DebouncedTextField } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/app\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function GeneralPropertyValidation({ disabled }: {\n required?: boolean;\n disabled: boolean;\n}) {\n\n const { values, handleChange } = useFormex();\n const { t } = useTranslation();\n\n const validationRequired = \"validation.required\";\n const validationRequiredMessage = \"validation.requiredMessage\";\n const validationUnique = \"validation.unique\";\n const validationUniqueInArray = \"validation.uniqueInArray\";\n\n return (\n <>\n <div className={\"col-span-6\"}>\n <Field name={validationRequired}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={t(\"required\")}\n tooltip={t(\"required_tooltip\")}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-6\"}>\n\n <Field name={validationUnique}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n disabled={disabled}\n label={t(\"unique\")}\n tooltip={t(\"unique_tooltip\")}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n\n {getIn(values, validationRequired) && <div className={\"col-span-12\"}>\n <DebouncedTextField\n disabled={disabled}\n value={getIn(values, validationRequiredMessage) as string | undefined}\n label={t(\"required_message\")}\n name={validationRequiredMessage}\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </>\n );\n}\n","import { FieldCaption } from \"../../../../_cms_internals\";\nimport React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@rebasepro/forms\";\n;\nimport { DebouncedTextField } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/app\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\nimport { serializeRegExp } from \"@rebasepro/utils\";\n\nexport function StringPropertyValidation({\n length,\n lowercase,\n matches,\n max,\n min,\n trim,\n uppercase,\n disabled,\n showErrors\n}: {\n length?: boolean;\n min?: boolean;\n max?: boolean;\n trim?: boolean;\n matches?: boolean;\n lowercase?: boolean;\n uppercase?: boolean;\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n handleChange,\n errors\n } = useFormex();\n const { t } = useTranslation();\n\n const validationLength = \"validation.length\";\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationTrim = \"validation.trim\";\n const validationMatches = \"validation.matches\";\n const validationLowercase = \"validation.lowercase\";\n const validationUppercase = \"validation.uppercase\";\n\n const matchesError = getIn(errors, validationMatches);\n\n const matchesValue = getIn(values, validationMatches);\n const matchesStringValue = typeof matchesValue === \"string\" ? matchesValue : serializeRegExp(matchesValue as RegExp);\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n\n {lowercase && <div className={\"col-span-4\"}>\n <Field name={validationLowercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"lowercase\")}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {uppercase && <div className={\"col-span-4\"}>\n <Field name={validationUppercase}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"uppercase\")}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n {trim && <div className={\"col-span-4\"}>\n <Field name={validationTrim}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"trim\")}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>}\n\n </div>\n\n <div className={\"grid grid-cols-12 gap-2 col-span-12\"}>\n {length && <div className={\"col-span-4\"}>\n <DebouncedTextField\n value={getIn(values, validationLength) as number | undefined}\n label={t(\"exact_length\")}\n name={validationLength}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {min && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMin) as number | undefined}\n label={t(\"min_length\")}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n {max && <div className={\"col-span-4\"}>\n <DebouncedTextField value={getIn(values, validationMax) as number | undefined}\n label={t(\"max_length\")}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>}\n\n </div>\n\n {matches && <div className={\"col-span-12\"}>\n <Field name={validationMatches}\n as={DebouncedTextField}\n label={t(\"matches_regex\")}\n size=\"small\"\n disabled={disabled}\n value={matchesStringValue}\n error={Boolean(matchesError)}/>\n <FieldCaption error={Boolean(matchesError)}>\n {matchesError ? t(\"not_valid_regexp\") : t(\"regex_helper\")}\n </FieldCaption>\n </div>}\n\n </div>\n );\n\n}\n","import React from \"react\";\n\nimport { getIn, useFormex } from \"@rebasepro/forms\";\nimport { DebouncedTextField } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/app\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\n\nexport function ArrayPropertyValidation({\n max = true,\n min = true,\n disabled\n}: {\n min?: boolean;\n max?: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n const { t } = useTranslation();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n\n return (\n <div className={\"grid grid-cols-12 gap-2\"}>\n\n <GeneralPropertyValidation disabled={disabled}/>\n\n {min && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin) as number | undefined}\n disabled={disabled}\n label={t(\"min_length\")}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n {max && <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax) as number | undefined}\n disabled={disabled}\n label={t(\"max_length\")}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </div>\n );\n}\n","import { PropsWithChildren } from \"react\";\n\nimport { CheckSquareIcon, ExpandablePanel, Typography } from \"@rebasepro/ui\";\n\nexport function ValidationPanel({\n children\n}: { children?: React.ReactNode }) {\n\n return (\n <ExpandablePanel\n initiallyExpanded={false}\n asField={true}\n innerClassName=\"p-4\"\n title={\n <div className=\"flex flex-row text-surface-500 text-text-secondary dark:text-text-secondary-dark\">\n <CheckSquareIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-4\">\n Validation\n </Typography>\n </div>\n }>\n\n {children}\n\n </ExpandablePanel>\n )\n}\n","import React, { useMemo } from \"react\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\nimport { useTranslation } from \"@rebasepro/app\";\nimport { useSafeSnackbarController } from \"../../../useSafeSnackbarController\";\nimport { EnumValueConfig, EnumValues } from \"@rebasepro/types\";\nimport { resolveEnumValues } from \"@rebasepro/common\";\nimport { Select, SelectItem } from \"@rebasepro/ui\";\nimport { EnumForm } from \"../EnumForm\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { PropertyWithId } from \"../PropertyEditView\";\n\nexport function EnumPropertyField({\n multiselect,\n updateIds,\n disabled,\n showErrors,\n allowDataInference,\n getData,\n propertyNamespace\n}: {\n multiselect: boolean;\n updateIds: boolean;\n disabled: boolean;\n showErrors: boolean;\n allowDataInference?: boolean;\n getData?: () => Promise<object[]>;\n propertyNamespace?: string;\n}) {\n\n const {\n values,\n setFieldError,\n setFieldValue\n } = useFormex<PropertyWithId>();\n\n const snackbarContext = useSafeSnackbarController();\n const { t } = useTranslation();\n\n const enumValuesPath = multiselect ? \"of.enum\" : \"enum\";\n\n const defaultValue = getIn(values, \"defaultValue\") as string | number | undefined;\n\n const valuesEnumValues = getIn(values, enumValuesPath) as EnumValues | undefined;\n const enumValues: EnumValueConfig[] = useMemo(() => {\n if (!valuesEnumValues || typeof valuesEnumValues === \"boolean\")\n return [] as EnumValueConfig[];\n return resolveEnumValues(valuesEnumValues) ?? [] as EnumValueConfig[];\n }, [valuesEnumValues]);\n\n const onValuesChanged = (value: EnumValueConfig[]) => {\n if (!values)\n return;\n setFieldValue(enumValuesPath, value);\n if (!multiselect) {\n const enumIds = value.filter(v => Boolean(v?.id)).map((v: EnumValueConfig) => v.id);\n if (defaultValue && !enumIds.includes(defaultValue)) {\n setFieldValue(\"defaultValue\", undefined);\n snackbarContext?.open({\n type: \"warning\",\n message: \"Default value was cleared\"\n })\n }\n }\n };\n\n // Build full path including namespace for nested properties (e.g., \"address.status\")\n const fullPropertyPath = values.id\n ? (propertyNamespace ? `${propertyNamespace}.${values.id}` : values.id)\n : undefined;\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <EnumForm enumValues={enumValues}\n updateIds={updateIds}\n disabled={disabled}\n allowDataInference={allowDataInference}\n onError={(hasError) => {\n setFieldError(enumValuesPath, hasError ? \"This enum property is missing some values\" : undefined);\n }}\n getData={getData && fullPropertyPath\n ? () => getData()\n .then(res => res.map(entry => getIn(entry, fullPropertyPath) as string).filter(Boolean))\n : undefined}\n onValuesChanged={onValuesChanged}/>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiselect &&\n <StringPropertyValidation disabled={disabled}\n showErrors={showErrors}/>}\n {multiselect &&\n <ArrayPropertyValidation disabled={disabled}/>}\n </ValidationPanel>\n\n </div>\n\n {!multiselect && <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n fullWidth={true}\n onValueChange={(value: string) => {\n setFieldValue(\"defaultValue\", value);\n }}\n label={t(\"default_value\")}\n value={defaultValue?.toString() ?? \"\"}>\n {enumValues\n .filter((enumValue) => Boolean(enumValue?.id))\n .map((enumValue) => (\n <SelectItem key={enumValue.id}\n value={enumValue.id?.toString()}>\n {enumValue.label}\n </SelectItem>\n ))}\n </Select>\n\n </div>}\n </>\n );\n}\n","\nimport React from \"react\";\nimport {\n Button,\n DebouncedTextField,\n ExpandablePanel,\n MultiSelect,\n MultiSelectItem,\n Select,\n SelectItem,\n Typography,\n UploadCloudIcon\n} from \"@rebasepro/ui\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@rebasepro/forms\";\nimport { useStorageSources, useTranslation } from \"@rebasepro/app\";\nimport { DEFAULT_STORAGE_SOURCE_KEY } from \"@rebasepro/types\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nconst fileTypes: Record<string, string> = {\n \"image/*\": \"Images\",\n \"video/*\": \"Videos\",\n \"audio/*\": \"Audio files\",\n \"application/*\": \"Files (pdf, zip, csv, excel...)\",\n \"text/*\": \"Text files\"\n}\n\nexport function StoragePropertyField({\n multiple,\n existing,\n disabled\n}: {\n multiple: boolean;\n existing: boolean;\n disabled: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n const { t } = useTranslation();\n const storageSources = useStorageSources();\n\n const baseStoragePath = multiple ? \"of.storage\" : \"storage\";\n const acceptedFiles = `${baseStoragePath}.acceptedFiles`;\n const storageSource = `${baseStoragePath}.storageSource`;\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const maxSize = `${baseStoragePath}.maxSize`;\n const storagePath = `${baseStoragePath}.storagePath`;\n const storeUrl = `${baseStoragePath}.storeUrl`;\n const includeBucketUrl = `${baseStoragePath}.includeBucketUrl`;\n\n // Image resize config paths\n const imageResize = `${baseStoragePath}.imageResize`;\n const imageResizeMaxWidth = `${imageResize}.maxWidth`;\n const imageResizeMaxHeight = `${imageResize}.maxHeight`;\n const imageResizeMode = `${imageResize}.mode`;\n const imageResizeFormat = `${imageResize}.format`;\n const imageResizeQuality = `${imageResize}.quality`;\n\n const fileNameValue = (getIn(values, fileName) as string | undefined) ?? \"{rand}_{file}\";\n const storagePathValue = (getIn(values, storagePath) as string | undefined) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize) as number | undefined;\n\n // Image resize values\n const imageResizeMaxWidthValue = getIn(values, imageResizeMaxWidth) as number | undefined;\n const imageResizeMaxHeightValue = getIn(values, imageResizeMaxHeight) as number | undefined;\n const imageResizeModeValue = (getIn(values, imageResizeMode) as string | undefined) ?? \"cover\";\n const imageResizeFormatValue = (getIn(values, imageResizeFormat) as string | undefined) ?? \"original\";\n const imageResizeQualityValue = getIn(values, imageResizeQuality) as number | undefined;\n\n const storedValue = getIn(values, acceptedFiles);\n const fileTypesValue: string[] | undefined = Array.isArray(storedValue) ? storedValue : undefined;\n const allFileTypesSelected = !fileTypesValue || fileTypesValue.length === 0;\n\n // Available storage backends (from `<Rebase storageSources={...}>`).\n const sourceKeys = Object.keys(storageSources.sources)\n .filter((key) => key !== DEFAULT_STORAGE_SOURCE_KEY);\n const storageSourceValue = (getIn(values, storageSource) as string | undefined) ?? DEFAULT_STORAGE_SOURCE_KEY;\n\n const handleTypesChange = (value: string[]) => {\n if (!value) setFieldValue(acceptedFiles, undefined);\n else setFieldValue(acceptedFiles, value);\n };\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-surface-500 text-text-secondary dark:text-text-secondary-dark\">\n <UploadCloudIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-4\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n {sourceKeys.length > 0 && (\n <div className={\"col-span-12\"}>\n <Select\n className={\"w-full\"}\n disabled={disabled}\n name={storageSource}\n value={storageSourceValue}\n onValueChange={(value) =>\n setFieldValue(storageSource, !value || value === DEFAULT_STORAGE_SOURCE_KEY ? undefined : value)}\n label={\"Storage backend\"}\n renderValue={(key) => {\n const label = storageSources.registry[key]?.label;\n return label ?? (key === DEFAULT_STORAGE_SOURCE_KEY ? \"Default\" : key);\n }}>\n <SelectItem value={DEFAULT_STORAGE_SOURCE_KEY}>\n Default\n </SelectItem>\n {sourceKeys.map((key) => (\n <SelectItem key={key} value={key}>\n {storageSources.registry[key]?.label ?? key}\n </SelectItem>\n ))}\n </Select>\n </div>\n )}\n\n <div className={\"col-span-12\"}>\n\n <MultiSelect\n className={\"w-full\"}\n placeholder={\"All file types allowed\"}\n disabled={disabled}\n name={acceptedFiles}\n value={fileTypesValue ?? []}\n onValueChange={handleTypesChange}\n label={allFileTypesSelected ? undefined : \"Allowed file types\"}\n renderValues={(selected: string[]) => {\n if (!selected || selected.length === 0) return \"All file types allowed\";\n return selected.map((v: string) => fileTypes[v])\n .filter((v: string) => Boolean(v))\n .join(\", \");\n }}>\n\n {Object.entries(fileTypes).map(([value, label]) => (\n <MultiSelectItem key={value} value={value} className={\"flex items-center gap-2\"}>\n {/*<Checkbox*/}\n {/* checked={allFileTypesSelected || fileTypesValue.indexOf(value) > -1}/>*/}\n <div className={\"grow\"}>\n {label}\n </div>\n <Button size={\"small\"}\n variant={\"text\"}\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n return setFieldValue(acceptedFiles, [value]);\n }}>\n Only\n </Button>\n </MultiSelectItem>\n ))}\n\n </MultiSelect>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={t(\"storage_file_name\")}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={t(\"storage_path\")}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Field name={includeBucketUrl}\n type=\"checkbox\">\n {({\n field,\n form\n }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"storage_include_bucket_url\")}\n disabled={existing || disabled}\n form={form}\n field={field}/>;\n }}\n </Field>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Turn this setting on if you want to save a fully-qualified storage URL\n (e.g. <code>s3://my-bucket/path/to/file</code>) instead of just the storage path.\n You can only change this prop upon creation.\n </Typography>\n\n <Field name={storeUrl}\n type=\"checkbox\">\n {({\n field,\n form\n }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"storage_save_url\")}\n disabled={existing || disabled}\n form={form}\n field={field}/>;\n }}\n </Field>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Turn this setting on, if you prefer to save\n the download\n URL of the uploaded file instead of the\n storage path.\n You can only change this prop upon creation.\n </Typography>\n </div>\n\n <div className={\"col-span-12\"}>\n <DebouncedTextField name={maxSize}\n type={\"number\"}\n label={t(\"storage_max_size\")}\n size={\"small\"}\n value={maxSizeValue !== undefined && maxSizeValue !== null ? maxSizeValue.toString() : \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(maxSize, undefined);\n else setFieldValue(maxSize, parseInt(value));\n }}\n />\n </div>\n\n <div className={\"col-span-12 mt-4\"}>\n <Typography variant={\"subtitle2\"}\n color={\"secondary\"}\n className={\"mb-2 block\"}>\n Image Resize Configuration\n </Typography>\n <Typography variant={\"caption\"} className={\"mb-2 block text-xs\"}>\n Automatically resize and optimize images before upload (JPEG, PNG, WebP only)\n </Typography>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n name={imageResizeMaxWidth}\n type={\"number\"}\n label={t(\"storage_max_width\")}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeMaxWidthValue !== undefined && imageResizeMaxWidthValue !== null ? imageResizeMaxWidthValue.toString() : \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(imageResizeMaxWidth, undefined);\n else setFieldValue(imageResizeMaxWidth, parseInt(value));\n }}\n />\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n name={imageResizeMaxHeight}\n type={\"number\"}\n label={t(\"storage_max_height\")}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeMaxHeightValue !== undefined && imageResizeMaxHeightValue !== null ? imageResizeMaxHeightValue.toString() : \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(imageResizeMaxHeight, undefined);\n else setFieldValue(imageResizeMaxHeight, parseInt(value));\n }}\n />\n </div>\n\n <div className={\"col-span-6\"}>\n <Select\n disabled={disabled}\n name={imageResizeMode}\n fullWidth\n size={\"medium\"}\n value={imageResizeModeValue || \"cover\"}\n onValueChange={(value) => setFieldValue(imageResizeMode, value || \"cover\")}\n label={t(\"storage_resize_mode\")}\n renderValue={(selected) => {\n if (!selected) return \"Cover\";\n return selected === \"contain\" ? \"Contain (fit within bounds)\" : \"Cover (fill bounds, may crop)\";\n }}>\n <SelectItem value=\"contain\">\n Contain (fit within bounds)\n </SelectItem>\n <SelectItem value=\"cover\">\n Cover (fill bounds, may crop)\n </SelectItem>\n </Select>\n </div>\n\n <div className={\"col-span-6\"}>\n <Select\n disabled={disabled}\n size={\"medium\"}\n fullWidth\n name={imageResizeFormat}\n value={imageResizeFormatValue || \"original\"}\n onValueChange={(value) => setFieldValue(imageResizeFormat, value || \"original\")}\n label={t(\"storage_output_format\")}\n renderValue={(selected) => {\n if (!selected) return \"Original\";\n return selected.charAt(0).toUpperCase() + selected.slice(1);\n }}>\n <SelectItem value=\"original\">\n Original (keep same format)\n </SelectItem>\n <SelectItem value=\"jpeg\">\n JPEG\n </SelectItem>\n <SelectItem value=\"png\">\n PNG\n </SelectItem>\n <SelectItem value=\"webp\">\n WebP (best compression)\n </SelectItem>\n </Select>\n </div>\n\n <div className={\"col-span-12\"}>\n <DebouncedTextField\n name={imageResizeQuality}\n type={\"number\"}\n label={t(\"storage_quality\")}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeQualityValue !== undefined && imageResizeQualityValue !== null ? imageResizeQualityValue.toString() : \"\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(imageResizeQuality, undefined);\n else {\n const numValue = parseInt(value);\n if (numValue >= 0 && numValue <= 100) {\n setFieldValue(imageResizeQuality, numValue);\n }\n }\n }}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Higher quality = larger file size. Recommended: 80-90 for photos, 90-100 for graphics\n </Typography>\n </div>\n\n </div>\n </ExpandablePanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n {!multiple && <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n </div>}\n {multiple && <div className={\"col-span-12\"}>\n <ArrayPropertyValidation disabled={disabled}/>\n </div>}\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { useCustomizationController } from \"@rebasepro/app\";\nimport { getFieldConfig } from \"../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { ErrorBoundary } from \"@rebasepro/ui\";\nimport { Property } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport { cls, Paper, Typography } from \"@rebasepro/ui\";\nimport { FunctionSquareIcon, iconSize, MinusCircleIcon } from \"@rebasepro/ui\";\n\n\nexport function PropertyFieldPreview({\n property,\n propertyKey,\n onClick,\n hasError,\n includeName,\n includeEditButton,\n selected\n}: {\n property: Property,\n propertyKey?: string,\n hasError?: boolean,\n selected?: boolean,\n includeName?: boolean,\n includeEditButton?: boolean;\n onClick?: () => void\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n const propertyConfig = getFieldConfig(property, propertyConfigs);\n\n\n const borderColorClass = hasError\n ? \"border-red-500 dark:border-red-500 border-red-500/100 dark:border-red-500/100 ring-0 dark:ring-0\"\n : (selected ? \"border-primary\" : \"\");\n\n return <ErrorBoundary>\n <div onClick={onClick} className={onClick ? \"cursor-pointer\" : \"\"}>\n <div\n className={cls(\n \"w-full flex flex-row gap-3 items-center px-3 py-2 rounded-lg transition-all duration-200 border bg-white dark:bg-surface-900 shadow-xs\",\n borderColorClass || \"border-surface-200 dark:border-surface-700\",\n selected\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light ring-1 ring-inset ring-primary border-primary/30\"\n : \"hover:bg-surface-50 dark:hover:bg-surface-700\"\n )}\n >\n <PropertyConfigBadge propertyConfig={propertyConfig} size=\"small\"/>\n\n <div className=\"flex-1 flex flex-col min-w-0 mr-16\">\n {includeName &&\n <ErrorBoundary>\n <div className=\"flex items-center gap-2 min-w-0\">\n <Typography variant=\"body2\" component=\"span\" className=\"truncate font-medium\">\n {property.name || propertyKey || \"\\u00a0\"}\n </Typography>\n {propertyConfig?.name && (\n <Typography\n variant={\"caption\"}\n component=\"span\"\n className=\"text-text-secondary dark:text-text-secondary-dark shrink-0\">\n {propertyConfig.name}\n </Typography>\n )}\n </div>\n <div className=\"flex items-center gap-1.5 mt-0.5 min-w-0\">\n {propertyKey && (\n <Typography variant=\"caption\" component=\"span\" color=\"secondary\" className=\"font-mono truncate\">\n {propertyKey}\n </Typography>\n )}\n <ErrorBoundary>\n <Typography variant=\"caption\" component=\"span\" className=\"shrink-0 text-text-disabled dark:text-text-disabled-dark font-mono\">\n · {\"columnType\" in property ? (property as { columnType?: string }).columnType ?? property.type : property.type}\n </Typography>\n </ErrorBoundary>\n </div>\n </ErrorBoundary>}\n\n {!includeName &&\n <div className=\"flex flex-row items-center gap-2\">\n <ErrorBoundary>\n <Typography\n variant={\"caption\"}\n component=\"span\"\n className=\"text-text-secondary dark:text-text-secondary-dark font-medium\">\n {propertyConfig?.name}\n </Typography>\n </ErrorBoundary>\n </div>}\n </div>\n\n {includeEditButton && <Typography variant={\"button\"}>EDIT</Typography>}\n </div>\n </div>\n </ErrorBoundary>\n}\n\nexport function NonEditablePropertyPreview({\n name,\n selected,\n onClick,\n property\n}: {\n name: string,\n selected: boolean,\n onClick?: () => void,\n property?: Property\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n const propertyConfig = !isPropertyBuilder(property) && property ? getFieldConfig(property, propertyConfigs) : undefined;\n\n return (\n <div onClick={onClick} className={onClick ? \"cursor-pointer\" : \"\"}>\n <div\n className={cls(\n \"w-full flex flex-row gap-3 items-center px-3 py-2 rounded-lg transition-all duration-200 border bg-white dark:bg-surface-900 border-surface-200 dark:border-surface-700 shadow-xs\",\n selected\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light ring-1 ring-inset ring-primary border-primary/30\"\n : \"hover:bg-surface-50 dark:hover:bg-surface-700\"\n )}\n >\n <div className={\"relative shrink-0\"}>\n {propertyConfig && <PropertyConfigBadge propertyConfig={propertyConfig} size=\"small\"/>}\n {!propertyConfig && <div\n className={\"h-8 w-8 flex items-center justify-center rounded-full shadow-2xs text-white bg-surface-500\"}>\n <FunctionSquareIcon className={\"text-inherit\"} size={iconSize.small}/>\n </div>}\n <MinusCircleIcon className={\"text-surface-accent-400 absolute -right-2 -top-2 bg-surface-50 dark:bg-surface-900 rounded-full\"} size={iconSize.small}/>\n </div>\n\n <div className=\"flex-1 flex flex-col min-w-0 mr-16\">\n <div className=\"flex items-center gap-2 min-w-0\">\n <Typography variant=\"label\" component=\"span\" className=\"truncate\">\n {property?.name ? property.name : name}\n </Typography>\n {propertyConfig && <Typography variant={\"caption\"} component=\"span\" className=\"text-text-secondary dark:text-text-secondary-dark shrink-0\">\n {propertyConfig?.name}\n </Typography>}\n </div>\n\n <div className=\"flex flex-row items-center gap-1.5 mt-0.5 min-w-0\">\n <Typography variant=\"caption\" component=\"span\" color=\"secondary\" className=\"font-mono truncate\">\n {name}\n </Typography>\n\n {property && isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"caption\" component=\"span\" className=\"text-text-disabled dark:text-text-disabled-dark\">\n · Defined in code\n </Typography>\n </ErrorBoundary>}\n\n {!property && <ErrorBoundary>\n <Typography variant=\"caption\" component=\"span\" className=\"text-text-disabled dark:text-text-disabled-dark\">\n · Additional field\n </Typography>\n </ErrorBoundary>}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React, { createContext, useCallback, useContext, useState, useMemo } from \"react\";\nimport { CollectionOperation } from \"../../api/generateCollectionApi\";\n\nexport interface AIModifiedPathsContextType {\n /** Set of paths that were modified by AI */\n modifiedPaths: Set<string>;\n /** Counter that increments each time AI modifies the collection - use in keys to force remount */\n generationCounter: number;\n /** Add paths from operations */\n addModifiedPaths: (operations: CollectionOperation[]) => void;\n /** Clear a specific path (when user edits that field) */\n clearPath: (path: string) => void;\n /** Clear all paths (on save or cancel) */\n clearAllPaths: () => void;\n /** Check if a path is modified */\n isPathModified: (path: string) => boolean;\n}\n\nconst AIModifiedPathsContext = createContext<AIModifiedPathsContextType | null>(null);\n\nexport function AIModifiedPathsProvider({ children }: { children: React.ReactNode | any }) {\n const [modifiedPaths, setModifiedPaths] = useState<Set<string>>(new Set());\n const [generationCounter, setGenerationCounter] = useState(0);\n\n const addModifiedPaths = useCallback((operations: CollectionOperation[]) => {\n setModifiedPaths(prev => {\n const newSet = new Set(prev);\n operations.forEach(op => {\n // Add the path and all parent paths for nested modifications\n newSet.add(op.path);\n // For properties modifications, also mark the property itself\n // e.g., \"properties.email.description\" -> also adds \"properties.email\"\n const parts = op.path.split(\".\");\n if (parts[0] === \"properties\" && parts.length >= 2) {\n newSet.add(`properties.${parts[1]}`);\n }\n });\n return newSet;\n });\n // Increment counter to force property form remount\n setGenerationCounter(prev => prev + 1);\n }, []);\n\n const clearPath = useCallback((path: string) => {\n setModifiedPaths(prev => {\n const newSet = new Set(prev);\n // Remove exact path and any child paths\n for (const p of newSet) {\n if (p === path || p.startsWith(path + \".\")) {\n newSet.delete(p);\n }\n }\n return newSet;\n });\n }, []);\n\n const clearAllPaths = useCallback(() => {\n setModifiedPaths(new Set());\n }, []);\n\n const isPathModified = useCallback((path: string): boolean => {\n // Check if this exact path or any parent path is modified\n if (modifiedPaths.has(path)) return true;\n // Check if any child paths are modified\n for (const p of modifiedPaths) {\n if (p.startsWith(path + \".\")) return true;\n }\n return false;\n }, [modifiedPaths]);\n\n const contextValue = useMemo(() => ({\n modifiedPaths,\n generationCounter,\n addModifiedPaths,\n clearPath,\n clearAllPaths,\n isPathModified\n }), [modifiedPaths, generationCounter, addModifiedPaths, clearPath, clearAllPaths, isPathModified]);\n\n return (\n <AIModifiedPathsContext.Provider value={contextValue}>\n {children}\n </AIModifiedPathsContext.Provider>\n );\n}\n\nexport function useAIModifiedPaths(): AIModifiedPathsContextType | null {\n return useContext(AIModifiedPathsContext);\n}\n\n","\nimport React from \"react\";\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { AIModifiedIndicator } from \"@rebasepro/app\";\nimport { AdditionalFieldDelegate, Properties, Property } from \"@rebasepro/types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport {\n ArrowDownToLineIcon,\n ArrowUpToLineIcon,\n cls,\n defaultBorderMixin,\n FileSearchIcon,\n IconButton,\n iconSize,\n Menu,\n MenuItem,\n MoreVerticalIcon,\n Tooltip,\n Trash2Icon\n} from \"@rebasepro/ui\";\nimport { NonEditablePropertyPreview, PropertyFieldPreview } from \"./PropertyFieldPreview\";\nimport {\n closestCenter,\n DndContext,\n DragEndEvent,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors\n} from \"@dnd-kit/core\";\nimport {\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy\n} from \"@dnd-kit/sortable\";\nimport { restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\n\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { getFullId, getFullIdPath } from \"./util\";\n\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\n\nexport const PropertyTree = React.memo(\n function PropertyTree<M extends {\n [Key: string]: unknown\n }>({\n namespace,\n selectedPropertyKey,\n onPropertyClick,\n properties,\n propertiesOrder: propertiesOrderProp,\n additionalFields,\n errors,\n onPropertyMove,\n onPropertyRemove,\n className,\n inferredPropertyKeys\n }: {\n namespace?: string;\n selectedPropertyKey?: string;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n properties: Properties;\n propertiesOrder?: string[];\n additionalFields?: AdditionalFieldDelegate<M>[];\n errors: Record<string, any>;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n className?: string;\n inferredPropertyKeys?: string[];\n }) {\n\n // Filter propertiesOrder to only include top-level keys (no dots) that exist in properties\n // Nested keys like \"data.mode\" are for column ordering in the table, not for the property editor\n const propertyKeys = Object.keys(properties);\n const filteredOrder = (propertiesOrderProp ?? propertyKeys)\n .filter(key => !key.includes(\".\") && properties[key as keyof typeof properties]);\n\n // Ensure all properties are included (append any missing ones)\n const missingKeys = propertyKeys.filter(key => !filteredOrder.includes(key));\n const propertiesOrder = [...filteredOrder, ...missingKeys];\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 5\n }\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates\n })\n );\n\n const handleDragEnd = (event: DragEndEvent) => {\n const {\n active,\n over\n } = event;\n\n if (!over || active.id === over.id) {\n return;\n }\n\n const activeId = String(active.id);\n const overId = String(over.id);\n\n // Extract property keys from the full IDs\n const activeKey = activeId.includes(\".\") ? activeId.split(\".\").pop() : activeId;\n const overKey = overId.includes(\".\") ? overId.split(\".\").pop() : overId;\n\n if (!activeKey || !overKey) return;\n\n const oldIndex = propertiesOrder.indexOf(activeKey);\n const newIndex = propertiesOrder.indexOf(overKey);\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newPropertiesOrder = [...propertiesOrder];\n const [removed] = newPropertiesOrder.splice(oldIndex, 1);\n newPropertiesOrder.splice(newIndex, 0, removed);\n\n if (onPropertyMove) {\n onPropertyMove(newPropertiesOrder, namespace);\n }\n }\n };\n\n const items = propertiesOrder.map(key => getFullId(key, namespace));\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n modifiers={[restrictToVerticalAxis]}\n >\n <SortableContext\n items={items}\n strategy={verticalListSortingStrategy}\n >\n <div className={cls(\"flex flex-col gap-0.5\", className)}>\n\n {propertiesOrder && propertiesOrder\n .map((propertyKey: string, index: number) => {\n const property = properties[propertyKey];\n const additionalField = additionalFields?.find(field => field.key === propertyKey);\n\n if (!property && !additionalField) {\n console.warn(`Property ${propertyKey} not found in properties or additionalFields`);\n return null;\n }\n\n const id = getFullId(propertyKey, namespace);\n\n return (\n <PropertyTreeEntry\n key={id}\n id={id}\n propertyKey={propertyKey}\n property={property}\n additionalField={additionalField}\n errors={errors}\n namespace={namespace}\n propertiesOrder={propertiesOrder}\n inferredPropertyKeys={inferredPropertyKeys}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n onPropertyClick={onPropertyClick}\n selectedPropertyKey={selectedPropertyKey}\n\n />\n );\n }).filter(Boolean)}\n </div>\n </SortableContext>\n </DndContext>\n );\n },\n equal\n);\n\nexport function PropertyTreeEntry({\n id,\n propertyKey,\n namespace,\n property,\n additionalField,\n selectedPropertyKey,\n errors,\n propertiesOrder,\n onPropertyClick,\n onPropertyMove,\n onPropertyRemove,\n inferredPropertyKeys\n}: {\n id: string;\n propertyKey: string;\n namespace?: string;\n property: Property;\n additionalField?: AdditionalFieldDelegate<any>;\n selectedPropertyKey?: string;\n errors: Record<string, any>;\n propertiesOrder: string[];\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n onPropertyMove?: (propertiesOrder: string[], namespace?: string) => void;\n onPropertyRemove?: (propertyKey: string, namespace?: string) => void;\n inferredPropertyKeys?: string[];\n}) {\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging\n } = useSortable({\n id\n });\n\n const style = {\n // Key change: use Translate instead of Transform to prevent stretching\n transform: CSS.Translate.toString(transform),\n transition,\n zIndex: isDragging ? 10 : undefined,\n position: \"relative\" as const\n };\n\n const isPropertyInferred = inferredPropertyKeys?.includes(namespace ? `${namespace}.${propertyKey}` : propertyKey);\n const fullId = id;\n const fullIdPath = getFullIdPath(propertyKey, namespace);\n const hasError = fullIdPath in errors;\n\n let subtree;\n if (typeof property === \"object\") {\n if (property.type === \"map\" && property.properties) {\n subtree = <PropertyTree\n selectedPropertyKey={selectedPropertyKey}\n namespace={fullId}\n properties={property.properties}\n propertiesOrder={property.propertiesOrder}\n errors={errors}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={onPropertyRemove}\n inferredPropertyKeys={inferredPropertyKeys}\n />\n }\n }\n\n const selected = selectedPropertyKey === fullId;\n const editable = property && !isPropertyBuilder(property);\n\n // Check if this property was AI-modified\n const aiModifiedPaths = useAIModifiedPaths();\n const isAIModified = aiModifiedPaths?.isPathModified(`properties.${propertyKey}`) ?? false;\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className=\"relative cursor-grab\"\n {...attributes}\n {...listeners}\n >\n <div className=\"relative\">\n {subtree && <div\n className={\"absolute border-l \" + defaultBorderMixin}\n style={{\n left: \"24px\",\n top: \"40px\",\n bottom: \"16px\"\n }}/>}\n\n <div>\n {!isPropertyBuilder(property) && !additionalField && editable\n ? <PropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n includeName={true}\n selected={selected}\n hasError={hasError}/>\n : <NonEditablePropertyPreview name={propertyKey}\n property={property}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n selected={selected}/>}\n </div>\n\n <div className=\"absolute top-1/2 -translate-y-1/2 right-2 flex flex-row items-center gap-1\">\n {isAIModified && <AIModifiedIndicator/>}\n {isPropertyInferred && <>\n <Tooltip title={\"Inferred property\"} asChild={true}>\n <IconButton size=\"smallest\" disabled>\n <FileSearchIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n {onPropertyRemove && <Tooltip title={\"Remove inferred property\"}\n asChild={true}>\n <IconButton size=\"smallest\"\n color=\"inherit\"\n onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onPropertyRemove(propertyKey, namespace);\n }}>\n <Trash2Icon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>}\n </>}\n\n <Menu\n trigger={\n <IconButton\n size=\"smallest\"\n >\n <MoreVerticalIcon size={iconSize.smallest}/>\n </IconButton>\n }\n >\n <MenuItem\n dense\n onClick={() => {\n const currentIndex = propertiesOrder.indexOf(propertyKey);\n if (currentIndex > 0) {\n const newOrder = propertiesOrder.filter(k => k !== propertyKey);\n newOrder.unshift(propertyKey);\n onPropertyMove?.(newOrder, namespace);\n }\n }}\n >\n <ArrowUpToLineIcon size={iconSize.smallest}/>\n Move to top\n </MenuItem>\n <MenuItem\n dense\n onClick={() => {\n const currentIndex = propertiesOrder.indexOf(propertyKey);\n if (currentIndex < propertiesOrder.length - 1) {\n const newOrder = propertiesOrder.filter(k => k !== propertyKey);\n newOrder.push(propertyKey);\n onPropertyMove?.(newOrder, namespace);\n }\n }}\n >\n <ArrowDownToLineIcon size={iconSize.smallest}/>\n Move to bottom\n </MenuItem>\n <MenuItem\n dense\n onClick={() => onPropertyRemove?.(propertyKey, namespace)}\n >\n <Trash2Icon size={iconSize.smallest}/>\n Delete\n </MenuItem>\n </Menu>\n\n </div>\n\n {subtree && <div className={\"ml-12\"}>{subtree}</div>}\n </div>\n </div>\n );\n}\n","import { FieldCaption } from \"../../../_cms_internals\";\nimport React, { useState } from \"react\";\n;\nimport { MapProperty, Property, PropertyConfig } from \"@rebasepro/types\";\nimport { BooleanSwitchWithLabel, Button, Paper, PlusIcon, Typography } from \"@rebasepro/ui\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\nimport { useTranslation } from \"@rebasepro/app\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath, namespaceToPropertiesPath } from \"../util\";\n\nexport function MapPropertyField({ disabled, getData, allowDataInference, propertyConfigs }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<MapProperty>();\n const { t } = useTranslation();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const propertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const onPropertyCreated = ({\n id,\n property\n }: { id?: string, property: Property }) => {\n if (!id)\n throw Error();\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const currentPropertiesOrder = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"propertiesOrder\", newPropertiesOrder, false);\n\n setPropertyDialogOpen(false);\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n const propertiesPath = idToPropertiesPath(fullId);\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n const currentPropertiesOrder: string[] = (getIn(values, propertiesOrderPath) as string[] | undefined) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)) as object ?? {});\n\n setFieldValue(propertiesPath, undefined, false);\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const empty = !propertiesOrder || propertiesOrder.length < 1;\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className=\"flex justify-between items-end my-4\">\n <Typography variant={\"subtitle2\"}>{t(\"properties_in_this_group\")}</Typography>\n <Button\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<PlusIcon/>}\n >\n Add property to {values.name ?? \"this group\"}\n </Button>\n </div>\n <Paper className=\"p-2 pl-8\">\n <PropertyTree\n properties={values.properties ?? {}}\n propertiesOrder={propertiesOrder}\n errors={{}}\n\n onPropertyClick={(propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={onPropertyMove}/>\n\n {empty &&\n <Typography variant={\"label\"}\n className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this group\n </Typography>}\n </Paper>\n </div>\n\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"medium\"}\n label={t(\"spread_children_as_columns\")}\n onValueChange={(v) => setFieldValue(\"ui.spreadChildren\", v)}\n value={values.ui?.spreadChildren ?? false}\n />\n <FieldCaption>\n Set this flag to true if you want to display the children of this group as individual columns. This\n will only work for top level groups.\n </FieldCaption>\n </div>\n\n <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n allowDataInference={allowDataInference}\n\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n getData={getData}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty as Property | undefined}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyCreated}\n existingPropertyKeys={selectedPropertyKey ? undefined : propertiesOrder}\n propertyConfigs={propertyConfigs}\n />\n\n </>);\n}\n","import React, { useState } from \"react\";\nimport { getFieldConfig } from \"../../../../components/field_configs\";\nimport { ArrayProperty, Property, PropertyConfig } from \"@rebasepro/types\";\nimport { Button, Paper, Typography } from \"@rebasepro/ui\";\nimport { Field, getIn, useFormex } from \"@rebasepro/forms\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { PropertyFieldPreview } from \"../PropertyFieldPreview\";\nimport { ArrayPropertyValidation } from \"./validation/ArrayPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\nexport function RepeatPropertyField({\n showErrors,\n existing,\n disabled,\n getData,\n allowDataInference,\n propertyConfigs\n}: {\n showErrors: boolean,\n existing: boolean,\n disabled: boolean,\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n}) {\n\n const {\n values,\n handleChange,\n errors,\n setFieldValue,\n touched\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState(false);\n const ofProperty = getIn(values, \"of\") as Property | undefined;\n const ofPropertyError = (getIn(touched, \"of\") && getIn(errors, \"of\")) as string | undefined;\n\n const onPropertyChanged = ({ id, property, namespace }:\n { id?: string, property: Property, namespace?: string }) => {\n setFieldValue(\"of\", property);\n };\n\n const widget = ofProperty && getFieldConfig(ofProperty, propertyConfigs);\n return (\n <>\n <div className={\"col-span-12\"}>\n <Typography variant={\"subtitle2\"}>\n Repeat component\n </Typography>\n <Field\n name={\"of\"}\n value={ofProperty}\n // validate={(property: Property) => {\n // return property?.type ? undefined : \"You need to specify a repeat field\";\n // }}\n >\n {({ }) => (\n <Paper className=\"p-2 mt-4\">\n\n {ofProperty && <PropertyFieldPreview\n property={ofProperty}\n onClick={disabled ? undefined : () => setPropertyDialogOpen(true)}\n includeName={false}\n includeEditButton={true}\n selected={false}\n hasError={false}/>}\n\n {!disabled && !ofProperty && <Button variant={\"text\"}\n color={ofPropertyError ? \"error\" : \"primary\"}\n onClick={() => setPropertyDialogOpen(true)}>\n Edit {`${widget ? widget.name : \"repeat component\"}`}\n </Button>}\n\n <PropertyFormDialog\n inArray={true}\n open={propertyDialogOpen}\n existingProperty={existing}\n getData={getData}\n autoUpdateId={!existing}\n autoOpenTypeSelect={!existing}\n onOkClicked={() => setPropertyDialogOpen(false)}\n allowDataInference={allowDataInference}\n property={ofProperty}\n includeIdAndName={false}\n onPropertyChanged={onPropertyChanged}\n forceShowErrors={showErrors}\n propertyConfigs={propertyConfigs}\n\n />\n </Paper>\n )}\n </Field>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <ArrayPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { FieldCaption } from \"../../../_cms_internals\";\nimport { Field, getIn, useFormex } from \"@rebasepro/forms\";\nimport { DebouncedTextField } from \"@rebasepro/ui\";\nimport { PropertyWithId } from \"../PropertyEditView\";\nimport React from \"react\";\nimport { useTranslation } from \"@rebasepro/app\";\n;\nimport { prettifyIdentifier, toSnakeCase } from \"@rebasepro/utils\";\n\ntype CommonPropertyFieldsProps = {\n showErrors: boolean,\n disabledId: boolean,\n disabled: boolean;\n isNewProperty: boolean;\n autoUpdateId: boolean;\n};\n\nexport const CommonPropertyFields = React.forwardRef<HTMLDivElement, CommonPropertyFieldsProps>(\n function CommonPropertyFields({\n showErrors,\n disabledId,\n disabled,\n autoUpdateId,\n isNewProperty\n }, ref) {\n\n const {\n errors,\n values,\n setFieldValue,\n setFieldTouched,\n touched,\n validate\n } = useFormex<PropertyWithId>();\n const { t } = useTranslation();\n\n const name = \"name\";\n const nameError = showErrors && (getIn(errors, name) as string | undefined);\n\n const id = \"id\";\n const idError = showErrors && (getIn(errors, id) as string | undefined);\n\n const description = \"description\";\n const descriptionError = showErrors && (getIn(errors, description) as string | undefined);\n\n return (\n <div className={\"flex flex-col gap-2 col-span-12\"}>\n\n <div>\n <Field\n name={name}\n inputRef={ref}\n as={DebouncedTextField}\n value={values[name]}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const newNameValue = e.target.value;\n const idTouched = getIn(touched, id);\n if (!idTouched && autoUpdateId) {\n setFieldValue(id, newNameValue ? toSnakeCase(newNameValue) : \"\", false)\n }\n setFieldValue(name, newNameValue, true);\n setFieldTouched(name, true);\n }}\n style={{ fontSize: 20 }}\n placeholder={t(\"field_name\")}\n required\n disabled={disabled}\n error={Boolean(nameError)}/>\n\n <FieldCaption error={Boolean(nameError)}>\n {nameError}\n </FieldCaption>\n </div>\n\n <div>\n <DebouncedTextField\n name={id}\n label={\"ID\"}\n value={values[id]}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const newIdValue = e.target.value;\n const nameTouched = getIn(touched, name);\n if (!nameTouched && autoUpdateId) {\n setFieldValue(name, newIdValue ? prettifyIdentifier(newIdValue) : \"\")\n }\n setFieldValue(id, newIdValue, true);\n setFieldTouched(id, true);\n }}\n disabled={disabledId || disabled}\n required\n size=\"small\"\n error={Boolean(idError)}/>\n <FieldCaption error={Boolean(idError)}>\n {idError}\n </FieldCaption>\n </div>\n\n <div>\n <Field name={description}\n as={DebouncedTextField}\n label={t(\"description\")}\n disabled={disabled}\n error={Boolean(descriptionError)}/>\n <FieldCaption error={Boolean(descriptionError)}>\n {descriptionError}\n </FieldCaption>\n </div>\n\n </div>\n );\n\n }\n);\n","import { FieldCaption } from \"../../../_cms_internals\";\nimport React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\nimport { useTranslation } from \"@rebasepro/app\";\n;\nimport { Select, SelectItem, TextField } from \"@rebasepro/ui\";\n\nexport function StringPropertyField({\n widgetId,\n disabled,\n showErrors\n}: {\n widgetId: \"text_field\" | \"multiline\" | \"email\" | \"user_select\";\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue, touched, errors } = useFormex();\n const { t } = useTranslation();\n\n const columnTypePath = \"columnType\";\n const columnTypeValue: string | undefined = getIn(values, columnTypePath) as string | undefined;\n const columnTypeError: string | undefined = (getIn(touched, columnTypePath) && getIn(errors, columnTypePath)) as string | undefined;\n\n const isIdPath = \"isId\";\n const isIdValue: string | boolean | undefined = getIn(values, isIdPath) as string | boolean | undefined;\n const isIdError: string | undefined = (getIn(touched, isIdPath) && getIn(errors, isIdPath)) as string | undefined;\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n {widgetId === \"text_field\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n matches={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n {widgetId === \"user_select\" &&\n <StringPropertyValidation disabled={disabled}\n showErrors={showErrors}/>}\n\n {widgetId === \"multiline\" &&\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>}\n\n {widgetId === \"email\" &&\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>}\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <Select name={columnTypePath}\n disabled={disabled || Boolean(isIdValue)}\n fullWidth={true}\n value={isIdValue === \"uuid\" ? \"uuid\" : (columnTypeValue ?? \"_default_\")}\n onValueChange={(v) => setFieldValue(columnTypePath, v === \"_default_\" ? undefined : v)}\n renderValue={(v) => {\n if (isIdValue === \"uuid\") return \"uuid (forced by Primary Key)\";\n switch (v) {\n case \"text\": return \"text (unlimited)\";\n case \"char\": return \"char (fixed length)\";\n case \"varchar\": return \"varchar (variable length)\";\n case \"_default_\": return \"Default (varchar)\";\n default: return \"Default (varchar)\";\n }\n }}\n error={Boolean(columnTypeError)}\n label={t(\"db_column_type\")}>\n {isIdValue === \"uuid\" && <SelectItem value={\"uuid\"}> uuid (forced by Primary Key) </SelectItem>}\n <SelectItem value={\"_default_\"}> Default (varchar) </SelectItem>\n <SelectItem value={\"varchar\"}> varchar (variable length) </SelectItem>\n <SelectItem value={\"text\"}> text (unlimited) </SelectItem>\n <SelectItem value={\"char\"}> char (fixed length) </SelectItem>\n </Select>\n <FieldCaption error={Boolean(columnTypeError)}>\n {columnTypeError ?? \"Optional database override for this string field.\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Select name={isIdPath}\n disabled={disabled}\n fullWidth={true}\n value={isIdValue === true ? \"true\" : (isIdValue === false ? \"false\" : (isIdValue ?? \"_default_\"))}\n onValueChange={(v) => {\n if (v === \"_default_\" || v === \"false\") setFieldValue(isIdPath, undefined);\n else if (v === \"true\") setFieldValue(isIdPath, true);\n else setFieldValue(isIdPath, v);\n }}\n renderValue={(v) => {\n switch (v) {\n case \"true\": return \"Yes (Auto-generated UUID/String)\";\n case \"manual\": return \"Yes (Manual input)\";\n case \"uuid\": return \"Yes (UUID)\";\n case \"cuid\": return \"Yes (CUID)\";\n case \"false\":\n case \"_default_\": return \"No\";\n default: return `Yes (${v})`;\n }\n }}\n error={Boolean(isIdError)}\n label={t(\"primary_key_unique_id\")}>\n <SelectItem value={\"_default_\"}> No </SelectItem>\n <SelectItem value={\"manual\"}> Yes (Manual input) </SelectItem>\n <SelectItem value={\"true\"}> Yes (Auto-generated UUID/String) </SelectItem>\n <SelectItem value={\"uuid\"}> Yes (UUID) </SelectItem>\n <SelectItem value={\"cuid\"}> Yes (CUID) </SelectItem>\n </Select>\n <FieldCaption error={Boolean(isIdError)}>\n {isIdError ?? \"Set as Primary Key and configure ID generation strategy.\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={t(\"default_value\")}\n value={(getIn(values, \"defaultValue\") as string | undefined) ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@rebasepro/forms\";\n\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { SwitchControl } from \"../SwitchControl\";\n\nexport function BooleanPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n const { values } = useFormex();\n const defaultValue = getIn(values, \"defaultValue\");\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <Field\n name={\"defaultValue\"}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n size={\"medium\"}\n label={defaultValue === null || defaultValue === undefined ? \"Default value not set\" : (\"Default value is \" + defaultValue.toString())}\n disabled={disabled}\n allowIndeterminate={true} field={field}\n form={form}/>\n }}\n </Field>\n\n </div>\n </>\n );\n}\n","import React, { useState } from \"react\";\nimport { Button, Paper, PlusIcon, Typography } from \"@rebasepro/ui\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\nimport { OnPropertyChangedParams, PropertyFormDialog } from \"../PropertyEditView\";\nimport {\n getFullId,\n getFullIdPath,\n idToPropertiesPath,\n namespaceToPropertiesOrderPath,\n namespaceToPropertiesPath\n} from \"../util\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { ArrayProperty, PropertyConfig, Property } from \"@rebasepro/types\";\n\nexport function BlockPropertyField({\n disabled,\n getData,\n allowDataInference,\n propertyConfigs\n}: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<ArrayProperty>();\n\n const [propertyDialogOpen, setPropertyDialogOpen] = useState<boolean>(false);\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const onPropertyChanged = ({\n id,\n namespace,\n property\n }: OnPropertyChangedParams) => {\n if (!id)\n throw Error();\n\n setFieldValue(\"oneOf.\" + getFullIdPath(id, namespace), property, false);\n\n const currentPropertiesOrder = values.oneOf?.propertiesOrder ?? Object.keys(values.oneOf?.properties ?? {});\n const newPropertiesOrder = currentPropertiesOrder.includes(id) ? currentPropertiesOrder : [...currentPropertiesOrder, id];\n setFieldValue(\"oneOf.\" + namespaceToPropertiesOrderPath(namespace), newPropertiesOrder, false);\n setPropertyDialogOpen(false);\n };\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.oneOf?.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(`oneOf.${idToPropertiesPath(fullId)}`, undefined, false);\n const propertiesOrderPath = `oneOf.${namespaceToPropertiesOrderPath(namespace)}`;\n const currentPropertiesOrder: string[] = (getIn(values, propertiesOrderPath) as string[] | undefined) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)) as object ?? {});\n setFieldValue(propertiesOrderPath, currentPropertiesOrder.filter((p) => p !== propertyKey), false);\n\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const addChildButton = <Button\n autoFocus\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<PlusIcon/>}\n >\n Add property to {values.name ?? \"this block\"}\n </Button>;\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(`oneOf.${namespaceToPropertiesOrderPath(namespace)}`, propertiesOrder, false);\n };\n\n return (\n <>\n <div className={\"col-span-12\"}>\n <div className={\"flex justify-between items-end mt-8 mb-4\"}>\n <Typography variant={\"subtitle2\"}>\n Properties in this block\n </Typography>\n {addChildButton}\n </div>\n <Paper className=\"p-2 pl-8\">\n\n <PropertyTree\n properties={values.oneOf?.properties ?? {}}\n propertiesOrder={values.oneOf?.propertiesOrder}\n errors={{}}\n\n onPropertyClick={disabled\n ? undefined\n : (propertyKey, namespace) => {\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n setPropertyDialogOpen(true);\n }}\n onPropertyMove={disabled\n ? undefined\n : onPropertyMove}/>\n\n {!disabled && (values.oneOf?.propertiesOrder?.length === 0) &&\n <div className=\"h-full flex items-center justify-center p-4\">\n Add the first property to this block\n </div>}\n\n </Paper>\n </div>\n\n {!disabled && <PropertyFormDialog\n inArray={false}\n forceShowErrors={false}\n open={propertyDialogOpen}\n getData={getData}\n allowDataInference={allowDataInference}\n onCancel={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n onOkClicked={() => {\n setPropertyDialogOpen(false);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n }}\n\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty as Property | undefined}\n existingProperty={Boolean(selectedPropertyKey)}\n autoUpdateId={!selectedPropertyKey}\n autoOpenTypeSelect={!selectedPropertyKey}\n onPropertyChanged={onPropertyChanged}\n existingPropertyKeys={selectedPropertyKey ? undefined : values.oneOf?.propertiesOrder}\n propertyConfigs={propertyConfigs}/>}\n\n </>);\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@rebasepro/forms\";\nimport { DebouncedTextField } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/app\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function NumberPropertyValidation({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n handleChange\n } = useFormex();\n const { t } = useTranslation();\n\n const validationMin = \"validation.min\";\n const validationMax = \"validation.max\";\n const validationLessThan = \"validation.lessThan\";\n const validationMoreThan = \"validation.moreThan\";\n const validationPositive = \"validation.positive\";\n const validationNegative = \"validation.negative\";\n const validationInteger = \"validation.integer\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <GeneralPropertyValidation disabled={disabled}/>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMin) as number | undefined}\n label={t(\"min_value\")}\n name={validationMin}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField value={getIn(values, validationMax) as number | undefined}\n label={t(\"max_value\")}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationLessThan) as number | undefined}\n label={t(\"less_than\")}\n name={validationLessThan}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationMoreThan) as number | undefined}\n label={t(\"more_than\")}\n name={validationMoreThan}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-4\"}>\n <Field name={validationPositive}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"positive_value\")}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationNegative}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"negative_value\")}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n <div className={\"col-span-4\"}>\n <Field name={validationInteger}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={t(\"integer_value\")}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import { FieldCaption } from \"../../../_cms_internals\";\nimport React from \"react\";\nimport { NumberPropertyValidation } from \"./validation/NumberPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n;\nimport { Select, SelectItem, TextField } from \"@rebasepro/ui\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\nimport { useTranslation } from \"@rebasepro/app\";\n\nexport function NumberPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const { values, setFieldValue, touched, errors } = useFormex();\n const { t } = useTranslation();\n\n const columnTypePath = \"columnType\";\n const columnTypeValue: string | undefined = getIn(values, columnTypePath) as string | undefined;\n const columnTypeError: string | undefined = (getIn(touched, columnTypePath) && getIn(errors, columnTypePath)) as string | undefined;\n\n const isIdPath = \"isId\";\n const isIdValue: string | boolean | undefined = getIn(values, isIdPath) as string | boolean | undefined;\n const isIdError: string | undefined = (getIn(touched, isIdPath) && getIn(errors, isIdPath)) as string | undefined;\n\n return (\n <>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <NumberPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <Select name={columnTypePath}\n disabled={disabled || Boolean(isIdValue)}\n fullWidth={true}\n value={columnTypeValue ?? \"_default_\"}\n onValueChange={(v) => setFieldValue(columnTypePath, v === \"_default_\" ? undefined : v)}\n renderValue={(v) => {\n switch (v) {\n case \"integer\": return \"integer\";\n case \"real\": return \"real (float4)\";\n case \"double precision\": return \"double precision (float8)\";\n case \"numeric\": return \"numeric / decimal\";\n case \"bigint\": return \"bigint\";\n case \"serial\": return \"serial\";\n case \"bigserial\": return \"bigserial\";\n case \"_default_\": return \"Default (integer/numeric)\";\n default: return \"Default (integer/numeric)\";\n }\n }}\n error={Boolean(columnTypeError)}\n label={t(\"db_column_type\")}>\n <SelectItem value={\"_default_\"}> Default (integer/numeric) </SelectItem>\n <SelectItem value={\"integer\"}> integer </SelectItem>\n <SelectItem value={\"real\"}> real (float4) </SelectItem>\n <SelectItem value={\"double precision\"}> double precision (float8) </SelectItem>\n <SelectItem value={\"numeric\"}> numeric / decimal </SelectItem>\n <SelectItem value={\"bigint\"}> bigint </SelectItem>\n <SelectItem value={\"serial\"}> serial </SelectItem>\n <SelectItem value={\"bigserial\"}> bigserial </SelectItem>\n </Select>\n <FieldCaption error={Boolean(columnTypeError)}>\n {columnTypeError ?? \"Optional database override for this number field.\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <Select name={isIdPath}\n disabled={disabled}\n fullWidth={true}\n value={isIdValue === true ? \"true\" : (isIdValue === false ? \"false\" : (isIdValue ?? \"_default_\"))}\n onValueChange={(v) => {\n if (v === \"_default_\" || v === \"false\") setFieldValue(isIdPath, undefined);\n else if (v === \"true\") setFieldValue(isIdPath, true);\n else setFieldValue(isIdPath, v);\n }}\n renderValue={(v) => {\n switch (v) {\n case \"true\": return \"Yes (Auto-increment/identity)\";\n case \"increment\": return \"Yes (Increment)\";\n case \"manual\": return \"Yes (Manual input)\";\n case \"false\":\n case \"_default_\": return \"No\";\n default: return `Yes (${v})`;\n }\n }}\n error={Boolean(isIdError)}\n label={t(\"primary_key_unique_id\")}>\n <SelectItem value={\"_default_\"}> No </SelectItem>\n <SelectItem value={\"manual\"}> Yes (Manual input) </SelectItem>\n <SelectItem value={\"true\"}> Yes (Auto-increment/identity) </SelectItem>\n <SelectItem value={\"increment\"}> Yes (Increment) </SelectItem>\n </Select>\n <FieldCaption error={Boolean(isIdError)}>\n {isIdError ?? \"Set as Primary Key and configure ID generation strategy.\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : parseFloat(e.target.value));\n }}\n label={t(\"default_value\")}\n value={(getIn(values, \"defaultValue\") as string | number | undefined) ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { IconForView, useTranslation } from \"@rebasepro/app\";\nimport { FieldCaption, useCollectionRegistryController } from \"../../../_cms_internals\";\nimport React from \"react\";\nimport { Field, getIn, useFormex } from \"@rebasepro/forms\";\n;\nimport { NumberProperty, StringProperty } from \"@rebasepro/types\";\nimport { CircularProgress, Select, SelectItem, Typography } from \"@rebasepro/ui\";\n\nexport function ReferencePropertyField({\n existing,\n multiple,\n disabled,\n showErrors,\n asString\n}: {\n existing: boolean,\n multiple: boolean,\n disabled: boolean,\n showErrors: boolean,\n asString?: boolean\n}) {\n\n const {\n values,\n errors,\n setFieldValue\n } = useFormex<StringProperty | NumberProperty>();\n\n const collectionRegistry = useCollectionRegistryController();\n\n if (!collectionRegistry.initialised)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const pathPath = asString ? \"reference.slug\" : (multiple ? \"of.slug\" : \"path\");\n const pathValue: string | undefined = getIn(values, pathPath) as string | undefined;\n const pathError: string | undefined = (showErrors && getIn(errors, pathPath)) as string | undefined;\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Field name={pathPath}\n pathPath={pathPath}\n type=\"select\"\n disabled={disabled}\n value={pathValue}\n error={pathError}\n setFieldValue={setFieldValue}\n as={CollectionsSelect}/>\n\n </div>\n\n </>\n );\n}\n\nexport function CollectionsSelect({\n disabled,\n pathPath,\n value,\n setFieldValue,\n error,\n ...props\n}: {\n disabled: boolean,\n pathPath: string,\n value?: string,\n setFieldValue: (field: string, value: string) => void,\n error?: string\n}) {\n\n const collectionRegistry = useCollectionRegistryController();\n const { t } = useTranslation();\n\n if (!collectionRegistry.initialised)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const collections = collectionRegistry.collections ?? [];\n\n return (\n <>\n <Select\n error={Boolean(error)}\n disabled={disabled}\n value={value ?? \"\"}\n position={\"item-aligned\"}\n name={pathPath}\n fullWidth={true}\n onChange={(e: React.ChangeEvent<HTMLSelectElement>) => setFieldValue(pathPath, e.target.value)}\n label={t(\"target_collection\")}\n renderValue={(selected: string) => {\n const selectedCollection = collections.find(collection => collection.slug === selected);\n if (!selectedCollection) return null;\n return (\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={selectedCollection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"ml-4\">\n {selectedCollection?.name.toUpperCase()}\n </Typography>\n </div>)\n }}\n {...props}>\n\n {collections.map((collection) => {\n return <SelectItem\n key={collection.slug}\n value={collection.slug}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })}\n\n </Select>\n\n </>\n );\n}\n","import { FieldCaption } from \"../../../_cms_internals\";\nimport React from \"react\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\n;\nimport { NumberProperty, StringProperty } from \"@rebasepro/types\";\nimport { Select, SelectItem } from \"@rebasepro/ui\";\nimport { useTranslation } from \"@rebasepro/app\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\n\n// Common IANA timezones with human-readable labels\nconst TIMEZONES = [\n // UTC\n { value: \"UTC\",\nlabel: \"UTC (Coordinated Universal Time)\" },\n // Americas\n { value: \"America/New_York\",\nlabel: \"New York (US Eastern)\" },\n { value: \"America/Chicago\",\nlabel: \"Chicago (US Central)\" },\n { value: \"America/Denver\",\nlabel: \"Denver (US Mountain)\" },\n { value: \"America/Los_Angeles\",\nlabel: \"Los Angeles (US Pacific)\" },\n { value: \"America/Anchorage\",\nlabel: \"Anchorage (Alaska)\" },\n { value: \"America/Toronto\",\nlabel: \"Toronto (Canada Eastern)\" },\n { value: \"America/Vancouver\",\nlabel: \"Vancouver (Canada Pacific)\" },\n { value: \"America/Mexico_City\",\nlabel: \"Mexico City\" },\n { value: \"America/Sao_Paulo\",\nlabel: \"São Paulo (Brazil)\" },\n { value: \"America/Buenos_Aires\",\nlabel: \"Buenos Aires (Argentina)\" },\n // Europe\n { value: \"Europe/London\",\nlabel: \"London (UK)\" },\n { value: \"Europe/Paris\",\nlabel: \"Paris (France)\" },\n { value: \"Europe/Berlin\",\nlabel: \"Berlin (Germany)\" },\n { value: \"Europe/Madrid\",\nlabel: \"Madrid (Spain)\" },\n { value: \"Europe/Rome\",\nlabel: \"Rome (Italy)\" },\n { value: \"Europe/Amsterdam\",\nlabel: \"Amsterdam (Netherlands)\" },\n { value: \"Europe/Brussels\",\nlabel: \"Brussels (Belgium)\" },\n { value: \"Europe/Zurich\",\nlabel: \"Zurich (Switzerland)\" },\n { value: \"Europe/Stockholm\",\nlabel: \"Stockholm (Sweden)\" },\n { value: \"Europe/Vienna\",\nlabel: \"Vienna (Austria)\" },\n { value: \"Europe/Warsaw\",\nlabel: \"Warsaw (Poland)\" },\n { value: \"Europe/Prague\",\nlabel: \"Prague (Czech Republic)\" },\n { value: \"Europe/Athens\",\nlabel: \"Athens (Greece)\" },\n { value: \"Europe/Moscow\",\nlabel: \"Moscow (Russia)\" },\n { value: \"Europe/Istanbul\",\nlabel: \"Istanbul (Turkey)\" },\n // Asia\n { value: \"Asia/Dubai\",\nlabel: \"Dubai (UAE)\" },\n { value: \"Asia/Kolkata\",\nlabel: \"Mumbai / Delhi (India)\" },\n { value: \"Asia/Bangkok\",\nlabel: \"Bangkok (Thailand)\" },\n { value: \"Asia/Singapore\",\nlabel: \"Singapore\" },\n { value: \"Asia/Hong_Kong\",\nlabel: \"Hong Kong\" },\n { value: \"Asia/Shanghai\",\nlabel: \"Shanghai (China)\" },\n { value: \"Asia/Tokyo\",\nlabel: \"Tokyo (Japan)\" },\n { value: \"Asia/Seoul\",\nlabel: \"Seoul (South Korea)\" },\n { value: \"Asia/Jakarta\",\nlabel: \"Jakarta (Indonesia)\" },\n // Oceania\n { value: \"Australia/Sydney\",\nlabel: \"Sydney (Australia Eastern)\" },\n { value: \"Australia/Melbourne\",\nlabel: \"Melbourne (Australia)\" },\n { value: \"Australia/Brisbane\",\nlabel: \"Brisbane (Australia)\" },\n { value: \"Australia/Perth\",\nlabel: \"Perth (Australia Western)\" },\n { value: \"Pacific/Auckland\",\nlabel: \"Auckland (New Zealand)\" },\n // Africa\n { value: \"Africa/Cairo\",\nlabel: \"Cairo (Egypt)\" },\n { value: \"Africa/Johannesburg\",\nlabel: \"Johannesburg (South Africa)\" },\n { value: \"Africa/Lagos\",\nlabel: \"Lagos (Nigeria)\" }\n];\n\nexport function DateTimePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const {\n values,\n errors,\n touched,\n setFieldValue\n } = useFormex<StringProperty | NumberProperty>();\n const { t } = useTranslation();\n\n const modePath = \"mode\";\n const modeValue: string | undefined = getIn(values, modePath) as string | undefined;\n const modeError: string | undefined = (getIn(touched, modePath) && getIn(errors, modePath)) as string | undefined;\n\n const autoValuePath = \"autoValue\";\n const autoValueValue: string | undefined = getIn(values, autoValuePath) as string | undefined;\n const autoValueError: string | undefined = (getIn(touched, autoValuePath) && getIn(errors, autoValuePath)) as string | undefined;\n\n const timezonePath = \"timezone\";\n const timezoneValue: string | undefined = getIn(values, timezonePath) as string | undefined;\n const timezoneError: string | undefined = (getIn(touched, timezonePath) && getIn(errors, timezonePath)) as string | undefined;\n\n const columnTypePath = \"columnType\";\n const columnTypeValue: string | undefined = getIn(values, columnTypePath) as string | undefined;\n const columnTypeError: string | undefined = (getIn(touched, columnTypePath) && getIn(errors, columnTypePath)) as string | undefined;\n\n return (\n <>\n <div className={\"flex flex-col col-span-12 gap-2\"}>\n <div>\n <Select name={modePath}\n value={modeValue ?? \"date\"}\n error={Boolean(modeError)}\n onValueChange={(v) => setFieldValue(modePath, v)}\n label={t(\"mode\")}\n fullWidth={true}\n renderValue={(v) => {\n switch (v) {\n case \"date_time\":\n return \"Date/Time\";\n case \"date\":\n return \"Date\";\n default:\n return \"\";\n }\n }}\n disabled={disabled}>\n <SelectItem value={\"date_time\"}> Date/Time </SelectItem>\n <SelectItem value={\"date\"}> Date </SelectItem>\n </Select>\n <FieldCaption error={Boolean(modeError)}>\n {modeError}\n </FieldCaption>\n </div>\n <div>\n <Select name={autoValuePath}\n disabled={disabled}\n fullWidth={true}\n value={autoValueValue ?? \"\"}\n onValueChange={(v) => setFieldValue(autoValuePath, v === \"none\" ? null : v)}\n renderValue={(v) => {\n switch (v) {\n case \"on_create\":\n return \"On create\";\n case \"on_update\":\n return \"On any update\";\n default:\n return \"None\";\n }\n }}\n error={Boolean(autoValueError)}\n label={t(\"datetime_automatic_value\")}>\n <SelectItem value={\"none\"}> None </SelectItem>\n <SelectItem value={\"on_create\"}> On create </SelectItem>\n <SelectItem value={\"on_update\"}> On any update </SelectItem>\n </Select>\n <FieldCaption error={Boolean(autoValueError)}>\n {autoValueError ?? \"Update this field automatically when creating or updating the entity\"}\n </FieldCaption>\n </div>\n <div>\n <Select name={timezonePath}\n disabled={disabled}\n fullWidth={true}\n value={timezoneValue ?? \"__local__\"}\n onValueChange={(v) => setFieldValue(timezonePath, v === \"__local__\" ? undefined : v)}\n renderValue={(v) => {\n if (!v || v === \"__local__\") return \"Local timezone\";\n const tz = TIMEZONES.find(t => t.value === v);\n return tz?.label ?? v;\n }}\n error={Boolean(timezoneError)}\n label={t(\"timezone\")}>\n <SelectItem value={\"__local__\"}> Local timezone </SelectItem>\n {TIMEZONES.map((tz) => (\n <SelectItem key={tz.value} value={tz.value}>\n {tz.label}\n </SelectItem>\n ))}\n </Select>\n <FieldCaption error={Boolean(timezoneError)}>\n {timezoneError ?? \"Timezone for displaying and inputting dates. Values are always stored in UTC.\"}\n </FieldCaption>\n </div>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <Select name={columnTypePath}\n disabled={disabled}\n fullWidth={true}\n value={columnTypeValue ?? \"_default_\"}\n onValueChange={(v) => setFieldValue(columnTypePath, v === \"_default_\" ? undefined : v)}\n renderValue={(v) => {\n switch (v) {\n case \"timestamp\": return \"timestamp (with timezone)\";\n case \"date\": return \"date\";\n case \"time\": return \"time\";\n case \"_default_\": return \"Default (timestamp)\";\n default: return \"Default (timestamp)\";\n }\n }}\n error={Boolean(columnTypeError)}\n label={t(\"db_column_type\")}>\n <SelectItem value={\"_default_\"}> Default (timestamp) </SelectItem>\n <SelectItem value={\"timestamp\"}> timestamp (with timezone) </SelectItem>\n <SelectItem value={\"date\"}> date </SelectItem>\n <SelectItem value={\"time\"}> time </SelectItem>\n </Select>\n <FieldCaption error={Boolean(columnTypeError)}>\n {columnTypeError ?? \"Optional database override for this date field.\"}\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12\"}>\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n </div>\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps } from \"@rebasepro/forms\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function AdvancedPropertyValidation({ disabled }: {\n disabled: boolean\n}) {\n\n const hideFromCollection = \"ui.hideFromCollection\";\n const readOnly = \"ui.readOnly\";\n\n return (\n\n <div className={\"grid grid-cols-12 gap-2\"}>\n <div className={\"col-span-12\"}>\n <Field type=\"checkbox\" name={hideFromCollection}>\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Hide from collection\"}\n size={\"small\"}\n disabled={disabled}\n form={form}\n tooltip={\"Hide this field from the collection view. It will still be visible in the form view\"}\n field={field}/>\n }}\n </Field>\n </div>\n\n <div className={\"col-span-12\"}>\n <Field name={readOnly}\n type=\"checkbox\">\n {({ field, form }: FormexFieldProps) => {\n return <SwitchControl\n label={\"Read only\"}\n size={\"small\"}\n disabled={disabled}\n tooltip={\"Is this a read only field. Display only as a preview\"}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import { FieldCaption } from \"../../../_cms_internals\";\nimport React from \"react\";\nimport { TextField } from \"@rebasepro/ui\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\n\nexport function VectorPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n const { values, setFieldValue, touched, errors } = useFormex();\n\n const dimensionsPath = \"dimensions\";\n const dimensionsValue = getIn(values, dimensionsPath) as number | undefined;\n const dimensionsError = (getIn(touched, dimensionsPath) && getIn(errors, dimensionsPath)) as string | undefined;\n\n return (\n <div className={\"col-span-12\"}>\n <TextField\n name={dimensionsPath}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const parsedVal = parseInt(e.target.value);\n setFieldValue(dimensionsPath, isNaN(parsedVal) ? undefined : parsedVal);\n }}\n label={\"Vector Dimensions\"}\n value={dimensionsValue ?? \"\"}\n error={Boolean(dimensionsError)}\n />\n <FieldCaption error={Boolean(dimensionsError)}>\n {dimensionsError ?? \"The dimension size of the vector embeddings (e.g., 1536 for OpenAI text-embedding-3-small).\"}\n </FieldCaption>\n </div>\n );\n}\n","import React from \"react\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { GeneralPropertyValidation } from \"./validation/GeneralPropertyValidation\";\n\nexport function KeyValuePropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled}/>\n </ValidationPanel>\n\n </div>\n </>\n );\n}\n","import { FieldCaption, useCollectionRegistryController } from \"../../../_cms_internals\";\nimport React, { useCallback, useEffect } from \"react\";\nimport { useFormex } from \"@rebasepro/forms\";\n;\nimport {\n Select,\n SelectItem,\n TextField,\n Typography\n} from \"@rebasepro/ui\";\nimport { CollectionConfig, OnAction, RelationProperty } from \"@rebasepro/types\";\n\nimport { CollectionsSelect } from \"./ReferencePropertyField\";\n\nconst ON_ACTION_OPTIONS: OnAction[] = [\"cascade\", \"restrict\", \"no action\", \"set null\", \"set default\"];\n\nfunction getTargetSlug(target?: string | (() => string | { slug: string } | Record<string, unknown>)): string {\n if (!target) return \"\";\n if (typeof target === \"string\") return target;\n try {\n const resolved = target();\n if (typeof resolved === \"string\") return resolved;\n if (resolved && typeof resolved === \"object\" && \"slug\" in resolved && typeof resolved.slug === \"string\") {\n return resolved.slug;\n }\n return \"\";\n } catch {\n return \"\";\n }\n}\n\n/**\n * Property editor form for `type: \"relation\"` properties.\n *\n * This component edits the `RelationProperty` fields on the property itself (target, relationName, etc.)\n */\nexport function RelationPropertyField({\n disabled,\n showErrors\n}: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n const {\n values,\n errors,\n setFieldValue\n } = useFormex<RelationProperty & { id?: string }>();\n\n const collectionRegistry = useCollectionRegistryController();\n\n const relationName = values.relationName ?? \"\";\n const targetSlug = getTargetSlug(values.target);\n const cardinality = values.cardinality ?? \"one\";\n const direction = values.direction ?? \"owning\";\n const localKey = values.localKey ?? \"\";\n const foreignKeyOnTarget = values.foreignKeyOnTarget ?? \"\";\n const through = values.through;\n const throughTable = through?.table ?? \"\";\n const throughSourceColumn = through?.sourceColumn ?? \"\";\n const throughTargetColumn = through?.targetColumn ?? \"\";\n const onUpdate = values.onUpdate ?? \"no action\";\n const onDelete = values.onDelete ?? \"no action\";\n\n // Whether to show the junction table section\n const showThrough = cardinality === \"many\" && direction === \"owning\";\n // Whether to show the local key field\n const showLocalKey = direction === \"owning\" && cardinality === \"one\";\n // Whether to show the foreign key on target field\n const showForeignKey = direction === \"inverse\";\n\n const updateThrough = useCallback(\n (patch: Record<string, unknown>) => {\n const currentThrough = values.through ?? { table: \"\",\nsourceColumn: \"\",\ntargetColumn: \"\" };\n setFieldValue(\"through\", { ...currentThrough,\n...patch });\n },\n [values.through, setFieldValue]\n );\n\n // Auto-generate relationName from target collection slug\n useEffect(() => {\n if (targetSlug && !relationName) {\n setFieldValue(\"relationName\", targetSlug);\n }\n }, [targetSlug, relationName, setFieldValue]);\n\n const collections: CollectionConfig[] = collectionRegistry?.collections ?? [];\n\n return (\n <>\n {/* ─── Target Collection ─── */}\n <div className={\"col-span-12\"}>\n <CollectionsSelect\n disabled={disabled}\n pathPath={\"target\"}\n value={targetSlug}\n setFieldValue={(_, value) => {\n setFieldValue(\"target\", value);\n // Auto-generate relation name from target\n if (!relationName || relationName === targetSlug) {\n setFieldValue(\"relationName\", value);\n }\n }}\n error={showErrors && !targetSlug ? \"You must select a target collection\" : undefined}\n />\n <FieldCaption error={showErrors && !targetSlug}>\n {showErrors && !targetSlug\n ? \"You must select a target collection\"\n : \"The collection this relation points to\"}\n </FieldCaption>\n </div>\n\n {/* ─── Relation Name ─── */}\n <div className={\"col-span-12\"}>\n <TextField\n value={relationName}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n setFieldValue(\"relationName\", e.target.value)\n }\n label={\"Relation name\"}\n disabled={disabled}\n error={showErrors && !relationName}\n />\n <FieldCaption error={showErrors && !relationName}>\n {showErrors && !relationName\n ? \"Required\"\n : \"Identifier for this relation (used to link the property to the relation config)\"}\n </FieldCaption>\n </div>\n\n {/* ─── Cardinality ─── */}\n <div className={\"col-span-12 sm:col-span-6\"}>\n <Select\n value={cardinality}\n onValueChange={(v) => setFieldValue(\"cardinality\", v as \"one\" | \"many\")}\n label={\"Cardinality\"}\n disabled={disabled}\n fullWidth\n renderValue={(v) => v === \"one\" ? \"One (has-one)\" : \"Many (has-many)\"}\n >\n <SelectItem value={\"one\"}>\n <div>\n <Typography variant={\"body2\"}>One (has-one)</Typography>\n <Typography variant={\"caption\"} color={\"secondary\"}>\n This property references a single record\n </Typography>\n </div>\n </SelectItem>\n <SelectItem value={\"many\"}>\n <div>\n <Typography variant={\"body2\"}>Many (has-many)</Typography>\n <Typography variant={\"caption\"} color={\"secondary\"}>\n This property references multiple records\n </Typography>\n </div>\n </SelectItem>\n </Select>\n <FieldCaption>\n Whether the relation returns one or multiple records\n </FieldCaption>\n </div>\n\n {/* ─── Direction ─── */}\n <div className={\"col-span-12 sm:col-span-6\"}>\n <Select\n value={direction}\n onValueChange={(v) => setFieldValue(\"direction\", v as \"owning\" | \"inverse\")}\n label={\"Direction\"}\n disabled={disabled}\n fullWidth\n renderValue={(v) => v === \"owning\" ? \"Owning\" : \"Inverse\"}\n >\n <SelectItem value={\"owning\"}>\n <div>\n <Typography variant={\"body2\"}>Owning</Typography>\n <Typography variant={\"caption\"} color={\"secondary\"}>\n This table stores the foreign key (or owns the junction table)\n </Typography>\n </div>\n </SelectItem>\n <SelectItem value={\"inverse\"}>\n <div>\n <Typography variant={\"body2\"}>Inverse</Typography>\n <Typography variant={\"caption\"} color={\"secondary\"}>\n The target table stores the foreign key pointing back here\n </Typography>\n </div>\n </SelectItem>\n </Select>\n <FieldCaption>\n Which side of the relation owns the persistence\n </FieldCaption>\n </div>\n\n {/* ─── Local Key (owning + one) ─── */}\n {showLocalKey && (\n <div className={\"col-span-12\"}>\n <TextField\n value={localKey}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n setFieldValue(\"localKey\", e.target.value)\n }\n label={\"Local key (foreign key column on this table)\"}\n disabled={disabled}\n placeholder={\"e.g. author_id\"}\n />\n <FieldCaption>\n Column on this table that references the target&apos;s primary key\n </FieldCaption>\n </div>\n )}\n\n {/* ─── Foreign Key on Target (inverse) ─── */}\n {showForeignKey && (\n <div className={\"col-span-12\"}>\n <TextField\n value={foreignKeyOnTarget}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n setFieldValue(\"foreignKeyOnTarget\", e.target.value)\n }\n label={\"Foreign key on target table\"}\n disabled={disabled}\n placeholder={\"e.g. post_id\"}\n />\n <FieldCaption>\n Column on the target table that references this table&apos;s primary key\n </FieldCaption>\n </div>\n )}\n\n {/* ─── Junction Table (many + owning) ─── */}\n {showThrough && (\n <div className={\"col-span-12\"}>\n <Typography variant={\"label\"} className={\"mb-2\"}>\n Junction table (many-to-many)\n </Typography>\n <div className={\"grid grid-cols-12 gap-4\"}>\n <div className={\"col-span-12\"}>\n <TextField\n value={throughTable}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n updateThrough({ table: e.target.value })\n }\n label={\"Junction table name\"}\n disabled={disabled}\n placeholder={\"e.g. user_roles\"}\n />\n <FieldCaption>\n Name of the intermediate table that connects both collections\n </FieldCaption>\n </div>\n <div className={\"col-span-12 sm:col-span-6\"}>\n <TextField\n value={throughSourceColumn}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n updateThrough({ sourceColumn: e.target.value })\n }\n label={\"Source column\"}\n disabled={disabled}\n placeholder={\"e.g. user_id\"}\n />\n <FieldCaption>\n Column in the junction table referencing this table\n </FieldCaption>\n </div>\n <div className={\"col-span-12 sm:col-span-6\"}>\n <TextField\n value={throughTargetColumn}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n updateThrough({ targetColumn: e.target.value })\n }\n label={\"Target column\"}\n disabled={disabled}\n placeholder={\"e.g. role_id\"}\n />\n <FieldCaption>\n Column in the junction table referencing the target table\n </FieldCaption>\n </div>\n </div>\n </div>\n )}\n\n {/* ─── Cascade Actions ─── */}\n <div className={\"col-span-12 sm:col-span-6\"}>\n <Select\n value={onUpdate}\n onValueChange={(v) => setFieldValue(\"onUpdate\", v as OnAction)}\n label={\"On update\"}\n disabled={disabled}\n fullWidth\n renderValue={(v) => String(v)}\n >\n {ON_ACTION_OPTIONS.map((action) => (\n <SelectItem key={action} value={action}>\n {action}\n </SelectItem>\n ))}\n </Select>\n <FieldCaption>\n Action when the referenced record is updated\n </FieldCaption>\n </div>\n\n <div className={\"col-span-12 sm:col-span-6\"}>\n <Select\n value={onDelete}\n onValueChange={(v) => setFieldValue(\"onDelete\", v as OnAction)}\n label={\"On delete\"}\n disabled={disabled}\n fullWidth\n renderValue={(v) => String(v)}\n >\n {ON_ACTION_OPTIONS.map((action) => (\n <SelectItem key={action} value={action}>\n {action}\n </SelectItem>\n ))}\n </Select>\n <FieldCaption>\n Action when the referenced record is deleted\n </FieldCaption>\n </div>\n </>\n );\n}\n","import { ArrayProperty, BooleanProperty, DateProperty, MapProperty, NumberProperty, Property, PropertyConfig, StringProperty } from \"@rebasepro/types\";\nimport { mergeDeep } from \"@rebasepro/utils\";\n\n\nexport function updatePropertyFromWidget(propertyData: any,\n selectedWidgetId: string | undefined,\n propertyConfigs: Record<string, PropertyConfig>): Property {\n\n let updatedProperty;\n if (selectedWidgetId === \"text_field\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"text_field\",\n storage: undefined,\n ui: { multiline: undefined, markdown: undefined, url: undefined },\n email: undefined,\n enum: undefined,\n userSelect: undefined\n } as StringProperty\n );\n } else if (selectedWidgetId === \"user_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"user_select\",\n storage: undefined,\n ui: { multiline: undefined, markdown: undefined, url: undefined },\n email: undefined,\n enum: undefined,\n userSelect: true\n } as StringProperty\n );\n } else if (selectedWidgetId === \"multiline\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"multiline\",\n ui: { multiline: true, markdown: undefined, url: undefined },\n storage: undefined,\n email: undefined,\n enum: undefined,\n userSelect: undefined\n } as StringProperty\n );\n } else if (selectedWidgetId === \"markdown\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"markdown\",\n storage: undefined,\n ui: { multiline: undefined, markdown: true, url: undefined },\n email: undefined,\n userSelect: undefined\n } as StringProperty\n );\n } else if (selectedWidgetId === \"url\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"url\",\n storage: undefined,\n ui: { multiline: undefined, markdown: undefined, url: true },\n email: undefined,\n enum: undefined,\n userSelect: undefined\n } as StringProperty\n );\n } else if (selectedWidgetId === \"email\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"email\",\n storage: undefined,\n ui: { multiline: undefined, markdown: undefined, url: undefined },\n email: true,\n enum: undefined,\n userSelect: undefined\n } as StringProperty\n );\n } else if (selectedWidgetId === \"select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"select\",\n storage: undefined,\n ui: { multiline: undefined, markdown: undefined, url: undefined },\n email: undefined,\n enum: propertyData.enum ?? [],\n userSelect: undefined\n } as StringProperty\n );\n } else if (selectedWidgetId === \"multi_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"array\",\n propertyConfig: \"multi_select\",\n of: {\n type: \"string\",\n enum: propertyData.of?.enum ?? []\n }\n } as ArrayProperty\n );\n } else if (selectedWidgetId === \"number_input\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"number\",\n propertyConfig: \"number_input\",\n enum: undefined\n } as NumberProperty\n );\n } else if (selectedWidgetId === \"number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"number\",\n propertyConfig: \"number_select\",\n enum: propertyData.enum ?? []\n } as NumberProperty\n );\n } else if (selectedWidgetId === \"multi_number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"array\",\n propertyConfig: \"multi_number_select\",\n of: {\n type: \"number\",\n enum: propertyData.of?.enum ?? []\n }\n } as ArrayProperty\n );\n } else if (selectedWidgetId === \"file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"string\",\n propertyConfig: \"file_upload\",\n storage: {\n storagePath: \"/\"\n }\n } as StringProperty\n );\n } else if (selectedWidgetId === \"multi_file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"array\",\n propertyConfig: \"multi_file_upload\",\n of: {\n type: \"string\",\n storage: propertyData.of?.storage ?? {\n storagePath: \"/\"\n }\n }\n } as ArrayProperty\n );\n } else if (selectedWidgetId === \"group\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"map\",\n propertyConfig: \"group\",\n keyValue: false,\n properties: propertyData.properties ?? {}\n } as MapProperty\n );\n } else if (selectedWidgetId === \"key_value\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"map\",\n propertyConfig: \"key_value\",\n keyValue: true,\n properties: undefined\n } as MapProperty\n );\n } else if (selectedWidgetId === \"reference\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"reference\",\n propertyConfig: \"reference\"\n } as Property\n );\n } else if (selectedWidgetId === \"multi_references\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"array\",\n propertyConfig: \"multi_references\",\n of: {\n type: \"reference\"\n }\n } as ArrayProperty\n );\n } else if (selectedWidgetId === \"switch\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"boolean\",\n propertyConfig: \"switch\"\n } as BooleanProperty\n );\n } else if (selectedWidgetId === \"date_time\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"date\",\n propertyConfig: \"date_time\",\n mode: \"date_time\"\n } as DateProperty\n );\n } else if (selectedWidgetId === \"relation\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"relation\",\n propertyConfig: \"relation\",\n relationName: propertyData.relationName ?? \"\"\n } as Property\n );\n } else if (selectedWidgetId === \"repeat\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"array\",\n propertyConfig: \"repeat\"\n } as ArrayProperty\n );\n } else if (selectedWidgetId === \"block\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n type: \"array\",\n propertyConfig: \"block\",\n oneOf: {\n properties: {}\n }\n } as ArrayProperty\n );\n } else if (selectedWidgetId && propertyConfigs[selectedWidgetId]) {\n updatedProperty = {\n ...propertyConfigs[selectedWidgetId].property,\n propertyConfig: selectedWidgetId\n };\n }\n\n return updatedProperty;\n}\n","import React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@rebasepro/forms\";\n\nimport { Select, SelectItem, TextField } from \"@rebasepro/ui\";\n\nexport function UrlPropertyField({\n disabled,\n showErrors\n}: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\n\n const urlRawValue = getIn(values, \"url\");\n const urlValue = typeof urlRawValue === \"string\" ? urlRawValue : \"[NONE]\";\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <Select\n disabled={disabled}\n position={\"item-aligned\"}\n fullWidth={true}\n onValueChange={(value: string) => {\n if (value === \"[NONE]\")\n setFieldValue(\"url\", true);\n else\n setFieldValue(\"url\", value);\n }}\n label={\"Preview type\"}\n renderValue={(value: string) => {\n switch (value) {\n case \"image\":\n return \"Image\";\n case \"video\":\n return \"Video\";\n case \"audio\":\n return \"Audio\";\n default:\n return \"Display URL\";\n }\n }}\n value={urlValue ?? \"[NONE]\"}>\n <SelectItem value={\"[NONE]\"}>\n Display URL\n </SelectItem>\n <SelectItem value={\"image\"}>\n Image\n </SelectItem>\n <SelectItem value={\"video\"}>\n Video\n </SelectItem>\n <SelectItem value={\"audio\"}>\n Audio\n </SelectItem>\n </Select>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n max={true}\n min={true}\n trim={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={(getIn(values, \"defaultValue\") as string | undefined) ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { DEFAULT_FIELD_CONFIGS } from \"../../../../components/field_configs\";\nimport { PropertyConfigId, PropertyConfig } from \"@rebasepro/types\";\n\nexport const supportedFieldsIds: PropertyConfigId[] = [\n \"text_field\",\n \"multiline\",\n \"markdown\",\n \"url\",\n \"email\",\n \"user_select\",\n \"select\",\n \"multi_select\",\n \"number_input\",\n \"number_select\",\n \"multi_number_select\",\n \"file_upload\",\n \"multi_file_upload\",\n \"reference\",\n \"multi_references\",\n \"relation\",\n \"switch\",\n \"date_time\",\n \"group\",\n \"key_value\",\n \"repeat\",\n \"block\"\n];\n\nexport const supportedFields: Record<string, PropertyConfig> = Object.entries(DEFAULT_FIELD_CONFIGS)\n .filter(([id]) => supportedFieldsIds.includes(id as PropertyConfigId))\n .map(([id, config]) => ({ [id]: config }))\n .reduce((a, b) => ({ ...a,\n...b }), {});\n","\nimport React, { useCallback } from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { Field, getIn, useFormex } from \"@rebasepro/forms\";\nimport { useTranslation } from \"@rebasepro/app\";\n\nimport {\n BooleanSwitchWithLabel,\n DebouncedTextField,\n ExpandablePanel,\n SettingsIcon,\n TextField,\n Typography,\n UploadCloudIcon\n} from \"@rebasepro/ui\";\n\nexport function MarkdownPropertyField({\n disabled,\n showErrors\n}: {\n disabled: boolean;\n showErrors: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex();\n const { t } = useTranslation();\n\n const baseStoragePath = \"storage\";\n const baseMarkdownPath = \"markdown\";\n\n const metadata = `${baseStoragePath}.metadata`;\n const fileName = `${baseStoragePath}.fileName`;\n const maxSize = `${baseStoragePath}.maxSize`;\n const storagePath = `${baseStoragePath}.storagePath`;\n\n // Markdown config paths\n const htmlPath = `${baseMarkdownPath}.html`;\n const transformPastedTextPath = `${baseMarkdownPath}.transformPastedText`;\n\n const fileNameValue = (getIn(values, fileName) as string | undefined) ?? \"{rand}_{file}\";\n const storagePathValue = (getIn(values, storagePath) as string | undefined) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize);\n\n // Markdown config values - check if markdown is an object or boolean\n const markdownValue = getIn(values, \"markdown\");\n const isMarkdownObject = typeof markdownValue === \"object\" && markdownValue !== null;\n const htmlValue = isMarkdownObject ? (((markdownValue as Record<string, unknown>).html as boolean | undefined) ?? true) : true;\n const transformPastedTextValue = isMarkdownObject ? (((markdownValue as Record<string, unknown>).transformPastedText as boolean | undefined) ?? false) : false;\n\n const hasFilenameCallback = typeof fileNameValue === \"function\";\n const hasStoragePathCallback = typeof storagePathValue === \"function\";\n\n // Handler to update markdown config - converts from boolean to object if needed\n const updateMarkdownConfig = useCallback((key: \"html\" | \"transformPastedText\", value: boolean) => {\n const currentMarkdown = getIn(values, \"markdown\");\n if (typeof currentMarkdown === \"object\" && currentMarkdown !== null) {\n // Already an object, update the key\n setFieldValue(`markdown.${key}`, value);\n } else {\n // Convert from boolean to object\n const defaultConfig = {\n html: true,\n transformPastedText: false\n };\n setFieldValue(\"markdown\", {\n ...defaultConfig,\n [key]: value\n });\n }\n }, [values, setFieldValue]);\n\n return (\n <>\n <div className={\"col-span-12\"}>\n\n <ValidationPanel>\n\n <StringPropertyValidation disabled={disabled}\n length={true}\n lowercase={true}\n max={true}\n min={true}\n trim={true}\n uppercase={true}\n showErrors={showErrors}/>\n\n </ValidationPanel>\n\n </div>\n\n <div className={\"col-span-12\"}>\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-surface-500\">\n <SettingsIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-4\">\n Paste behavior\n </Typography>\n </div>\n }>\n\n <div className={\"flex flex-col gap-2 p-4\"}>\n <BooleanSwitchWithLabel\n size={\"small\"}\n disabled={disabled}\n value={!htmlValue}\n onValueChange={(value) => updateMarkdownConfig(\"html\", !value)}\n label={t(\"markdown_strip_html\")}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Remove HTML tags and inline styles when pasting content from external sources\n </Typography>\n\n <BooleanSwitchWithLabel\n size={\"small\"}\n disabled={disabled}\n value={transformPastedTextValue}\n onValueChange={(value) => updateMarkdownConfig(\"transformPastedText\", value)}\n label={t(\"markdown_convert_pasted\")}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n Convert rich text (from Google Docs, Word, etc.) to clean markdown format\n </Typography>\n </div>\n </ExpandablePanel>\n </div>\n\n <div className={\"col-span-12\"}>\n <ExpandablePanel\n title={\n <div className=\"flex flex-row text-surface-500\">\n <UploadCloudIcon/>\n <Typography variant={\"subtitle2\"}\n className=\"ml-4\">\n File upload config\n </Typography>\n </div>\n }>\n\n <div className={\"grid grid-cols-12 gap-2 p-4\"}>\n\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={t(\"storage_file_name\")}\n size={\"small\"}\n disabled={hasFilenameCallback || disabled}\n value={hasFilenameCallback ? \"-\" : fileNameValue}\n />\n </div>\n <div className={\"col-span-12\"}>\n <Field name={storagePath}\n as={DebouncedTextField}\n label={t(\"storage_path\")}\n disabled={hasStoragePathCallback || disabled}\n size={\"small\"}\n value={hasStoragePathCallback ? \"-\" : storagePathValue}\n />\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n <p>You can use the following placeholders in\n the file name\n and storage path values:</p>\n <ul>\n <li>{\"{file} - Full name of the uploaded file\"}</li>\n <li>{\"{file.name} - Name of the uploaded file without extension\"}</li>\n <li>{\"{file.ext} - Extension of the uploaded file\"}</li>\n <li>{\"{entityId} - ID of the entity\"}</li>\n <li>{\"{propertyKey} - ID of this field\"}</li>\n <li>{\"{path} - Path of this entity\"}</li>\n <li>{\"{rand} - Random value used to avoid name collisions\"}</li>\n </ul>\n </Typography>\n\n <Typography variant={\"caption\"} className={\"ml-3.5 mt-1 mb-2\"}>\n When using Markdown, the URL of the uploaded files are always saved in the text value\n (not\n the path).\n </Typography>\n </div>\n\n <div className={\"col-span-12\"}>\n <DebouncedTextField name={maxSize}\n type={\"number\"}\n label={t(\"storage_max_size\")}\n size={\"small\"}\n value={maxSizeValue !== undefined && maxSizeValue !== null ? maxSizeValue.toString() : \"\"}\n onChange={(e) => {\n const value = e.target.value;\n if (value === \"\") setFieldValue(maxSize, undefined);\n else setFieldValue(maxSize, parseInt(value));\n }}\n />\n </div>\n\n </div>\n </ExpandablePanel>\n </div>\n\n <div className={\"col-span-12\"}>\n\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={t(\"default_value\")}\n value={(getIn(values, \"defaultValue\") as string | undefined) ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","\nimport React, { useCallback, useDeferredValue, useEffect, useMemo, useRef, useState } from \"react\";\nimport { deepEqual as equal } from \"fast-equals\"\n\nimport { Formex, FormexController, getIn, useCreateFormex } from \"@rebasepro/forms\";\nimport { ConfirmationDialog } from \"@rebasepro/app\";\nimport { DEFAULT_FIELD_CONFIGS, getFieldConfig, getFieldId } from \"../../../components/field_configs\";\nimport { PropertyConfigBadge } from \"../../../components/PropertyConfigBadge\";\nimport { CollectionConfig, Property, PropertyConfig, PropertyConfigId } from \"@rebasepro/types\";\nimport type { PropertyTypePreset, PropertyType } from \"../../extensibility_types\";\nimport { toSerializableProperty, toSerializableCollectionConfig } from \"../../serializable_utils\";\nimport type { SerializableProperty, SerializableCollectionConfig } from \"../../serializable_types\";\nimport { isPropertyBuilder } from \"@rebasepro/common\";\nimport {\n AlertTriangleIcon,\n Button,\n Card,\n cls,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundMixin,\n IconButton,\n iconSize,\n InfoLabel,\n Tooltip,\n Trash2Icon,\n Typography\n} from \"@rebasepro/ui\";\nimport { EnumPropertyField } from \"./properties/EnumPropertyField\";\nimport { StoragePropertyField } from \"./properties/StoragePropertyField\";\nimport { MapPropertyField } from \"./properties/MapPropertyField\";\nimport { RepeatPropertyField } from \"./properties/RepeatPropertyField\";\nimport { CommonPropertyFields } from \"./properties/CommonPropertyFields\";\nimport { StringPropertyField } from \"./properties/StringPropertyField\";\nimport { BooleanPropertyField } from \"./properties/BooleanPropertyField\";\nimport { BlockPropertyField } from \"./properties/BlockPropertyField\";\nimport { NumberPropertyField } from \"./properties/NumberPropertyField\";\nimport { ReferencePropertyField } from \"./properties/ReferencePropertyField\";\nimport { DateTimePropertyField } from \"./properties/DateTimePropertyField\";\nimport { AdvancedPropertyValidation } from \"./properties/advanced/AdvancedPropertyValidation\";\nimport { VectorPropertyField } from \"./properties/VectorPropertyField\";\n\nimport { KeyValuePropertyField } from \"./properties/KeyValuePropertyField\";\nimport { RelationPropertyField } from \"./properties/RelationPropertyField\";\nimport { updatePropertyFromWidget } from \"./utils/update_property_for_widget\";\nimport { UrlPropertyField } from \"./properties/UrlPropertyField\";\nimport { supportedFields } from \"./utils/supported_fields\";\nimport { MarkdownPropertyField } from \"./properties/MarkdownPropertyField\";\nimport { isValidRegExp, mergeDeep } from \"@rebasepro/utils\";\n\nexport type PropertyWithId = Property & {\n id?: string;\n conditions?: import(\"@rebasepro/types\").PropertyConditions;\n};\n\nexport type OnPropertyChangedParams = {\n id?: string,\n property: Property,\n namespace?: string,\n previousId?: string\n};\n\nexport type PropertyFormProps = {\n includeIdAndName?: boolean;\n existingProperty: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n inArray: boolean;\n propertyKey?: string;\n propertyNamespace?: string;\n property?: Property;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onPropertyChangedImmediate?: boolean;\n onDismiss?: () => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n initialErrors?: Record<string, any>;\n existingPropertyKeys?: string[];\n forceShowErrors?: boolean;\n allowDataInference: boolean;\n getData?: () => Promise<object[]>;\n getController?: (formex: FormexController<PropertyWithId>) => void;\n propertyConfigs: Record<string, PropertyConfig>;\n propertyTypePresets?: PropertyTypePreset[];\n hiddenPropertyTypes?: PropertyType[];\n renderExtraPropertyFields?: (params: {\n metadata: Record<string, unknown>;\n onMetadataChange: (key: string, value: unknown) => void;\n property: SerializableProperty;\n collection: SerializableCollectionConfig;\n }) => React.ReactNode;\n collectionValues?: CollectionConfig;\n\n};\n\nexport const PropertyForm = React.memo(\n function PropertyForm(props: PropertyFormProps) {\n\n const {\n includeIdAndName = true,\n autoOpenTypeSelect,\n existingProperty,\n autoUpdateId,\n inArray,\n propertyKey,\n existingPropertyKeys,\n propertyNamespace,\n property,\n onPropertyChanged,\n onPropertyChangedImmediate = true,\n onDismiss,\n onDelete,\n onError,\n initialErrors,\n forceShowErrors,\n allowDataInference,\n getController,\n getData,\n propertyConfigs,\n propertyTypePresets,\n hiddenPropertyTypes,\n renderExtraPropertyFields,\n collectionValues\n } = props;\n\n const initialValue: PropertyWithId = {\n id: \"\",\n name: \"\"\n } as PropertyWithId;\n\n const disabled = Boolean(property && isPropertyBuilder(property));\n\n const lastSubmittedProperty = useRef<OnPropertyChangedParams | undefined>(property ? {\n id: propertyKey,\n previousId: propertyKey,\n property\n } : undefined);\n\n const doOnPropertyChanged = ({\n id,\n property\n }: OnPropertyChangedParams) => {\n const params = {\n id,\n previousId: lastSubmittedProperty.current?.id,\n property,\n namespace: propertyNamespace\n };\n lastSubmittedProperty.current = params;\n onPropertyChanged?.(params);\n };\n\n const formexController = useCreateFormex<PropertyWithId>({\n debugId: \"PROPERTY_FORM\",\n initialValues: property\n ? { id: propertyKey,\n...property } as PropertyWithId\n : initialValue,\n initialErrors,\n validateOnChange: true,\n validateOnInitialRender: true,\n onSubmit: (newPropertyWithId, controller) => {\n const {\n id,\n ...property\n } = newPropertyWithId;\n doOnPropertyChanged({\n id,\n property: property as Property\n });\n if (!existingProperty)\n controller.resetForm({ values: initialValue });\n },\n validation: (values) => {\n const errors: Record<string, any> = {};\n if (includeIdAndName) {\n if (!values.name) {\n errors.name = \"Required\";\n } else {\n const nameError = validateName(values.name);\n if (nameError)\n errors.name = nameError;\n }\n if (!values.id) {\n errors.id = \"Required\";\n } else {\n const idError = validateId(values.id, existingPropertyKeys);\n if (idError)\n errors.id = idError;\n }\n }\n\n if (values.type === \"string\") {\n if (values.validation?.matches && !isValidRegExp(values.validation?.matches.toString())) {\n errors.validation = {\n matches: \"Invalid regular expression\"\n }\n }\n }\n if (values.type === \"reference\" && !values.path) {\n errors.slug = \"You must specify a target collection for the field\";\n }\n if (values.type === \"vector\" && (!values.dimensions || isNaN(Number(values.dimensions)) || Number(values.dimensions) <= 0)) {\n errors.dimensions = \"Vector dimensions must be a positive number\";\n }\n if (values.propertyConfig === \"repeat\") {\n if (!(\"of\" in values) || !values.of) {\n errors.of = \"You need to specify a repeat field\";\n }\n }\n if (values.propertyConfig === \"block\") {\n if (!(\"oneOf\" in values) || !values.oneOf) {\n errors.oneOf = \"You need to specify the properties of this block\";\n }\n }\n return errors;\n }\n });\n\n useEffect(() => {\n getController?.(formexController);\n }, [formexController, getController]);\n\n return <Formex value={formexController}>\n <PropertyEditFormFields\n onPropertyChanged={onPropertyChangedImmediate\n ? doOnPropertyChanged\n : undefined}\n onDelete={onDelete}\n includeIdAndTitle={includeIdAndName}\n propertyNamespace={propertyNamespace}\n onError={onError}\n onDismiss={onDismiss}\n showErrors={forceShowErrors || formexController.submitCount > 0}\n existing={existingProperty}\n autoUpdateId={autoUpdateId}\n inArray={inArray}\n autoOpenTypeSelect={autoOpenTypeSelect}\n disabled={disabled}\n getData={getData}\n allowDataInference={allowDataInference}\n propertyConfigs={propertyConfigs}\n propertyTypePresets={propertyTypePresets}\n hiddenPropertyTypes={hiddenPropertyTypes}\n renderExtraPropertyFields={renderExtraPropertyFields}\n collectionValues={collectionValues}\n {...formexController}/>\n </Formex>;\n }, (a, b) =>\n a.getData === b.getData &&\n a.propertyKey === b.propertyKey &&\n a.propertyNamespace === b.propertyNamespace &&\n a.includeIdAndName === b.includeIdAndName &&\n a.autoOpenTypeSelect === b.autoOpenTypeSelect &&\n a.autoUpdateId === b.autoUpdateId &&\n a.existingPropertyKeys === b.existingPropertyKeys &&\n a.existingProperty === b.existingProperty\n);\n\nexport function PropertyFormDialog({\n open,\n onCancel,\n onOkClicked,\n onPropertyChanged,\n getData,\n ...formProps\n}: PropertyFormProps & {\n open?: boolean;\n onOkClicked?: () => void;\n onCancel?: () => void;\n}) {\n const formexRef = useRef<FormexController<PropertyWithId>>(undefined);\n const getController = (helpers: FormexController<PropertyWithId>) => {\n formexRef.current = helpers;\n };\n\n return <Dialog\n open={open ?? false}\n maxWidth={\"xl\"}\n fullWidth={true}\n >\n <form noValidate={true}\n autoComplete={\"off\"}\n onSubmit={(e) => {\n e.preventDefault();\n e.stopPropagation();\n formexRef.current?.handleSubmit(e)\n }}>\n <DialogTitle hidden>Property edit view</DialogTitle>\n <DialogContent>\n\n <PropertyForm {...formProps}\n onDismiss={onCancel}\n onPropertyChanged={(params) => {\n onPropertyChanged?.(params);\n onOkClicked?.();\n }}\n\n onPropertyChangedImmediate={false}\n getController={getController}\n getData={getData}\n />\n </DialogContent>\n\n <DialogActions>\n\n {onCancel && <Button\n variant={\"text\"}\n onClick={() => {\n onCancel();\n formexRef.current?.resetForm();\n }}>\n Cancel\n </Button>}\n\n <Button type={\"submit\"}>\n Ok\n </Button>\n </DialogActions>\n </form>\n </Dialog>;\n\n}\n\nfunction PropertyEditFormFields({\n values,\n errors,\n setValues,\n existing,\n autoUpdateId = false,\n autoOpenTypeSelect,\n includeIdAndTitle,\n onPropertyChanged,\n onDelete,\n propertyNamespace,\n onDismiss,\n onError,\n showErrors,\n disabled,\n inArray,\n getData,\n allowDataInference,\n propertyConfigs,\n propertyTypePresets,\n hiddenPropertyTypes,\n renderExtraPropertyFields,\n collectionValues\n}: {\n includeIdAndTitle?: boolean;\n existing: boolean;\n autoUpdateId?: boolean;\n autoOpenTypeSelect: boolean;\n propertyNamespace?: string;\n onDismiss?: () => void;\n onPropertyChanged?: (params: OnPropertyChangedParams) => void;\n onDelete?: (id?: string, namespace?: string) => void;\n onError?: (id: string, namespace?: string, error?: Record<string, any>) => void;\n showErrors: boolean;\n inArray: boolean;\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>;\n propertyTypePresets?: PropertyTypePreset[];\n hiddenPropertyTypes?: PropertyType[];\n renderExtraPropertyFields?: PropertyFormProps[\"renderExtraPropertyFields\"];\n collectionValues?: CollectionConfig;\n\n} & FormexController<PropertyWithId>) {\n\n const [selectOpen, setSelectOpen] = useState(autoOpenTypeSelect);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedFieldConfigId, setSelectedFieldConfigId] = useState<string | undefined>(values?.type ? getFieldId(values) : undefined);\n\n const deferredValues = useDeferredValue(values);\n const nameFieldRef = useRef<HTMLInputElement>(null);\n\n const lastSubmittedProperty = useRef<object>(values);\n\n const selectedWidgetError = showErrors && getIn(errors, \"selectedWidget\");\n\n useEffect(() => {\n if (onPropertyChanged) {\n if ((!includeIdAndTitle || deferredValues.id)) {\n const {\n id,\n ...property\n } = deferredValues;\n if (!equal(deferredValues, lastSubmittedProperty.current)) {\n onPropertyChanged({\n id,\n property,\n namespace: propertyNamespace\n });\n lastSubmittedProperty.current = deferredValues;\n }\n }\n }\n }, [deferredValues, includeIdAndTitle, propertyNamespace]);\n\n useEffect(() => {\n if (values?.id && onError) {\n onError(values?.id, propertyNamespace, errors);\n }\n }, [errors, propertyNamespace, values?.id]);\n\n const onWidgetSelectChanged = (newSelectedWidgetId: PropertyConfigId) => {\n setSelectedFieldConfigId(newSelectedWidgetId);\n setValues(updatePropertyFromWidget(values, newSelectedWidgetId, propertyConfigs));\n // Ugly hack to autofocus the name field\n setTimeout(() => {\n nameFieldRef.current?.focus();\n }, 0);\n };\n\n const onPresetSelected = useCallback((preset: PropertyTypePreset) => {\n // Map baseType to the default widgetId\n const BASE_TYPE_TO_WIDGET: Record<string, string> = {\n \"string\": \"text_field\",\n \"number\": \"number_input\",\n \"boolean\": \"switch\",\n \"date\": \"date_time\",\n \"reference\": \"reference\",\n \"relation\": \"relation\",\n \"map\": \"group\",\n \"array\": \"repeat\",\n \"vector\": \"vector_input\",\n \"geopoint\": \"text_field\",\n \"binary\": \"text_field\",\n };\n const widgetId = BASE_TYPE_TO_WIDGET[preset.baseType] || \"text_field\";\n setSelectedFieldConfigId(widgetId);\n // Merge preset defaults into the property\n const updatedValues = updatePropertyFromWidget(values, widgetId, propertyConfigs);\n const mergedValues = { ...updatedValues, ...preset.defaults, propertyConfig: widgetId };\n setValues(mergedValues as PropertyWithId);\n }, [values, propertyConfigs, setValues]);\n\n let childComponent;\n if (selectedFieldConfigId === \"text_field\" ||\n selectedFieldConfigId === \"multiline\" ||\n selectedFieldConfigId === \"user_select\" ||\n selectedFieldConfigId === \"email\") {\n childComponent =\n <StringPropertyField widgetId={selectedFieldConfigId}\n disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"url\") {\n childComponent =\n <UrlPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"markdown\") {\n childComponent =\n <MarkdownPropertyField disabled={disabled}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"select\" ||\n selectedFieldConfigId === \"number_select\") {\n childComponent = <EnumPropertyField\n multiselect={false}\n allowDataInference={allowDataInference}\n updateIds={!existing}\n disabled={disabled}\n getData={getData}\n propertyNamespace={propertyNamespace}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"multi_select\" ||\n selectedFieldConfigId === \"multi_number_select\") {\n childComponent = <EnumPropertyField\n multiselect={true}\n updateIds={!existing}\n disabled={disabled}\n allowDataInference={allowDataInference}\n getData={getData}\n propertyNamespace={propertyNamespace}\n showErrors={showErrors}/>;\n } else if (selectedFieldConfigId === \"file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_file_upload\") {\n childComponent =\n <StoragePropertyField existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"switch\") {\n childComponent = <BooleanPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"number_input\") {\n childComponent = <NumberPropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"group\") {\n childComponent =\n <MapPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"block\") {\n childComponent =\n <BlockPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"reference\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={false}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"date_time\") {\n childComponent = <DateTimePropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"multi_references\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n multiple={true}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"repeat\") {\n childComponent =\n <RepeatPropertyField showErrors={showErrors}\n existing={existing}\n getData={getData}\n allowDataInference={allowDataInference}\n disabled={disabled}\n propertyConfigs={propertyConfigs}/>;\n } else if (selectedFieldConfigId === \"key_value\") {\n childComponent =\n <KeyValuePropertyField disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"relation\") {\n childComponent =\n <RelationPropertyField\n showErrors={showErrors}\n disabled={disabled}/>;\n } else if (selectedFieldConfigId === \"vector_input\") {\n childComponent =\n <VectorPropertyField\n disabled={disabled}/>;\n } else {\n childComponent = null;\n }\n\n return (\n <>\n {disabled && <InfoLabel mode={\"warn\"}>\n <Typography>This property can&apos;t be edited</Typography>\n <Typography variant={\"caption\"}>\n You may not have permission to\n edit it or it is defined in code and cannot be modified.\n </Typography>\n </InfoLabel>}\n\n <div className=\"flex mt-2 items-start justify-between\">\n <div className={\"w-full flex flex-col gap-2\"}>\n <WidgetSelectView\n initialProperty={values}\n value={selectedFieldConfigId as PropertyConfigId}\n onValueChange={(value) => onWidgetSelectChanged(value as PropertyConfigId)}\n open={selectOpen}\n onOpenChange={(open, hasValue) => {\n if (!hasValue) {\n onDismiss?.();\n }\n setSelectOpen(open);\n }}\n disabled={disabled}\n showError={Boolean(selectedWidgetError)}\n existing={existing}\n propertyConfigs={propertyConfigs}\n inArray={inArray}\n propertyTypePresets={propertyTypePresets}\n hiddenPropertyTypes={hiddenPropertyTypes}\n onPresetSelected={onPresetSelected}/>\n\n {!!selectedWidgetError &&\n <Typography variant=\"caption\"\n className={\"ml-3.5\"}\n color={\"error\"}>Required</Typography>}\n\n {/*<Typography variant=\"caption\" className={\"ml-3.5\"}>Define your own custom properties and*/}\n {/* components</Typography>*/}\n\n </div>\n\n {onDelete && values?.id &&\n <IconButton\n variant={\"ghost\"}\n className=\"mt-1 shrink-0\"\n disabled={disabled}\n onClick={() => setDeleteDialogOpen(true)}>\n <Trash2Icon size={iconSize.small}/>\n </IconButton>}\n </div>\n\n <div className={\"grid grid-cols-12 gap-y-8 mt-6 mb-8\"}>\n {includeIdAndTitle &&\n <CommonPropertyFields showErrors={showErrors}\n disabledId={existing}\n isNewProperty={!existing}\n disabled={disabled}\n autoUpdateId={autoUpdateId}\n ref={nameFieldRef}/>}\n\n {childComponent}\n\n {renderExtraPropertyFields && collectionValues && (\n <div className=\"col-span-12 mt-4 px-2\">\n {renderExtraPropertyFields({\n metadata: ((values as unknown as Record<string, unknown>).metadata as Record<string, unknown>) ?? {},\n onMetadataChange: (key: string, value: unknown) => {\n const currentMetadata = ((values as unknown as Record<string, unknown>).metadata as Record<string, unknown>) ?? {};\n setValues({\n ...values,\n metadata: { ...currentMetadata, [key]: value },\n } as PropertyWithId);\n },\n property: toSerializableProperty(values as Property),\n collection: toSerializableCollectionConfig(collectionValues),\n })}\n </div>\n )}\n\n <div className={\"col-span-12\"}>\n <AdvancedPropertyValidation disabled={disabled}/>\n </div>\n </div>\n\n {onDelete &&\n <ConfirmationDialog open={deleteDialogOpen}\n onAccept={() => onDelete(values?.id, propertyNamespace)}\n onCancel={() => setDeleteDialogOpen(false)}\n title={<div>Delete this property?</div>}\n body={\n <div> This will <b>not delete any\n data</b>, only modify the\n collection.</div>\n }/>}\n\n </>\n );\n}\n\nconst idRegEx = /^[a-zA-Z_][a-zA-Z0-9_]*$/;\n\nfunction validateId(value?: string, existingPropertyKeys?: string[]) {\n\n let error;\n if (!value) {\n error = \"You must specify an id for the field\";\n }\n if (value && !value.match(idRegEx)) {\n error = \"The id can only contain letters, numbers and underscores (_), and not start with a number\";\n }\n if (value && existingPropertyKeys && existingPropertyKeys.includes(value)) {\n error = \"There is another field with this ID already\";\n }\n return error;\n}\n\nfunction validateName(value: string) {\n let error;\n if (!value) {\n error = \"You must specify a title for the field\";\n }\n return error;\n}\n\nconst WIDGET_TYPE_MAP: Record<PropertyConfigId, string> = {\n text_field: \"Text\",\n multiline: \"Text\",\n markdown: \"Text\",\n url: \"Text\",\n email: \"Text\",\n switch: \"Boolean\",\n user_select: \"Users\",\n select: \"Select\",\n multi_select: \"Select\",\n number_input: \"Number\",\n number_select: \"Select\",\n multi_number_select: \"Select\",\n file_upload: \"File\",\n multi_file_upload: \"File\",\n relation: \"Relation\",\n reference: \"Reference\",\n multi_references: \"Reference\",\n date_time: \"Date\",\n group: \"Group\",\n key_value: \"Group\",\n repeat: \"Array\",\n custom_array: \"Array\",\n block: \"Group\",\n vector_input: \"Number\"\n};\n\nconst WIDGET_BASE_TYPE_MAP: Record<string, PropertyType> = {\n text_field: \"string\",\n multiline: \"string\",\n markdown: \"string\",\n url: \"string\",\n email: \"string\",\n select: \"string\",\n multi_select: \"string\",\n file_upload: \"string\",\n multi_file_upload: \"string\",\n user_select: \"string\",\n number_input: \"number\",\n number_select: \"number\",\n multi_number_select: \"number\",\n switch: \"boolean\",\n date_time: \"date\",\n reference: \"reference\",\n multi_references: \"reference\",\n relation: \"relation\",\n group: \"map\",\n key_value: \"map\",\n block: \"map\",\n repeat: \"array\",\n custom_array: \"array\",\n vector_input: \"vector\",\n};\n\nfunction WidgetSelectView({\n initialProperty,\n value,\n onValueChange,\n open,\n onOpenChange,\n disabled,\n showError,\n existing,\n propertyConfigs,\n inArray,\n propertyTypePresets,\n hiddenPropertyTypes,\n onPresetSelected\n}: {\n initialProperty?: PropertyWithId,\n value?: PropertyConfigId,\n onValueChange: (value: string) => void,\n showError: boolean,\n open: boolean,\n onOpenChange: (open: boolean, hasValue: boolean) => void,\n disabled: boolean,\n existing: boolean,\n propertyConfigs: Record<string, PropertyConfig>,\n inArray?: boolean,\n propertyTypePresets?: PropertyTypePreset[],\n hiddenPropertyTypes?: PropertyType[],\n onPresetSelected?: (preset: PropertyTypePreset) => void,\n}) {\n\n const allSupportedFields = Object.entries(supportedFields).concat(Object.entries(propertyConfigs));\n\n const filteredFields = hiddenPropertyTypes && !propertyTypePresets\n ? allSupportedFields.filter(([key]) => {\n const baseType = WIDGET_BASE_TYPE_MAP[key];\n return !baseType || !hiddenPropertyTypes.includes(baseType);\n })\n : allSupportedFields;\n\n const displayedWidgets = (inArray\n ? filteredFields.filter(([_, propertyConfig]) => !isPropertyBuilder(propertyConfig.property as Property) && (propertyConfig.property as Property)?.type !== \"array\")\n : filteredFields)\n .map(([key, propertyConfig]) => ({\n [key]: propertyConfig\n }))\n .reduce((a, b) => {\n return {\n ...a,\n ...b\n }\n }, {});\n\n const activePreset = useMemo(() => {\n if (!propertyTypePresets || !initialProperty) return undefined;\n return propertyTypePresets.find(p => p.detect?.(toSerializableProperty(initialProperty as Property)));\n }, [propertyTypePresets, initialProperty]);\n\n const key = value;\n const propertyConfig = key ? (DEFAULT_FIELD_CONFIGS[key] ?? propertyConfigs[key]) : undefined;\n const baseProperty = propertyConfig?.property;\n const baseFieldConfig = baseProperty && !isPropertyBuilder(baseProperty as Property) ? getFieldConfig(baseProperty as Property, propertyConfigs) : undefined;\n const computedFieldConfig = baseFieldConfig && propertyConfig ? mergeDeep(baseFieldConfig, propertyConfig) : propertyConfig;\n\n const groups: string[] = [...new Set(Object.keys(displayedWidgets).map(key => {\n const group = WIDGET_TYPE_MAP[key as PropertyConfigId];\n if (group) {\n return group;\n }\n return \"Custom/Other\"\n }))];\n\n return <>\n <div\n onClick={() => {\n if (!disabled) {\n onOpenChange(!open, Boolean(value));\n }\n }}\n className={cls(\n \"select-none rounded-md text-sm py-2 px-1 transition-colors duration-200\",\n !disabled && \"hover:bg-surface-50 dark:hover:bg-surface-800 cursor-pointer\",\n \"relative flex items-center mb-2\"\n )}>\n {!value && <em>Select a property widget</em>}\n {value && computedFieldConfig && <div\n className={cls(\n \"flex items-center\")}>\n <div className={\"mr-4\"}>\n <PropertyConfigBadge propertyConfig={computedFieldConfig}/>\n </div>\n <div className={\"flex flex-col items-start text-left\"}>\n <div className=\"font-semibold text-text-primary dark:text-text-primary-dark tracking-tight\">{computedFieldConfig.name}</div>\n <Typography variant={\"caption\"}\n className=\"text-text-secondary dark:text-text-secondary-dark mt-0.5\">\n {computedFieldConfig.description}\n </Typography>\n </div>\n </div>}\n </div>\n <Dialog open={open}\n onOpenChange={(open: boolean) => onOpenChange(open, Boolean(value))}\n maxWidth={\"4xl\"}>\n <DialogTitle>\n {propertyTypePresets ? \"Select a property type\" : \"Select a property widget\"}\n </DialogTitle>\n <DialogContent>\n {propertyTypePresets ? (\n <div className={\"grid grid-cols-1 md:grid-cols-2 gap-x-4 gap-y-2 mt-4\"}>\n {propertyTypePresets.map((preset) => (\n <Card\n key={preset.id}\n onClick={() => {\n onPresetSelected?.(preset);\n onOpenChange(false, true);\n }}\n className={cls(\n \"flex flex-row items-center px-4 py-2 m-1\",\n activePreset?.id === preset.id && \"ring-2 ring-primary\"\n )}>\n <div className={cls(\"flex flex-row items-center text-base min-h-[48px]\")}>\n {preset.icon && (\n <div className={\"mr-4 text-2xl\"}>\n {typeof preset.icon === \"string\" ? preset.icon : preset.icon}\n </div>\n )}\n <div>\n <Typography variant={\"label\"}>{preset.label}</Typography>\n </div>\n </div>\n </Card>\n ))}\n </div>\n ) : (\n <div>\n {groups.map(group => {\n return <div key={group} className={\"mt-4\"}>\n <Typography variant={\"label\"}>{group}</Typography>\n <div className={\"grid grid-cols-1 md:grid-cols-2 gap-x-4 gap-y-2 mt-4\"}>\n {Object.entries(displayedWidgets).map(([key, propertyConfig]) => {\n const groupKey = WIDGET_TYPE_MAP[key as PropertyConfigId];\n if (groupKey === group) {\n return <WidgetSelectViewItem\n key={key}\n initialProperty={initialProperty}\n onClick={() => {\n onValueChange(key);\n onOpenChange(false, true);\n }}\n propertyConfig={propertyConfig}\n existing={existing}/>;\n }\n return null;\n })}\n </div>\n </div>;\n })}\n {/*{displayedWidgets.map(([key, propertyConfig]) => {*/}\n {/* return <WidgetSelectViewItem*/}\n {/* key={key}*/}\n {/* initialProperty={initialProperty}*/}\n {/* onClick={() => {*/}\n {/* onValueChange(key);*/}\n {/* onOpenChange(false);*/}\n {/* }}*/}\n {/* propertyConfig={propertyConfig}*/}\n {/* existing={existing}/>;*/}\n {/*})}*/}\n </div>\n )}\n </DialogContent>\n </Dialog>\n </>;\n}\n\nexport interface PropertySelectItemProps {\n onClick?: () => void;\n initialProperty?: PropertyWithId;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function WidgetSelectViewItem({\n onClick,\n initialProperty,\n // optionDisabled,\n propertyConfig,\n existing\n}: PropertySelectItemProps) {\n const baseProperty = propertyConfig.property;\n const shouldWarnChangingtype = existing && !isPropertyBuilder(baseProperty as Property) && (baseProperty as Property).type !== initialProperty?.type;\n\n return <Card\n onClick={onClick}\n className={\"flex flex-row items-center px-4 py-2 m-1\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\"\n )}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig} disabled={shouldWarnChangingtype}/>\n </div>\n <div>\n <div className={\"flex flex-row gap-2 items-center\"}>\n {shouldWarnChangingtype && <Tooltip\n title={\"This widget uses a different data type than the initially selected widget. This can cause errors with existing data.\"}>\n <AlertTriangleIcon size={iconSize.smallest} className={\"w-4\"}/>\n </Tooltip>}\n <Typography\n variant={\"label\"}\n color={shouldWarnChangingtype ? \"secondary\" : undefined}>{propertyConfig.name}</Typography>\n </div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"max-w-sm\"}>\n {propertyConfig.description}\n </Typography>\n\n </div>\n </div>\n </Card>\n}\n"],"mappings":"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"}