@firecms/collection_editor 3.1.0-canary.9e89e98 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +372 -325
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +371 -324
- package/dist/index.umd.js.map +1 -1
- package/dist/ui/collection_editor/AICollectionGeneratorPopover.d.ts +5 -1
- package/dist/ui/collection_editor/CollectionEditorDialog.d.ts +4 -0
- package/dist/ui/collection_editor/CollectionEditorWelcomeView.d.ts +2 -1
- package/package.json +12 -12
- package/src/ConfigControllerProvider.tsx +1 -0
- package/src/ui/collection_editor/AICollectionGeneratorPopover.tsx +18 -1
- package/src/ui/collection_editor/CollectionDetailsForm.tsx +3 -2
- package/src/ui/collection_editor/CollectionEditorDialog.tsx +13 -4
- package/src/ui/collection_editor/CollectionEditorWelcomeView.tsx +4 -1
- package/src/ui/collection_editor/GeneralSettingsForm.tsx +9 -7
- package/src/ui/collection_editor/PropertyEditView.tsx +1 -1
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/ui/collection_editor/CollectionYupValidation.tsx","../src/ui/collection_editor/GeneralSettingsForm.tsx","../src/ui/collection_editor/LayoutModeSwitch.tsx","../src/ui/collection_editor/ViewModeSwitch.tsx","../src/ui/collection_editor/EnumForm.tsx","../src/ui/collection_editor/SwitchControl.tsx","../src/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/StringPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ValidationPanel.tsx","../src/ui/collection_editor/properties/EnumPropertyField.tsx","../src/ui/collection_editor/properties/StoragePropertyField.tsx","../src/utils/entities.ts","../src/ui/collection_editor/PropertyFieldPreview.tsx","../src/ui/collection_editor/util.ts","../src/ui/collection_editor/AIModifiedPathsContext.tsx","../src/ui/collection_editor/PropertyTree.tsx","../src/ui/collection_editor/properties/MapPropertyField.tsx","../src/ui/collection_editor/properties/RepeatPropertyField.tsx","../src/ui/collection_editor/properties/CommonPropertyFields.tsx","../src/ui/collection_editor/properties/StringPropertyField.tsx","../src/ui/collection_editor/properties/BooleanPropertyField.tsx","../src/ui/collection_editor/properties/BlockPropertyField.tsx","../src/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx","../src/ui/collection_editor/properties/NumberPropertyField.tsx","../src/ui/collection_editor/properties/ReferencePropertyField.tsx","../src/ui/collection_editor/properties/DateTimePropertyField.tsx","../src/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx","../src/ui/collection_editor/properties/conditions/ConditionsPanel.tsx","../src/ui/collection_editor/properties/conditions/property_paths.ts","../src/ui/collection_editor/properties/conditions/ConditionsEditor.tsx","../src/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx","../src/ui/collection_editor/properties/KeyValuePropertyField.tsx","../src/ui/collection_editor/utils/update_property_for_widget.ts","../src/ui/collection_editor/properties/UrlPropertyField.tsx","../src/ui/collection_editor/utils/supported_fields.tsx","../src/ui/collection_editor/properties/MarkdownPropertyField.tsx","../src/ui/collection_editor/PropertyEditView.tsx","../src/ui/collection_editor/KanbanConfigSection.tsx","../src/ui/collection_editor/DisplaySettingsForm.tsx","../src/ui/collection_editor/utils/strings.ts","../src/ui/collection_editor/GetCodeDialog.tsx","../src/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/ui/collection_editor/UnsavedChangesDialog.tsx","../src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx","../src/ui/collection_editor/SubcollectionsEditTab.tsx","../src/ui/collection_editor/EntityActionsSelectDialog.tsx","../src/ui/collection_editor/EntityActionsEditTab.tsx","../src/ui/collection_editor/ExtendSettingsForm.tsx","../src/utils/validateCollectionJson.ts","../src/ui/collection_editor/CollectionJsonImportDialog.tsx","../src/ui/collection_editor/templates/products_template.ts","../src/ui/collection_editor/templates/blog_template.ts","../src/ui/collection_editor/templates/users_template.ts","../src/ui/collection_editor/templates/pages_template.ts","../src/useCollectionEditorController.tsx","../src/api/generateCollectionApi.ts","../src/ui/collection_editor/AICollectionGeneratorPopover.tsx","../src/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/ui/collection_editor/import/clean_import_data.ts","../src/ui/collection_editor/CollectionEditorDialog.tsx","../src/ConfigControllerProvider.tsx","../src/ui/EditorCollectionAction.tsx","../src/useCollectionsConfigController.tsx","../src/ui/HomePageEditorCollectionAction.tsx","../src/ui/CollectionViewHeaderAction.tsx","../src/ui/PropertyAddColumnComponent.tsx","../src/ui/NewCollectionButton.tsx","../src/ui/EditorCollectionActionStart.tsx","../src/ui/NewCollectionCard.tsx","../src/ui/EditorEntityAction.tsx","../src/ui/KanbanSetupAction.tsx","../src/ui/AddKanbanColumnAction.tsx","../src/useCollectionEditorPlugin.tsx","../src/utils/collections.ts","../src/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import * as Yup from \"yup\";\n\nexport const YupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\"),\n path: Yup.string().required(\"Required\")\n});\n","import React, { useState } from \"react\";\nimport {\n EntityCollection,\n FieldCaption,\n IconForView,\n SearchIconsView,\n singular,\n toSnakeCase,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n BooleanSwitchWithLabel,\n Chip,\n cls,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n IconButton,\n Select,\n SelectItem,\n TextField,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nexport function GeneralSettingsForm({\n isNewCollection,\n existingPaths,\n existingIds,\n parentCollection\n}: {\n isNewCollection: boolean;\n existingPaths?: string[];\n existingIds?: string[];\n parentCollection?: EntityCollection;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n\n const updateDatabaseId = (databaseId: string) => {\n setFieldValue(\"databaseId\", databaseId ?? undefined);\n }\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"path\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"path\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"id\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n };\n\n const collectionIcon = <IconForView collectionOrView={values} />;\n const isSubcollection = !!parentCollection;\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <div className=\"flex flex-row gap-2 py-2 pt-3 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <DefaultDatabaseField databaseId={values.databaseId}\n onDatabaseIdUpdate={updateDatabaseId} />\n\n <Tooltip title={\"Change icon\"}\n asChild={true}>\n <IconButton\n shape={\"square\"}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Name */}\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: any) => updateName(e.target.value)}\n label={\"Name\"}\n autoFocus={true}\n required\n error={showErrors && Boolean(errors.name)} />\n <FieldCaption error={touched.name && Boolean(errors.name)}>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n {/* Path */}\n <div className={cls(\"col-span-12\")}>\n <Field name={\"path\"}\n as={DebouncedTextField}\n label={\"Path\"}\n required\n error={showErrors && Boolean(errors.path)} />\n\n <FieldCaption error={touched.path && Boolean(errors.path)}>\n {touched.path && Boolean(errors.path)\n ? errors.path\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"Path that this collection is stored in, in the database\"}\n </FieldCaption>\n </div>\n\n {/* Singular Name */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.singularName)}\n name={\"singularName\"}\n aria-describedby={\"singularName-helper\"}\n onChange={(e) => {\n setFieldTouched(\"singularName\", true);\n return handleChange(e);\n }}\n value={values.singularName ?? \"\"}\n label={\"Singular name\"} />\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define a singular name for your entities\"}\n </FieldCaption>\n </div>\n\n {/* Description */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.description)}\n name=\"description\"\n value={values.description ?? \"\"}\n onChange={handleChange}\n multiline\n minRows={2}\n aria-describedby=\"description-helper-text\"\n label=\"Description\"\n />\n <FieldCaption error={showErrors && Boolean(errors.description)}>\n {showErrors && Boolean(errors.description) ? errors.description : \"Description of the collection, you can use markdown\"}\n </FieldCaption>\n </div>\n\n {/* Collection ID */}\n <div className={\"col-span-12\"}>\n <Field name={\"id\"}\n as={DebouncedTextField}\n disabled={!isNewCollection}\n label={\"Collection ID\"}\n error={showErrors && Boolean(errors.id)} />\n <FieldCaption error={touched.id && Boolean(errors.id)}>\n {touched.id && Boolean(errors.id) ? errors.id : \"This ID identifies this collection. Typically the same as the path.\"}\n </FieldCaption>\n </div>\n\n {/* Collection Group */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label=\"Collection group\"\n onValueChange={(v) => setFieldValue(\"collectionGroup\", v)}\n value={values.collectionGroup ?? false}\n />\n <FieldCaption>\n A collection group consists of all collections with the same path. This allows\n you to query over multiple collections at once.\n </FieldCaption>\n </div>\n\n </div>\n\n {/* Advanced Settings */}\n <ExpandablePanel\n title={<Typography variant=\"subtitle2\">Advanced settings</Typography>}\n initiallyExpanded={false}\n className=\"mt-4\"\n innerClassName=\"p-4 flex flex-col gap-4\"\n >\n {/* History revisions */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n allowIndeterminate={true}\n label={values.history === null || values.history === undefined ? \"Document history revisions enabled if enabled globally\" : (\n values.history ? \"Document history revisions ENABLED\" : \"Document history revisions NOT enabled\"\n )}\n onValueChange={(v) => setFieldValue(\"history\", v)}\n value={values.history === undefined ? null : values.history}\n />\n <FieldCaption>\n When enabled, each document in this collection will have a history of changes.\n This is useful for auditing purposes. The data is stored in a subcollection of the document\n in your database, called <b>__history</b>.\n </FieldCaption>\n </div>\n\n {/* Document ID generation */}\n <div>\n <Select\n name=\"customId\"\n label=\"Document IDs generation\"\n position={\"item-aligned\"}\n size={\"large\"}\n fullWidth={true}\n disabled={typeof values.customId === \"object\"}\n onValueChange={(v) => {\n if (v === \"code_defined\")\n throw new Error(\"This should not happen\");\n if (v === \"false\") setFieldValue(\"customId\", false);\n else if (v === \"true\") setFieldValue(\"customId\", true);\n else if (v === \"optional\") setFieldValue(\"customId\", \"optional\");\n }}\n value={\n typeof values.customId === \"object\" ? \"code_defined\" :\n values.customId === true ? \"true\" :\n values.customId === \"optional\" ? \"optional\" : \"false\"\n }\n renderValue={(value: any) => {\n if (value === \"code_defined\")\n return \"Code defined\";\n else if (value === \"true\")\n return \"Users must define an ID\";\n else if (value === \"optional\")\n return \"Users can define an ID, but it is not required\";\n else\n return \"Document ID is generated automatically\";\n }}\n >\n <SelectItem value={\"false\"}>\n Document ID is generated automatically\n </SelectItem>\n <SelectItem value={\"true\"}>\n Users must define an ID\n </SelectItem>\n <SelectItem value={\"optional\"}>\n Users can define an ID, but it is not required\n </SelectItem>\n </Select>\n <FieldCaption>\n Configure how document IDs are generated when creating new entities.\n </FieldCaption>\n </div>\n\n {/* Text search */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label=\"Enable text search for this collection\"\n onValueChange={(v) => setFieldValue(\"textSearchEnabled\", v)}\n value={values.textSearchEnabled ?? false}\n />\n <FieldCaption>\n Allow text search for this collection. If you have not specified a text search\n delegate, this will use the built-in local text search. This is not recommended\n for large collections, as it may incur in performance and cost issues.\n </FieldCaption>\n </div>\n </ExpandablePanel>\n\n <div style={{ height: \"52px\" }} />\n\n <Dialog\n open={iconDialogOpen}\n onOpenChange={setIconDialogOpen}\n maxWidth={\"xl\"}\n fullWidth\n >\n <div className={\"p-4 overflow-auto min-h-[200px]\"}>\n <SearchIconsView selectedIcon={typeof values.icon === \"string\" ? values.icon : undefined}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }} />\n </div>\n </Dialog>\n\n </Container>\n </div>\n );\n}\n\nfunction DefaultDatabaseField({\n databaseId,\n onDatabaseIdUpdate\n}: { databaseId?: string, onDatabaseIdUpdate: (databaseId: string) => void }) {\n\n return <Tooltip title={\"Database ID\"}\n side={\"top\"}\n align={\"start\"}>\n <TextField size={\"small\"}\n invisible={true}\n inputClassName={\"text-end\"}\n value={databaseId ?? \"\"}\n onChange={(e: any) => onDatabaseIdUpdate(e.target.value)}\n placeholder={\"(default)\"}></TextField>\n </Tooltip>\n}\n","import { cls, SquareIcon, ToggleButtonGroup, Typography, VerticalSplitIcon } from \"@firecms/ui\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n}: {\n value: \"side_panel\" | \"full_screen\";\n onChange: (value: \"side_panel\" | \"full_screen\") => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Document view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"side_panel\",\n label: \"Side panel\",\n icon: <VerticalSplitIcon />\n },\n {\n value: \"full_screen\",\n label: \"Full screen\",\n icon: <SquareIcon />\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen or in an inline side dialog</Typography>\n </div>\n}\n","import { ViewMode } from \"@firecms/core\";\nimport { AppsIcon, cls, ListIcon, ToggleButtonGroup, Typography, ViewKanbanIcon } from \"@firecms/ui\";\n\nexport function ViewModeSwitch({\n value,\n onChange,\n className\n}: {\n value: ViewMode;\n onChange: (value: ViewMode) => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Default collection view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"table\",\n label: \"Table\",\n icon: <ListIcon />\n },\n {\n value: \"cards\",\n label: \"Cards\",\n icon: <AppsIcon />\n },\n {\n value: \"kanban\",\n label: \"Kanban\",\n icon: <ViewKanbanIcon />\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Choose how entities should be displayed by default</Typography>\n </div>\n}\n","import React, { useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { ArrayContainer, ArrayEntryParams, EnumValueConfig, EnumValues, FieldCaption, } from \"@firecms/core\";\nimport {\n FindInPageIcon,\n Badge,\n Button,\n ChipColorKey,\n CircularProgress,\n ColorPicker,\n DebouncedTextField,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n getColorSchemeForKey,\n getColorSchemeForSeed,\n IconButton,\n ListIcon,\n Paper,\n SettingsIcon,\n Typography\n} from \"@firecms/ui\";\nimport { extractEnumFromValues } from \"@firecms/schema_inference\";\nimport { Field, Formex, getIn, useCreateFormex, useFormex } from \"@firecms/formex\";\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 enumValues: EnumValueConfig[]\n }>({\n initialValues: { enumValues },\n validateOnChange: true,\n validation: (values) => {\n const errors: any = {};\n if (values.enumValues) {\n values.enumValues.forEach((enumValue, index) => {\n if (!enumValue?.label) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].label = \"You must specify a label for this enum value entry\";\n }\n if (!enumValue?.id) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].id = \"You must specify an ID for this enum value entry\";\n }\n });\n }\n const hasError = Boolean(errors?.enumValues && Object.keys(errors?.enumValues).length > 0);\n onError?.(hasError);\n return errors;\n }\n });\n\n const {\n values,\n errors\n } = formex;\n\n useEffect(() => {\n if (onValuesChanged) {\n onValuesChanged(values.enumValues);\n }\n }, [values.enumValues]);\n\n return <Formex value={formex}>\n <EnumFormFields enumValuesPath={\"enumValues\"}\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 enumValues: EnumValueConfig[]\n };\n errors: any;\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?.enumValues && errors?.enumValues[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.enumValues[index]?.id as string)}\n key={`${internalId}`} />;\n };\n\n const inferValues = async () => {\n if (!getData) {\n console.warn(\"INTERNAL: No getData function provided for data inference\");\n return;\n }\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.enumValues;\n const foundEnumValues = extractEnumFromValues(fieldData);\n\n // add only new enum values\n const newEnumValues = foundEnumValues.filter((enumValue) => {\n return !currentEnumValues?.some((v: any) => v.id === enumValue.id);\n });\n\n newEnumValues.forEach((enumValue) => {\n 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 \n disabled={disabled || inferring}\n variant={\"text\"}\n size={\"small\"}\n onClick={inferValues}>\n {inferring ? <CircularProgress size={\"smallest\"} /> : <FindInPageIcon />}\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.enumValues}\n disabled={disabled}\n size={\"small\"}\n buildEntry={buildEntry}\n onInternalIdAdded={setLastInternalIdAdded}\n canAddElements={true}\n onValueChange={(value) => 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 const colorValue = getIn(values, `${enumValuesPath}[${index}].color`) as ChipColorKey | undefined;\n const colorScheme = colorValue\n ? getColorSchemeForKey(colorValue)\n : idValue\n ? getColorSchemeForSeed(String(idValue))\n : undefined;\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={\"flex-grow\"}\n required\n disabled={disabled}\n size=\"small\"\n autoFocus={autoFocus}\n autoComplete=\"off\"\n endAdornment={inferredEntry && <FindInPageIcon size={\"small\"} />}\n error={Boolean(entryError?.label)} />\n\n {!disabled && <>\n {/* Color indicator - clickable to open settings */}\n <button\n type=\"button\"\n onClick={() => onDialogOpen()}\n className=\"w-5 h-5 rounded-full flex-shrink-0 self-center border border-surface-accent-200 dark:border-surface-accent-700 hover:scale-110 transition-transform cursor-pointer ml-3\"\n style={{\n backgroundColor: colorScheme?.color ?? \"#ccc\"\n }}\n title={colorValue ? `Color: ${colorValue}` : \"Auto color - Click to change\"}\n aria-label=\"Edit enum color\"\n />\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={\"small\"} />\n </IconButton>\n </Badge>\n </>}\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 values,\n setFieldValue\n } = useFormex<EnumValues>();\n\n const idError = index !== undefined ? getIn(errors, `${enumValuesPath}[${index}].id`) : undefined;\n const colorValue = index !== undefined ? getIn(values, `${enumValuesPath}[${index}].color`) as ChipColorKey | undefined : undefined;\n\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 className=\"flex flex-col gap-4\">\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\n <div>\n <Typography variant=\"body2\" className=\"font-medium mb-2\">\n Chip color\n </Typography>\n <ColorPicker\n value={colorValue}\n onChange={(color) => setFieldValue(`${enumValuesPath}[${index}].color`, color)}\n size=\"small\"\n allowClear={true}\n />\n </div>\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 \"@firecms/ui\";\nimport { FormexFieldProps } from \"@firecms/formex\";\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 \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function GeneralPropertyValidation({ disabled }: {\n required?: boolean;\n disabled: boolean;\n}) {\n\n const { values, handleChange } = useFormex();\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={\"Required\"}\n tooltip={\"You won't be able to save this entity if this value is not set\"}\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={\"Unique\"}\n tooltip={\"There cannot be multiple entities with the same value\"}\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)}\n label={\"Required message\"}\n name={validationRequiredMessage}\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, serializeRegExp } from \"@firecms/core\";\nimport { DebouncedTextField, } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\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\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);\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={\"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={\"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={\"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)}\n label={\"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)}\n label={\"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)}\n label={\"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={\"Matches regex\"}\n size=\"small\"\n disabled={disabled}\n value={matchesStringValue}\n error={Boolean(matchesError)}/>\n <FieldCaption error={Boolean(matchesError)}>\n {matchesError ? \"Not a valid regexp\" : \"e.g. /^\\\\d+$/ for digits only\"}\n </FieldCaption>\n </div>}\n\n </div>\n );\n\n}\n","import React from \"react\";\n\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\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\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)}\n disabled={disabled}\n label={\"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)}\n disabled={disabled}\n label={\"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 { ExpandablePanel, RuleIcon, Typography } from \"@firecms/ui\";\n\nexport function ValidationPanel({\n children\n }: PropsWithChildren<{}>) {\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 <RuleIcon/>\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 \"@firecms/formex\";\nimport { EnumValueConfig, resolveEnumValues, useSnackbarController } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/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 = useSnackbarController();\n\n const enumValuesPath = multiselect ? \"of.enumValues\" : \"enumValues\";\n\n const defaultValue = getIn(values, \"defaultValue\");\n\n const valuesEnumValues = getIn(values, enumValuesPath);\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: any) => 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)).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 size={\"large\"}\n label={\"Default value\"}\n value={defaultValue ?? \"\"}>\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","import React from \"react\";\nimport {\n Button,\n CloudUploadIcon,\n DebouncedTextField,\n ExpandablePanel,\n MultiSelect,\n MultiSelectItem,\n Select,\n SelectItem,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\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\n const baseStoragePath = multiple ? \"of.storage\" : \"storage\";\n const acceptedFiles = `${baseStoragePath}.acceptedFiles`;\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) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize);\n\n // Image resize values\n const imageResizeMaxWidthValue = getIn(values, imageResizeMaxWidth);\n const imageResizeMaxHeightValue = getIn(values, imageResizeMaxHeight);\n const imageResizeModeValue = getIn(values, imageResizeMode) ?? \"cover\";\n const imageResizeFormatValue = getIn(values, imageResizeFormat) ?? \"original\";\n const imageResizeQualityValue = getIn(values, imageResizeQuality);\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 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 <CloudUploadIcon/>\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\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) => {\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={\"flex-grow\"}>\n {label}\n </div>\n <Button size={\"small\"}\n variant={\"text\"}\n onClick={(e) => {\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={\"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={\"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={\"Include bucket URL (gs://...) in saved value\"}\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>gs://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={\"Save URL instead of storage path\"}\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={\"Max size (in bytes)\"}\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 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={\"Max width (px)\"}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeMaxWidthValue !== undefined && imageResizeMaxWidthValue !== null ? imageResizeMaxWidthValue.toString() : \"\"}\n onChange={(e) => {\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={\"Max height (px)\"}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeMaxHeightValue !== undefined && imageResizeMaxHeightValue !== null ? imageResizeMaxHeightValue.toString() : \"\"}\n onChange={(e) => {\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={\"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={\"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={\"Quality (0-100)\"}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeQualityValue !== undefined && imageResizeQualityValue !== null ? imageResizeQualityValue.toString() : \"\"}\n onChange={(e) => {\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 { isPropertyBuilder, Properties, PropertiesOrBuilders, Property, PropertyOrBuilder } from \"@firecms/core\";\n\nexport function editableProperty(property: PropertyOrBuilder): boolean {\n if (isPropertyBuilder(property)) {\n return false;\n } else {\n if (property.dataType === \"array\" && typeof property.of === \"function\")\n return false;\n else if (property.dataType === \"array\" && Array.isArray(property.of))\n return false;\n return property.editable === undefined ? true : Boolean(property.editable);\n }\n}\n\nexport function removeNonEditableProperties(properties: PropertiesOrBuilders<any>): Properties {\n return Object.entries(properties)\n .filter(([_, property]) => editableProperty(property))\n .map(([key, propertyOrBuilder]) => {\n const property = propertyOrBuilder as Property;\n if (!editableProperty(property)) {\n return undefined;\n } else if (property.dataType === \"map\" && property.properties) {\n return {\n [key]: {\n ...property,\n properties: removeNonEditableProperties(property.properties as PropertiesOrBuilders)\n }\n };\n } else {\n return { [key]: property };\n }\n })\n .filter((e) => Boolean(e))\n .reduce((a, b) => ({ ...a, ...b }), {}) as Properties;\n}\n","import {\n ErrorBoundary,\n getFieldConfig,\n isPropertyBuilder,\n Property,\n PropertyConfigBadge,\n PropertyOrBuilder,\n useCustomizationController,\n} from \"@firecms/core\";\nimport {\n cardClickableMixin,\n cardMixin,\n cardSelectedMixin,\n cls,\n DoNotDisturbOnIcon,\n FunctionsIcon,\n Paper,\n Typography,\n} from \"@firecms/ui\";\n\nimport { editableProperty } from \"../../utils/entities\";\n\nexport function PropertyFieldPreview({\n property,\n onClick,\n hasError,\n includeName,\n includeEditButton,\n selected\n }: {\n property: Property,\n hasError?: boolean,\n selected?: boolean,\n includeName?: boolean,\n includeEditButton?: boolean;\n onClick?: () => void\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = getFieldConfig(property, propertyConfigs);\n const disabled = !editableProperty(property);\n\n const borderColorClass = hasError\n ? \"border-red-500 dark:border-red-500 border-opacity-100 dark:border-opacity-100 border-red-500/100 dark:border-red-500/100 ring-0 dark:ring-0\"\n : (selected ? \"border-primary\" : \"border-transparent\");\n\n return <ErrorBoundary>\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"m-4\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <Paper\n className={cls(\n \"m-1\",\n \"border\",\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n borderColorClass\n )}\n >\n\n <div className=\"w-full flex flex-col\">\n\n {includeName &&\n <ErrorBoundary>\n <Typography variant=\"label\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property.name\n ? property.name\n : \"\\u00a0\"\n }\n </Typography>\n </ErrorBoundary>}\n\n <div className=\"flex flex-row items-center\">\n <ErrorBoundary>\n <Typography className=\"flex-grow pr-2\"\n variant={includeName ? \"body2\" : \"label\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>\n </ErrorBoundary>\n <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>\n\n </div>\n </div>\n\n {includeEditButton && <Typography variant={\"button\"}>\n EDIT\n </Typography>}\n\n </Paper>\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?: PropertyOrBuilder\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = !isPropertyBuilder(property) && property ? getFieldConfig(property, propertyConfigs) : undefined;\n\n return (\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"relative m-4\"}>\n {propertyConfig && <PropertyConfigBadge propertyConfig={propertyConfig}/>}\n {!propertyConfig && <div\n className={\"h-8 w-8 flex items-center justify-center rounded-full shadow text-white bg-surface-500\"}>\n <FunctionsIcon color={\"inherit\"} size={\"small\"}/>\n </div>}\n <DoNotDisturbOnIcon color={\"disabled\"} size={\"small\"} className={\"absolute -right-2 -top-2\"}/>\n </div>\n <Paper\n className={cls(\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n selected ? \"border-primary\" : \"border-transparent\")}\n >\n\n <div className=\"w-full flex flex-col\">\n <Typography variant=\"label\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property?.name\n ? property.name\n : name\n }\n </Typography>\n\n <div className=\"flex flex-row items-center\">\n {propertyConfig && <Typography className=\"flex-grow pr-2\"\n variant={\"body2\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>}\n\n {property && !isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>}\n\n {property && isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This property is defined as a property builder in code\n </Typography>\n </ErrorBoundary>}\n\n {!property && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This field is defined as an additional field in code\n </Typography>\n </ErrorBoundary>}\n\n </div>\n\n {/*<div className=\"flex flex-row text-xs\">*/}\n {/* <Typography className=\"flex-grow pr-2\"*/}\n {/* variant=\"body2\"*/}\n {/* component=\"span\"*/}\n {/* color=\"secondary\">*/}\n {/* This field can only be edited in code*/}\n {/* </Typography>*/}\n {/*</div>*/}\n </div>\n\n </Paper>\n </div>)\n}\n","export function idToPropertiesPath(id: string): string {\n return \"properties.\" + id.replaceAll(\".\", \".properties.\");\n}\n\nexport function namespaceToPropertiesPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".properties\"\n : \"properties\";\n}\n\nexport function namespaceToPropertiesOrderPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".propertiesOrder\"\n : \"propertiesOrder\";\n}\n\nexport function getFullId(propertyKey: string, propertyNamespace?: string): string {\n return propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n}\n\nexport function getFullIdPath(propertyKey: string, propertyNamespace?: string): string {\n const keyWithNamespace = propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n return idToPropertiesPath(keyWithNamespace);\n}\n","import React, { createContext, useCallback, useContext, useState } 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 }) {\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 return (\n <AIModifiedPathsContext.Provider value={{\n modifiedPaths,\n generationCounter,\n addModifiedPaths,\n clearPath,\n clearAllPaths,\n isPathModified\n }}>\n {children}\n </AIModifiedPathsContext.Provider>\n );\n}\n\nexport function useAIModifiedPaths(): AIModifiedPathsContextType | null {\n return useContext(AIModifiedPathsContext);\n}\n\n","import React from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport {\n AdditionalFieldDelegate,\n AIModifiedIndicator,\n CMSType,\n isPropertyBuilder,\n PropertiesOrBuilders,\n PropertyOrBuilder\n} from \"@firecms/core\";\nimport {\n FindInPageIcon,\n defaultBorderMixin,\n DeleteIcon,\n IconButton,\n Menu,\n MenuItem,\n MoreVertIcon,\n Tooltip,\n VerticalAlignBottomIcon,\n VerticalAlignTopIcon\n} from \"@firecms/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\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\n\nexport const PropertyTree = React.memo(\n function PropertyTree<M extends {\n [Key: string]: CMSType\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 collectionEditable\n }: {\n namespace?: string;\n selectedPropertyKey?: string;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n properties: PropertiesOrBuilders<M>;\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 collectionEditable: boolean;\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={className}>\n\n {propertiesOrder && propertiesOrder\n .map((propertyKey: string, index: number) => {\n const property = properties[propertyKey] as PropertyOrBuilder;\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 propertyOrBuilder={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 collectionEditable={collectionEditable}\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 propertyOrBuilder,\n additionalField,\n selectedPropertyKey,\n errors,\n propertiesOrder,\n onPropertyClick,\n onPropertyMove,\n onPropertyRemove,\n inferredPropertyKeys,\n collectionEditable\n}: {\n id: string;\n propertyKey: string;\n namespace?: string;\n propertyOrBuilder: PropertyOrBuilder;\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 collectionEditable: boolean;\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 propertyOrBuilder === \"object\") {\n const property = propertyOrBuilder;\n if (property.dataType === \"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 collectionEditable={collectionEditable}\n />\n }\n }\n\n const selected = selectedPropertyKey === fullId;\n const editable = propertyOrBuilder && ((collectionEditable && !isPropertyBuilder(propertyOrBuilder)) || editableProperty(propertyOrBuilder));\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 -ml-8 cursor-grab\"\n {...attributes}\n {...listeners}\n >\n <div className=\"relative\">\n {subtree && <div\n className={\"absolute border-l \" + defaultBorderMixin}\n style={{\n left: \"32px\",\n top: \"64px\",\n bottom: \"16px\"\n }} />}\n\n <div>\n {!isPropertyBuilder(propertyOrBuilder) && !additionalField && editable\n ? <PropertyFieldPreview\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n includeName={true}\n selected={selected}\n hasError={hasError} />\n : <NonEditablePropertyPreview name={propertyKey}\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n selected={selected} />}\n </div>\n\n <div className=\"absolute top-3 right-3 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 <FindInPageIcon size=\"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) => {\n e.stopPropagation();\n onPropertyRemove(propertyKey, namespace);\n }}>\n <DeleteIcon size={\"smallest\"} />\n </IconButton>\n </Tooltip>}\n </>}\n\n <Menu\n trigger={\n <IconButton\n size=\"smallest\"\n >\n <MoreVertIcon size={\"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 <VerticalAlignTopIcon size=\"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 <VerticalAlignBottomIcon size=\"smallest\" />\n Move to bottom\n </MenuItem>\n <MenuItem\n dense\n onClick={() => onPropertyRemove?.(propertyKey, namespace)}\n >\n <DeleteIcon size=\"smallest\" />\n Delete\n </MenuItem>\n </Menu>\n\n </div>\n\n {subtree && <div className={\"ml-16\"}>{subtree}</div>}\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { FieldCaption, MapProperty, Property, PropertyConfig, } from \"@firecms/core\";\nimport { AddIcon, BooleanSwitchWithLabel, Button, Paper, Typography } from \"@firecms/ui\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath, namespaceToPropertiesPath } from \"../util\";\n\nexport function MapPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<MapProperty>();\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) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\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\"}>Properties in this group</Typography>\n <Button\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\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 collectionEditable={collectionEditable}\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=\"Spread children as columns\"\n onValueChange={(v) => setFieldValue(\"spreadChildren\", v)}\n value={values.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 collectionEditable={collectionEditable}\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}\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 { ArrayProperty, getFieldConfig, Property, PropertyConfig } from \"@firecms/core\";\nimport { Button, Paper, Typography } from \"@firecms/ui\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\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 collectionEditable\n }: {\n showErrors: boolean,\n existing: boolean,\n disabled: boolean,\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\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\");\n const ofPropertyError = getIn(touched, \"of\") && getIn(errors, \"of\");\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?.dataType ? 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 size={\"large\"}\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 collectionEditable={collectionEditable}\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 { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { PropertyWithId } from \"../PropertyEditView\";\nimport React from \"react\";\nimport { FieldCaption, prettifyIdentifier, toSnakeCase } from \"@firecms/core\";\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\n const name = \"name\";\n const nameError = showErrors && getIn(errors, name);\n\n const id = \"id\";\n const idError = showErrors && getIn(errors, id);\n\n const description = \"description\";\n const descriptionError = showErrors && getIn(errors, description);\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: any) => {\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={\"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 <Field\n name={id}\n as={DebouncedTextField}\n label={\"ID\"}\n value={values[id]}\n onChange={(e: any) => {\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={\"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 React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { TextField } from \"@firecms/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 } = useFormex();\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\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\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 { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\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 } from \"@firecms/core\";\n\nexport function BlockPropertyField({\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\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) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\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={<AddIcon/>}\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 collectionEditable={collectionEditable}\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 collectionEditable={collectionEditable}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\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 \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\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\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)}\n label={\"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)}\n label={\"Max value\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationLessThan)}\n label={\"Less than\"}\n name={validationLessThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationMoreThan)}\n label={\"More than\"}\n name={validationMoreThan}\n type=\"number\"\n size=\"small\"\n\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={\"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={\"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={\"Integer value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { NumberPropertyValidation } from \"./validation/NumberPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { TextField } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nexport function NumberPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\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\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : parseFloat(e.target.value));\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, IconForView, NumberProperty, StringProperty, useNavigationController } from \"@firecms/core\";\nimport { CircularProgress, Select, SelectGroup, SelectItem, Typography, } from \"@firecms/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 handleChange,\n errors,\n } = useFormex<StringProperty | NumberProperty>();\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const pathPath = asString ? \"reference.path\" : (multiple ? \"of.path\" : \"path\") ;\n const pathValue: string | undefined = getIn(values, pathPath);\n const pathError: string | undefined = showErrors && getIn(errors, pathPath);\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 handleChange={handleChange}\n as={CollectionsSelect}/>\n\n </div>\n\n </>\n );\n}\n\nexport function CollectionsSelect({\n disabled,\n pathPath,\n value,\n handleChange,\n error,\n ...props\n }: {\n disabled: boolean,\n pathPath: string,\n value?: string,\n handleChange: (event: any) => void,\n error?: string\n}) {\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const collections = navigation?.collections ?? [];\n\n const groups: string[] = Array.from(new Set(\n Object.values(collections).map(e => e.group).filter(Boolean) as string[]\n ).values());\n\n const ungroupedCollections = collections.filter((col) => !col.group);\n\n return (\n <>\n <Select\n error={Boolean(error)}\n disabled={disabled}\n value={value ?? \"\"}\n position={\"item-aligned\"}\n name={pathPath}\n size={\"large\"}\n fullWidth={true}\n onChange={handleChange}\n label={\"Target collection\"}\n renderValue={(selected) => {\n const selectedCollection = collections.find(collection => collection.id === selected || collection.path === 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=\"font-medium ml-4\">\n {selectedCollection?.name.toUpperCase()}\n </Typography>\n </div>)\n }}\n {...props}>\n\n {groups.flatMap((group) => (\n <SelectGroup label={group || \"Views\"}\n key={`group_${group}`}>\n {\n collections.filter(collection => collection.group === group)\n .map((collection) => {\n return <SelectItem\n key={`${collection.id ?? collection.path}-${group}`}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>\n ))}\n\n {ungroupedCollections && <SelectGroup label={\"Views\"}>\n {ungroupedCollections\n .map((collection) => {\n return <SelectItem key={collection.id ?? collection.path}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>}\n\n </Select>\n\n </>\n );\n}\n","import React from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, NumberProperty, StringProperty } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\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\", label: \"UTC (Coordinated Universal Time)\" },\n // Americas\n { value: \"America/New_York\", label: \"New York (US Eastern)\" },\n { value: \"America/Chicago\", label: \"Chicago (US Central)\" },\n { value: \"America/Denver\", label: \"Denver (US Mountain)\" },\n { value: \"America/Los_Angeles\", label: \"Los Angeles (US Pacific)\" },\n { value: \"America/Anchorage\", label: \"Anchorage (Alaska)\" },\n { value: \"America/Toronto\", label: \"Toronto (Canada Eastern)\" },\n { value: \"America/Vancouver\", label: \"Vancouver (Canada Pacific)\" },\n { value: \"America/Mexico_City\", label: \"Mexico City\" },\n { value: \"America/Sao_Paulo\", label: \"São Paulo (Brazil)\" },\n { value: \"America/Buenos_Aires\", label: \"Buenos Aires (Argentina)\" },\n // Europe\n { value: \"Europe/London\", label: \"London (UK)\" },\n { value: \"Europe/Paris\", label: \"Paris (France)\" },\n { value: \"Europe/Berlin\", label: \"Berlin (Germany)\" },\n { value: \"Europe/Madrid\", label: \"Madrid (Spain)\" },\n { value: \"Europe/Rome\", label: \"Rome (Italy)\" },\n { value: \"Europe/Amsterdam\", label: \"Amsterdam (Netherlands)\" },\n { value: \"Europe/Brussels\", label: \"Brussels (Belgium)\" },\n { value: \"Europe/Zurich\", label: \"Zurich (Switzerland)\" },\n { value: \"Europe/Stockholm\", label: \"Stockholm (Sweden)\" },\n { value: \"Europe/Vienna\", label: \"Vienna (Austria)\" },\n { value: \"Europe/Warsaw\", label: \"Warsaw (Poland)\" },\n { value: \"Europe/Prague\", label: \"Prague (Czech Republic)\" },\n { value: \"Europe/Athens\", label: \"Athens (Greece)\" },\n { value: \"Europe/Moscow\", label: \"Moscow (Russia)\" },\n { value: \"Europe/Istanbul\", label: \"Istanbul (Turkey)\" },\n // Asia\n { value: \"Asia/Dubai\", label: \"Dubai (UAE)\" },\n { value: \"Asia/Kolkata\", label: \"Mumbai / Delhi (India)\" },\n { value: \"Asia/Bangkok\", label: \"Bangkok (Thailand)\" },\n { value: \"Asia/Singapore\", label: \"Singapore\" },\n { value: \"Asia/Hong_Kong\", label: \"Hong Kong\" },\n { value: \"Asia/Shanghai\", label: \"Shanghai (China)\" },\n { value: \"Asia/Tokyo\", label: \"Tokyo (Japan)\" },\n { value: \"Asia/Seoul\", label: \"Seoul (South Korea)\" },\n { value: \"Asia/Jakarta\", label: \"Jakarta (Indonesia)\" },\n // Oceania\n { value: \"Australia/Sydney\", label: \"Sydney (Australia Eastern)\" },\n { value: \"Australia/Melbourne\", label: \"Melbourne (Australia)\" },\n { value: \"Australia/Brisbane\", label: \"Brisbane (Australia)\" },\n { value: \"Australia/Perth\", label: \"Perth (Australia Western)\" },\n { value: \"Pacific/Auckland\", label: \"Auckland (New Zealand)\" },\n // Africa\n { value: \"Africa/Cairo\", label: \"Cairo (Egypt)\" },\n { value: \"Africa/Johannesburg\", label: \"Johannesburg (South Africa)\" },\n { value: \"Africa/Lagos\", label: \"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\n const modePath = \"mode\";\n const modeValue: string | undefined = getIn(values, modePath);\n const modeError: string | undefined = getIn(touched, modePath) && getIn(errors, modePath);\n\n const autoValuePath = \"autoValue\";\n const autoValueValue: string | undefined = getIn(values, autoValuePath);\n const autoValueError: string | undefined = getIn(touched, autoValuePath) && getIn(errors, autoValuePath);\n\n const timezonePath = \"timezone\";\n const timezoneValue: string | undefined = getIn(values, timezonePath);\n const timezoneError: string | undefined = getIn(touched, timezonePath) && getIn(errors, timezonePath);\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 size={\"large\"}\n onValueChange={(v) => setFieldValue(modePath, v)}\n label={\"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 size={\"large\"}\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={\"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 size={\"large\"}\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={\"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 <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled} />\n </ValidationPanel>\n </div>\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps } from \"@firecms/formex\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function AdvancedPropertyValidation({ disabled }: {\n disabled: boolean\n}) {\n\n const columnWidth = \"columnWidth\";\n const hideFromCollection = \"hideFromCollection\";\n const readOnly = \"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={\"medium\"}\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={\"medium\"}\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 { PropsWithChildren } from \"react\";\n\nimport { ExpandablePanel, SettingsIcon, Typography } from \"@firecms/ui\";\n\nexport function ConditionsPanel({\n children\n}: PropsWithChildren<{}>) {\n\n return (\n <ExpandablePanel\n initiallyExpanded={true}\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 <SettingsIcon />\n <Typography variant={\"subtitle2\"}\n className=\"ml-4\">\n Conditions\n </Typography>\n </div>\n }>\n\n {children}\n\n </ExpandablePanel>\n )\n}\n","import { Properties, Property, PropertyOrBuilder, isPropertyBuilder } from \"@firecms/core\";\n\n/**\n * Recursively extract all property paths from a Properties object.\n * For nested map properties, creates dot-notation paths like \"address.city\".\n * Skips PropertyBuilder functions (callbacks) as they cannot be statically analyzed.\n * \n * @param properties - The properties object to extract paths from\n * @param prefix - Optional prefix for nested paths (used in recursion)\n * @returns Array of property path strings\n */\nexport function getPropertyPaths(\n properties: Properties | undefined,\n prefix: string = \"\"\n): string[] {\n if (!properties) return [];\n\n const paths: string[] = [];\n\n for (const [key, propertyOrBuilder] of Object.entries(properties)) {\n if (!propertyOrBuilder) continue;\n\n // Skip PropertyBuilder functions - they require runtime values to resolve\n if (isPropertyBuilder(propertyOrBuilder)) continue;\n\n const property = propertyOrBuilder as Property;\n const fullPath = prefix ? `${prefix}.${key}` : key;\n paths.push(fullPath);\n\n // Recursively add nested map properties\n if (property.dataType === \"map\" && property.properties) {\n const nestedPaths = getPropertyPaths(\n property.properties as Properties,\n fullPath\n );\n paths.push(...nestedPaths);\n }\n\n // For arrays with object items, add the nested paths too\n if (property.dataType === \"array\" && property.of) {\n const ofPropertyOrBuilder = property.of as PropertyOrBuilder;\n // Skip if the array's 'of' is a PropertyBuilder\n if (!isPropertyBuilder(ofPropertyOrBuilder)) {\n const ofProperty = ofPropertyOrBuilder as Property;\n if (ofProperty.dataType === \"map\" && ofProperty.properties) {\n const nestedPaths = getPropertyPaths(\n ofProperty.properties as Properties,\n `${fullPath}[]`\n );\n paths.push(...nestedPaths);\n }\n }\n }\n }\n\n return paths;\n}\n\n/**\n * Get property paths grouped by top-level property for UI display.\n * Skips PropertyBuilder functions.\n * \n * @param properties - The properties object\n * @returns Object with top-level keys mapping to their nested paths\n */\nexport function getGroupedPropertyPaths(\n properties: Properties | undefined\n): Record<string, string[]> {\n if (!properties) return {};\n\n const grouped: Record<string, string[]> = {};\n\n for (const [key, propertyOrBuilder] of Object.entries(properties)) {\n if (!propertyOrBuilder) continue;\n\n // Skip PropertyBuilder functions\n if (isPropertyBuilder(propertyOrBuilder)) continue;\n\n const property = propertyOrBuilder as Property;\n grouped[key] = [key];\n\n if (property.dataType === \"map\" && property.properties) {\n const nestedPaths = getPropertyPaths(\n property.properties as Properties,\n key\n );\n grouped[key].push(...nestedPaths);\n }\n }\n\n return grouped;\n}\n","import React from \"react\";\nimport { useFormex } from \"@firecms/formex\";\nimport {\n DeleteIcon,\n IconButton,\n Select,\n SelectItem,\n DebouncedTextField,\n Typography,\n Chip,\n BooleanSwitchWithLabel,\n TextField,\n cls,\n defaultBorderMixin\n} from \"@firecms/ui\";\nimport {\n Properties,\n Property,\n PropertyOrBuilder,\n getFieldConfig,\n DEFAULT_FIELD_CONFIGS,\n getIconForWidget,\n EnumValueConfig,\n isPropertyBuilder\n} from \"@firecms/core\";\nimport { PropertyWithId } from \"../../PropertyEditView\";\nimport { getPropertyPaths } from \"./property_paths\";\n\n/**\n * Condition types that can be configured\n */\nconst CONDITION_TYPES = [\n { id: \"disabled\", label: \"Disabled\", description: \"Disable this field when condition is true\" },\n { id: \"hidden\", label: \"Hidden\", description: \"Hide this field when condition is true\" },\n { id: \"required\", label: \"Required\", description: \"Make this field required when condition is true\" },\n { id: \"readOnly\", label: \"Read Only\", description: \"Make this field read-only when condition is true\" }\n] as const;\n\ntype ConditionType = typeof CONDITION_TYPES[number][\"id\"];\n\n/**\n * Operators for building conditions with their applicable data types\n */\nconst OPERATORS = [\n { id: \"==\", label: \"equals\", valueType: \"any\", applicableTo: [\"string\", \"number\", \"boolean\", \"date\"] },\n { id: \"!=\", label: \"not equals\", valueType: \"any\", applicableTo: [\"string\", \"number\", \"boolean\", \"date\"] },\n { id: \">\", label: \"greater than\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \"<\", label: \"less than\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \">=\", label: \"greater or equal\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \"<=\", label: \"less or equal\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \"in\", label: \"contains\", valueType: \"any\", applicableTo: [\"array\"] },\n { id: \"!in\", label: \"not contains\", valueType: \"any\", applicableTo: [\"array\"] },\n { id: \"!!\", label: \"has a value\", valueType: \"none\", applicableTo: [\"string\", \"number\", \"boolean\", \"array\", \"map\", \"date\"] },\n { id: \"!\", label: \"is empty\", valueType: \"none\", applicableTo: [\"string\", \"number\", \"boolean\", \"array\", \"map\", \"date\"] },\n { id: \"isPast\", label: \"is in the past\", valueType: \"none\", applicableTo: [\"date\"] },\n { id: \"isFuture\", label: \"is in the future\", valueType: \"none\", applicableTo: [\"date\"] }\n] as const;\n\ntype OperatorId = typeof OPERATORS[number][\"id\"];\n\n// Context fields with their types\nconst CONTEXT_FIELDS = [\n { id: \"isNew\", label: \"Is New Entity\", dataType: \"boolean\", color: \"#9c27b0\" },\n { id: \"entityId\", label: \"Entity ID\", dataType: \"string\", color: \"#2196f3\" },\n { id: \"user.roles\", label: \"User Roles\", dataType: \"array\", color: \"#ff9800\" }\n] as const;\n\ninterface SimpleRule {\n field: string;\n operator: OperatorId;\n value: string;\n}\n\ntype LogicOperator = \"and\" | \"or\";\n\n/**\n * A condition group can contain rules and/or nested groups\n */\ninterface ConditionGroup {\n logic: LogicOperator;\n rules: SimpleRule[];\n groups?: ConditionGroup[]; // Nested groups for complex logic\n}\n\n/**\n * Get the property at a given path.\n * Returns undefined if the path contains a PropertyBuilder (callback).\n */\nfunction getPropertyAtPath(\n fieldPath: string,\n collectionProperties?: Properties\n): Property | undefined {\n if (!collectionProperties) return undefined;\n\n const parts = fieldPath.split(\".\");\n let current: Properties | undefined = collectionProperties;\n let property: Property | undefined;\n\n for (const part of parts) {\n if (!current) return undefined;\n const propertyOrBuilder = current[part] as PropertyOrBuilder | undefined;\n if (!propertyOrBuilder) return undefined;\n\n // Skip PropertyBuilder functions - they require runtime values\n if (isPropertyBuilder(propertyOrBuilder)) return undefined;\n\n property = propertyOrBuilder as Property;\n\n if (property.dataType === \"map\" && property.properties) {\n current = property.properties as Properties;\n } else {\n current = undefined;\n }\n }\n\n return property;\n}\n\n/**\n * Get the data type for a field path\n */\nfunction getFieldDataType(\n fieldPath: string,\n collectionProperties?: Properties\n): string {\n // Check context fields first\n const contextField = CONTEXT_FIELDS.find(f => f.id === fieldPath);\n if (contextField) return contextField.dataType;\n\n const property = getPropertyAtPath(fieldPath, collectionProperties);\n return property?.dataType ?? \"string\";\n}\n\n/**\n * Get enum values for a property if it has them\n */\nfunction getEnumValues(property: Property | undefined): EnumValueConfig[] | undefined {\n if (!property) return undefined;\n if (property.dataType === \"string\" && property.enumValues) {\n // Normalize to array format\n if (Array.isArray(property.enumValues)) {\n return property.enumValues;\n }\n // Handle object format { key: label }\n return Object.entries(property.enumValues).map(([id, label]) => ({\n id,\n label: typeof label === \"string\" ? label : (label as EnumValueConfig).label\n }));\n }\n return undefined;\n}\n\n/**\n * Get operators applicable for a given data type\n */\nfunction getOperatorsForDataType(dataType: string) {\n return OPERATORS.filter(op => {\n const applicable = op.applicableTo as readonly string[];\n return applicable.includes(dataType) ||\n (applicable.includes(\"string\") && ![\"number\", \"date\", \"array\"].includes(dataType));\n });\n}\n\n/**\n * Props for a single rule row (used inside a group)\n */\ninterface RuleRowProps {\n rule: SimpleRule;\n onRuleChange: (rule: SimpleRule) => void;\n onRemove: () => void;\n disabled: boolean;\n availableFields: string[];\n collectionProperties?: Properties;\n showErrors: boolean;\n showRemoveButton: boolean;\n}\n\n/**\n * Props for a condition group (with AND/OR logic)\n */\ninterface ConditionGroupRowProps {\n conditionType: ConditionType;\n group: ConditionGroup;\n onGroupChange: (group: ConditionGroup) => void;\n onRemove: () => void;\n disabled: boolean;\n availableFields: string[];\n collectionProperties?: Properties;\n showErrors: boolean;\n}\n\n/**\n * Dynamic value input based on field data type and enum values\n */\nfunction ConditionValueInput({\n value,\n onChange,\n dataType,\n enumValues,\n disabled,\n operator\n}: {\n value: string;\n onChange: (value: string) => void;\n dataType: string;\n enumValues?: EnumValueConfig[];\n disabled: boolean;\n operator: OperatorId;\n}) {\n // For truthy/falsy operators, no value needed\n if (operator === \"!!\" || operator === \"!\") {\n return null;\n }\n\n // Boolean - use switch\n if (dataType === \"boolean\") {\n return (\n <BooleanSwitchWithLabel\n value={value === \"true\"}\n size=\"small\"\n position=\"start\"\n disabled={disabled}\n onValueChange={(newValue) => onChange(newValue ? \"true\" : \"false\")}\n />\n );\n }\n\n // Enum/string with enumValues - use select\n if (enumValues && enumValues.length > 0) {\n return (\n <Select\n value={value}\n onValueChange={onChange}\n disabled={disabled}\n size=\"small\"\n className=\"min-w-[120px]\"\n placeholder=\"Select value\">\n {enumValues.map(ev => (\n <SelectItem key={ev.id} value={String(ev.id)}>\n {ev.label}\n </SelectItem>\n ))}\n </Select>\n );\n }\n\n // Number - use number input\n if (dataType === \"number\") {\n return (\n <TextField\n value={value}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n placeholder=\"Value\"\n className=\"flex-1 min-w-[80px]\"\n onChange={(e) => onChange(e.target.value)}\n />\n );\n }\n\n // Array - comma separated values\n if (dataType === \"array\") {\n return (\n <DebouncedTextField\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"value1, value2\"\n className=\"flex-1 min-w-[120px]\"\n />\n );\n }\n\n // Default - text input\n return (\n <DebouncedTextField\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Value\"\n className=\"flex-1 min-w-[100px]\"\n inputClassName=\"min-w-[100px]\"\n />\n );\n}\n\nfunction ConditionRow({\n rule,\n onRuleChange,\n onRemove,\n disabled,\n availableFields,\n collectionProperties,\n showErrors,\n showRemoveButton = true\n}: RuleRowProps & { showRemoveButton?: boolean }) {\n const fieldDataType = getFieldDataType(rule.field, collectionProperties);\n const applicableOperators = getOperatorsForDataType(fieldDataType);\n const property = getPropertyAtPath(rule.field, collectionProperties);\n const enumValues = getEnumValues(property);\n const operator = OPERATORS.find(op => op.id === rule.operator);\n const showValueField = operator?.valueType !== \"none\";\n\n // Validation: check for incomplete condition (only show after submission attempt)\n const isFieldMissing = !rule.field;\n const isValueMissing = showValueField && !rule.value && rule.value !== \"0\";\n const hasError = showErrors && (isFieldMissing || isValueMissing);\n\n // Get color for the field\n const getFieldColor = (fieldPath: string): string => {\n const contextField = CONTEXT_FIELDS.find(f => f.id === fieldPath);\n if (contextField) return contextField.color;\n\n if (!collectionProperties) return \"#888\";\n\n const prop = getPropertyAtPath(fieldPath, collectionProperties);\n if (!prop) return \"#888\";\n const config = getFieldConfig(prop, DEFAULT_FIELD_CONFIGS);\n return config?.color ?? \"#888\";\n };\n\n return (\n <div className={cls(\n \"flex items-center gap-2 p-2 rounded-md\",\n hasError ? \"bg-red-50 dark:bg-red-900/20\" : \"bg-surface-100 dark:bg-surface-800\"\n )}>\n {/* Field selector with colored badge */}\n <Select\n value={rule.field}\n onValueChange={(value) => {\n const newDataType = getFieldDataType(value, collectionProperties);\n const newApplicableOps = getOperatorsForDataType(newDataType);\n // Reset operator if current one isn't applicable\n const newOperator = newApplicableOps.find(op => op.id === rule.operator)\n ? rule.operator\n : newApplicableOps[0]?.id ?? \"==\";\n // Reset value when changing field\n onRuleChange({ ...rule, field: value, operator: newOperator as OperatorId, value: \"\" });\n }}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[180px]\"\n renderValue={(value) => (\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-2 h-2 rounded-full shrink-0\"\n style={{ backgroundColor: getFieldColor(value) }}\n />\n <span className=\"truncate\">{value}</span>\n </div>\n )}\n placeholder=\"Select field\">\n {/* Context fields */}\n {CONTEXT_FIELDS.map(field => (\n <SelectItem key={field.id} value={field.id}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: field.color }}\n />\n <span>{field.label}</span>\n <Chip size=\"small\" colorScheme=\"grayLight\" className=\"ml-auto\">\n {field.dataType}\n </Chip>\n </div>\n </SelectItem>\n ))}\n\n {/* Separator */}\n {availableFields.length > 0 && (\n <SelectItem value=\"_divider\" disabled>\n <span className=\"text-xs text-surface-500\">─ Entity Fields ─</span>\n </SelectItem>\n )}\n\n {/* Property fields */}\n {availableFields.map(field => {\n const color = getFieldColor(field);\n const dataType = getFieldDataType(field, collectionProperties);\n const prop = getPropertyAtPath(field, collectionProperties);\n const hasEnum = !!getEnumValues(prop);\n return (\n <SelectItem key={field} value={field}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: color }}\n />\n <span>{field}</span>\n <Chip size=\"small\" colorScheme=\"grayLight\" className=\"ml-auto\">\n {hasEnum ? \"enum\" : dataType}\n </Chip>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n\n {/* Operator - filtered by field type */}\n <Select\n value={rule.operator}\n onValueChange={(value) => onRuleChange({ ...rule, operator: value as OperatorId })}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[120px]\">\n {applicableOperators.map(op => (\n <SelectItem key={op.id} value={op.id}>\n {op.label}\n </SelectItem>\n ))}\n </Select>\n\n {/* Dynamic Value input */}\n {showValueField && (\n <ConditionValueInput\n value={rule.value}\n onChange={(newValue) => onRuleChange({ ...rule, value: newValue })}\n dataType={fieldDataType}\n enumValues={enumValues}\n disabled={disabled}\n operator={rule.operator}\n />\n )}\n\n {/* Remove button */}\n {showRemoveButton && (\n <IconButton onClick={onRemove} disabled={disabled} size=\"small\" variant=\"ghost\">\n <DeleteIcon size=\"smallest\" />\n </IconButton>\n )}\n </div>\n );\n}\n\n/**\n * A condition group row with AND/OR logic selector and multiple rules\n */\nfunction ConditionGroupRow({\n conditionType,\n group,\n onGroupChange,\n onRemove,\n disabled,\n availableFields,\n collectionProperties,\n showErrors\n}: ConditionGroupRowProps) {\n const handleLogicChange = (logic: LogicOperator) => {\n onGroupChange({ ...group, logic });\n };\n\n const handleRuleChange = (index: number, rule: SimpleRule) => {\n const newRules = [...group.rules];\n newRules[index] = rule;\n onGroupChange({ ...group, rules: newRules });\n };\n\n const handleRemoveRule = (index: number) => {\n const newRules = group.rules.filter((_, i) => i !== index);\n if (newRules.length === 0) {\n onRemove();\n } else {\n onGroupChange({ ...group, rules: newRules });\n }\n };\n\n const handleAddRule = () => {\n const defaultRule: SimpleRule = {\n field: availableFields[0] ?? \"isNew\",\n operator: \"==\",\n value: \"\"\n };\n onGroupChange({ ...group, rules: [...group.rules, defaultRule] });\n };\n\n return (\n <div className={cls(\"p-3 bg-surface-50 dark:bg-surface-900 rounded-lg border\", defaultBorderMixin)}>\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center gap-2\">\n <Typography variant=\"label\" className=\"font-medium text-primary\">\n {CONDITION_TYPES.find(ct => ct.id === conditionType)?.label} when\n </Typography>\n {group.rules.length > 1 && (\n <Select\n value={group.logic}\n onValueChange={(value) => handleLogicChange(value as LogicOperator)}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[100px]\">\n <SelectItem value=\"and\">All of these</SelectItem>\n <SelectItem value=\"or\">Any of these</SelectItem>\n </Select>\n )}\n </div>\n <IconButton onClick={onRemove} disabled={disabled} size=\"small\" variant=\"ghost\">\n <DeleteIcon size=\"smallest\" />\n </IconButton>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {group.rules.map((rule, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <Typography variant=\"caption\" className=\"text-center text-secondary font-medium uppercase\">\n {group.logic === \"and\" ? \"AND\" : \"OR\"}\n </Typography>\n )}\n <ConditionRow\n rule={rule}\n onRuleChange={(newRule: SimpleRule) => handleRuleChange(index, newRule)}\n onRemove={() => handleRemoveRule(index)}\n disabled={disabled}\n availableFields={availableFields}\n collectionProperties={collectionProperties}\n showErrors={showErrors}\n showRemoveButton={group.rules.length > 1}\n />\n </React.Fragment>\n ))}\n </div>\n\n <button\n onClick={handleAddRule}\n disabled={disabled}\n type=\"button\"\n className={cls(\n \"mt-3 w-full py-2 px-3 rounded-md text-sm\",\n \"border border-dashed text-secondary\",\n \"hover:bg-surface-100 dark:hover:bg-surface-800\",\n \"transition-colors\",\n defaultBorderMixin\n )}\n >\n + Add condition\n </button>\n </div>\n );\n}\n\n/**\n * Convert a simple rule to JSON-Logic format\n */\nfunction simpleRuleToJsonLogic(rule: SimpleRule): Record<string, any> {\n // Guard against empty field or operator which creates invalid Firestore keys\n if (!rule.field || !rule.operator) {\n // Return a valid default rule instead of creating invalid data\n return { \"!!\": { var: \"values._placeholder\" } };\n }\n\n const varRef = { var: `values.${rule.field}` };\n\n // Handle special fields that don't need the \"values.\" prefix\n const fieldVar = rule.field.startsWith(\"user.\") || rule.field === \"isNew\" || rule.field === \"entityId\"\n ? { var: rule.field }\n : varRef;\n\n if (rule.operator === \"!!\") {\n return { \"!!\": fieldVar };\n }\n if (rule.operator === \"!\") {\n return { \"!\": fieldVar };\n }\n if (rule.operator === \"isPast\") {\n return { \"isPast\": fieldVar };\n }\n if (rule.operator === \"isFuture\") {\n return { \"isFuture\": fieldVar };\n }\n\n // Parse value - try to convert to appropriate type\n let parsedValue: any = rule.value;\n if (rule.value === \"true\") parsedValue = true;\n else if (rule.value === \"false\") parsedValue = false;\n else if (rule.value === \"null\") parsedValue = null;\n else if (!isNaN(Number(rule.value)) && rule.value !== \"\") parsedValue = Number(rule.value);\n\n // Handle array values for \"in\" and \"!in\" operators\n if ((rule.operator === \"in\" || rule.operator === \"!in\") && typeof parsedValue === \"string\") {\n parsedValue = parsedValue.split(\",\").map(s => s.trim());\n }\n\n // Handle \"!in\" (not contains) - wrap \"in\" with negation\n if (rule.operator === \"!in\") {\n return { \"!\": { \"in\": [fieldVar, parsedValue] } };\n }\n\n return { [rule.operator]: [fieldVar, parsedValue] };\n}\n\n/**\n * Try to parse JSON-Logic back to a simple rule\n */\nfunction jsonLogicToSimpleRule(jsonLogic: Record<string, any>): SimpleRule | null {\n try {\n const operator = Object.keys(jsonLogic)[0] as OperatorId;\n const args = jsonLogic[operator];\n\n // Handle \"!\" operator - could be negation of a value or negation of \"in\" (not contains)\n if (operator === \"!\") {\n // Check if it's a negated \"in\" operation: {\"!\": {\"in\": [...]}}\n if (typeof args === \"object\" && args !== null && \"in\" in args) {\n const inArgs = args.in;\n if (Array.isArray(inArgs) && inArgs.length === 2) {\n const [left, right] = inArgs;\n if (left?.var) {\n const field = left.var.replace(/^values\\./, \"\");\n const value = Array.isArray(right)\n ? right.join(\", \")\n : String(right ?? \"\");\n return { field, operator: \"!in\", value };\n }\n }\n }\n // Otherwise it's a simple negation (is falsy)\n if (args?.var) {\n const field = args.var.replace(/^values\\./, \"\");\n return { field, operator: \"!\", value: \"\" };\n }\n }\n\n if (operator === \"!!\") {\n const varObj = args;\n if (varObj?.var) {\n const field = varObj.var.replace(/^values\\./, \"\");\n return { field, operator, value: \"\" };\n }\n }\n\n // Handle isPast and isFuture operators\n if (operator === \"isPast\" || operator === \"isFuture\") {\n const varObj = args;\n if (varObj?.var) {\n const field = varObj.var.replace(/^values\\./, \"\");\n return { field, operator, value: \"\" };\n }\n }\n\n if (Array.isArray(args) && args.length === 2) {\n const [left, right] = args;\n if (left?.var) {\n const field = left.var.replace(/^values\\./, \"\");\n const value = Array.isArray(right)\n ? right.join(\", \")\n : String(right ?? \"\");\n return { field, operator, value };\n }\n }\n } catch {\n // Fall through\n }\n return null;\n}\n\n/**\n * Convert a condition group to JSON-Logic format\n */\nfunction groupToJsonLogic(group: ConditionGroup): Record<string, any> {\n const ruleLogics = group.rules\n .filter(rule => rule.field && rule.operator) // Filter out incomplete rules\n .map(rule => simpleRuleToJsonLogic(rule));\n\n const groupLogics = (group.groups || [])\n .map(g => groupToJsonLogic(g));\n\n const allLogics = [...ruleLogics, ...groupLogics];\n\n // If only one condition, don't wrap in and/or\n if (allLogics.length === 1) {\n return allLogics[0];\n }\n\n // If no conditions, return a default true condition\n if (allLogics.length === 0) {\n return { \"!!\": { var: \"values._placeholder\" } };\n }\n\n return { [group.logic]: allLogics };\n}\n\n/**\n * Try to parse JSON-Logic back to a condition group\n */\nfunction jsonLogicToGroup(jsonLogic: Record<string, any>): ConditionGroup | null {\n try {\n const operator = Object.keys(jsonLogic)[0];\n\n // Check if it's an AND or OR group\n if (operator === \"and\" || operator === \"or\") {\n const args = jsonLogic[operator];\n if (Array.isArray(args)) {\n const rules: SimpleRule[] = [];\n const groups: ConditionGroup[] = [];\n\n for (const arg of args) {\n // Check if this is a nested group\n const nestedOperator = Object.keys(arg)[0];\n if (nestedOperator === \"and\" || nestedOperator === \"or\") {\n const nestedGroup = jsonLogicToGroup(arg);\n if (nestedGroup) {\n groups.push(nestedGroup);\n }\n } else {\n // It's a simple rule\n const rule = jsonLogicToSimpleRule(arg);\n if (rule) {\n rules.push(rule);\n }\n }\n }\n\n return {\n logic: operator,\n rules,\n groups: groups.length > 0 ? groups : undefined\n };\n }\n }\n\n // It's a single rule - wrap in an AND group\n const rule = jsonLogicToSimpleRule(jsonLogic);\n if (rule) {\n return {\n logic: \"and\",\n rules: [rule]\n };\n }\n } catch {\n // Fall through\n }\n return null;\n}\n\nexport interface ConditionsEditorProps {\n disabled: boolean;\n /**\n * Optional collection properties for populating the field selector.\n * If not provided, a basic set of common fields is used.\n */\n collectionProperties?: Properties;\n}\n\nexport function ConditionsEditor({ disabled, collectionProperties }: ConditionsEditorProps) {\n const { values, setFieldValue, submitCount } = useFormex<PropertyWithId>();\n\n // Get property paths from collection properties (includes nested maps)\n const availableFields: string[] = collectionProperties\n ? getPropertyPaths(collectionProperties)\n : [];\n\n // Get current conditions from form values\n const conditions = (values as any).conditions ?? {};\n\n // DEBUG: Log conditions to see what's being loaded\n console.log(\"[ConditionsEditor] Loaded conditions:\", conditions);\n\n const activeConditions: { type: ConditionType; group: ConditionGroup }[] = [];\n\n for (const type of CONDITION_TYPES) {\n const jsonLogic = conditions[type.id as keyof typeof conditions];\n if (jsonLogic) {\n console.log(`[ConditionsEditor] Parsing ${type.id}:`, jsonLogic);\n const group = jsonLogicToGroup(jsonLogic as Record<string, any>);\n console.log(`[ConditionsEditor] Parsed group:`, group);\n if (group) {\n activeConditions.push({ type: type.id, group });\n }\n }\n }\n\n const handleAddCondition = (conditionType: ConditionType) => {\n const defaultRule: SimpleRule = {\n field: availableFields[0] ?? \"isNew\",\n operator: \"==\",\n value: \"\"\n };\n\n const defaultGroup: ConditionGroup = {\n logic: \"and\",\n rules: [defaultRule]\n };\n\n const jsonLogic = groupToJsonLogic(defaultGroup);\n setFieldValue(`conditions.${conditionType}`, jsonLogic);\n };\n\n const handleGroupChange = (type: ConditionType, group: ConditionGroup) => {\n const jsonLogic = groupToJsonLogic(group);\n setFieldValue(`conditions.${type}`, jsonLogic);\n };\n\n const handleRemoveCondition = (type: ConditionType) => {\n const newConditions = { ...conditions };\n delete (newConditions as any)[type];\n if (Object.keys(newConditions).length === 0) {\n setFieldValue(\"conditions\", undefined);\n } else {\n setFieldValue(\"conditions\", newConditions);\n }\n };\n\n // Condition types that aren't already used\n const availableConditionTypes = CONDITION_TYPES.filter(\n ct => !conditions[ct.id as keyof typeof conditions]\n );\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Typography variant=\"caption\" color=\"secondary\">\n Add conditions to dynamically control this field based on other field values or user context.\n </Typography>\n\n {/* Active conditions */}\n {activeConditions.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n {activeConditions.map(({ type, group }) => (\n <ConditionGroupRow\n key={type}\n conditionType={type}\n group={group}\n onGroupChange={(newGroup) => handleGroupChange(type, newGroup)}\n onRemove={() => handleRemoveCondition(type)}\n disabled={disabled}\n availableFields={availableFields}\n collectionProperties={collectionProperties}\n showErrors={submitCount > 0}\n />\n ))}\n </div>\n )}\n\n {/* Add new condition - click to add directly */}\n {availableConditionTypes.length > 0 && (\n <Select\n value=\"\"\n onValueChange={(value) => handleAddCondition(value as ConditionType)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"+ Add condition...\"\n className=\"w-full max-w-xs\">\n {availableConditionTypes.map(ct => (\n <SelectItem key={ct.id} value={ct.id}>\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{ct.label}</span>\n <span className=\"text-xs text-surface-500\">{ct.description}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n )}\n\n {activeConditions.length === 0 && availableConditionTypes.length === 0 && (\n <Typography variant=\"caption\" color=\"disabled\" className=\"text-center py-4\">\n All condition types are configured.\n </Typography>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { useFormex } from \"@firecms/formex\";\nimport {\n DeleteIcon,\n IconButton,\n Select,\n SelectItem,\n Typography,\n MultiSelect,\n MultiSelectItem,\n cls,\n defaultBorderMixin,\n DebouncedTextField,\n BooleanSwitchWithLabel\n} from \"@firecms/ui\";\nimport {\n Properties,\n Property,\n PropertyOrBuilder,\n getFieldConfig,\n DEFAULT_FIELD_CONFIGS,\n EnumValueConfig,\n isPropertyBuilder\n} from \"@firecms/core\";\nimport { PropertyWithId } from \"../../PropertyEditView\";\nimport { getPropertyPaths } from \"./property_paths\";\n\n/**\n * Enum condition types - maps to PropertyConditions structure:\n * - \"filter\" → conditions.allowedEnumValues (JSON Logic returning allowed IDs)\n * - \"exclude\" → conditions.excludedEnumValues (JSON Logic returning excluded IDs)\n */\nconst ENUM_CONDITION_TYPES = [\n { id: \"allowedEnumValues\", label: \"Filter Options\", description: \"Only show selected enum values when condition is true\" },\n { id: \"excludedEnumValues\", label: \"Exclude Options\", description: \"Hide selected enum values when condition is true\" }\n] as const;\n\ntype EnumConditionType = typeof ENUM_CONDITION_TYPES[number][\"id\"];\n\n/**\n * Operators for conditions\n */\nconst OPERATORS = [\n { id: \"==\", label: \"equals\", valueType: \"any\" },\n { id: \"!=\", label: \"not equals\", valueType: \"any\" },\n { id: \"in\", label: \"contains\", valueType: \"array\" },\n { id: \"!!\", label: \"has a value\", valueType: \"none\" },\n { id: \"!\", label: \"is empty\", valueType: \"none\" }\n] as const;\n\ntype OperatorId = typeof OPERATORS[number][\"id\"];\n\n// Context fields\nconst CONTEXT_FIELDS = [\n { id: \"isNew\", label: \"Is New Entity\", dataType: \"boolean\", color: \"#9c27b0\" },\n { id: \"entityId\", label: \"Entity ID\", dataType: \"string\", color: \"#2196f3\" },\n { id: \"user.roles\", label: \"User Roles\", dataType: \"array\", color: \"#ff9800\" }\n] as const;\n\ninterface EnumConditionConfig {\n field: string;\n operator: OperatorId;\n value: string;\n selectedEnumIds: string[];\n}\n\n/**\n * Get the property at a given path.\n * Returns undefined if the path contains a PropertyBuilder (callback).\n */\nfunction getPropertyAtPath(\n fieldPath: string,\n collectionProperties?: Properties\n): Property | undefined {\n if (!collectionProperties) return undefined;\n\n const parts = fieldPath.split(\".\");\n let current: Properties | undefined = collectionProperties;\n let property: Property | undefined;\n\n for (const part of parts) {\n if (!current) return undefined;\n const propertyOrBuilder = current[part] as PropertyOrBuilder | undefined;\n if (!propertyOrBuilder) return undefined;\n\n if (isPropertyBuilder(propertyOrBuilder)) return undefined;\n\n property = propertyOrBuilder as Property;\n\n if (property.dataType === \"map\" && property.properties) {\n current = property.properties as Properties;\n } else {\n current = undefined;\n }\n }\n\n return property;\n}\n\n/**\n * Get enum values from the current property being edited\n */\nfunction getCurrentPropertyEnumValues(values: PropertyWithId): EnumValueConfig[] {\n if (values.dataType === \"string\" && values.enumValues) {\n if (Array.isArray(values.enumValues)) {\n return values.enumValues;\n }\n return Object.entries(values.enumValues).map(([id, label]) => ({\n id,\n label: typeof label === \"string\" ? label : (label as EnumValueConfig).label\n }));\n }\n return [];\n}\n\n/**\n * Get color for a field\n */\nfunction getFieldColor(fieldPath: string, collectionProperties?: Properties): string {\n const contextField = CONTEXT_FIELDS.find(f => f.id === fieldPath);\n if (contextField) return contextField.color;\n\n if (!collectionProperties) return \"#888\";\n\n const prop = getPropertyAtPath(fieldPath, collectionProperties);\n if (!prop) return \"#888\";\n const config = getFieldConfig(prop, DEFAULT_FIELD_CONFIGS);\n return config?.color ?? \"#888\";\n}\n\n/**\n * Get enum values from a property (for the selected condition field)\n */\nfunction getFieldEnumValues(property: Property | undefined): EnumValueConfig[] {\n if (!property) return [];\n if (property.dataType === \"string\" && property.enumValues) {\n if (Array.isArray(property.enumValues)) {\n return property.enumValues;\n }\n return Object.entries(property.enumValues).map(([id, label]) => ({\n id,\n label: typeof label === \"string\" ? label : (label as EnumValueConfig).label\n }));\n }\n return [];\n}\n\n/**\n * Convert an array to an object with numeric keys for Firestore storage.\n * Firestore doesn't allow nested arrays, so we store as {\"0\": \"a\", \"1\": \"b\"}\n * The runtime will convert back via objectToArray().\n */\nfunction arrayToObject(arr: string[]): Record<string, string> {\n const result: Record<string, string> = {};\n arr.forEach((v, i) => {\n result[String(i)] = v;\n });\n return result;\n}\n\n/**\n * Build JSON Logic rule: { \"if\": [ condition, thenValue, elseValue ] }\n * When condition is true, return the selected enum IDs.\n * When false, return all enum IDs or empty (depending on type).\n * \n * IMPORTANT: We store arrays as objects with numeric keys to avoid\n * Firestore's \"Nested arrays are not supported\" error.\n */\nfunction buildEnumFilterRule(\n config: EnumConditionConfig,\n conditionType: EnumConditionType,\n allEnumIds: string[]\n): Record<string, unknown> {\n // Guard against empty field or operator which creates invalid Firestore keys\n if (!config.field || !config.operator) {\n // Return a valid default rule\n return {\n \"if\": [\n { \"!!\": { var: \"values._placeholder\" } },\n {},\n arrayToObject(allEnumIds)\n ]\n };\n }\n\n const fieldVar = config.field.startsWith(\"user.\") || config.field === \"isNew\" || config.field === \"entityId\"\n ? { var: config.field }\n : { var: `values.${config.field}` };\n\n // Build the condition\n let condition: Record<string, unknown>;\n if (config.operator === \"!!\") {\n condition = { \"!!\": fieldVar };\n } else if (config.operator === \"!\") {\n condition = { \"!\": fieldVar };\n } else {\n let parsedValue: unknown = config.value;\n if (config.value === \"true\") parsedValue = true;\n else if (config.value === \"false\") parsedValue = false;\n else if (!isNaN(Number(config.value)) && config.value !== \"\") parsedValue = Number(config.value);\n\n if (config.operator === \"in\" && typeof parsedValue === \"string\") {\n parsedValue = parsedValue.split(\",\").map(s => s.trim());\n }\n\n condition = { [config.operator]: [fieldVar, parsedValue] };\n }\n\n // For allowedEnumValues: when condition true, show selected; when false, show all\n // For excludedEnumValues: when condition true, exclude selected; when false, exclude nothing\n // Convert arrays to objects to avoid Firestore nested array error\n if (conditionType === \"allowedEnumValues\") {\n return {\n \"if\": [\n condition,\n arrayToObject(config.selectedEnumIds), // When true: only these\n arrayToObject(allEnumIds) // When false: all\n ]\n };\n } else {\n // excludedEnumValues\n return {\n \"if\": [\n condition,\n arrayToObject(config.selectedEnumIds), // When true: exclude these\n {} // When false: exclude nothing\n ]\n };\n }\n}\n\n/**\n * Convert an object with numeric keys (Firestore serialization) back to an array.\n * {\"0\": \"a\", \"1\": \"b\"} -> [\"a\", \"b\"]\n */\nfunction objectToArray(obj: unknown): string[] {\n if (Array.isArray(obj)) return obj.map(String);\n if (obj && typeof obj === \"object\") {\n const keys = Object.keys(obj);\n // Check if all keys are numeric\n if (keys.length > 0 && keys.every(k => !isNaN(Number(k)))) {\n return keys\n .sort((a, b) => Number(a) - Number(b))\n .map(k => String((obj as Record<string, unknown>)[k]));\n }\n }\n return [];\n}\n\n/**\n * Parse JSON Logic back to EnumConditionConfig\n */\nfunction parseEnumFilterRule(rule: Record<string, unknown>): EnumConditionConfig | null {\n try {\n // Expected: { \"if\": [ condition, selectedIds, fallbackIds ] }\n const ifRule = rule[\"if\"];\n if (!Array.isArray(ifRule) || ifRule.length < 2) return null;\n\n const [condition, selectedEnumIdsRaw] = ifRule;\n\n // Handle both array format and Firestore's object-with-numeric-keys format\n const selectedEnumIds = objectToArray(selectedEnumIdsRaw);\n if (selectedEnumIds.length === 0 && selectedEnumIdsRaw) {\n // If it was truthy but we got no values, parsing failed\n console.log(\"[EnumConditionsEditor] Warning: Could not parse selectedEnumIds:\", selectedEnumIdsRaw);\n }\n\n // Parse the condition\n const conditionObj = condition as Record<string, unknown>;\n const operator = Object.keys(conditionObj)[0] as OperatorId;\n const args = conditionObj[operator] as unknown;\n\n let field = \"\";\n let value = \"\";\n\n if (operator === \"!!\" || operator === \"!\") {\n const varObj = args as Record<string, string> | null;\n if (varObj?.var) {\n field = varObj.var.replace(/^values\\./, \"\");\n }\n } else if (Array.isArray(args) && args.length === 2) {\n const [left, right] = args as [Record<string, string>, unknown];\n if (left?.var) {\n field = left.var.replace(/^values\\./, \"\");\n value = Array.isArray(right) ? right.join(\", \") : String(right ?? \"\");\n }\n }\n\n return {\n field,\n operator,\n value,\n selectedEnumIds\n };\n } catch (e) {\n console.error(\"[EnumConditionsEditor] Error parsing rule:\", e);\n return null;\n }\n}\n\ninterface EnumConditionRowProps {\n conditionType: EnumConditionType;\n config: EnumConditionConfig;\n onConfigChange: (config: EnumConditionConfig) => void;\n onRemove: () => void;\n disabled: boolean;\n availableFields: string[];\n collectionProperties?: Properties;\n propertyEnumValues: EnumValueConfig[];\n showErrors: boolean;\n}\n\nfunction EnumConditionRow({\n conditionType,\n config,\n onConfigChange,\n onRemove,\n disabled,\n availableFields,\n collectionProperties,\n propertyEnumValues,\n showErrors\n}: EnumConditionRowProps) {\n const operator = OPERATORS.find(op => op.id === config.operator);\n const showValueField = operator?.valueType !== \"none\";\n\n // Get the property for the selected field\n const selectedFieldProperty = getPropertyAtPath(config.field, collectionProperties);\n const isBoolean = config.field === \"isNew\" || selectedFieldProperty?.dataType === \"boolean\";\n\n // Check if the selected field has enum values\n const fieldEnumValues = getFieldEnumValues(selectedFieldProperty);\n\n // Validation: check for incomplete condition (only show after submission attempt)\n const isFieldMissing = !config.field;\n const isValueMissing = showValueField && !config.value && config.value !== \"0\";\n const isEnumSelectionMissing = config.selectedEnumIds.length === 0;\n const hasError = showErrors && (isFieldMissing || isValueMissing || isEnumSelectionMissing);\n\n return (\n <div className={cls(\n \"p-3 bg-surface-50 dark:bg-surface-900 rounded-lg border\",\n hasError ? \"border-red-300 dark:border-red-700\" : defaultBorderMixin\n )}>\n {/* Title line */}\n <div className=\"flex items-center justify-between mb-2\">\n <Typography variant=\"label\" className=\"font-medium text-primary\">\n {ENUM_CONDITION_TYPES.find(ct => ct.id === conditionType)?.label} when\n </Typography>\n <IconButton\n onClick={onRemove}\n disabled={disabled}\n size=\"small\"\n variant=\"ghost\">\n <DeleteIcon size=\"smallest\" />\n </IconButton>\n </div>\n\n {/* Condition row: Field, Operator, Value */}\n <div className=\"flex items-center gap-2 mb-3\">\n {/* Field selector */}\n <Select\n value={config.field}\n onValueChange={(value) => onConfigChange({ ...config, field: value, value: \"\" })}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[140px]\"\n placeholder=\"Field\">\n {CONTEXT_FIELDS.map(field => (\n <SelectItem key={field.id} value={field.id}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-2 h-2 rounded-full\"\n style={{ backgroundColor: field.color }}\n />\n <span>{field.label}</span>\n </div>\n </SelectItem>\n ))}\n {availableFields.length > 0 && (\n <SelectItem value=\"_divider\" disabled>\n <span className=\"text-xs text-surface-500\">─ Fields ─</span>\n </SelectItem>\n )}\n {availableFields.map(field => (\n <SelectItem key={field} value={field}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-2 h-2 rounded-full\"\n style={{ backgroundColor: getFieldColor(field, collectionProperties) }}\n />\n <span>{field}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n\n {/* Operator */}\n <Select\n value={config.operator}\n onValueChange={(value) => onConfigChange({ ...config, operator: value as OperatorId })}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[100px]\">\n {OPERATORS.map(op => (\n <SelectItem key={op.id} value={op.id}>{op.label}</SelectItem>\n ))}\n </Select>\n\n {/* Value - dynamic based on field type */}\n {showValueField && (\n isBoolean ? (\n <BooleanSwitchWithLabel\n value={config.value === \"true\"}\n size=\"small\"\n position=\"start\"\n disabled={disabled}\n onValueChange={(v) => onConfigChange({ ...config, value: v ? \"true\" : \"false\" })}\n />\n ) : fieldEnumValues.length > 0 ? (\n // Show Select for enum fields\n <Select\n value={config.value}\n onValueChange={(value) => onConfigChange({ ...config, value })}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Select value...\"\n className=\"min-w-[120px]\">\n {fieldEnumValues.map(ev => (\n <SelectItem key={String(ev.id)} value={String(ev.id)}>\n {ev.label}\n </SelectItem>\n ))}\n </Select>\n ) : (\n <DebouncedTextField\n value={config.value}\n onChange={(e) => onConfigChange({ ...config, value: e.target.value })}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Value\"\n className=\"flex-1 min-w-[80px]\"\n />\n )\n )}\n </div>\n\n {/* Enum selection */}\n <div>\n <Typography variant=\"caption\" color=\"secondary\" className=\"block mb-2\">\n {conditionType === \"allowedEnumValues\" ? \"Show only:\" : \"Hide:\"}\n </Typography>\n <MultiSelect\n value={config.selectedEnumIds}\n onValueChange={(values) => onConfigChange({ ...config, selectedEnumIds: values })}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Select values...\"\n useChips={true}>\n {propertyEnumValues.map(ev => (\n <MultiSelectItem key={String(ev.id)} value={String(ev.id)}>\n {ev.label}\n </MultiSelectItem>\n ))}\n </MultiSelect>\n </div>\n\n {/* Validation error message */}\n {hasError && (\n <Typography variant=\"caption\" className=\"mt-2 text-red-500 dark:text-red-400\">\n {isFieldMissing\n ? \"Please select a field for this condition\"\n : isValueMissing\n ? \"Please enter a value for this condition\"\n : \"Please select at least one value to filter\"\n }\n </Typography>\n )}\n </div>\n );\n}\n\nexport interface EnumConditionsEditorProps {\n disabled: boolean;\n collectionProperties?: Properties;\n}\n\nexport function EnumConditionsEditor({ disabled, collectionProperties }: EnumConditionsEditorProps) {\n const { values, setFieldValue, submitCount } = useFormex<PropertyWithId>();\n\n const availableFields: string[] = collectionProperties\n ? getPropertyPaths(collectionProperties)\n : [];\n\n const propertyEnumValues = getCurrentPropertyEnumValues(values);\n\n // Only show for enum properties\n if (propertyEnumValues.length === 0) {\n return null;\n }\n\n const allEnumIds = propertyEnumValues.map(ev => String(ev.id));\n\n // Get conditions from the correct path: values.conditions\n const conditions = (values as PropertyWithId & { conditions?: Record<string, unknown> }).conditions ?? {};\n\n // Parse existing enum conditions\n const activeConditions: { type: EnumConditionType; config: EnumConditionConfig }[] = [];\n\n for (const type of ENUM_CONDITION_TYPES) {\n const rule = conditions[type.id] as Record<string, unknown> | undefined;\n if (rule) {\n const config = parseEnumFilterRule(rule);\n if (config) {\n activeConditions.push({ type: type.id, config });\n }\n }\n }\n\n const handleAddCondition = (conditionType: EnumConditionType) => {\n const defaultConfig: EnumConditionConfig = {\n field: availableFields[0] ?? \"isNew\",\n operator: \"==\",\n value: \"\",\n selectedEnumIds: []\n };\n\n const rule = buildEnumFilterRule(defaultConfig, conditionType, allEnumIds);\n setFieldValue(`conditions.${conditionType}`, rule);\n };\n\n const handleConfigChange = (type: EnumConditionType, config: EnumConditionConfig) => {\n const rule = buildEnumFilterRule(config, type, allEnumIds);\n setFieldValue(`conditions.${type}`, rule);\n };\n\n const handleRemoveCondition = (type: EnumConditionType) => {\n const newConditions = { ...conditions };\n delete newConditions[type];\n if (Object.keys(newConditions).length === 0) {\n setFieldValue(\"conditions\", undefined);\n } else {\n setFieldValue(\"conditions\", newConditions);\n }\n };\n\n const availableConditionTypes = ENUM_CONDITION_TYPES.filter(\n ct => !conditions[ct.id]\n );\n\n return (\n <div className={cls(\"flex flex-col gap-4 mt-4 pt-4 border-t\", defaultBorderMixin)}>\n <Typography variant=\"label\" className=\"font-medium\">\n Enum Value Conditions\n </Typography>\n <Typography variant=\"caption\" color=\"secondary\">\n Dynamically filter which options are available.\n </Typography>\n\n {activeConditions.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n {activeConditions.map(({ type, config }) => (\n <EnumConditionRow\n key={type}\n conditionType={type}\n config={config}\n onConfigChange={(newConfig) => handleConfigChange(type, newConfig)}\n onRemove={() => handleRemoveCondition(type)}\n disabled={disabled}\n availableFields={availableFields}\n collectionProperties={collectionProperties}\n propertyEnumValues={propertyEnumValues}\n showErrors={submitCount > 0}\n />\n ))}\n </div>\n )}\n\n {availableConditionTypes.length > 0 && (\n <Select\n value=\"\"\n onValueChange={(value) => handleAddCondition(value as EnumConditionType)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"+ Add enum condition...\"\n className=\"w-full max-w-xs\">\n {availableConditionTypes.map(ct => (\n <SelectItem key={ct.id} value={ct.id}>\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{ct.label}</span>\n <span className=\"text-xs text-surface-500\">{ct.description}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n )}\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 {\n ArrayProperty,\n BooleanProperty,\n DateProperty,\n MapProperty,\n mergeDeep,\n NumberProperty,\n Property,\n PropertyConfig,\n StringProperty\n} from \"@firecms/core\";\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 dataType: \"string\",\n propertyConfig: \"text_field\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"user_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"user_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined,\n userSelect: true\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multiline\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"multiline\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n multiline: true,\n storage: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"markdown\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"markdown\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: true,\n email: undefined,\n url: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"url\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"url\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: true,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"email\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"email\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: true,\n url: undefined,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: propertyData.enumValues ?? [],\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"number_input\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_input\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: undefined\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: propertyData.enumValues ?? []\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"multi_number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"number\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: {\n storagePath: \"/\"\n }\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n storage: propertyData.of?.storage ?? {\n storagePath: \"/\"\n }\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"group\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"group\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: false,\n properties: propertyData.properties ?? {}\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"key_value\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"key_value\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: true,\n properties: undefined\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"reference\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"reference\",\n propertyConfig: \"reference\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"reference_as_string\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"reference_as_string\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"multi_references\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_references\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"reference\"\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"switch\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"boolean\",\n propertyConfig: \"switch\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies BooleanProperty\n );\n } else if (selectedWidgetId === \"date_time\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"date\",\n propertyConfig: \"date_time\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n mode: \"date_time\"\n } satisfies DateProperty\n );\n } else if (selectedWidgetId === \"repeat\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"repeat\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"block\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"block\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n oneOf: {\n properties: {}\n }\n } satisfies 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 \"@firecms/formex\";\n\nimport { Select, SelectItem, TextField } from \"@firecms/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 urlValue = getIn(values, \"url\");\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: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { DEFAULT_FIELD_CONFIGS, PropertyConfigId, PropertyConfig } from \"@firecms/core\";\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 \"reference_as_string\",\n \"multi_references\",\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, ...b }), {});\n","import React, { useCallback } from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nimport {\n BooleanSwitchWithLabel,\n CloudUploadIcon,\n DebouncedTextField,\n ExpandablePanel,\n SettingsIcon,\n TextField,\n Typography\n} from \"@firecms/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\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) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\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.html ?? true) : true;\n const transformPastedTextValue = isMarkdownObject ? (markdownValue.transformPastedText ?? 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={\"Strip HTML on paste\"}\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={\"Convert pasted text to markdown\"}\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 <CloudUploadIcon />\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\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"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={\"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={\"Max size (in bytes)\"}\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: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"} />\n\n </div>\n </>\n );\n}\n","import React, { useDeferredValue, useEffect, useRef, useState } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { Formex, FormexController, getIn, useCreateFormex } from \"@firecms/formex\";\nimport {\n ConfirmationDialog,\n DEFAULT_FIELD_CONFIGS,\n getFieldConfig,\n getFieldId,\n isPropertyBuilder,\n isValidRegExp,\n mergeDeep,\n Properties,\n Property,\n PropertyConfig,\n PropertyConfigBadge,\n PropertyConfigId,\n} from \"@firecms/core\";\nimport {\n Button,\n Card,\n cls,\n DeleteIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundMixin,\n IconButton,\n InfoLabel,\n Tooltip,\n Typography,\n WarningIcon\n} from \"@firecms/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 { ConditionsPanel, ConditionsEditor, EnumConditionsEditor } from \"./properties/conditions\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { KeyValuePropertyField } from \"./properties/KeyValuePropertyField\";\nimport { updatePropertyFromWidget } from \"./utils/update_property_for_widget\";\nimport { UrlPropertyField } from \"./properties/UrlPropertyField\";\nimport { supportedFields } from \"./utils/supported_fields\";\nimport { MarkdownPropertyField } from \"./properties/MarkdownPropertyField\";\n\nexport type PropertyWithId = Property & {\n id?: string\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 collectionEditable: boolean;\n /**\n * Collection properties for populating the conditions field selector.\n * Includes nested map properties.\n */\n collectionProperties?: Properties;\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 getData,\n getController,\n propertyConfigs,\n collectionEditable,\n collectionProperties\n } = props;\n\n const initialValue: PropertyWithId = {\n id: \"\",\n name: \"\"\n } as PropertyWithId;\n\n const disabled = (Boolean(property && !editableProperty(property)) || !collectionEditable);\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, ...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: {\n ...property,\n editable: property.editable ?? true\n }\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 // Exclude the current property key when editing to avoid false duplicate error\n const keysToCheck = existingPropertyKeys?.filter(key => key !== propertyKey);\n const idError = validateId(values.id, keysToCheck);\n if (idError)\n errors.id = idError;\n }\n }\n\n if (values.dataType === \"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.dataType === \"reference\" && !values.path) {\n errors.path = \"You must specify a target collection for the field\";\n }\n if (values.propertyConfig === \"repeat\") {\n if (!(values as any).of) {\n errors.of = \"You need to specify a repeat field\";\n }\n }\n if (values.propertyConfig === \"block\") {\n if (!(values as any).oneOf) {\n errors.oneOf = \"You need to specify the properties of this block\";\n }\n }\n\n // Validate conditions - check for incomplete condition rules\n const conditions = (values as any).conditions;\n if (conditions) {\n const conditionErrors: Record<string, string> = {};\n const conditionTypes = [\"disabled\", \"hidden\", \"required\", \"readOnly\"];\n\n // Helper to check if a JSON Logic rule is incomplete (placeholder or empty keys)\n const isIncompleteRule = (rule: any): boolean => {\n if (!rule || typeof rule !== \"object\") return false;\n const ruleStr = JSON.stringify(rule);\n // Check for placeholder pattern used when field is not selected\n if (ruleStr.includes(\"values._placeholder\")) return true;\n // Check for empty string keys (invalid operators)\n if (Object.keys(rule).some(k => k === \"\")) return true;\n // Recursively check nested objects\n for (const key of Object.keys(rule)) {\n if (typeof rule[key] === \"object\" && isIncompleteRule(rule[key])) return true;\n }\n return false;\n };\n\n for (const type of conditionTypes) {\n const rule = conditions[type];\n if (rule && isIncompleteRule(rule)) {\n conditionErrors[type] = \"Incomplete condition - please select a field\";\n }\n }\n\n // Validate enum conditions (allowedEnumValues, excludedEnumValues)\n for (const enumType of [\"allowedEnumValues\", \"excludedEnumValues\"]) {\n const rule = conditions[enumType];\n if (rule && typeof rule === \"object\" && rule.if) {\n if (isIncompleteRule(rule)) {\n conditionErrors[enumType] = \"Incomplete condition - please select a field\";\n }\n }\n }\n\n if (Object.keys(conditionErrors).length > 0) {\n errors.conditions = conditionErrors;\n }\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 collectionEditable={collectionEditable}\n collectionProperties={collectionProperties}\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 equal(a.property, b.property)\n);\n\nexport function PropertyFormDialog({\n open,\n onCancel,\n onOkClicked,\n onPropertyChanged,\n getData,\n collectionEditable,\n ...formProps\n}: PropertyFormProps & {\n open?: boolean;\n onOkClicked?: () => void;\n onCancel?: () => void;\n}) {\n const formexRef = useRef<FormexController<PropertyWithId>>();\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 collectionEditable={collectionEditable}\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 collectionEditable,\n collectionProperties\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 collectionEditable: boolean;\n collectionProperties?: Properties;\n} & FormexController<PropertyWithId>) {\n\n const [selectOpen, setSelectOpen] = useState(autoOpenTypeSelect);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedFieldConfigId, setSelectedFieldConfigId] = useState<string | undefined>(values?.dataType ? 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 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 collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs} />;\n } else if (selectedFieldConfigId === \"block\") {\n childComponent =\n <BlockPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\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 === \"reference_as_string\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n asString={true}\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 collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs} />;\n } else if (selectedFieldConfigId === \"key_value\") {\n childComponent =\n <KeyValuePropertyField disabled={disabled} />;\n } else {\n childComponent = null;\n }\n\n return (\n <>\n {disabled && <InfoLabel mode={\"warn\"}>\n <Typography>This property can't be edited</Typography>\n <Typography variant={\"caption\"}>\n You may not have permission to\n edit it or it is defined in code with the <code>editable</code> flag set to <code>false</code>.\n </Typography>\n </InfoLabel>}\n\n <div className=\"flex mt-2 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\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 && existing && values?.id &&\n <IconButton\n variant={\"ghost\"}\n className=\"m-4\"\n disabled={disabled}\n onClick={() => setDeleteDialogOpen(true)}>\n <DeleteIcon />\n </IconButton>}\n </div>\n\n <div className={\"grid grid-cols-12 gap-y-12 mt-8 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 <div className={\"col-span-12\"}>\n <AdvancedPropertyValidation disabled={disabled} />\n </div>\n\n <div className={\"col-span-12\"}>\n <ConditionsPanel>\n <ConditionsEditor disabled={disabled} collectionProperties={collectionProperties} />\n <EnumConditionsEditor disabled={disabled} collectionProperties={collectionProperties} />\n </ConditionsPanel>\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 reference: \"Reference\",\n reference_as_string: \"Text\",\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};\n\nfunction WidgetSelectView({\n initialProperty,\n value,\n onValueChange,\n open,\n onOpenChange,\n disabled,\n showError,\n existing,\n propertyConfigs,\n inArray\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}) {\n\n const allSupportedFields = Object.entries(supportedFields).concat(Object.entries(propertyConfigs));\n\n const displayedWidgets = (inArray\n ? allSupportedFields.filter(([_, propertyConfig]) => !isPropertyBuilder(propertyConfig.property) && propertyConfig.property?.dataType !== \"array\")\n : allSupportedFields)\n .map(([key, propertyConfig]) => ({\n [key]: propertyConfig\n }))\n .reduce((a, b) => {\n return {\n ...a,\n ...b\n }\n }, {});\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) ? getFieldConfig(baseProperty, 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 p-4\",\n fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n )}>\n {!value && <em>Select a property widget</em>}\n {value && computedFieldConfig && <div\n className={cls(\n \"flex items-center\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={computedFieldConfig} />\n </div>\n <div className={\"flex flex-col items-start text-base text-left\"}>\n <div>{computedFieldConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n {computedFieldConfig.description}\n </Typography>\n </div>\n </div>}\n </div>\n <Dialog open={open}\n onOpenChange={(open) => onOpenChange(open, Boolean(value))}\n maxWidth={\"4xl\"}>\n <DialogTitle>\n Select a property widget\n </DialogTitle>\n <DialogContent>\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 </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 shouldWarnChangingDataType = existing && !isPropertyBuilder(baseProperty) && baseProperty.dataType !== initialProperty?.dataType;\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={shouldWarnChangingDataType} />\n </div>\n <div>\n <div className={\"flex flex-row gap-2 items-center\"}>\n {shouldWarnChangingDataType && <Tooltip\n title={\"This widget uses a different data type than the initially selected widget. This can cause errors with existing data.\"}>\n <WarningIcon size=\"smallest\" className={\"w-4\"} />\n </Tooltip>}\n <Typography\n variant={\"label\"}\n color={shouldWarnChangingDataType ? \"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","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n EntityCollection,\n FieldCaption,\n getFieldConfig,\n Property,\n PropertyConfigBadge,\n resolveCollection,\n unslugify,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n CloseIcon,\n IconButton,\n Select,\n SelectItem,\n Typography\n} from \"@firecms/ui\";\nimport { useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\n\nexport function KanbanConfigSection({\n className,\n forceExpanded\n}: {\n className?: string;\n forceExpanded?: boolean;\n}) {\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const { values, setFieldValue } = useFormex<EntityCollection>();\n const panelRef = useRef<HTMLDivElement>(null);\n const [columnPropertyDialogOpen, setColumnPropertyDialogOpen] = useState(false);\n\n // Resolve collection to get properties\n const resolvedCollection = useMemo(() => resolveCollection({\n collection: values,\n path: values.path,\n propertyConfigs: customizationController.propertyConfigs,\n authController\n }), [values, customizationController.propertyConfigs, authController]);\n\n // Get enum string properties (for columnProperty)\n const enumStringProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property }[] = [];\n if (!resolvedCollection.properties) return result;\n\n Object.entries(resolvedCollection.properties).forEach(([key, prop]) => {\n if (prop && 'dataType' in prop && prop.dataType === 'string' && prop.enumValues) {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [resolvedCollection.properties]);\n\n const kanbanConfig = values.kanban;\n\n // Check if columnProperty references a non-existent property\n const columnPropertyMissing = Boolean(kanbanConfig?.columnProperty) &&\n !enumStringProperties.some(p => p.key === kanbanConfig?.columnProperty);\n\n // Scroll to section when forceExpanded\n React.useEffect(() => {\n if (forceExpanded && panelRef.current) {\n setTimeout(() => {\n panelRef.current?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }, 100);\n }\n }, [forceExpanded]);\n\n const showCreateButton = !kanbanConfig?.columnProperty || columnPropertyMissing;\n const dialogPropertyKey = columnPropertyMissing && kanbanConfig?.columnProperty\n ? kanbanConfig.columnProperty\n : \"status\";\n const dialogPropertyName = columnPropertyMissing && kanbanConfig?.columnProperty\n ? unslugify(kanbanConfig.columnProperty)\n : \"Status\";\n\n return (\n <div className={className} ref={panelRef}>\n <Select\n key={`column-select-${enumStringProperties.length}`}\n name=\"kanban.columnProperty\"\n label=\"Kanban Column Property\"\n size={\"large\"}\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={enumStringProperties.length === 0}\n error={columnPropertyMissing}\n value={kanbanConfig?.columnProperty ?? \"\"}\n onValueChange={(v) => {\n if (v) {\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: v\n });\n } else {\n setFieldValue(\"kanban\", undefined);\n }\n }}\n renderValue={(value) => {\n if (columnPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = enumStringProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={kanbanConfig?.columnProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"kanban\", undefined);\n }}\n >\n <CloseIcon size=\"small\" />\n </IconButton>\n ) : undefined}\n >\n {enumStringProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Enum\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={columnPropertyMissing}>\n {columnPropertyMissing\n ? `Property \"${kanbanConfig?.columnProperty}\" does not exist or is not an enum string property. Please select a valid property or clear the selection.`\n : enumStringProperties.length === 0\n ? \"No enum string properties found. Add a string property with enumValues to use Kanban view.\"\n : \"Select a string property with enum values to group entities into columns\"\n }\n </FieldCaption>\n\n {showCreateButton && (\n <>\n <button\n type=\"button\"\n className=\"ml-3.5 text-sm text-primary hover:text-primary-dark mt-2\"\n onClick={() => setColumnPropertyDialogOpen(true)}\n >\n + Create \"{dialogPropertyKey}\" property\n </button>\n <PropertyFormDialog\n open={columnPropertyDialogOpen}\n onCancel={() => setColumnPropertyDialogOpen(false)}\n property={{\n dataType: \"string\",\n name: dialogPropertyName,\n enumValues: [\n { id: \"todo\", label: \"To Do\" },\n { id: \"in_progress\", label: \"In Progress\" },\n { id: \"done\", label: \"Done\" }\n ]\n }}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n collectionEditable={true}\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: id\n });\n setColumnPropertyDialogOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport {\n EntityCollection,\n FieldCaption,\n getFieldConfig,\n Property,\n PropertyConfigBadge,\n resolveCollection,\n unslugify,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n BooleanSwitchWithLabel,\n CloseIcon,\n Container,\n IconButton,\n Select,\n SelectItem,\n TextField,\n Typography\n} from \"@firecms/ui\";\n\nimport { useFormex } from \"@firecms/formex\";\nimport { LayoutModeSwitch } from \"./LayoutModeSwitch\";\nimport { ViewModeSwitch } from \"./ViewModeSwitch\";\nimport { KanbanConfigSection } from \"./KanbanConfigSection\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\n\nexport function DisplaySettingsForm({\n expandKanban\n}: {\n expandKanban?: boolean;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [orderPropertyDialogOpen, setOrderPropertyDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n\n // Resolve collection to get properties for order property select\n const resolvedCollection = useMemo(() => resolveCollection({\n collection: values,\n path: values.path,\n propertyConfigs: customizationController.propertyConfigs,\n authController\n }), [values, customizationController.propertyConfigs, authController]);\n\n // Get number properties (for orderProperty)\n const numberProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property; }[] = [];\n if (!resolvedCollection.properties) return result;\n\n Object.entries(resolvedCollection.properties).forEach(([key, prop]) => {\n if (prop && 'dataType' in prop && prop.dataType === 'number') {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [resolvedCollection.properties]);\n\n const showErrors = submitCount > 0;\n\n // Document ID generation value\n let customIdValue: \"true\" | \"false\" | \"optional\" | \"code_defined\" | undefined;\n if (typeof values.customId === \"object\") {\n customIdValue = \"code_defined\";\n } else if (values.customId === true) {\n customIdValue = \"true\";\n } else if (values.customId === false) {\n customIdValue = \"false\";\n } else if (values.customId === \"optional\") {\n customIdValue = \"optional\";\n }\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <Typography variant={\"h5\"} className={\"flex-grow\"}>\n Display settings\n </Typography>\n </div>\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Layout Mode (Side dialog vs Full screen) */}\n <LayoutModeSwitch\n className={\"col-span-12\"}\n value={values.openEntityMode ?? \"side_panel\"}\n onChange={(value) => setFieldValue(\"openEntityMode\", value)} />\n\n {/* View Mode (Table/Cards/Kanban) */}\n <ViewModeSwitch\n className={\"col-span-12\"}\n value={values.defaultViewMode ?? \"table\"}\n onChange={(value) => setFieldValue(\"defaultViewMode\", value)} />\n\n {/* Kanban Column Property */}\n <KanbanConfigSection className={\"col-span-12\"} forceExpanded={expandKanban} />\n\n {/* Order Property */}\n <div className={\"col-span-12 mt-4\"}>\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !numberProperties.some(p => p.key === values.orderProperty);\n\n return (\n <>\n <Select\n key={`order-select-${numberProperties.length}`}\n name=\"orderProperty\"\n label=\"Order Property\"\n size={\"large\"}\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={numberProperties.length === 0}\n error={orderPropertyMissing}\n value={values.orderProperty ?? \"\"}\n onValueChange={(v) => {\n setFieldValue(\"orderProperty\", v || undefined);\n }}\n renderValue={(value) => {\n if (orderPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = numberProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={values.orderProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"orderProperty\", undefined);\n }}\n >\n <CloseIcon size=\"small\" />\n </IconButton>\n ) : undefined}\n >\n {numberProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Number\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={orderPropertyMissing}>\n {orderPropertyMissing\n ? `Property \"${values.orderProperty}\" does not exist or is not a number property. Please select a valid property or clear the selection.`\n : numberProperties.length === 0\n ? \"No number properties found. Add a number property to enable ordering.\"\n : \"Select a number property to persist the order of items\"\n }\n </FieldCaption>\n </>\n );\n })()}\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !numberProperties.some(p => p.key === values.orderProperty);\n const showCreateButton = !values.orderProperty || orderPropertyMissing;\n\n const dialogPropertyKey = orderPropertyMissing && values.orderProperty\n ? values.orderProperty\n : \"__order\";\n const dialogPropertyName = orderPropertyMissing && values.orderProperty\n ? unslugify(values.orderProperty)\n : \"Order\";\n\n if (!showCreateButton) return null;\n\n return (\n <>\n <button\n type=\"button\"\n className=\"ml-3.5 text-sm text-primary hover:text-primary-dark mt-2\"\n onClick={() => setOrderPropertyDialogOpen(true)}\n >\n + Create \"{dialogPropertyKey}\" property\n </button>\n <PropertyFormDialog\n open={orderPropertyDialogOpen}\n onCancel={() => setOrderPropertyDialogOpen(false)}\n property={{\n dataType: \"number\",\n name: dialogPropertyName,\n disabled: true,\n hideFromCollection: true\n }}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n collectionEditable={true}\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"orderProperty\", id);\n setOrderPropertyDialogOpen(false);\n }}\n />\n </>\n );\n })()}\n </div>\n\n {/* Default row size */}\n <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n size={\"large\"}\n fullWidth={true}\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: any) => value.toUpperCase()}\n >\n {[\"xs\", \"s\", \"m\", \"l\", \"xl\"].map((value) => (\n <SelectItem\n key={`size-select-${value}`}\n value={value}>\n {value.toUpperCase()}\n </SelectItem>\n ))}\n </Select>\n </div>\n\n {/* Side dialog width */}\n <div className={\"col-span-12\"}>\n <TextField\n name={\"sideDialogWidth\"}\n type={\"number\"}\n aria-describedby={\"sideDialogWidth-helper\"}\n onChange={(e) => {\n const value = e.target.value;\n if (!value) {\n setFieldValue(\"sideDialogWidth\", null);\n } else if (!isNaN(Number(value))) {\n setFieldValue(\"sideDialogWidth\", Number(value));\n }\n }}\n endAdornment={<IconButton\n size={\"small\"}\n onClick={() => {\n setFieldValue(\"sideDialogWidth\", null);\n }}\n disabled={!values.sideDialogWidth}>\n <CloseIcon size={\"small\"} />\n </IconButton>}\n value={values.sideDialogWidth ?? \"\"}\n label={\"Side dialog width\"} />\n <FieldCaption>\n Optionally define the width (in pixels) of entities side dialog. Default is 768px\n </FieldCaption>\n </div>\n\n {/* Inline editing */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label={values.inlineEditing === undefined || values.inlineEditing ? \"Data can be edited directly in the table view\" : \"Data can be edited only in the form view\"}\n onValueChange={(v) => setFieldValue(\"inlineEditing\", v)}\n value={values.inlineEditing === undefined ? true : values.inlineEditing}\n />\n <FieldCaption>\n Allow editing data directly in the table view, without opening the form view.\n </FieldCaption>\n </div>\n\n {/* Include JSON view */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label={values.includeJsonView === undefined || values.includeJsonView ? \"Include JSON view\" : \"Do not include JSON view\"}\n onValueChange={(v) => setFieldValue(\"includeJsonView\", v)}\n value={values.includeJsonView === undefined ? true : values.includeJsonView}\n />\n <FieldCaption>\n Include the JSON representation of the document.\n </FieldCaption>\n </div>\n\n </div>\n\n <div style={{ height: \"52px\" }} />\n\n </Container>\n </div>\n );\n}\n","export function camelCase(str: string): string {\n if (!str) return \"\";\n if (str.length === 1) return str.toLowerCase();\n\n // Split by hyphens, underscores, or spaces and filter out empty strings\n const parts = str.split(/[-_ ]+/).filter(Boolean);\n\n if (parts.length === 0) return \"\";\n\n // Start with first part in lowercase\n return parts[0].toLowerCase() +\n // Transform remaining parts to have first letter uppercase\n parts.slice(1)\n .map(part => part.charAt(0).toUpperCase() + part.substring(1).toLowerCase())\n .join('');\n}\n","import { EntityCollection, isEmptyObject, useSnackbarController } from \"@firecms/core\";\nimport { Button, ContentCopyIcon, Dialog, DialogActions, DialogContent, DialogTitle, Tab, Tabs, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\nimport { clone } from \"@firecms/formex\";\n\nexport function GetCodeDialog({\n collection,\n onOpenChange,\n open\n}: { onOpenChange: (open: boolean) => void, collection: any, open: any }) {\n\n const snackbarController = useSnackbarController();\n const [format, setFormat] = useState<\"ts\" | \"json\">(\"json\");\n\n const collectionData = collectionToCode({ ...collection });\n\n const tsCode = collection\n ? \"import { EntityCollection } from \\\"@firecms/core\\\";\\n\\nconst \" + (collection?.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionData, null, \"\\t\")\n : \"No collection selected\";\n\n const jsonCode = collection\n ? JSON.stringify(collectionData, null, 2)\n : \"No collection selected\";\n\n const code = format === \"ts\" ? tsCode : jsonCode;\n\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <div className=\"flex items-center justify-between pr-6\">\n <DialogTitle variant={\"h6\"}>Code for {collection.name}</DialogTitle>\n <Tabs value={format} onValueChange={(v) => setFormat(v as \"ts\" | \"json\")}>\n <Tab value=\"ts\">TypeScript</Tab>\n <Tab value=\"json\">JSON</Tab>\n </Tabs>\n </div>\n <DialogContent>\n\n <Typography variant={\"body2\"} className={\"mb-4\"}>\n {format === \"json\"\n ? \"Use this config to define the collection in JSON format.\"\n : <>\n If you want to customise the collection in code, you can add this collection code to your CMS\n app configuration.\n More info in the <a\n rel=\"noopener noreferrer\"\n href={\"https://firecms.co/docs/cloud/quickstart\"}>docs</a>.\n </>}\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language={format === \"ts\" ? \"typescript\" : \"json\"}\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps\n }) => (\n <pre style={style} className={\"p-4 rounded text-sm\"}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n\n </DialogContent>\n <DialogActions>\n <Button\n variant={\"text\"}\n size={\"small\"}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n snackbarController.open({\n type: \"success\",\n message: \"Copied\"\n })\n return navigator.clipboard.writeText(code);\n }}>\n <ContentCopyIcon size={\"small\"} />\n Copy to clipboard\n </Button>\n <Button onClick={() => onOpenChange(false)}>Close</Button>\n </DialogActions>\n </Dialog>;\n}\n\nfunction collectionToCode(collection: EntityCollection): object {\n\n const propertyCleanup = (value: any): any => {\n if (value === undefined || value === null) {\n return value;\n }\n const valueCopy = clone(value);\n if (typeof valueCopy === \"function\") {\n return valueCopy;\n }\n if (Array.isArray(valueCopy)) {\n return valueCopy.map((v: any) => propertyCleanup(v));\n }\n if (typeof valueCopy === \"object\") {\n if (valueCopy === null)\n return valueCopy;\n Object.keys(valueCopy).forEach((key) => {\n if (!isEmptyObject(valueCopy)) {\n const childRes = propertyCleanup(valueCopy[key]);\n if (childRes !== null && childRes !== undefined && childRes !== false && !isEmptyObject(childRes)) {\n valueCopy[key] = childRes;\n } else {\n delete valueCopy[key];\n }\n }\n });\n delete valueCopy.fromBuilder;\n delete valueCopy.resolved;\n delete valueCopy.propertiesOrder;\n delete valueCopy.propertyConfig;\n delete valueCopy.resolvedProperties;\n delete valueCopy.editable;\n\n }\n\n return valueCopy;\n }\n\n return {\n id: collection.id,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.path,\n description: collection.description,\n editable: true,\n collectionGroup: collection.collectionGroup,\n icon: collection.icon,\n group: collection.group,\n customId: collection.customId,\n initialFilter: collection.initialFilter,\n initialSort: collection.initialSort,\n properties: Object.entries({\n ...(collection.properties ?? {})\n })\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({\n ...a,\n ...b\n }), {}),\n subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport {\n EntityCollection,\n ErrorBoundary,\n isPropertyBuilder,\n makePropertiesEditable,\n MapProperty,\n Properties,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n useLargeLayout,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Button,\n CircularProgress,\n cls,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n FindInPageIcon,\n IconButton,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\n\ntype CollectionEditorFormProps = {\n showErrors: boolean;\n isNewCollection: boolean;\n propertyErrorsRef?: React.MutableRefObject<any>;\n onPropertyError: (propertyKey: string, namespace: string | undefined, error?: Record<string, any>) => void;\n setDirty?: (dirty: boolean) => void;\n reservedGroups?: string[];\n extraIcon: React.ReactNode;\n getUser?: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference?: (collection: PersistedCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n reservedGroups,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs,\n collectionEditable\n}: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<PersistedCollection>();\n\n const snackbarController = useSnackbarController();\n\n const largeLayout = useLargeLayout();\n const asDialog = !largeLayout\n\n // index of the selected property within the namespace\n const [selectedPropertyIndex, setSelectedPropertyIndex] = useState<number | undefined>();\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n const [codeDialogOpen, setCodeDialogOpen] = useState<boolean>(false);\n\n const [inferringProperties, setInferringProperties] = useState<boolean>(false);\n\n const [newPropertyDialogOpen, setNewPropertyDialogOpen] = useState<boolean>(false);\n const [inferredPropertyKeys, setInferredPropertyKeys] = useState<string[]>([]);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n useEffect(() => {\n if (setDirty)\n setDirty(dirty);\n }, [dirty]);\n\n const inferPropertiesFromData = doCollectionInference\n ? (): void => {\n if (!doCollectionInference)\n return;\n\n setInferringProperties(true);\n\n console.debug(\"CollectionEditor: inferring properties from data\", values);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (newCollection)\n makePropertiesEditable(newCollection.properties as Properties);\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n\n // Helper function to find all new property keys including nested ones\n const findNewPropertyKeys = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined,\n namespace?: string\n ): string[] => {\n if (!newProps) return [];\n const keys: string[] = [];\n\n for (const key of Object.keys(newProps)) {\n const fullKey = namespace ? `${namespace}.${key}` : key;\n const existingProp = existingProps?.[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This is a completely new property\n keys.push(fullKey);\n } else if (\n typeof newProp === \"object\" &&\n \"dataType\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // This is a map property, check for new nested properties\n const existingMapProps = typeof existingProp === \"object\" &&\n \"dataType\" in existingProp &&\n existingProp.dataType === \"map\"\n ? (existingProp as any).properties\n : undefined;\n keys.push(...findNewPropertyKeys(existingMapProps, newProp.properties as Record<string, PropertyOrBuilder>, fullKey));\n }\n }\n return keys;\n };\n\n // Helper function to add only new properties without overwriting existing ones\n // This preserves existing property configurations while adding missing nested properties\n const addNewPropertiesOnly = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined\n ): Record<string, PropertyOrBuilder> => {\n if (!newProps) return existingProps ?? {};\n if (!existingProps) return newProps;\n\n const result = { ...existingProps };\n\n for (const key of Object.keys(newProps)) {\n const existingProp = existingProps[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This property doesn't exist, add it\n result[key] = newProp;\n } else if (\n typeof existingProp === \"object\" &&\n \"dataType\" in existingProp &&\n existingProp.dataType === \"map\" &&\n typeof newProp === \"object\" &&\n \"dataType\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // Both are map properties, recursively add new nested properties\n // Only if the existing map has properties, merge them; otherwise keep existing as-is\n const existingMapProps = (existingProp as MapProperty).properties as Record<string, PropertyOrBuilder> | undefined;\n if (existingMapProps) {\n result[key] = {\n ...existingProp,\n properties: addNewPropertiesOnly(\n existingMapProps,\n newProp.properties as Record<string, PropertyOrBuilder>\n )\n };\n }\n // If existingProp doesn't have properties, keep it as-is (don't overwrite with inferred)\n }\n // Otherwise, keep the existing property as-is (don't overwrite)\n }\n\n return result;\n };\n\n // Add only new properties from inferred collection without replacing existing ones\n const updatedProperties = addNewPropertiesOnly(\n values.properties ?? {},\n newCollection.properties as Record<string, PropertyOrBuilder>\n ) as { [key: string]: PropertyOrBuilder };\n\n // Find all new property keys including nested ones\n const allNewPropertyKeys = findNewPropertyKeys(\n values.properties,\n newCollection.properties as Record<string, PropertyOrBuilder>\n );\n\n // Find new top-level property keys for the properties order\n const newTopLevelPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n\n // Check if there are any changes (new properties or modified nested properties)\n if (allNewPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n\n // Update properties order: keep existing order and append new keys at the beginning\n // Use Object.keys from updatedProperties to ensure all properties are included\n const allExistingKeys = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const updatedPropertiesOrder = [\n ...newTopLevelPropertyKeys,\n ...allExistingKeys.filter(key => !newTopLevelPropertyKeys.includes(key))\n ];\n\n setFieldValue(\"properties\", updatedProperties, false);\n updatePropertiesOrder(updatedPropertiesOrder);\n setInferredPropertyKeys(allNewPropertyKeys);\n\n snackbarController.open({\n type: \"success\",\n message: `Added ${allNewPropertyKeys.length} new ${allNewPropertyKeys.length === 1 ? \"property\" : \"properties\"}`\n });\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"] ?? getIn(values, namespaceToPropertiesOrderPath());\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n };\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(idToPropertiesPath(fullId), undefined, false);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n if (currentPropertiesOrder) {\n const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n }\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\n if (!id) {\n throw Error(\"Need to include an ID when creating a new property\")\n }\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n updatePropertiesOrder(newPropertiesOrder);\n\n setNewPropertyDialogOpen(false);\n if (largeLayout) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n if (id) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = (id: string, namespace?: string, error?: Record<string, any>) => {\n const propertyPath = id ? getFullId(id, namespace) : undefined;\n console.debug(\"onPropertyErrorInternal\", {\n id,\n namespace,\n error,\n propertyPath\n });\n if (propertyPath) {\n const hasError = error && Object.keys(error).length > 0;\n onPropertyError(id, namespace, hasError ? error : undefined);\n setFieldError(idToPropertiesPath(propertyPath), hasError ? \"Property error\" : undefined);\n }\n }\n\n const closePropertyDialog = () => {\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n };\n\n const initialErrors = selectedPropertyKey && propertyErrorsRef?.current?.properties ? propertyErrorsRef.current.properties[selectedPropertyKey] : undefined;\n\n const emptyCollection = values?.propertiesOrder === undefined || values.propertiesOrder.length === 0;\n\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId && getUser ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n // Get AI generation counter for key to force remount on AI changes\n const aiModifiedPaths = useAIModifiedPaths();\n const generationCounter = aiModifiedPaths?.generationCounter ?? 0;\n\n const onPropertyClick = (propertyKey: string, namespace?: string) => {\n console.debug(\"CollectionEditor: onPropertyClick\", {\n propertyKey,\n namespace\n });\n setSelectedPropertyIndex(usedPropertiesOrder.indexOf(propertyKey));\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n };\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-surface dark:bg-surface-dark\"}>\n <div className={cls(\n \"bg-surface-50 dark:bg-surface-900\",\n \"p-4 md:p-8 pb-20 md:pb-20\",\n \"col-span-12 lg:col-span-5 h-full overflow-auto\",\n !asDialog && \"border-r \" + defaultBorderMixin\n )}>\n\n <div className=\"flex my-2\">\n\n <div className=\"flex-grow mb-4\">\n\n <Field\n name={\"name\"}\n as={DebouncedTextField}\n invisible={true}\n className=\"-ml-1\"\n inputClassName=\"text-2xl font-headers\"\n placeholder={\"Collection name\"}\n size={\"small\"}\n required\n error={Boolean(errors?.name)} />\n\n {owner &&\n <Typography variant={\"body2\"}\n className={\"ml-2\"}\n color={\"secondary\"}>\n Created by {owner.displayName}\n </Typography>}\n </div>\n\n {extraIcon && <div className=\"ml-4\">\n {extraIcon}\n </div>}\n\n <div className=\"ml-1 mt-2 flex flex-row gap-2\">\n <Tooltip title={\"Get the code for this collection\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={() => setCodeDialogOpen(true)}>\n <CodeIcon />\n </IconButton>\n </Tooltip>\n {inferPropertiesFromData && <Tooltip title={\"Add new properties based on data\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"} /> : <FindInPageIcon />}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n onClick={() => setNewPropertyDialogOpen(true)}>\n <AddIcon />\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"pl-8\"}\n inferredPropertyKeys={inferredPropertyKeys}\n selectedPropertyKey={selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined}\n properties={values.properties}\n additionalFields={values.additionalFields}\n propertiesOrder={usedPropertiesOrder}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={(isNewCollection || (inferredPropertyKeys && inferredPropertyKeys.length > 0)) ? deleteProperty : undefined}\n collectionEditable={collectionEditable}\n errors={errors} />\n </ErrorBoundary>\n\n <Button className={\"mt-8 w-full\"}\n size={\"large\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<AddIcon />}>\n Add new property\n </Button>\n </div>\n\n {!asDialog &&\n <div className={\"col-span-12 lg:col-span-7 p-4 md:py-8 md:px-4 h-full overflow-auto pb-20 md:pb-20\"}>\n <div\n className=\"sticky top-8 min-h-full w-full flex flex-col justify-center\">\n\n {selectedPropertyFullId &&\n selectedProperty &&\n !isPropertyBuilder(selectedProperty) &&\n <PropertyForm\n inArray={false}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n existingProperty={!isNewCollection}\n autoUpdateId={false}\n allowDataInference={!isNewCollection}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n collectionProperties={values.properties as Properties}\n />}\n\n {!selectedProperty &&\n <div className={\"w-full flex flex-col items-center justify-center h-full gap-4\"}>\n <Typography variant={\"label\"} className=\"\">\n {emptyCollection\n ? \"Now you can add your first property\"\n : \"Select a property to edit it\"}\n </Typography>\n <Button\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <AddIcon />\n Add new property\n </Button>\n </div>}\n\n {selectedProperty && isPropertyBuilder(selectedProperty) &&\n <Typography variant={\"label\"} className=\"flex items-center justify-center\">\n {\"This property is defined as a property builder in code\"}\n </Typography>}\n </div>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n autoUpdateId={!selectedProperty}\n allowDataInference={!isNewCollection}\n existingProperty={true}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n collectionProperties={values.properties as Properties}\n onCancel={closePropertyDialog}\n onOkClicked={asDialog\n ? closePropertyDialog\n : undefined\n } />}\n\n </div>);\n\n return (<>\n\n {body}\n\n {/* This is the dialog used for new properties*/}\n <PropertyFormDialog\n inArray={false}\n existingProperty={false}\n autoOpenTypeSelect={true}\n autoUpdateId={true}\n forceShowErrors={showErrors}\n open={newPropertyDialogOpen}\n onCancel={() => setNewPropertyDialogOpen(false)}\n onPropertyChanged={onPropertyCreated}\n getData={getData}\n allowDataInference={!isNewCollection}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n collectionProperties={values.properties as Properties}\n existingPropertyKeys={values.propertiesOrder as string[]} />\n\n <ErrorBoundary>\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen} />\n </ErrorBoundary>\n </>\n );\n}\n","import React from \"react\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\n\nexport interface UnsavedChangesDialogProps {\n open: boolean;\n body?: React.ReactNode;\n title?: string;\n handleOk: () => void;\n handleCancel: () => void;\n}\n\nexport function UnsavedChangesDialog({\n open,\n handleOk,\n handleCancel,\n body,\n title\n }: UnsavedChangesDialogProps) {\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => open ? handleCancel() : handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n\n <DialogTitle>{title ?? \"Unsaved changes\"}</DialogTitle>\n <DialogContent className={\"mt-4\"}>\n {body && <Typography>\n {body}\n </Typography>}\n <Typography>\n Are you sure?\n </Typography>\n\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"text\"\n onClick={handleCancel} autoFocus> Cancel </Button>\n <Button\n onClick={handleOk}> Ok </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityCustomViewsSelectDialog({\n open,\n onClose\n }: { open: boolean, onClose: (selectedViewKey?: string) => void }) {\n const {\n entityViews,\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogTitle>Select custom view</DialogTitle>\n <DialogContent className={\"flex flex-col gap-4\"}>\n {entityViews?.map((view) => {\n return <Button\n key={view.key}\n onClick={() => onClose(view.key)}\n fullWidth\n variant={\"text\"}\n >\n {view.name} ({view.key})\n </Button>;\n })}\n {(entityViews ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom views defined. Define your custom views in the customization settings, before using this\n dialog.\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n ConfirmationDialog,\n EntityCollection,\n EntityCustomView,\n resolveEntityView,\n useCustomizationController,\n User\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { CollectionEditorDialog } from \"./CollectionEditorDialog\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { EntityCustomViewsSelectDialog } from \"./EntityCustomViewsSelectDialog\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function SubcollectionsEditTab({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds,\n embedded = false\n}: {\n collection: PersistedCollection,\n parentCollection?: EntityCollection,\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser?: (uid: string) => User | null;\n parentCollectionIds?: string[];\n embedded?: boolean;\n}) {\n\n const { entityViews: contextEntityViews } = useCustomizationController();\n\n const [subcollectionToDelete, setSubcollectionToDelete] = React.useState<string | undefined>();\n const [addEntityViewDialogOpen, setAddEntityViewDialogOpen] = React.useState<boolean>(false);\n const [viewToDelete, setViewToDelete] = React.useState<string | undefined>();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n editedCollectionId?: string,\n }>();\n\n const {\n values,\n setFieldValue,\n } = useFormex<EntityCollection>();\n\n const [subcollections, setSubcollections] = React.useState<EntityCollection[]>(collection.subcollections ?? []);\n const resolvedEntityViews = values.entityViews?.filter(e => typeof e === \"string\")\n .map(e => resolveEntityView(e, contextEntityViews))\n .filter(Boolean) as EntityCustomView[] ?? [];\n const hardCodedEntityViews = collection.entityViews?.filter(e => typeof e !== \"string\") as EntityCustomView[] ?? [];\n const totalEntityViews = resolvedEntityViews.length + hardCodedEntityViews.length;\n\n const content = (\n <div className={\"flex flex-col gap-16\"}>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h6\"}>\n Subcollections of {values.name}\n </Typography>\n\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n {subcollections && subcollections.length > 0 && <Table>\n <TableBody>\n {subcollections.map((subcollection) => (\n <TableRow key={subcollection.path}\n onClick={() => setCurrentDialog({\n isNewCollection: false,\n editedCollectionId: subcollection.id\n })}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {subcollection.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubcollectionToDelete(subcollection.id);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>}\n\n <Button\n onClick={() => {\n setCurrentDialog({\n isNewCollection: true\n });\n }}\n startIcon={<AddIcon />}>\n Add subcollection\n </Button>\n\n </Paper>\n\n </div>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h6\"}>\n Custom views\n </Typography>\n\n {totalEntityViews === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/cloud/quickstart\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom views by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setViewToDelete(view.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This view is defined in code with\n key <code>{view.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityViewDialogOpen(true);\n }}\n startIcon={<AddIcon />}>\n Add custom entity view\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n );\n\n return (\n <>\n {embedded ? (\n content\n ) : (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n {content}\n </Container>\n <div style={{ height: \"52px\" }} />\n </div>\n )}\n\n {subcollectionToDelete &&\n <ConfirmationDialog open={Boolean(subcollectionToDelete)}\n onAccept={() => {\n const props = {\n id: subcollectionToDelete,\n parentCollectionIds: [...(parentCollectionIds ?? []), collection.id]\n };\n console.debug(\"Deleting subcollection\", props)\n configController.deleteCollection(props).then(() => {\n setSubcollectionToDelete(undefined);\n setSubcollections(subcollections?.filter(e => e.id !== subcollectionToDelete))\n });\n }}\n onCancel={() => setSubcollectionToDelete(undefined)}\n title={<>Delete this subcollection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>} />}\n {viewToDelete &&\n <ConfirmationDialog open={Boolean(viewToDelete)}\n onAccept={() => {\n setFieldValue(\"entityViews\", values.entityViews?.filter(e => e !== viewToDelete));\n setViewToDelete(undefined);\n }}\n onCancel={() => setViewToDelete(undefined)}\n title={<>Remove this view?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the view in the CMS</>} />}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={configController}\n parentCollection={collection}\n collectionInference={collectionInference}\n parentCollectionIds={[...parentCollectionIds ?? [], values.id]}\n isNewCollection={false}\n {...currentDialog}\n getUser={getUser}\n handleClose={(updatedCollection) => {\n if (updatedCollection && !subcollections.map(e => e.id).includes(updatedCollection.id)) {\n setSubcollections([...subcollections, updatedCollection]);\n }\n setCurrentDialog(undefined);\n }} />\n\n <EntityCustomViewsSelectDialog\n open={addEntityViewDialogOpen}\n onClose={(selectedViewKey) => {\n if (selectedViewKey) {\n setFieldValue(\"entityViews\", [...(values.entityViews ?? []), selectedViewKey]);\n }\n setAddEntityViewDialogOpen(false);\n }} />\n </>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityActionsSelectDialog({\n open,\n onClose\n }: { open: boolean, onClose: (selectedActionKey?: string) => void }) {\n const {\n entityActions\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogTitle>Select custom action</DialogTitle>\n <DialogContent className={\"flex flex-col gap-4\"}>\n {entityActions?.map((action) => {\n return <Button\n key={action.key}\n onClick={() => onClose(action.key)}\n fullWidth\n variant={\"text\"}\n >\n {action.name} ({action.key})\n </Button>;\n })}\n {(entityActions ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom actions defined. Define your custom actions in the customization settings, before using\n this\n dialog.\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n ConfirmationDialog,\n EntityAction,\n EntityCollection,\n resolveEntityAction,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { useFormex } from \"@firecms/formex\";\nimport { EntityActionsSelectDialog } from \"./EntityActionsSelectDialog\";\n\nexport function EntityActionsEditTab({\n collection,\n embedded = false\n}: {\n collection: PersistedCollection,\n embedded?: boolean;\n}) {\n\n const { entityActions: contextEntityActions } = useCustomizationController();\n\n const [addEntityActionDialogOpen, setAddEntityActionDialogOpen] = React.useState<boolean>(false);\n const [actionToDelete, setActionToDelete] = React.useState<string | undefined>();\n\n const {\n values,\n setFieldValue\n } = useFormex<EntityCollection>();\n\n const resolvedEntityActions = values.entityActions?.filter((e): e is string => typeof e === \"string\")\n .map(e => resolveEntityAction(e, contextEntityActions))\n .filter(Boolean) as EntityAction<any>[] ?? [];\n const hardCodedEntityActions = collection.entityActions?.filter((e): e is EntityAction<any> => typeof e !== \"string\") ?? [];\n const totalEntityActions = resolvedEntityActions.length + hardCodedEntityActions.length;\n\n const content = (\n <div className={\"flex flex-col gap-16\"}>\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h6\"}>\n Custom actions\n </Typography>\n\n {totalEntityActions === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/custom_actions\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom actions by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityActions.map((action) => (\n <TableRow key={action.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {action.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setActionToDelete(action.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityActions.map((action) => (\n <TableRow key={action.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {action.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This action is defined in code with\n key <code>{action.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityActionDialogOpen(true);\n }}\n startIcon={<AddIcon />}>\n Add custom entity action\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n );\n\n return (\n <>\n {embedded ? (\n content\n ) : (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n {content}\n </Container>\n <div style={{ height: \"52px\" }} />\n </div>\n )}\n\n {actionToDelete &&\n <ConfirmationDialog open={Boolean(actionToDelete)}\n onAccept={() => {\n setFieldValue(\"entityActions\", values.entityActions?.filter(e => e !== actionToDelete));\n setActionToDelete(undefined);\n }}\n onCancel={() => setActionToDelete(undefined)}\n title={<>Remove this action?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the action in the CMS</>} />}\n\n <EntityActionsSelectDialog\n open={addEntityActionDialogOpen}\n onClose={(selectedActionKey) => {\n if (selectedActionKey) {\n console.log(\"Selected action key:\", selectedActionKey);\n const value = [...(values.entityActions ?? []), selectedActionKey]\n // only actions that are defined in the registry\n .filter((e): e is string => typeof e === \"string\" && (contextEntityActions ?? []).some(action => action.key === e));\n ;\n setFieldValue(\"entityActions\", value);\n }\n setAddEntityActionDialogOpen(false);\n }} />\n </>\n );\n}\n","import React from \"react\";\nimport {\n EntityCollection,\n User\n} from \"@firecms/core\";\nimport {\n Button,\n cls,\n Container,\n defaultBorderMixin,\n Typography\n} from \"@firecms/ui\";\n\nimport { useFormex } from \"@firecms/formex\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { SubcollectionsEditTab } from \"./SubcollectionsEditTab\";\nimport { EntityActionsEditTab } from \"./EntityActionsEditTab\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\n\nexport function ExtendSettingsForm({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds,\n isMergedCollection,\n onResetToCode\n}: {\n collection: PersistedCollection;\n parentCollection?: EntityCollection;\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser?: (uid: string) => User | null;\n parentCollectionIds?: string[];\n isMergedCollection?: boolean;\n onResetToCode?: () => void;\n}) {\n\n const {\n values,\n setFieldValue,\n submitCount\n } = useFormex<EntityCollection>();\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-8 p-8 m-auto\"}>\n\n <div>\n <Typography variant={\"h5\"} className={\"flex-grow\"}>\n Extend\n </Typography>\n <Typography variant={\"body2\"} color={\"secondary\"}>\n Add subcollections, custom views, and entity actions to this collection.\n </Typography>\n </div>\n\n {/* Subcollections Section */}\n <SubcollectionsEditTab\n collection={collection}\n parentCollection={parentCollection}\n configController={configController}\n collectionInference={collectionInference}\n getUser={getUser}\n parentCollectionIds={parentCollectionIds}\n embedded={true}\n />\n\n {/* Entity Actions Section */}\n <EntityActionsEditTab collection={collection} embedded={true} />\n\n {/* Reset to code (for merged collections) */}\n {isMergedCollection && onResetToCode && (\n <div className={cls(\"flex flex-col gap-4 mt-8 border-t pt-8\", defaultBorderMixin)}>\n <Typography variant={\"body2\"} color={\"secondary\"}>\n This collection is defined in code.\n The changes done in this editor will override the properties defined in code.\n You can delete the overridden values to revert to the state defined in code.\n </Typography>\n <Button color={\"neutral\"} onClick={onResetToCode}>\n Reset to code\n </Button>\n </div>\n )}\n\n <div style={{ height: \"52px\" }} />\n\n </Container>\n </div>\n );\n}\n","import { EntityCollection } from \"@firecms/core\";\n\n/**\n * Valid dataType values for properties\n */\nconst VALID_DATA_TYPES = [\n \"string\",\n \"number\",\n \"boolean\",\n \"date\",\n \"geopoint\",\n \"reference\",\n \"array\",\n \"map\"\n] as const;\n\ntype DataType = typeof VALID_DATA_TYPES[number];\n\n/**\n * Validation error with path and message\n */\nexport interface CollectionValidationError {\n path: string;\n message: string;\n}\n\n/**\n * Result of collection JSON validation\n */\nexport interface CollectionValidationResult {\n valid: boolean;\n errors: CollectionValidationError[];\n collection?: EntityCollection;\n}\n\n/**\n * Validates a property object recursively\n */\nfunction validateProperty(\n property: any,\n path: string,\n errors: CollectionValidationError[]\n): void {\n if (typeof property !== \"object\" || property === null) {\n errors.push({\n path,\n message: \"Property must be an object\"\n });\n return;\n }\n\n // Check dataType\n if (!property.dataType) {\n errors.push({\n path: `${path}.dataType`,\n message: \"Required field is missing\"\n });\n } else if (!VALID_DATA_TYPES.includes(property.dataType)) {\n errors.push({\n path: `${path}.dataType`,\n message: `Invalid value \"${property.dataType}\", expected one of: ${VALID_DATA_TYPES.join(\", \")}`\n });\n }\n\n // Validate name if present\n if (property.name !== undefined && typeof property.name !== \"string\") {\n errors.push({\n path: `${path}.name`,\n message: \"Must be a string\"\n });\n }\n\n // Validate array \"of\" property\n if (property.dataType === \"array\") {\n if (property.of) {\n if (Array.isArray(property.of)) {\n property.of.forEach((ofProp: any, index: number) => {\n validateProperty(ofProp, `${path}.of[${index}]`, errors);\n });\n } else {\n validateProperty(property.of, `${path}.of`, errors);\n }\n }\n // oneOf validation\n if (property.oneOf) {\n if (typeof property.oneOf !== \"object\") {\n errors.push({\n path: `${path}.oneOf`,\n message: \"Must be an object\"\n });\n } else if (property.oneOf.properties) {\n validateProperties(property.oneOf.properties, `${path}.oneOf.properties`, errors);\n }\n }\n }\n\n // Validate map properties\n if (property.dataType === \"map\" && property.properties) {\n validateProperties(property.properties, `${path}.properties`, errors);\n }\n\n // Validate reference path\n if (property.dataType === \"reference\") {\n if (property.path !== undefined && typeof property.path !== \"string\") {\n errors.push({\n path: `${path}.path`,\n message: \"Must be a string\"\n });\n }\n }\n\n // Validate storage config for string\n if (property.dataType === \"string\" && property.storage) {\n if (typeof property.storage !== \"object\") {\n errors.push({\n path: `${path}.storage`,\n message: \"Must be an object\"\n });\n }\n }\n\n // Validate enumValues if present\n if (property.enumValues !== undefined) {\n if (!Array.isArray(property.enumValues) && typeof property.enumValues !== \"object\") {\n errors.push({\n path: `${path}.enumValues`,\n message: \"Must be an array or object\"\n });\n }\n }\n}\n\n/**\n * Validates a properties object (collection of property definitions)\n */\nfunction validateProperties(\n properties: any,\n path: string,\n errors: CollectionValidationError[]\n): void {\n if (typeof properties !== \"object\" || properties === null) {\n errors.push({\n path,\n message: \"Must be an object\"\n });\n return;\n }\n\n for (const [key, property] of Object.entries(properties)) {\n validateProperty(property, `${path}.${key}`, errors);\n }\n}\n\n/**\n * Validates optional collection fields\n */\nfunction validateOptionalFields(\n collection: any,\n errors: CollectionValidationError[]\n): void {\n // String fields\n const stringFields = [\n \"singularName\",\n \"description\",\n \"group\",\n \"databaseId\"\n ];\n for (const field of stringFields) {\n if (collection[field] !== undefined && typeof collection[field] !== \"string\") {\n errors.push({\n path: field,\n message: \"Must be a string\"\n });\n }\n }\n\n // Boolean fields\n const booleanFields = [\n \"collectionGroup\",\n \"textSearchEnabled\",\n \"selectionEnabled\",\n \"inlineEditing\",\n \"hideFromNavigation\",\n \"hideIdFromForm\",\n \"hideIdFromCollection\",\n \"formAutoSave\",\n \"editable\",\n \"alwaysApplyDefaultValues\",\n \"includeJsonView\",\n \"history\"\n ];\n for (const field of booleanFields) {\n if (collection[field] !== undefined && typeof collection[field] !== \"boolean\") {\n errors.push({\n path: field,\n message: \"Must be a boolean\"\n });\n }\n }\n\n // Icon can be string or object (React node)\n if (collection.icon !== undefined &&\n typeof collection.icon !== \"string\" &&\n typeof collection.icon !== \"object\") {\n errors.push({\n path: \"icon\",\n message: \"Must be a string (icon key) or object\"\n });\n }\n\n // propertiesOrder must be array of strings\n if (collection.propertiesOrder !== undefined) {\n if (!Array.isArray(collection.propertiesOrder)) {\n errors.push({\n path: \"propertiesOrder\",\n message: \"Must be an array of strings\"\n });\n } else if (!collection.propertiesOrder.every((item: any) => typeof item === \"string\")) {\n errors.push({\n path: \"propertiesOrder\",\n message: \"All items must be strings\"\n });\n }\n }\n\n // subcollections must be array\n if (collection.subcollections !== undefined) {\n if (!Array.isArray(collection.subcollections)) {\n errors.push({\n path: \"subcollections\",\n message: \"Must be an array\"\n });\n } else {\n collection.subcollections.forEach((sub: any, index: number) => {\n const subErrors: CollectionValidationError[] = [];\n validateCollectionObject(sub, subErrors);\n subErrors.forEach(err => {\n errors.push({\n path: `subcollections[${index}].${err.path}`,\n message: err.message\n });\n });\n });\n }\n }\n\n // defaultViewMode validation\n const validViewModes = [\"table\", \"cards\", \"kanban\"];\n if (collection.defaultViewMode !== undefined) {\n if (!validViewModes.includes(collection.defaultViewMode)) {\n errors.push({\n path: \"defaultViewMode\",\n message: `Invalid value, expected one of: ${validViewModes.join(\", \")}`\n });\n }\n }\n\n // kanban config validation\n if (collection.kanban !== undefined) {\n if (typeof collection.kanban !== \"object\" || collection.kanban === null) {\n errors.push({\n path: \"kanban\",\n message: \"Must be an object\"\n });\n } else if (collection.kanban.columnProperty !== undefined &&\n typeof collection.kanban.columnProperty !== \"string\") {\n errors.push({\n path: \"kanban.columnProperty\",\n message: \"Must be a string\"\n });\n }\n }\n}\n\n/**\n * Validates a collection object\n */\nfunction validateCollectionObject(\n collection: any,\n errors: CollectionValidationError[]\n): void {\n // Required fields\n if (!collection.id) {\n errors.push({\n path: \"id\",\n message: \"Required field is missing\"\n });\n } else if (typeof collection.id !== \"string\") {\n errors.push({\n path: \"id\",\n message: \"Must be a string\"\n });\n }\n\n if (!collection.name) {\n errors.push({\n path: \"name\",\n message: \"Required field is missing\"\n });\n } else if (typeof collection.name !== \"string\") {\n errors.push({\n path: \"name\",\n message: \"Must be a string\"\n });\n }\n\n if (!collection.path) {\n errors.push({\n path: \"path\",\n message: \"Required field is missing\"\n });\n } else if (typeof collection.path !== \"string\") {\n errors.push({\n path: \"path\",\n message: \"Must be a string\"\n });\n }\n\n // Properties validation\n if (collection.properties !== undefined) {\n validateProperties(collection.properties, \"properties\", errors);\n }\n\n // Optional fields\n validateOptionalFields(collection, errors);\n}\n\n/**\n * Validates a JSON string representing a collection configuration.\n * Returns detailed validation errors if the JSON is invalid or doesn't match\n * the expected collection schema.\n */\nexport function validateCollectionJson(jsonString: string): CollectionValidationResult {\n const errors: CollectionValidationError[] = [];\n\n // Try to parse JSON\n let parsed: any;\n try {\n parsed = JSON.parse(jsonString);\n } catch (e: any) {\n // Try to extract line/column info from the error\n const match = e.message.match(/position (\\d+)/);\n let message = \"Invalid JSON syntax\";\n if (match) {\n const position = parseInt(match[1], 10);\n const lines = jsonString.substring(0, position).split(\"\\n\");\n const line = lines.length;\n const column = lines[lines.length - 1].length + 1;\n message = `Invalid JSON syntax at line ${line}, column ${column}: ${e.message}`;\n } else {\n message = `Invalid JSON syntax: ${e.message}`;\n }\n return {\n valid: false,\n errors: [{\n path: \"\",\n message\n }]\n };\n }\n\n // Validate collection structure\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {\n valid: false,\n errors: [{\n path: \"\",\n message: \"Collection must be an object\"\n }]\n };\n }\n\n validateCollectionObject(parsed, errors);\n\n return {\n valid: errors.length === 0,\n errors,\n collection: errors.length === 0 ? parsed as EntityCollection : undefined\n };\n}\n","import React, { useCallback, useState } from \"react\";\nimport {\n Button,\n cls,\n CodeIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Typography\n} from \"@firecms/ui\";\nimport { EntityCollection } from \"@firecms/core\";\nimport { validateCollectionJson, CollectionValidationError } from \"../../utils/validateCollectionJson\";\n\nconst EXAMPLE_JSON = `{\n \"id\": \"products\",\n \"name\": \"Products\",\n \"path\": \"products\",\n \"icon\": \"shopping_cart\",\n \"properties\": {\n \"name\": {\n \"dataType\": \"string\",\n \"name\": \"Name\",\n \"validation\": { \"required\": true }\n },\n \"price\": {\n \"dataType\": \"number\",\n \"name\": \"Price\"\n },\n \"available\": {\n \"dataType\": \"boolean\",\n \"name\": \"Available\"\n }\n }\n}`;\n\nexport interface CollectionJsonImportDialogProps {\n open: boolean;\n onClose: () => void;\n onImport: (collection: EntityCollection) => void;\n}\n\nexport function CollectionJsonImportDialog({\n open,\n onClose,\n onImport\n}: CollectionJsonImportDialogProps) {\n const [jsonValue, setJsonValue] = useState<string>(\"\");\n const [errors, setErrors] = useState<CollectionValidationError[]>([]);\n const [touched, setTouched] = useState(false);\n\n const handleJsonChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setJsonValue(value);\n setTouched(true);\n\n if (!value.trim()) {\n setErrors([]);\n return;\n }\n\n const result = validateCollectionJson(value);\n setErrors(result.errors);\n }, []);\n\n const handleImport = useCallback(() => {\n const result = validateCollectionJson(jsonValue);\n if (result.valid && result.collection) {\n onImport(result.collection);\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }\n }, [jsonValue, onImport, onClose]);\n\n const handleClose = useCallback(() => {\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }, [onClose]);\n\n const isValid = touched && jsonValue.trim() && errors.length === 0;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open && handleClose()}\n maxWidth=\"2xl\"\n >\n <DialogTitle className=\"flex items-center gap-2\">\n <CodeIcon size=\"small\" />\n Import Collection from JSON\n </DialogTitle>\n <DialogContent className=\"flex flex-col gap-4\">\n <Typography variant=\"body2\" color=\"secondary\">\n Paste a JSON object representing your collection configuration.\n The JSON must include <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">id</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">name</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">path</code>, and\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">properties</code>.\n </Typography>\n\n <textarea\n value={jsonValue}\n onChange={handleJsonChange}\n placeholder={EXAMPLE_JSON}\n rows={12}\n className={cls(\n \"w-full p-3 font-mono text-sm rounded-md border resize-none overflow-y-auto\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"focus:outline-none focus:ring-2 focus:ring-primary\",\n \"h-[300px]\",\n errors.length > 0 && touched\n ? \"border-red-500 dark:border-red-400\"\n : \"border-surface-300 dark:border-surface-600\"\n )}\n />\n\n {errors.length > 0 && touched && (\n <div className=\"p-3 bg-red-50 dark:bg-red-900/20 rounded-md border border-red-200 dark:border-red-800\">\n <Typography variant=\"body2\" className=\"font-medium text-red-700 dark:text-red-400 mb-2\">\n Validation errors:\n </Typography>\n <ul className=\"list-disc list-inside space-y-1\">\n {errors.map((error, index) => (\n <li key={index} className=\"text-sm text-red-600 dark:text-red-400\">\n {error.path ? (\n <>\n <code className=\"bg-red-100 dark:bg-red-900/40 px-1 rounded\">\n {error.path}\n </code>\n : {error.message}\n </>\n ) : (\n error.message\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {isValid && (\n <div className=\"p-3 bg-green-50 dark:bg-green-900/20 rounded-md border border-green-200 dark:border-green-800\">\n <Typography variant=\"body2\" className=\"text-green-700 dark:text-green-400\">\n ✓ JSON is valid and ready to import\n </Typography>\n </div>\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n onClick={handleClose}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleImport}\n disabled={!isValid}\n >\n Import Collection\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const productsCollectionTemplate: EntityCollection = {\n id: \"products\",\n path: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"shopping_cart\",\n description: \"List of the products currently sold in your shop\",\n properties: makePropertiesEditable({\n name: {\n dataType: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n dataType: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n dataType: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n },\n description: \"Upload field for images\"\n },\n available: {\n dataType: \"boolean\",\n name: \"Available\",\n columnWidth: 100,\n description: \"Is this product available in the website\"\n },\n price: {\n dataType: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n dataType: \"array\",\n name: \"Images\",\n hideFromCollection: true,\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n dataType: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n dataType: \"map\",\n keyValue: true\n },\n added_on: {\n dataType: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const blogCollectionTemplate:EntityCollection = {\n id: \"blog\",\n path: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"article\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: makePropertiesEditable({\n name: {\n name: \"Name\",\n validation: { required: true },\n dataType: \"string\"\n },\n header_image: {\n name: \"Header image\",\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n content: {\n name: \"Content\",\n description: \"Content blocks for the blog entry\",\n validation: { required: true },\n dataType: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n dataType: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n dataType: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n description: \"This fields allows uploading multiple images at once and reordering\"\n },\n products: {\n name: \"Products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\",\n previewProperties: [\"name\", \"main_image\"]\n }\n }\n },\n propertiesOrder: [\"text\", \"quote\", \"images\", \"products\"]\n }\n },\n created_on: {\n name: \"Created on\",\n dataType: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n dataType: \"string\",\n enumValues: {\n published: {\n id: \"published\",\n label: \"Published\",\n },\n draft: \"Draft\"\n },\n defaultValue: \"draft\"\n },\n publish_date: {\n name: \"Publish date\",\n dataType: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n dataType: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n previewAsTag: true\n }\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const usersCollectionTemplate: EntityCollection = {\n id: \"users\",\n path: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"person\",\n properties: makePropertiesEditable({\n displayName: {\n name: \"Display name\",\n dataType: \"string\"\n },\n email: {\n name: \"Email\",\n dataType: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n dataType: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n dataType: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n dataType: \"string\",\n url: \"image\"\n }\n }),\n};\n","import { EntityCollection } from \"@firecms/core\";\n\nexport const pagesCollectionTemplate: EntityCollection = {\n id: \"pages\",\n path: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"insert_drive_file\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n dataType: \"string\",\n name: \"URL Slug\",\n validation: {\n required: true,\n unique: true,\n matches: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\",\n matchesMessage: \"Must be lowercase, alphanumeric, and hyphenated\"\n }\n },\n hero_section: {\n dataType: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n dataType: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n dataType: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n dataType: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"],\n }\n },\n call_to_action: {\n dataType: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n dataType: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n dataType: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n dataType: \"map\",\n name: \"Section\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n dataType: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n dataType: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n dataType: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n dataType: \"array\",\n name: \"Slider\",\n of: {\n dataType: \"map\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n dataType: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n },\n }\n }\n },\n sidebar: {\n dataType: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n dataType: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n dataType: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n dataType: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n dataType: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n dataType: \"array\",\n name: \"Focus Keywords\",\n of: {\n dataType: \"string\"\n }\n }\n }\n },\n footer_override: {\n dataType: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n dataType: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n dataType: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n dataType: \"boolean\",\n name: \"Is Published\",\n columnWidth: 100,\n description: \"Should this page be live on the site?\"\n }\n }\n};\n","import { useContext } from \"react\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorContext } from \"./ConfigControllerProvider\";\n\n/**\n * Hook to access the collection editor controller.\n * The methods in this controller can be used to open the collection editor dialog.\n */\nexport const useCollectionEditorController = (): CollectionEditorController => useContext(CollectionEditorContext);\n","import { EntityCollection } from \"@firecms/core\";\n\nexport interface GenerateCollectionRequest {\n /** User's natural language description of what they want */\n prompt: string;\n\n /** Other collections in the project (for context/relationships). Limit to 30. */\n existingCollections: Partial<EntityCollection>[];\n\n /** Optional for generate, required for modifications. If provided, modifies this collection */\n existingCollection?: Partial<EntityCollection>;\n}\n\n/** Operation types for modifying a collection */\nexport type CollectionOperationType = \"add\" | \"modify\" | \"delete\";\n\n/** A single operation describing what changed */\nexport interface CollectionOperation {\n op: CollectionOperationType;\n path: string;\n value?: any;\n}\n\n/** Result from collection generation, including optional delta operations */\nexport interface GenerateCollectionResult {\n collection: EntityCollection;\n operations?: CollectionOperation[];\n}\n\n/**\n * Callback type for generating or modifying a collection.\n * The plugin is API-agnostic - consumers implement the actual API call.\n */\nexport type CollectionGenerationCallback = (\n request: GenerateCollectionRequest\n) => Promise<GenerateCollectionResult>;\n\nexport class CollectionGenerationApiError extends Error {\n public code?: string;\n\n constructor(message: string, code?: string) {\n super(message);\n this.code = code;\n this.name = \"CollectionGenerationApiError\";\n }\n}\n\n/**\n * Default endpoint for AI collection generation\n */\nexport const DEFAULT_COLLECTION_GENERATION_ENDPOINT = \"https://api.firecms.co/collections/generate\";\n\n/**\n * Props for building a collection generation callback\n */\nexport interface BuildCollectionGenerationCallbackProps {\n /**\n * Function to get the auth token (e.g., from Firebase Auth)\n * This is typically `authController.getAuthToken` from `@firecms/firebase`\n */\n getAuthToken: () => Promise<string>;\n\n /**\n * Optional custom API endpoint for collection generation.\n * Defaults to the FireCMS SaaS API endpoint.\n */\n apiEndpoint?: string;\n}\n\n/**\n * Build a callback for AI collection generation.\n * This helper allows self-hosted FireCMS users to enable the AI collection\n * generation feature.\n *\n * @example\n * ```typescript\n * import { useCollectionEditorPlugin, buildCollectionGenerationCallback } from \"@firecms/collection_editor\";\n * import { useFirebaseAuthController } from \"@firecms/firebase\";\n *\n * const authController = useFirebaseAuthController({ firebaseApp });\n *\n * const collectionEditorPlugin = useCollectionEditorPlugin({\n * // ... other props\n * generateCollection: buildCollectionGenerationCallback({\n * getAuthToken: authController.getAuthToken\n * })\n * });\n * ```\n */\nexport function buildCollectionGenerationCallback({\n getAuthToken,\n apiEndpoint = DEFAULT_COLLECTION_GENERATION_ENDPOINT\n}: BuildCollectionGenerationCallbackProps): CollectionGenerationCallback {\n return async (request) => {\n const token = await getAuthToken();\n const response = await fetch(apiEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`\n },\n body: JSON.stringify(request)\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new CollectionGenerationApiError(\n errorData.error || \"Failed to generate collection\",\n errorData.code\n );\n }\n\n const data = await response.json();\n return {\n collection: data.data.collection,\n operations: data.data.operations\n };\n };\n}\n","import React, { useState } from \"react\";\nimport { EntityCollection, useNavigationController, useSnackbarController, AIIcon } from \"@firecms/core\";\nimport {\n Button,\n CircularProgress,\n IconButton,\n Menu,\n SendIcon,\n TextField,\n Typography\n} from \"@firecms/ui\";\nimport {\n CollectionGenerationCallback,\n CollectionGenerationApiError,\n CollectionOperation\n} from \"../../api/generateCollectionApi\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\n\nexport interface AICollectionGeneratorPopoverProps {\n /**\n * Current collection being edited (if modifying an existing collection)\n */\n existingCollection?: PersistedCollection;\n\n /**\n * Callback when a collection is generated or modified.\n * Includes the collection and optionally the operations that were applied.\n */\n onGenerated: (collection: EntityCollection, operations?: CollectionOperation[]) => void;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection: CollectionGenerationCallback;\n\n /**\n * Optional custom trigger button. If not provided, a default AI button is used.\n */\n trigger?: React.ReactNode;\n\n /**\n * Size of the button\n */\n size?: \"small\" | \"medium\" | \"large\";\n\n /**\n * Whether to show the label text\n */\n showLabel?: boolean;\n}\n\nexport function AICollectionGeneratorPopover({\n existingCollection,\n onGenerated,\n generateCollection,\n trigger,\n size = \"small\",\n showLabel = true\n}: AICollectionGeneratorPopoverProps) {\n const [menuOpen, setMenuOpen] = useState(false);\n const [prompt, setPrompt] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n const existingCollections = navigation.collections ?? [];\n\n const handleGenerate = async () => {\n if (!prompt.trim()) return;\n\n setLoading(true);\n setError(null);\n\n try {\n const collectionsContext = existingCollections.map(c => ({\n path: c.path,\n id: c.id,\n name: c.name,\n properties: c.properties,\n propertiesOrder: c.propertiesOrder\n }));\n\n const result = await generateCollection({\n prompt: prompt.trim(),\n existingCollections: collectionsContext.slice(0, 30),\n ...(existingCollection && {\n existingCollection: {\n path: existingCollection.path,\n id: existingCollection.id,\n name: existingCollection.name,\n properties: existingCollection.properties,\n propertiesOrder: existingCollection.propertiesOrder\n }\n })\n });\n\n onGenerated(result.collection, result.operations);\n setMenuOpen(false);\n setPrompt(\"\");\n snackbarController.open({\n type: \"success\",\n message: existingCollection\n ? \"Collection updated with AI suggestions\"\n : \"Collection generated successfully\"\n });\n } catch (e) {\n console.error(\"Error generating collection:\", e);\n const errorMessage = e instanceof CollectionGenerationApiError\n ? e.message\n : \"Failed to generate collection. Please try again.\";\n setError(errorMessage);\n snackbarController.open({\n type: \"error\",\n message: errorMessage\n });\n } finally {\n setLoading(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n const defaultTrigger = showLabel ? (\n <Button\n variant=\"text\"\n size={size}\n disabled={loading}\n startIcon={loading\n ? <CircularProgress size=\"smallest\" />\n : <AIIcon size=\"small\" />\n }\n >\n AI Assist\n </Button>\n ) : (\n <IconButton\n size={size}\n disabled={loading}\n aria-label=\"AI Assist\"\n >\n {loading\n ? <CircularProgress size=\"smallest\" />\n : <AIIcon size=\"small\" />\n }\n </IconButton>\n );\n\n return (\n <Menu\n open={menuOpen}\n onOpenChange={(open) => {\n setMenuOpen(open);\n if (!open) {\n setError(null);\n }\n }}\n trigger={trigger ?? defaultTrigger}\n >\n <div className=\"p-4 flex flex-col gap-3 min-w-[360px] max-w-[480px]\">\n <div className=\"flex items-center gap-2\">\n <AIIcon size=\"small\" />\n <Typography variant=\"subtitle2\">\n {existingCollection ? \"Modify Collection with AI\" : \"Generate Collection with AI\"}\n </Typography>\n </div>\n\n <Typography variant=\"caption\" color=\"secondary\">\n {existingCollection\n ? \"Describe the changes you want to make to this collection.\"\n : \"Describe the collection you want to create.\"\n }\n </Typography>\n\n <TextField\n size=\"small\"\n multiline\n autoFocus\n className=\"w-full text-text-primary dark:text-text-primary-dark\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={existingCollection\n ? \"e.g., Add a thumbnail image field with storage, make price required...\"\n : \"e.g., Create a products collection with name, price, description, and category...\"\n }\n disabled={loading}\n />\n\n {error && (\n <Typography variant=\"caption\" className=\"text-red-500\">\n {error}\n </Typography>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setMenuOpen(false)}\n disabled={loading}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n size=\"small\"\n onClick={handleGenerate}\n disabled={!prompt.trim() || loading}\n startIcon={loading ? <CircularProgress size=\"smallest\" /> : undefined}\n >\n {loading ? \"Generating...\" : \"Generate\"}\n </Button>\n </div>\n </div>\n </Menu>\n );\n}\n","import React, { useState } from \"react\";\nimport { AIIcon, EntityCollection, prettifyIdentifier, } from \"@firecms/core\";\nimport { Button, Card, Chip, cls, CodeIcon, Container, Icon, Tooltip, Typography, } from \"@firecms/ui\";\nimport { CollectionJsonImportDialog } from \"./CollectionJsonImportDialog\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"@firecms/data_import\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@firecms/formex\";\nimport { useCollectionEditorController } from \"../../useCollectionEditorController\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\n\nexport function CollectionEditorWelcomeView({\n path,\n parentCollection,\n onContinue,\n existingCollectionPaths,\n generateCollection\n}: {\n path: string;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[], propertiesOrder?: string[]) => void;\n existingCollectionPaths?: string[];\n generateCollection?: CollectionGenerationCallback;\n}) {\n\n const { pathSuggestions } = useCollectionEditorController();\n\n const filteredSuggestions = (pathSuggestions ?? []).filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [jsonImportOpen, setJsonImportOpen] = useState(false);\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={\"h4\"} className={\"flex-grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n {(filteredSuggestions ?? []).length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Use one of the existing paths in your database:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyanLighter\"}\n onClick={() => {\n setFieldValue(\"name\", prettifyIdentifier(suggestion));\n setFieldValue(\"id\", suggestion);\n setFieldValue(\"path\", suggestion);\n setFieldValue(\"properties\", undefined);\n onContinue();\n }}\n size=\"small\">\n {suggestion}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n <div className=\"flex flex-row gap-8\">\n\n {generateCollection && (\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Describe your collection to AI:\n </Typography>\n\n <AICollectionGeneratorPopover\n onGenerated={(generatedCollection) => {\n setValues(generatedCollection);\n onContinue();\n }}\n generateCollection={generateCollection}\n trigger={\n <Button\n variant=\"outlined\"\n startIcon={<AIIcon size=\"small\" />}\n >\n Generate with AI\n </Button>\n }\n />\n </div>\n )}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create from JSON configuration:\n </Typography>\n\n <Button\n variant={\"outlined\"}\n onClick={() => setJsonImportOpen(true)}\n startIcon={<CodeIcon size=\"small\" />}\n >\n Paste JSON Configuration\n </Button>\n\n <CollectionJsonImportDialog\n open={jsonImportOpen}\n onClose={() => setJsonImportOpen(false)}\n onImport={(collection) => {\n setValues(collection);\n onContinue();\n }}\n />\n </div>\n\n\n\n </div>\n\n\n {!parentCollection && <div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create a collection from a file (csv, json, xls, xslx...)\n </Typography>\n\n <ImportFileUpload onDataAdded={(data, propertiesOrder) => onContinue(data, propertiesOrder)} />\n\n </div>}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Select a template:\n </Typography>\n\n <div className={\"flex gap-2\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<Icon size={\"small\"}\n iconKey={productsCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(productsCollectionTemplate);\n onContinue();\n }} />\n <TemplateButton title={\"Users\"}\n subtitle={\"A collection of users with emails, names and roles\"}\n icon={<Icon size={\"small\"} iconKey={usersCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(usersCollectionTemplate);\n onContinue();\n }} />\n <TemplateButton title={\"Blog posts\"}\n subtitle={\"A collection of blog posts with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={blogCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(blogCollectionTemplate);\n onContinue();\n }} />\n <TemplateButton title={\"Pages\"}\n subtitle={\"A collection of pages with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={pagesCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }} />\n </div>\n\n </div>\n\n\n\n </Container>\n </div>\n );\n}\n\nexport function TemplateButton({\n title,\n subtitle,\n icon,\n onClick\n}: {\n title: string,\n icon: React.ReactNode,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}\n asChild={true}>\n <Card\n onClick={onClick}\n className={cls(\n \"my-2 rounded-md border px-4 py-3 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-text-secondary dark:text-text-secondary-dark\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-surface-400 dark:border-surface-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle2\"}>\n {title}\n </Typography>\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import {\n DataNewPropertiesMapping,\n getInferenceType,\n ImportConfig,\n ImportNewPropertyFieldPreview\n} from \"@firecms/data_import\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { getFieldConfig, getFieldId, Properties, Property, PropertyConfig, PropertyConfigBadge, } from \"@firecms/core\";\nimport { cls, Container, Select, SelectItem, Tooltip, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PersistedCollection } from \"../../../types/persisted_collection\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@firecms/schema_inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs,\n collectionEditable\n }:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean\n }) {\n\n // const {\n // values,\n // setFieldValue,\n // setFieldTouched,\n // setValues,\n // submitCount\n // } = useFormex();\n\n const {\n setFieldValue,\n setFieldTouched,\n values\n } = useFormex<PersistedCollection>();\n const [selectedProperty, setSelectedProperty] = useState<PropertyWithId | undefined>(undefined);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n const propertyKey = selectedProperty ? selectedProperty.id : undefined;\n const property = selectedProperty || undefined;\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // setSelectedProperty(property);\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n // replace previousId with id in headersMapping\n const newHeadersMapping = { ...importConfig.headersMapping };\n Object.keys(newHeadersMapping).forEach((key) => {\n if (newHeadersMapping[key] === previousId) {\n newHeadersMapping[key] = id ?? \"\";\n }\n });\n importConfig.setHeadersMapping(newHeadersMapping);\n\n // if (id) {\n // setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n // setSelectedPropertyKey(id);\n // }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n };\n const onPropertyTypeChanged = async ({\n id,\n importKey,\n property,\n namespace\n }: OnPropertyChangedParams & {\n importKey: string\n }) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // we try to infer the rest of the properties of a property, from the type and the data\n const propertyData = importConfig.importData.map((d) => getIn(d, importKey));\n const inferredNewProperty = {\n ...buildPropertyFromData(propertyData, property, getInferenceType),\n editable: true\n };\n\n if (propertyPath) {\n if (inferredNewProperty) {\n setFieldValue(propertyPath, inferredNewProperty, false);\n } else {\n setFieldValue(propertyPath, property, false);\n }\n setFieldTouched(propertyPath, true, false);\n }\n };\n\n return (\n\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"6xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <Typography variant=\"h6\" className={\"my-4 ml-3.5\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping importConfig={importConfig}\n destinationProperties={values.properties as Properties}\n buildPropertyView={({\n property,\n propertyKey,\n importKey,\n isIdColumn\n }) => {\n if (isIdColumn) {\n return <Typography> This column will be used as ID</Typography>\n }\n\n return <ImportNewPropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onPropertyNameChanged={(propertyKey: string, value: string) => setFieldValue(`properties.${propertyKey}.name`, value, false)}\n onEditClick={() => {\n if (!propertyKey || !property) return;\n setSelectedProperty({\n ...property,\n id: propertyKey,\n editable: true\n });\n }}\n propertyTypeView={<PropertySelect property={property}\n disabled={false}\n onPropertyChanged={(props) => onPropertyTypeChanged({\n ...props,\n importKey\n })}\n propertyKey={propertyKey}\n propertyConfigs={propertyConfigs}/>}\n />;\n }}/>\n </Container>\n\n <PropertyFormDialog\n open={selectedProperty !== undefined}\n propertyKey={propertyKey}\n property={property}\n inArray={false}\n autoUpdateId={false}\n onPropertyChanged={onPropertyChanged}\n allowDataInference={false}\n collectionEditable={collectionEditable}\n onOkClicked={() => {\n setSelectedProperty(undefined);\n }}\n onCancel={() => {\n setSelectedProperty(undefined);\n }}\n autoOpenTypeSelect={false}\n existingProperty={false}\n propertyConfigs={propertyConfigs}/>\n\n <div style={{ height: \"52px\" }}/>\n </div>\n );\n\n}\n\nfunction PropertySelect({\n property,\n onPropertyChanged,\n propertyKey,\n propertyConfigs,\n disabled\n }: {\n property: Property | null,\n propertyKey: string | null,\n onPropertyChanged: ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n disabled?: boolean\n}) {\n\n const fieldId = property ? getFieldId(property) : null;\n const widget = property ? getFieldConfig(property, propertyConfigs) : null;\n\n const [selectOpen, setSelectOpen] = useState(false);\n\n return <Tooltip title={property && widget ? `${widget?.name} - ${property.dataType}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n size={\"large\"}\n className={\"w-full\"}\n disabled={disabled}\n error={!widget}\n fullWidth={true}\n value={fieldId ?? \"\"}\n placeholder={\"Select a property widget\"}\n position={\"item-aligned\"}\n renderValue={(value) => {\n if (!widget) return null;\n return <PropertyConfigBadge propertyConfig={widget}/>\n }}\n onValueChange={(newSelectedWidgetId) => {\n const newProperty = updatePropertyFromWidget(property, newSelectedWidgetId, propertyConfigs)\n if (!propertyKey) return;\n onPropertyChanged({\n id: propertyKey,\n property: newProperty,\n previousId: propertyKey,\n namespace: undefined\n });\n }}>\n {Object.entries(supportedFields).map(([key, widget]) => {\n return <PropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n\nexport interface PropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function PropertySelectItem({ value, optionDisabled, propertyConfig, existing }: PropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n optionDisabled ? \"w-full\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <div>\n <div>{propertyConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}\n className={\"max-w-sm\"}>\n {existing && optionDisabled ? \"You can only switch to widgets that use the same data type\" : propertyConfig.description}\n </Typography>\n </div>\n </div>\n </SelectItem>\n}\n","import { convertDataToEntity, ImportConfig } from \"@firecms/data_import\";\nimport {\n CircularProgressCenter,\n EntityCollectionTable,\n Properties,\n useAuthController,\n useNavigationController,\n useSelectionController\n} from \"@firecms/core\";\nimport { useEffect, useState } from \"react\";\nimport { Typography } from \"@firecms/ui\";\n\nexport function CollectionEditorImportDataPreview({\n importConfig,\n properties,\n propertiesOrder\n }: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n const authController = useAuthController();\n const navigation = useNavigationController();\n const [loading, setLoading] = useState<boolean>(false);\n\n async function loadEntities() {\n const mappedData = importConfig.importData.map(d => convertDataToEntity(authController,\n navigation,\n d,\n importConfig.idColumn,\n importConfig.headersMapping,\n properties,\n \"TEMP_PATH\",\n importConfig.defaultValues));\n importConfig.setEntities(mappedData);\n }\n\n useEffect(() => {\n loadEntities().finally(() => setLoading(false));\n }, []);\n\n const selectionController = useSelectionController();\n if (loading)\n return <CircularProgressCenter/>\n\n return <EntityCollectionTable\n title={<div>\n <Typography variant={\"subtitle2\"}>Imported data preview</Typography>\n <Typography variant={\"caption\"}>Entities with the same id will be overwritten</Typography>\n </div>}\n tableController={{\n data: importConfig.entities,\n dataLoading: false,\n noMoreToLoad: false\n }}\n endAdornment={<div className={\"h-12\"}/>}\n filterable={false}\n sortable={false}\n selectionController={selectionController}\n displayedColumnIds={propertiesOrder.map(p => ({\n key: p,\n disabled: false\n }))}\n openEntityMode={\"side_panel\"}\n properties={properties}\n enablePopupIcon={false}/>\n\n}\n","import { Properties, slugify } from \"@firecms/core\";\nimport { ImportConfig } from \"@firecms/data_import\";\n\nexport function cleanPropertiesFromImport(properties: Properties, parentSlug = \"\"): {\n headersMapping: ImportConfig[\"headersMapping\"],\n properties: Properties,\n idColumn?: ImportConfig[\"idColumn\"],\n} {\n\n const result = Object.keys(properties).reduce((acc, key) => {\n const property = properties[key];\n const slug = slugify(key);\n const fullSlug = parentSlug ? `${parentSlug}.${slug}` : slug;\n\n if (property.dataType === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping, [key]: fullSlug },\n properties: {\n ...acc.properties,\n [slug]: {\n ...property,\n properties: slugifiedResult.properties,\n propertiesOrder: Object.keys(slugifiedResult.properties)\n }\n }\n }\n }\n\n const updatedProperties = {\n ...acc.properties,\n [slug]: property\n } as Properties;\n\n const headersMapping = { ...acc.headersMapping, [key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties,\n }\n }, { headersMapping: {}, properties: {} });\n\n const firstKey = Object.keys(result.headersMapping)?.[0];\n let idColumn: string | undefined;\n if (firstKey?.includes(\"id\") || firstKey?.includes(\"key\")) {\n idColumn = firstKey;\n }\n\n return {\n ...result,\n idColumn\n };\n}\n","import * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n CircularProgressCenter,\n ConfirmationDialog,\n Entity,\n EntityCollection,\n ErrorView,\n isPropertyBuilder,\n MapProperty,\n mergeDeep,\n NavigationResult,\n Properties,\n PropertiesOrBuilders,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n randomString,\n removeInitialAndTrailingSlashes,\n removeUndefined,\n useAuthController,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n ArrowBackIcon,\n Button,\n CheckIcon,\n cls,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n LoadingButton,\n Tab,\n Tabs,\n Typography\n} from \"@firecms/ui\";\nimport { YupSchema } from \"./CollectionYupValidation\";\nimport { GeneralSettingsForm } from \"./GeneralSettingsForm\";\nimport { DisplaySettingsForm } from \"./DisplaySettingsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { UnsavedChangesDialog } from \"./UnsavedChangesDialog\";\nimport { ExtendSettingsForm } from \"./ExtendSettingsForm\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"@firecms/data_import\";\nimport { buildEntityPropertiesFromData } from \"@firecms/schema_inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { Formex, FormexController, useCreateFormex } from \"@firecms/formex\";\nimport { getFullIdPath } from \"./util\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { AIModifiedPathsProvider, useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { CollectionOperation, CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n group?: string,\n path?: string,\n name?: string,\n }\n /**\n * A collection to duplicate from. If provided, the new collection will be\n * pre-populated with the same properties (but with empty name, path, and id).\n */\n copyFrom?: PersistedCollection;\n editedCollectionId?: string;\n fullPath?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n reservedGroups?: string[];\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n getUser?: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: PersistedCollection;\n existingEntities?: Entity<any>[];\n /**\n * Initial view to open when editing: \"general\", \"display\", or \"properties\".\n * For new collections, this is ignored.\n */\n initialView?: \"general\" | \"display\" | \"properties\";\n /**\n * If true, auto-expand the Kanban configuration section.\n */\n expandKanban?: boolean;\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] = React.useState<boolean>(false);\n\n const handleCancel = () => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n setUnsavedChangesDialogOpen(true);\n }\n };\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n setUnsavedChangesDialogOpen(false);\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n fullWidth={true}\n fullHeight={true}\n scrollable={false}\n maxWidth={\"7xl\"}\n onOpenChange={(open) => !open ? handleCancel() : undefined}\n >\n <DialogTitle hidden>Collection editor</DialogTitle>\n <AIModifiedPathsProvider>\n {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty} />}\n\n <UnsavedChangesDialog\n open={unsavedChangesDialogOpen}\n handleOk={() => props.handleClose(undefined)}\n handleCancel={() => setUnsavedChangesDialogOpen(false)}\n body={\"There are unsaved changes in this collection\"} />\n </AIModifiedPathsProvider>\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"general\"\n | \"display\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"extend\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigation = useNavigationController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation,\n collections\n } = navigation;\n\n const initialValuesProp = props.initialValues;\n const copyFromProp = props.copyFrom;\n // Skip templates when duplicating (copyFrom is provided)\n const includeTemplates = !copyFromProp && !initialValuesProp?.path && (props.parentCollectionIds ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? props.parentCollection.subcollections : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => col.path.trim().toLowerCase());\n const existingIds = collectionsInThisLevel.map(col => col.id?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<PersistedCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (navigation.initialised) {\n if (props.editedCollectionId) {\n setCollection(navigation.getCollectionFromPaths([...(props.parentCollectionIds ?? []), props.editedCollectionId]));\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [props.editedCollectionId, props.parentCollectionIds, navigation.initialised, navigation.getCollectionFromPaths]);\n\n if (!topLevelNavigation) {\n throw Error(\"Internal: Navigation not ready in collection editor\");\n }\n\n const {\n groups\n }: NavigationResult = topLevelNavigation;\n\n const initialCollection = collection\n ? {\n ...collection,\n id: collection.id ?? collection.path ?? randomString(16)\n }\n : undefined;\n\n // Build initial values - handle copyFrom for duplication\n const initialValues: PersistedCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : copyFromProp\n ? {\n // When duplicating, copy all properties but clear identifiers\n ...copyFromProp,\n id: randomString(16),\n path: \"\",\n name: \"\",\n subcollections: undefined, // Don't copy subcollections\n ownerId: authController.user?.uid ?? \"\"\n }\n : {\n id: initialValuesProp?.path ?? randomString(16),\n path: initialValuesProp?.path ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n group: initialValuesProp?.group ?? \"\",\n properties: {} as PropertiesOrBuilders,\n propertiesOrder: [],\n icon: coolIconKeys[Math.floor(Math.random() * coolIconKeys.length)],\n ownerId: authController.user?.uid ?? \"\"\n };\n\n if (!initialLoadingCompleted) {\n return <CircularProgressCenter />;\n }\n\n if (!props.isNewCollection && (!navigation.initialised || !initialLoadingCompleted)) {\n return <CircularProgressCenter />;\n }\n\n return <CollectionEditorInternal\n {...props}\n initialValues={initialValues}\n existingPaths={existingPaths}\n existingIds={existingIds}\n includeTemplates={includeTemplates}\n collection={collection}\n setCollection={setCollection}\n groups={groups}\n propertyConfigs={propertyConfigs} />\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, any>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionIds,\n fullPath,\n collectionInference,\n handleClose,\n reservedGroups,\n extraView,\n handleCancel,\n setFormDirty,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n groups,\n existingEntities,\n initialView: initialViewProp,\n expandKanban,\n generateCollection\n}: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: PersistedCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: PersistedCollection<M> | undefined,\n setCollection: (collection: PersistedCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig<any>>,\n groups: string[],\n}\n) {\n\n const importConfig = useImportConfig();\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef({});\n\n const initialView = isNewCollection\n ? (includeTemplates ? \"welcome\" : \"general\")\n : (initialViewProp ?? \"properties\");\n const [currentView, setCurrentView] = useState<EditorView>(initialView); // this view can edit either the details view or the properties one\n\n const [error, setError] = React.useState<Error | undefined>();\n\n const saveCollection = (updatedCollection: PersistedCollection<M>): Promise<boolean> => {\n const id = updatedCollection.id || updatedCollection.path;\n\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionIds\n })\n .then(() => {\n setError(undefined);\n return true;\n })\n .catch((e) => {\n setError(e);\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n };\n\n const setNextMode = () => {\n if (currentView === \"general\") {\n if (importConfig.inUse) {\n setCurrentView(\"import_data_saving\");\n } else if (extraView) {\n setCurrentView(\"extra_view\");\n } else {\n setCurrentView(\"properties\");\n }\n } else if (currentView === \"welcome\") {\n setCurrentView(\"general\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"general\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"general\");\n }\n\n };\n\n const doCollectionInference = collectionInference ? (collection: PersistedCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(\n collection.path,\n collection.collectionGroup ?? false,\n parentPaths ?? [],\n collection.databaseId,\n collection.initialFilter,\n collection.initialSort\n );\n } : undefined;\n\n const inferCollectionFromData = async (newCollection: PersistedCollection<M>) => {\n\n try {\n if (!doCollectionInference) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n\n setCurrentView(\"loading\");\n\n const inferredCollection = await doCollectionInference?.(newCollection);\n\n if (!inferredCollection) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n const values = {\n ...(newCollection ?? {})\n };\n\n if (Object.keys(inferredCollection.properties ?? {}).length > 0) {\n values.properties = inferredCollection.properties as PropertiesOrBuilders<M>;\n values.propertiesOrder = inferredCollection.propertiesOrder as Extract<keyof M, string>[];\n }\n\n if (!values.propertiesOrder) {\n values.propertiesOrder = Object.keys(values.properties) as Extract<keyof M, string>[];\n return values;\n }\n\n setCollection(values);\n console.debug(\"Inferred collection\", {\n newCollection: newCollection ?? {},\n values\n });\n return values;\n } catch (e: any) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e.message ?? \"Details in the console\")\n });\n return newCollection;\n }\n };\n\n const onSubmit = (newCollectionState: PersistedCollection<M>, formexController: FormexController<PersistedCollection<M>>) => {\n console.debug(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n saveCollection(newCollectionState).then(() => {\n aiModifiedPaths?.clearAllPaths();\n formexController.resetForm();\n handleClose(newCollectionState);\n });\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"general\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n inferCollectionFromData(newCollectionState)\n .then((values) => {\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n }).finally(() => {\n setNextMode();\n });\n } else {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n }\n } else if (currentView === \"extra_view\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"import_data_mapping\") {\n setNextMode();\n } else if (currentView === \"import_data_preview\") {\n setNextMode();\n } else if (currentView === \"properties\") {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState);\n });\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: any) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: PersistedCollection) => {\n\n let errors: Record<string, any> = {};\n const schema = (currentView === \"properties\" || currentView === \"extend\" || currentView === \"general\") && YupSchema;\n if (schema) {\n try {\n schema.validateSync(col, { abortEarly: false });\n } catch (e: any) {\n e.inner.forEach((err: any) => {\n errors[err.path] = err.message;\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors, ...propertyErrorsRef.current };\n }\n if (currentView === \"general\") {\n const pathError = validatePath(col.path, isNewCollection, existingPaths, col.id);\n if (pathError) {\n errors.path = pathError;\n }\n const idError = validateId(col.id, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n return errors;\n };\n\n const formController = useCreateFormex<PersistedCollection<M>>({\n initialValues,\n onSubmit,\n validation,\n debugId: \"COLLECTION_EDITOR\"\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n const path = values.path;\n const updatedFullPath = fullPath?.includes(\"/\") ? fullPath?.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + path : path; // TODO: this path is wrong\n const pathError = validatePath(path, isNewCollection, existingPaths, values.id);\n\n const parentPaths = !pathError && parentCollectionIds ? navigation.convertIdsToPaths(parentCollectionIds) : undefined;\n const resolvedPath = !pathError ? navigation.resolveIdsFrom(updatedFullPath) : undefined;\n\n const getDataWithPath = resolvedPath && getData ? async () => {\n const data = await getData!(resolvedPath, parentPaths ?? []);\n if (existingEntities) {\n const existingData = existingEntities.map(e => e.values);\n data.push(...existingData);\n }\n return data;\n } : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[], propertiesOrder?: string[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties: Properties) => {\n const res = cleanPropertiesFromImport(properties);\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n const filteredHeadingsOrder = ((propertiesOrder ?? [])\n .filter((key) => res.headersMapping[key]) as string[]) ?? Object.keys(res.properties);\n importConfig.setHeadingsOrder(filteredHeadingsOrder);\n importConfig.setOriginProperties(res.properties);\n\n const mappedHeadings = (propertiesOrder ?? []).map((key) => res.headersMapping[key]).filter(Boolean) as string[] ?? Object.keys(res.properties);\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", mappedHeadings);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.id);\n\n const onImportMappingComplete = () => {\n const updatedProperties = { ...values.properties };\n if (importConfig.idColumn)\n delete updatedProperties[importConfig.idColumn];\n setFieldValue(\"properties\", updatedProperties);\n // setFieldValue(\"propertiesOrder\", Object.values(importConfig.headersMapping));\n setNextMode();\n };\n\n const editable = collection?.editable === undefined || collection?.editable === true;\n // @ts-ignore\n const isMergedCollection = collection?.merged ?? false;\n const collectionEditable = editable || isNewCollection;\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n if (!collection) return;\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n handleCancel();\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n const onWelcomeScreenContinue = (importData?: object[], propertiesOrder?: string[]) => {\n if (importData) {\n onImportDataSet(importData, propertiesOrder);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"general\");\n }\n };\n\n const aiModifiedPaths = useAIModifiedPaths();\n\n const handleAIGenerated = (generatedCollection: EntityCollection, operations?: CollectionOperation[]) => {\n formController.setValues(generatedCollection as PersistedCollection<M>);\n if (operations && aiModifiedPaths) {\n aiModifiedPaths.addModifiedPaths(operations);\n }\n };\n\n return <DialogContent fullHeight={true}>\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <div className={cls(\"px-4 py-2 w-full flex items-center justify-end gap-2 bg-surface-50 dark:bg-surface-950 border-b\", defaultBorderMixin)}>\n {generateCollection && (\n <AICollectionGeneratorPopover\n existingCollection={values}\n onGenerated={handleAIGenerated}\n generateCollection={generateCollection}\n />\n )}\n <Tabs value={currentView}\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"general\"}>\n General\n </Tab>\n <Tab value={\"display\"}>\n Display\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n <Tab value={\"extend\"}>\n Extend\n </Tab>\n </Tabs>\n </div>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className={cls(\n isNewCollection ? \"h-full\" : \"h-[calc(100%-48px)]\",\n \"flex-grow flex flex-col relative\")}>\n\n {currentView === \"loading\" &&\n <CircularProgressCenter />}\n\n {currentView === \"extra_view\" &&\n path &&\n extraView?.View &&\n <extraView.View path={path} />}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={path}\n onContinue={onWelcomeScreenContinue}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n generateCollection={generateCollection} />}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs} />}\n\n {currentView === \"import_data_preview\" && importConfig &&\n <CollectionEditorImportDataPreview importConfig={importConfig}\n properties={values.properties as Properties}\n propertiesOrder={values.propertiesOrder as string[]} />}\n\n {currentView === \"import_data_saving\" && importConfig &&\n <ImportSaveInProgress importConfig={importConfig}\n collection={values}\n path={path}\n onImportSuccess={async (importedCollection) => {\n snackbarController.open({\n type: \"info\",\n message: \"Data imported successfully\"\n });\n await saveCollection(values);\n handleClose(importedCollection);\n }}\n />}\n\n {currentView === \"general\" &&\n <GeneralSettingsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection} />\n }\n\n {currentView === \"display\" &&\n <DisplaySettingsForm expandKanban={expandKanban} />\n }\n\n {currentView === \"extend\" && collection &&\n <ExtendSettingsForm\n collection={collection}\n parentCollection={parentCollection}\n configController={configController}\n collectionInference={collectionInference}\n getUser={getUser}\n parentCollectionIds={parentCollectionIds}\n isMergedCollection={!isNewCollection && isMergedCollection}\n onResetToCode={() => setDeleteRequested(true)} />\n }\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n reservedGroups={reservedGroups}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true);\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>} />\n }\n\n <DialogActions\n position={\"absolute\"}>\n {error && <ErrorView error={error} />}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_mapping\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n importConfig.setInUse(false);\n return setCurrentView(\"welcome\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_preview\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n setCurrentView(\"import_data_mapping\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"general\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n color={\"neutral\"}\n onClick={() => setCurrentView(\"general\")}>\n <ArrowBackIcon />\n Back\n </Button>}\n\n <Button variant={\"text\"}\n color={\"neutral\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\n </Button>\n\n {currentView === \"welcome\" &&\n <Button variant={\"text\"} onClick={() => onWelcomeScreenContinue()}>\n Continue from scratch\n </Button>}\n\n {isNewCollection && currentView === \"import_data_mapping\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={onImportMappingComplete}\n >\n Next\n </Button>}\n\n {isNewCollection && currentView === \"import_data_preview\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={() => {\n setNextMode();\n }}\n >\n Next\n </Button>}\n\n {isNewCollection && (currentView === \"general\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"general\" && !validValues)}\n startIcon={currentView === \"properties\"\n ? <CheckIcon />\n : undefined}\n >\n {currentView === \"general\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Update collection\n </LoadingButton>}\n\n </DialogActions>\n </form>\n </>\n\n </Formex>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete the stored config?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the stored config, and reset to the code state.</>} />\n\n </DialogContent>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, any> = any>(collection: PersistedCollection<M>, propertyConfigs: Record<string, PropertyConfig<any>>): PersistedCollection<M> {\n const {\n properties,\n ...rest\n } = collection;\n const propertiesResult: PropertiesOrBuilders<any> = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n propertiesResult[key] = applyPropertiesConfig(properties[key] as PropertyOrBuilder, propertyConfigs);\n });\n }\n\n return {\n ...rest,\n properties: propertiesResult\n };\n}\n\nfunction applyPropertiesConfig(property: PropertyOrBuilder, propertyConfigs: Record<string, PropertyConfig<any>>) {\n let internalProperty = property;\n if (propertyConfigs && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property)) {\n internalProperty = propertyConfig.property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.dataType === \"map\" && internalProperty.properties) {\n const properties: Record<string, PropertyOrBuilder> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = {\n ...internalProperty,\n properties\n };\n }\n\n }\n }\n return internalProperty;\n\n}\n\nconst validatePath = (value: string, isNewCollection: boolean, existingPaths: string[], idValue?: string) => {\n let error;\n if (!value) {\n error = \"You must specify a path in the database for this collection\";\n }\n // if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n // error = \"There is already a collection which uses this path as an id\";\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()) && !idValue)\n error = \"There is already a collection with the specified path. If you want to have multiple collections referring to the same database path, make sure the have different ids\";\n\n const subpaths = removeInitialAndTrailingSlashes(value).split(\"/\");\n if (subpaths.length % 2 === 0) {\n error = `Collection paths must have an odd number of segments: ${value}`;\n }\n return error;\n};\n\nconst validateId = (value: string, isNewCollection: boolean, existingPaths: string[], existingIds: string[]) => {\n if (!value) return undefined;\n let error;\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection that uses this value as a path\";\n if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection which uses this id\";\n // if (error) {\n // setAdvancedPanelExpanded(true);\n // }\n return error;\n};\n","import React, { PropsWithChildren, useCallback } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport {\n Entity,\n Property,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport { CollectionEditorDialog } from \"./ui/collection_editor/CollectionEditorDialog\";\nimport { useNavigate } from \"react-router\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { PropertyFormDialog } from \"./ui/collection_editor/PropertyEditView\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionGenerationCallback } from \"./api/generateCollectionApi\";\n\nexport const ConfigControllerContext = React.createContext<CollectionsConfigController>({} as any);\nexport const CollectionEditorContext = React.createContext<CollectionEditorController>({} as any);\n\nexport interface ConfigControllerProviderProps {\n /**\n * Controller for managing the collections' config.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Callback used to infer the schema from the data.\n */\n collectionInference?: CollectionInference;\n\n /**\n * Use this builder to define the permissions for the configuration per user.\n */\n configPermissions?: CollectionEditorPermissionsBuilder;\n\n /**\n * Groups that cannot be used to create new collections.\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n pathSuggestions?: string[];\n\n getUser?: (uid: string) => User | null;\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n\n}\n\nexport const ConfigControllerProvider = React.memo(\n function ConfigControllerProvider({\n children,\n collectionConfigController,\n configPermissions,\n reservedGroups,\n collectionInference,\n extraView,\n getUser,\n getData,\n onAnalyticsEvent,\n pathSuggestions,\n generateCollection\n }: PropsWithChildren<ConfigControllerProviderProps>) {\n\n const navigation = useNavigationController();\n const navigate = useNavigate();\n const snackbarController = useSnackbarController();\n const { propertyConfigs } = useCustomizationController();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n parentCollection?: PersistedCollection,\n editedCollectionId?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n initialValues?: {\n path?: string,\n group?: string,\n name?: string\n },\n copyFrom?: PersistedCollection,\n redirect: boolean,\n existingEntities?: Entity<any>[],\n pathSuggestions?: string[];\n initialView?: \"general\" | \"display\" | \"properties\";\n expandKanban?: boolean;\n }>();\n\n const [currentPropertyDialog, setCurrentPropertyDialog] = React.useState<{\n propertyKey?: string,\n property?: Property,\n namespace?: string,\n parentCollection?: PersistedCollection,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n fullPath?: string,\n parentCollectionIds: string[],\n collectionEditable: boolean;\n existingEntities?: Entity<any>[];\n collection?: PersistedCollection;\n }>();\n\n const defaultConfigPermissions: CollectionEditorPermissionsBuilder = useCallback(() => ({\n createCollections: true,\n editCollections: true,\n deleteCollections: true\n }), []);\n\n const editCollection = ({\n id,\n fullPath,\n parentCollectionIds,\n parentCollection,\n existingEntities,\n initialView,\n expandKanban\n }: {\n id?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection,\n existingEntities?: Entity<any>[],\n initialView?: \"general\" | \"display\" | \"properties\",\n expandKanban?: boolean\n }) => {\n console.debug(\"Edit collection\", id, fullPath, parentCollectionIds, parentCollection);\n onAnalyticsEvent?.(\"edit_collection\", {\n id,\n fullPath\n });\n setCurrentDialog({\n editedCollectionId: id,\n fullPath,\n parentCollectionIds,\n isNewCollection: false,\n parentCollection,\n redirect: false,\n existingEntities,\n pathSuggestions,\n initialView,\n expandKanban\n });\n };\n\n const editProperty = ({\n propertyKey,\n property,\n editedCollectionId,\n currentPropertiesOrder,\n parentCollectionIds,\n collection,\n existingEntities\n }: {\n propertyKey?: string,\n property?: Property,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n parentCollectionIds: string[],\n collection: PersistedCollection,\n existingEntities?: Entity<any>[]\n }) => {\n console.debug(\"Edit property\", propertyKey, property, editedCollectionId, currentPropertiesOrder, parentCollectionIds, collection);\n onAnalyticsEvent?.(\"edit_property\", {\n propertyKey,\n editedCollectionId\n });\n // namespace is all the path until the last dot\n const namespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(0, propertyKey.lastIndexOf(\".\"))\n : undefined;\n const propertyKeyWithoutNamespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(propertyKey.lastIndexOf(\".\") + 1)\n : propertyKey;\n setCurrentPropertyDialog({\n propertyKey: propertyKeyWithoutNamespace,\n property,\n namespace,\n currentPropertiesOrder,\n editedCollectionId,\n parentCollectionIds,\n collectionEditable: collection?.editable === undefined || collection?.editable === true,\n existingEntities,\n collection\n });\n };\n\n const createCollection = ({\n parentCollectionIds,\n parentCollection,\n initialValues,\n copyFrom,\n redirect,\n sourceClick\n }: {\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n initialValues?: {\n group?: string,\n path?: string,\n name?: string\n },\n copyFrom?: PersistedCollection,\n redirect: boolean,\n sourceClick?: string\n }) => {\n console.debug(\"Create collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n copyFrom,\n redirect,\n sourceClick\n });\n onAnalyticsEvent?.(copyFrom ? \"duplicate_collection\" : \"create_collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n });\n setCurrentDialog({\n isNewCollection: true,\n parentCollectionIds,\n parentCollection,\n initialValues,\n copyFrom,\n redirect,\n pathSuggestions\n });\n };\n\n return (\n <ConfigControllerContext.Provider value={collectionConfigController}>\n <CollectionEditorContext.Provider\n value={{\n editCollection,\n createCollection,\n editProperty,\n configPermissions: configPermissions ?? defaultConfigPermissions,\n pathSuggestions\n }}>\n\n {children}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={collectionConfigController}\n isNewCollection={false}\n collectionInference={collectionInference}\n {...currentDialog}\n getData={getData}\n reservedGroups={reservedGroups}\n extraView={extraView}\n getUser={getUser}\n generateCollection={generateCollection}\n handleClose={(collection) => {\n if (currentDialog?.redirect) {\n if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionIds.length) {\n const url = navigation.buildUrlCollectionPath(collection.id ?? collection.path);\n navigate(url);\n }\n }\n setCurrentDialog(undefined);\n }} />\n\n {/* Used for editing properties*/}\n <PropertyFormDialog\n open={Boolean(currentPropertyDialog)}\n includeIdAndName={true}\n existingProperty={Boolean(currentPropertyDialog?.propertyKey)}\n autoUpdateId={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n autoOpenTypeSelect={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n inArray={false}\n collectionEditable={currentPropertyDialog?.collectionEditable ?? false}\n getData={currentPropertyDialog?.existingEntities || (getData && currentPropertyDialog?.editedCollectionId)\n ? async () => {\n let data: object[] = [];\n // First, use existing entities if available (already loaded in table)\n if (currentPropertyDialog?.existingEntities) {\n data = currentPropertyDialog.existingEntities.map(e => e.values);\n }\n // If getData is available and we have a path, also fetch from database\n if (getData && currentPropertyDialog?.editedCollectionId) {\n console.debug(\"Get data for property, path:\", currentPropertyDialog?.editedCollectionId);\n const resolvedPath = navigation.resolveIdsFrom(currentPropertyDialog.editedCollectionId!);\n const fetchedData = await getData(resolvedPath, []);\n data.push(...fetchedData);\n }\n return data;\n }\n : undefined}\n onPropertyChanged={({\n id,\n property\n }) => {\n if (!currentPropertyDialog) return;\n if (!id) return;\n const newProperty = !(currentPropertyDialog.propertyKey);\n return collectionConfigController.saveProperty({\n path: currentPropertyDialog?.editedCollectionId,\n property,\n propertyKey: id,\n newPropertiesOrder: newProperty && currentPropertyDialog.currentPropertiesOrder ? [...currentPropertyDialog.currentPropertiesOrder, id] : undefined,\n namespace: currentPropertyDialog.namespace,\n parentCollectionIds: currentPropertyDialog.parentCollectionIds\n })\n .catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onPropertyChangedImmediate={false}\n onDelete={() => {\n if (!currentPropertyDialog?.propertyKey) return;\n const newPropertiesOrder = currentPropertyDialog?.currentPropertiesOrder?.filter(p => p !== currentPropertyDialog?.propertyKey);\n return collectionConfigController.deleteProperty({\n path: currentPropertyDialog?.editedCollectionId,\n propertyKey: currentPropertyDialog?.propertyKey,\n namespace: currentPropertyDialog?.namespace,\n newPropertiesOrder,\n parentCollectionIds: currentPropertyDialog?.parentCollectionIds\n })\n .then(() => {\n setCurrentPropertyDialog(undefined);\n }).catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onError={() => {\n }}\n onOkClicked={() => {\n setCurrentPropertyDialog(undefined);\n }}\n onCancel={() => {\n setCurrentPropertyDialog(undefined);\n }}\n initialErrors={{}}\n forceShowErrors={false}\n existingPropertyKeys={currentPropertyDialog?.collection?.properties ? Object.keys(currentPropertyDialog.collection.properties) : []}\n allowDataInference={true}\n propertyConfigs={propertyConfigs}\n property={currentPropertyDialog?.property}\n propertyKey={currentPropertyDialog?.propertyKey} />\n\n </CollectionEditorContext.Provider>\n\n </ConfigControllerContext.Provider>\n );\n }, equal);\n","import { CollectionActionsProps, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n const editorButton = <Tooltip\n asChild={true}\n title={canEditCollection ? \"Edit collection\" : \"You don't have permissions to edit this collection\"}>\n <IconButton\n size={\"small\"}\n color={\"primary\"}\n disabled={!canEditCollection}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({\n id: collection.id,\n fullPath,\n parentCollectionIds,\n parentCollection: parentCollection as PersistedCollection,\n existingEntities: tableController?.data ?? []\n })\n : undefined}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {editorButton}\n </>\n\n}\n","import { useContext } from \"react\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { ConfigControllerContext } from \"./ConfigControllerProvider\";\n\n/**\n * Use this hook to access the configuration controller.\n * You can use it to get the list of collections, and to save/delete collections.\n */\nexport const useCollectionsConfigController = (): CollectionsConfigController => useContext(ConfigControllerContext);\n","import {\n ConfirmationDialog,\n PluginHomePageActionsProps,\n useAuthController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { ContentCopyIcon, DeleteIcon, IconButton, Menu, MenuItem, MoreVertIcon, SettingsIcon, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useState } from \"react\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\nexport function HomePageEditorCollectionAction({\n path,\n collection\n}: PluginHomePageActionsProps) {\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const configController = useCollectionsConfigController();\n const collectionEditorController = useCollectionEditorController();\n\n const permissions = collectionEditorController?.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n })\n : {\n createCollections: false,\n editCollections: false,\n deleteCollections: false\n };\n\n const onEditCollectionClicked = () => {\n collectionEditorController?.editCollection({\n id: collection.id,\n parentCollectionIds: []\n });\n };\n\n const onDuplicateCollectionClicked = () => {\n // Use copyFrom to duplicate the collection with all properties\n // The editor will handle clearing name, path, and id\n collectionEditorController?.createCollection({\n copyFrom: collection,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"home_page_duplicate\"\n });\n };\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n return <>\n\n <div>\n {permissions.deleteCollections &&\n <Menu\n trigger={<IconButton size={\"small\"}>\n <MoreVertIcon size={\"small\"} />\n </IconButton>}\n >\n {permissions.createCollections &&\n <MenuItem\n dense={true}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onDuplicateCollectionClicked();\n }}>\n <ContentCopyIcon />\n Duplicate\n </MenuItem>\n }\n <MenuItem\n dense={true}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setDeleteRequested(true);\n }}>\n <DeleteIcon />\n Delete\n </MenuItem>\n\n </Menu>\n\n }\n\n {permissions.editCollections &&\n <IconButton\n size={\"small\"}\n onClick={(event) => {\n onEditCollectionClicked();\n }}>\n <SettingsIcon size={\"small\"} />\n </IconButton>}\n </div>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete this collection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>} />\n </>;\n\n}\n","import { EntityTableController, ResolvedProperty } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip } from \"@firecms/ui\";\nimport React from \"react\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function CollectionViewHeaderAction({\n propertyKey,\n onHover,\n property,\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n property: ResolvedProperty,\n propertyKey: string,\n onHover: boolean,\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const collectionEditorController = useCollectionEditorController();\n\n return (\n <Tooltip\n asChild={true}\n title={\"Edit\"}>\n <IconButton\n className={onHover ? \"bg-white dark:bg-surface-950\" : \"hidden\"}\n onClick={() => {\n collectionEditorController.editProperty({\n propertyKey,\n property,\n editedCollectionId: collection.id,\n parentCollectionIds,\n collection,\n existingEntities: tableController.data ?? []\n });\n }}\n size={\"small\"}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n )\n}\n","import { EntityTableController, getDefaultPropertiesOrder, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Tooltip } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function PropertyAddColumnComponent({\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n return (\n <Tooltip\n asChild={true}\n title={canEditCollection ? \"Add new property\" : \"You don't have permission to add new properties\"}>\n <div\n className={\"p-0.5 w-20 h-full flex items-center justify-center cursor-pointer bg-surface-100 bg-opacity-40 bg-surface-100/40 hover:bg-surface-100 dark:bg-surface-950 dark:bg-opacity-40 dark:bg-surface-950/40 dark:hover:bg-surface-950\"}\n // className={onHover ? \"bg-white dark:bg-surface-950\" : undefined}\n onClick={() => {\n collectionEditorController.editProperty({\n editedCollectionId: collection.id,\n parentCollectionIds,\n currentPropertiesOrder: getDefaultPropertiesOrder(collection),\n collection,\n existingEntities: tableController.data\n });\n }}>\n <AddIcon color={\"inherit\"}/>\n </div>\n </Tooltip>\n )\n}\n","import { AddIcon, Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionButton() {\n const collectionEditorController = useCollectionEditorController();\n return <div className={\"bg-surface-50 dark:bg-surface-900 min-w-fit rounded\"}>\n <Button className={\"min-w-fit\"}\n\n onClick={() => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_button\"\n })}>\n <AddIcon/>\n New collection\n </Button>\n </div>\n}\n","import equal from \"react-fast-compare\"\n\nimport { CollectionActionsProps, mergeDeep, useAuthController, useSnackbarController } from \"@firecms/core\";\nimport { Button, SaveIcon, Tooltip, UndoIcon, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionActionStart({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n let saveDefaultFilterButton = null;\n if (!equal(getObjectOrNull(tableController.filterValues), getObjectOrNull(collection.initialFilter)) ||\n !equal(getObjectOrNull(tableController.sortBy), getObjectOrNull(collection.initialSort))) {\n saveDefaultFilterButton = <>\n <Tooltip\n asChild={true}\n title={tableController.sortBy || tableController.filterValues ? \"Save default filter and sort\" : \"Clear default filter and sort\"}>\n <Button\n size={\"small\"}\n variant={\"text\"}\n onClick={() => configController\n ?.saveCollection({\n id: collection.id,\n parentCollectionIds,\n collectionData: mergeDeep(collection as PersistedCollection,\n {\n initialFilter: tableController.filterValues ?? null,\n initialSort: tableController.sortBy ?? null\n })\n }).then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"Default config saved\"\n });\n })}>\n <SaveIcon/>\n </Button>\n </Tooltip>\n\n {(collection.initialFilter || collection.initialSort) && <Tooltip\n title={\"Reset to default filter and sort\"}>\n <Button\n size={\"small\"}\n variant={\"text\"}\n onClick={() => {\n tableController.clearFilter?.();\n if (collection?.initialFilter)\n tableController.setFilterValues?.(collection?.initialFilter);\n if (collection?.initialSort)\n tableController.setSortBy?.(collection?.initialSort);\n }}>\n <UndoIcon/>\n </Button>\n </Tooltip>}\n </>;\n }\n\n return <>\n {canEditCollection && saveDefaultFilterButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import { PluginHomePageAdditionalCardsProps, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Card, cls, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionCard({\n group,\n context\n }: PluginHomePageAdditionalCardsProps) {\n\n if (!context.navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <Card className={cls(\"h-full p-4 min-h-[124px]\")}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: group ? { group } : undefined,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n\n <div\n className=\"flex items-center justify-center h-full w-full flex-grow flex-col\">\n <AddIcon color=\"primary\" size={\"large\"}/>\n <Typography color=\"primary\"\n variant={\"caption\"}\n className={\"font-medium\"}>{\"Add new collection\".toUpperCase()}</Typography>\n\n {!canCreateCollections &&\n <Typography variant={\"caption\"}>You don't have permissions to create\n collections</Typography>\n }\n </div>\n\n </Card>\n );\n}\n","import { PluginFormActionProps, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorEntityAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n formContext\n }: PluginFormActionProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n const isDirty = formContext?.formex.dirty ?? false;\n\n const editorButton = <Tooltip\n asChild={true}\n title={canEditCollection ? (isDirty ? \"You need to save the document before changing the schema\" : \"Edit schema for this form\") : \"You don't have permissions to edit this collection\"}>\n <IconButton\n color={\"primary\"}\n disabled={!canEditCollection || isDirty}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({\n id: collection.id,\n fullPath,\n parentCollectionIds,\n parentCollection: parentCollection as PersistedCollection,\n })\n : undefined}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {editorButton}\n </>\n\n}\n","import React from \"react\";\nimport { EntityCollection, useNavigationController } from \"@firecms/core\";\nimport { Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\n/**\n * Component rendered when Kanban view is missing orderProperty configuration.\n * Provides a CTA button to open the collection editor to configure Kanban.\n */\nexport function KanbanSetupAction({\n collection,\n fullPath,\n parentCollectionIds\n}: {\n collection: EntityCollection;\n fullPath: string;\n parentCollectionIds: string[];\n}) {\n const collectionEditorController = useCollectionEditorController();\n\n const handleConfigureClick = () => {\n collectionEditorController.editCollection({\n id: collection.id,\n parentCollectionIds,\n initialView: \"display\",\n expandKanban: true\n });\n };\n\n return (\n <Button\n variant=\"outlined\"\n onClick={handleConfigureClick}\n >\n Configure Kanban\n </Button>\n );\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport {\n EntityCollection,\n getPropertyInPath,\n ResolvedStringProperty,\n resolveCollection,\n resolveEnumValues,\n toSnakeCase,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Button,\n cls,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n IconButton,\n TextField,\n Typography\n} from \"@firecms/ui\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\n/**\n * Component rendered at the end of the Kanban board to add new columns (enum values).\n * Opens a dialog to input a new enum value for the column property.\n */\nexport function AddKanbanColumnAction({\n collection,\n fullPath,\n parentCollectionIds,\n columnProperty\n}: {\n collection: EntityCollection;\n fullPath: string;\n parentCollectionIds: string[];\n columnProperty: string;\n}) {\n const [dialogOpen, setDialogOpen] = useState(false);\n const [newValueLabel, setNewValueLabel] = useState(\"\");\n const [saving, setSaving] = useState(false);\n\n const configController = useCollectionsConfigController();\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n\n const resolvedCollection = useMemo(() => resolveCollection({\n collection,\n path: fullPath,\n propertyConfigs: customizationController.propertyConfigs,\n authController\n }), [collection, fullPath, customizationController.propertyConfigs, authController]);\n\n // Get current enum values\n const currentEnumValues = useMemo(() => {\n const property = getPropertyInPath(resolvedCollection.properties, columnProperty);\n if (!property || !('dataType' in property) || property.dataType !== \"string\") {\n return [];\n }\n const stringProperty = property as ResolvedStringProperty;\n if (!stringProperty.enumValues) {\n return [];\n }\n return resolveEnumValues(stringProperty.enumValues) ?? [];\n }, [resolvedCollection, columnProperty]);\n\n const handleAddColumn = useCallback(async () => {\n if (!newValueLabel.trim() || !configController) return;\n\n setSaving(true);\n try {\n // Check for property in persisted collection first, then resolved collection\n // This handles code-defined properties that aren't in the persisted config\n let property = collection?.properties?.[columnProperty];\n let isCodeDefinedProperty = false;\n\n if (!property || typeof property === 'function') {\n // Property not in persisted config - check resolved collection\n property = resolvedCollection.properties?.[columnProperty];\n isCodeDefinedProperty = true;\n }\n\n // Type guard: property must be an object with dataType === \"string\"\n if (!property || typeof property === 'function' || !('dataType' in property) || property.dataType !== \"string\") {\n console.error(\"Column property not found or not a string. Property:\", property);\n setSaving(false);\n return;\n }\n\n // Now we know property is a StringProperty\n const stringProperty = property as { dataType: \"string\"; enumValues?: any; name?: string };\n\n // Create new enum value\n const newId = toSnakeCase(newValueLabel.trim());\n const newEnumValue = {\n id: newId,\n label: newValueLabel.trim()\n };\n\n // Get existing enum values from the resolved property (current runtime values)\n // Use currentEnumValues which is already computed from resolvedCollection\n const existingEnumValues = currentEnumValues.map(ev => ({\n id: ev.id,\n label: ev.label\n }));\n\n // Add new enum value\n const updatedEnumValues = [...existingEnumValues, newEnumValue];\n\n // Build the property to save\n // If it's code-defined, we create a minimal override with just enumValues\n const updatedProperty = isCodeDefinedProperty\n ? {\n dataType: \"string\" as const,\n name: stringProperty.name || columnProperty,\n enumValues: updatedEnumValues\n }\n : {\n ...property,\n enumValues: updatedEnumValues\n };\n\n // Save the updated property\n await configController.saveProperty({\n path: fullPath,\n propertyKey: columnProperty,\n property: updatedProperty as any,\n parentCollectionIds\n });\n\n setNewValueLabel(\"\");\n setDialogOpen(false);\n } catch (error) {\n console.error(\"Error adding new column:\", error);\n } finally {\n setSaving(false);\n }\n }, [newValueLabel, configController, collection, columnProperty, fullPath, parentCollectionIds]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && newValueLabel.trim()) {\n handleAddColumn();\n }\n };\n\n return (\n <>\n <div\n className={cls(\n \"border h-full w-80 min-w-80 mx-2 flex flex-col items-center justify-center rounded-md\",\n \"bg-surface-50 dark:bg-surface-950 hover:bg-surface-100 dark:hover:bg-surface-900\",\n \"cursor-pointer transition-colors duration-200 ease-in-out\",\n defaultBorderMixin\n )}\n onClick={() => setDialogOpen(true)}\n >\n <IconButton size=\"large\" className=\"opacity-60 hover:opacity-100\">\n <AddIcon size=\"large\" />\n </IconButton>\n <Typography variant=\"caption\" color=\"secondary\" className=\"mt-2\">\n Add Column\n </Typography>\n </div>\n\n <Dialog open={dialogOpen} onOpenChange={setDialogOpen}>\n <DialogContent className=\"max-w-md\">\n <Typography variant=\"h6\" className=\"mb-4\">\n Add New Column\n </Typography>\n <Typography variant=\"body2\" color=\"secondary\" className=\"mb-4\">\n Add a new option to the \"{columnProperty}\" property.\n This will create a new column in the Kanban board.\n </Typography>\n <TextField\n label=\"Column Name\"\n value={newValueLabel}\n onChange={(e) => setNewValueLabel(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus\n disabled={saving}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n onClick={() => setDialogOpen(false)}\n disabled={saving}\n >\n Cancel\n </Button>\n <Button\n onClick={handleAddColumn}\n disabled={saving || !newValueLabel.trim()}\n >\n {saving ? \"Adding...\" : \"Add Column\"}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n}\n","import React from \"react\";\nimport { FireCMSPlugin, useAuthController, useNavigationController, User } from \"@firecms/core\";\nimport { ConfigControllerProvider } from \"./ConfigControllerProvider\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { EditorCollectionAction } from \"./ui/EditorCollectionAction\";\nimport { HomePageEditorCollectionAction } from \"./ui/HomePageEditorCollectionAction\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { CollectionGenerationCallback } from \"./api/generateCollectionApi\";\nimport { CollectionViewHeaderAction } from \"./ui/CollectionViewHeaderAction\";\nimport { PropertyAddColumnComponent } from \"./ui/PropertyAddColumnComponent\";\nimport { NewCollectionButton } from \"./ui/NewCollectionButton\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"./useCollectionEditorController\";\nimport { EditorCollectionActionStart } from \"./ui/EditorCollectionActionStart\";\nimport { NewCollectionCard } from \"./ui/NewCollectionCard\";\nimport { EditorEntityAction } from \"./ui/EditorEntityAction\";\nimport { KanbanSetupAction } from \"./ui/KanbanSetupAction\";\nimport { AddKanbanColumnAction } from \"./ui/AddKanbanColumnAction\";\n\nexport interface CollectionConfigControllerProps<EC extends PersistedCollection = PersistedCollection, USER extends User = User> {\n\n /**\n * Firebase app where the configuration is saved.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Define what actions can be performed on the configuration.\n */\n configPermissions?: CollectionEditorPermissionsBuilder<USER, EC>;\n\n /**\n * The words you define here will not be allowed to be used as group\n * names when creating collections.\n * e.g. [\"admin\"]\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n collectionInference?: CollectionInference;\n\n pathSuggestions?: string[];\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n getUser?: (uid: string) => USER | null;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n includeIntroView?: boolean;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n\n}\n\n/**\n * Use this hook to initialise the Collection Editor plugin.\n * This is likely the only hook you will need to use.\n * @param firebaseApp Firebase app where your project data lives.\n * @param configPermissions\n * @param reservedGroups\n * @param extraView\n * @param getData\n * @param getUser\n * @param collectionInference\n */\nexport function useCollectionEditorPlugin<EC extends PersistedCollection = PersistedCollection, USER extends User = User>\n ({\n collectionConfigController,\n configPermissions,\n reservedGroups,\n extraView,\n getUser,\n collectionInference,\n getData,\n onAnalyticsEvent,\n includeIntroView = true,\n pathSuggestions,\n generateCollection\n }: CollectionConfigControllerProps<EC, USER>): FireCMSPlugin<any, any, PersistedCollection> {\n\n return {\n key: \"collection_editor\",\n loading: collectionConfigController.loading,\n provider: {\n Component: ConfigControllerProvider,\n props: {\n collectionConfigController,\n configPermissions,\n collectionInference,\n reservedGroups,\n extraView,\n getUser,\n getData,\n onAnalyticsEvent,\n pathSuggestions,\n generateCollection\n }\n },\n homePage: {\n additionalActions: <NewCollectionButton />,\n additionalChildrenStart: includeIntroView ? <IntroWidget /> : undefined,\n CollectionActions: HomePageEditorCollectionAction,\n AdditionalCards: NewCollectionCard,\n allowDragAndDrop: true,\n navigationEntries: collectionConfigController.navigationEntries,\n onNavigationEntriesUpdate: collectionConfigController.saveNavigationEntries,\n },\n collectionView: {\n CollectionActionsStart: EditorCollectionActionStart,\n CollectionActions: EditorCollectionAction,\n HeaderAction: CollectionViewHeaderAction,\n AddColumnComponent: PropertyAddColumnComponent,\n onColumnsReorder: collectionConfigController.updatePropertiesOrder,\n onKanbanColumnsReorder: collectionConfigController.updateKanbanColumnsOrder,\n KanbanSetupComponent: KanbanSetupAction,\n AddKanbanColumnComponent: AddKanbanColumnAction\n },\n form: {\n ActionsTop: EditorEntityAction,\n }\n };\n}\n\nexport function IntroWidget() {\n\n const navigation = useNavigationController();\n if (!navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n if (!navigation.initialised || (navigation.collections ?? []).length > 0) {\n return null;\n }\n\n return (\n <Paper\n className={\"my-4 px-4 py-6 flex flex-col bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>No collections found</Typography>\n <Typography>\n Start building collections in FireCMS easily. Map them to your existing\n database data, import from files, or use our templates.\n </Typography>\n {canCreateCollections && <Button\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n <AddIcon />Create your first collection\n </Button>}\n <Typography color={\"secondary\"}>\n You can also define collections programmatically.\n </Typography>\n </Paper>\n );\n}\n","import {\n EntityCollection,\n joinCollectionLists,\n makePropertiesEditable,\n ModifyCollectionProps,\n Properties\n} from \"@firecms/core\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\n/**\n * Function in charge of merging collections defined in code with those stored in the backend.\n */\nexport const mergeCollections = (baseCollections: EntityCollection[],\n backendCollections: PersistedCollection[] = [],\n modifyCollection?: (props: ModifyCollectionProps) => EntityCollection | void\n) => {\n\n const markAsEditable = (c: PersistedCollection) => {\n makePropertiesEditable(c.properties as Properties);\n c.subcollections?.forEach(markAsEditable);\n };\n\n backendCollections.forEach(markAsEditable);\n\n const result = joinCollectionLists(baseCollections, backendCollections, [], modifyCollection);\n\n // sort the collections so they are in the same order as the base collections\n result.sort((a, b) => {\n const indexA = baseCollections.findIndex(c => c.id === a.id);\n const indexB = baseCollections.findIndex(c => c.id === b.id);\n\n if (indexA === -1 && indexB === -1) {\n return 0; // Keep original order for items not in baseCollections\n }\n if (indexA === -1) {\n return 1; // a is not in base, so it goes to the end\n }\n if (indexB === -1) {\n return -1; // b is not in base, so it goes to the end\n }\n return indexA - indexB;\n });\n\n return result;\n}\n","import { ErrorView, prettifyIdentifier, useNavigationController } from \"@firecms/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@firecms/ui\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const navigation = useNavigationController();\n const path = getLastSegment(pathProp);\n const parentCollectionIds = navigation.getParentCollectionIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={\"No collection for path: \" + path}/>\n <Button className={\"mx-2\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path, name: prettifyIdentifier(path) },\n parentCollectionIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n Create\n </Button>\n </div>;\n}\n\nfunction getParentPathSegments(path: string): string[] {\n const segments = path.split(\"/\");\n return segments.filter((segment, index) => index % 2 === 0 && index !== segments.length - 1);\n}\n\nfunction getLastSegment(path: string): string {\n const segments = path.split(\"/\");\n return segments[segments.length - 1];\n}\n"],"names":["YupSchema","Yup","object","shape","id","string","required","name","path","GeneralSettingsForm","t0","$","_c","isNewCollection","parentCollection","values","setFieldValue","handleChange","touched","errors","setFieldTouched","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","useAuthController","useCustomizationController","t1","databaseId","undefined","updateDatabaseId","t2","pathTouched","getIn","toSnakeCase","idTouched","singularNameTouched","singular","updateName","t3","collectionIcon","isSubcollection","showErrors","t4","t5","t6","t7","t8","Symbol","for","t9","t10","t11","t12","t13","t14","e","target","value","t15","Boolean","t16","t17","t18","t19","t20","t21","cls","t22","t23","DebouncedTextField","t24","t25","t26","t27","t28","singularName","t29","e_0","t30","t31","t32","t33","t34","t35","t36","description","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","v","t51","collectionGroup","t52","t53","t54","t55","t56","t57","history","t58","v_0","t59","t60","t61","t62","t63","customId","t64","v_1","Error","t65","t66","t67","t68","t69","_temp","t70","t71","t72","v_2","t73","textSearchEnabled","t74","t75","t76","t77","t78","height","t79","icon","t80","t81","t82","t83","DefaultDatabaseField","onDatabaseIdUpdate","LayoutModeSwitch","onChange","className","label","ViewModeSwitch","EnumForm","enumValues","onValuesChanged","onError","updateIds","disabled","allowDataInference","getData","forEach","enumValue","index","hasError","Object","keys","length","initialValues","validateOnChange","validation","formex","useCreateFormex","values_0","errors_0","useEffect","EnumFormFields","enumValuesPath","shouldUpdateId","lastInternalIdAdded","setLastInternalIdAdded","React","editDialogIndex","setEditDialogIndex","inferring","setInferring","Set","inferredValuesRef","useRef","inferredValues","current","internalId","justAdded","entryError","has","buildEntry","console","warn","then","data","flatData","flat","fieldData","Array","from","currentEnumValues","foundEnumValues","extractEnumFromValues","newEnumValues","filter","some","enumValue_0","add","catch","finally","inferValues","error","EnumEntry","memo","EnumEntryInternal","updateId","autoFocus","onDialogOpen","inferredEntry","shouldUpdateIdRef","idValue","labelValue","currentLabelRef","colorValue","getColorSchemeForKey","getColorSchemeForSeed","String","colorScheme","color","backgroundColor","areEqual","prevProps","nextProps","equal","EnumEntryDialog","open","onClose","idError","open_0","SwitchControl","field","form","tooltip","size","allowIndeterminate","checked","formControlLabel","GeneralPropertyValidation","validationRequired","validationUnique","field_0","form_0","validationRequiredMessage","StringPropertyValidation","lowercase","matches","max","min","trim","uppercase","matchesError","matchesValue","serializeRegExp","matchesStringValue","validationLowercase","validationUppercase","validationTrim","field_1","form_1","validationLength","validationMin","validationMax","validationMatches","ArrayPropertyValidation","ValidationPanel","children","EnumPropertyField","multiselect","propertyNamespace","setFieldError","snackbarContext","useSnackbarController","defaultValue","valuesEnumValues","useMemo","resolveEnumValues","enumIds","map","includes","type","message","fullPropertyPath","res","entry","toString","fileTypes","StoragePropertyField","multiple","existing","baseStoragePath","acceptedFiles","fileName","maxSize","storagePath","storeUrl","includeBucketUrl","imageResize","imageResizeMaxWidth","imageResizeMaxHeight","imageResizeMode","imageResizeFormat","imageResizeQuality","fileNameValue","storagePathValue","T0","T1","maxSizeValue","imageResizeMaxWidthValue","imageResizeMaxHeightValue","imageResizeModeValue","imageResizeFormatValue","imageResizeQualityValue","storedValue","fileTypesValue","isArray","allFileTypesSelected","handleTypesChange","hasFilenameCallback","hasStoragePathCallback","ExpandablePanel","entries","value_0","preventDefault","stopPropagation","_temp3","value_1","parseInt","e_1","value_2","e_2","value_3","value_4","_temp4","value_5","_temp5","e_3","value_6","numValue","selected_1","selected","charAt","toUpperCase","slice","selected_0","_temp2","join","editableProperty","property","isPropertyBuilder","dataType","of","editable","removeNonEditableProperties","properties","_","key","propertyOrBuilder","reduce","a","b","PropertyFieldPreview","onClick","includeName","includeEditButton","propertyConfigs","getFieldConfig","propertyConfig","borderColorClass","cardClickableMixin","cardSelectedMixin","cardMixin","NonEditablePropertyPreview","idToPropertiesPath","replaceAll","namespaceToPropertiesPath","namespace","namespaceToPropertiesOrderPath","getFullId","propertyKey","getFullIdPath","keyWithNamespace","AIModifiedPathsContext","createContext","AIModifiedPathsProvider","modifiedPaths","setModifiedPaths","generationCounter","setGenerationCounter","operations","prev","newSet","op","parts","split","addModifiedPaths","prev_1","newSet_0","p","startsWith","delete","clearPath","clearAllPaths","path_0","p_0","isPathModified","prev_0","useAIModifiedPaths","useContext","PropertyTree","selectedPropertyKey","onPropertyClick","propertiesOrder","propertiesOrderProp","additionalFields","onPropertyMove","onPropertyRemove","inferredPropertyKeys","collectionEditable","propertyKeys","filteredOrder","missingKeys","key_0","activationConstraint","distance","coordinateGetter","sortableKeyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","handleDragEnd","event","active","over","activeId","overId","activeKey","pop","overKey","oldIndex","indexOf","newIndex","newPropertiesOrder","removed","splice","items","key_1","DndContext","closestCenter","restrictToVerticalAxis","SortableContext","verticalListSortingStrategy","additionalField","find","PropertyTreeEntry","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Translate","zIndex","position","style","isPropertyInferred","fullId","fullIdPath","subtree","aiModifiedPaths","isAIModified","defaultBorderMixin","left","top","bottom","currentIndex","newOrder","k","unshift","currentIndex_0","newOrder_0","k_0","push","MapPropertyField","propertyDialogOpen","setPropertyDialogOpen","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","currentPropertiesOrder","onPropertyCreated","propertiesPath","propertiesOrderPath","currentPropertiesOrder_0","deleteProperty","selectedPropertyFullId","selectedProperty","empty","propertiesOrder_0","namespace_0","propertyKey_0","namespace_1","spreadChildren","RepeatPropertyField","ofProperty","ofPropertyError","onPropertyChanged","widget","CommonPropertyFields","forwardRef","ref","disabledId","autoUpdateId","nameError","descriptionError","newNameValue","fontSize","newIdValue","nameTouched","prettifyIdentifier","StringPropertyField","widgetId","BooleanPropertyField","BlockPropertyField","oneOf","addChildButton","namespace_2","NumberPropertyValidation","validationLessThan","validationMoreThan","validationPositive","validationNegative","validationInteger","NumberPropertyField","parseFloat","ReferencePropertyField","asString","navigation","useNavigationController","pathPath","pathValue","pathError","CollectionsSelect","props","collections","groups","ungroupedCollections","selectedCollection","collection","flatMap","group","collection_0","collection_1","collection_2","col","TIMEZONES","DateTimePropertyField","modeValue","modeError","autoValueValue","autoValueError","timezoneValue","timezoneError","modePath","autoValuePath","v_3","timezonePath","tz_0","tz","v_4","t","AdvancedPropertyValidation","hideFromCollection","readOnly","ConditionsPanel","getPropertyPaths","prefix","paths","fullPath","nestedPaths","ofPropertyOrBuilder","CONDITION_TYPES","OPERATORS","valueType","applicableTo","CONTEXT_FIELDS","getPropertyAtPath","fieldPath","collectionProperties","part","getFieldDataType","contextField","f","getEnumValues","getOperatorsForDataType","applicable","ConditionValueInput","operator","newValue","ev","ConditionRow","rule","onRuleChange","onRemove","availableFields","showRemoveButton","fieldDataType","showValueField","applicableOperators","isFieldMissing","isValueMissing","prop","config","DEFAULT_FIELD_CONFIGS","getFieldColor","newDataType","newApplicableOps","newOperator","op_0","prop_0","hasEnum","Select","op_1","ConditionGroupRow","conditionType","onGroupChange","logic","handleLogicChange","newRules","rules","handleRuleChange","index_0","newRules_0","i","handleRemoveRule","defaultRule","handleAddRule","ct","rule_0","index_1","newRule","simpleRuleToJsonLogic","var","varRef","fieldVar","parsedValue","isNaN","Number","s","jsonLogicToSimpleRule","jsonLogic","args","inArgs","in","right","replace","varObj","groupToJsonLogic","ruleLogics","groupLogics","g","allLogics","jsonLogicToGroup","arg","nestedOperator","nestedGroup","ConditionsEditor","conditions","log","activeConditions","defaultGroup","jsonLogic_0","handleAddCondition","type_0","group_0","jsonLogic_1","handleGroupChange","type_1","newConditions","handleRemoveCondition","availableConditionTypes","type_2","group_1","newGroup","ct_0","ENUM_CONDITION_TYPES","getCurrentPropertyEnumValues","getFieldEnumValues","arrayToObject","arr","result","buildEnumFilterRule","allEnumIds","condition","selectedEnumIds","objectToArray","obj","every","sort","parseEnumFilterRule","ifRule","selectedEnumIdsRaw","conditionObj","EnumConditionRow","onConfigChange","propertyEnumValues","selectedFieldProperty","isBoolean","fieldEnumValues","isEnumSelectionMissing","ev_0","EnumConditionsEditor","bb0","defaultConfig","config_0","rule_1","handleConfigChange","config_1","newConfig","_temp6","KeyValuePropertyField","updatePropertyFromWidget","propertyData","selectedWidgetId","updatedProperty","mergeDeep","storage","multiline","markdown","email","url","userSelect","keyValue","mode","UrlPropertyField","urlValue","supportedFieldsIds","supportedFields","MarkdownPropertyField","markdownValue","isMarkdownObject","htmlValue","html","transformPastedTextValue","transformPastedText","currentMarkdown","updateMarkdownConfig","PropertyForm","includeIdAndName","autoOpenTypeSelect","existingProperty","inArray","existingPropertyKeys","onPropertyChangedImmediate","onDismiss","onDelete","initialErrors","forceShowErrors","getController","initialValue","previousId","lastSubmittedProperty","property_0","params","doOnPropertyChanged","newPropertyWithId","controller","id_0","property_1","resetForm","validateName","keysToCheck","validateId","isValidRegExp","conditionErrors","conditionTypes","isIncompleteRule","ruleStr","JSON","stringify","enumType","if","debugId","validateOnInitialRender","onSubmit","formexController","PropertyFormDialog","formProps","onCancel","onOkClicked","formexRef","helpers","handleSubmit","PropertyEditFormFields","setValues","includeIdAndTitle","selectOpen","setSelectOpen","deleteDialogOpen","setDeleteDialogOpen","getFieldId","selectedFieldConfigId","setSelectedFieldConfigId","deferredValues","useDeferredValue","nameFieldRef","selectedWidgetError","newSelectedWidgetId","setTimeout","focus","onWidgetSelectChanged","childComponent","hasValue","idRegEx","match","WIDGET_TYPE_MAP","text_field","switch","user_select","select","multi_select","number_input","number_select","multi_number_select","file_upload","multi_file_upload","reference","reference_as_string","multi_references","date_time","key_value","repeat","custom_array","block","WidgetSelectView","initialProperty","onValueChange","onOpenChange","allSupportedFields","concat","displayedWidgets","propertyConfig_1","baseProperty","baseFieldConfig","computedFieldConfig","fieldBackgroundDisabledMixin","fieldBackgroundHoverMixin","fieldBackgroundMixin","Dialog","DialogContent","key_2","propertyConfig_2","groupKey","propertyConfig_0","WidgetSelectViewItem","shouldWarnChangingDataType","KanbanConfigSection","forceExpanded","authController","customizationController","panelRef","columnPropertyDialogOpen","setColumnPropertyDialogOpen","resolvedCollection","resolveCollection","enumStringProperties","kanbanConfig","kanban","columnPropertyMissing","columnProperty","scrollIntoView","behavior","showCreateButton","dialogPropertyKey","dialogPropertyName","unslugify","fieldConfig","newProperties","DisplaySettingsForm","expandKanban","orderPropertyDialogOpen","setOrderPropertyDialogOpen","numberProperties","openEntityMode","defaultViewMode","orderPropertyMissing","orderProperty","defaultSize","sideDialogWidth","inlineEditing","includeJsonView","camelCase","str","toLowerCase","substring","GetCodeDialog","snackbarController","format","setFormat","tsCode","collectionData","collectionToCode","JSON5","jsonCode","code","themes","vsDark","navigator","clipboard","writeText","tokens","getLineProps","getTokenProps","line","token","propertyCleanup","valueCopy","clone","isEmptyObject","childRes","fromBuilder","resolved","resolvedProperties","initialFilter","initialSort","subcollections","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","reservedGroups","extraIcon","getUser","doCollectionInference","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","debug","newCollection","makePropertiesEditable","findNewPropertyKeys","existingProps","newProps","fullKey","existingProp","newProp","existingMapProps","addNewPropertiesOnly","updatedProperties","allNewPropertyKeys","newTopLevelPropertyKeys","allExistingKeys","updatedPropertiesOrder","updatePropertiesOrder","getCurrentPropertiesOrder","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","closePropertyDialog","emptyCollection","usedPropertiesOrder","owner","ownerId","body","displayName","UnsavedChangesDialog","handleOk","handleCancel","title","EntityCustomViewsSelectDialog","entityViews","view","SubcollectionsEditTab","configController","collectionInference","parentCollectionIds","embedded","contextEntityViews","subcollectionToDelete","setSubcollectionToDelete","addEntityViewDialogOpen","setAddEntityViewDialogOpen","viewToDelete","setViewToDelete","currentDialog","setCurrentDialog","setSubcollections","T2","resolvedEntityViews","resolveEntityView","hardCodedEntityViews","totalEntityViews","subcollection","editedCollectionId","Paper","Table","TableBody","content","deleteCollection","e_4","e_5","updatedCollection","selectedViewKey","e_6","view_0","EntityActionsSelectDialog","entityActions","action","EntityActionsEditTab","contextEntityActions","addEntityActionDialogOpen","setAddEntityActionDialogOpen","actionToDelete","setActionToDelete","resolvedEntityActions","resolveEntityAction","hardCodedEntityActions","totalEntityActions","selectedActionKey","action_1","action_0","ExtendSettingsForm","isMergedCollection","onResetToCode","VALID_DATA_TYPES","validateProperty","ofProp","validateProperties","validateOptionalFields","stringFields","booleanFields","item","sub","subErrors","validateCollectionObject","err","validViewModes","validateCollectionJson","jsonString","parsed","parse","lines","column","valid","EXAMPLE_JSON","CollectionJsonImportDialog","onImport","jsonValue","setJsonValue","setErrors","setTouched","handleJsonChange","result_0","handleImport","handleClose","isValid","productsCollectionTemplate","brand","main_image","available","columnWidth","price","requiredMessage","images","related_products","metadata","added_on","autoValue","blogCollectionTemplate","header_image","cacheControl","typeField","valueField","text","quote","products","previewProperties","created_on","status","published","draft","publish_date","clearable","reviewed","tags","previewAsTag","usersCollectionTemplate","emailVerified","phone","favourite_products","photoURL","pagesCollectionTemplate","slug","unique","matchesMessage","hero_section","headline","subhead","background_image","call_to_action","call_to_action_link","section","image","link","slider","sidebar","seo_metadata","meta_title","meta_description","focus_keywords","footer_override","last_updated","is_published","useCollectionEditorController","CollectionEditorContext","CollectionGenerationApiError","constructor","DEFAULT_COLLECTION_GENERATION_ENDPOINT","buildCollectionGenerationCallback","getAuthToken","apiEndpoint","request","response","fetch","method","headers","Authorization","ok","errorData","json","AICollectionGeneratorPopover","existingCollection","onGenerated","generateCollection","trigger","showLabel","menuOpen","setMenuOpen","prompt","setPrompt","loading","setLoading","setError","existingCollections","handleGenerate","collectionsContext","c","errorMessage","handleKeyDown","shiftKey","defaultTrigger","CollectionEditorWelcomeView","onContinue","existingCollectionPaths","pathSuggestions","filteredSuggestions","jsonImportOpen","setJsonImportOpen","Container","suggestion","generatedCollection","TemplateButton","subtitle","CollectionEditorImportMapping","importConfig","setSelectedProperty","newPropertiesOrder_0","newHeadersMapping","headersMapping","setHeadersMapping","importData","importKey","fullId_0","propertyPath_0","d","inferredNewProperty","buildPropertyFromData","getInferenceType","onPropertyTypeChanged","property_2","importKey_0","isIdColumn","propertyKey_1","PropertySelect","fieldId","newProperty","widget_0","PropertySelectItem","optionDisabled","CollectionEditorImportDataPreview","loadEntities","mappedData","convertDataToEntity","idColumn","defaultValues","setEntities","selectionController","useSelectionController","entities","dataLoading","noMoreToLoad","cleanPropertiesFromImport","parentSlug","acc","slugify","fullSlug","slugifiedResult","firstKey","CollectionEditorDialog","formDirty","setFormDirty","unsavedChangesDialogOpen","setUnsavedChangesDialogOpen","CollectionEditor","topLevelNavigation","initialValuesProp","copyFromProp","copyFrom","includeTemplates","collectionsInThisLevel","existingPaths","existingIds","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialised","getCollectionFromPaths","initialCollection","randomString","applyPropertyConfigs","user","uid","coolIconKeys","Math","floor","random","CollectionEditorInternal","extraView","existingEntities","initialView","initialViewProp","useImportConfig","currentView","setCurrentView","saveCollection","setNextMode","inUse","parentPaths","inferCollectionFromData","Promise","resolve","inferredCollection","newCollectionState","schema","validateSync","abortEarly","inner","validatePath","formController","isSubmitting","updatedFullPath","convertIdsToPaths","resolvedPath","resolveIdsFrom","getDataWithPath","existingData","onImportDataSet","setInUse","buildEntityPropertiesFromData","setIdColumn","setImportData","filteredHeadingsOrder","setHeadingsOrder","setOriginProperties","mappedHeadings","validValues","onImportMappingComplete","merged","deleteRequested","setDeleteRequested","onWelcomeScreenContinue","handleAIGenerated","View","importedCollection","removeUndefined","validate","rest","propertiesResult","applyPropertiesConfig","internalProperty","subpaths","removeInitialAndTrailingSlashes","ConfigControllerContext","ConfigControllerProvider","collectionConfigController","configPermissions","onAnalyticsEvent","navigate","useNavigate","currentPropertyDialog","setCurrentPropertyDialog","defaultConfigPermissions","redirect","editCollection","parentCollectionIds_0","existingEntities_0","lastIndexOf","propertyKeyWithoutNamespace","editProperty","parentCollectionIds_1","parentCollection_0","sourceClick","createCollection","buildUrlCollectionPath","fetchedData","saveProperty","createCollections","editCollections","deleteCollections","EditorCollectionAction","tableController","navigationController","collectionEditorController","getCollectionFromIds","canEditCollection","editorButton","useCollectionsConfigController","HomePageEditorCollectionAction","permissions","onEditCollectionClicked","onDuplicateCollectionClicked","event_0","event_1","CollectionViewHeaderAction","onHover","PropertyAddColumnComponent","getDefaultPropertiesOrder","NewCollectionButton","EditorCollectionActionStart","saveDefaultFilterButton","getObjectOrNull","filterValues","sortBy","clearFilter","setFilterValues","setSortBy","o","NewCollectionCard","context","canCreateCollections","EditorEntityAction","formContext","isDirty","KanbanSetupAction","handleConfigureClick","AddKanbanColumnAction","dialogOpen","setDialogOpen","newValueLabel","setNewValueLabel","saving","setSaving","getPropertyInPath","stringProperty","handleAddColumn","useCallback","isCodeDefinedProperty","newId","newEnumValue","existingEnumValues","updatedEnumValues","useCollectionEditorPlugin","includeIntroView","Component","navigationEntries","saveNavigationEntries","additionalActions","additionalChildrenStart","CollectionActions","AdditionalCards","allowDragAndDrop","onNavigationEntriesUpdate","updateKanbanColumnsOrder","CollectionActionsStart","HeaderAction","AddColumnComponent","onColumnsReorder","onKanbanColumnsReorder","KanbanSetupComponent","AddKanbanColumnComponent","ActionsTop","provider","homePage","collectionView","IntroWidget","mergeCollections","baseCollections","backendCollections","modifyCollection","markAsEditable","joinCollectionLists","indexA","findIndex","indexB","MissingReferenceWidget","pathProp","getLastSegment","getParentCollectionIds","collectionEditor","segments"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/ui/collection_editor/CollectionYupValidation.tsx","../src/ui/collection_editor/GeneralSettingsForm.tsx","../src/ui/collection_editor/LayoutModeSwitch.tsx","../src/ui/collection_editor/ViewModeSwitch.tsx","../src/ui/collection_editor/EnumForm.tsx","../src/ui/collection_editor/SwitchControl.tsx","../src/ui/collection_editor/properties/validation/GeneralPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/StringPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ArrayPropertyValidation.tsx","../src/ui/collection_editor/properties/validation/ValidationPanel.tsx","../src/ui/collection_editor/properties/EnumPropertyField.tsx","../src/ui/collection_editor/properties/StoragePropertyField.tsx","../src/utils/entities.ts","../src/ui/collection_editor/PropertyFieldPreview.tsx","../src/ui/collection_editor/util.ts","../src/ui/collection_editor/AIModifiedPathsContext.tsx","../src/ui/collection_editor/PropertyTree.tsx","../src/ui/collection_editor/properties/MapPropertyField.tsx","../src/ui/collection_editor/properties/RepeatPropertyField.tsx","../src/ui/collection_editor/properties/CommonPropertyFields.tsx","../src/ui/collection_editor/properties/StringPropertyField.tsx","../src/ui/collection_editor/properties/BooleanPropertyField.tsx","../src/ui/collection_editor/properties/BlockPropertyField.tsx","../src/ui/collection_editor/properties/validation/NumberPropertyValidation.tsx","../src/ui/collection_editor/properties/NumberPropertyField.tsx","../src/ui/collection_editor/properties/ReferencePropertyField.tsx","../src/ui/collection_editor/properties/DateTimePropertyField.tsx","../src/ui/collection_editor/properties/advanced/AdvancedPropertyValidation.tsx","../src/ui/collection_editor/properties/conditions/ConditionsPanel.tsx","../src/ui/collection_editor/properties/conditions/property_paths.ts","../src/ui/collection_editor/properties/conditions/ConditionsEditor.tsx","../src/ui/collection_editor/properties/conditions/EnumConditionsEditor.tsx","../src/ui/collection_editor/properties/KeyValuePropertyField.tsx","../src/ui/collection_editor/utils/update_property_for_widget.ts","../src/ui/collection_editor/properties/UrlPropertyField.tsx","../src/ui/collection_editor/utils/supported_fields.tsx","../src/ui/collection_editor/properties/MarkdownPropertyField.tsx","../src/ui/collection_editor/PropertyEditView.tsx","../src/ui/collection_editor/KanbanConfigSection.tsx","../src/ui/collection_editor/DisplaySettingsForm.tsx","../src/ui/collection_editor/utils/strings.ts","../src/ui/collection_editor/GetCodeDialog.tsx","../src/ui/collection_editor/CollectionPropertiesEditorForm.tsx","../src/ui/collection_editor/UnsavedChangesDialog.tsx","../src/ui/collection_editor/EntityCustomViewsSelectDialog.tsx","../src/ui/collection_editor/SubcollectionsEditTab.tsx","../src/ui/collection_editor/EntityActionsSelectDialog.tsx","../src/ui/collection_editor/EntityActionsEditTab.tsx","../src/ui/collection_editor/ExtendSettingsForm.tsx","../src/utils/validateCollectionJson.ts","../src/ui/collection_editor/CollectionJsonImportDialog.tsx","../src/ui/collection_editor/templates/products_template.ts","../src/ui/collection_editor/templates/blog_template.ts","../src/ui/collection_editor/templates/users_template.ts","../src/ui/collection_editor/templates/pages_template.ts","../src/useCollectionEditorController.tsx","../src/api/generateCollectionApi.ts","../src/ui/collection_editor/AICollectionGeneratorPopover.tsx","../src/ui/collection_editor/CollectionEditorWelcomeView.tsx","../src/ui/collection_editor/import/CollectionEditorImportMapping.tsx","../src/ui/collection_editor/import/CollectionEditorImportDataPreview.tsx","../src/ui/collection_editor/import/clean_import_data.ts","../src/ui/collection_editor/CollectionEditorDialog.tsx","../src/ConfigControllerProvider.tsx","../src/ui/EditorCollectionAction.tsx","../src/useCollectionsConfigController.tsx","../src/ui/HomePageEditorCollectionAction.tsx","../src/ui/CollectionViewHeaderAction.tsx","../src/ui/PropertyAddColumnComponent.tsx","../src/ui/NewCollectionButton.tsx","../src/ui/EditorCollectionActionStart.tsx","../src/ui/NewCollectionCard.tsx","../src/ui/EditorEntityAction.tsx","../src/ui/KanbanSetupAction.tsx","../src/ui/AddKanbanColumnAction.tsx","../src/useCollectionEditorPlugin.tsx","../src/utils/collections.ts","../src/ui/MissingReferenceWidget.tsx"],"sourcesContent":["import * as Yup from \"yup\";\n\nexport const YupSchema = Yup.object().shape({\n id: Yup.string().required(\"Required\"),\n name: Yup.string().required(\"Required\"),\n path: Yup.string().required(\"Required\")\n});\n","import React, { useState } from \"react\";\nimport {\n EntityCollection,\n FieldCaption,\n IconForView,\n SearchIconsView,\n singular,\n toSnakeCase,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n BooleanSwitchWithLabel,\n Chip,\n cls,\n Container,\n DebouncedTextField,\n Dialog,\n ExpandablePanel,\n HistoryIcon,\n IconButton,\n SearchIcon,\n Select,\n SelectItem,\n TextField,\n Tooltip,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nexport function GeneralSettingsForm({\n isNewCollection,\n existingPaths,\n existingIds,\n parentCollection\n}: {\n isNewCollection: boolean;\n existingPaths?: string[];\n existingIds?: string[];\n parentCollection?: EntityCollection;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n touched,\n errors,\n setFieldTouched,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [iconDialogOpen, setIconDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n\n const updateDatabaseId = (databaseId: string) => {\n setFieldValue(\"databaseId\", databaseId ?? undefined);\n }\n\n const updateName = (name: string) => {\n setFieldValue(\"name\", name);\n\n const pathTouched = getIn(touched, \"path\");\n if (!pathTouched && isNewCollection && name) {\n setFieldValue(\"path\", toSnakeCase(name));\n }\n\n const idTouched = getIn(touched, \"id\");\n if (!idTouched && isNewCollection && name) {\n setFieldValue(\"id\", toSnakeCase(name));\n }\n\n const singularNameTouched = getIn(touched, \"singularName\");\n if (!singularNameTouched && isNewCollection && name) {\n setFieldValue(\"singularName\", singular(name));\n }\n };\n\n const collectionIcon = <IconForView collectionOrView={values} />;\n const isSubcollection = !!parentCollection;\n const showErrors = submitCount > 0;\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <div className=\"flex flex-row gap-2 py-2 pt-3 items-center\">\n <Typography variant={!isNewCollection ? \"h5\" : \"h4\"} className={\"flex-grow\"}>\n {isNewCollection ? \"New collection\" : `${values?.name} collection`}\n </Typography>\n <DefaultDatabaseField databaseId={values.databaseId}\n onDatabaseIdUpdate={updateDatabaseId} />\n\n <Tooltip title={\"Change icon\"}\n asChild={true}>\n <IconButton\n shape={\"square\"}\n onClick={() => setIconDialogOpen(true)}>\n {collectionIcon}\n </IconButton>\n </Tooltip>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n </div>\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Name */}\n <div className={\"col-span-12\"}>\n <TextField\n value={values.name ?? \"\"}\n onChange={(e: any) => updateName(e.target.value)}\n label={\"Name\"}\n autoFocus={true}\n required\n error={showErrors && Boolean(errors.name)} />\n <FieldCaption error={touched.name && Boolean(errors.name)}>\n {touched.name && Boolean(errors.name) ? errors.name : \"Name of this collection, usually a plural name (e.g. Products)\"}\n </FieldCaption>\n </div>\n\n {/* Path */}\n <div className={cls(\"col-span-12\")}>\n <Field name={\"path\"}\n as={DebouncedTextField}\n label={\"Path\"}\n required\n error={showErrors && Boolean(errors.path)} />\n\n <FieldCaption error={touched.path && Boolean(errors.path)}>\n {touched.path && Boolean(errors.path)\n ? errors.path\n : isSubcollection ? \"Relative path to the parent (no need to include the parent path)\" : \"Path that this collection is stored in, in the database\"}\n </FieldCaption>\n </div>\n\n {/* Singular Name */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.singularName)}\n name={\"singularName\"}\n aria-describedby={\"singularName-helper\"}\n onChange={(e) => {\n setFieldTouched(\"singularName\", true);\n return handleChange(e);\n }}\n value={values.singularName ?? \"\"}\n label={\"Singular name\"} />\n <FieldCaption error={showErrors && Boolean(errors.singularName)}>\n {showErrors && Boolean(errors.singularName) ? errors.singularName : \"Optionally define a singular name for your entities\"}\n </FieldCaption>\n </div>\n\n {/* Description */}\n <div className={\"col-span-12\"}>\n <TextField\n error={showErrors && Boolean(errors.description)}\n name=\"description\"\n value={values.description ?? \"\"}\n onChange={handleChange}\n multiline\n minRows={2}\n aria-describedby=\"description-helper-text\"\n label=\"Description\"\n />\n <FieldCaption error={showErrors && Boolean(errors.description)}>\n {showErrors && Boolean(errors.description) ? errors.description : \"Description of the collection, you can use markdown\"}\n </FieldCaption>\n </div>\n\n {/* Collection ID */}\n <div className={\"col-span-12\"}>\n <Field name={\"id\"}\n as={DebouncedTextField}\n disabled={!isNewCollection}\n label={\"Collection ID\"}\n error={showErrors && Boolean(errors.id)} />\n <FieldCaption error={touched.id && Boolean(errors.id)}>\n {touched.id && Boolean(errors.id) ? errors.id : \"This ID identifies this collection. Typically the same as the path.\"}\n </FieldCaption>\n </div>\n\n {/* Collection Group */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label=\"Collection group\"\n onValueChange={(v) => setFieldValue(\"collectionGroup\", v)}\n value={values.collectionGroup ?? false}\n />\n <FieldCaption>\n A collection group consists of all collections with the same path. This allows\n you to query over multiple collections at once.\n </FieldCaption>\n </div>\n\n </div>\n\n {/* Advanced Settings */}\n <ExpandablePanel\n title={<Typography variant=\"subtitle2\">Advanced settings</Typography>}\n initiallyExpanded={false}\n className=\"mt-4\"\n innerClassName=\"p-4 flex flex-col gap-4\"\n >\n {/* History revisions */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n allowIndeterminate={true}\n label={<span className=\"flex items-center gap-2\"><HistoryIcon size={\"smallest\"} />{values.history === null || values.history === undefined ? \"Document history revisions enabled if enabled globally\" : (\n values.history ? \"Document history revisions ENABLED\" : \"Document history revisions NOT enabled\"\n )}</span>}\n onValueChange={(v) => setFieldValue(\"history\", v)}\n value={values.history === undefined ? null : values.history}\n />\n <FieldCaption>\n When enabled, each document in this collection will have a history of changes.\n This is useful for auditing purposes. The data is stored in a subcollection of the document\n in your database, called <b>__history</b>.\n </FieldCaption>\n </div>\n\n {/* Document ID generation */}\n <div>\n <Select\n name=\"customId\"\n label=\"Document IDs generation\"\n position={\"item-aligned\"}\n size={\"large\"}\n fullWidth={true}\n disabled={typeof values.customId === \"object\"}\n onValueChange={(v) => {\n if (v === \"code_defined\")\n throw new Error(\"This should not happen\");\n if (v === \"false\") setFieldValue(\"customId\", false);\n else if (v === \"true\") setFieldValue(\"customId\", true);\n else if (v === \"optional\") setFieldValue(\"customId\", \"optional\");\n }}\n value={\n typeof values.customId === \"object\" ? \"code_defined\" :\n values.customId === true ? \"true\" :\n values.customId === \"optional\" ? \"optional\" : \"false\"\n }\n renderValue={(value: any) => {\n if (value === \"code_defined\")\n return \"Code defined\";\n else if (value === \"true\")\n return \"Users must define an ID\";\n else if (value === \"optional\")\n return \"Users can define an ID, but it is not required\";\n else\n return \"Document ID is generated automatically\";\n }}\n >\n <SelectItem value={\"false\"}>\n Document ID is generated automatically\n </SelectItem>\n <SelectItem value={\"true\"}>\n Users must define an ID\n </SelectItem>\n <SelectItem value={\"optional\"}>\n Users can define an ID, but it is not required\n </SelectItem>\n </Select>\n <FieldCaption>\n Configure how document IDs are generated when creating new entities.\n </FieldCaption>\n </div>\n\n {/* Text search */}\n <div>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label={<span className=\"flex items-center gap-2\"><SearchIcon size={\"smallest\"} />Enable text search for this collection</span>}\n onValueChange={(v) => setFieldValue(\"textSearchEnabled\", v)}\n value={values.textSearchEnabled ?? false}\n />\n <FieldCaption>\n Allow text search for this collection. If you have not specified a text search\n delegate, this will use the built-in local text search. This is not recommended\n for large collections, as it may incur in performance and cost issues.\n </FieldCaption>\n </div>\n </ExpandablePanel>\n\n <div style={{ height: \"52px\" }} />\n\n <Dialog\n open={iconDialogOpen}\n onOpenChange={setIconDialogOpen}\n maxWidth={\"xl\"}\n fullWidth\n >\n <div className={\"p-4 overflow-auto min-h-[200px]\"}>\n <SearchIconsView selectedIcon={typeof values.icon === \"string\" ? values.icon : undefined}\n onIconSelected={(icon: string) => {\n setIconDialogOpen(false);\n setFieldValue(\"icon\", icon);\n }} />\n </div>\n </Dialog>\n\n </Container>\n </div>\n );\n}\n\nfunction DefaultDatabaseField({\n databaseId,\n onDatabaseIdUpdate\n}: { databaseId?: string, onDatabaseIdUpdate: (databaseId: string) => void }) {\n\n return <Tooltip title={\"Database ID\"}\n side={\"top\"}\n align={\"start\"}>\n <TextField size={\"small\"}\n invisible={true}\n inputClassName={\"text-end\"}\n value={databaseId ?? \"\"}\n onChange={(e: any) => onDatabaseIdUpdate(e.target.value)}\n placeholder={\"(default)\"}></TextField>\n </Tooltip>\n}\n","import { cls, SquareIcon, ToggleButtonGroup, Typography, VerticalSplitIcon } from \"@firecms/ui\";\n\nexport function LayoutModeSwitch({\n value,\n onChange,\n className\n}: {\n value: \"side_panel\" | \"full_screen\";\n onChange: (value: \"side_panel\" | \"full_screen\") => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Document view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"side_panel\",\n label: \"Side panel\",\n icon: <VerticalSplitIcon />\n },\n {\n value: \"full_screen\",\n label: \"Full screen\",\n icon: <SquareIcon />\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Should documents be opened full screen or in an inline side dialog</Typography>\n </div>\n}\n","import { ViewMode } from \"@firecms/core\";\nimport { AppsIcon, cls, ListIcon, ToggleButtonGroup, Typography, ViewKanbanIcon } from \"@firecms/ui\";\n\nexport function ViewModeSwitch({\n value,\n onChange,\n className\n}: {\n value: ViewMode;\n onChange: (value: ViewMode) => void;\n className?: string;\n}) {\n\n return <div className={cls(className)}>\n <Typography variant={\"label\"} color={\"secondary\"} className={\"ml-3.5\"}>Default collection view</Typography>\n <div className={\"my-2\"}>\n <ToggleButtonGroup\n value={value}\n onValueChange={onChange}\n options={[\n {\n value: \"table\",\n label: \"Table\",\n icon: <ListIcon />\n },\n {\n value: \"cards\",\n label: \"Cards\",\n icon: <AppsIcon />\n },\n {\n value: \"kanban\",\n label: \"Kanban\",\n icon: <ViewKanbanIcon />\n }\n ]}\n />\n </div>\n <Typography variant={\"caption\"} color={\"secondary\"} className={\"ml-3.5\"}>Choose how entities should be displayed by default</Typography>\n </div>\n}\n","import React, { useEffect } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { ArrayContainer, ArrayEntryParams, EnumValueConfig, EnumValues, FieldCaption, } from \"@firecms/core\";\nimport {\n FindInPageIcon,\n Badge,\n Button,\n ChipColorKey,\n CircularProgress,\n ColorPicker,\n DebouncedTextField,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n getColorSchemeForKey,\n getColorSchemeForSeed,\n IconButton,\n ListIcon,\n Paper,\n SettingsIcon,\n Typography\n} from \"@firecms/ui\";\nimport { extractEnumFromValues } from \"@firecms/schema_inference\";\nimport { Field, Formex, getIn, useCreateFormex, useFormex } from \"@firecms/formex\";\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 enumValues: EnumValueConfig[]\n }>({\n initialValues: { enumValues },\n validateOnChange: true,\n validation: (values) => {\n const errors: any = {};\n if (values.enumValues) {\n values.enumValues.forEach((enumValue, index) => {\n if (!enumValue?.label) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].label = \"You must specify a label for this enum value entry\";\n }\n if (!enumValue?.id) {\n errors.enumValues = errors.enumValues ?? [];\n errors.enumValues[index] = errors.enumValues[index] ?? {};\n errors.enumValues[index].id = \"You must specify an ID for this enum value entry\";\n }\n });\n }\n const hasError = Boolean(errors?.enumValues && Object.keys(errors?.enumValues).length > 0);\n onError?.(hasError);\n return errors;\n }\n });\n\n const {\n values,\n errors\n } = formex;\n\n useEffect(() => {\n if (onValuesChanged) {\n onValuesChanged(values.enumValues);\n }\n }, [values.enumValues]);\n\n return <Formex value={formex}>\n <EnumFormFields enumValuesPath={\"enumValues\"}\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 enumValues: EnumValueConfig[]\n };\n errors: any;\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?.enumValues && errors?.enumValues[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.enumValues[index]?.id as string)}\n key={`${internalId}`} />;\n };\n\n const inferValues = async () => {\n if (!getData) {\n console.warn(\"INTERNAL: No getData function provided for data inference\");\n return;\n }\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.enumValues;\n const foundEnumValues = extractEnumFromValues(fieldData);\n\n // add only new enum values\n const newEnumValues = foundEnumValues.filter((enumValue) => {\n return !currentEnumValues?.some((v: any) => v.id === enumValue.id);\n });\n\n newEnumValues.forEach((enumValue) => {\n 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 \n disabled={disabled || inferring}\n variant={\"text\"}\n size={\"small\"}\n onClick={inferValues}>\n {inferring ? <CircularProgress size={\"smallest\"} /> : <FindInPageIcon />}\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.enumValues}\n disabled={disabled}\n size={\"small\"}\n buildEntry={buildEntry}\n onInternalIdAdded={setLastInternalIdAdded}\n canAddElements={true}\n onValueChange={(value) => 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 const colorValue = getIn(values, `${enumValuesPath}[${index}].color`) as ChipColorKey | undefined;\n const colorScheme = colorValue\n ? getColorSchemeForKey(colorValue)\n : idValue\n ? getColorSchemeForSeed(String(idValue))\n : undefined;\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={\"flex-grow\"}\n required\n disabled={disabled}\n size=\"small\"\n autoFocus={autoFocus}\n autoComplete=\"off\"\n endAdornment={inferredEntry && <FindInPageIcon size={\"small\"} />}\n error={Boolean(entryError?.label)} />\n\n {!disabled && <>\n {/* Color indicator - clickable to open settings */}\n <button\n type=\"button\"\n onClick={() => onDialogOpen()}\n className=\"w-5 h-5 rounded-full flex-shrink-0 self-center border border-surface-accent-200 dark:border-surface-accent-700 hover:scale-110 transition-transform cursor-pointer ml-3\"\n style={{\n backgroundColor: colorScheme?.color ?? \"#ccc\"\n }}\n title={colorValue ? `Color: ${colorValue}` : \"Auto color - Click to change\"}\n aria-label=\"Edit enum color\"\n />\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={\"small\"} />\n </IconButton>\n </Badge>\n </>}\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 values,\n setFieldValue\n } = useFormex<EnumValues>();\n\n const idError = index !== undefined ? getIn(errors, `${enumValuesPath}[${index}].id`) : undefined;\n const colorValue = index !== undefined ? getIn(values, `${enumValuesPath}[${index}].color`) as ChipColorKey | undefined : undefined;\n\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 className=\"flex flex-col gap-4\">\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\n <div>\n <Typography variant=\"body2\" className=\"font-medium mb-2\">\n Chip color\n </Typography>\n <ColorPicker\n value={colorValue}\n onChange={(color) => setFieldValue(`${enumValuesPath}[${index}].color`, color)}\n size=\"small\"\n allowClear={true}\n />\n </div>\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 \"@firecms/ui\";\nimport { FormexFieldProps } from \"@firecms/formex\";\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 \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function GeneralPropertyValidation({ disabled }: {\n required?: boolean;\n disabled: boolean;\n}) {\n\n const { values, handleChange } = useFormex();\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={\"Required\"}\n tooltip={\"You won't be able to save this entity if this value is not set\"}\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={\"Unique\"}\n tooltip={\"There cannot be multiple entities with the same value\"}\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)}\n label={\"Required message\"}\n name={validationRequiredMessage}\n size=\"small\"\n onChange={handleChange}/>\n </div>}\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, serializeRegExp } from \"@firecms/core\";\nimport { DebouncedTextField, } from \"@firecms/ui\";\nimport { GeneralPropertyValidation } from \"./GeneralPropertyValidation\";\nimport { SwitchControl } from \"../../SwitchControl\";\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\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);\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={\"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={\"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={\"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)}\n label={\"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)}\n label={\"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)}\n label={\"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={\"Matches regex\"}\n size=\"small\"\n disabled={disabled}\n value={matchesStringValue}\n error={Boolean(matchesError)}/>\n <FieldCaption error={Boolean(matchesError)}>\n {matchesError ? \"Not a valid regexp\" : \"e.g. /^\\\\d+$/ for digits only\"}\n </FieldCaption>\n </div>}\n\n </div>\n );\n\n}\n","import React from \"react\";\n\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\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\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)}\n disabled={disabled}\n label={\"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)}\n disabled={disabled}\n label={\"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 { ExpandablePanel, RuleIcon, Typography } from \"@firecms/ui\";\n\nexport function ValidationPanel({\n children\n }: PropsWithChildren<{}>) {\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 <RuleIcon/>\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 \"@firecms/formex\";\nimport { EnumValueConfig, resolveEnumValues, useSnackbarController } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/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 = useSnackbarController();\n\n const enumValuesPath = multiselect ? \"of.enumValues\" : \"enumValues\";\n\n const defaultValue = getIn(values, \"defaultValue\");\n\n const valuesEnumValues = getIn(values, enumValuesPath);\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: any) => 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)).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 size={\"large\"}\n label={\"Default value\"}\n value={defaultValue ?? \"\"}>\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","import React from \"react\";\nimport {\n Button,\n CloudUploadIcon,\n DebouncedTextField,\n ExpandablePanel,\n MultiSelect,\n MultiSelectItem,\n Select,\n SelectItem,\n Typography\n} from \"@firecms/ui\";\n\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\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\n const baseStoragePath = multiple ? \"of.storage\" : \"storage\";\n const acceptedFiles = `${baseStoragePath}.acceptedFiles`;\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) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\n const maxSizeValue = getIn(values, maxSize);\n\n // Image resize values\n const imageResizeMaxWidthValue = getIn(values, imageResizeMaxWidth);\n const imageResizeMaxHeightValue = getIn(values, imageResizeMaxHeight);\n const imageResizeModeValue = getIn(values, imageResizeMode) ?? \"cover\";\n const imageResizeFormatValue = getIn(values, imageResizeFormat) ?? \"original\";\n const imageResizeQualityValue = getIn(values, imageResizeQuality);\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 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 <CloudUploadIcon/>\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\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) => {\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={\"flex-grow\"}>\n {label}\n </div>\n <Button size={\"small\"}\n variant={\"text\"}\n onClick={(e) => {\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={\"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={\"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={\"Include bucket URL (gs://...) in saved value\"}\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>gs://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={\"Save URL instead of storage path\"}\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={\"Max size (in bytes)\"}\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 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={\"Max width (px)\"}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeMaxWidthValue !== undefined && imageResizeMaxWidthValue !== null ? imageResizeMaxWidthValue.toString() : \"\"}\n onChange={(e) => {\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={\"Max height (px)\"}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeMaxHeightValue !== undefined && imageResizeMaxHeightValue !== null ? imageResizeMaxHeightValue.toString() : \"\"}\n onChange={(e) => {\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={\"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={\"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={\"Quality (0-100)\"}\n size={\"small\"}\n disabled={disabled}\n value={imageResizeQualityValue !== undefined && imageResizeQualityValue !== null ? imageResizeQualityValue.toString() : \"\"}\n onChange={(e) => {\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 { isPropertyBuilder, Properties, PropertiesOrBuilders, Property, PropertyOrBuilder } from \"@firecms/core\";\n\nexport function editableProperty(property: PropertyOrBuilder): boolean {\n if (isPropertyBuilder(property)) {\n return false;\n } else {\n if (property.dataType === \"array\" && typeof property.of === \"function\")\n return false;\n else if (property.dataType === \"array\" && Array.isArray(property.of))\n return false;\n return property.editable === undefined ? true : Boolean(property.editable);\n }\n}\n\nexport function removeNonEditableProperties(properties: PropertiesOrBuilders<any>): Properties {\n return Object.entries(properties)\n .filter(([_, property]) => editableProperty(property))\n .map(([key, propertyOrBuilder]) => {\n const property = propertyOrBuilder as Property;\n if (!editableProperty(property)) {\n return undefined;\n } else if (property.dataType === \"map\" && property.properties) {\n return {\n [key]: {\n ...property,\n properties: removeNonEditableProperties(property.properties as PropertiesOrBuilders)\n }\n };\n } else {\n return { [key]: property };\n }\n })\n .filter((e) => Boolean(e))\n .reduce((a, b) => ({ ...a, ...b }), {}) as Properties;\n}\n","import {\n ErrorBoundary,\n getFieldConfig,\n isPropertyBuilder,\n Property,\n PropertyConfigBadge,\n PropertyOrBuilder,\n useCustomizationController,\n} from \"@firecms/core\";\nimport {\n cardClickableMixin,\n cardMixin,\n cardSelectedMixin,\n cls,\n DoNotDisturbOnIcon,\n FunctionsIcon,\n Paper,\n Typography,\n} from \"@firecms/ui\";\n\nimport { editableProperty } from \"../../utils/entities\";\n\nexport function PropertyFieldPreview({\n property,\n onClick,\n hasError,\n includeName,\n includeEditButton,\n selected\n }: {\n property: Property,\n hasError?: boolean,\n selected?: boolean,\n includeName?: boolean,\n includeEditButton?: boolean;\n onClick?: () => void\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = getFieldConfig(property, propertyConfigs);\n const disabled = !editableProperty(property);\n\n const borderColorClass = hasError\n ? \"border-red-500 dark:border-red-500 border-opacity-100 dark:border-opacity-100 border-red-500/100 dark:border-red-500/100 ring-0 dark:ring-0\"\n : (selected ? \"border-primary\" : \"border-transparent\");\n\n return <ErrorBoundary>\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"m-4\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <Paper\n className={cls(\n \"m-1\",\n \"border\",\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n borderColorClass\n )}\n >\n\n <div className=\"w-full flex flex-col\">\n\n {includeName &&\n <ErrorBoundary>\n <Typography variant=\"label\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property.name\n ? property.name\n : \"\\u00a0\"\n }\n </Typography>\n </ErrorBoundary>}\n\n <div className=\"flex flex-row items-center\">\n <ErrorBoundary>\n <Typography className=\"flex-grow pr-2\"\n variant={includeName ? \"body2\" : \"label\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>\n </ErrorBoundary>\n <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>\n\n </div>\n </div>\n\n {includeEditButton && <Typography variant={\"button\"}>\n EDIT\n </Typography>}\n\n </Paper>\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?: PropertyOrBuilder\n}) {\n\n const { propertyConfigs } = useCustomizationController();\n\n const propertyConfig = !isPropertyBuilder(property) && property ? getFieldConfig(property, propertyConfigs) : undefined;\n\n return (\n <div\n onClick={onClick}\n className=\"flex flex-row w-full cursor-pointer\">\n <div className={\"relative m-4\"}>\n {propertyConfig && <PropertyConfigBadge propertyConfig={propertyConfig}/>}\n {!propertyConfig && <div\n className={\"h-8 w-8 flex items-center justify-center rounded-full shadow text-white bg-surface-500\"}>\n <FunctionsIcon color={\"inherit\"} size={\"small\"}/>\n </div>}\n <DoNotDisturbOnIcon color={\"disabled\"} size={\"small\"} className={\"absolute -right-2 -top-2\"}/>\n </div>\n <Paper\n className={cls(\n \"pl-2 w-full flex flex-row gap-4 items-center\",\n cardMixin,\n onClick ? cardClickableMixin : \"\",\n selected ? cardSelectedMixin : \"\",\n \"flex-grow p-4 border transition-colors duration-200\",\n selected ? \"border-primary\" : \"border-transparent\")}\n >\n\n <div className=\"w-full flex flex-col\">\n <Typography variant=\"label\"\n component=\"span\"\n className=\"flex-grow pr-2\">\n {property?.name\n ? property.name\n : name\n }\n </Typography>\n\n <div className=\"flex flex-row items-center\">\n {propertyConfig && <Typography className=\"flex-grow pr-2\"\n variant={\"body2\"}\n component=\"span\"\n color=\"secondary\">\n {propertyConfig?.name}\n </Typography>}\n\n {property && !isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n {property.dataType}\n </Typography>\n </ErrorBoundary>}\n\n {property && isPropertyBuilder(property) && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This property is defined as a property builder in code\n </Typography>\n </ErrorBoundary>}\n\n {!property && <ErrorBoundary>\n <Typography variant=\"body2\"\n component=\"span\"\n color=\"disabled\">\n This field is defined as an additional field in code\n </Typography>\n </ErrorBoundary>}\n\n </div>\n\n {/*<div className=\"flex flex-row text-xs\">*/}\n {/* <Typography className=\"flex-grow pr-2\"*/}\n {/* variant=\"body2\"*/}\n {/* component=\"span\"*/}\n {/* color=\"secondary\">*/}\n {/* This field can only be edited in code*/}\n {/* </Typography>*/}\n {/*</div>*/}\n </div>\n\n </Paper>\n </div>)\n}\n","export function idToPropertiesPath(id: string): string {\n return \"properties.\" + id.replaceAll(\".\", \".properties.\");\n}\n\nexport function namespaceToPropertiesPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".properties\"\n : \"properties\";\n}\n\nexport function namespaceToPropertiesOrderPath(namespace?: string): string {\n return namespace\n ? \"properties.\" + namespace.replaceAll(\".\", \".properties.\") + \".propertiesOrder\"\n : \"propertiesOrder\";\n}\n\nexport function getFullId(propertyKey: string, propertyNamespace?: string): string {\n return propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n}\n\nexport function getFullIdPath(propertyKey: string, propertyNamespace?: string): string {\n const keyWithNamespace = propertyNamespace\n ? `${propertyNamespace}.${propertyKey}`\n : propertyKey;\n return idToPropertiesPath(keyWithNamespace);\n}\n","import React, { createContext, useCallback, useContext, useState } 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 }) {\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 return (\n <AIModifiedPathsContext.Provider value={{\n modifiedPaths,\n generationCounter,\n addModifiedPaths,\n clearPath,\n clearAllPaths,\n isPathModified\n }}>\n {children}\n </AIModifiedPathsContext.Provider>\n );\n}\n\nexport function useAIModifiedPaths(): AIModifiedPathsContextType | null {\n return useContext(AIModifiedPathsContext);\n}\n\n","import React from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport {\n AdditionalFieldDelegate,\n AIModifiedIndicator,\n CMSType,\n isPropertyBuilder,\n PropertiesOrBuilders,\n PropertyOrBuilder\n} from \"@firecms/core\";\nimport {\n FindInPageIcon,\n defaultBorderMixin,\n DeleteIcon,\n IconButton,\n Menu,\n MenuItem,\n MoreVertIcon,\n Tooltip,\n VerticalAlignBottomIcon,\n VerticalAlignTopIcon\n} from \"@firecms/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\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\n\nexport const PropertyTree = React.memo(\n function PropertyTree<M extends {\n [Key: string]: CMSType\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 collectionEditable\n }: {\n namespace?: string;\n selectedPropertyKey?: string;\n onPropertyClick?: (propertyKey: string, namespace?: string) => void;\n properties: PropertiesOrBuilders<M>;\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 collectionEditable: boolean;\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={className}>\n\n {propertiesOrder && propertiesOrder\n .map((propertyKey: string, index: number) => {\n const property = properties[propertyKey] as PropertyOrBuilder;\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 propertyOrBuilder={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 collectionEditable={collectionEditable}\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 propertyOrBuilder,\n additionalField,\n selectedPropertyKey,\n errors,\n propertiesOrder,\n onPropertyClick,\n onPropertyMove,\n onPropertyRemove,\n inferredPropertyKeys,\n collectionEditable\n}: {\n id: string;\n propertyKey: string;\n namespace?: string;\n propertyOrBuilder: PropertyOrBuilder;\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 collectionEditable: boolean;\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 propertyOrBuilder === \"object\") {\n const property = propertyOrBuilder;\n if (property.dataType === \"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 collectionEditable={collectionEditable}\n />\n }\n }\n\n const selected = selectedPropertyKey === fullId;\n const editable = propertyOrBuilder && ((collectionEditable && !isPropertyBuilder(propertyOrBuilder)) || editableProperty(propertyOrBuilder));\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 -ml-8 cursor-grab\"\n {...attributes}\n {...listeners}\n >\n <div className=\"relative\">\n {subtree && <div\n className={\"absolute border-l \" + defaultBorderMixin}\n style={{\n left: \"32px\",\n top: \"64px\",\n bottom: \"16px\"\n }} />}\n\n <div>\n {!isPropertyBuilder(propertyOrBuilder) && !additionalField && editable\n ? <PropertyFieldPreview\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n includeName={true}\n selected={selected}\n hasError={hasError} />\n : <NonEditablePropertyPreview name={propertyKey}\n property={propertyOrBuilder}\n onClick={onPropertyClick ? () => onPropertyClick(propertyKey, namespace) : undefined}\n selected={selected} />}\n </div>\n\n <div className=\"absolute top-3 right-3 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 <FindInPageIcon size=\"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) => {\n e.stopPropagation();\n onPropertyRemove(propertyKey, namespace);\n }}>\n <DeleteIcon size={\"smallest\"} />\n </IconButton>\n </Tooltip>}\n </>}\n\n <Menu\n trigger={\n <IconButton\n size=\"smallest\"\n >\n <MoreVertIcon size={\"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 <VerticalAlignTopIcon size=\"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 <VerticalAlignBottomIcon size=\"smallest\" />\n Move to bottom\n </MenuItem>\n <MenuItem\n dense\n onClick={() => onPropertyRemove?.(propertyKey, namespace)}\n >\n <DeleteIcon size=\"smallest\" />\n Delete\n </MenuItem>\n </Menu>\n\n </div>\n\n {subtree && <div className={\"ml-16\"}>{subtree}</div>}\n </div>\n </div>\n );\n}\n","import React, { useState } from \"react\";\nimport { FieldCaption, MapProperty, Property, PropertyConfig, } from \"@firecms/core\";\nimport { AddIcon, BooleanSwitchWithLabel, Button, Paper, Typography } from \"@firecms/ui\";\nimport { PropertyFormDialog } from \"../PropertyEditView\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { PropertyTree } from \"../PropertyTree\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath, namespaceToPropertiesPath } from \"../util\";\n\nexport function MapPropertyField({ disabled, getData, allowDataInference, propertyConfigs, collectionEditable }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\n}) {\n\n const {\n values,\n setFieldValue\n } = useFormex<MapProperty>();\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) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\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\"}>Properties in this group</Typography>\n <Button\n onClick={() => setPropertyDialogOpen(true)}\n startIcon={<AddIcon/>}\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 collectionEditable={collectionEditable}\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=\"Spread children as columns\"\n onValueChange={(v) => setFieldValue(\"spreadChildren\", v)}\n value={values.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 collectionEditable={collectionEditable}\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}\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 { ArrayProperty, getFieldConfig, Property, PropertyConfig } from \"@firecms/core\";\nimport { Button, Paper, Typography } from \"@firecms/ui\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\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 collectionEditable\n }: {\n showErrors: boolean,\n existing: boolean,\n disabled: boolean,\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\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\");\n const ofPropertyError = getIn(touched, \"of\") && getIn(errors, \"of\");\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?.dataType ? 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 size={\"large\"}\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 collectionEditable={collectionEditable}\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 { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\nimport { PropertyWithId } from \"../PropertyEditView\";\nimport React from \"react\";\nimport { FieldCaption, prettifyIdentifier, toSnakeCase } from \"@firecms/core\";\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\n const name = \"name\";\n const nameError = showErrors && getIn(errors, name);\n\n const id = \"id\";\n const idError = showErrors && getIn(errors, id);\n\n const description = \"description\";\n const descriptionError = showErrors && getIn(errors, description);\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: any) => {\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={\"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 <Field\n name={id}\n as={DebouncedTextField}\n label={\"ID\"}\n value={values[id]}\n onChange={(e: any) => {\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={\"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 React from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { TextField } from \"@firecms/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 } = useFormex();\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\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, FormexFieldProps, getIn, useFormex } from \"@firecms/formex\";\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 { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\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 } from \"@firecms/core\";\n\nexport function BlockPropertyField({\n disabled,\n getData,\n allowDataInference,\n propertyConfigs,\n collectionEditable\n }: {\n disabled: boolean;\n getData?: () => Promise<object[]>;\n allowDataInference: boolean;\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean;\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) ?? Object.keys(getIn(values, namespaceToPropertiesPath(namespace)));\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={<AddIcon/>}\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 collectionEditable={collectionEditable}\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 collectionEditable={collectionEditable}\n onDelete={deleteProperty}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\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 \"@firecms/formex\";\nimport { DebouncedTextField } from \"@firecms/ui\";\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\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)}\n label={\"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)}\n label={\"Max value\"}\n name={validationMax}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationLessThan)}\n label={\"Less than\"}\n name={validationLessThan}\n type=\"number\"\n size=\"small\"\n\n disabled={disabled}\n onChange={handleChange}/>\n </div>\n\n <div className={\"col-span-6\"}>\n <DebouncedTextField\n value={getIn(values, validationMoreThan)}\n label={\"More than\"}\n name={validationMoreThan}\n type=\"number\"\n size=\"small\"\n\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={\"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={\"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={\"Integer value\"}\n disabled={disabled}\n form={form}\n field={field}/>\n }}\n </Field>\n </div>\n </div>\n );\n}\n","import React from \"react\";\nimport { NumberPropertyValidation } from \"./validation/NumberPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { TextField } from \"@firecms/ui\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nexport function NumberPropertyField({ disabled }: {\n disabled: boolean;\n}) {\n\n const { values, setFieldValue } = useFormex();\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\n <TextField name={\"defaultValue\"}\n disabled={disabled}\n type={\"number\"}\n onChange={(e: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : parseFloat(e.target.value));\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import React from \"react\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, IconForView, NumberProperty, StringProperty, useNavigationController } from \"@firecms/core\";\nimport { CircularProgress, Select, SelectGroup, SelectItem, Typography, } from \"@firecms/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 handleChange,\n errors,\n } = useFormex<StringProperty | NumberProperty>();\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const pathPath = asString ? \"reference.path\" : (multiple ? \"of.path\" : \"path\") ;\n const pathValue: string | undefined = getIn(values, pathPath);\n const pathError: string | undefined = showErrors && getIn(errors, pathPath);\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 handleChange={handleChange}\n as={CollectionsSelect}/>\n\n </div>\n\n </>\n );\n}\n\nexport function CollectionsSelect({\n disabled,\n pathPath,\n value,\n handleChange,\n error,\n ...props\n }: {\n disabled: boolean,\n pathPath: string,\n value?: string,\n handleChange: (event: any) => void,\n error?: string\n}) {\n\n const navigation = useNavigationController();\n\n if (!navigation)\n return <div className={\"col-span-12\"}>\n <CircularProgress/>\n </div>;\n\n const collections = navigation?.collections ?? [];\n\n const groups: string[] = Array.from(new Set(\n Object.values(collections).map(e => e.group).filter(Boolean) as string[]\n ).values());\n\n const ungroupedCollections = collections.filter((col) => !col.group);\n\n return (\n <>\n <Select\n error={Boolean(error)}\n disabled={disabled}\n value={value ?? \"\"}\n position={\"item-aligned\"}\n name={pathPath}\n size={\"large\"}\n fullWidth={true}\n onChange={handleChange}\n label={\"Target collection\"}\n renderValue={(selected) => {\n const selectedCollection = collections.find(collection => collection.id === selected || collection.path === 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=\"font-medium ml-4\">\n {selectedCollection?.name.toUpperCase()}\n </Typography>\n </div>)\n }}\n {...props}>\n\n {groups.flatMap((group) => (\n <SelectGroup label={group || \"Views\"}\n key={`group_${group}`}>\n {\n collections.filter(collection => collection.group === group)\n .map((collection) => {\n return <SelectItem\n key={`${collection.id ?? collection.path}-${group}`}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>\n ))}\n\n {ungroupedCollections && <SelectGroup label={\"Views\"}>\n {ungroupedCollections\n .map((collection) => {\n return <SelectItem key={collection.id ?? collection.path}\n value={collection.id ?? collection.path}>\n <div className=\"flex flex-row\">\n <IconForView collectionOrView={collection}/>\n <Typography\n variant={\"subtitle2\"}\n className=\"font-medium ml-4\">\n {collection?.name.toUpperCase()}\n </Typography>\n </div>\n </SelectItem>;\n })\n\n }\n </SelectGroup>}\n\n </Select>\n\n </>\n );\n}\n","import React from \"react\";\nimport { getIn, useFormex } from \"@firecms/formex\";\nimport { FieldCaption, NumberProperty, StringProperty } from \"@firecms/core\";\nimport { Select, SelectItem } from \"@firecms/ui\";\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\", label: \"UTC (Coordinated Universal Time)\" },\n // Americas\n { value: \"America/New_York\", label: \"New York (US Eastern)\" },\n { value: \"America/Chicago\", label: \"Chicago (US Central)\" },\n { value: \"America/Denver\", label: \"Denver (US Mountain)\" },\n { value: \"America/Los_Angeles\", label: \"Los Angeles (US Pacific)\" },\n { value: \"America/Anchorage\", label: \"Anchorage (Alaska)\" },\n { value: \"America/Toronto\", label: \"Toronto (Canada Eastern)\" },\n { value: \"America/Vancouver\", label: \"Vancouver (Canada Pacific)\" },\n { value: \"America/Mexico_City\", label: \"Mexico City\" },\n { value: \"America/Sao_Paulo\", label: \"São Paulo (Brazil)\" },\n { value: \"America/Buenos_Aires\", label: \"Buenos Aires (Argentina)\" },\n // Europe\n { value: \"Europe/London\", label: \"London (UK)\" },\n { value: \"Europe/Paris\", label: \"Paris (France)\" },\n { value: \"Europe/Berlin\", label: \"Berlin (Germany)\" },\n { value: \"Europe/Madrid\", label: \"Madrid (Spain)\" },\n { value: \"Europe/Rome\", label: \"Rome (Italy)\" },\n { value: \"Europe/Amsterdam\", label: \"Amsterdam (Netherlands)\" },\n { value: \"Europe/Brussels\", label: \"Brussels (Belgium)\" },\n { value: \"Europe/Zurich\", label: \"Zurich (Switzerland)\" },\n { value: \"Europe/Stockholm\", label: \"Stockholm (Sweden)\" },\n { value: \"Europe/Vienna\", label: \"Vienna (Austria)\" },\n { value: \"Europe/Warsaw\", label: \"Warsaw (Poland)\" },\n { value: \"Europe/Prague\", label: \"Prague (Czech Republic)\" },\n { value: \"Europe/Athens\", label: \"Athens (Greece)\" },\n { value: \"Europe/Moscow\", label: \"Moscow (Russia)\" },\n { value: \"Europe/Istanbul\", label: \"Istanbul (Turkey)\" },\n // Asia\n { value: \"Asia/Dubai\", label: \"Dubai (UAE)\" },\n { value: \"Asia/Kolkata\", label: \"Mumbai / Delhi (India)\" },\n { value: \"Asia/Bangkok\", label: \"Bangkok (Thailand)\" },\n { value: \"Asia/Singapore\", label: \"Singapore\" },\n { value: \"Asia/Hong_Kong\", label: \"Hong Kong\" },\n { value: \"Asia/Shanghai\", label: \"Shanghai (China)\" },\n { value: \"Asia/Tokyo\", label: \"Tokyo (Japan)\" },\n { value: \"Asia/Seoul\", label: \"Seoul (South Korea)\" },\n { value: \"Asia/Jakarta\", label: \"Jakarta (Indonesia)\" },\n // Oceania\n { value: \"Australia/Sydney\", label: \"Sydney (Australia Eastern)\" },\n { value: \"Australia/Melbourne\", label: \"Melbourne (Australia)\" },\n { value: \"Australia/Brisbane\", label: \"Brisbane (Australia)\" },\n { value: \"Australia/Perth\", label: \"Perth (Australia Western)\" },\n { value: \"Pacific/Auckland\", label: \"Auckland (New Zealand)\" },\n // Africa\n { value: \"Africa/Cairo\", label: \"Cairo (Egypt)\" },\n { value: \"Africa/Johannesburg\", label: \"Johannesburg (South Africa)\" },\n { value: \"Africa/Lagos\", label: \"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\n const modePath = \"mode\";\n const modeValue: string | undefined = getIn(values, modePath);\n const modeError: string | undefined = getIn(touched, modePath) && getIn(errors, modePath);\n\n const autoValuePath = \"autoValue\";\n const autoValueValue: string | undefined = getIn(values, autoValuePath);\n const autoValueError: string | undefined = getIn(touched, autoValuePath) && getIn(errors, autoValuePath);\n\n const timezonePath = \"timezone\";\n const timezoneValue: string | undefined = getIn(values, timezonePath);\n const timezoneError: string | undefined = getIn(touched, timezonePath) && getIn(errors, timezonePath);\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 size={\"large\"}\n onValueChange={(v) => setFieldValue(modePath, v)}\n label={\"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 size={\"large\"}\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={\"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 size={\"large\"}\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={\"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 <ValidationPanel>\n <GeneralPropertyValidation disabled={disabled} />\n </ValidationPanel>\n </div>\n </>\n );\n}\n","import React from \"react\";\n\nimport { Field, FormexFieldProps } from \"@firecms/formex\";\nimport { SwitchControl } from \"../../SwitchControl\";\n\nexport function AdvancedPropertyValidation({ disabled }: {\n disabled: boolean\n}) {\n\n const columnWidth = \"columnWidth\";\n const hideFromCollection = \"hideFromCollection\";\n const readOnly = \"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={\"medium\"}\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={\"medium\"}\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 { PropsWithChildren } from \"react\";\n\nimport { ExpandablePanel, SettingsIcon, Typography } from \"@firecms/ui\";\n\nexport function ConditionsPanel({\n children\n}: PropsWithChildren<{}>) {\n\n return (\n <ExpandablePanel\n initiallyExpanded={true}\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 <SettingsIcon />\n <Typography variant={\"subtitle2\"}\n className=\"ml-4\">\n Conditions\n </Typography>\n </div>\n }>\n\n {children}\n\n </ExpandablePanel>\n )\n}\n","import { Properties, Property, PropertyOrBuilder, isPropertyBuilder } from \"@firecms/core\";\n\n/**\n * Recursively extract all property paths from a Properties object.\n * For nested map properties, creates dot-notation paths like \"address.city\".\n * Skips PropertyBuilder functions (callbacks) as they cannot be statically analyzed.\n * \n * @param properties - The properties object to extract paths from\n * @param prefix - Optional prefix for nested paths (used in recursion)\n * @returns Array of property path strings\n */\nexport function getPropertyPaths(\n properties: Properties | undefined,\n prefix: string = \"\"\n): string[] {\n if (!properties) return [];\n\n const paths: string[] = [];\n\n for (const [key, propertyOrBuilder] of Object.entries(properties)) {\n if (!propertyOrBuilder) continue;\n\n // Skip PropertyBuilder functions - they require runtime values to resolve\n if (isPropertyBuilder(propertyOrBuilder)) continue;\n\n const property = propertyOrBuilder as Property;\n const fullPath = prefix ? `${prefix}.${key}` : key;\n paths.push(fullPath);\n\n // Recursively add nested map properties\n if (property.dataType === \"map\" && property.properties) {\n const nestedPaths = getPropertyPaths(\n property.properties as Properties,\n fullPath\n );\n paths.push(...nestedPaths);\n }\n\n // For arrays with object items, add the nested paths too\n if (property.dataType === \"array\" && property.of) {\n const ofPropertyOrBuilder = property.of as PropertyOrBuilder;\n // Skip if the array's 'of' is a PropertyBuilder\n if (!isPropertyBuilder(ofPropertyOrBuilder)) {\n const ofProperty = ofPropertyOrBuilder as Property;\n if (ofProperty.dataType === \"map\" && ofProperty.properties) {\n const nestedPaths = getPropertyPaths(\n ofProperty.properties as Properties,\n `${fullPath}[]`\n );\n paths.push(...nestedPaths);\n }\n }\n }\n }\n\n return paths;\n}\n\n/**\n * Get property paths grouped by top-level property for UI display.\n * Skips PropertyBuilder functions.\n * \n * @param properties - The properties object\n * @returns Object with top-level keys mapping to their nested paths\n */\nexport function getGroupedPropertyPaths(\n properties: Properties | undefined\n): Record<string, string[]> {\n if (!properties) return {};\n\n const grouped: Record<string, string[]> = {};\n\n for (const [key, propertyOrBuilder] of Object.entries(properties)) {\n if (!propertyOrBuilder) continue;\n\n // Skip PropertyBuilder functions\n if (isPropertyBuilder(propertyOrBuilder)) continue;\n\n const property = propertyOrBuilder as Property;\n grouped[key] = [key];\n\n if (property.dataType === \"map\" && property.properties) {\n const nestedPaths = getPropertyPaths(\n property.properties as Properties,\n key\n );\n grouped[key].push(...nestedPaths);\n }\n }\n\n return grouped;\n}\n","import React from \"react\";\nimport { useFormex } from \"@firecms/formex\";\nimport {\n DeleteIcon,\n IconButton,\n Select,\n SelectItem,\n DebouncedTextField,\n Typography,\n Chip,\n BooleanSwitchWithLabel,\n TextField,\n cls,\n defaultBorderMixin\n} from \"@firecms/ui\";\nimport {\n Properties,\n Property,\n PropertyOrBuilder,\n getFieldConfig,\n DEFAULT_FIELD_CONFIGS,\n getIconForWidget,\n EnumValueConfig,\n isPropertyBuilder\n} from \"@firecms/core\";\nimport { PropertyWithId } from \"../../PropertyEditView\";\nimport { getPropertyPaths } from \"./property_paths\";\n\n/**\n * Condition types that can be configured\n */\nconst CONDITION_TYPES = [\n { id: \"disabled\", label: \"Disabled\", description: \"Disable this field when condition is true\" },\n { id: \"hidden\", label: \"Hidden\", description: \"Hide this field when condition is true\" },\n { id: \"required\", label: \"Required\", description: \"Make this field required when condition is true\" },\n { id: \"readOnly\", label: \"Read Only\", description: \"Make this field read-only when condition is true\" }\n] as const;\n\ntype ConditionType = typeof CONDITION_TYPES[number][\"id\"];\n\n/**\n * Operators for building conditions with their applicable data types\n */\nconst OPERATORS = [\n { id: \"==\", label: \"equals\", valueType: \"any\", applicableTo: [\"string\", \"number\", \"boolean\", \"date\"] },\n { id: \"!=\", label: \"not equals\", valueType: \"any\", applicableTo: [\"string\", \"number\", \"boolean\", \"date\"] },\n { id: \">\", label: \"greater than\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \"<\", label: \"less than\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \">=\", label: \"greater or equal\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \"<=\", label: \"less or equal\", valueType: \"number\", applicableTo: [\"number\", \"date\"] },\n { id: \"in\", label: \"contains\", valueType: \"any\", applicableTo: [\"array\"] },\n { id: \"!in\", label: \"not contains\", valueType: \"any\", applicableTo: [\"array\"] },\n { id: \"!!\", label: \"has a value\", valueType: \"none\", applicableTo: [\"string\", \"number\", \"boolean\", \"array\", \"map\", \"date\"] },\n { id: \"!\", label: \"is empty\", valueType: \"none\", applicableTo: [\"string\", \"number\", \"boolean\", \"array\", \"map\", \"date\"] },\n { id: \"isPast\", label: \"is in the past\", valueType: \"none\", applicableTo: [\"date\"] },\n { id: \"isFuture\", label: \"is in the future\", valueType: \"none\", applicableTo: [\"date\"] }\n] as const;\n\ntype OperatorId = typeof OPERATORS[number][\"id\"];\n\n// Context fields with their types\nconst CONTEXT_FIELDS = [\n { id: \"isNew\", label: \"Is New Entity\", dataType: \"boolean\", color: \"#9c27b0\" },\n { id: \"entityId\", label: \"Entity ID\", dataType: \"string\", color: \"#2196f3\" },\n { id: \"user.roles\", label: \"User Roles\", dataType: \"array\", color: \"#ff9800\" }\n] as const;\n\ninterface SimpleRule {\n field: string;\n operator: OperatorId;\n value: string;\n}\n\ntype LogicOperator = \"and\" | \"or\";\n\n/**\n * A condition group can contain rules and/or nested groups\n */\ninterface ConditionGroup {\n logic: LogicOperator;\n rules: SimpleRule[];\n groups?: ConditionGroup[]; // Nested groups for complex logic\n}\n\n/**\n * Get the property at a given path.\n * Returns undefined if the path contains a PropertyBuilder (callback).\n */\nfunction getPropertyAtPath(\n fieldPath: string,\n collectionProperties?: Properties\n): Property | undefined {\n if (!collectionProperties) return undefined;\n\n const parts = fieldPath.split(\".\");\n let current: Properties | undefined = collectionProperties;\n let property: Property | undefined;\n\n for (const part of parts) {\n if (!current) return undefined;\n const propertyOrBuilder = current[part] as PropertyOrBuilder | undefined;\n if (!propertyOrBuilder) return undefined;\n\n // Skip PropertyBuilder functions - they require runtime values\n if (isPropertyBuilder(propertyOrBuilder)) return undefined;\n\n property = propertyOrBuilder as Property;\n\n if (property.dataType === \"map\" && property.properties) {\n current = property.properties as Properties;\n } else {\n current = undefined;\n }\n }\n\n return property;\n}\n\n/**\n * Get the data type for a field path\n */\nfunction getFieldDataType(\n fieldPath: string,\n collectionProperties?: Properties\n): string {\n // Check context fields first\n const contextField = CONTEXT_FIELDS.find(f => f.id === fieldPath);\n if (contextField) return contextField.dataType;\n\n const property = getPropertyAtPath(fieldPath, collectionProperties);\n return property?.dataType ?? \"string\";\n}\n\n/**\n * Get enum values for a property if it has them\n */\nfunction getEnumValues(property: Property | undefined): EnumValueConfig[] | undefined {\n if (!property) return undefined;\n if (property.dataType === \"string\" && property.enumValues) {\n // Normalize to array format\n if (Array.isArray(property.enumValues)) {\n return property.enumValues;\n }\n // Handle object format { key: label }\n return Object.entries(property.enumValues).map(([id, label]) => ({\n id,\n label: typeof label === \"string\" ? label : (label as EnumValueConfig).label\n }));\n }\n return undefined;\n}\n\n/**\n * Get operators applicable for a given data type\n */\nfunction getOperatorsForDataType(dataType: string) {\n return OPERATORS.filter(op => {\n const applicable = op.applicableTo as readonly string[];\n return applicable.includes(dataType) ||\n (applicable.includes(\"string\") && ![\"number\", \"date\", \"array\"].includes(dataType));\n });\n}\n\n/**\n * Props for a single rule row (used inside a group)\n */\ninterface RuleRowProps {\n rule: SimpleRule;\n onRuleChange: (rule: SimpleRule) => void;\n onRemove: () => void;\n disabled: boolean;\n availableFields: string[];\n collectionProperties?: Properties;\n showErrors: boolean;\n showRemoveButton: boolean;\n}\n\n/**\n * Props for a condition group (with AND/OR logic)\n */\ninterface ConditionGroupRowProps {\n conditionType: ConditionType;\n group: ConditionGroup;\n onGroupChange: (group: ConditionGroup) => void;\n onRemove: () => void;\n disabled: boolean;\n availableFields: string[];\n collectionProperties?: Properties;\n showErrors: boolean;\n}\n\n/**\n * Dynamic value input based on field data type and enum values\n */\nfunction ConditionValueInput({\n value,\n onChange,\n dataType,\n enumValues,\n disabled,\n operator\n}: {\n value: string;\n onChange: (value: string) => void;\n dataType: string;\n enumValues?: EnumValueConfig[];\n disabled: boolean;\n operator: OperatorId;\n}) {\n // For truthy/falsy operators, no value needed\n if (operator === \"!!\" || operator === \"!\") {\n return null;\n }\n\n // Boolean - use switch\n if (dataType === \"boolean\") {\n return (\n <BooleanSwitchWithLabel\n value={value === \"true\"}\n size=\"small\"\n position=\"start\"\n disabled={disabled}\n onValueChange={(newValue) => onChange(newValue ? \"true\" : \"false\")}\n />\n );\n }\n\n // Enum/string with enumValues - use select\n if (enumValues && enumValues.length > 0) {\n return (\n <Select\n value={value}\n onValueChange={onChange}\n disabled={disabled}\n size=\"small\"\n className=\"min-w-[120px]\"\n placeholder=\"Select value\">\n {enumValues.map(ev => (\n <SelectItem key={ev.id} value={String(ev.id)}>\n {ev.label}\n </SelectItem>\n ))}\n </Select>\n );\n }\n\n // Number - use number input\n if (dataType === \"number\") {\n return (\n <TextField\n value={value}\n type=\"number\"\n size=\"small\"\n disabled={disabled}\n placeholder=\"Value\"\n className=\"flex-1 min-w-[80px]\"\n onChange={(e) => onChange(e.target.value)}\n />\n );\n }\n\n // Array - comma separated values\n if (dataType === \"array\") {\n return (\n <DebouncedTextField\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"value1, value2\"\n className=\"flex-1 min-w-[120px]\"\n />\n );\n }\n\n // Default - text input\n return (\n <DebouncedTextField\n value={value}\n onChange={(e) => onChange(e.target.value)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Value\"\n className=\"flex-1 min-w-[100px]\"\n inputClassName=\"min-w-[100px]\"\n />\n );\n}\n\nfunction ConditionRow({\n rule,\n onRuleChange,\n onRemove,\n disabled,\n availableFields,\n collectionProperties,\n showErrors,\n showRemoveButton = true\n}: RuleRowProps & { showRemoveButton?: boolean }) {\n const fieldDataType = getFieldDataType(rule.field, collectionProperties);\n const applicableOperators = getOperatorsForDataType(fieldDataType);\n const property = getPropertyAtPath(rule.field, collectionProperties);\n const enumValues = getEnumValues(property);\n const operator = OPERATORS.find(op => op.id === rule.operator);\n const showValueField = operator?.valueType !== \"none\";\n\n // Validation: check for incomplete condition (only show after submission attempt)\n const isFieldMissing = !rule.field;\n const isValueMissing = showValueField && !rule.value && rule.value !== \"0\";\n const hasError = showErrors && (isFieldMissing || isValueMissing);\n\n // Get color for the field\n const getFieldColor = (fieldPath: string): string => {\n const contextField = CONTEXT_FIELDS.find(f => f.id === fieldPath);\n if (contextField) return contextField.color;\n\n if (!collectionProperties) return \"#888\";\n\n const prop = getPropertyAtPath(fieldPath, collectionProperties);\n if (!prop) return \"#888\";\n const config = getFieldConfig(prop, DEFAULT_FIELD_CONFIGS);\n return config?.color ?? \"#888\";\n };\n\n return (\n <div className={cls(\n \"flex items-center gap-2 p-2 rounded-md\",\n hasError ? \"bg-red-50 dark:bg-red-900/20\" : \"bg-surface-100 dark:bg-surface-800\"\n )}>\n {/* Field selector with colored badge */}\n <Select\n value={rule.field}\n onValueChange={(value) => {\n const newDataType = getFieldDataType(value, collectionProperties);\n const newApplicableOps = getOperatorsForDataType(newDataType);\n // Reset operator if current one isn't applicable\n const newOperator = newApplicableOps.find(op => op.id === rule.operator)\n ? rule.operator\n : newApplicableOps[0]?.id ?? \"==\";\n // Reset value when changing field\n onRuleChange({ ...rule, field: value, operator: newOperator as OperatorId, value: \"\" });\n }}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[180px]\"\n renderValue={(value) => (\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-2 h-2 rounded-full shrink-0\"\n style={{ backgroundColor: getFieldColor(value) }}\n />\n <span className=\"truncate\">{value}</span>\n </div>\n )}\n placeholder=\"Select field\">\n {/* Context fields */}\n {CONTEXT_FIELDS.map(field => (\n <SelectItem key={field.id} value={field.id}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: field.color }}\n />\n <span>{field.label}</span>\n <Chip size=\"small\" colorScheme=\"grayLight\" className=\"ml-auto\">\n {field.dataType}\n </Chip>\n </div>\n </SelectItem>\n ))}\n\n {/* Separator */}\n {availableFields.length > 0 && (\n <SelectItem value=\"_divider\" disabled>\n <span className=\"text-xs text-surface-500\">─ Entity Fields ─</span>\n </SelectItem>\n )}\n\n {/* Property fields */}\n {availableFields.map(field => {\n const color = getFieldColor(field);\n const dataType = getFieldDataType(field, collectionProperties);\n const prop = getPropertyAtPath(field, collectionProperties);\n const hasEnum = !!getEnumValues(prop);\n return (\n <SelectItem key={field} value={field}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-3 h-3 rounded-full shrink-0\"\n style={{ backgroundColor: color }}\n />\n <span>{field}</span>\n <Chip size=\"small\" colorScheme=\"grayLight\" className=\"ml-auto\">\n {hasEnum ? \"enum\" : dataType}\n </Chip>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n\n {/* Operator - filtered by field type */}\n <Select\n value={rule.operator}\n onValueChange={(value) => onRuleChange({ ...rule, operator: value as OperatorId })}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[120px]\">\n {applicableOperators.map(op => (\n <SelectItem key={op.id} value={op.id}>\n {op.label}\n </SelectItem>\n ))}\n </Select>\n\n {/* Dynamic Value input */}\n {showValueField && (\n <ConditionValueInput\n value={rule.value}\n onChange={(newValue) => onRuleChange({ ...rule, value: newValue })}\n dataType={fieldDataType}\n enumValues={enumValues}\n disabled={disabled}\n operator={rule.operator}\n />\n )}\n\n {/* Remove button */}\n {showRemoveButton && (\n <IconButton onClick={onRemove} disabled={disabled} size=\"small\" variant=\"ghost\">\n <DeleteIcon size=\"smallest\" />\n </IconButton>\n )}\n </div>\n );\n}\n\n/**\n * A condition group row with AND/OR logic selector and multiple rules\n */\nfunction ConditionGroupRow({\n conditionType,\n group,\n onGroupChange,\n onRemove,\n disabled,\n availableFields,\n collectionProperties,\n showErrors\n}: ConditionGroupRowProps) {\n const handleLogicChange = (logic: LogicOperator) => {\n onGroupChange({ ...group, logic });\n };\n\n const handleRuleChange = (index: number, rule: SimpleRule) => {\n const newRules = [...group.rules];\n newRules[index] = rule;\n onGroupChange({ ...group, rules: newRules });\n };\n\n const handleRemoveRule = (index: number) => {\n const newRules = group.rules.filter((_, i) => i !== index);\n if (newRules.length === 0) {\n onRemove();\n } else {\n onGroupChange({ ...group, rules: newRules });\n }\n };\n\n const handleAddRule = () => {\n const defaultRule: SimpleRule = {\n field: availableFields[0] ?? \"isNew\",\n operator: \"==\",\n value: \"\"\n };\n onGroupChange({ ...group, rules: [...group.rules, defaultRule] });\n };\n\n return (\n <div className={cls(\"p-3 bg-surface-50 dark:bg-surface-900 rounded-lg border\", defaultBorderMixin)}>\n <div className=\"flex items-center justify-between mb-3\">\n <div className=\"flex items-center gap-2\">\n <Typography variant=\"label\" className=\"font-medium text-primary\">\n {CONDITION_TYPES.find(ct => ct.id === conditionType)?.label} when\n </Typography>\n {group.rules.length > 1 && (\n <Select\n value={group.logic}\n onValueChange={(value) => handleLogicChange(value as LogicOperator)}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[100px]\">\n <SelectItem value=\"and\">All of these</SelectItem>\n <SelectItem value=\"or\">Any of these</SelectItem>\n </Select>\n )}\n </div>\n <IconButton onClick={onRemove} disabled={disabled} size=\"small\" variant=\"ghost\">\n <DeleteIcon size=\"smallest\" />\n </IconButton>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {group.rules.map((rule, index) => (\n <React.Fragment key={index}>\n {index > 0 && (\n <Typography variant=\"caption\" className=\"text-center text-secondary font-medium uppercase\">\n {group.logic === \"and\" ? \"AND\" : \"OR\"}\n </Typography>\n )}\n <ConditionRow\n rule={rule}\n onRuleChange={(newRule: SimpleRule) => handleRuleChange(index, newRule)}\n onRemove={() => handleRemoveRule(index)}\n disabled={disabled}\n availableFields={availableFields}\n collectionProperties={collectionProperties}\n showErrors={showErrors}\n showRemoveButton={group.rules.length > 1}\n />\n </React.Fragment>\n ))}\n </div>\n\n <button\n onClick={handleAddRule}\n disabled={disabled}\n type=\"button\"\n className={cls(\n \"mt-3 w-full py-2 px-3 rounded-md text-sm\",\n \"border border-dashed text-secondary\",\n \"hover:bg-surface-100 dark:hover:bg-surface-800\",\n \"transition-colors\",\n defaultBorderMixin\n )}\n >\n + Add condition\n </button>\n </div>\n );\n}\n\n/**\n * Convert a simple rule to JSON-Logic format\n */\nfunction simpleRuleToJsonLogic(rule: SimpleRule): Record<string, any> {\n // Guard against empty field or operator which creates invalid Firestore keys\n if (!rule.field || !rule.operator) {\n // Return a valid default rule instead of creating invalid data\n return { \"!!\": { var: \"values._placeholder\" } };\n }\n\n const varRef = { var: `values.${rule.field}` };\n\n // Handle special fields that don't need the \"values.\" prefix\n const fieldVar = rule.field.startsWith(\"user.\") || rule.field === \"isNew\" || rule.field === \"entityId\"\n ? { var: rule.field }\n : varRef;\n\n if (rule.operator === \"!!\") {\n return { \"!!\": fieldVar };\n }\n if (rule.operator === \"!\") {\n return { \"!\": fieldVar };\n }\n if (rule.operator === \"isPast\") {\n return { \"isPast\": fieldVar };\n }\n if (rule.operator === \"isFuture\") {\n return { \"isFuture\": fieldVar };\n }\n\n // Parse value - try to convert to appropriate type\n let parsedValue: any = rule.value;\n if (rule.value === \"true\") parsedValue = true;\n else if (rule.value === \"false\") parsedValue = false;\n else if (rule.value === \"null\") parsedValue = null;\n else if (!isNaN(Number(rule.value)) && rule.value !== \"\") parsedValue = Number(rule.value);\n\n // Handle array values for \"in\" and \"!in\" operators\n if ((rule.operator === \"in\" || rule.operator === \"!in\") && typeof parsedValue === \"string\") {\n parsedValue = parsedValue.split(\",\").map(s => s.trim());\n }\n\n // Handle \"!in\" (not contains) - wrap \"in\" with negation\n if (rule.operator === \"!in\") {\n return { \"!\": { \"in\": [fieldVar, parsedValue] } };\n }\n\n return { [rule.operator]: [fieldVar, parsedValue] };\n}\n\n/**\n * Try to parse JSON-Logic back to a simple rule\n */\nfunction jsonLogicToSimpleRule(jsonLogic: Record<string, any>): SimpleRule | null {\n try {\n const operator = Object.keys(jsonLogic)[0] as OperatorId;\n const args = jsonLogic[operator];\n\n // Handle \"!\" operator - could be negation of a value or negation of \"in\" (not contains)\n if (operator === \"!\") {\n // Check if it's a negated \"in\" operation: {\"!\": {\"in\": [...]}}\n if (typeof args === \"object\" && args !== null && \"in\" in args) {\n const inArgs = args.in;\n if (Array.isArray(inArgs) && inArgs.length === 2) {\n const [left, right] = inArgs;\n if (left?.var) {\n const field = left.var.replace(/^values\\./, \"\");\n const value = Array.isArray(right)\n ? right.join(\", \")\n : String(right ?? \"\");\n return { field, operator: \"!in\", value };\n }\n }\n }\n // Otherwise it's a simple negation (is falsy)\n if (args?.var) {\n const field = args.var.replace(/^values\\./, \"\");\n return { field, operator: \"!\", value: \"\" };\n }\n }\n\n if (operator === \"!!\") {\n const varObj = args;\n if (varObj?.var) {\n const field = varObj.var.replace(/^values\\./, \"\");\n return { field, operator, value: \"\" };\n }\n }\n\n // Handle isPast and isFuture operators\n if (operator === \"isPast\" || operator === \"isFuture\") {\n const varObj = args;\n if (varObj?.var) {\n const field = varObj.var.replace(/^values\\./, \"\");\n return { field, operator, value: \"\" };\n }\n }\n\n if (Array.isArray(args) && args.length === 2) {\n const [left, right] = args;\n if (left?.var) {\n const field = left.var.replace(/^values\\./, \"\");\n const value = Array.isArray(right)\n ? right.join(\", \")\n : String(right ?? \"\");\n return { field, operator, value };\n }\n }\n } catch {\n // Fall through\n }\n return null;\n}\n\n/**\n * Convert a condition group to JSON-Logic format\n */\nfunction groupToJsonLogic(group: ConditionGroup): Record<string, any> {\n const ruleLogics = group.rules\n .filter(rule => rule.field && rule.operator) // Filter out incomplete rules\n .map(rule => simpleRuleToJsonLogic(rule));\n\n const groupLogics = (group.groups || [])\n .map(g => groupToJsonLogic(g));\n\n const allLogics = [...ruleLogics, ...groupLogics];\n\n // If only one condition, don't wrap in and/or\n if (allLogics.length === 1) {\n return allLogics[0];\n }\n\n // If no conditions, return a default true condition\n if (allLogics.length === 0) {\n return { \"!!\": { var: \"values._placeholder\" } };\n }\n\n return { [group.logic]: allLogics };\n}\n\n/**\n * Try to parse JSON-Logic back to a condition group\n */\nfunction jsonLogicToGroup(jsonLogic: Record<string, any>): ConditionGroup | null {\n try {\n const operator = Object.keys(jsonLogic)[0];\n\n // Check if it's an AND or OR group\n if (operator === \"and\" || operator === \"or\") {\n const args = jsonLogic[operator];\n if (Array.isArray(args)) {\n const rules: SimpleRule[] = [];\n const groups: ConditionGroup[] = [];\n\n for (const arg of args) {\n // Check if this is a nested group\n const nestedOperator = Object.keys(arg)[0];\n if (nestedOperator === \"and\" || nestedOperator === \"or\") {\n const nestedGroup = jsonLogicToGroup(arg);\n if (nestedGroup) {\n groups.push(nestedGroup);\n }\n } else {\n // It's a simple rule\n const rule = jsonLogicToSimpleRule(arg);\n if (rule) {\n rules.push(rule);\n }\n }\n }\n\n return {\n logic: operator,\n rules,\n groups: groups.length > 0 ? groups : undefined\n };\n }\n }\n\n // It's a single rule - wrap in an AND group\n const rule = jsonLogicToSimpleRule(jsonLogic);\n if (rule) {\n return {\n logic: \"and\",\n rules: [rule]\n };\n }\n } catch {\n // Fall through\n }\n return null;\n}\n\nexport interface ConditionsEditorProps {\n disabled: boolean;\n /**\n * Optional collection properties for populating the field selector.\n * If not provided, a basic set of common fields is used.\n */\n collectionProperties?: Properties;\n}\n\nexport function ConditionsEditor({ disabled, collectionProperties }: ConditionsEditorProps) {\n const { values, setFieldValue, submitCount } = useFormex<PropertyWithId>();\n\n // Get property paths from collection properties (includes nested maps)\n const availableFields: string[] = collectionProperties\n ? getPropertyPaths(collectionProperties)\n : [];\n\n // Get current conditions from form values\n const conditions = (values as any).conditions ?? {};\n\n // DEBUG: Log conditions to see what's being loaded\n console.log(\"[ConditionsEditor] Loaded conditions:\", conditions);\n\n const activeConditions: { type: ConditionType; group: ConditionGroup }[] = [];\n\n for (const type of CONDITION_TYPES) {\n const jsonLogic = conditions[type.id as keyof typeof conditions];\n if (jsonLogic) {\n console.log(`[ConditionsEditor] Parsing ${type.id}:`, jsonLogic);\n const group = jsonLogicToGroup(jsonLogic as Record<string, any>);\n console.log(`[ConditionsEditor] Parsed group:`, group);\n if (group) {\n activeConditions.push({ type: type.id, group });\n }\n }\n }\n\n const handleAddCondition = (conditionType: ConditionType) => {\n const defaultRule: SimpleRule = {\n field: availableFields[0] ?? \"isNew\",\n operator: \"==\",\n value: \"\"\n };\n\n const defaultGroup: ConditionGroup = {\n logic: \"and\",\n rules: [defaultRule]\n };\n\n const jsonLogic = groupToJsonLogic(defaultGroup);\n setFieldValue(`conditions.${conditionType}`, jsonLogic);\n };\n\n const handleGroupChange = (type: ConditionType, group: ConditionGroup) => {\n const jsonLogic = groupToJsonLogic(group);\n setFieldValue(`conditions.${type}`, jsonLogic);\n };\n\n const handleRemoveCondition = (type: ConditionType) => {\n const newConditions = { ...conditions };\n delete (newConditions as any)[type];\n if (Object.keys(newConditions).length === 0) {\n setFieldValue(\"conditions\", undefined);\n } else {\n setFieldValue(\"conditions\", newConditions);\n }\n };\n\n // Condition types that aren't already used\n const availableConditionTypes = CONDITION_TYPES.filter(\n ct => !conditions[ct.id as keyof typeof conditions]\n );\n\n return (\n <div className=\"flex flex-col gap-4\">\n <Typography variant=\"caption\" color=\"secondary\">\n Add conditions to dynamically control this field based on other field values or user context.\n </Typography>\n\n {/* Active conditions */}\n {activeConditions.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n {activeConditions.map(({ type, group }) => (\n <ConditionGroupRow\n key={type}\n conditionType={type}\n group={group}\n onGroupChange={(newGroup) => handleGroupChange(type, newGroup)}\n onRemove={() => handleRemoveCondition(type)}\n disabled={disabled}\n availableFields={availableFields}\n collectionProperties={collectionProperties}\n showErrors={submitCount > 0}\n />\n ))}\n </div>\n )}\n\n {/* Add new condition - click to add directly */}\n {availableConditionTypes.length > 0 && (\n <Select\n value=\"\"\n onValueChange={(value) => handleAddCondition(value as ConditionType)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"+ Add condition...\"\n className=\"w-full max-w-xs\">\n {availableConditionTypes.map(ct => (\n <SelectItem key={ct.id} value={ct.id}>\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{ct.label}</span>\n <span className=\"text-xs text-surface-500\">{ct.description}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n )}\n\n {activeConditions.length === 0 && availableConditionTypes.length === 0 && (\n <Typography variant=\"caption\" color=\"disabled\" className=\"text-center py-4\">\n All condition types are configured.\n </Typography>\n )}\n </div>\n );\n}\n","import React from \"react\";\nimport { useFormex } from \"@firecms/formex\";\nimport {\n DeleteIcon,\n IconButton,\n Select,\n SelectItem,\n Typography,\n MultiSelect,\n MultiSelectItem,\n cls,\n defaultBorderMixin,\n DebouncedTextField,\n BooleanSwitchWithLabel\n} from \"@firecms/ui\";\nimport {\n Properties,\n Property,\n PropertyOrBuilder,\n getFieldConfig,\n DEFAULT_FIELD_CONFIGS,\n EnumValueConfig,\n isPropertyBuilder\n} from \"@firecms/core\";\nimport { PropertyWithId } from \"../../PropertyEditView\";\nimport { getPropertyPaths } from \"./property_paths\";\n\n/**\n * Enum condition types - maps to PropertyConditions structure:\n * - \"filter\" → conditions.allowedEnumValues (JSON Logic returning allowed IDs)\n * - \"exclude\" → conditions.excludedEnumValues (JSON Logic returning excluded IDs)\n */\nconst ENUM_CONDITION_TYPES = [\n { id: \"allowedEnumValues\", label: \"Filter Options\", description: \"Only show selected enum values when condition is true\" },\n { id: \"excludedEnumValues\", label: \"Exclude Options\", description: \"Hide selected enum values when condition is true\" }\n] as const;\n\ntype EnumConditionType = typeof ENUM_CONDITION_TYPES[number][\"id\"];\n\n/**\n * Operators for conditions\n */\nconst OPERATORS = [\n { id: \"==\", label: \"equals\", valueType: \"any\" },\n { id: \"!=\", label: \"not equals\", valueType: \"any\" },\n { id: \"in\", label: \"contains\", valueType: \"array\" },\n { id: \"!!\", label: \"has a value\", valueType: \"none\" },\n { id: \"!\", label: \"is empty\", valueType: \"none\" }\n] as const;\n\ntype OperatorId = typeof OPERATORS[number][\"id\"];\n\n// Context fields\nconst CONTEXT_FIELDS = [\n { id: \"isNew\", label: \"Is New Entity\", dataType: \"boolean\", color: \"#9c27b0\" },\n { id: \"entityId\", label: \"Entity ID\", dataType: \"string\", color: \"#2196f3\" },\n { id: \"user.roles\", label: \"User Roles\", dataType: \"array\", color: \"#ff9800\" }\n] as const;\n\ninterface EnumConditionConfig {\n field: string;\n operator: OperatorId;\n value: string;\n selectedEnumIds: string[];\n}\n\n/**\n * Get the property at a given path.\n * Returns undefined if the path contains a PropertyBuilder (callback).\n */\nfunction getPropertyAtPath(\n fieldPath: string,\n collectionProperties?: Properties\n): Property | undefined {\n if (!collectionProperties) return undefined;\n\n const parts = fieldPath.split(\".\");\n let current: Properties | undefined = collectionProperties;\n let property: Property | undefined;\n\n for (const part of parts) {\n if (!current) return undefined;\n const propertyOrBuilder = current[part] as PropertyOrBuilder | undefined;\n if (!propertyOrBuilder) return undefined;\n\n if (isPropertyBuilder(propertyOrBuilder)) return undefined;\n\n property = propertyOrBuilder as Property;\n\n if (property.dataType === \"map\" && property.properties) {\n current = property.properties as Properties;\n } else {\n current = undefined;\n }\n }\n\n return property;\n}\n\n/**\n * Get enum values from the current property being edited\n */\nfunction getCurrentPropertyEnumValues(values: PropertyWithId): EnumValueConfig[] {\n if (values.dataType === \"string\" && values.enumValues) {\n if (Array.isArray(values.enumValues)) {\n return values.enumValues;\n }\n return Object.entries(values.enumValues).map(([id, label]) => ({\n id,\n label: typeof label === \"string\" ? label : (label as EnumValueConfig).label\n }));\n }\n return [];\n}\n\n/**\n * Get color for a field\n */\nfunction getFieldColor(fieldPath: string, collectionProperties?: Properties): string {\n const contextField = CONTEXT_FIELDS.find(f => f.id === fieldPath);\n if (contextField) return contextField.color;\n\n if (!collectionProperties) return \"#888\";\n\n const prop = getPropertyAtPath(fieldPath, collectionProperties);\n if (!prop) return \"#888\";\n const config = getFieldConfig(prop, DEFAULT_FIELD_CONFIGS);\n return config?.color ?? \"#888\";\n}\n\n/**\n * Get enum values from a property (for the selected condition field)\n */\nfunction getFieldEnumValues(property: Property | undefined): EnumValueConfig[] {\n if (!property) return [];\n if (property.dataType === \"string\" && property.enumValues) {\n if (Array.isArray(property.enumValues)) {\n return property.enumValues;\n }\n return Object.entries(property.enumValues).map(([id, label]) => ({\n id,\n label: typeof label === \"string\" ? label : (label as EnumValueConfig).label\n }));\n }\n return [];\n}\n\n/**\n * Convert an array to an object with numeric keys for Firestore storage.\n * Firestore doesn't allow nested arrays, so we store as {\"0\": \"a\", \"1\": \"b\"}\n * The runtime will convert back via objectToArray().\n */\nfunction arrayToObject(arr: string[]): Record<string, string> {\n const result: Record<string, string> = {};\n arr.forEach((v, i) => {\n result[String(i)] = v;\n });\n return result;\n}\n\n/**\n * Build JSON Logic rule: { \"if\": [ condition, thenValue, elseValue ] }\n * When condition is true, return the selected enum IDs.\n * When false, return all enum IDs or empty (depending on type).\n * \n * IMPORTANT: We store arrays as objects with numeric keys to avoid\n * Firestore's \"Nested arrays are not supported\" error.\n */\nfunction buildEnumFilterRule(\n config: EnumConditionConfig,\n conditionType: EnumConditionType,\n allEnumIds: string[]\n): Record<string, unknown> {\n // Guard against empty field or operator which creates invalid Firestore keys\n if (!config.field || !config.operator) {\n // Return a valid default rule\n return {\n \"if\": [\n { \"!!\": { var: \"values._placeholder\" } },\n {},\n arrayToObject(allEnumIds)\n ]\n };\n }\n\n const fieldVar = config.field.startsWith(\"user.\") || config.field === \"isNew\" || config.field === \"entityId\"\n ? { var: config.field }\n : { var: `values.${config.field}` };\n\n // Build the condition\n let condition: Record<string, unknown>;\n if (config.operator === \"!!\") {\n condition = { \"!!\": fieldVar };\n } else if (config.operator === \"!\") {\n condition = { \"!\": fieldVar };\n } else {\n let parsedValue: unknown = config.value;\n if (config.value === \"true\") parsedValue = true;\n else if (config.value === \"false\") parsedValue = false;\n else if (!isNaN(Number(config.value)) && config.value !== \"\") parsedValue = Number(config.value);\n\n if (config.operator === \"in\" && typeof parsedValue === \"string\") {\n parsedValue = parsedValue.split(\",\").map(s => s.trim());\n }\n\n condition = { [config.operator]: [fieldVar, parsedValue] };\n }\n\n // For allowedEnumValues: when condition true, show selected; when false, show all\n // For excludedEnumValues: when condition true, exclude selected; when false, exclude nothing\n // Convert arrays to objects to avoid Firestore nested array error\n if (conditionType === \"allowedEnumValues\") {\n return {\n \"if\": [\n condition,\n arrayToObject(config.selectedEnumIds), // When true: only these\n arrayToObject(allEnumIds) // When false: all\n ]\n };\n } else {\n // excludedEnumValues\n return {\n \"if\": [\n condition,\n arrayToObject(config.selectedEnumIds), // When true: exclude these\n {} // When false: exclude nothing\n ]\n };\n }\n}\n\n/**\n * Convert an object with numeric keys (Firestore serialization) back to an array.\n * {\"0\": \"a\", \"1\": \"b\"} -> [\"a\", \"b\"]\n */\nfunction objectToArray(obj: unknown): string[] {\n if (Array.isArray(obj)) return obj.map(String);\n if (obj && typeof obj === \"object\") {\n const keys = Object.keys(obj);\n // Check if all keys are numeric\n if (keys.length > 0 && keys.every(k => !isNaN(Number(k)))) {\n return keys\n .sort((a, b) => Number(a) - Number(b))\n .map(k => String((obj as Record<string, unknown>)[k]));\n }\n }\n return [];\n}\n\n/**\n * Parse JSON Logic back to EnumConditionConfig\n */\nfunction parseEnumFilterRule(rule: Record<string, unknown>): EnumConditionConfig | null {\n try {\n // Expected: { \"if\": [ condition, selectedIds, fallbackIds ] }\n const ifRule = rule[\"if\"];\n if (!Array.isArray(ifRule) || ifRule.length < 2) return null;\n\n const [condition, selectedEnumIdsRaw] = ifRule;\n\n // Handle both array format and Firestore's object-with-numeric-keys format\n const selectedEnumIds = objectToArray(selectedEnumIdsRaw);\n if (selectedEnumIds.length === 0 && selectedEnumIdsRaw) {\n // If it was truthy but we got no values, parsing failed\n console.log(\"[EnumConditionsEditor] Warning: Could not parse selectedEnumIds:\", selectedEnumIdsRaw);\n }\n\n // Parse the condition\n const conditionObj = condition as Record<string, unknown>;\n const operator = Object.keys(conditionObj)[0] as OperatorId;\n const args = conditionObj[operator] as unknown;\n\n let field = \"\";\n let value = \"\";\n\n if (operator === \"!!\" || operator === \"!\") {\n const varObj = args as Record<string, string> | null;\n if (varObj?.var) {\n field = varObj.var.replace(/^values\\./, \"\");\n }\n } else if (Array.isArray(args) && args.length === 2) {\n const [left, right] = args as [Record<string, string>, unknown];\n if (left?.var) {\n field = left.var.replace(/^values\\./, \"\");\n value = Array.isArray(right) ? right.join(\", \") : String(right ?? \"\");\n }\n }\n\n return {\n field,\n operator,\n value,\n selectedEnumIds\n };\n } catch (e) {\n console.error(\"[EnumConditionsEditor] Error parsing rule:\", e);\n return null;\n }\n}\n\ninterface EnumConditionRowProps {\n conditionType: EnumConditionType;\n config: EnumConditionConfig;\n onConfigChange: (config: EnumConditionConfig) => void;\n onRemove: () => void;\n disabled: boolean;\n availableFields: string[];\n collectionProperties?: Properties;\n propertyEnumValues: EnumValueConfig[];\n showErrors: boolean;\n}\n\nfunction EnumConditionRow({\n conditionType,\n config,\n onConfigChange,\n onRemove,\n disabled,\n availableFields,\n collectionProperties,\n propertyEnumValues,\n showErrors\n}: EnumConditionRowProps) {\n const operator = OPERATORS.find(op => op.id === config.operator);\n const showValueField = operator?.valueType !== \"none\";\n\n // Get the property for the selected field\n const selectedFieldProperty = getPropertyAtPath(config.field, collectionProperties);\n const isBoolean = config.field === \"isNew\" || selectedFieldProperty?.dataType === \"boolean\";\n\n // Check if the selected field has enum values\n const fieldEnumValues = getFieldEnumValues(selectedFieldProperty);\n\n // Validation: check for incomplete condition (only show after submission attempt)\n const isFieldMissing = !config.field;\n const isValueMissing = showValueField && !config.value && config.value !== \"0\";\n const isEnumSelectionMissing = config.selectedEnumIds.length === 0;\n const hasError = showErrors && (isFieldMissing || isValueMissing || isEnumSelectionMissing);\n\n return (\n <div className={cls(\n \"p-3 bg-surface-50 dark:bg-surface-900 rounded-lg border\",\n hasError ? \"border-red-300 dark:border-red-700\" : defaultBorderMixin\n )}>\n {/* Title line */}\n <div className=\"flex items-center justify-between mb-2\">\n <Typography variant=\"label\" className=\"font-medium text-primary\">\n {ENUM_CONDITION_TYPES.find(ct => ct.id === conditionType)?.label} when\n </Typography>\n <IconButton\n onClick={onRemove}\n disabled={disabled}\n size=\"small\"\n variant=\"ghost\">\n <DeleteIcon size=\"smallest\" />\n </IconButton>\n </div>\n\n {/* Condition row: Field, Operator, Value */}\n <div className=\"flex items-center gap-2 mb-3\">\n {/* Field selector */}\n <Select\n value={config.field}\n onValueChange={(value) => onConfigChange({ ...config, field: value, value: \"\" })}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[140px]\"\n placeholder=\"Field\">\n {CONTEXT_FIELDS.map(field => (\n <SelectItem key={field.id} value={field.id}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-2 h-2 rounded-full\"\n style={{ backgroundColor: field.color }}\n />\n <span>{field.label}</span>\n </div>\n </SelectItem>\n ))}\n {availableFields.length > 0 && (\n <SelectItem value=\"_divider\" disabled>\n <span className=\"text-xs text-surface-500\">─ Fields ─</span>\n </SelectItem>\n )}\n {availableFields.map(field => (\n <SelectItem key={field} value={field}>\n <div className=\"flex items-center gap-2\">\n <div\n className=\"w-2 h-2 rounded-full\"\n style={{ backgroundColor: getFieldColor(field, collectionProperties) }}\n />\n <span>{field}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n\n {/* Operator */}\n <Select\n value={config.operator}\n onValueChange={(value) => onConfigChange({ ...config, operator: value as OperatorId })}\n disabled={disabled}\n size=\"small\"\n inputClassName=\"min-w-[100px]\">\n {OPERATORS.map(op => (\n <SelectItem key={op.id} value={op.id}>{op.label}</SelectItem>\n ))}\n </Select>\n\n {/* Value - dynamic based on field type */}\n {showValueField && (\n isBoolean ? (\n <BooleanSwitchWithLabel\n value={config.value === \"true\"}\n size=\"small\"\n position=\"start\"\n disabled={disabled}\n onValueChange={(v) => onConfigChange({ ...config, value: v ? \"true\" : \"false\" })}\n />\n ) : fieldEnumValues.length > 0 ? (\n // Show Select for enum fields\n <Select\n value={config.value}\n onValueChange={(value) => onConfigChange({ ...config, value })}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Select value...\"\n className=\"min-w-[120px]\">\n {fieldEnumValues.map(ev => (\n <SelectItem key={String(ev.id)} value={String(ev.id)}>\n {ev.label}\n </SelectItem>\n ))}\n </Select>\n ) : (\n <DebouncedTextField\n value={config.value}\n onChange={(e) => onConfigChange({ ...config, value: e.target.value })}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Value\"\n className=\"flex-1 min-w-[80px]\"\n />\n )\n )}\n </div>\n\n {/* Enum selection */}\n <div>\n <Typography variant=\"caption\" color=\"secondary\" className=\"block mb-2\">\n {conditionType === \"allowedEnumValues\" ? \"Show only:\" : \"Hide:\"}\n </Typography>\n <MultiSelect\n value={config.selectedEnumIds}\n onValueChange={(values) => onConfigChange({ ...config, selectedEnumIds: values })}\n disabled={disabled}\n size=\"small\"\n placeholder=\"Select values...\"\n useChips={true}>\n {propertyEnumValues.map(ev => (\n <MultiSelectItem key={String(ev.id)} value={String(ev.id)}>\n {ev.label}\n </MultiSelectItem>\n ))}\n </MultiSelect>\n </div>\n\n {/* Validation error message */}\n {hasError && (\n <Typography variant=\"caption\" className=\"mt-2 text-red-500 dark:text-red-400\">\n {isFieldMissing\n ? \"Please select a field for this condition\"\n : isValueMissing\n ? \"Please enter a value for this condition\"\n : \"Please select at least one value to filter\"\n }\n </Typography>\n )}\n </div>\n );\n}\n\nexport interface EnumConditionsEditorProps {\n disabled: boolean;\n collectionProperties?: Properties;\n}\n\nexport function EnumConditionsEditor({ disabled, collectionProperties }: EnumConditionsEditorProps) {\n const { values, setFieldValue, submitCount } = useFormex<PropertyWithId>();\n\n const availableFields: string[] = collectionProperties\n ? getPropertyPaths(collectionProperties)\n : [];\n\n const propertyEnumValues = getCurrentPropertyEnumValues(values);\n\n // Only show for enum properties\n if (propertyEnumValues.length === 0) {\n return null;\n }\n\n const allEnumIds = propertyEnumValues.map(ev => String(ev.id));\n\n // Get conditions from the correct path: values.conditions\n const conditions = (values as PropertyWithId & { conditions?: Record<string, unknown> }).conditions ?? {};\n\n // Parse existing enum conditions\n const activeConditions: { type: EnumConditionType; config: EnumConditionConfig }[] = [];\n\n for (const type of ENUM_CONDITION_TYPES) {\n const rule = conditions[type.id] as Record<string, unknown> | undefined;\n if (rule) {\n const config = parseEnumFilterRule(rule);\n if (config) {\n activeConditions.push({ type: type.id, config });\n }\n }\n }\n\n const handleAddCondition = (conditionType: EnumConditionType) => {\n const defaultConfig: EnumConditionConfig = {\n field: availableFields[0] ?? \"isNew\",\n operator: \"==\",\n value: \"\",\n selectedEnumIds: []\n };\n\n const rule = buildEnumFilterRule(defaultConfig, conditionType, allEnumIds);\n setFieldValue(`conditions.${conditionType}`, rule);\n };\n\n const handleConfigChange = (type: EnumConditionType, config: EnumConditionConfig) => {\n const rule = buildEnumFilterRule(config, type, allEnumIds);\n setFieldValue(`conditions.${type}`, rule);\n };\n\n const handleRemoveCondition = (type: EnumConditionType) => {\n const newConditions = { ...conditions };\n delete newConditions[type];\n if (Object.keys(newConditions).length === 0) {\n setFieldValue(\"conditions\", undefined);\n } else {\n setFieldValue(\"conditions\", newConditions);\n }\n };\n\n const availableConditionTypes = ENUM_CONDITION_TYPES.filter(\n ct => !conditions[ct.id]\n );\n\n return (\n <div className={cls(\"flex flex-col gap-4 mt-4 pt-4 border-t\", defaultBorderMixin)}>\n <Typography variant=\"label\" className=\"font-medium\">\n Enum Value Conditions\n </Typography>\n <Typography variant=\"caption\" color=\"secondary\">\n Dynamically filter which options are available.\n </Typography>\n\n {activeConditions.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n {activeConditions.map(({ type, config }) => (\n <EnumConditionRow\n key={type}\n conditionType={type}\n config={config}\n onConfigChange={(newConfig) => handleConfigChange(type, newConfig)}\n onRemove={() => handleRemoveCondition(type)}\n disabled={disabled}\n availableFields={availableFields}\n collectionProperties={collectionProperties}\n propertyEnumValues={propertyEnumValues}\n showErrors={submitCount > 0}\n />\n ))}\n </div>\n )}\n\n {availableConditionTypes.length > 0 && (\n <Select\n value=\"\"\n onValueChange={(value) => handleAddCondition(value as EnumConditionType)}\n disabled={disabled}\n size=\"small\"\n placeholder=\"+ Add enum condition...\"\n className=\"w-full max-w-xs\">\n {availableConditionTypes.map(ct => (\n <SelectItem key={ct.id} value={ct.id}>\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{ct.label}</span>\n <span className=\"text-xs text-surface-500\">{ct.description}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n )}\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 {\n ArrayProperty,\n BooleanProperty,\n DateProperty,\n MapProperty,\n mergeDeep,\n NumberProperty,\n Property,\n PropertyConfig,\n StringProperty\n} from \"@firecms/core\";\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 dataType: \"string\",\n propertyConfig: \"text_field\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"user_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"user_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined,\n userSelect: true\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multiline\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"multiline\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n multiline: true,\n storage: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"markdown\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"markdown\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: true,\n email: undefined,\n url: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"url\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"url\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: true,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"email\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"email\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: true,\n url: undefined,\n enumValues: undefined,\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: undefined,\n multiline: undefined,\n markdown: undefined,\n email: undefined,\n url: undefined,\n enumValues: propertyData.enumValues ?? [],\n userSelect: undefined\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"number_input\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_input\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: undefined\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"number\",\n propertyConfig: \"number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n enumValues: propertyData.enumValues ?? []\n } satisfies NumberProperty\n );\n } else if (selectedWidgetId === \"multi_number_select\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_number_select\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"number\",\n enumValues: propertyData.of?.enumValues ?? []\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n storage: {\n storagePath: \"/\"\n }\n } satisfies StringProperty\n );\n } else if (selectedWidgetId === \"multi_file_upload\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_file_upload\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"string\",\n storage: propertyData.of?.storage ?? {\n storagePath: \"/\"\n }\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"group\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"group\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: false,\n properties: propertyData.properties ?? {}\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"key_value\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"map\",\n propertyConfig: \"key_value\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n keyValue: true,\n properties: undefined\n } satisfies MapProperty\n );\n } else if (selectedWidgetId === \"reference\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"reference\",\n propertyConfig: \"reference\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"reference_as_string\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"string\",\n propertyConfig: \"reference_as_string\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies Property\n );\n } else if (selectedWidgetId === \"multi_references\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"multi_references\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n of: {\n dataType: \"reference\"\n }\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"switch\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"boolean\",\n propertyConfig: \"switch\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies BooleanProperty\n );\n } else if (selectedWidgetId === \"date_time\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"date\",\n propertyConfig: \"date_time\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n mode: \"date_time\"\n } satisfies DateProperty\n );\n } else if (selectedWidgetId === \"repeat\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"repeat\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true\n } satisfies ArrayProperty\n );\n } else if (selectedWidgetId === \"block\") {\n updatedProperty = mergeDeep(\n propertyData,\n {\n dataType: \"array\",\n propertyConfig: \"block\",\n editable: propertyData.editable !== undefined ? propertyData.editable : true,\n oneOf: {\n properties: {}\n }\n } satisfies 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 \"@firecms/formex\";\n\nimport { Select, SelectItem, TextField } from \"@firecms/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 urlValue = getIn(values, \"url\");\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: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"}/>\n\n </div>\n </>\n );\n}\n","import { DEFAULT_FIELD_CONFIGS, PropertyConfigId, PropertyConfig } from \"@firecms/core\";\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 \"reference_as_string\",\n \"multi_references\",\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, ...b }), {});\n","import React, { useCallback } from \"react\";\nimport { StringPropertyValidation } from \"./validation/StringPropertyValidation\";\nimport { ValidationPanel } from \"./validation/ValidationPanel\";\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\n\nimport {\n BooleanSwitchWithLabel,\n CloudUploadIcon,\n DebouncedTextField,\n ExpandablePanel,\n SettingsIcon,\n TextField,\n Typography\n} from \"@firecms/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\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) ?? \"{rand}_{file}\";\n const storagePathValue = getIn(values, storagePath) ?? \"/\";\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.html ?? true) : true;\n const transformPastedTextValue = isMarkdownObject ? (markdownValue.transformPastedText ?? 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={\"Strip HTML on paste\"}\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={\"Convert pasted text to markdown\"}\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 <CloudUploadIcon />\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\n <div className={\"col-span-12\"}>\n <Field name={fileName}\n as={DebouncedTextField}\n label={\"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={\"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={\"Max size (in bytes)\"}\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: any) => {\n setFieldValue(\"defaultValue\", e.target.value === \"\" ? undefined : e.target.value);\n }}\n label={\"Default value\"}\n value={getIn(values, \"defaultValue\") ?? \"\"} />\n\n </div>\n </>\n );\n}\n","import React, { useDeferredValue, useEffect, useRef, useState } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { Formex, FormexController, getIn, useCreateFormex } from \"@firecms/formex\";\nimport {\n ConfirmationDialog,\n DEFAULT_FIELD_CONFIGS,\n getFieldConfig,\n getFieldId,\n isPropertyBuilder,\n isValidRegExp,\n mergeDeep,\n Properties,\n Property,\n PropertyConfig,\n PropertyConfigBadge,\n PropertyConfigId,\n} from \"@firecms/core\";\nimport {\n Button,\n Card,\n cls,\n DeleteIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n fieldBackgroundDisabledMixin,\n fieldBackgroundHoverMixin,\n fieldBackgroundMixin,\n IconButton,\n InfoLabel,\n Tooltip,\n Typography,\n WarningIcon\n} from \"@firecms/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 { ConditionsPanel, ConditionsEditor, EnumConditionsEditor } from \"./properties/conditions\";\nimport { editableProperty } from \"../../utils/entities\";\nimport { KeyValuePropertyField } from \"./properties/KeyValuePropertyField\";\nimport { updatePropertyFromWidget } from \"./utils/update_property_for_widget\";\nimport { UrlPropertyField } from \"./properties/UrlPropertyField\";\nimport { supportedFields } from \"./utils/supported_fields\";\nimport { MarkdownPropertyField } from \"./properties/MarkdownPropertyField\";\n\nexport type PropertyWithId = Property & {\n id?: string\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 collectionEditable: boolean;\n /**\n * Collection properties for populating the conditions field selector.\n * Includes nested map properties.\n */\n collectionProperties?: Properties;\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 getData,\n getController,\n propertyConfigs,\n collectionEditable,\n collectionProperties\n } = props;\n\n const initialValue: PropertyWithId = {\n id: \"\",\n name: \"\"\n } as PropertyWithId;\n\n const disabled = (Boolean(property && !editableProperty(property)) || !collectionEditable);\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, ...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: {\n ...property,\n editable: property.editable ?? true\n }\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 // Exclude the current property key when editing to avoid false duplicate error\n const keysToCheck = existingPropertyKeys?.filter(key => key !== propertyKey);\n const idError = validateId(values.id, keysToCheck);\n if (idError)\n errors.id = idError;\n }\n }\n\n if (values.dataType === \"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.dataType === \"reference\" && !values.path) {\n errors.path = \"You must specify a target collection for the field\";\n }\n if (values.propertyConfig === \"repeat\") {\n if (!(values as any).of) {\n errors.of = \"You need to specify a repeat field\";\n }\n }\n if (values.propertyConfig === \"block\") {\n if (!(values as any).oneOf) {\n errors.oneOf = \"You need to specify the properties of this block\";\n }\n }\n\n // Validate conditions - check for incomplete condition rules\n const conditions = (values as any).conditions;\n if (conditions) {\n const conditionErrors: Record<string, string> = {};\n const conditionTypes = [\"disabled\", \"hidden\", \"required\", \"readOnly\"];\n\n // Helper to check if a JSON Logic rule is incomplete (placeholder or empty keys)\n const isIncompleteRule = (rule: any): boolean => {\n if (!rule || typeof rule !== \"object\") return false;\n const ruleStr = JSON.stringify(rule);\n // Check for placeholder pattern used when field is not selected\n if (ruleStr.includes(\"values._placeholder\")) return true;\n // Check for empty string keys (invalid operators)\n if (Object.keys(rule).some(k => k === \"\")) return true;\n // Recursively check nested objects\n for (const key of Object.keys(rule)) {\n if (typeof rule[key] === \"object\" && isIncompleteRule(rule[key])) return true;\n }\n return false;\n };\n\n for (const type of conditionTypes) {\n const rule = conditions[type];\n if (rule && isIncompleteRule(rule)) {\n conditionErrors[type] = \"Incomplete condition - please select a field\";\n }\n }\n\n // Validate enum conditions (allowedEnumValues, excludedEnumValues)\n for (const enumType of [\"allowedEnumValues\", \"excludedEnumValues\"]) {\n const rule = conditions[enumType];\n if (rule && typeof rule === \"object\" && rule.if) {\n if (isIncompleteRule(rule)) {\n conditionErrors[enumType] = \"Incomplete condition - please select a field\";\n }\n }\n }\n\n if (Object.keys(conditionErrors).length > 0) {\n errors.conditions = conditionErrors;\n }\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 collectionEditable={collectionEditable}\n collectionProperties={collectionProperties}\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 equal(a.property, b.property)\n);\n\nexport function PropertyFormDialog({\n open,\n onCancel,\n onOkClicked,\n onPropertyChanged,\n getData,\n collectionEditable,\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 collectionEditable={collectionEditable}\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 collectionEditable,\n collectionProperties\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 collectionEditable: boolean;\n collectionProperties?: Properties;\n} & FormexController<PropertyWithId>) {\n\n const [selectOpen, setSelectOpen] = useState(autoOpenTypeSelect);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [selectedFieldConfigId, setSelectedFieldConfigId] = useState<string | undefined>(values?.dataType ? 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 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 collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs} />;\n } else if (selectedFieldConfigId === \"block\") {\n childComponent =\n <BlockPropertyField disabled={disabled} getData={getData} allowDataInference={allowDataInference}\n collectionEditable={collectionEditable}\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 === \"reference_as_string\") {\n childComponent =\n <ReferencePropertyField showErrors={showErrors}\n existing={existing}\n asString={true}\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 collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs} />;\n } else if (selectedFieldConfigId === \"key_value\") {\n childComponent =\n <KeyValuePropertyField disabled={disabled} />;\n } else {\n childComponent = null;\n }\n\n return (\n <>\n {disabled && <InfoLabel mode={\"warn\"}>\n <Typography>This property can't be edited</Typography>\n <Typography variant={\"caption\"}>\n You may not have permission to\n edit it or it is defined in code with the <code>editable</code> flag set to <code>false</code>.\n </Typography>\n </InfoLabel>}\n\n <div className=\"flex mt-2 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\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 && existing && values?.id &&\n <IconButton\n variant={\"ghost\"}\n className=\"m-4\"\n disabled={disabled}\n onClick={() => setDeleteDialogOpen(true)}>\n <DeleteIcon />\n </IconButton>}\n </div>\n\n <div className={\"grid grid-cols-12 gap-y-12 mt-8 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 <div className={\"col-span-12\"}>\n <AdvancedPropertyValidation disabled={disabled} />\n </div>\n\n <div className={\"col-span-12\"}>\n <ConditionsPanel>\n <ConditionsEditor disabled={disabled} collectionProperties={collectionProperties} />\n <EnumConditionsEditor disabled={disabled} collectionProperties={collectionProperties} />\n </ConditionsPanel>\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 reference: \"Reference\",\n reference_as_string: \"Text\",\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};\n\nfunction WidgetSelectView({\n initialProperty,\n value,\n onValueChange,\n open,\n onOpenChange,\n disabled,\n showError,\n existing,\n propertyConfigs,\n inArray\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}) {\n\n const allSupportedFields = Object.entries(supportedFields).concat(Object.entries(propertyConfigs));\n\n const displayedWidgets = (inArray\n ? allSupportedFields.filter(([_, propertyConfig]) => !isPropertyBuilder(propertyConfig.property) && propertyConfig.property?.dataType !== \"array\")\n : allSupportedFields)\n .map(([key, propertyConfig]) => ({\n [key]: propertyConfig\n }))\n .reduce((a, b) => {\n return {\n ...a,\n ...b\n }\n }, {});\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) ? getFieldConfig(baseProperty, 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 p-4\",\n fieldBackgroundMixin,\n disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin,\n \"relative flex items-center\",\n )}>\n {!value && <em>Select a property widget</em>}\n {value && computedFieldConfig && <div\n className={cls(\n \"flex items-center\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={computedFieldConfig} />\n </div>\n <div className={\"flex flex-col items-start text-base text-left\"}>\n <div>{computedFieldConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n {computedFieldConfig.description}\n </Typography>\n </div>\n </div>}\n </div>\n <Dialog open={open}\n onOpenChange={(open) => onOpenChange(open, Boolean(value))}\n maxWidth={\"4xl\"}>\n <DialogTitle>\n Select a property widget\n </DialogTitle>\n <DialogContent>\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 </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 shouldWarnChangingDataType = existing && !isPropertyBuilder(baseProperty) && baseProperty.dataType !== initialProperty?.dataType;\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={shouldWarnChangingDataType} />\n </div>\n <div>\n <div className={\"flex flex-row gap-2 items-center\"}>\n {shouldWarnChangingDataType && <Tooltip\n title={\"This widget uses a different data type than the initially selected widget. This can cause errors with existing data.\"}>\n <WarningIcon size=\"smallest\" className={\"w-4\"} />\n </Tooltip>}\n <Typography\n variant={\"label\"}\n color={shouldWarnChangingDataType ? \"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","import React, { useMemo, useRef, useState } from \"react\";\nimport {\n EntityCollection,\n FieldCaption,\n getFieldConfig,\n Property,\n PropertyConfigBadge,\n resolveCollection,\n unslugify,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n CloseIcon,\n IconButton,\n Select,\n SelectItem,\n Typography\n} from \"@firecms/ui\";\nimport { useFormex } from \"@firecms/formex\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\n\nexport function KanbanConfigSection({\n className,\n forceExpanded\n}: {\n className?: string;\n forceExpanded?: boolean;\n}) {\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n const { values, setFieldValue } = useFormex<EntityCollection>();\n const panelRef = useRef<HTMLDivElement>(null);\n const [columnPropertyDialogOpen, setColumnPropertyDialogOpen] = useState(false);\n\n // Resolve collection to get properties\n const resolvedCollection = useMemo(() => resolveCollection({\n collection: values,\n path: values.path,\n propertyConfigs: customizationController.propertyConfigs,\n authController\n }), [values, customizationController.propertyConfigs, authController]);\n\n // Get enum string properties (for columnProperty)\n const enumStringProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property }[] = [];\n if (!resolvedCollection.properties) return result;\n\n Object.entries(resolvedCollection.properties).forEach(([key, prop]) => {\n if (prop && 'dataType' in prop && prop.dataType === 'string' && prop.enumValues) {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [resolvedCollection.properties]);\n\n const kanbanConfig = values.kanban;\n\n // Check if columnProperty references a non-existent property\n const columnPropertyMissing = Boolean(kanbanConfig?.columnProperty) &&\n !enumStringProperties.some(p => p.key === kanbanConfig?.columnProperty);\n\n // Scroll to section when forceExpanded\n React.useEffect(() => {\n if (forceExpanded && panelRef.current) {\n setTimeout(() => {\n panelRef.current?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }, 100);\n }\n }, [forceExpanded]);\n\n const showCreateButton = !kanbanConfig?.columnProperty || columnPropertyMissing;\n const dialogPropertyKey = columnPropertyMissing && kanbanConfig?.columnProperty\n ? kanbanConfig.columnProperty\n : \"status\";\n const dialogPropertyName = columnPropertyMissing && kanbanConfig?.columnProperty\n ? unslugify(kanbanConfig.columnProperty)\n : \"Status\";\n\n return (\n <div className={className} ref={panelRef}>\n <Select\n key={`column-select-${enumStringProperties.length}`}\n name=\"kanban.columnProperty\"\n label=\"Kanban Column Property\"\n size={\"large\"}\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={enumStringProperties.length === 0}\n error={columnPropertyMissing}\n value={kanbanConfig?.columnProperty ?? \"\"}\n onValueChange={(v) => {\n if (v) {\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: v\n });\n } else {\n setFieldValue(\"kanban\", undefined);\n }\n }}\n renderValue={(value) => {\n if (columnPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = enumStringProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={kanbanConfig?.columnProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"kanban\", undefined);\n }}\n >\n <CloseIcon size=\"small\" />\n </IconButton>\n ) : undefined}\n >\n {enumStringProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Enum\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={columnPropertyMissing}>\n {columnPropertyMissing\n ? `Property \"${kanbanConfig?.columnProperty}\" does not exist or is not an enum string property. Please select a valid property or clear the selection.`\n : enumStringProperties.length === 0\n ? \"No enum string properties found. Add a string property with enumValues to use Kanban view.\"\n : \"Select a string property with enum values to group entities into columns\"\n }\n </FieldCaption>\n\n {showCreateButton && (\n <>\n <button\n type=\"button\"\n className=\"ml-3.5 text-sm text-primary hover:text-primary-dark mt-2\"\n onClick={() => setColumnPropertyDialogOpen(true)}\n >\n + Create \"{dialogPropertyKey}\" property\n </button>\n <PropertyFormDialog\n open={columnPropertyDialogOpen}\n onCancel={() => setColumnPropertyDialogOpen(false)}\n property={{\n dataType: \"string\",\n name: dialogPropertyName,\n enumValues: [\n { id: \"todo\", label: \"To Do\" },\n { id: \"in_progress\", label: \"In Progress\" },\n { id: \"done\", label: \"Done\" }\n ]\n }}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n collectionEditable={true}\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"kanban\", {\n ...kanbanConfig,\n columnProperty: id\n });\n setColumnPropertyDialogOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport {\n EntityCollection,\n FieldCaption,\n getFieldConfig,\n Property,\n PropertyConfigBadge,\n resolveCollection,\n unslugify,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n BooleanSwitchWithLabel,\n CloseIcon,\n Container,\n IconButton,\n Select,\n SelectItem,\n TextField,\n Typography\n} from \"@firecms/ui\";\n\nimport { useFormex } from \"@firecms/formex\";\nimport { LayoutModeSwitch } from \"./LayoutModeSwitch\";\nimport { ViewModeSwitch } from \"./ViewModeSwitch\";\nimport { KanbanConfigSection } from \"./KanbanConfigSection\";\nimport { PropertyFormDialog } from \"./PropertyEditView\";\n\nexport function DisplaySettingsForm({\n expandKanban\n}: {\n expandKanban?: boolean;\n}) {\n\n const {\n values,\n setFieldValue,\n handleChange,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [orderPropertyDialogOpen, setOrderPropertyDialogOpen] = useState(false);\n\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n\n // Resolve collection to get properties for order property select\n const resolvedCollection = useMemo(() => resolveCollection({\n collection: values,\n path: values.path,\n propertyConfigs: customizationController.propertyConfigs,\n authController\n }), [values, customizationController.propertyConfigs, authController]);\n\n // Get number properties (for orderProperty)\n const numberProperties = useMemo(() => {\n const result: { key: string; label: string; property: Property; }[] = [];\n if (!resolvedCollection.properties) return result;\n\n Object.entries(resolvedCollection.properties).forEach(([key, prop]) => {\n if (prop && 'dataType' in prop && prop.dataType === 'number') {\n result.push({\n key,\n label: (prop as Property).name || key,\n property: prop as Property\n });\n }\n });\n return result;\n }, [resolvedCollection.properties]);\n\n const showErrors = submitCount > 0;\n\n // Document ID generation value\n let customIdValue: \"true\" | \"false\" | \"optional\" | \"code_defined\" | undefined;\n if (typeof values.customId === \"object\") {\n customIdValue = \"code_defined\";\n } else if (values.customId === true) {\n customIdValue = \"true\";\n } else if (values.customId === false) {\n customIdValue = \"false\";\n } else if (values.customId === \"optional\") {\n customIdValue = \"optional\";\n }\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div>\n <Typography variant={\"h5\"} className={\"flex-grow\"}>\n Display settings\n </Typography>\n </div>\n\n <div className={\"grid grid-cols-12 gap-4\"}>\n\n {/* Layout Mode (Side dialog vs Full screen) */}\n <LayoutModeSwitch\n className={\"col-span-12\"}\n value={values.openEntityMode ?? \"side_panel\"}\n onChange={(value) => setFieldValue(\"openEntityMode\", value)} />\n\n {/* View Mode (Table/Cards/Kanban) */}\n <ViewModeSwitch\n className={\"col-span-12\"}\n value={values.defaultViewMode ?? \"table\"}\n onChange={(value) => setFieldValue(\"defaultViewMode\", value)} />\n\n {/* Kanban Column Property */}\n <KanbanConfigSection className={\"col-span-12\"} forceExpanded={expandKanban} />\n\n {/* Order Property */}\n <div className={\"col-span-12 mt-4\"}>\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !numberProperties.some(p => p.key === values.orderProperty);\n\n return (\n <>\n <Select\n key={`order-select-${numberProperties.length}`}\n name=\"orderProperty\"\n label=\"Order Property\"\n size={\"large\"}\n fullWidth={true}\n position={\"item-aligned\"}\n disabled={numberProperties.length === 0}\n error={orderPropertyMissing}\n value={values.orderProperty ?? \"\"}\n onValueChange={(v) => {\n setFieldValue(\"orderProperty\", v || undefined);\n }}\n renderValue={(value) => {\n if (orderPropertyMissing) {\n return <span className=\"text-red-500\">{value} (not found)</span>;\n }\n const prop = numberProperties.find(p => p.key === value);\n if (!prop) return \"Select a property\";\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <div className=\"flex items-center gap-2\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <span>{prop.label}</span>\n </div>\n );\n }}\n endAdornment={values.orderProperty ? (\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setFieldValue(\"orderProperty\", undefined);\n }}\n >\n <CloseIcon size=\"small\" />\n </IconButton>\n ) : undefined}\n >\n {numberProperties.map((prop) => {\n const fieldConfig = getFieldConfig(prop.property, customizationController.propertyConfigs);\n return (\n <SelectItem key={prop.key} value={prop.key}>\n <div className=\"flex items-center gap-3\">\n <PropertyConfigBadge propertyConfig={fieldConfig} />\n <div>\n <div>{prop.label}</div>\n <Typography variant=\"caption\" color=\"secondary\">\n {fieldConfig?.name || \"Number\"}\n </Typography>\n </div>\n </div>\n </SelectItem>\n );\n })}\n </Select>\n <FieldCaption error={orderPropertyMissing}>\n {orderPropertyMissing\n ? `Property \"${values.orderProperty}\" does not exist or is not a number property. Please select a valid property or clear the selection.`\n : numberProperties.length === 0\n ? \"No number properties found. Add a number property to enable ordering.\"\n : \"Select a number property to persist the order of items\"\n }\n </FieldCaption>\n </>\n );\n })()}\n {(() => {\n const orderPropertyMissing = Boolean(values.orderProperty) &&\n !numberProperties.some(p => p.key === values.orderProperty);\n const showCreateButton = !values.orderProperty || orderPropertyMissing;\n\n const dialogPropertyKey = orderPropertyMissing && values.orderProperty\n ? values.orderProperty\n : \"__order\";\n const dialogPropertyName = orderPropertyMissing && values.orderProperty\n ? unslugify(values.orderProperty)\n : \"Order\";\n\n if (!showCreateButton) return null;\n\n return (\n <>\n <button\n type=\"button\"\n className=\"ml-3.5 text-sm text-primary hover:text-primary-dark mt-2\"\n onClick={() => setOrderPropertyDialogOpen(true)}\n >\n + Create \"{dialogPropertyKey}\" property\n </button>\n <PropertyFormDialog\n open={orderPropertyDialogOpen}\n onCancel={() => setOrderPropertyDialogOpen(false)}\n property={{\n dataType: \"number\",\n name: dialogPropertyName,\n disabled: true,\n hideFromCollection: true\n }}\n propertyKey={dialogPropertyKey}\n existingProperty={false}\n autoOpenTypeSelect={false}\n autoUpdateId={false}\n inArray={false}\n allowDataInference={false}\n propertyConfigs={customizationController.propertyConfigs}\n collectionEditable={true}\n existingPropertyKeys={Object.keys(values.properties ?? {})}\n onPropertyChanged={({ id, property }) => {\n const newProperties = {\n ...values.properties,\n [id!]: property\n };\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties ?? {})), id];\n setFieldValue(\"properties\", newProperties);\n setFieldValue(\"propertiesOrder\", newPropertiesOrder);\n setFieldValue(\"orderProperty\", id);\n setOrderPropertyDialogOpen(false);\n }}\n />\n </>\n );\n })()}\n </div>\n\n {/* Default row size */}\n <div className={\"col-span-12\"}>\n <Select\n name=\"defaultSize\"\n size={\"large\"}\n fullWidth={true}\n label=\"Default row size\"\n position={\"item-aligned\"}\n onChange={handleChange}\n value={values.defaultSize ?? \"\"}\n renderValue={(value: any) => value.toUpperCase()}\n >\n {[\"xs\", \"s\", \"m\", \"l\", \"xl\"].map((value) => (\n <SelectItem\n key={`size-select-${value}`}\n value={value}>\n {value.toUpperCase()}\n </SelectItem>\n ))}\n </Select>\n </div>\n\n {/* Side dialog width */}\n <div className={\"col-span-12\"}>\n <TextField\n name={\"sideDialogWidth\"}\n type={\"number\"}\n aria-describedby={\"sideDialogWidth-helper\"}\n onChange={(e) => {\n const value = e.target.value;\n if (!value) {\n setFieldValue(\"sideDialogWidth\", null);\n } else if (!isNaN(Number(value))) {\n setFieldValue(\"sideDialogWidth\", Number(value));\n }\n }}\n endAdornment={<IconButton\n size={\"small\"}\n onClick={() => {\n setFieldValue(\"sideDialogWidth\", null);\n }}\n disabled={!values.sideDialogWidth}>\n <CloseIcon size={\"small\"} />\n </IconButton>}\n value={values.sideDialogWidth ?? \"\"}\n label={\"Side dialog width\"} />\n <FieldCaption>\n Optionally define the width (in pixels) of entities side dialog. Default is 768px\n </FieldCaption>\n </div>\n\n {/* Inline editing */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label={values.inlineEditing === undefined || values.inlineEditing ? \"Data can be edited directly in the table view\" : \"Data can be edited only in the form view\"}\n onValueChange={(v) => setFieldValue(\"inlineEditing\", v)}\n value={values.inlineEditing === undefined ? true : values.inlineEditing}\n />\n <FieldCaption>\n Allow editing data directly in the table view, without opening the form view.\n </FieldCaption>\n </div>\n\n {/* Include JSON view */}\n <div className={\"col-span-12\"}>\n <BooleanSwitchWithLabel\n position={\"start\"}\n size={\"large\"}\n label={values.includeJsonView === undefined || values.includeJsonView ? \"Include JSON view\" : \"Do not include JSON view\"}\n onValueChange={(v) => setFieldValue(\"includeJsonView\", v)}\n value={values.includeJsonView === undefined ? true : values.includeJsonView}\n />\n <FieldCaption>\n Include the JSON representation of the document.\n </FieldCaption>\n </div>\n\n </div>\n\n <div style={{ height: \"52px\" }} />\n\n </Container>\n </div>\n );\n}\n","export function camelCase(str: string): string {\n if (!str) return \"\";\n if (str.length === 1) return str.toLowerCase();\n\n // Split by hyphens, underscores, or spaces and filter out empty strings\n const parts = str.split(/[-_ ]+/).filter(Boolean);\n\n if (parts.length === 0) return \"\";\n\n // Start with first part in lowercase\n return parts[0].toLowerCase() +\n // Transform remaining parts to have first letter uppercase\n parts.slice(1)\n .map(part => part.charAt(0).toUpperCase() + part.substring(1).toLowerCase())\n .join('');\n}\n","import { EntityCollection, isEmptyObject, useSnackbarController } from \"@firecms/core\";\nimport { Button, ContentCopyIcon, Dialog, DialogActions, DialogContent, DialogTitle, Tab, Tabs, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport JSON5 from \"json5\";\nimport { Highlight, themes } from \"prism-react-renderer\"\nimport { camelCase } from \"./utils/strings\";\nimport { clone } from \"@firecms/formex\";\n\nexport function GetCodeDialog({\n collection,\n onOpenChange,\n open\n}: { onOpenChange: (open: boolean) => void, collection: any, open: any }) {\n\n const snackbarController = useSnackbarController();\n const [format, setFormat] = useState<\"ts\" | \"json\">(\"json\");\n\n const collectionData = collectionToCode({ ...collection });\n\n const tsCode = collection\n ? \"import { EntityCollection } from \\\"@firecms/core\\\";\\n\\nconst \" + (collection?.name ? camelCase(collection.name) : \"my\") + \"Collection:EntityCollection = \" + JSON5.stringify(collectionData, null, \"\\t\")\n : \"No collection selected\";\n\n const jsonCode = collection\n ? JSON.stringify(collectionData, null, 2)\n : \"No collection selected\";\n\n const code = format === \"ts\" ? tsCode : jsonCode;\n\n return <Dialog open={open}\n onOpenChange={onOpenChange}\n maxWidth={\"4xl\"}>\n <div className=\"flex items-center justify-between pr-6\">\n <DialogTitle variant={\"h6\"}>Code for {collection.name}</DialogTitle>\n <Tabs value={format} onValueChange={(v) => setFormat(v as \"ts\" | \"json\")}>\n <Tab value=\"ts\">TypeScript</Tab>\n <Tab value=\"json\">JSON</Tab>\n </Tabs>\n </div>\n <DialogContent>\n\n <Typography variant={\"body2\"} className={\"mb-4\"}>\n {format === \"json\"\n ? \"Use this config to define the collection in JSON format.\"\n : <>\n If you want to customise the collection in code, you can add this collection code to your CMS\n app configuration.\n More info in the <a\n rel=\"noopener noreferrer\"\n href={\"https://firecms.co/docs/cloud/quickstart\"}>docs</a>.\n </>}\n </Typography>\n <Highlight\n theme={themes.vsDark}\n code={code}\n language={format === \"ts\" ? \"typescript\" : \"json\"}\n >\n {({\n className,\n style,\n tokens,\n getLineProps,\n getTokenProps\n }) => (\n <pre style={style} className={\"p-4 rounded text-sm\"}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })} />\n ))}\n </div>\n ))}\n </pre>\n )}\n </Highlight>\n\n </DialogContent>\n <DialogActions>\n <Button\n variant={\"text\"}\n size={\"small\"}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n snackbarController.open({\n type: \"success\",\n message: \"Copied\"\n })\n return navigator.clipboard.writeText(code);\n }}>\n <ContentCopyIcon size={\"small\"} />\n Copy to clipboard\n </Button>\n <Button onClick={() => onOpenChange(false)}>Close</Button>\n </DialogActions>\n </Dialog>;\n}\n\nfunction collectionToCode(collection: EntityCollection): object {\n\n const propertyCleanup = (value: any): any => {\n if (value === undefined || value === null) {\n return value;\n }\n const valueCopy = clone(value);\n if (typeof valueCopy === \"function\") {\n return valueCopy;\n }\n if (Array.isArray(valueCopy)) {\n return valueCopy.map((v: any) => propertyCleanup(v));\n }\n if (typeof valueCopy === \"object\") {\n if (valueCopy === null)\n return valueCopy;\n Object.keys(valueCopy).forEach((key) => {\n if (!isEmptyObject(valueCopy)) {\n const childRes = propertyCleanup(valueCopy[key]);\n if (childRes !== null && childRes !== undefined && childRes !== false && !isEmptyObject(childRes)) {\n valueCopy[key] = childRes;\n } else {\n delete valueCopy[key];\n }\n }\n });\n delete valueCopy.fromBuilder;\n delete valueCopy.resolved;\n delete valueCopy.propertiesOrder;\n delete valueCopy.propertyConfig;\n delete valueCopy.resolvedProperties;\n delete valueCopy.editable;\n\n }\n\n return valueCopy;\n }\n\n return {\n id: collection.id,\n name: collection.name,\n singularName: collection.singularName,\n path: collection.path,\n description: collection.description,\n editable: true,\n collectionGroup: collection.collectionGroup,\n icon: collection.icon,\n group: collection.group,\n customId: collection.customId,\n initialFilter: collection.initialFilter,\n initialSort: collection.initialSort,\n properties: Object.entries({\n ...(collection.properties ?? {})\n })\n .map(([key, value]) => ({\n [key]: propertyCleanup(value)\n }))\n .reduce((a, b) => ({\n ...a,\n ...b\n }), {}),\n subcollections: (collection.subcollections ?? []).map(collectionToCode)\n }\n\n}\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport { Field, getIn, useFormex } from \"@firecms/formex\";\nimport {\n EntityCollection,\n ErrorBoundary,\n isPropertyBuilder,\n makePropertiesEditable,\n MapProperty,\n Properties,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n useLargeLayout,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Button,\n CircularProgress,\n cls,\n CodeIcon,\n DebouncedTextField,\n defaultBorderMixin,\n FindInPageIcon,\n IconButton,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\n\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"./util\";\nimport { OnPropertyChangedParams, PropertyForm, PropertyFormDialog } from \"./PropertyEditView\";\nimport { PropertyTree } from \"./PropertyTree\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { GetCodeDialog } from \"./GetCodeDialog\";\nimport { useAIModifiedPaths } from \"./AIModifiedPathsContext\";\n\ntype CollectionEditorFormProps = {\n showErrors: boolean;\n isNewCollection: boolean;\n propertyErrorsRef?: React.MutableRefObject<any>;\n onPropertyError: (propertyKey: string, namespace: string | undefined, error?: Record<string, any>) => void;\n setDirty?: (dirty: boolean) => void;\n reservedGroups?: string[];\n extraIcon: React.ReactNode;\n getUser?: (uid: string) => User | null;\n getData?: () => Promise<object[]>;\n doCollectionInference?: (collection: PersistedCollection) => Promise<Partial<EntityCollection> | null> | undefined;\n propertyConfigs: Record<string, PropertyConfig>;\n collectionEditable: boolean;\n};\n\nexport function CollectionPropertiesEditorForm({\n showErrors,\n isNewCollection,\n propertyErrorsRef,\n onPropertyError,\n setDirty,\n reservedGroups,\n extraIcon,\n getUser,\n getData,\n doCollectionInference,\n propertyConfigs,\n collectionEditable\n}: CollectionEditorFormProps) {\n\n const {\n values,\n setFieldValue,\n setFieldError,\n setFieldTouched,\n errors,\n dirty\n } = useFormex<PersistedCollection>();\n\n const snackbarController = useSnackbarController();\n\n const largeLayout = useLargeLayout();\n const asDialog = !largeLayout\n\n // index of the selected property within the namespace\n const [selectedPropertyIndex, setSelectedPropertyIndex] = useState<number | undefined>();\n const [selectedPropertyKey, setSelectedPropertyKey] = useState<string | undefined>();\n const [selectedPropertyNamespace, setSelectedPropertyNamespace] = useState<string | undefined>();\n\n const selectedPropertyFullId = selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined;\n const selectedProperty = selectedPropertyFullId ? getIn(values.properties, selectedPropertyFullId.replaceAll(\".\", \".properties.\")) : undefined;\n const [codeDialogOpen, setCodeDialogOpen] = useState<boolean>(false);\n\n const [inferringProperties, setInferringProperties] = useState<boolean>(false);\n\n const [newPropertyDialogOpen, setNewPropertyDialogOpen] = useState<boolean>(false);\n const [inferredPropertyKeys, setInferredPropertyKeys] = useState<string[]>([]);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n useEffect(() => {\n if (setDirty)\n setDirty(dirty);\n }, [dirty]);\n\n const inferPropertiesFromData = doCollectionInference\n ? (): void => {\n if (!doCollectionInference)\n return;\n\n setInferringProperties(true);\n\n console.debug(\"CollectionEditor: inferring properties from data\", values);\n // @ts-ignore\n doCollectionInference(values)\n .then((newCollection) => {\n\n if (newCollection)\n makePropertiesEditable(newCollection.properties as Properties);\n\n if (!newCollection) {\n snackbarController.open({\n type: \"error\",\n message: \"Could not infer properties from data\"\n });\n return;\n }\n\n // Helper function to find all new property keys including nested ones\n const findNewPropertyKeys = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined,\n namespace?: string\n ): string[] => {\n if (!newProps) return [];\n const keys: string[] = [];\n\n for (const key of Object.keys(newProps)) {\n const fullKey = namespace ? `${namespace}.${key}` : key;\n const existingProp = existingProps?.[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This is a completely new property\n keys.push(fullKey);\n } else if (\n typeof newProp === \"object\" &&\n \"dataType\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // This is a map property, check for new nested properties\n const existingMapProps = typeof existingProp === \"object\" &&\n \"dataType\" in existingProp &&\n existingProp.dataType === \"map\"\n ? (existingProp as any).properties\n : undefined;\n keys.push(...findNewPropertyKeys(existingMapProps, newProp.properties as Record<string, PropertyOrBuilder>, fullKey));\n }\n }\n return keys;\n };\n\n // Helper function to add only new properties without overwriting existing ones\n // This preserves existing property configurations while adding missing nested properties\n const addNewPropertiesOnly = (\n existingProps: Record<string, PropertyOrBuilder> | undefined,\n newProps: Record<string, PropertyOrBuilder> | undefined\n ): Record<string, PropertyOrBuilder> => {\n if (!newProps) return existingProps ?? {};\n if (!existingProps) return newProps;\n\n const result = { ...existingProps };\n\n for (const key of Object.keys(newProps)) {\n const existingProp = existingProps[key];\n const newProp = newProps[key];\n\n if (!existingProp) {\n // This property doesn't exist, add it\n result[key] = newProp;\n } else if (\n typeof existingProp === \"object\" &&\n \"dataType\" in existingProp &&\n existingProp.dataType === \"map\" &&\n typeof newProp === \"object\" &&\n \"dataType\" in newProp &&\n newProp.dataType === \"map\" &&\n newProp.properties\n ) {\n // Both are map properties, recursively add new nested properties\n // Only if the existing map has properties, merge them; otherwise keep existing as-is\n const existingMapProps = (existingProp as MapProperty).properties as Record<string, PropertyOrBuilder> | undefined;\n if (existingMapProps) {\n result[key] = {\n ...existingProp,\n properties: addNewPropertiesOnly(\n existingMapProps,\n newProp.properties as Record<string, PropertyOrBuilder>\n )\n };\n }\n // If existingProp doesn't have properties, keep it as-is (don't overwrite with inferred)\n }\n // Otherwise, keep the existing property as-is (don't overwrite)\n }\n\n return result;\n };\n\n // Add only new properties from inferred collection without replacing existing ones\n const updatedProperties = addNewPropertiesOnly(\n values.properties ?? {},\n newCollection.properties as Record<string, PropertyOrBuilder>\n ) as { [key: string]: PropertyOrBuilder };\n\n // Find all new property keys including nested ones\n const allNewPropertyKeys = findNewPropertyKeys(\n values.properties,\n newCollection.properties as Record<string, PropertyOrBuilder>\n );\n\n // Find new top-level property keys for the properties order\n const newTopLevelPropertyKeys = (newCollection.properties ? Object.keys(newCollection.properties) : [])\n .filter((propertyKey) => !values.properties[propertyKey]);\n\n // Check if there are any changes (new properties or modified nested properties)\n if (allNewPropertyKeys.length === 0) {\n snackbarController.open({\n type: \"info\",\n message: \"No new properties found in existing data\"\n });\n return;\n }\n\n // Update properties order: keep existing order and append new keys at the beginning\n // Use Object.keys from updatedProperties to ensure all properties are included\n const allExistingKeys = values.propertiesOrder ?? Object.keys(values.properties ?? {});\n const updatedPropertiesOrder = [\n ...newTopLevelPropertyKeys,\n ...allExistingKeys.filter(key => !newTopLevelPropertyKeys.includes(key))\n ];\n\n setFieldValue(\"properties\", updatedProperties, false);\n updatePropertiesOrder(updatedPropertiesOrder);\n setInferredPropertyKeys(allNewPropertyKeys);\n\n snackbarController.open({\n type: \"success\",\n message: `Added ${allNewPropertyKeys.length} new ${allNewPropertyKeys.length === 1 ? \"property\" : \"properties\"}`\n });\n })\n .finally(() => {\n setInferringProperties(false);\n })\n }\n : undefined;\n\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"] ?? getIn(values, namespaceToPropertiesOrderPath());\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n };\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n const deleteProperty = (propertyKey?: string, namespace?: string) => {\n const fullId = propertyKey ? getFullId(propertyKey, namespace) : undefined;\n if (!fullId)\n throw Error(\"collection editor miss config\");\n\n setFieldValue(idToPropertiesPath(fullId), undefined, false);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n if (currentPropertiesOrder) {\n const newPropertiesOrder = currentPropertiesOrder.filter((p) => p !== propertyKey);\n updatePropertiesOrder(newPropertiesOrder, namespace);\n }\n\n setNewPropertyDialogOpen(false);\n\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyMove = (propertiesOrder: string[], namespace?: string) => {\n setFieldValue(namespaceToPropertiesOrderPath(namespace), propertiesOrder, false);\n };\n\n const onPropertyCreated = ({\n id,\n property\n }: {\n id?: string,\n property: Property\n }) => {\n if (!id) {\n throw Error(\"Need to include an ID when creating a new property\")\n }\n setFieldValue(\"properties\", {\n ...(values.properties ?? {}),\n [id]: property\n }, false);\n\n const newPropertiesOrder = [...(values.propertiesOrder ?? Object.keys(values.properties)), id];\n updatePropertiesOrder(newPropertiesOrder);\n\n setNewPropertyDialogOpen(false);\n if (largeLayout) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setSelectedPropertyNamespace(undefined);\n };\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n if (id) {\n setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n setSelectedPropertyKey(id);\n }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n\n };\n\n const onPropertyErrorInternal = (id: string, namespace?: string, error?: Record<string, any>) => {\n const propertyPath = id ? getFullId(id, namespace) : undefined;\n console.debug(\"onPropertyErrorInternal\", {\n id,\n namespace,\n error,\n propertyPath\n });\n if (propertyPath) {\n const hasError = error && Object.keys(error).length > 0;\n onPropertyError(id, namespace, hasError ? error : undefined);\n setFieldError(idToPropertiesPath(propertyPath), hasError ? \"Property error\" : undefined);\n }\n }\n\n const closePropertyDialog = () => {\n setSelectedPropertyIndex(undefined);\n setSelectedPropertyKey(undefined);\n };\n\n const initialErrors = selectedPropertyKey && propertyErrorsRef?.current?.properties ? propertyErrorsRef.current.properties[selectedPropertyKey] : undefined;\n\n const emptyCollection = values?.propertiesOrder === undefined || values.propertiesOrder.length === 0;\n\n const usedPropertiesOrder = (values.propertiesOrder\n ? values.propertiesOrder\n : Object.keys(values.properties)) as string[];\n\n const owner = useMemo(() => values.ownerId && getUser ? getUser(values.ownerId) : null, [getUser, values.ownerId]);\n\n // Get AI generation counter for key to force remount on AI changes\n const aiModifiedPaths = useAIModifiedPaths();\n const generationCounter = aiModifiedPaths?.generationCounter ?? 0;\n\n const onPropertyClick = (propertyKey: string, namespace?: string) => {\n console.debug(\"CollectionEditor: onPropertyClick\", {\n propertyKey,\n namespace\n });\n setSelectedPropertyIndex(usedPropertiesOrder.indexOf(propertyKey));\n setSelectedPropertyKey(propertyKey);\n setSelectedPropertyNamespace(namespace);\n };\n\n const body = (\n <div className={\"grid grid-cols-12 gap-2 h-full bg-surface dark:bg-surface-dark\"}>\n <div className={cls(\n \"bg-surface-50 dark:bg-surface-900\",\n \"p-4 md:p-8 pb-20 md:pb-20\",\n \"col-span-12 lg:col-span-5 h-full overflow-auto\",\n !asDialog && \"border-r \" + defaultBorderMixin\n )}>\n\n <div className=\"flex my-2\">\n\n <div className=\"flex-grow mb-4\">\n\n <Field\n name={\"name\"}\n as={DebouncedTextField}\n invisible={true}\n className=\"-ml-1\"\n inputClassName=\"text-2xl font-headers\"\n placeholder={\"Collection name\"}\n size={\"small\"}\n required\n error={Boolean(errors?.name)} />\n\n {owner &&\n <Typography variant={\"body2\"}\n className={\"ml-2\"}\n color={\"secondary\"}>\n Created by {owner.displayName}\n </Typography>}\n </div>\n\n {extraIcon && <div className=\"ml-4\">\n {extraIcon}\n </div>}\n\n <div className=\"ml-1 mt-2 flex flex-row gap-2\">\n <Tooltip title={\"Get the code for this collection\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={() => setCodeDialogOpen(true)}>\n <CodeIcon />\n </IconButton>\n </Tooltip>\n {inferPropertiesFromData && <Tooltip title={\"Add new properties based on data\"}\n asChild={true}>\n <IconButton\n variant={\"filled\"}\n disabled={inferringProperties}\n onClick={inferPropertiesFromData}>\n {inferringProperties ? <CircularProgress size={\"small\"} /> : <FindInPageIcon />}\n </IconButton>\n </Tooltip>}\n <Tooltip title={\"Add new property\"}\n asChild={true}>\n <Button\n onClick={() => setNewPropertyDialogOpen(true)}>\n <AddIcon />\n </Button>\n </Tooltip>\n </div>\n </div>\n\n <ErrorBoundary>\n <PropertyTree\n className={\"pl-8\"}\n inferredPropertyKeys={inferredPropertyKeys}\n selectedPropertyKey={selectedPropertyKey ? getFullId(selectedPropertyKey, selectedPropertyNamespace) : undefined}\n properties={values.properties}\n additionalFields={values.additionalFields}\n propertiesOrder={usedPropertiesOrder}\n onPropertyClick={onPropertyClick}\n onPropertyMove={onPropertyMove}\n onPropertyRemove={(isNewCollection || (inferredPropertyKeys && inferredPropertyKeys.length > 0)) ? deleteProperty : undefined}\n collectionEditable={collectionEditable}\n errors={errors} />\n </ErrorBoundary>\n\n <Button className={\"mt-8 w-full\"}\n size={\"large\"}\n onClick={() => setNewPropertyDialogOpen(true)}\n startIcon={<AddIcon />}>\n Add new property\n </Button>\n </div>\n\n {!asDialog &&\n <div className={\"col-span-12 lg:col-span-7 p-4 md:py-8 md:px-4 h-full overflow-auto pb-20 md:pb-20\"}>\n <div\n className=\"sticky top-8 min-h-full w-full flex flex-col justify-center\">\n\n {selectedPropertyFullId &&\n selectedProperty &&\n !isPropertyBuilder(selectedProperty) &&\n <PropertyForm\n inArray={false}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n existingProperty={!isNewCollection}\n autoUpdateId={false}\n allowDataInference={!isNewCollection}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n collectionProperties={values.properties as Properties}\n />}\n\n {!selectedProperty &&\n <div className={\"w-full flex flex-col items-center justify-center h-full gap-4\"}>\n <Typography variant={\"label\"} className=\"\">\n {emptyCollection\n ? \"Now you can add your first property\"\n : \"Select a property to edit it\"}\n </Typography>\n <Button\n onClick={() => setNewPropertyDialogOpen(true)}\n >\n <AddIcon />\n Add new property\n </Button>\n </div>}\n\n {selectedProperty && isPropertyBuilder(selectedProperty) &&\n <Typography variant={\"label\"} className=\"flex items-center justify-center\">\n {\"This property is defined as a property builder in code\"}\n </Typography>}\n </div>\n </div>}\n\n {asDialog && <PropertyFormDialog\n inArray={false}\n open={selectedPropertyIndex !== undefined}\n key={`edit_view_${selectedPropertyIndex}_${generationCounter}`}\n autoUpdateId={!selectedProperty}\n allowDataInference={!isNewCollection}\n existingProperty={true}\n autoOpenTypeSelect={false}\n propertyKey={selectedPropertyKey}\n propertyNamespace={selectedPropertyNamespace}\n property={selectedProperty}\n onPropertyChanged={onPropertyChanged}\n onDelete={deleteProperty}\n onError={onPropertyErrorInternal}\n forceShowErrors={showErrors}\n initialErrors={initialErrors}\n getData={getData}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n collectionProperties={values.properties as Properties}\n onCancel={closePropertyDialog}\n onOkClicked={asDialog\n ? closePropertyDialog\n : undefined\n } />}\n\n </div>);\n\n return (<>\n\n {body}\n\n {/* This is the dialog used for new properties*/}\n <PropertyFormDialog\n inArray={false}\n existingProperty={false}\n autoOpenTypeSelect={true}\n autoUpdateId={true}\n forceShowErrors={showErrors}\n open={newPropertyDialogOpen}\n onCancel={() => setNewPropertyDialogOpen(false)}\n onPropertyChanged={onPropertyCreated}\n getData={getData}\n allowDataInference={!isNewCollection}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n collectionProperties={values.properties as Properties}\n existingPropertyKeys={values.propertiesOrder as string[]} />\n\n <ErrorBoundary>\n <GetCodeDialog\n collection={values}\n open={codeDialogOpen}\n onOpenChange={setCodeDialogOpen} />\n </ErrorBoundary>\n </>\n );\n}\n","import React from \"react\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\n\nexport interface UnsavedChangesDialogProps {\n open: boolean;\n body?: React.ReactNode;\n title?: string;\n handleOk: () => void;\n handleCancel: () => void;\n}\n\nexport function UnsavedChangesDialog({\n open,\n handleOk,\n handleCancel,\n body,\n title\n }: UnsavedChangesDialogProps) {\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => open ? handleCancel() : handleOk()}\n aria-labelledby=\"alert-dialog-title\"\n aria-describedby=\"alert-dialog-description\"\n >\n\n <DialogTitle>{title ?? \"Unsaved changes\"}</DialogTitle>\n <DialogContent className={\"mt-4\"}>\n {body && <Typography>\n {body}\n </Typography>}\n <Typography>\n Are you sure?\n </Typography>\n\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"text\"\n onClick={handleCancel} autoFocus> Cancel </Button>\n <Button\n onClick={handleOk}> Ok </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityCustomViewsSelectDialog({\n open,\n onClose\n }: { open: boolean, onClose: (selectedViewKey?: string) => void }) {\n const {\n entityViews,\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogTitle>Select custom view</DialogTitle>\n <DialogContent className={\"flex flex-col gap-4\"}>\n {entityViews?.map((view) => {\n return <Button\n key={view.key}\n onClick={() => onClose(view.key)}\n fullWidth\n variant={\"text\"}\n >\n {view.name} ({view.key})\n </Button>;\n })}\n {(entityViews ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom views defined. Define your custom views in the customization settings, before using this\n dialog.\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n ConfirmationDialog,\n EntityCollection,\n EntityCustomView,\n resolveEntityView,\n useCustomizationController,\n User\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { CollectionEditorDialog } from \"./CollectionEditorDialog\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { EntityCustomViewsSelectDialog } from \"./EntityCustomViewsSelectDialog\";\nimport { useFormex } from \"@firecms/formex\";\n\nexport function SubcollectionsEditTab({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds,\n embedded = false\n}: {\n collection: PersistedCollection,\n parentCollection?: EntityCollection,\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser?: (uid: string) => User | null;\n parentCollectionIds?: string[];\n embedded?: boolean;\n}) {\n\n const { entityViews: contextEntityViews } = useCustomizationController();\n\n const [subcollectionToDelete, setSubcollectionToDelete] = React.useState<string | undefined>();\n const [addEntityViewDialogOpen, setAddEntityViewDialogOpen] = React.useState<boolean>(false);\n const [viewToDelete, setViewToDelete] = React.useState<string | undefined>();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n editedCollectionId?: string,\n }>();\n\n const {\n values,\n setFieldValue,\n } = useFormex<EntityCollection>();\n\n const [subcollections, setSubcollections] = React.useState<EntityCollection[]>(collection.subcollections ?? []);\n const resolvedEntityViews = values.entityViews?.filter(e => typeof e === \"string\")\n .map(e => resolveEntityView(e, contextEntityViews))\n .filter(Boolean) as EntityCustomView[] ?? [];\n const hardCodedEntityViews = collection.entityViews?.filter(e => typeof e !== \"string\") as EntityCustomView[] ?? [];\n const totalEntityViews = resolvedEntityViews.length + hardCodedEntityViews.length;\n\n const content = (\n <div className={\"flex flex-col gap-16\"}>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h6\"}>\n Subcollections of {values.name}\n </Typography>\n\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n {subcollections && subcollections.length > 0 && <Table>\n <TableBody>\n {subcollections.map((subcollection) => (\n <TableRow key={subcollection.path}\n onClick={() => setCurrentDialog({\n isNewCollection: false,\n editedCollectionId: subcollection.id\n })}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {subcollection.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setSubcollectionToDelete(subcollection.id);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>}\n\n <Button\n onClick={() => {\n setCurrentDialog({\n isNewCollection: true\n });\n }}\n startIcon={<AddIcon />}>\n Add subcollection\n </Button>\n\n </Paper>\n\n </div>\n\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h6\"}>\n Custom views\n </Typography>\n\n {totalEntityViews === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/cloud/quickstart\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom views by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setViewToDelete(view.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityViews.map((view) => (\n <TableRow key={view.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {view.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This view is defined in code with\n key <code>{view.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityViewDialogOpen(true);\n }}\n startIcon={<AddIcon />}>\n Add custom entity view\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n );\n\n return (\n <>\n {embedded ? (\n content\n ) : (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n {content}\n </Container>\n <div style={{ height: \"52px\" }} />\n </div>\n )}\n\n {subcollectionToDelete &&\n <ConfirmationDialog open={Boolean(subcollectionToDelete)}\n onAccept={() => {\n const props = {\n id: subcollectionToDelete,\n parentCollectionIds: [...(parentCollectionIds ?? []), collection.id]\n };\n console.debug(\"Deleting subcollection\", props)\n configController.deleteCollection(props).then(() => {\n setSubcollectionToDelete(undefined);\n setSubcollections(subcollections?.filter(e => e.id !== subcollectionToDelete))\n });\n }}\n onCancel={() => setSubcollectionToDelete(undefined)}\n title={<>Delete this subcollection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>} />}\n {viewToDelete &&\n <ConfirmationDialog open={Boolean(viewToDelete)}\n onAccept={() => {\n setFieldValue(\"entityViews\", values.entityViews?.filter(e => e !== viewToDelete));\n setViewToDelete(undefined);\n }}\n onCancel={() => setViewToDelete(undefined)}\n title={<>Remove this view?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the view in the CMS</>} />}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={configController}\n parentCollection={collection}\n collectionInference={collectionInference}\n parentCollectionIds={[...parentCollectionIds ?? [], values.id]}\n isNewCollection={false}\n {...currentDialog}\n getUser={getUser}\n handleClose={(updatedCollection) => {\n if (updatedCollection && !subcollections.map(e => e.id).includes(updatedCollection.id)) {\n setSubcollections([...subcollections, updatedCollection]);\n }\n setCurrentDialog(undefined);\n }} />\n\n <EntityCustomViewsSelectDialog\n open={addEntityViewDialogOpen}\n onClose={(selectedViewKey) => {\n if (selectedViewKey) {\n setFieldValue(\"entityViews\", [...(values.entityViews ?? []), selectedViewKey]);\n }\n setAddEntityViewDialogOpen(false);\n }} />\n </>\n );\n}\n","import { useCustomizationController } from \"@firecms/core\";\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, Typography } from \"@firecms/ui\";\nimport React from \"react\";\n\nexport function EntityActionsSelectDialog({\n open,\n onClose\n }: { open: boolean, onClose: (selectedActionKey?: string) => void }) {\n const {\n entityActions\n } = useCustomizationController();\n\n return <Dialog\n maxWidth={\"md\"}\n open={open}>\n <DialogTitle>Select custom action</DialogTitle>\n <DialogContent className={\"flex flex-col gap-4\"}>\n {entityActions?.map((action) => {\n return <Button\n key={action.key}\n onClick={() => onClose(action.key)}\n fullWidth\n variant={\"text\"}\n >\n {action.name} ({action.key})\n </Button>;\n })}\n {(entityActions ?? []).length === 0 &&\n <Typography variant={\"body2\"}>\n No custom actions defined. Define your custom actions in the customization settings, before using\n this\n dialog.\n </Typography>\n }\n </DialogContent>\n <DialogActions>\n <Button onClick={() => onClose()}>Cancel</Button>\n </DialogActions>\n </Dialog>\n}\n","import React from \"react\";\nimport {\n ConfirmationDialog,\n EntityAction,\n EntityCollection,\n resolveEntityAction,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Alert,\n Button,\n Container,\n DeleteIcon,\n IconButton,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableRow,\n Tooltip,\n Typography,\n} from \"@firecms/ui\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { useFormex } from \"@firecms/formex\";\nimport { EntityActionsSelectDialog } from \"./EntityActionsSelectDialog\";\n\nexport function EntityActionsEditTab({\n collection,\n embedded = false\n}: {\n collection: PersistedCollection,\n embedded?: boolean;\n}) {\n\n const { entityActions: contextEntityActions } = useCustomizationController();\n\n const [addEntityActionDialogOpen, setAddEntityActionDialogOpen] = React.useState<boolean>(false);\n const [actionToDelete, setActionToDelete] = React.useState<string | undefined>();\n\n const {\n values,\n setFieldValue\n } = useFormex<EntityCollection>();\n\n const resolvedEntityActions = values.entityActions?.filter((e): e is string => typeof e === \"string\")\n .map(e => resolveEntityAction(e, contextEntityActions))\n .filter(Boolean) as EntityAction<any>[] ?? [];\n const hardCodedEntityActions = collection.entityActions?.filter((e): e is EntityAction<any> => typeof e !== \"string\") ?? [];\n const totalEntityActions = resolvedEntityActions.length + hardCodedEntityActions.length;\n\n const content = (\n <div className={\"flex flex-col gap-16\"}>\n <div className={\"flex-grow flex flex-col gap-4 items-start\"}>\n <Typography variant={\"h6\"}>\n Custom actions\n </Typography>\n\n {totalEntityActions === 0 &&\n <Alert action={<Button variant=\"text\"\n size={\"small\"}\n href={\"https://firecms.co/docs/custom_actions\"}\n component={\"a\"}\n rel=\"noopener noreferrer\"\n target=\"_blank\">More info</Button>}>\n Define your own custom actions by uploading them with the CLI.\n </Alert>\n }\n\n {<>\n <Paper className={\"flex flex-col gap-4 p-2 w-full\"}>\n <Table>\n <TableBody>\n {resolvedEntityActions.map((action) => (\n <TableRow key={action.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {action.name}\n </Typography>\n </TableCell>\n <TableCell\n align=\"right\">\n <Tooltip title={\"Remove\"}\n asChild={true}>\n <IconButton size=\"small\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setActionToDelete(action.key);\n }}\n color=\"inherit\">\n <DeleteIcon size={\"small\"} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n ))}\n {hardCodedEntityActions.map((action) => (\n <TableRow key={action.key}>\n <TableCell\n align=\"left\">\n <Typography variant={\"subtitle2\"} className={\"flex-grow\"}>\n {action.name}\n </Typography>\n <Typography variant={\"caption\"} className={\"flex-grow\"}>\n This action is defined in code with\n key <code>{action.key}</code>\n </Typography>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n\n <Button\n onClick={() => {\n setAddEntityActionDialogOpen(true);\n }}\n startIcon={<AddIcon />}>\n Add custom entity action\n </Button>\n </Paper>\n\n </>}\n\n\n </div>\n\n </div>\n );\n\n return (\n <>\n {embedded ? (\n content\n ) : (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"2xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n {content}\n </Container>\n <div style={{ height: \"52px\" }} />\n </div>\n )}\n\n {actionToDelete &&\n <ConfirmationDialog open={Boolean(actionToDelete)}\n onAccept={() => {\n setFieldValue(\"entityActions\", values.entityActions?.filter(e => e !== actionToDelete));\n setActionToDelete(undefined);\n }}\n onCancel={() => setActionToDelete(undefined)}\n title={<>Remove this action?</>}\n body={<>This will <b>not\n delete any data</b>, only\n the action in the CMS</>} />}\n\n <EntityActionsSelectDialog\n open={addEntityActionDialogOpen}\n onClose={(selectedActionKey) => {\n if (selectedActionKey) {\n console.log(\"Selected action key:\", selectedActionKey);\n const value = [...(values.entityActions ?? []), selectedActionKey]\n // only actions that are defined in the registry\n .filter((e): e is string => typeof e === \"string\" && (contextEntityActions ?? []).some(action => action.key === e));\n ;\n setFieldValue(\"entityActions\", value);\n }\n setAddEntityActionDialogOpen(false);\n }} />\n </>\n );\n}\n","import React from \"react\";\nimport {\n EntityCollection,\n User\n} from \"@firecms/core\";\nimport {\n Button,\n cls,\n Container,\n defaultBorderMixin,\n Typography\n} from \"@firecms/ui\";\n\nimport { useFormex } from \"@firecms/formex\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { SubcollectionsEditTab } from \"./SubcollectionsEditTab\";\nimport { EntityActionsEditTab } from \"./EntityActionsEditTab\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\n\nexport function ExtendSettingsForm({\n collection,\n parentCollection,\n configController,\n collectionInference,\n getUser,\n parentCollectionIds,\n isMergedCollection,\n onResetToCode\n}: {\n collection: PersistedCollection;\n parentCollection?: EntityCollection;\n configController: CollectionsConfigController;\n collectionInference?: CollectionInference;\n getUser?: (uid: string) => User | null;\n parentCollectionIds?: string[];\n isMergedCollection?: boolean;\n onResetToCode?: () => void;\n}) {\n\n const {\n values,\n setFieldValue,\n submitCount\n } = useFormex<EntityCollection>();\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-8 p-8 m-auto\"}>\n\n <div>\n <Typography variant={\"h5\"} className={\"flex-grow\"}>\n Extend\n </Typography>\n <Typography variant={\"body2\"} color={\"secondary\"}>\n Add subcollections, custom views, and entity actions to this collection.\n </Typography>\n </div>\n\n {/* Subcollections Section */}\n <SubcollectionsEditTab\n collection={collection}\n parentCollection={parentCollection}\n configController={configController}\n collectionInference={collectionInference}\n getUser={getUser}\n parentCollectionIds={parentCollectionIds}\n embedded={true}\n />\n\n {/* Entity Actions Section */}\n <EntityActionsEditTab collection={collection} embedded={true} />\n\n {/* Reset to code (for merged collections) */}\n {isMergedCollection && onResetToCode && (\n <div className={cls(\"flex flex-col gap-4 mt-8 border-t pt-8\", defaultBorderMixin)}>\n <Typography variant={\"body2\"} color={\"secondary\"}>\n This collection is defined in code.\n The changes done in this editor will override the properties defined in code.\n You can delete the overridden values to revert to the state defined in code.\n </Typography>\n <Button color={\"neutral\"} onClick={onResetToCode}>\n Reset to code\n </Button>\n </div>\n )}\n\n <div style={{ height: \"52px\" }} />\n\n </Container>\n </div>\n );\n}\n","import { EntityCollection } from \"@firecms/core\";\n\n/**\n * Valid dataType values for properties\n */\nconst VALID_DATA_TYPES = [\n \"string\",\n \"number\",\n \"boolean\",\n \"date\",\n \"geopoint\",\n \"reference\",\n \"array\",\n \"map\"\n] as const;\n\ntype DataType = typeof VALID_DATA_TYPES[number];\n\n/**\n * Validation error with path and message\n */\nexport interface CollectionValidationError {\n path: string;\n message: string;\n}\n\n/**\n * Result of collection JSON validation\n */\nexport interface CollectionValidationResult {\n valid: boolean;\n errors: CollectionValidationError[];\n collection?: EntityCollection;\n}\n\n/**\n * Validates a property object recursively\n */\nfunction validateProperty(\n property: any,\n path: string,\n errors: CollectionValidationError[]\n): void {\n if (typeof property !== \"object\" || property === null) {\n errors.push({\n path,\n message: \"Property must be an object\"\n });\n return;\n }\n\n // Check dataType\n if (!property.dataType) {\n errors.push({\n path: `${path}.dataType`,\n message: \"Required field is missing\"\n });\n } else if (!VALID_DATA_TYPES.includes(property.dataType)) {\n errors.push({\n path: `${path}.dataType`,\n message: `Invalid value \"${property.dataType}\", expected one of: ${VALID_DATA_TYPES.join(\", \")}`\n });\n }\n\n // Validate name if present\n if (property.name !== undefined && typeof property.name !== \"string\") {\n errors.push({\n path: `${path}.name`,\n message: \"Must be a string\"\n });\n }\n\n // Validate array \"of\" property\n if (property.dataType === \"array\") {\n if (property.of) {\n if (Array.isArray(property.of)) {\n property.of.forEach((ofProp: any, index: number) => {\n validateProperty(ofProp, `${path}.of[${index}]`, errors);\n });\n } else {\n validateProperty(property.of, `${path}.of`, errors);\n }\n }\n // oneOf validation\n if (property.oneOf) {\n if (typeof property.oneOf !== \"object\") {\n errors.push({\n path: `${path}.oneOf`,\n message: \"Must be an object\"\n });\n } else if (property.oneOf.properties) {\n validateProperties(property.oneOf.properties, `${path}.oneOf.properties`, errors);\n }\n }\n }\n\n // Validate map properties\n if (property.dataType === \"map\" && property.properties) {\n validateProperties(property.properties, `${path}.properties`, errors);\n }\n\n // Validate reference path\n if (property.dataType === \"reference\") {\n if (property.path !== undefined && typeof property.path !== \"string\") {\n errors.push({\n path: `${path}.path`,\n message: \"Must be a string\"\n });\n }\n }\n\n // Validate storage config for string\n if (property.dataType === \"string\" && property.storage) {\n if (typeof property.storage !== \"object\") {\n errors.push({\n path: `${path}.storage`,\n message: \"Must be an object\"\n });\n }\n }\n\n // Validate enumValues if present\n if (property.enumValues !== undefined) {\n if (!Array.isArray(property.enumValues) && typeof property.enumValues !== \"object\") {\n errors.push({\n path: `${path}.enumValues`,\n message: \"Must be an array or object\"\n });\n }\n }\n}\n\n/**\n * Validates a properties object (collection of property definitions)\n */\nfunction validateProperties(\n properties: any,\n path: string,\n errors: CollectionValidationError[]\n): void {\n if (typeof properties !== \"object\" || properties === null) {\n errors.push({\n path,\n message: \"Must be an object\"\n });\n return;\n }\n\n for (const [key, property] of Object.entries(properties)) {\n validateProperty(property, `${path}.${key}`, errors);\n }\n}\n\n/**\n * Validates optional collection fields\n */\nfunction validateOptionalFields(\n collection: any,\n errors: CollectionValidationError[]\n): void {\n // String fields\n const stringFields = [\n \"singularName\",\n \"description\",\n \"group\",\n \"databaseId\"\n ];\n for (const field of stringFields) {\n if (collection[field] !== undefined && typeof collection[field] !== \"string\") {\n errors.push({\n path: field,\n message: \"Must be a string\"\n });\n }\n }\n\n // Boolean fields\n const booleanFields = [\n \"collectionGroup\",\n \"textSearchEnabled\",\n \"selectionEnabled\",\n \"inlineEditing\",\n \"hideFromNavigation\",\n \"hideIdFromForm\",\n \"hideIdFromCollection\",\n \"formAutoSave\",\n \"editable\",\n \"alwaysApplyDefaultValues\",\n \"includeJsonView\",\n \"history\"\n ];\n for (const field of booleanFields) {\n if (collection[field] !== undefined && typeof collection[field] !== \"boolean\") {\n errors.push({\n path: field,\n message: \"Must be a boolean\"\n });\n }\n }\n\n // Icon can be string or object (React node)\n if (collection.icon !== undefined &&\n typeof collection.icon !== \"string\" &&\n typeof collection.icon !== \"object\") {\n errors.push({\n path: \"icon\",\n message: \"Must be a string (icon key) or object\"\n });\n }\n\n // propertiesOrder must be array of strings\n if (collection.propertiesOrder !== undefined) {\n if (!Array.isArray(collection.propertiesOrder)) {\n errors.push({\n path: \"propertiesOrder\",\n message: \"Must be an array of strings\"\n });\n } else if (!collection.propertiesOrder.every((item: any) => typeof item === \"string\")) {\n errors.push({\n path: \"propertiesOrder\",\n message: \"All items must be strings\"\n });\n }\n }\n\n // subcollections must be array\n if (collection.subcollections !== undefined) {\n if (!Array.isArray(collection.subcollections)) {\n errors.push({\n path: \"subcollections\",\n message: \"Must be an array\"\n });\n } else {\n collection.subcollections.forEach((sub: any, index: number) => {\n const subErrors: CollectionValidationError[] = [];\n validateCollectionObject(sub, subErrors);\n subErrors.forEach(err => {\n errors.push({\n path: `subcollections[${index}].${err.path}`,\n message: err.message\n });\n });\n });\n }\n }\n\n // defaultViewMode validation\n const validViewModes = [\"table\", \"cards\", \"kanban\"];\n if (collection.defaultViewMode !== undefined) {\n if (!validViewModes.includes(collection.defaultViewMode)) {\n errors.push({\n path: \"defaultViewMode\",\n message: `Invalid value, expected one of: ${validViewModes.join(\", \")}`\n });\n }\n }\n\n // kanban config validation\n if (collection.kanban !== undefined) {\n if (typeof collection.kanban !== \"object\" || collection.kanban === null) {\n errors.push({\n path: \"kanban\",\n message: \"Must be an object\"\n });\n } else if (collection.kanban.columnProperty !== undefined &&\n typeof collection.kanban.columnProperty !== \"string\") {\n errors.push({\n path: \"kanban.columnProperty\",\n message: \"Must be a string\"\n });\n }\n }\n}\n\n/**\n * Validates a collection object\n */\nfunction validateCollectionObject(\n collection: any,\n errors: CollectionValidationError[]\n): void {\n // Required fields\n if (!collection.id) {\n errors.push({\n path: \"id\",\n message: \"Required field is missing\"\n });\n } else if (typeof collection.id !== \"string\") {\n errors.push({\n path: \"id\",\n message: \"Must be a string\"\n });\n }\n\n if (!collection.name) {\n errors.push({\n path: \"name\",\n message: \"Required field is missing\"\n });\n } else if (typeof collection.name !== \"string\") {\n errors.push({\n path: \"name\",\n message: \"Must be a string\"\n });\n }\n\n if (!collection.path) {\n errors.push({\n path: \"path\",\n message: \"Required field is missing\"\n });\n } else if (typeof collection.path !== \"string\") {\n errors.push({\n path: \"path\",\n message: \"Must be a string\"\n });\n }\n\n // Properties validation\n if (collection.properties !== undefined) {\n validateProperties(collection.properties, \"properties\", errors);\n }\n\n // Optional fields\n validateOptionalFields(collection, errors);\n}\n\n/**\n * Validates a JSON string representing a collection configuration.\n * Returns detailed validation errors if the JSON is invalid or doesn't match\n * the expected collection schema.\n */\nexport function validateCollectionJson(jsonString: string): CollectionValidationResult {\n const errors: CollectionValidationError[] = [];\n\n // Try to parse JSON\n let parsed: any;\n try {\n parsed = JSON.parse(jsonString);\n } catch (e: any) {\n // Try to extract line/column info from the error\n const match = e.message.match(/position (\\d+)/);\n let message = \"Invalid JSON syntax\";\n if (match) {\n const position = parseInt(match[1], 10);\n const lines = jsonString.substring(0, position).split(\"\\n\");\n const line = lines.length;\n const column = lines[lines.length - 1].length + 1;\n message = `Invalid JSON syntax at line ${line}, column ${column}: ${e.message}`;\n } else {\n message = `Invalid JSON syntax: ${e.message}`;\n }\n return {\n valid: false,\n errors: [{\n path: \"\",\n message\n }]\n };\n }\n\n // Validate collection structure\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {\n valid: false,\n errors: [{\n path: \"\",\n message: \"Collection must be an object\"\n }]\n };\n }\n\n validateCollectionObject(parsed, errors);\n\n return {\n valid: errors.length === 0,\n errors,\n collection: errors.length === 0 ? parsed as EntityCollection : undefined\n };\n}\n","import React, { useCallback, useState } from \"react\";\nimport {\n Button,\n cls,\n CodeIcon,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Typography\n} from \"@firecms/ui\";\nimport { EntityCollection } from \"@firecms/core\";\nimport { validateCollectionJson, CollectionValidationError } from \"../../utils/validateCollectionJson\";\n\nconst EXAMPLE_JSON = `{\n \"id\": \"products\",\n \"name\": \"Products\",\n \"path\": \"products\",\n \"icon\": \"shopping_cart\",\n \"properties\": {\n \"name\": {\n \"dataType\": \"string\",\n \"name\": \"Name\",\n \"validation\": { \"required\": true }\n },\n \"price\": {\n \"dataType\": \"number\",\n \"name\": \"Price\"\n },\n \"available\": {\n \"dataType\": \"boolean\",\n \"name\": \"Available\"\n }\n }\n}`;\n\nexport interface CollectionJsonImportDialogProps {\n open: boolean;\n onClose: () => void;\n onImport: (collection: EntityCollection) => void;\n}\n\nexport function CollectionJsonImportDialog({\n open,\n onClose,\n onImport\n}: CollectionJsonImportDialogProps) {\n const [jsonValue, setJsonValue] = useState<string>(\"\");\n const [errors, setErrors] = useState<CollectionValidationError[]>([]);\n const [touched, setTouched] = useState(false);\n\n const handleJsonChange = useCallback((e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const value = e.target.value;\n setJsonValue(value);\n setTouched(true);\n\n if (!value.trim()) {\n setErrors([]);\n return;\n }\n\n const result = validateCollectionJson(value);\n setErrors(result.errors);\n }, []);\n\n const handleImport = useCallback(() => {\n const result = validateCollectionJson(jsonValue);\n if (result.valid && result.collection) {\n onImport(result.collection);\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }\n }, [jsonValue, onImport, onClose]);\n\n const handleClose = useCallback(() => {\n setJsonValue(\"\");\n setErrors([]);\n setTouched(false);\n onClose();\n }, [onClose]);\n\n const isValid = touched && jsonValue.trim() && errors.length === 0;\n\n return (\n <Dialog\n open={open}\n onOpenChange={(open) => !open && handleClose()}\n maxWidth=\"2xl\"\n >\n <DialogTitle className=\"flex items-center gap-2\">\n <CodeIcon size=\"small\" />\n Import Collection from JSON\n </DialogTitle>\n <DialogContent className=\"flex flex-col gap-4\">\n <Typography variant=\"body2\" color=\"secondary\">\n Paste a JSON object representing your collection configuration.\n The JSON must include <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">id</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">name</code>,\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">path</code>, and\n <code className=\"bg-surface-200 dark:bg-surface-700 px-1 rounded\">properties</code>.\n </Typography>\n\n <textarea\n value={jsonValue}\n onChange={handleJsonChange}\n placeholder={EXAMPLE_JSON}\n rows={12}\n className={cls(\n \"w-full p-3 font-mono text-sm rounded-md border resize-none overflow-y-auto\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"focus:outline-none focus:ring-2 focus:ring-primary\",\n \"h-[300px]\",\n errors.length > 0 && touched\n ? \"border-red-500 dark:border-red-400\"\n : \"border-surface-300 dark:border-surface-600\"\n )}\n />\n\n {errors.length > 0 && touched && (\n <div className=\"p-3 bg-red-50 dark:bg-red-900/20 rounded-md border border-red-200 dark:border-red-800\">\n <Typography variant=\"body2\" className=\"font-medium text-red-700 dark:text-red-400 mb-2\">\n Validation errors:\n </Typography>\n <ul className=\"list-disc list-inside space-y-1\">\n {errors.map((error, index) => (\n <li key={index} className=\"text-sm text-red-600 dark:text-red-400\">\n {error.path ? (\n <>\n <code className=\"bg-red-100 dark:bg-red-900/40 px-1 rounded\">\n {error.path}\n </code>\n : {error.message}\n </>\n ) : (\n error.message\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {isValid && (\n <div className=\"p-3 bg-green-50 dark:bg-green-900/20 rounded-md border border-green-200 dark:border-green-800\">\n <Typography variant=\"body2\" className=\"text-green-700 dark:text-green-400\">\n ✓ JSON is valid and ready to import\n </Typography>\n </div>\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n onClick={handleClose}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n color=\"primary\"\n onClick={handleImport}\n disabled={!isValid}\n >\n Import Collection\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const productsCollectionTemplate: EntityCollection = {\n id: \"products\",\n path: \"products\",\n name: \"Products\",\n singularName: \"Product\",\n icon: \"shopping_cart\",\n description: \"List of the products currently sold in your shop\",\n properties: makePropertiesEditable({\n name: {\n dataType: \"string\",\n name: \"Name\",\n description: \"Name of this product\",\n validation: {\n required: true\n }\n },\n brand: {\n dataType: \"string\",\n name: \"Brand\",\n validation: {\n required: true\n }\n },\n description: {\n dataType: \"string\",\n name: \"Description\",\n description: \"Description of this product, supports markdown\",\n markdown: true\n },\n main_image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n },\n description: \"Upload field for images\"\n },\n available: {\n dataType: \"boolean\",\n name: \"Available\",\n columnWidth: 100,\n description: \"Is this product available in the website\"\n },\n price: {\n dataType: \"number\",\n name: \"Price\",\n validation: {\n requiredMessage: \"You must set a positive price\",\n min: 0\n }\n },\n images: {\n dataType: \"array\",\n name: \"Images\",\n hideFromCollection: true,\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n },\n related_products: {\n dataType: \"array\",\n name: \"Related products\",\n description: \"Products related to this one\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n metadata: {\n name: \"Metadata\",\n description: \"This is an example of a map property\",\n dataType: \"map\",\n keyValue: true\n },\n added_on: {\n dataType: \"date\",\n name: \"Added on\",\n autoValue: \"on_create\"\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const blogCollectionTemplate:EntityCollection = {\n id: \"blog\",\n path: \"blog\",\n name: \"Blog\",\n singularName: \"Blog entry\",\n icon: \"article\",\n description: \"A collection of blog entries\",\n defaultSize: \"l\",\n properties: makePropertiesEditable({\n name: {\n name: \"Name\",\n validation: { required: true },\n dataType: \"string\"\n },\n header_image: {\n name: \"Header image\",\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n content: {\n name: \"Content\",\n description: \"Content blocks for the blog entry\",\n validation: { required: true },\n dataType: \"array\",\n oneOf: {\n typeField: \"type\",\n valueField: \"value\",\n properties: {\n text: {\n dataType: \"string\",\n name: \"Text\",\n markdown: true\n },\n quote: {\n dataType: \"string\",\n name: \"Quote\",\n multiline: true\n },\n images: {\n name: \"Images\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n storage: {\n storagePath: \"images\",\n acceptedFiles: [\"image/*\"],\n metadata: {\n cacheControl: \"max-age=1000000\"\n }\n }\n },\n description: \"This fields allows uploading multiple images at once and reordering\"\n },\n products: {\n name: \"Products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\",\n previewProperties: [\"name\", \"main_image\"]\n }\n }\n },\n propertiesOrder: [\"text\", \"quote\", \"images\", \"products\"]\n }\n },\n created_on: {\n name: \"Created on\",\n dataType: \"date\",\n autoValue: \"on_create\"\n },\n status: {\n name: \"Status\",\n validation: { required: true },\n dataType: \"string\",\n enumValues: {\n published: {\n id: \"published\",\n label: \"Published\",\n },\n draft: \"Draft\"\n },\n defaultValue: \"draft\"\n },\n publish_date: {\n name: \"Publish date\",\n dataType: \"date\",\n clearable: true\n },\n reviewed: {\n name: \"Reviewed\",\n dataType: \"boolean\"\n },\n tags: {\n name: \"Tags\",\n description: \"Example of generic array\",\n dataType: \"array\",\n of: {\n dataType: \"string\",\n previewAsTag: true\n }\n }\n })\n};\n","import { EntityCollection, makePropertiesEditable } from \"@firecms/core\";\n\nexport const usersCollectionTemplate: EntityCollection = {\n id: \"users\",\n path: \"users\",\n name: \"Users\",\n singularName: \"User\",\n description: \"Registered users in the app/web\",\n icon: \"person\",\n properties: makePropertiesEditable({\n displayName: {\n name: \"Display name\",\n dataType: \"string\"\n },\n email: {\n name: \"Email\",\n dataType: \"string\",\n email: true\n },\n emailVerified: {\n name: \"Email verified\",\n dataType: \"boolean\"\n },\n phone: {\n name: \"Phone\",\n dataType: \"string\"\n },\n favourite_products: {\n name: \"Favourite products\",\n dataType: \"array\",\n of: {\n dataType: \"reference\",\n path: \"products\"\n }\n },\n photoURL: {\n name: \"Photo URL\",\n dataType: \"string\",\n url: \"image\"\n }\n }),\n};\n","import { EntityCollection } from \"@firecms/core\";\n\nexport const pagesCollectionTemplate: EntityCollection = {\n id: \"pages\",\n path: \"pages\",\n name: \"Pages\",\n singularName: \"Page\",\n icon: \"insert_drive_file\",\n description: \"List of website pages that can be edited here\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Page Title\",\n validation: { required: true }\n },\n slug: {\n dataType: \"string\",\n name: \"URL Slug\",\n validation: {\n required: true,\n unique: true,\n matches: \"^[a-z0-9]+(?:-[a-z0-9]+)*$\",\n matchesMessage: \"Must be lowercase, alphanumeric, and hyphenated\"\n }\n },\n hero_section: {\n dataType: \"map\",\n name: \"Hero Section\",\n properties: {\n headline: {\n dataType: \"string\",\n name: \"Headline\",\n validation: { required: true }\n },\n subhead: {\n dataType: \"string\",\n name: \"Subheadline\"\n },\n background_image: {\n dataType: \"string\",\n name: \"Background Image\",\n storage: {\n storagePath: \"page_hero/images\",\n acceptedFiles: [\"image/*\"],\n }\n },\n call_to_action: {\n dataType: \"string\",\n name: \"Call to Action\"\n },\n call_to_action_link: {\n dataType: \"string\",\n name: \"CTA Link\",\n url: true\n }\n }\n },\n content: {\n dataType: \"array\",\n name: \"Content\",\n oneOf: {\n properties: {\n section: {\n dataType: \"map\",\n name: \"Section\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Section Title\",\n validation: { required: true }\n },\n content: {\n dataType: \"string\",\n name: \"Section Content\",\n markdown: true\n },\n image: {\n dataType: \"string\",\n name: \"Section Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n link: {\n dataType: \"string\",\n name: \"Section Link\",\n url: true\n }\n }\n },\n image: {\n dataType: \"string\",\n name: \"Image\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n },\n slider: {\n dataType: \"array\",\n name: \"Slider\",\n of: {\n dataType: \"map\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Title\",\n validation: { required: true }\n },\n image: {\n dataType: \"string\",\n storage: {\n storagePath: \"page_sections/images\",\n acceptedFiles: [\"image/*\"]\n }\n }\n }\n }\n },\n }\n }\n },\n sidebar: {\n dataType: \"map\",\n name: \"Sidebar\",\n properties: {\n title: {\n dataType: \"string\",\n name: \"Sidebar Title\",\n validation: { required: false }\n },\n content: {\n dataType: \"string\",\n name: \"Sidebar Content\",\n markdown: true\n }\n }\n },\n seo_metadata: {\n dataType: \"map\",\n name: \"SEO Metadata\",\n properties: {\n meta_title: {\n dataType: \"string\",\n name: \"Meta Title\"\n },\n meta_description: {\n dataType: \"string\",\n name: \"Meta Description\"\n },\n focus_keywords: {\n dataType: \"array\",\n name: \"Focus Keywords\",\n of: {\n dataType: \"string\"\n }\n }\n }\n },\n footer_override: {\n dataType: \"string\",\n name: \"Footer Override\",\n markdown: true\n },\n publish_date: {\n dataType: \"date\",\n name: \"Publish Date\",\n validation: { required: true }\n },\n last_updated: {\n dataType: \"date\",\n name: \"Last Updated\",\n autoValue: \"on_update\"\n },\n is_published: {\n dataType: \"boolean\",\n name: \"Is Published\",\n columnWidth: 100,\n description: \"Should this page be live on the site?\"\n }\n }\n};\n","import { useContext } from \"react\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorContext } from \"./ConfigControllerProvider\";\n\n/**\n * Hook to access the collection editor controller.\n * The methods in this controller can be used to open the collection editor dialog.\n */\nexport const useCollectionEditorController = (): CollectionEditorController => useContext(CollectionEditorContext);\n","import { EntityCollection } from \"@firecms/core\";\n\nexport interface GenerateCollectionRequest {\n /** User's natural language description of what they want */\n prompt: string;\n\n /** Other collections in the project (for context/relationships). Limit to 30. */\n existingCollections: Partial<EntityCollection>[];\n\n /** Optional for generate, required for modifications. If provided, modifies this collection */\n existingCollection?: Partial<EntityCollection>;\n}\n\n/** Operation types for modifying a collection */\nexport type CollectionOperationType = \"add\" | \"modify\" | \"delete\";\n\n/** A single operation describing what changed */\nexport interface CollectionOperation {\n op: CollectionOperationType;\n path: string;\n value?: any;\n}\n\n/** Result from collection generation, including optional delta operations */\nexport interface GenerateCollectionResult {\n collection: EntityCollection;\n operations?: CollectionOperation[];\n}\n\n/**\n * Callback type for generating or modifying a collection.\n * The plugin is API-agnostic - consumers implement the actual API call.\n */\nexport type CollectionGenerationCallback = (\n request: GenerateCollectionRequest\n) => Promise<GenerateCollectionResult>;\n\nexport class CollectionGenerationApiError extends Error {\n public code?: string;\n\n constructor(message: string, code?: string) {\n super(message);\n this.code = code;\n this.name = \"CollectionGenerationApiError\";\n }\n}\n\n/**\n * Default endpoint for AI collection generation\n */\nexport const DEFAULT_COLLECTION_GENERATION_ENDPOINT = \"https://api.firecms.co/collections/generate\";\n\n/**\n * Props for building a collection generation callback\n */\nexport interface BuildCollectionGenerationCallbackProps {\n /**\n * Function to get the auth token (e.g., from Firebase Auth)\n * This is typically `authController.getAuthToken` from `@firecms/firebase`\n */\n getAuthToken: () => Promise<string>;\n\n /**\n * Optional custom API endpoint for collection generation.\n * Defaults to the FireCMS SaaS API endpoint.\n */\n apiEndpoint?: string;\n}\n\n/**\n * Build a callback for AI collection generation.\n * This helper allows self-hosted FireCMS users to enable the AI collection\n * generation feature.\n *\n * @example\n * ```typescript\n * import { useCollectionEditorPlugin, buildCollectionGenerationCallback } from \"@firecms/collection_editor\";\n * import { useFirebaseAuthController } from \"@firecms/firebase\";\n *\n * const authController = useFirebaseAuthController({ firebaseApp });\n *\n * const collectionEditorPlugin = useCollectionEditorPlugin({\n * // ... other props\n * generateCollection: buildCollectionGenerationCallback({\n * getAuthToken: authController.getAuthToken\n * })\n * });\n * ```\n */\nexport function buildCollectionGenerationCallback({\n getAuthToken,\n apiEndpoint = DEFAULT_COLLECTION_GENERATION_ENDPOINT\n}: BuildCollectionGenerationCallbackProps): CollectionGenerationCallback {\n return async (request) => {\n const token = await getAuthToken();\n const response = await fetch(apiEndpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`\n },\n body: JSON.stringify(request)\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new CollectionGenerationApiError(\n errorData.error || \"Failed to generate collection\",\n errorData.code\n );\n }\n\n const data = await response.json();\n return {\n collection: data.data.collection,\n operations: data.data.operations\n };\n };\n}\n","import React, { useState } from \"react\";\nimport { EntityCollection, useNavigationController, useSnackbarController, AIIcon } from \"@firecms/core\";\nimport {\n Button,\n CircularProgress,\n IconButton,\n Menu,\n SendIcon,\n TextField,\n Typography\n} from \"@firecms/ui\";\nimport {\n CollectionGenerationCallback,\n CollectionGenerationApiError,\n CollectionOperation\n} from \"../../api/generateCollectionApi\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\n\nexport interface AICollectionGeneratorPopoverProps {\n /**\n * Current collection being edited (if modifying an existing collection)\n */\n existingCollection?: PersistedCollection;\n\n /**\n * Callback when a collection is generated or modified.\n * Includes the collection and optionally the operations that were applied.\n */\n onGenerated: (collection: EntityCollection, operations?: CollectionOperation[]) => void;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection: CollectionGenerationCallback;\n\n /**\n * Optional custom trigger button. If not provided, a default AI button is used.\n */\n trigger?: React.ReactNode;\n\n /**\n * Size of the button\n */\n size?: \"small\" | \"medium\" | \"large\";\n\n /**\n * Whether to show the label text\n */\n showLabel?: boolean;\n\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n}\n\nexport function AICollectionGeneratorPopover({\n existingCollection,\n onGenerated,\n generateCollection,\n trigger,\n size = \"small\",\n showLabel = true,\n onAnalyticsEvent\n}: AICollectionGeneratorPopoverProps) {\n const [menuOpen, setMenuOpen] = useState(false);\n const [prompt, setPrompt] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n const existingCollections = navigation.collections ?? [];\n\n const handleGenerate = async () => {\n if (!prompt.trim()) return;\n\n setLoading(true);\n setError(null);\n\n const mode = existingCollection ? \"modify\" : \"create\";\n onAnalyticsEvent?.(\"ai_collection_generate_start\", { mode });\n\n try {\n const collectionsContext = existingCollections.map(c => ({\n path: c.path,\n id: c.id,\n name: c.name,\n properties: c.properties,\n propertiesOrder: c.propertiesOrder\n }));\n\n const result = await generateCollection({\n prompt: prompt.trim(),\n existingCollections: collectionsContext.slice(0, 30),\n ...(existingCollection && {\n existingCollection: {\n path: existingCollection.path,\n id: existingCollection.id,\n name: existingCollection.name,\n properties: existingCollection.properties,\n propertiesOrder: existingCollection.propertiesOrder\n }\n })\n });\n\n onGenerated(result.collection, result.operations);\n setMenuOpen(false);\n setPrompt(\"\");\n onAnalyticsEvent?.(\"ai_collection_generate_success\", {\n mode,\n operationsCount: result.operations?.length\n });\n snackbarController.open({\n type: \"success\",\n message: existingCollection\n ? \"Collection updated with AI suggestions\"\n : \"Collection generated successfully\"\n });\n } catch (e) {\n console.error(\"Error generating collection:\", e);\n const errorMessage = e instanceof CollectionGenerationApiError\n ? e.message\n : \"Failed to generate collection. Please try again.\";\n setError(errorMessage);\n onAnalyticsEvent?.(\"ai_collection_generate_error\", {\n mode,\n error: errorMessage\n });\n snackbarController.open({\n type: \"error\",\n message: errorMessage\n });\n } finally {\n setLoading(false);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleGenerate();\n }\n };\n\n const defaultTrigger = showLabel ? (\n <Button\n variant=\"text\"\n size={size}\n disabled={loading}\n startIcon={loading\n ? <CircularProgress size=\"smallest\" />\n : <AIIcon size=\"small\" />\n }\n >\n AI Assist\n </Button>\n ) : (\n <IconButton\n size={size}\n disabled={loading}\n aria-label=\"AI Assist\"\n >\n {loading\n ? <CircularProgress size=\"smallest\" />\n : <AIIcon size=\"small\" />\n }\n </IconButton>\n );\n\n return (\n <Menu\n open={menuOpen}\n onOpenChange={(open) => {\n setMenuOpen(open);\n if (!open) {\n setError(null);\n }\n }}\n trigger={trigger ?? defaultTrigger}\n >\n <div className=\"p-4 flex flex-col gap-3 min-w-[360px] max-w-[480px]\">\n <div className=\"flex items-center gap-2\">\n <AIIcon size=\"small\" />\n <Typography variant=\"subtitle2\">\n {existingCollection ? \"Modify Collection with AI\" : \"Generate Collection with AI\"}\n </Typography>\n </div>\n\n <Typography variant=\"caption\" color=\"secondary\">\n {existingCollection\n ? \"Describe the changes you want to make to this collection.\"\n : \"Describe the collection you want to create.\"\n }\n </Typography>\n\n <TextField\n size=\"small\"\n multiline\n autoFocus\n className=\"w-full text-text-primary dark:text-text-primary-dark\"\n value={prompt}\n onChange={(e) => setPrompt(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={existingCollection\n ? \"e.g., Add a thumbnail image field with storage, make price required...\"\n : \"e.g., Create a products collection with name, price, description, and category...\"\n }\n disabled={loading}\n />\n\n {error && (\n <Typography variant=\"caption\" className=\"text-red-500\">\n {error}\n </Typography>\n )}\n\n <div className=\"flex justify-end gap-2\">\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setMenuOpen(false)}\n disabled={loading}\n >\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n size=\"small\"\n onClick={handleGenerate}\n disabled={!prompt.trim() || loading}\n startIcon={loading ? <CircularProgress size=\"smallest\" /> : undefined}\n >\n {loading ? \"Generating...\" : \"Generate\"}\n </Button>\n </div>\n </div>\n </Menu>\n );\n}\n","import React, { useState } from \"react\";\nimport { AIIcon, EntityCollection, prettifyIdentifier, } from \"@firecms/core\";\nimport { Button, Card, Chip, cls, CodeIcon, Container, Icon, Tooltip, Typography, } from \"@firecms/ui\";\nimport { CollectionJsonImportDialog } from \"./CollectionJsonImportDialog\";\n\nimport { productsCollectionTemplate } from \"./templates/products_template\";\nimport { blogCollectionTemplate } from \"./templates/blog_template\";\nimport { usersCollectionTemplate } from \"./templates/users_template\";\nimport { ImportFileUpload } from \"@firecms/data_import\";\nimport { pagesCollectionTemplate } from \"./templates/pages_template\";\nimport { useFormex } from \"@firecms/formex\";\nimport { useCollectionEditorController } from \"../../useCollectionEditorController\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\n\nexport function CollectionEditorWelcomeView({\n path,\n parentCollection,\n onContinue,\n existingCollectionPaths,\n generateCollection,\n onAnalyticsEvent\n}: {\n path: string;\n parentCollection?: EntityCollection;\n onContinue: (importData?: object[], propertiesOrder?: string[]) => void;\n existingCollectionPaths?: string[];\n generateCollection?: CollectionGenerationCallback;\n onAnalyticsEvent?: (event: string, params?: object) => void;\n}) {\n\n const { pathSuggestions } = useCollectionEditorController();\n\n const filteredSuggestions = (pathSuggestions ?? []).filter(s => !(existingCollectionPaths ?? []).find(c => c.trim().toLowerCase() === s.trim().toLowerCase()));\n\n const {\n values,\n setFieldValue,\n setValues,\n submitCount\n } = useFormex<EntityCollection>();\n\n const [jsonImportOpen, setJsonImportOpen] = useState(false);\n\n return (\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"4xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <div\n className=\"flex flex-row py-2 pt-3 items-center\">\n <Typography variant={\"h4\"} className={\"flex-grow\"}>\n New collection\n </Typography>\n </div>\n\n {parentCollection && <Chip colorScheme={\"tealDarker\"}>\n <Typography variant={\"caption\"}>\n This is a subcollection of <b>{parentCollection.name}</b>\n </Typography>\n </Chip>}\n\n {(filteredSuggestions ?? []).length > 0 && <div className={\"my-2\"}>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Use one of the existing paths in your database:\n </Typography>\n <div className={\"flex flex-wrap gap-x-2 gap-y-1 items-center my-2 min-h-7\"}>\n\n {filteredSuggestions?.map((suggestion, index) => (\n <Chip key={suggestion}\n colorScheme={\"cyanLighter\"}\n onClick={() => {\n setFieldValue(\"name\", prettifyIdentifier(suggestion));\n setFieldValue(\"id\", suggestion);\n setFieldValue(\"path\", suggestion);\n setFieldValue(\"properties\", undefined);\n onContinue();\n }}\n size=\"small\">\n {suggestion}\n </Chip>\n ))}\n\n </div>\n\n </div>}\n <div className=\"flex flex-row gap-8\">\n\n {generateCollection && (\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Describe your collection to AI:\n </Typography>\n\n <AICollectionGeneratorPopover\n onGenerated={(generatedCollection) => {\n setValues(generatedCollection);\n onContinue();\n }}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n trigger={\n <Button\n variant=\"outlined\"\n startIcon={<AIIcon size=\"small\" />}\n >\n Generate with AI\n </Button>\n }\n />\n </div>\n )}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create from JSON configuration:\n </Typography>\n\n <Button\n variant={\"outlined\"}\n onClick={() => setJsonImportOpen(true)}\n startIcon={<CodeIcon size=\"small\" />}\n >\n Paste JSON Configuration\n </Button>\n\n <CollectionJsonImportDialog\n open={jsonImportOpen}\n onClose={() => setJsonImportOpen(false)}\n onImport={(collection) => {\n setValues(collection);\n onContinue();\n }}\n />\n </div>\n\n\n\n </div>\n\n\n {!parentCollection && <div>\n\n <Typography variant={\"caption\"}\n color={\"secondary\"}\n className={\"mb-2\"}>\n ● Create a collection from a file (csv, json, xls, xslx...)\n </Typography>\n\n <ImportFileUpload onDataAdded={(data, propertiesOrder) => onContinue(data, propertiesOrder)} />\n\n </div>}\n\n <div className={\"my-2\"}>\n <Typography variant={\"caption\"}\n color={\"secondary\"}>\n ● Select a template:\n </Typography>\n\n <div className={\"flex gap-2\"}>\n <TemplateButton title={\"Products\"}\n subtitle={\"A collection of products with images, prices and stock\"}\n icon={<Icon size={\"small\"}\n iconKey={productsCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(productsCollectionTemplate);\n onContinue();\n }} />\n <TemplateButton title={\"Users\"}\n subtitle={\"A collection of users with emails, names and roles\"}\n icon={<Icon size={\"small\"} iconKey={usersCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(usersCollectionTemplate);\n onContinue();\n }} />\n <TemplateButton title={\"Blog posts\"}\n subtitle={\"A collection of blog posts with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={blogCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(blogCollectionTemplate);\n onContinue();\n }} />\n <TemplateButton title={\"Pages\"}\n subtitle={\"A collection of pages with images, authors and complex content\"}\n icon={<Icon size={\"small\"} iconKey={pagesCollectionTemplate.icon! as string} />}\n onClick={() => {\n setValues(pagesCollectionTemplate);\n onContinue();\n }} />\n </div>\n\n </div>\n\n\n\n </Container>\n </div>\n );\n}\n\nexport function TemplateButton({\n title,\n subtitle,\n icon,\n onClick\n}: {\n title: string,\n icon: React.ReactNode,\n subtitle: string,\n onClick?: () => void\n}) {\n\n return (\n <Tooltip title={subtitle}\n asChild={true}>\n <Card\n onClick={onClick}\n className={cls(\n \"my-2 rounded-md border px-4 py-3 focus:outline-none transition ease-in-out duration-150 flex flex-row gap-4 items-center\",\n \"text-text-secondary dark:text-text-secondary-dark\",\n \"hover:border-primary-dark hover:text-primary-dark dark:hover:text-primary focus:ring-primary hover:ring-1 hover:ring-primary\",\n \"border-surface-400 dark:border-surface-600 \"\n )}\n >\n {icon}\n <div className={\"flex flex-col items-start\"}>\n\n <Typography variant={\"subtitle2\"}>\n {title}\n </Typography>\n\n </div>\n </Card>\n </Tooltip>\n );\n\n}\n","import {\n DataNewPropertiesMapping,\n getInferenceType,\n ImportConfig,\n ImportNewPropertyFieldPreview\n} from \"@firecms/data_import\";\nimport { getIn, useFormex } from \"@firecms/formex\";\n\nimport { getFieldConfig, getFieldId, Properties, Property, PropertyConfig, PropertyConfigBadge, } from \"@firecms/core\";\nimport { cls, Container, Select, SelectItem, Tooltip, Typography } from \"@firecms/ui\";\nimport React, { useState } from \"react\";\nimport { OnPropertyChangedParams, PropertyFormDialog, PropertyWithId } from \"../PropertyEditView\";\nimport { getFullId, idToPropertiesPath, namespaceToPropertiesOrderPath } from \"../util\";\nimport { PersistedCollection } from \"../../../types/persisted_collection\";\nimport { updatePropertyFromWidget } from \"../utils/update_property_for_widget\";\nimport { supportedFields } from \"../utils/supported_fields\";\nimport { buildPropertyFromData } from \"@firecms/schema_inference\";\n\nexport function CollectionEditorImportMapping({\n importConfig,\n propertyConfigs,\n collectionEditable\n }:\n {\n importConfig: ImportConfig,\n propertyConfigs: Record<string, PropertyConfig>,\n collectionEditable: boolean\n }) {\n\n // const {\n // values,\n // setFieldValue,\n // setFieldTouched,\n // setValues,\n // submitCount\n // } = useFormex();\n\n const {\n setFieldValue,\n setFieldTouched,\n values\n } = useFormex<PersistedCollection>();\n const [selectedProperty, setSelectedProperty] = useState<PropertyWithId | undefined>(undefined);\n\n const currentPropertiesOrderRef = React.useRef<{\n [key: string]: string[]\n }>(values.propertiesOrder ? { \"\": values.propertiesOrder } : {});\n\n const propertyKey = selectedProperty ? selectedProperty.id : undefined;\n const property = selectedProperty || undefined;\n\n const onPropertyChanged = ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // setSelectedProperty(property);\n const getCurrentPropertiesOrder = (namespace?: string) => {\n if (!namespace) return currentPropertiesOrderRef.current[\"\"];\n return currentPropertiesOrderRef.current[namespace] ?? getIn(values, namespaceToPropertiesOrderPath(namespace));\n }\n\n const updatePropertiesOrder = (newPropertiesOrder: string[], namespace?: string) => {\n const propertiesOrderPath = namespaceToPropertiesOrderPath(namespace);\n\n setFieldValue(propertiesOrderPath, newPropertiesOrder, false);\n currentPropertiesOrderRef.current[namespace ?? \"\"] = newPropertiesOrder;\n\n };\n\n // If the id has changed we need to a little cleanup\n if (previousId && previousId !== id) {\n const previousFullId = getFullId(previousId, namespace);\n const previousPropertyPath = idToPropertiesPath(previousFullId);\n\n const currentPropertiesOrder = getCurrentPropertiesOrder(namespace);\n\n // replace previousId with id in propertiesOrder\n const newPropertiesOrder = currentPropertiesOrder\n .map((p) => p === previousId ? id : p)\n .filter((p) => p !== undefined) as string[];\n updatePropertiesOrder(newPropertiesOrder, namespace);\n\n // replace previousId with id in headersMapping\n const newHeadersMapping = { ...importConfig.headersMapping };\n Object.keys(newHeadersMapping).forEach((key) => {\n if (newHeadersMapping[key] === previousId) {\n newHeadersMapping[key] = id ?? \"\";\n }\n });\n importConfig.setHeadersMapping(newHeadersMapping);\n\n // if (id) {\n // setSelectedPropertyIndex(newPropertiesOrder.indexOf(id));\n // setSelectedPropertyKey(id);\n // }\n setFieldValue(previousPropertyPath, undefined, false);\n setFieldTouched(previousPropertyPath, false, false);\n }\n\n if (propertyPath) {\n setFieldValue(propertyPath, property, false);\n setFieldTouched(propertyPath, true, false);\n }\n };\n const onPropertyTypeChanged = async ({\n id,\n importKey,\n property,\n namespace\n }: OnPropertyChangedParams & {\n importKey: string\n }) => {\n\n const fullId = id ? getFullId(id, namespace) : undefined;\n const propertyPath = fullId ? idToPropertiesPath(fullId) : undefined;\n\n // we try to infer the rest of the properties of a property, from the type and the data\n const propertyData = importConfig.importData.map((d) => getIn(d, importKey));\n const inferredNewProperty = {\n ...buildPropertyFromData(propertyData, property, getInferenceType),\n editable: true\n };\n\n if (propertyPath) {\n if (inferredNewProperty) {\n setFieldValue(propertyPath, inferredNewProperty, false);\n } else {\n setFieldValue(propertyPath, property, false);\n }\n setFieldTouched(propertyPath, true, false);\n }\n };\n\n return (\n\n <div className={\"overflow-auto my-auto\"}>\n <Container maxWidth={\"6xl\"} className={\"flex flex-col gap-4 p-8 m-auto\"}>\n\n <Typography variant=\"h6\" className={\"my-4 ml-3.5\"}>Data property mapping</Typography>\n\n <DataNewPropertiesMapping importConfig={importConfig}\n destinationProperties={values.properties as Properties}\n buildPropertyView={({\n property,\n propertyKey,\n importKey,\n isIdColumn\n }) => {\n if (isIdColumn) {\n return <Typography> This column will be used as ID</Typography>\n }\n\n return <ImportNewPropertyFieldPreview\n property={property}\n propertyKey={propertyKey}\n onPropertyNameChanged={(propertyKey: string, value: string) => setFieldValue(`properties.${propertyKey}.name`, value, false)}\n onEditClick={() => {\n if (!propertyKey || !property) return;\n setSelectedProperty({\n ...property,\n id: propertyKey,\n editable: true\n });\n }}\n propertyTypeView={<PropertySelect property={property}\n disabled={false}\n onPropertyChanged={(props) => onPropertyTypeChanged({\n ...props,\n importKey\n })}\n propertyKey={propertyKey}\n propertyConfigs={propertyConfigs}/>}\n />;\n }}/>\n </Container>\n\n <PropertyFormDialog\n open={selectedProperty !== undefined}\n propertyKey={propertyKey}\n property={property}\n inArray={false}\n autoUpdateId={false}\n onPropertyChanged={onPropertyChanged}\n allowDataInference={false}\n collectionEditable={collectionEditable}\n onOkClicked={() => {\n setSelectedProperty(undefined);\n }}\n onCancel={() => {\n setSelectedProperty(undefined);\n }}\n autoOpenTypeSelect={false}\n existingProperty={false}\n propertyConfigs={propertyConfigs}/>\n\n <div style={{ height: \"52px\" }}/>\n </div>\n );\n\n}\n\nfunction PropertySelect({\n property,\n onPropertyChanged,\n propertyKey,\n propertyConfigs,\n disabled\n }: {\n property: Property | null,\n propertyKey: string | null,\n onPropertyChanged: ({\n id,\n property,\n previousId,\n namespace\n }: OnPropertyChangedParams) => void,\n propertyConfigs: Record<string, PropertyConfig>,\n disabled?: boolean\n}) {\n\n const fieldId = property ? getFieldId(property) : null;\n const widget = property ? getFieldConfig(property, propertyConfigs) : null;\n\n const [selectOpen, setSelectOpen] = useState(false);\n\n return <Tooltip title={property && widget ? `${widget?.name} - ${property.dataType}` : undefined}\n open={selectOpen ? false : undefined}>\n <Select\n open={selectOpen}\n onOpenChange={setSelectOpen}\n invisible={true}\n size={\"large\"}\n className={\"w-full\"}\n disabled={disabled}\n error={!widget}\n fullWidth={true}\n value={fieldId ?? \"\"}\n placeholder={\"Select a property widget\"}\n position={\"item-aligned\"}\n renderValue={(value) => {\n if (!widget) return null;\n return <PropertyConfigBadge propertyConfig={widget}/>\n }}\n onValueChange={(newSelectedWidgetId) => {\n const newProperty = updatePropertyFromWidget(property, newSelectedWidgetId, propertyConfigs)\n if (!propertyKey) return;\n onPropertyChanged({\n id: propertyKey,\n property: newProperty,\n previousId: propertyKey,\n namespace: undefined\n });\n }}>\n {Object.entries(supportedFields).map(([key, widget]) => {\n return <PropertySelectItem\n key={key}\n value={key}\n optionDisabled={false}\n propertyConfig={widget}\n existing={false}/>;\n })\n }\n </Select>\n </Tooltip>;\n}\n\nexport interface PropertySelectItemProps {\n value: string;\n optionDisabled: boolean;\n propertyConfig: PropertyConfig;\n existing: boolean;\n}\n\nexport function PropertySelectItem({ value, optionDisabled, propertyConfig, existing }: PropertySelectItemProps) {\n return <SelectItem value={value}\n disabled={optionDisabled}\n className={\"flex flex-row items-center\"}>\n <div\n className={cls(\n \"flex flex-row items-center text-base min-h-[48px]\",\n optionDisabled ? \"w-full\" : \"\")}>\n <div className={\"mr-8\"}>\n <PropertyConfigBadge propertyConfig={propertyConfig}/>\n </div>\n <div>\n <div>{propertyConfig.name}</div>\n <Typography variant={\"caption\"}\n color={\"disabled\"}\n className={\"max-w-sm\"}>\n {existing && optionDisabled ? \"You can only switch to widgets that use the same data type\" : propertyConfig.description}\n </Typography>\n </div>\n </div>\n </SelectItem>\n}\n","import { convertDataToEntity, ImportConfig } from \"@firecms/data_import\";\nimport {\n CircularProgressCenter,\n EntityCollectionTable,\n Properties,\n useAuthController,\n useNavigationController,\n useSelectionController\n} from \"@firecms/core\";\nimport { useEffect, useState } from \"react\";\nimport { Typography } from \"@firecms/ui\";\n\nexport function CollectionEditorImportDataPreview({\n importConfig,\n properties,\n propertiesOrder\n }: {\n importConfig: ImportConfig,\n properties: Properties,\n propertiesOrder: string[]\n}) {\n\n const authController = useAuthController();\n const navigation = useNavigationController();\n const [loading, setLoading] = useState<boolean>(false);\n\n async function loadEntities() {\n const mappedData = importConfig.importData.map(d => convertDataToEntity(authController,\n navigation,\n d,\n importConfig.idColumn,\n importConfig.headersMapping,\n properties,\n \"TEMP_PATH\",\n importConfig.defaultValues));\n importConfig.setEntities(mappedData);\n }\n\n useEffect(() => {\n loadEntities().finally(() => setLoading(false));\n }, []);\n\n const selectionController = useSelectionController();\n if (loading)\n return <CircularProgressCenter/>\n\n return <EntityCollectionTable\n title={<div>\n <Typography variant={\"subtitle2\"}>Imported data preview</Typography>\n <Typography variant={\"caption\"}>Entities with the same id will be overwritten</Typography>\n </div>}\n tableController={{\n data: importConfig.entities,\n dataLoading: false,\n noMoreToLoad: false\n }}\n endAdornment={<div className={\"h-12\"}/>}\n filterable={false}\n sortable={false}\n selectionController={selectionController}\n displayedColumnIds={propertiesOrder.map(p => ({\n key: p,\n disabled: false\n }))}\n openEntityMode={\"side_panel\"}\n properties={properties}\n enablePopupIcon={false}/>\n\n}\n","import { Properties, slugify } from \"@firecms/core\";\nimport { ImportConfig } from \"@firecms/data_import\";\n\nexport function cleanPropertiesFromImport(properties: Properties, parentSlug = \"\"): {\n headersMapping: ImportConfig[\"headersMapping\"],\n properties: Properties,\n idColumn?: ImportConfig[\"idColumn\"],\n} {\n\n const result = Object.keys(properties).reduce((acc, key) => {\n const property = properties[key];\n const slug = slugify(key);\n const fullSlug = parentSlug ? `${parentSlug}.${slug}` : slug;\n\n if (property.dataType === \"map\" && property.properties) {\n const slugifiedResult = cleanPropertiesFromImport(property.properties as Properties, fullSlug);\n return {\n headersMapping: { ...acc.headersMapping, [key]: fullSlug },\n properties: {\n ...acc.properties,\n [slug]: {\n ...property,\n properties: slugifiedResult.properties,\n propertiesOrder: Object.keys(slugifiedResult.properties)\n }\n }\n }\n }\n\n const updatedProperties = {\n ...acc.properties,\n [slug]: property\n } as Properties;\n\n const headersMapping = { ...acc.headersMapping, [key]: fullSlug } as Record<string, string>;\n\n return {\n headersMapping,\n properties: updatedProperties,\n }\n }, { headersMapping: {}, properties: {} });\n\n const firstKey = Object.keys(result.headersMapping)?.[0];\n let idColumn: string | undefined;\n if (firstKey?.includes(\"id\") || firstKey?.includes(\"key\")) {\n idColumn = firstKey;\n }\n\n return {\n ...result,\n idColumn\n };\n}\n","import * as React from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n CircularProgressCenter,\n ConfirmationDialog,\n Entity,\n EntityCollection,\n ErrorView,\n isPropertyBuilder,\n MapProperty,\n mergeDeep,\n NavigationResult,\n Properties,\n PropertiesOrBuilders,\n Property,\n PropertyConfig,\n PropertyOrBuilder,\n randomString,\n removeInitialAndTrailingSlashes,\n removeUndefined,\n useAuthController,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport {\n ArrowBackIcon,\n Button,\n CheckIcon,\n cls,\n coolIconKeys,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n LoadingButton,\n Tab,\n Tabs,\n Typography\n} from \"@firecms/ui\";\nimport { YupSchema } from \"./CollectionYupValidation\";\nimport { GeneralSettingsForm } from \"./GeneralSettingsForm\";\nimport { DisplaySettingsForm } from \"./DisplaySettingsForm\";\nimport { CollectionPropertiesEditorForm } from \"./CollectionPropertiesEditorForm\";\nimport { UnsavedChangesDialog } from \"./UnsavedChangesDialog\";\nimport { ExtendSettingsForm } from \"./ExtendSettingsForm\";\nimport { CollectionsConfigController } from \"../../types/config_controller\";\nimport { CollectionEditorWelcomeView } from \"./CollectionEditorWelcomeView\";\nimport { CollectionInference } from \"../../types/collection_inference\";\nimport { getInferenceType, ImportSaveInProgress, useImportConfig } from \"@firecms/data_import\";\nimport { buildEntityPropertiesFromData } from \"@firecms/schema_inference\";\nimport { CollectionEditorImportMapping } from \"./import/CollectionEditorImportMapping\";\nimport { CollectionEditorImportDataPreview } from \"./import/CollectionEditorImportDataPreview\";\nimport { cleanPropertiesFromImport } from \"./import/clean_import_data\";\nimport { PersistedCollection } from \"../../types/persisted_collection\";\nimport { Formex, FormexController, useCreateFormex } from \"@firecms/formex\";\nimport { getFullIdPath } from \"./util\";\nimport { AICollectionGeneratorPopover } from \"./AICollectionGeneratorPopover\";\nimport { AIModifiedPathsProvider, useAIModifiedPaths } from \"./AIModifiedPathsContext\";\nimport { CollectionOperation, CollectionGenerationCallback } from \"../../api/generateCollectionApi\";\n\nexport interface CollectionEditorDialogProps {\n open: boolean;\n isNewCollection: boolean;\n initialValues?: {\n group?: string,\n path?: string,\n name?: string,\n }\n /**\n * A collection to duplicate from. If provided, the new collection will be\n * pre-populated with the same properties (but with empty name, path, and id).\n */\n copyFrom?: PersistedCollection;\n editedCollectionId?: string;\n fullPath?: string; // full path of this particular collection, like `products/123/locales`\n parentCollectionIds?: string[]; // path ids of the parent collection, like [`products`]\n handleClose: (collection?: EntityCollection) => void;\n configController: CollectionsConfigController;\n reservedGroups?: string[];\n collectionInference?: CollectionInference;\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n getUser?: (uid: string) => User | null;\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n parentCollection?: PersistedCollection;\n existingEntities?: Entity<any>[];\n /**\n * Initial view to open when editing: \"general\", \"display\", or \"properties\".\n * For new collections, this is ignored.\n */\n initialView?: \"general\" | \"display\" | \"properties\";\n /**\n * If true, auto-expand the Kanban configuration section.\n */\n expandKanban?: boolean;\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n /**\n * Optional analytics callback\n */\n onAnalyticsEvent?: (event: string, params?: object) => void;\n}\n\nexport function CollectionEditorDialog(props: CollectionEditorDialogProps) {\n\n const open = props.open;\n\n const [formDirty, setFormDirty] = React.useState<boolean>(false);\n const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] = React.useState<boolean>(false);\n\n const handleCancel = () => {\n if (!formDirty) {\n props.handleClose(undefined);\n } else {\n setUnsavedChangesDialogOpen(true);\n }\n };\n\n useEffect(() => {\n if (!open) {\n setFormDirty(false);\n setUnsavedChangesDialogOpen(false);\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n fullWidth={true}\n fullHeight={true}\n scrollable={false}\n maxWidth={\"7xl\"}\n onOpenChange={(open) => !open ? handleCancel() : undefined}\n >\n <DialogTitle hidden>Collection editor</DialogTitle>\n <AIModifiedPathsProvider>\n {open && <CollectionEditor {...props}\n handleCancel={handleCancel}\n setFormDirty={setFormDirty} />}\n\n <UnsavedChangesDialog\n open={unsavedChangesDialogOpen}\n handleOk={() => props.handleClose(undefined)}\n handleCancel={() => setUnsavedChangesDialogOpen(false)}\n body={\"There are unsaved changes in this collection\"} />\n </AIModifiedPathsProvider>\n </Dialog>\n );\n}\n\ntype EditorView = \"welcome\"\n | \"general\"\n | \"display\"\n | \"import_data_mapping\"\n | \"import_data_preview\"\n | \"import_data_saving\"\n | \"properties\"\n | \"loading\"\n | \"extra_view\"\n | \"extend\";\n\nexport function CollectionEditor(props: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void\n}) {\n const { propertyConfigs } = useCustomizationController();\n const navigation = useNavigationController();\n const authController = useAuthController();\n\n const {\n topLevelNavigation,\n collections\n } = navigation;\n\n const initialValuesProp = props.initialValues;\n const copyFromProp = props.copyFrom;\n // Skip templates when duplicating (copyFrom is provided)\n const includeTemplates = !copyFromProp && !initialValuesProp?.path && (props.parentCollectionIds ?? []).length === 0;\n const collectionsInThisLevel = (props.parentCollection ? props.parentCollection.subcollections : collections) ?? [];\n const existingPaths = collectionsInThisLevel.map(col => col.path.trim().toLowerCase());\n const existingIds = collectionsInThisLevel.map(col => col.id?.trim().toLowerCase()).filter(Boolean) as string[];\n const [collection, setCollection] = React.useState<PersistedCollection<any> | undefined>();\n const [initialLoadingCompleted, setInitialLoadingCompleted] = React.useState(false);\n\n useEffect(() => {\n try {\n if (navigation.initialised) {\n if (props.editedCollectionId) {\n setCollection(navigation.getCollectionFromPaths([...(props.parentCollectionIds ?? []), props.editedCollectionId]));\n } else {\n setCollection(undefined);\n }\n setInitialLoadingCompleted(true);\n }\n } catch (e) {\n console.error(e);\n }\n }, [props.editedCollectionId, props.parentCollectionIds, navigation.initialised, navigation.getCollectionFromPaths]);\n\n if (!topLevelNavigation) {\n throw Error(\"Internal: Navigation not ready in collection editor\");\n }\n\n const {\n groups\n }: NavigationResult = topLevelNavigation;\n\n const initialCollection = collection\n ? {\n ...collection,\n id: collection.id ?? collection.path ?? randomString(16)\n }\n : undefined;\n\n // Build initial values - handle copyFrom for duplication\n const initialValues: PersistedCollection<any> = initialCollection\n ? applyPropertyConfigs(initialCollection, propertyConfigs)\n : copyFromProp\n ? {\n // When duplicating, copy all properties but clear identifiers\n ...copyFromProp,\n id: randomString(16),\n path: \"\",\n name: \"\",\n subcollections: undefined, // Don't copy subcollections\n ownerId: authController.user?.uid ?? \"\"\n }\n : {\n id: initialValuesProp?.path ?? randomString(16),\n path: initialValuesProp?.path ?? \"\",\n name: initialValuesProp?.name ?? \"\",\n group: initialValuesProp?.group ?? \"\",\n properties: {} as PropertiesOrBuilders,\n propertiesOrder: [],\n icon: coolIconKeys[Math.floor(Math.random() * coolIconKeys.length)],\n ownerId: authController.user?.uid ?? \"\"\n };\n\n if (!initialLoadingCompleted) {\n return <CircularProgressCenter />;\n }\n\n if (!props.isNewCollection && (!navigation.initialised || !initialLoadingCompleted)) {\n return <CircularProgressCenter />;\n }\n\n return <CollectionEditorInternal\n {...props}\n initialValues={initialValues}\n existingPaths={existingPaths}\n existingIds={existingIds}\n includeTemplates={includeTemplates}\n collection={collection}\n setCollection={setCollection}\n groups={groups}\n propertyConfigs={propertyConfigs} />\n\n}\n\nfunction CollectionEditorInternal<M extends Record<string, any>>({\n isNewCollection,\n configController,\n editedCollectionId,\n parentCollectionIds,\n fullPath,\n collectionInference,\n handleClose,\n reservedGroups,\n extraView,\n handleCancel,\n setFormDirty,\n getUser,\n parentCollection,\n getData,\n existingPaths,\n existingIds,\n includeTemplates,\n collection,\n setCollection,\n initialValues,\n propertyConfigs,\n groups,\n existingEntities,\n initialView: initialViewProp,\n expandKanban,\n generateCollection,\n onAnalyticsEvent\n}: CollectionEditorDialogProps & {\n handleCancel: () => void,\n setFormDirty: (dirty: boolean) => void,\n initialValues: PersistedCollection<M>,\n existingPaths: string[],\n existingIds: string[],\n includeTemplates: boolean,\n collection: PersistedCollection<M> | undefined,\n setCollection: (collection: PersistedCollection<M>) => void,\n propertyConfigs: Record<string, PropertyConfig<any>>,\n groups: string[],\n}\n) {\n\n const importConfig = useImportConfig();\n const navigation = useNavigationController();\n const snackbarController = useSnackbarController();\n\n // Use this ref to store which properties have errors\n const propertyErrorsRef = useRef({});\n\n const initialView = isNewCollection\n ? (includeTemplates ? \"welcome\" : \"general\")\n : (initialViewProp ?? \"properties\");\n const [currentView, setCurrentView] = useState<EditorView>(initialView); // this view can edit either the details view or the properties one\n\n const [error, setError] = React.useState<Error | undefined>();\n\n const saveCollection = (updatedCollection: PersistedCollection<M>): Promise<boolean> => {\n const id = updatedCollection.id || updatedCollection.path;\n\n return configController.saveCollection({\n id,\n collectionData: updatedCollection,\n previousId: editedCollectionId,\n parentCollectionIds\n })\n .then(() => {\n setError(undefined);\n return true;\n })\n .catch((e) => {\n setError(e);\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n };\n\n const setNextMode = () => {\n if (currentView === \"general\") {\n if (importConfig.inUse) {\n setCurrentView(\"import_data_saving\");\n } else if (extraView) {\n setCurrentView(\"extra_view\");\n } else {\n setCurrentView(\"properties\");\n }\n } else if (currentView === \"welcome\") {\n setCurrentView(\"general\");\n } else if (currentView === \"import_data_mapping\") {\n setCurrentView(\"import_data_preview\");\n } else if (currentView === \"import_data_preview\") {\n setCurrentView(\"general\");\n } else if (currentView === \"extra_view\") {\n setCurrentView(\"properties\");\n } else {\n setCurrentView(\"general\");\n }\n\n };\n\n const doCollectionInference = collectionInference ? (collection: PersistedCollection<any>) => {\n if (!collectionInference) return undefined;\n return collectionInference?.(\n collection.path,\n collection.collectionGroup ?? false,\n parentPaths ?? [],\n collection.databaseId,\n collection.initialFilter,\n collection.initialSort\n );\n } : undefined;\n\n const inferCollectionFromData = async (newCollection: PersistedCollection<M>) => {\n\n try {\n if (!doCollectionInference) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n\n setCurrentView(\"loading\");\n\n const inferredCollection = await doCollectionInference?.(newCollection);\n\n if (!inferredCollection) {\n setCollection(newCollection);\n return Promise.resolve(newCollection);\n }\n const values = {\n ...(newCollection ?? {})\n };\n\n if (Object.keys(inferredCollection.properties ?? {}).length > 0) {\n values.properties = inferredCollection.properties as PropertiesOrBuilders<M>;\n values.propertiesOrder = inferredCollection.propertiesOrder as Extract<keyof M, string>[];\n }\n\n if (!values.propertiesOrder) {\n values.propertiesOrder = Object.keys(values.properties) as Extract<keyof M, string>[];\n return values;\n }\n\n setCollection(values);\n console.debug(\"Inferred collection\", {\n newCollection: newCollection ?? {},\n values\n });\n return values;\n } catch (e: any) {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error inferring collection: \" + (e.message ?? \"Details in the console\")\n });\n return newCollection;\n }\n };\n\n const onSubmit = (newCollectionState: PersistedCollection<M>, formexController: FormexController<PersistedCollection<M>>) => {\n console.debug(\"Submitting collection\", newCollectionState);\n try {\n\n if (!isNewCollection) {\n saveCollection(newCollectionState).then(() => {\n aiModifiedPaths?.clearAllPaths();\n formexController.resetForm();\n handleClose(newCollectionState);\n });\n return;\n }\n\n if (currentView === \"welcome\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"general\") {\n if (extraView || importConfig.inUse) {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n } else if (isNewCollection) {\n inferCollectionFromData(newCollectionState)\n .then((values) => {\n formexController.resetForm({\n values: values ?? newCollectionState,\n touched: {\n path: true,\n name: true\n }\n });\n }).finally(() => {\n setNextMode();\n });\n } else {\n formexController.resetForm({ values: newCollectionState });\n setNextMode();\n }\n } else if (currentView === \"extra_view\") {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n } else if (currentView === \"import_data_mapping\") {\n setNextMode();\n } else if (currentView === \"import_data_preview\") {\n setNextMode();\n } else if (currentView === \"properties\") {\n saveCollection(newCollectionState).then(() => {\n formexController.resetForm({ values: initialValues });\n setNextMode();\n handleClose(newCollectionState);\n });\n } else {\n setNextMode();\n formexController.resetForm({ values: newCollectionState });\n }\n } catch (e: any) {\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting collection: \" + (e.message ?? \"Details in the console\")\n });\n console.error(e);\n formexController.resetForm({ values: newCollectionState });\n }\n };\n\n const validation = (col: PersistedCollection) => {\n\n let errors: Record<string, any> = {};\n const schema = (currentView === \"properties\" || currentView === \"extend\" || currentView === \"general\") && YupSchema;\n if (schema) {\n try {\n schema.validateSync(col, { abortEarly: false });\n } catch (e: any) {\n e.inner.forEach((err: any) => {\n errors[err.path] = err.message;\n });\n }\n }\n if (currentView === \"properties\") {\n errors = { ...errors, ...propertyErrorsRef.current };\n }\n if (currentView === \"general\") {\n const pathError = validatePath(col.path, isNewCollection, existingPaths, col.id);\n if (pathError) {\n errors.path = pathError;\n }\n const idError = validateId(col.id, isNewCollection, existingPaths, existingIds);\n if (idError) {\n errors.id = idError;\n }\n }\n return errors;\n };\n\n const formController = useCreateFormex<PersistedCollection<M>>({\n initialValues,\n onSubmit,\n validation,\n debugId: \"COLLECTION_EDITOR\"\n });\n\n const {\n values,\n setFieldValue,\n isSubmitting,\n dirty,\n submitCount\n } = formController;\n\n const path = values.path;\n const updatedFullPath = fullPath?.includes(\"/\") ? fullPath?.split(\"/\").slice(0, -1).join(\"/\") + \"/\" + path : path; // TODO: this path is wrong\n const pathError = validatePath(path, isNewCollection, existingPaths, values.id);\n\n const parentPaths = !pathError && parentCollectionIds ? navigation.convertIdsToPaths(parentCollectionIds) : undefined;\n const resolvedPath = !pathError ? navigation.resolveIdsFrom(updatedFullPath) : undefined;\n\n const getDataWithPath = resolvedPath && getData ? async () => {\n const data = await getData!(resolvedPath, parentPaths ?? []);\n if (existingEntities) {\n const existingData = existingEntities.map(e => e.values);\n data.push(...existingData);\n }\n return data;\n } : undefined;\n\n useEffect(() => {\n setFormDirty(dirty);\n }, [dirty]);\n\n function onImportDataSet(data: object[], propertiesOrder?: string[]) {\n importConfig.setInUse(true);\n buildEntityPropertiesFromData(data, getInferenceType)\n .then((properties: Properties) => {\n const res = cleanPropertiesFromImport(properties);\n\n importConfig.setIdColumn(res.idColumn);\n importConfig.setImportData(data);\n importConfig.setHeadersMapping(res.headersMapping);\n const filteredHeadingsOrder = ((propertiesOrder ?? [])\n .filter((key) => res.headersMapping[key]) as string[]) ?? Object.keys(res.properties);\n importConfig.setHeadingsOrder(filteredHeadingsOrder);\n importConfig.setOriginProperties(res.properties);\n\n const mappedHeadings = (propertiesOrder ?? []).map((key) => res.headersMapping[key]).filter(Boolean) as string[] ?? Object.keys(res.properties);\n setFieldValue(\"properties\", res.properties);\n setFieldValue(\"propertiesOrder\", mappedHeadings);\n });\n }\n\n const validValues = Boolean(values.name) && Boolean(values.id);\n\n const onImportMappingComplete = () => {\n const updatedProperties = { ...values.properties };\n if (importConfig.idColumn)\n delete updatedProperties[importConfig.idColumn];\n setFieldValue(\"properties\", updatedProperties);\n // setFieldValue(\"propertiesOrder\", Object.values(importConfig.headersMapping));\n setNextMode();\n };\n\n const editable = collection?.editable === undefined || collection?.editable === true;\n // @ts-ignore\n const isMergedCollection = collection?.merged ?? false;\n const collectionEditable = editable || isNewCollection;\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n if (!collection) return;\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n handleCancel();\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n const onWelcomeScreenContinue = (importData?: object[], propertiesOrder?: string[]) => {\n if (importData) {\n onImportDataSet(importData, propertiesOrder);\n setCurrentView(\"import_data_mapping\");\n } else {\n setCurrentView(\"general\");\n }\n };\n\n const aiModifiedPaths = useAIModifiedPaths();\n\n const handleAIGenerated = (generatedCollection: EntityCollection, operations?: CollectionOperation[]) => {\n formController.setValues(generatedCollection as PersistedCollection<M>);\n if (operations && aiModifiedPaths) {\n aiModifiedPaths.addModifiedPaths(operations);\n }\n };\n\n return <DialogContent fullHeight={true}>\n <Formex value={formController}>\n\n <>\n {!isNewCollection && <div className={cls(\"px-4 py-2 w-full flex items-center justify-end gap-2 bg-surface-50 dark:bg-surface-950 border-b\", defaultBorderMixin)}>\n {generateCollection && (\n <AICollectionGeneratorPopover\n existingCollection={values}\n onGenerated={handleAIGenerated}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n />\n )}\n <Tabs value={currentView}\n onValueChange={(v) => setCurrentView(v as EditorView)}>\n <Tab value={\"general\"}>\n General\n </Tab>\n <Tab value={\"display\"}>\n Display\n </Tab>\n <Tab value={\"properties\"}>\n Properties\n </Tab>\n <Tab value={\"extend\"}>\n Extend\n </Tab>\n </Tabs>\n </div>}\n\n <form noValidate\n onSubmit={formController.handleSubmit}\n className={cls(\n isNewCollection ? \"h-full\" : \"h-[calc(100%-48px)]\",\n \"flex-grow flex flex-col relative\")}>\n\n {currentView === \"loading\" &&\n <CircularProgressCenter />}\n\n {currentView === \"extra_view\" &&\n path &&\n extraView?.View &&\n <extraView.View path={path} />}\n\n {currentView === \"welcome\" &&\n <CollectionEditorWelcomeView\n path={path}\n onContinue={onWelcomeScreenContinue}\n existingCollectionPaths={existingPaths}\n parentCollection={parentCollection}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent} />}\n\n {currentView === \"import_data_mapping\" && importConfig &&\n <CollectionEditorImportMapping importConfig={importConfig}\n collectionEditable={collectionEditable}\n propertyConfigs={propertyConfigs} />}\n\n {currentView === \"import_data_preview\" && importConfig &&\n <CollectionEditorImportDataPreview importConfig={importConfig}\n properties={values.properties as Properties}\n propertiesOrder={values.propertiesOrder as string[]} />}\n\n {currentView === \"import_data_saving\" && importConfig &&\n <ImportSaveInProgress importConfig={importConfig}\n collection={values}\n path={path}\n onImportSuccess={async (importedCollection) => {\n snackbarController.open({\n type: \"info\",\n message: \"Data imported successfully\"\n });\n await saveCollection(values);\n handleClose(importedCollection);\n }}\n />}\n\n {currentView === \"general\" &&\n <GeneralSettingsForm\n existingPaths={existingPaths}\n existingIds={existingIds}\n parentCollection={parentCollection}\n isNewCollection={isNewCollection} />\n }\n\n {currentView === \"display\" &&\n <DisplaySettingsForm expandKanban={expandKanban} />\n }\n\n {currentView === \"extend\" && collection &&\n <ExtendSettingsForm\n collection={collection}\n parentCollection={parentCollection}\n configController={configController}\n collectionInference={collectionInference}\n getUser={getUser}\n parentCollectionIds={parentCollectionIds}\n isMergedCollection={!isNewCollection && isMergedCollection}\n onResetToCode={() => setDeleteRequested(true)} />\n }\n\n {currentView === \"properties\" &&\n <CollectionPropertiesEditorForm\n showErrors={submitCount > 0}\n isNewCollection={isNewCollection}\n reservedGroups={reservedGroups}\n onPropertyError={(propertyKey, namespace, error) => {\n const current = removeUndefined({\n ...propertyErrorsRef.current,\n [getFullIdPath(propertyKey, namespace)]: removeUndefined(error, true)\n }, true);\n propertyErrorsRef.current = current;\n formController.validate();\n }}\n getUser={getUser}\n getData={getDataWithPath}\n doCollectionInference={doCollectionInference}\n propertyConfigs={propertyConfigs}\n collectionEditable={collectionEditable}\n extraIcon={extraView?.icon &&\n <IconButton\n color={\"primary\"}\n onClick={() => setCurrentView(\"extra_view\")}>\n {extraView.icon}\n </IconButton>} />\n }\n\n <DialogActions\n position={\"absolute\"}>\n {error && <ErrorView error={error} />}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_mapping\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n importConfig.setInUse(false);\n return setCurrentView(\"welcome\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"import_data_preview\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => {\n setCurrentView(\"import_data_mapping\");\n }}>\n Back\n </Button>}\n\n {isNewCollection && includeTemplates && currentView === \"general\" &&\n <Button variant={\"text\"}\n type=\"button\"\n onClick={() => setCurrentView(\"welcome\")}>\n Back\n </Button>}\n\n {isNewCollection && currentView === \"properties\" && <Button variant={\"text\"}\n type=\"button\"\n color={\"neutral\"}\n onClick={() => setCurrentView(\"general\")}>\n <ArrowBackIcon />\n Back\n </Button>}\n\n <Button variant={\"text\"}\n color={\"neutral\"}\n onClick={() => {\n handleCancel();\n }}>\n Cancel\n </Button>\n\n {currentView === \"welcome\" &&\n <Button variant={\"text\"} onClick={() => onWelcomeScreenContinue()}>\n Continue from scratch\n </Button>}\n\n {isNewCollection && currentView === \"import_data_mapping\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={onImportMappingComplete}\n >\n Next\n </Button>}\n\n {isNewCollection && currentView === \"import_data_preview\" &&\n <Button\n variant={\"filled\"}\n color=\"primary\"\n onClick={() => {\n setNextMode();\n }}\n >\n Next\n </Button>}\n\n {isNewCollection && (currentView === \"general\" || currentView === \"properties\") &&\n <LoadingButton\n variant={\"filled\"}\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n disabled={isSubmitting || (currentView === \"general\" && !validValues)}\n startIcon={currentView === \"properties\"\n ? <CheckIcon />\n : undefined}\n >\n {currentView === \"general\" && \"Next\"}\n {currentView === \"properties\" && \"Create collection\"}\n </LoadingButton>}\n\n {!isNewCollection && <LoadingButton\n variant=\"filled\"\n color=\"primary\"\n type=\"submit\"\n loading={isSubmitting}\n >\n Update collection\n </LoadingButton>}\n\n </DialogActions>\n </form>\n </>\n\n </Formex>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete the stored config?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the stored config, and reset to the code state.</>} />\n\n </DialogContent>\n\n}\n\nfunction applyPropertyConfigs<M extends Record<string, any> = any>(collection: PersistedCollection<M>, propertyConfigs: Record<string, PropertyConfig<any>>): PersistedCollection<M> {\n const {\n properties,\n ...rest\n } = collection;\n const propertiesResult: PropertiesOrBuilders<any> = {};\n if (properties) {\n Object.keys(properties).forEach((key) => {\n const prop = properties[key];\n if (prop == null) return;\n propertiesResult[key] = applyPropertiesConfig(prop as PropertyOrBuilder, propertyConfigs);\n });\n }\n\n return {\n ...rest,\n properties: propertiesResult\n };\n}\n\nfunction applyPropertiesConfig(property: PropertyOrBuilder, propertyConfigs: Record<string, PropertyConfig<any>>) {\n let internalProperty = property;\n if (propertyConfigs && internalProperty && typeof internalProperty === \"object\" && internalProperty.propertyConfig) {\n const propertyConfig = propertyConfigs[internalProperty.propertyConfig];\n if (propertyConfig && isPropertyBuilder(propertyConfig.property)) {\n internalProperty = propertyConfig.property;\n } else {\n\n if (propertyConfig) {\n internalProperty = mergeDeep(propertyConfig.property, internalProperty);\n }\n\n if (!isPropertyBuilder(internalProperty) && internalProperty.dataType === \"map\" && internalProperty.properties) {\n const properties: Record<string, PropertyOrBuilder> = {};\n Object.keys(internalProperty.properties).forEach((key) => {\n properties[key] = applyPropertiesConfig(((internalProperty as MapProperty).properties as Properties)[key] as Property, propertyConfigs);\n });\n internalProperty = {\n ...internalProperty,\n properties\n };\n }\n\n }\n }\n return internalProperty;\n\n}\n\nconst validatePath = (value: string, isNewCollection: boolean, existingPaths: string[], idValue?: string) => {\n let error;\n if (!value) {\n error = \"You must specify a path in the database for this collection\";\n }\n // if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n // error = \"There is already a collection which uses this path as an id\";\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()) && !idValue)\n error = \"There is already a collection with the specified path. If you want to have multiple collections referring to the same database path, make sure the have different ids\";\n\n const subpaths = removeInitialAndTrailingSlashes(value).split(\"/\");\n if (subpaths.length % 2 === 0) {\n error = `Collection paths must have an odd number of segments: ${value}`;\n }\n return error;\n};\n\nconst validateId = (value: string, isNewCollection: boolean, existingPaths: string[], existingIds: string[]) => {\n if (!value) return undefined;\n let error;\n if (isNewCollection && existingPaths?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection that uses this value as a path\";\n if (isNewCollection && existingIds?.includes(value.trim().toLowerCase()))\n error = \"There is already a collection which uses this id\";\n // if (error) {\n // setAdvancedPanelExpanded(true);\n // }\n return error;\n};\n","import React, { PropsWithChildren, useCallback } from \"react\";\nimport equal from \"react-fast-compare\"\n\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport {\n Entity,\n Property,\n useCustomizationController,\n useNavigationController,\n User,\n useSnackbarController\n} from \"@firecms/core\";\nimport { CollectionEditorDialog } from \"./ui/collection_editor/CollectionEditorDialog\";\nimport { useNavigate } from \"react-router\";\nimport { CollectionEditorController } from \"./types/collection_editor_controller\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { PropertyFormDialog } from \"./ui/collection_editor/PropertyEditView\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionGenerationCallback } from \"./api/generateCollectionApi\";\n\nexport const ConfigControllerContext = React.createContext<CollectionsConfigController>({} as any);\nexport const CollectionEditorContext = React.createContext<CollectionEditorController>({} as any);\n\nexport interface ConfigControllerProviderProps {\n /**\n * Controller for managing the collections' config.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Callback used to infer the schema from the data.\n */\n collectionInference?: CollectionInference;\n\n /**\n * Use this builder to define the permissions for the configuration per user.\n */\n configPermissions?: CollectionEditorPermissionsBuilder;\n\n /**\n * Groups that cannot be used to create new collections.\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n pathSuggestions?: string[];\n\n getUser?: (uid: string) => User | null;\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n\n}\n\nexport const ConfigControllerProvider = React.memo(\n function ConfigControllerProvider({\n children,\n collectionConfigController,\n configPermissions,\n reservedGroups,\n collectionInference,\n extraView,\n getUser,\n getData,\n onAnalyticsEvent,\n pathSuggestions,\n generateCollection\n }: PropsWithChildren<ConfigControllerProviderProps>) {\n\n const navigation = useNavigationController();\n const navigate = useNavigate();\n const snackbarController = useSnackbarController();\n const { propertyConfigs } = useCustomizationController();\n\n const [currentDialog, setCurrentDialog] = React.useState<{\n isNewCollection: boolean,\n parentCollection?: PersistedCollection,\n editedCollectionId?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n initialValues?: {\n path?: string,\n group?: string,\n name?: string\n },\n copyFrom?: PersistedCollection,\n redirect: boolean,\n existingEntities?: Entity<any>[],\n pathSuggestions?: string[];\n initialView?: \"general\" | \"display\" | \"properties\";\n expandKanban?: boolean;\n }>();\n\n const [currentPropertyDialog, setCurrentPropertyDialog] = React.useState<{\n propertyKey?: string,\n property?: Property,\n namespace?: string,\n parentCollection?: PersistedCollection,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n fullPath?: string,\n parentCollectionIds: string[],\n collectionEditable: boolean;\n existingEntities?: Entity<any>[];\n collection?: PersistedCollection;\n }>();\n\n const defaultConfigPermissions: CollectionEditorPermissionsBuilder = useCallback(() => ({\n createCollections: true,\n editCollections: true,\n deleteCollections: true\n }), []);\n\n const editCollection = ({\n id,\n fullPath,\n parentCollectionIds,\n parentCollection,\n existingEntities,\n initialView,\n expandKanban\n }: {\n id?: string,\n fullPath?: string,\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection,\n existingEntities?: Entity<any>[],\n initialView?: \"general\" | \"display\" | \"properties\",\n expandKanban?: boolean\n }) => {\n console.debug(\"Edit collection\", id, fullPath, parentCollectionIds, parentCollection);\n onAnalyticsEvent?.(\"edit_collection\", {\n id,\n fullPath\n });\n setCurrentDialog({\n editedCollectionId: id,\n fullPath,\n parentCollectionIds,\n isNewCollection: false,\n parentCollection,\n redirect: false,\n existingEntities,\n pathSuggestions,\n initialView,\n expandKanban\n });\n };\n\n const editProperty = ({\n propertyKey,\n property,\n editedCollectionId,\n currentPropertiesOrder,\n parentCollectionIds,\n collection,\n existingEntities\n }: {\n propertyKey?: string,\n property?: Property,\n currentPropertiesOrder?: string[],\n editedCollectionId: string,\n parentCollectionIds: string[],\n collection: PersistedCollection,\n existingEntities?: Entity<any>[]\n }) => {\n console.debug(\"Edit property\", propertyKey, property, editedCollectionId, currentPropertiesOrder, parentCollectionIds, collection);\n onAnalyticsEvent?.(\"edit_property\", {\n propertyKey,\n editedCollectionId\n });\n // namespace is all the path until the last dot\n const namespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(0, propertyKey.lastIndexOf(\".\"))\n : undefined;\n const propertyKeyWithoutNamespace = propertyKey && propertyKey.includes(\".\")\n ? propertyKey.substring(propertyKey.lastIndexOf(\".\") + 1)\n : propertyKey;\n setCurrentPropertyDialog({\n propertyKey: propertyKeyWithoutNamespace,\n property,\n namespace,\n currentPropertiesOrder,\n editedCollectionId,\n parentCollectionIds,\n collectionEditable: collection?.editable === undefined || collection?.editable === true,\n existingEntities,\n collection\n });\n };\n\n const createCollection = ({\n parentCollectionIds,\n parentCollection,\n initialValues,\n copyFrom,\n redirect,\n sourceClick\n }: {\n parentCollectionIds: string[],\n parentCollection?: PersistedCollection\n initialValues?: {\n group?: string,\n path?: string,\n name?: string\n },\n copyFrom?: PersistedCollection,\n redirect: boolean,\n sourceClick?: string\n }) => {\n console.debug(\"Create collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n copyFrom,\n redirect,\n sourceClick\n });\n onAnalyticsEvent?.(copyFrom ? \"duplicate_collection\" : \"create_collection\", {\n parentCollectionIds,\n parentCollection,\n initialValues,\n redirect,\n sourceClick\n });\n setCurrentDialog({\n isNewCollection: true,\n parentCollectionIds,\n parentCollection,\n initialValues,\n copyFrom,\n redirect,\n pathSuggestions\n });\n };\n\n return (\n <ConfigControllerContext.Provider value={collectionConfigController}>\n <CollectionEditorContext.Provider\n value={{\n editCollection,\n createCollection,\n editProperty,\n configPermissions: configPermissions ?? defaultConfigPermissions,\n pathSuggestions\n }}>\n\n {children}\n\n <CollectionEditorDialog\n open={Boolean(currentDialog)}\n configController={collectionConfigController}\n isNewCollection={false}\n collectionInference={collectionInference}\n {...currentDialog}\n getData={getData}\n reservedGroups={reservedGroups}\n extraView={extraView}\n getUser={getUser}\n generateCollection={generateCollection}\n onAnalyticsEvent={onAnalyticsEvent}\n handleClose={(collection) => {\n if (currentDialog?.redirect) {\n if (collection && currentDialog?.isNewCollection && !currentDialog.parentCollectionIds.length) {\n const url = navigation.buildUrlCollectionPath(collection.id ?? collection.path);\n navigate(url);\n }\n }\n setCurrentDialog(undefined);\n }} />\n\n {/* Used for editing properties*/}\n <PropertyFormDialog\n open={Boolean(currentPropertyDialog)}\n includeIdAndName={true}\n existingProperty={Boolean(currentPropertyDialog?.propertyKey)}\n autoUpdateId={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n autoOpenTypeSelect={!currentPropertyDialog ? false : !currentPropertyDialog?.propertyKey}\n inArray={false}\n collectionEditable={currentPropertyDialog?.collectionEditable ?? false}\n getData={currentPropertyDialog?.existingEntities || (getData && currentPropertyDialog?.editedCollectionId)\n ? async () => {\n let data: object[] = [];\n // First, use existing entities if available (already loaded in table)\n if (currentPropertyDialog?.existingEntities) {\n data = currentPropertyDialog.existingEntities.map(e => e.values);\n }\n // If getData is available and we have a path, also fetch from database\n if (getData && currentPropertyDialog?.editedCollectionId) {\n console.debug(\"Get data for property, path:\", currentPropertyDialog?.editedCollectionId);\n const resolvedPath = navigation.resolveIdsFrom(currentPropertyDialog.editedCollectionId!);\n const fetchedData = await getData(resolvedPath, []);\n data.push(...fetchedData);\n }\n return data;\n }\n : undefined}\n onPropertyChanged={({\n id,\n property\n }) => {\n if (!currentPropertyDialog) return;\n if (!id) return;\n const newProperty = !(currentPropertyDialog.propertyKey);\n return collectionConfigController.saveProperty({\n path: currentPropertyDialog?.editedCollectionId,\n property,\n propertyKey: id,\n newPropertiesOrder: newProperty && currentPropertyDialog.currentPropertiesOrder ? [...currentPropertyDialog.currentPropertiesOrder, id] : undefined,\n namespace: currentPropertyDialog.namespace,\n parentCollectionIds: currentPropertyDialog.parentCollectionIds\n })\n .catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error persisting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onPropertyChangedImmediate={false}\n onDelete={() => {\n if (!currentPropertyDialog?.propertyKey) return;\n const newPropertiesOrder = currentPropertyDialog?.currentPropertiesOrder?.filter(p => p !== currentPropertyDialog?.propertyKey);\n return collectionConfigController.deleteProperty({\n path: currentPropertyDialog?.editedCollectionId,\n propertyKey: currentPropertyDialog?.propertyKey,\n namespace: currentPropertyDialog?.namespace,\n newPropertiesOrder,\n parentCollectionIds: currentPropertyDialog?.parentCollectionIds\n })\n .then(() => {\n setCurrentPropertyDialog(undefined);\n }).catch((e) => {\n console.error(e);\n snackbarController.open({\n type: \"error\",\n message: \"Error deleting property: \" + (e.message ?? \"Details in the console\")\n });\n return false;\n });\n }}\n onError={() => {\n }}\n onOkClicked={() => {\n setCurrentPropertyDialog(undefined);\n }}\n onCancel={() => {\n setCurrentPropertyDialog(undefined);\n }}\n initialErrors={{}}\n forceShowErrors={false}\n existingPropertyKeys={currentPropertyDialog?.collection?.properties ? Object.keys(currentPropertyDialog.collection.properties) : []}\n allowDataInference={true}\n propertyConfigs={propertyConfigs}\n property={currentPropertyDialog?.property}\n propertyKey={currentPropertyDialog?.propertyKey} />\n\n </CollectionEditorContext.Provider>\n\n </ConfigControllerContext.Provider>\n );\n }, equal);\n","import { CollectionActionsProps, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n const editorButton = <Tooltip\n asChild={true}\n title={canEditCollection ? \"Edit collection\" : \"You don't have permissions to edit this collection\"}>\n <IconButton\n size={\"small\"}\n color={\"primary\"}\n disabled={!canEditCollection}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({\n id: collection.id,\n fullPath,\n parentCollectionIds,\n parentCollection: parentCollection as PersistedCollection,\n existingEntities: tableController?.data ?? []\n })\n : undefined}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {editorButton}\n </>\n\n}\n","import { useContext } from \"react\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { ConfigControllerContext } from \"./ConfigControllerProvider\";\n\n/**\n * Use this hook to access the configuration controller.\n * You can use it to get the list of collections, and to save/delete collections.\n */\nexport const useCollectionsConfigController = (): CollectionsConfigController => useContext(ConfigControllerContext);\n","import {\n ConfirmationDialog,\n PluginHomePageActionsProps,\n useAuthController,\n useSnackbarController\n} from \"@firecms/core\";\nimport { ContentCopyIcon, DeleteIcon, IconButton, Menu, MenuItem, MoreVertIcon, SettingsIcon, } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useState } from \"react\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\nexport function HomePageEditorCollectionAction({\n path,\n collection\n}: PluginHomePageActionsProps) {\n\n const snackbarController = useSnackbarController();\n const authController = useAuthController();\n const configController = useCollectionsConfigController();\n const collectionEditorController = useCollectionEditorController();\n\n const permissions = collectionEditorController?.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n })\n : {\n createCollections: false,\n editCollections: false,\n deleteCollections: false\n };\n\n const onEditCollectionClicked = () => {\n collectionEditorController?.editCollection({\n id: collection.id,\n parentCollectionIds: []\n });\n };\n\n const onDuplicateCollectionClicked = () => {\n // Use copyFrom to duplicate the collection with all properties\n // The editor will handle clearing name, path, and id\n collectionEditorController?.createCollection({\n copyFrom: collection,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"home_page_duplicate\"\n });\n };\n\n const [deleteRequested, setDeleteRequested] = useState(false);\n\n const deleteCollection = () => {\n configController?.deleteCollection({ id: collection.id }).then(() => {\n setDeleteRequested(false);\n snackbarController.open({\n message: \"Collection deleted\",\n type: \"success\"\n });\n });\n };\n\n return <>\n\n <div>\n {permissions.deleteCollections &&\n <Menu\n trigger={<IconButton size={\"small\"}>\n <MoreVertIcon size={\"small\"} />\n </IconButton>}\n >\n {permissions.createCollections &&\n <MenuItem\n dense={true}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onDuplicateCollectionClicked();\n }}>\n <ContentCopyIcon />\n Duplicate\n </MenuItem>\n }\n <MenuItem\n dense={true}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setDeleteRequested(true);\n }}>\n <DeleteIcon />\n Delete\n </MenuItem>\n\n </Menu>\n\n }\n\n {permissions.editCollections &&\n <IconButton\n size={\"small\"}\n onClick={(event) => {\n onEditCollectionClicked();\n }}>\n <SettingsIcon size={\"small\"} />\n </IconButton>}\n </div>\n\n <ConfirmationDialog\n open={deleteRequested}\n onAccept={deleteCollection}\n onCancel={() => setDeleteRequested(false)}\n title={<>Delete this collection?</>}\n body={<> This will <b>not\n delete any data</b>, only\n the collection in the CMS</>} />\n </>;\n\n}\n","import { EntityTableController, ResolvedProperty } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip } from \"@firecms/ui\";\nimport React from \"react\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function CollectionViewHeaderAction({\n propertyKey,\n onHover,\n property,\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n property: ResolvedProperty,\n propertyKey: string,\n onHover: boolean,\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const collectionEditorController = useCollectionEditorController();\n\n return (\n <Tooltip\n asChild={true}\n title={\"Edit\"}>\n <IconButton\n className={onHover ? \"bg-white dark:bg-surface-950\" : \"hidden\"}\n onClick={() => {\n collectionEditorController.editProperty({\n propertyKey,\n property,\n editedCollectionId: collection.id,\n parentCollectionIds,\n collection,\n existingEntities: tableController.data ?? []\n });\n }}\n size={\"small\"}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>\n )\n}\n","import { EntityTableController, getDefaultPropertiesOrder, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Tooltip } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function PropertyAddColumnComponent({\n fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: {\n fullPath: string,\n parentCollectionIds: string[],\n collection: PersistedCollection;\n tableController: EntityTableController;\n}) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n return (\n <Tooltip\n asChild={true}\n title={canEditCollection ? \"Add new property\" : \"You don't have permission to add new properties\"}>\n <div\n className={\"p-0.5 w-20 h-full flex items-center justify-center cursor-pointer bg-surface-100 bg-opacity-40 bg-surface-100/40 hover:bg-surface-100 dark:bg-surface-950 dark:bg-opacity-40 dark:bg-surface-950/40 dark:hover:bg-surface-950\"}\n // className={onHover ? \"bg-white dark:bg-surface-950\" : undefined}\n onClick={() => {\n collectionEditorController.editProperty({\n editedCollectionId: collection.id,\n parentCollectionIds,\n currentPropertiesOrder: getDefaultPropertiesOrder(collection),\n collection,\n existingEntities: tableController.data\n });\n }}>\n <AddIcon color={\"inherit\"}/>\n </div>\n </Tooltip>\n )\n}\n","import { AddIcon, Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionButton() {\n const collectionEditorController = useCollectionEditorController();\n return <div className={\"bg-surface-50 dark:bg-surface-900 min-w-fit rounded\"}>\n <Button className={\"min-w-fit\"}\n\n onClick={() => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_button\"\n })}>\n <AddIcon/>\n New collection\n </Button>\n </div>\n}\n","import equal from \"react-fast-compare\"\n\nimport { CollectionActionsProps, mergeDeep, useAuthController, useSnackbarController } from \"@firecms/core\";\nimport { Button, SaveIcon, Tooltip, UndoIcon, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorCollectionActionStart({\n path: fullPath,\n parentCollectionIds,\n collection,\n tableController\n }: CollectionActionsProps) {\n\n const authController = useAuthController();\n const collectionEditorController = useCollectionEditorController();\n const configController = useCollectionsConfigController();\n const snackbarController = useSnackbarController();\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n let saveDefaultFilterButton = null;\n if (!equal(getObjectOrNull(tableController.filterValues), getObjectOrNull(collection.initialFilter)) ||\n !equal(getObjectOrNull(tableController.sortBy), getObjectOrNull(collection.initialSort))) {\n saveDefaultFilterButton = <>\n <Tooltip\n asChild={true}\n title={tableController.sortBy || tableController.filterValues ? \"Save default filter and sort\" : \"Clear default filter and sort\"}>\n <Button\n size={\"small\"}\n variant={\"text\"}\n onClick={() => configController\n ?.saveCollection({\n id: collection.id,\n parentCollectionIds,\n collectionData: mergeDeep(collection as PersistedCollection,\n {\n initialFilter: tableController.filterValues ?? null,\n initialSort: tableController.sortBy ?? null\n })\n }).then(() => {\n snackbarController.open({\n type: \"success\",\n message: \"Default config saved\"\n });\n })}>\n <SaveIcon/>\n </Button>\n </Tooltip>\n\n {(collection.initialFilter || collection.initialSort) && <Tooltip\n title={\"Reset to default filter and sort\"}>\n <Button\n size={\"small\"}\n variant={\"text\"}\n onClick={() => {\n tableController.clearFilter?.();\n if (collection?.initialFilter)\n tableController.setFilterValues?.(collection?.initialFilter);\n if (collection?.initialSort)\n tableController.setSortBy?.(collection?.initialSort);\n }}>\n <UndoIcon/>\n </Button>\n </Tooltip>}\n </>;\n }\n\n return <>\n {canEditCollection && saveDefaultFilterButton}\n </>\n\n}\n\nfunction getObjectOrNull(o?: object): object | null {\n if (o && Object.keys(o).length === 0)\n return o\n return o ?? null;\n}\n","import { PluginHomePageAdditionalCardsProps, useAuthController } from \"@firecms/core\";\nimport { AddIcon, Card, cls, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\nexport function NewCollectionCard({\n group,\n context\n }: PluginHomePageAdditionalCardsProps) {\n\n if (!context.navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n return (\n <Card className={cls(\"h-full p-4 min-h-[124px]\")}\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n initialValues: group ? { group } : undefined,\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n\n <div\n className=\"flex items-center justify-center h-full w-full flex-grow flex-col\">\n <AddIcon color=\"primary\" size={\"large\"}/>\n <Typography color=\"primary\"\n variant={\"caption\"}\n className={\"font-medium\"}>{\"Add new collection\".toUpperCase()}</Typography>\n\n {!canCreateCollections &&\n <Typography variant={\"caption\"}>You don't have permissions to create\n collections</Typography>\n }\n </div>\n\n </Card>\n );\n}\n","import { PluginFormActionProps, useAuthController, useNavigationController } from \"@firecms/core\";\nimport { IconButton, SettingsIcon, Tooltip, } from \"@firecms/ui\";\n\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\nexport function EditorEntityAction({\n path: fullPath,\n parentCollectionIds,\n collection,\n formContext\n }: PluginFormActionProps) {\n\n const authController = useAuthController();\n const navigationController = useNavigationController();\n const collectionEditorController = useCollectionEditorController();\n\n const parentCollection = navigationController.getCollectionFromIds(parentCollectionIds);\n\n const canEditCollection = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n collection\n }).editCollections\n : true;\n\n const isDirty = formContext?.formex.dirty ?? false;\n\n const editorButton = <Tooltip\n asChild={true}\n title={canEditCollection ? (isDirty ? \"You need to save the document before changing the schema\" : \"Edit schema for this form\") : \"You don't have permissions to edit this collection\"}>\n <IconButton\n color={\"primary\"}\n disabled={!canEditCollection || isDirty}\n onClick={canEditCollection\n ? () => collectionEditorController?.editCollection({\n id: collection.id,\n fullPath,\n parentCollectionIds,\n parentCollection: parentCollection as PersistedCollection,\n })\n : undefined}>\n <SettingsIcon size={\"small\"}/>\n </IconButton>\n </Tooltip>;\n\n return <>\n {editorButton}\n </>\n\n}\n","import React from \"react\";\nimport { EntityCollection, useNavigationController } from \"@firecms/core\";\nimport { Button } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\n\n/**\n * Component rendered when Kanban view is missing orderProperty configuration.\n * Provides a CTA button to open the collection editor to configure Kanban.\n */\nexport function KanbanSetupAction({\n collection,\n fullPath,\n parentCollectionIds\n}: {\n collection: EntityCollection;\n fullPath: string;\n parentCollectionIds: string[];\n}) {\n const collectionEditorController = useCollectionEditorController();\n\n const handleConfigureClick = () => {\n collectionEditorController.editCollection({\n id: collection.id,\n parentCollectionIds,\n initialView: \"display\",\n expandKanban: true\n });\n };\n\n return (\n <Button\n variant=\"outlined\"\n onClick={handleConfigureClick}\n >\n Configure Kanban\n </Button>\n );\n}\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport {\n EntityCollection,\n getPropertyInPath,\n ResolvedStringProperty,\n resolveCollection,\n resolveEnumValues,\n toSnakeCase,\n useAuthController,\n useCustomizationController\n} from \"@firecms/core\";\nimport {\n AddIcon,\n Button,\n cls,\n defaultBorderMixin,\n Dialog,\n DialogActions,\n DialogContent,\n IconButton,\n TextField,\n Typography\n} from \"@firecms/ui\";\nimport { useCollectionsConfigController } from \"../useCollectionsConfigController\";\n\n/**\n * Component rendered at the end of the Kanban board to add new columns (enum values).\n * Opens a dialog to input a new enum value for the column property.\n */\nexport function AddKanbanColumnAction({\n collection,\n fullPath,\n parentCollectionIds,\n columnProperty\n}: {\n collection: EntityCollection;\n fullPath: string;\n parentCollectionIds: string[];\n columnProperty: string;\n}) {\n const [dialogOpen, setDialogOpen] = useState(false);\n const [newValueLabel, setNewValueLabel] = useState(\"\");\n const [saving, setSaving] = useState(false);\n\n const configController = useCollectionsConfigController();\n const authController = useAuthController();\n const customizationController = useCustomizationController();\n\n const resolvedCollection = useMemo(() => resolveCollection({\n collection,\n path: fullPath,\n propertyConfigs: customizationController.propertyConfigs,\n authController\n }), [collection, fullPath, customizationController.propertyConfigs, authController]);\n\n // Get current enum values\n const currentEnumValues = useMemo(() => {\n const property = getPropertyInPath(resolvedCollection.properties, columnProperty);\n if (!property || !('dataType' in property) || property.dataType !== \"string\") {\n return [];\n }\n const stringProperty = property as ResolvedStringProperty;\n if (!stringProperty.enumValues) {\n return [];\n }\n return resolveEnumValues(stringProperty.enumValues) ?? [];\n }, [resolvedCollection, columnProperty]);\n\n const handleAddColumn = useCallback(async () => {\n if (!newValueLabel.trim() || !configController) return;\n\n setSaving(true);\n try {\n // Check for property in persisted collection first, then resolved collection\n // This handles code-defined properties that aren't in the persisted config\n let property = collection?.properties?.[columnProperty];\n let isCodeDefinedProperty = false;\n\n if (!property || typeof property === 'function') {\n // Property not in persisted config - check resolved collection\n property = resolvedCollection.properties?.[columnProperty];\n isCodeDefinedProperty = true;\n }\n\n // Type guard: property must be an object with dataType === \"string\"\n if (!property || typeof property === 'function' || !('dataType' in property) || property.dataType !== \"string\") {\n console.error(\"Column property not found or not a string. Property:\", property);\n setSaving(false);\n return;\n }\n\n // Now we know property is a StringProperty\n const stringProperty = property as { dataType: \"string\"; enumValues?: any; name?: string };\n\n // Create new enum value\n const newId = toSnakeCase(newValueLabel.trim());\n const newEnumValue = {\n id: newId,\n label: newValueLabel.trim()\n };\n\n // Get existing enum values from the resolved property (current runtime values)\n // Use currentEnumValues which is already computed from resolvedCollection\n const existingEnumValues = currentEnumValues.map(ev => ({\n id: ev.id,\n label: ev.label\n }));\n\n // Add new enum value\n const updatedEnumValues = [...existingEnumValues, newEnumValue];\n\n // Build the property to save\n // If it's code-defined, we create a minimal override with just enumValues\n const updatedProperty = isCodeDefinedProperty\n ? {\n dataType: \"string\" as const,\n name: stringProperty.name || columnProperty,\n enumValues: updatedEnumValues\n }\n : {\n ...property,\n enumValues: updatedEnumValues\n };\n\n // Save the updated property\n await configController.saveProperty({\n path: fullPath,\n propertyKey: columnProperty,\n property: updatedProperty as any,\n parentCollectionIds\n });\n\n setNewValueLabel(\"\");\n setDialogOpen(false);\n } catch (error) {\n console.error(\"Error adding new column:\", error);\n } finally {\n setSaving(false);\n }\n }, [newValueLabel, configController, collection, columnProperty, fullPath, parentCollectionIds]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" && newValueLabel.trim()) {\n handleAddColumn();\n }\n };\n\n return (\n <>\n <div\n className={cls(\n \"border h-full w-80 min-w-80 mx-2 flex flex-col items-center justify-center rounded-md\",\n \"bg-surface-50 dark:bg-surface-950 hover:bg-surface-100 dark:hover:bg-surface-900\",\n \"cursor-pointer transition-colors duration-200 ease-in-out\",\n defaultBorderMixin\n )}\n onClick={() => setDialogOpen(true)}\n >\n <IconButton size=\"large\" className=\"opacity-60 hover:opacity-100\">\n <AddIcon size=\"large\" />\n </IconButton>\n <Typography variant=\"caption\" color=\"secondary\" className=\"mt-2\">\n Add Column\n </Typography>\n </div>\n\n <Dialog open={dialogOpen} onOpenChange={setDialogOpen}>\n <DialogContent className=\"max-w-md\">\n <Typography variant=\"h6\" className=\"mb-4\">\n Add New Column\n </Typography>\n <Typography variant=\"body2\" color=\"secondary\" className=\"mb-4\">\n Add a new option to the \"{columnProperty}\" property.\n This will create a new column in the Kanban board.\n </Typography>\n <TextField\n label=\"Column Name\"\n value={newValueLabel}\n onChange={(e) => setNewValueLabel(e.target.value)}\n onKeyDown={handleKeyDown}\n autoFocus\n disabled={saving}\n />\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"text\"\n onClick={() => setDialogOpen(false)}\n disabled={saving}\n >\n Cancel\n </Button>\n <Button\n onClick={handleAddColumn}\n disabled={saving || !newValueLabel.trim()}\n >\n {saving ? \"Adding...\" : \"Add Column\"}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n}\n","import React from \"react\";\nimport { FireCMSPlugin, useAuthController, useNavigationController, User } from \"@firecms/core\";\nimport { ConfigControllerProvider } from \"./ConfigControllerProvider\";\nimport { CollectionEditorPermissionsBuilder } from \"./types/config_permissions\";\nimport { EditorCollectionAction } from \"./ui/EditorCollectionAction\";\nimport { HomePageEditorCollectionAction } from \"./ui/HomePageEditorCollectionAction\";\nimport { PersistedCollection } from \"./types/persisted_collection\";\nimport { CollectionInference } from \"./types/collection_inference\";\nimport { CollectionsConfigController } from \"./types/config_controller\";\nimport { CollectionGenerationCallback } from \"./api/generateCollectionApi\";\nimport { CollectionViewHeaderAction } from \"./ui/CollectionViewHeaderAction\";\nimport { PropertyAddColumnComponent } from \"./ui/PropertyAddColumnComponent\";\nimport { NewCollectionButton } from \"./ui/NewCollectionButton\";\nimport { AddIcon, Button, Paper, Typography } from \"@firecms/ui\";\nimport { useCollectionEditorController } from \"./useCollectionEditorController\";\nimport { EditorCollectionActionStart } from \"./ui/EditorCollectionActionStart\";\nimport { NewCollectionCard } from \"./ui/NewCollectionCard\";\nimport { EditorEntityAction } from \"./ui/EditorEntityAction\";\nimport { KanbanSetupAction } from \"./ui/KanbanSetupAction\";\nimport { AddKanbanColumnAction } from \"./ui/AddKanbanColumnAction\";\n\nexport interface CollectionConfigControllerProps<EC extends PersistedCollection = PersistedCollection, USER extends User = User> {\n\n /**\n * Firebase app where the configuration is saved.\n */\n collectionConfigController: CollectionsConfigController;\n\n /**\n * Define what actions can be performed on the configuration.\n */\n configPermissions?: CollectionEditorPermissionsBuilder<USER, EC>;\n\n /**\n * The words you define here will not be allowed to be used as group\n * names when creating collections.\n * e.g. [\"admin\"]\n */\n reservedGroups?: string[];\n\n extraView?: {\n View: React.ComponentType<{\n path: string\n }>,\n icon: React.ReactNode\n };\n\n collectionInference?: CollectionInference;\n\n pathSuggestions?: string[];\n\n getData?: (path: string, parentPaths: string[]) => Promise<object[]>;\n\n getUser?: (uid: string) => USER | null;\n\n onAnalyticsEvent?: (event: string, params?: object) => void;\n\n includeIntroView?: boolean;\n\n /**\n * Callback function for generating/modifying collections.\n * The plugin is API-agnostic - the consumer provides the implementation.\n */\n generateCollection?: CollectionGenerationCallback;\n\n}\n\n/**\n * Use this hook to initialise the Collection Editor plugin.\n * This is likely the only hook you will need to use.\n * @param firebaseApp Firebase app where your project data lives.\n * @param configPermissions\n * @param reservedGroups\n * @param extraView\n * @param getData\n * @param getUser\n * @param collectionInference\n */\nexport function useCollectionEditorPlugin<EC extends PersistedCollection = PersistedCollection, USER extends User = User>\n ({\n collectionConfigController,\n configPermissions,\n reservedGroups,\n extraView,\n getUser,\n collectionInference,\n getData,\n onAnalyticsEvent,\n includeIntroView = true,\n pathSuggestions,\n generateCollection\n }: CollectionConfigControllerProps<EC, USER>): FireCMSPlugin<any, any, PersistedCollection> {\n\n return {\n key: \"collection_editor\",\n loading: collectionConfigController.loading,\n provider: {\n Component: ConfigControllerProvider,\n props: {\n collectionConfigController,\n configPermissions,\n collectionInference,\n reservedGroups,\n extraView,\n getUser,\n getData,\n onAnalyticsEvent,\n pathSuggestions,\n generateCollection\n }\n },\n homePage: {\n additionalActions: <NewCollectionButton />,\n additionalChildrenStart: includeIntroView ? <IntroWidget /> : undefined,\n CollectionActions: HomePageEditorCollectionAction,\n AdditionalCards: NewCollectionCard,\n allowDragAndDrop: true,\n navigationEntries: collectionConfigController.navigationEntries,\n onNavigationEntriesUpdate: collectionConfigController.saveNavigationEntries,\n },\n collectionView: {\n CollectionActionsStart: EditorCollectionActionStart,\n CollectionActions: EditorCollectionAction,\n HeaderAction: CollectionViewHeaderAction,\n AddColumnComponent: PropertyAddColumnComponent,\n onColumnsReorder: collectionConfigController.updatePropertiesOrder,\n onKanbanColumnsReorder: collectionConfigController.updateKanbanColumnsOrder,\n KanbanSetupComponent: KanbanSetupAction,\n AddKanbanColumnComponent: AddKanbanColumnAction\n },\n form: {\n ActionsTop: EditorEntityAction,\n }\n };\n}\n\nexport function IntroWidget() {\n\n const navigation = useNavigationController();\n if (!navigation.topLevelNavigation)\n throw Error(\"Navigation not ready in FireCMSHomePage\");\n\n const authController = useAuthController();\n\n const collectionEditorController = useCollectionEditorController();\n const canCreateCollections = collectionEditorController.configPermissions\n ? collectionEditorController.configPermissions({\n user: authController.user,\n }).createCollections\n : true;\n\n if (!navigation.initialised || (navigation.collections ?? []).length > 0) {\n return null;\n }\n\n return (\n <Paper\n className={\"my-4 px-4 py-6 flex flex-col bg-white dark:bg-surface-accent-800 gap-2\"}>\n <Typography variant={\"subtitle2\"} className={\"uppercase\"}>No collections found</Typography>\n <Typography>\n Start building collections in FireCMS easily. Map them to your existing\n database data, import from files, or use our templates.\n </Typography>\n {canCreateCollections && <Button\n onClick={collectionEditorController && canCreateCollections\n ? () => collectionEditorController.createCollection({\n parentCollectionIds: [],\n redirect: true,\n sourceClick: \"new_collection_card\"\n })\n : undefined}>\n <AddIcon />Create your first collection\n </Button>}\n <Typography color={\"secondary\"}>\n You can also define collections programmatically.\n </Typography>\n </Paper>\n );\n}\n","import {\n EntityCollection,\n joinCollectionLists,\n makePropertiesEditable,\n ModifyCollectionProps,\n Properties\n} from \"@firecms/core\";\nimport { PersistedCollection } from \"../types/persisted_collection\";\n\n/**\n * Function in charge of merging collections defined in code with those stored in the backend.\n */\nexport const mergeCollections = (baseCollections: EntityCollection[],\n backendCollections: PersistedCollection[] = [],\n modifyCollection?: (props: ModifyCollectionProps) => EntityCollection | void\n) => {\n\n const markAsEditable = (c: PersistedCollection) => {\n makePropertiesEditable(c.properties as Properties);\n c.subcollections?.forEach(markAsEditable);\n };\n\n backendCollections.forEach(markAsEditable);\n\n const result = joinCollectionLists(baseCollections, backendCollections, [], modifyCollection);\n\n // sort the collections so they are in the same order as the base collections\n result.sort((a, b) => {\n const indexA = baseCollections.findIndex(c => c.id === a.id);\n const indexB = baseCollections.findIndex(c => c.id === b.id);\n\n if (indexA === -1 && indexB === -1) {\n return 0; // Keep original order for items not in baseCollections\n }\n if (indexA === -1) {\n return 1; // a is not in base, so it goes to the end\n }\n if (indexB === -1) {\n return -1; // b is not in base, so it goes to the end\n }\n return indexA - indexB;\n });\n\n return result;\n}\n","import { ErrorView, prettifyIdentifier, useNavigationController } from \"@firecms/core\";\nimport { useCollectionEditorController } from \"../useCollectionEditorController\";\nimport { Button } from \"@firecms/ui\";\n\nexport function MissingReferenceWidget({ path: pathProp }: {\n path: string\n}) {\n const navigation = useNavigationController();\n const path = getLastSegment(pathProp);\n const parentCollectionIds = navigation.getParentCollectionIds(pathProp);\n const collectionEditor = useCollectionEditorController();\n return <div className={\"p-1 flex flex-col items-center\"}>\n <ErrorView error={\"No collection for path: \" + path}/>\n <Button className={\"mx-2\"}\n size={\"small\"}\n onClick={() => {\n collectionEditor.createCollection({\n initialValues: { path, name: prettifyIdentifier(path) },\n parentCollectionIds,\n redirect: false,\n sourceClick: \"missing_reference\"\n });\n }}>\n Create\n </Button>\n </div>;\n}\n\nfunction getParentPathSegments(path: string): string[] {\n const segments = path.split(\"/\");\n return segments.filter((segment, index) => index % 2 === 0 && index !== segments.length - 1);\n}\n\nfunction getLastSegment(path: string): string {\n const segments = path.split(\"/\");\n return segments[segments.length - 1];\n}\n"],"names":["YupSchema","Yup","object","shape","id","string","required","name","path","GeneralSettingsForm","t0","$","_c","isNewCollection","parentCollection","values","setFieldValue","handleChange","touched","errors","setFieldTouched","submitCount","useFormex","iconDialogOpen","setIconDialogOpen","useState","useAuthController","useCustomizationController","t1","databaseId","undefined","updateDatabaseId","t2","pathTouched","getIn","toSnakeCase","idTouched","singularNameTouched","singular","updateName","t3","collectionIcon","isSubcollection","showErrors","t4","t5","t6","t7","t8","Symbol","for","t9","t10","t11","t12","t13","t14","e","target","value","t15","Boolean","t16","t17","t18","t19","t20","t21","cls","t22","t23","DebouncedTextField","t24","t25","t26","t27","t28","singularName","t29","e_0","t30","t31","t32","t33","t34","t35","t36","description","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","t50","v","t51","collectionGroup","t52","t53","t54","t55","t56","t57","t58","history","t59","t60","v_0","t61","t62","t63","t64","t65","customId","t66","v_1","Error","t67","t68","t69","t70","t71","_temp","t72","t73","t74","t75","v_2","t76","textSearchEnabled","t77","t78","t79","t80","t81","height","t82","icon","t83","t84","t85","t86","DefaultDatabaseField","onDatabaseIdUpdate","LayoutModeSwitch","onChange","className","label","ViewModeSwitch","EnumForm","enumValues","onValuesChanged","onError","updateIds","disabled","allowDataInference","getData","forEach","enumValue","index","hasError","Object","keys","length","initialValues","validateOnChange","validation","formex","useCreateFormex","values_0","errors_0","useEffect","EnumFormFields","enumValuesPath","shouldUpdateId","lastInternalIdAdded","setLastInternalIdAdded","React","editDialogIndex","setEditDialogIndex","inferring","setInferring","Set","inferredValuesRef","useRef","inferredValues","current","internalId","justAdded","entryError","has","buildEntry","console","warn","then","data","flatData","flat","fieldData","Array","from","currentEnumValues","foundEnumValues","extractEnumFromValues","newEnumValues","filter","some","enumValue_0","add","catch","finally","inferValues","error","EnumEntry","memo","EnumEntryInternal","updateId","autoFocus","onDialogOpen","inferredEntry","shouldUpdateIdRef","idValue","labelValue","currentLabelRef","colorValue","getColorSchemeForKey","getColorSchemeForSeed","String","colorScheme","color","backgroundColor","areEqual","prevProps","nextProps","equal","EnumEntryDialog","open","onClose","idError","open_0","SwitchControl","field","form","tooltip","size","allowIndeterminate","checked","formControlLabel","GeneralPropertyValidation","validationRequired","validationUnique","field_0","form_0","validationRequiredMessage","StringPropertyValidation","lowercase","matches","max","min","trim","uppercase","matchesError","matchesValue","serializeRegExp","matchesStringValue","validationLowercase","validationUppercase","validationTrim","field_1","form_1","validationLength","validationMin","validationMax","validationMatches","ArrayPropertyValidation","ValidationPanel","children","EnumPropertyField","multiselect","propertyNamespace","setFieldError","snackbarContext","useSnackbarController","defaultValue","valuesEnumValues","useMemo","resolveEnumValues","enumIds","map","includes","type","message","fullPropertyPath","res","entry","toString","fileTypes","StoragePropertyField","multiple","existing","baseStoragePath","acceptedFiles","fileName","maxSize","storagePath","storeUrl","includeBucketUrl","imageResize","imageResizeMaxWidth","imageResizeMaxHeight","imageResizeMode","imageResizeFormat","imageResizeQuality","fileNameValue","storagePathValue","T0","T1","maxSizeValue","imageResizeMaxWidthValue","imageResizeMaxHeightValue","imageResizeModeValue","imageResizeFormatValue","imageResizeQualityValue","storedValue","fileTypesValue","isArray","allFileTypesSelected","handleTypesChange","hasFilenameCallback","hasStoragePathCallback","ExpandablePanel","entries","value_0","preventDefault","stopPropagation","_temp3","value_1","parseInt","e_1","value_2","e_2","value_3","value_4","_temp4","value_5","_temp5","e_3","value_6","numValue","selected_1","selected","charAt","toUpperCase","slice","selected_0","_temp2","join","editableProperty","property","isPropertyBuilder","dataType","of","editable","removeNonEditableProperties","properties","_","key","propertyOrBuilder","reduce","a","b","PropertyFieldPreview","onClick","includeName","includeEditButton","propertyConfigs","getFieldConfig","propertyConfig","borderColorClass","cardClickableMixin","cardSelectedMixin","cardMixin","NonEditablePropertyPreview","idToPropertiesPath","replaceAll","namespaceToPropertiesPath","namespace","namespaceToPropertiesOrderPath","getFullId","propertyKey","getFullIdPath","keyWithNamespace","AIModifiedPathsContext","createContext","AIModifiedPathsProvider","modifiedPaths","setModifiedPaths","generationCounter","setGenerationCounter","operations","prev","newSet","op","parts","split","addModifiedPaths","prev_1","newSet_0","p","startsWith","delete","clearPath","clearAllPaths","path_0","p_0","isPathModified","prev_0","useAIModifiedPaths","useContext","PropertyTree","selectedPropertyKey","onPropertyClick","propertiesOrder","propertiesOrderProp","additionalFields","onPropertyMove","onPropertyRemove","inferredPropertyKeys","collectionEditable","propertyKeys","filteredOrder","missingKeys","key_0","activationConstraint","distance","coordinateGetter","sortableKeyboardCoordinates","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","handleDragEnd","event","active","over","activeId","overId","activeKey","pop","overKey","oldIndex","indexOf","newIndex","newPropertiesOrder","removed","splice","items","key_1","DndContext","closestCenter","restrictToVerticalAxis","SortableContext","verticalListSortingStrategy","additionalField","find","PropertyTreeEntry","attributes","listeners","setNodeRef","transform","transition","isDragging","useSortable","CSS","Translate","zIndex","position","style","isPropertyInferred","fullId","fullIdPath","subtree","aiModifiedPaths","isAIModified","defaultBorderMixin","left","top","bottom","currentIndex","newOrder","k","unshift","currentIndex_0","newOrder_0","k_0","push","MapPropertyField","propertyDialogOpen","setPropertyDialogOpen","setSelectedPropertyKey","selectedPropertyNamespace","setSelectedPropertyNamespace","currentPropertiesOrder","onPropertyCreated","propertiesPath","propertiesOrderPath","currentPropertiesOrder_0","deleteProperty","selectedPropertyFullId","selectedProperty","empty","propertiesOrder_0","namespace_0","propertyKey_0","namespace_1","spreadChildren","RepeatPropertyField","ofProperty","ofPropertyError","onPropertyChanged","widget","CommonPropertyFields","forwardRef","ref","disabledId","autoUpdateId","nameError","descriptionError","newNameValue","fontSize","newIdValue","nameTouched","prettifyIdentifier","StringPropertyField","widgetId","BooleanPropertyField","BlockPropertyField","oneOf","addChildButton","namespace_2","NumberPropertyValidation","validationLessThan","validationMoreThan","validationPositive","validationNegative","validationInteger","NumberPropertyField","parseFloat","ReferencePropertyField","asString","navigation","useNavigationController","pathPath","pathValue","pathError","CollectionsSelect","props","collections","groups","ungroupedCollections","selectedCollection","collection","flatMap","group","collection_0","collection_1","collection_2","col","TIMEZONES","DateTimePropertyField","modeValue","modeError","autoValueValue","autoValueError","timezoneValue","timezoneError","modePath","autoValuePath","v_3","timezonePath","tz_0","tz","v_4","t","AdvancedPropertyValidation","hideFromCollection","readOnly","ConditionsPanel","getPropertyPaths","prefix","paths","fullPath","nestedPaths","ofPropertyOrBuilder","CONDITION_TYPES","OPERATORS","valueType","applicableTo","CONTEXT_FIELDS","getPropertyAtPath","fieldPath","collectionProperties","part","getFieldDataType","contextField","f","getEnumValues","getOperatorsForDataType","applicable","ConditionValueInput","operator","newValue","ev","ConditionRow","rule","onRuleChange","onRemove","availableFields","showRemoveButton","fieldDataType","showValueField","applicableOperators","isFieldMissing","isValueMissing","prop","config","DEFAULT_FIELD_CONFIGS","getFieldColor","newDataType","newApplicableOps","newOperator","op_0","prop_0","hasEnum","Select","op_1","ConditionGroupRow","conditionType","onGroupChange","logic","handleLogicChange","newRules","rules","handleRuleChange","index_0","newRules_0","i","handleRemoveRule","defaultRule","handleAddRule","ct","rule_0","index_1","newRule","simpleRuleToJsonLogic","var","varRef","fieldVar","parsedValue","isNaN","Number","s","jsonLogicToSimpleRule","jsonLogic","args","inArgs","in","right","replace","varObj","groupToJsonLogic","ruleLogics","groupLogics","g","allLogics","jsonLogicToGroup","arg","nestedOperator","nestedGroup","ConditionsEditor","conditions","log","activeConditions","defaultGroup","jsonLogic_0","handleAddCondition","type_0","group_0","jsonLogic_1","handleGroupChange","type_1","newConditions","handleRemoveCondition","availableConditionTypes","type_2","group_1","newGroup","ct_0","ENUM_CONDITION_TYPES","getCurrentPropertyEnumValues","getFieldEnumValues","arrayToObject","arr","result","buildEnumFilterRule","allEnumIds","condition","selectedEnumIds","objectToArray","obj","every","sort","parseEnumFilterRule","ifRule","selectedEnumIdsRaw","conditionObj","EnumConditionRow","onConfigChange","propertyEnumValues","selectedFieldProperty","isBoolean","fieldEnumValues","isEnumSelectionMissing","ev_0","EnumConditionsEditor","bb0","defaultConfig","config_0","rule_1","handleConfigChange","config_1","newConfig","_temp6","KeyValuePropertyField","updatePropertyFromWidget","propertyData","selectedWidgetId","updatedProperty","mergeDeep","storage","multiline","markdown","email","url","userSelect","keyValue","mode","UrlPropertyField","urlValue","supportedFieldsIds","supportedFields","MarkdownPropertyField","markdownValue","isMarkdownObject","htmlValue","html","transformPastedTextValue","transformPastedText","currentMarkdown","updateMarkdownConfig","PropertyForm","includeIdAndName","autoOpenTypeSelect","existingProperty","inArray","existingPropertyKeys","onPropertyChangedImmediate","onDismiss","onDelete","initialErrors","forceShowErrors","getController","initialValue","previousId","lastSubmittedProperty","property_0","params","doOnPropertyChanged","newPropertyWithId","controller","id_0","property_1","resetForm","validateName","keysToCheck","validateId","isValidRegExp","conditionErrors","conditionTypes","isIncompleteRule","ruleStr","JSON","stringify","enumType","if","debugId","validateOnInitialRender","onSubmit","formexController","PropertyFormDialog","formProps","onCancel","onOkClicked","formexRef","helpers","handleSubmit","PropertyEditFormFields","setValues","includeIdAndTitle","selectOpen","setSelectOpen","deleteDialogOpen","setDeleteDialogOpen","getFieldId","selectedFieldConfigId","setSelectedFieldConfigId","deferredValues","useDeferredValue","nameFieldRef","selectedWidgetError","newSelectedWidgetId","setTimeout","focus","onWidgetSelectChanged","childComponent","hasValue","idRegEx","match","WIDGET_TYPE_MAP","text_field","switch","user_select","select","multi_select","number_input","number_select","multi_number_select","file_upload","multi_file_upload","reference","reference_as_string","multi_references","date_time","key_value","repeat","custom_array","block","WidgetSelectView","initialProperty","onValueChange","onOpenChange","allSupportedFields","concat","displayedWidgets","propertyConfig_1","baseProperty","baseFieldConfig","computedFieldConfig","fieldBackgroundDisabledMixin","fieldBackgroundHoverMixin","fieldBackgroundMixin","Dialog","DialogContent","key_2","propertyConfig_2","groupKey","propertyConfig_0","WidgetSelectViewItem","shouldWarnChangingDataType","KanbanConfigSection","forceExpanded","authController","customizationController","panelRef","columnPropertyDialogOpen","setColumnPropertyDialogOpen","resolvedCollection","resolveCollection","enumStringProperties","kanbanConfig","kanban","columnPropertyMissing","columnProperty","scrollIntoView","behavior","showCreateButton","dialogPropertyKey","dialogPropertyName","unslugify","fieldConfig","newProperties","DisplaySettingsForm","expandKanban","orderPropertyDialogOpen","setOrderPropertyDialogOpen","numberProperties","openEntityMode","defaultViewMode","orderPropertyMissing","orderProperty","defaultSize","sideDialogWidth","inlineEditing","includeJsonView","camelCase","str","toLowerCase","substring","GetCodeDialog","snackbarController","format","setFormat","tsCode","collectionData","collectionToCode","JSON5","jsonCode","code","themes","vsDark","navigator","clipboard","writeText","tokens","getLineProps","getTokenProps","line","token","propertyCleanup","valueCopy","clone","isEmptyObject","childRes","fromBuilder","resolved","resolvedProperties","initialFilter","initialSort","subcollections","CollectionPropertiesEditorForm","propertyErrorsRef","onPropertyError","setDirty","reservedGroups","extraIcon","getUser","doCollectionInference","dirty","largeLayout","useLargeLayout","asDialog","selectedPropertyIndex","setSelectedPropertyIndex","codeDialogOpen","setCodeDialogOpen","inferringProperties","setInferringProperties","newPropertyDialogOpen","setNewPropertyDialogOpen","setInferredPropertyKeys","currentPropertiesOrderRef","inferPropertiesFromData","debug","newCollection","makePropertiesEditable","findNewPropertyKeys","existingProps","newProps","fullKey","existingProp","newProp","existingMapProps","addNewPropertiesOnly","updatedProperties","allNewPropertyKeys","newTopLevelPropertyKeys","allExistingKeys","updatedPropertiesOrder","updatePropertiesOrder","getCurrentPropertiesOrder","propertyPath","previousFullId","previousPropertyPath","onPropertyErrorInternal","closePropertyDialog","emptyCollection","usedPropertiesOrder","owner","ownerId","body","displayName","UnsavedChangesDialog","handleOk","handleCancel","title","EntityCustomViewsSelectDialog","entityViews","view","SubcollectionsEditTab","configController","collectionInference","parentCollectionIds","embedded","contextEntityViews","subcollectionToDelete","setSubcollectionToDelete","addEntityViewDialogOpen","setAddEntityViewDialogOpen","viewToDelete","setViewToDelete","currentDialog","setCurrentDialog","setSubcollections","T2","resolvedEntityViews","resolveEntityView","hardCodedEntityViews","totalEntityViews","subcollection","editedCollectionId","Paper","Table","TableBody","content","deleteCollection","e_4","e_5","updatedCollection","selectedViewKey","e_6","view_0","EntityActionsSelectDialog","entityActions","action","EntityActionsEditTab","contextEntityActions","addEntityActionDialogOpen","setAddEntityActionDialogOpen","actionToDelete","setActionToDelete","resolvedEntityActions","resolveEntityAction","hardCodedEntityActions","totalEntityActions","selectedActionKey","action_1","action_0","ExtendSettingsForm","isMergedCollection","onResetToCode","VALID_DATA_TYPES","validateProperty","ofProp","validateProperties","validateOptionalFields","stringFields","booleanFields","item","sub","subErrors","validateCollectionObject","err","validViewModes","validateCollectionJson","jsonString","parsed","parse","lines","column","valid","EXAMPLE_JSON","CollectionJsonImportDialog","onImport","jsonValue","setJsonValue","setErrors","setTouched","handleJsonChange","result_0","handleImport","handleClose","isValid","productsCollectionTemplate","brand","main_image","available","columnWidth","price","requiredMessage","images","related_products","metadata","added_on","autoValue","blogCollectionTemplate","header_image","cacheControl","typeField","valueField","text","quote","products","previewProperties","created_on","status","published","draft","publish_date","clearable","reviewed","tags","previewAsTag","usersCollectionTemplate","emailVerified","phone","favourite_products","photoURL","pagesCollectionTemplate","slug","unique","matchesMessage","hero_section","headline","subhead","background_image","call_to_action","call_to_action_link","section","image","link","slider","sidebar","seo_metadata","meta_title","meta_description","focus_keywords","footer_override","last_updated","is_published","useCollectionEditorController","CollectionEditorContext","CollectionGenerationApiError","constructor","DEFAULT_COLLECTION_GENERATION_ENDPOINT","buildCollectionGenerationCallback","getAuthToken","apiEndpoint","request","response","fetch","method","headers","Authorization","ok","errorData","json","AICollectionGeneratorPopover","existingCollection","onGenerated","generateCollection","trigger","showLabel","onAnalyticsEvent","menuOpen","setMenuOpen","prompt","setPrompt","loading","setLoading","setError","existingCollections","handleGenerate","collectionsContext","c","operationsCount","errorMessage","handleKeyDown","shiftKey","defaultTrigger","CollectionEditorWelcomeView","onContinue","existingCollectionPaths","pathSuggestions","filteredSuggestions","jsonImportOpen","setJsonImportOpen","Container","suggestion","generatedCollection","TemplateButton","subtitle","CollectionEditorImportMapping","importConfig","setSelectedProperty","newPropertiesOrder_0","newHeadersMapping","headersMapping","setHeadersMapping","importData","importKey","fullId_0","propertyPath_0","d","inferredNewProperty","buildPropertyFromData","getInferenceType","onPropertyTypeChanged","property_2","importKey_0","isIdColumn","propertyKey_1","PropertySelect","fieldId","newProperty","widget_0","PropertySelectItem","optionDisabled","CollectionEditorImportDataPreview","loadEntities","mappedData","convertDataToEntity","idColumn","defaultValues","setEntities","selectionController","useSelectionController","entities","dataLoading","noMoreToLoad","cleanPropertiesFromImport","parentSlug","acc","slugify","fullSlug","slugifiedResult","firstKey","CollectionEditorDialog","formDirty","setFormDirty","unsavedChangesDialogOpen","setUnsavedChangesDialogOpen","CollectionEditor","topLevelNavigation","initialValuesProp","copyFromProp","copyFrom","includeTemplates","collectionsInThisLevel","existingPaths","existingIds","setCollection","initialLoadingCompleted","setInitialLoadingCompleted","initialised","getCollectionFromPaths","initialCollection","randomString","applyPropertyConfigs","user","uid","coolIconKeys","Math","floor","random","CollectionEditorInternal","extraView","existingEntities","initialView","initialViewProp","useImportConfig","currentView","setCurrentView","saveCollection","setNextMode","inUse","parentPaths","inferCollectionFromData","Promise","resolve","inferredCollection","newCollectionState","schema","validateSync","abortEarly","inner","validatePath","formController","isSubmitting","updatedFullPath","convertIdsToPaths","resolvedPath","resolveIdsFrom","getDataWithPath","existingData","onImportDataSet","setInUse","buildEntityPropertiesFromData","setIdColumn","setImportData","filteredHeadingsOrder","setHeadingsOrder","setOriginProperties","mappedHeadings","validValues","onImportMappingComplete","merged","deleteRequested","setDeleteRequested","onWelcomeScreenContinue","handleAIGenerated","View","importedCollection","removeUndefined","validate","rest","propertiesResult","applyPropertiesConfig","internalProperty","subpaths","removeInitialAndTrailingSlashes","ConfigControllerContext","ConfigControllerProvider","collectionConfigController","configPermissions","navigate","useNavigate","currentPropertyDialog","setCurrentPropertyDialog","defaultConfigPermissions","redirect","editCollection","parentCollectionIds_0","existingEntities_0","lastIndexOf","propertyKeyWithoutNamespace","editProperty","parentCollectionIds_1","parentCollection_0","sourceClick","createCollection","buildUrlCollectionPath","fetchedData","saveProperty","createCollections","editCollections","deleteCollections","EditorCollectionAction","tableController","navigationController","collectionEditorController","getCollectionFromIds","canEditCollection","editorButton","useCollectionsConfigController","HomePageEditorCollectionAction","permissions","onEditCollectionClicked","onDuplicateCollectionClicked","event_0","event_1","CollectionViewHeaderAction","onHover","PropertyAddColumnComponent","getDefaultPropertiesOrder","NewCollectionButton","EditorCollectionActionStart","saveDefaultFilterButton","getObjectOrNull","filterValues","sortBy","clearFilter","setFilterValues","setSortBy","o","NewCollectionCard","context","canCreateCollections","EditorEntityAction","formContext","isDirty","KanbanSetupAction","handleConfigureClick","AddKanbanColumnAction","dialogOpen","setDialogOpen","newValueLabel","setNewValueLabel","saving","setSaving","getPropertyInPath","stringProperty","handleAddColumn","useCallback","isCodeDefinedProperty","newId","newEnumValue","existingEnumValues","updatedEnumValues","useCollectionEditorPlugin","includeIntroView","Component","navigationEntries","saveNavigationEntries","additionalActions","additionalChildrenStart","CollectionActions","AdditionalCards","allowDragAndDrop","onNavigationEntriesUpdate","updateKanbanColumnsOrder","CollectionActionsStart","HeaderAction","AddColumnComponent","onColumnsReorder","onKanbanColumnsReorder","KanbanSetupComponent","AddKanbanColumnComponent","ActionsTop","provider","homePage","collectionView","IntroWidget","mergeCollections","baseCollections","backendCollections","modifyCollection","markAsEditable","joinCollectionLists","indexA","findIndex","indexB","MissingReferenceWidget","pathProp","getLastSegment","getParentCollectionIds","collectionEditor","segments"],"mappings":"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"}
|