@baseplate-dev/project-builder-web 0.3.5 → 0.3.7
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/assets/{-constants-BYERQCO8.js → -constants-CBBXnsgS.js} +2 -2
- package/dist/assets/{-constants-BYERQCO8.js.map → -constants-CBBXnsgS.js.map} +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-Db9HEBw5.js.map +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-fZlnH9Ds.js.map +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-CoxJjxbV.js.map +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/utils-Bhl1WBIT.js.map +1 -1
- package/dist/assets/__federation_shared_@tanstack/react-router-JHHIpdEJ.js.map +1 -1
- package/dist/assets/__federation_shared_react-WURrSs1p.js.map +1 -1
- package/dist/assets/__federation_shared_react-dom-CWagDEjd.js.map +1 -1
- package/dist/assets/__federation_shared_zod-CBKZOTZP.js.map +1 -1
- package/dist/assets/_virtual___federation_fn_import-D3sI42Ph.js.map +1 -1
- package/dist/assets/{admin-Dy1xMuLp.js → admin-BmEAbqDf.js} +2 -2
- package/dist/assets/{admin-Dy1xMuLp.js.map → admin-BmEAbqDf.js.map} +1 -1
- package/dist/assets/{backend-SevlkhOM.js → backend-3ZlC6POv.js} +2 -2
- package/dist/assets/{backend-SevlkhOM.js.map → backend-3ZlC6POv.js.map} +1 -1
- package/dist/assets/badge-with-type-label-CThmzNSh.js.map +1 -1
- package/dist/assets/capitalize-gOJXDbsR.js.map +1 -1
- package/dist/assets/{edit._key-BgnflZIL.js → edit._key-D-7xw9rv.js} +2 -2
- package/dist/assets/{edit._key-BgnflZIL.js.map → edit._key-D-7xw9rv.js.map} +1 -1
- package/dist/assets/{edit._sectionKey-D4mTSUhO.js → edit._sectionKey-CZgof0ob.js} +3 -3
- package/dist/assets/edit._sectionKey-CZgof0ob.js.map +1 -0
- package/dist/assets/enum-info-form-3ykREN-o.js.map +1 -1
- package/dist/assets/{graphql-C37jbnTG.js → graphql-DFecTG83.js} +2 -2
- package/dist/assets/{graphql-C37jbnTG.js.map → graphql-DFecTG83.js.map} +1 -1
- package/dist/assets/{hierarchy-CNBHjTAJ.js → hierarchy-jFN5DTrv.js} +2 -2
- package/dist/assets/{hierarchy-CNBHjTAJ.js.map → hierarchy-jFN5DTrv.js.map} +1 -1
- package/dist/assets/immer-B7fdkLVi.js.map +1 -1
- package/dist/assets/{index-CFlVUowS.js → index-B4AqRYYd.js} +2 -2
- package/dist/assets/{index-CFlVUowS.js.map → index-B4AqRYYd.js.map} +1 -1
- package/dist/assets/{index-B3A5IWAQ.js → index-BJlq0bmu.js} +2 -2
- package/dist/assets/{index-B3A5IWAQ.js.map → index-BJlq0bmu.js.map} +1 -1
- package/dist/assets/{index-CDx3IfgN.js → index-BPRSO52F.js} +2 -2
- package/dist/assets/{index-CDx3IfgN.js.map → index-BPRSO52F.js.map} +1 -1
- package/dist/assets/{index-CAFf3K5-.js → index-BWWBFiT1.js} +2 -2
- package/dist/assets/{index-CAFf3K5-.js.map → index-BWWBFiT1.js.map} +1 -1
- package/dist/assets/{index-Ckh17o1U.js → index-BZ4uW6kN.js} +2 -2
- package/dist/assets/{index-Ckh17o1U.js.map → index-BZ4uW6kN.js.map} +1 -1
- package/dist/assets/{index-D48MR3bL.js → index-BpFwTs3X.js} +2 -2
- package/dist/assets/{index-D48MR3bL.js.map → index-BpFwTs3X.js.map} +1 -1
- package/dist/assets/{index-mFxKl9yz.js → index-CbnCfDth.js} +2 -2
- package/dist/assets/{index-mFxKl9yz.js.map → index-CbnCfDth.js.map} +1 -1
- package/dist/assets/{index-DEKFCy0H.js → index-Cd_baD6T.js} +4 -4
- package/dist/assets/index-Cd_baD6T.js.map +1 -0
- package/dist/assets/index-D5UX5AHP.js.map +1 -1
- package/dist/assets/index-DRRJXHq_.js.map +1 -1
- package/dist/assets/{index-2EwzbJik.js → index-DhfdQsvQ.js} +2 -2
- package/dist/assets/{index-2EwzbJik.js.map → index-DhfdQsvQ.js.map} +1 -1
- package/dist/assets/index-DqHVrEeL.js.map +1 -1
- package/dist/assets/index-Dqph-b0R.css +1 -0
- package/dist/assets/{index-B2l1e3vi.js → index-UtPzkFI2.js} +2 -2
- package/dist/assets/{index-B2l1e3vi.js.map → index-UtPzkFI2.js.map} +1 -1
- package/dist/assets/index-c0qeY2gs.js.map +1 -1
- package/dist/assets/index-tHURiz2C.js.map +1 -1
- package/dist/assets/index-tflukq04.js.map +1 -1
- package/dist/assets/index.esm-CdP29Ssb.js.map +1 -1
- package/dist/assets/inflection-C1nKqrJS.js.map +1 -1
- package/dist/assets/isEqual-C420KeG-.js.map +1 -1
- package/dist/assets/jsx-runtime-D_zvdyIk.js.map +1 -1
- package/dist/assets/model-info-form-koY65NLs.js.map +1 -1
- package/dist/assets/model-merger-D1L5cIAo.js.map +1 -1
- package/dist/assets/{new-admin-section-dialog-4X2fxo7a.js → new-admin-section-dialog-DFpUuP_Z.js} +2 -2
- package/dist/assets/{new-admin-section-dialog-4X2fxo7a.js.map → new-admin-section-dialog-DFpUuP_Z.js.map} +1 -1
- package/dist/assets/{new-app-dialog-CCI4q4Mt.js → new-app-dialog-Cnp9A5Cx.js} +2 -2
- package/dist/assets/{new-app-dialog-CCI4q4Mt.js.map → new-app-dialog-Cnp9A5Cx.js.map} +1 -1
- package/dist/assets/{new-enum-dialog-B5zvBxhT.js → new-enum-dialog-CE3pNVPW.js} +2 -2
- package/dist/assets/{new-enum-dialog-B5zvBxhT.js.map → new-enum-dialog-CE3pNVPW.js.map} +1 -1
- package/dist/assets/{new-model-dialog-CiwTpKcZ.js → new-model-dialog-BUqUnu3F.js} +2 -2
- package/dist/assets/{new-model-dialog-CiwTpKcZ.js.map → new-model-dialog-BUqUnu3F.js.map} +1 -1
- package/dist/assets/{route-PmxQsBVj.js → route-BMREAhaC.js} +2 -2
- package/dist/assets/{route-PmxQsBVj.js.map → route-BMREAhaC.js.map} +1 -1
- package/dist/assets/{route-CZgTuGeJ.js → route-B_y_fjG1.js} +2 -2
- package/dist/assets/{route-CZgTuGeJ.js.map → route-B_y_fjG1.js.map} +1 -1
- package/dist/assets/{route-DluQ5e3_.js → route-CM78Qts_.js} +2 -2
- package/dist/assets/{route-DluQ5e3_.js.map → route-CM78Qts_.js.map} +1 -1
- package/dist/assets/{route-6ErXC2Qt.js → route-D-8r4X0U.js} +2 -2
- package/dist/assets/{route-6ErXC2Qt.js.map → route-D-8r4X0U.js.map} +1 -1
- package/dist/assets/{route-gzD4oiAl.js → route-D7DRL965.js} +2 -2
- package/dist/assets/{route-gzD4oiAl.js.map → route-D7DRL965.js.map} +1 -1
- package/dist/assets/{route-C6wCPwVj.js → route-DGnyRZBc.js} +2 -2
- package/dist/assets/{route-C6wCPwVj.js.map → route-DGnyRZBc.js.map} +1 -1
- package/dist/assets/route-Dm8VYkZY.js +2 -0
- package/dist/assets/{route-DLz_DL5S.js.map → route-Dm8VYkZY.js.map} +1 -1
- package/dist/assets/{route-C3eBLQEr.js → route-Dpt-JNZC.js} +2 -2
- package/dist/assets/{route-C3eBLQEr.js.map → route-Dpt-JNZC.js.map} +1 -1
- package/dist/assets/{route-DzYT3FNA.js → route-pfSpaHo3.js} +2 -2
- package/dist/assets/{route-DzYT3FNA.js.map → route-pfSpaHo3.js.map} +1 -1
- package/dist/assets/{route-gYB7kkkm.js → route-x978fCyu.js} +2 -2
- package/dist/assets/{route-gYB7kkkm.js.map → route-x978fCyu.js.map} +1 -1
- package/dist/assets/{service--2LVz4Ht.js → service-BSH0RhEL.js} +2 -2
- package/dist/assets/{service--2LVz4Ht.js.map → service-BSH0RhEL.js.map} +1 -1
- package/dist/assets/sortBy-C9bvycg5.js.map +1 -1
- package/dist/assets/{template-extractor-D33LuEZ8.js → template-extractor-Dzitw66S.js} +2 -2
- package/dist/assets/{template-extractor-D33LuEZ8.js.map → template-extractor-Dzitw66S.js.map} +1 -1
- package/dist/assets/{theme-builder-CWetoMuo.js → theme-builder-00-pJhvO.js} +2 -2
- package/dist/assets/{theme-builder-CWetoMuo.js.map → theme-builder-00-pJhvO.js.map} +1 -1
- package/dist/assets/use-definition-schema-BuO4pbji.js.map +1 -1
- package/dist/assets/{use-enum-form-BRBAlWJc.js → use-enum-form-CiJfrBqR.js} +2 -2
- package/dist/assets/{use-enum-form-BRBAlWJc.js.map → use-enum-form-CiJfrBqR.js.map} +1 -1
- package/dist/assets/{use-model-form-psj-JlE9.js → use-model-form-AKI1Wi68.js} +2 -2
- package/dist/assets/{use-model-form-psj-JlE9.js.map → use-model-form-AKI1Wi68.js.map} +1 -1
- package/dist/index.html +2 -2
- package/package.json +11 -11
- package/dist/assets/edit._sectionKey-D4mTSUhO.js.map +0 -1
- package/dist/assets/index-DEKFCy0H.js.map +0 -1
- package/dist/assets/index-DPK1IfNZ.css +0 -1
- package/dist/assets/route-DLz_DL5S.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-model-form-
|
|
1
|
+
{"version":3,"file":"use-model-form-AKI1Wi68.js","sources":["../../src/routes/data/models/-hooks/use-model-form.ts"],"sourcesContent":["import type {\n ModelConfig,\n ModelConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type { UseFormReturn } from 'react-hook-form';\nimport type { z } from 'zod';\n\nimport {\n createModelBaseSchema,\n FeatureUtils,\n modelEntityType,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport { toast, useEventCallback } from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { sortBy } from 'es-toolkit';\nimport { useMemo, useRef } from 'react';\n\ninterface UseModelFormOptions {\n schema?: z.ZodTypeAny;\n omit?: string[];\n onSubmitSuccess?: () => void;\n modelKey: string;\n}\n\n/**\n * Unifies logic for editing an existing model and updating it.\n */\nexport function useModelForm({\n onSubmitSuccess,\n omit,\n modelKey,\n}: UseModelFormOptions): {\n form: UseFormReturn<ModelConfigInput>;\n onSubmit: () => Promise<void>;\n originalModel: ModelConfig;\n defaultValues: ModelConfigInput;\n} {\n const { definition, saveDefinitionWithFeedback } = useProjectDefinition();\n\n const urlModelId = modelEntityType.idFromKey(modelKey);\n const model = ModelUtils.byIdOrThrow(definition, urlModelId);\n\n const baseModelSchema = useDefinitionSchema(createModelBaseSchema);\n\n // These should remain constant throughout the form's lifecycle\n const fieldsToOmit = useRef(omit);\n\n const finalSchema = useMemo(() => {\n if (fieldsToOmit.current) {\n return baseModelSchema.omit(\n Object.fromEntries(\n fieldsToOmit.current.map((field) => [field, true]),\n ) as Record<string | number, never>,\n ) as typeof baseModelSchema;\n }\n\n return baseModelSchema;\n }, [baseModelSchema]);\n\n // Make sure strip out unused fields\n const defaultValues = useMemo(\n () =>\n fieldsToOmit.current\n ? (finalSchema.parse(model) as ModelConfigInput)\n : model,\n [model, finalSchema],\n );\n\n const form = useResettableForm<ModelConfigInput, unknown, ModelConfig>({\n resolver: zodResolver(finalSchema),\n defaultValues,\n });\n\n const { reset, handleSubmit, setError } = form;\n\n const handleSubmitSuccess = useEventCallback(onSubmitSuccess);\n\n const onSubmit = useMemo(\n () =>\n handleSubmit((data) => {\n const updatedModel = {\n ...model,\n ...data,\n };\n if (updatedModel.model.fields.length === 0) {\n toast.error('Model must have at least one field.');\n return;\n }\n if (updatedModel.model.primaryKeyFieldRefs.length === 0) {\n toast.error('Model must have at least one primary key field.');\n return;\n }\n // check for models with the same name\n const existingModel = definition.models.find(\n (m) =>\n m.id !== data.id &&\n m.name.toLowerCase() === updatedModel.name.toLowerCase(),\n );\n if (existingModel) {\n setError('name', {\n message: `Model with name ${updatedModel.name} already exists.`,\n });\n return;\n }\n\n // clear out any service methods that are disabled\n const { service } = updatedModel;\n if (service.create.enabled) {\n if (\n !service.create.fields?.length &&\n !service.create.transformerNames?.length\n ) {\n toast.error(\n 'Create method must have at least one field or transformer.',\n );\n return;\n }\n } else {\n service.create = {\n enabled: false,\n };\n }\n if (service.update.enabled) {\n if (\n !service.update.fields?.length &&\n !service.update.transformerNames?.length\n ) {\n toast.error(\n 'Update method must have at least one field or transformer.',\n );\n return;\n }\n } else {\n service.update = {\n enabled: false,\n };\n }\n if (!service.delete.enabled) {\n service.delete = {\n enabled: false,\n };\n }\n if (\n !service.create.enabled &&\n !service.update.enabled &&\n !service.delete.enabled &&\n service.transformers.length === 0\n ) {\n updatedModel.service = {\n create: { enabled: false },\n update: { enabled: false },\n delete: { enabled: false },\n transformers: [],\n };\n }\n\n return saveDefinitionWithFeedback(\n (draftConfig) => {\n // create feature if a new feature exists\n updatedModel.featureRef =\n FeatureUtils.ensureFeatureByNameRecursively(\n draftConfig,\n updatedModel.featureRef,\n );\n draftConfig.models = sortBy(\n [\n ...draftConfig.models.filter((m) => m.id !== updatedModel.id),\n updatedModel,\n ],\n [(m) => m.name],\n );\n },\n {\n successMessage: 'Successfully saved model!',\n onSuccess: () => {\n reset(data);\n handleSubmitSuccess?.();\n },\n },\n );\n }),\n [\n reset,\n setError,\n handleSubmit,\n saveDefinitionWithFeedback,\n handleSubmitSuccess,\n definition,\n model,\n ],\n );\n\n return {\n form,\n onSubmit,\n originalModel: model,\n defaultValues,\n };\n}\n"],"names":["createModelBaseSchema","FeatureUtils","modelEntityType","ModelUtils","importShared","useDefinitionSchema","useProjectDefinition","useResettableForm","toast","useEventCallback","useMemo","useRef","useModelForm","onSubmitSuccess","omit","modelKey","definition","saveDefinitionWithFeedback","urlModelId","model","baseModelSchema","fieldsToOmit","finalSchema","field","defaultValues","form","zodResolver","reset","handleSubmit","setError","handleSubmitSuccess","onSubmit","data","updatedModel","m","service","draftConfig","sortBy"],"mappings":"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"}
|
package/dist/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
content="Web app for building a baseplate project"
|
|
11
11
|
/>
|
|
12
12
|
<title>Baseplate Project Builder</title>
|
|
13
|
-
<script type="module" crossorigin src="/assets/index-
|
|
13
|
+
<script type="module" crossorigin src="/assets/index-Cd_baD6T.js"></script>
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/_virtual___federation_fn_import-D3sI42Ph.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/jsx-runtime-D_zvdyIk.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/assets/index-c0qeY2gs.js">
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<link rel="modulepreload" crossorigin href="/assets/index.esm-CdP29Ssb.js">
|
|
21
21
|
<link rel="modulepreload" crossorigin href="/assets/sortBy-C9bvycg5.js">
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/immer-B7fdkLVi.js">
|
|
23
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
23
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Dqph-b0R.css">
|
|
24
24
|
</head>
|
|
25
25
|
<body>
|
|
26
26
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@baseplate-dev/project-builder-web",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "Web interface for constructing project builder JSON",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -71,29 +71,29 @@
|
|
|
71
71
|
"semver": "^7.5.4",
|
|
72
72
|
"zod": "3.25.76",
|
|
73
73
|
"zustand": "5.0.3",
|
|
74
|
-
"@baseplate-dev/project-builder-lib": "0.3.
|
|
75
|
-
"@baseplate-dev/ui-components": "0.3.
|
|
76
|
-
"@baseplate-dev/utils": "0.3.
|
|
74
|
+
"@baseplate-dev/project-builder-lib": "0.3.7",
|
|
75
|
+
"@baseplate-dev/ui-components": "0.3.7",
|
|
76
|
+
"@baseplate-dev/utils": "0.3.7"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
79
|
"@originjs/vite-plugin-federation": "1.3.6",
|
|
80
|
-
"@tailwindcss/vite": "4.1.
|
|
80
|
+
"@tailwindcss/vite": "4.1.13",
|
|
81
81
|
"@tanstack/router-plugin": "1.130.8",
|
|
82
82
|
"@types/culori": "^2.1.1",
|
|
83
83
|
"@types/node": "^22.17.2",
|
|
84
84
|
"@types/semver": "^7.5.0",
|
|
85
|
-
"@vitejs/plugin-react": "
|
|
85
|
+
"@vitejs/plugin-react": "5.0.2",
|
|
86
86
|
"chokidar": "4.0.3",
|
|
87
87
|
"eslint": "9.32.0",
|
|
88
88
|
"mime": "^4.0.3",
|
|
89
89
|
"prettier": "3.6.2",
|
|
90
|
-
"tailwindcss": "4.1.
|
|
90
|
+
"tailwindcss": "4.1.13",
|
|
91
91
|
"typescript": "5.8.3",
|
|
92
|
-
"vite": "
|
|
93
|
-
"vite-plugin-svgr": "4.
|
|
92
|
+
"vite": "7.1.5",
|
|
93
|
+
"vite-plugin-svgr": "4.5.0",
|
|
94
94
|
"vitest": "3.2.4",
|
|
95
|
-
"@baseplate-dev/project-builder-server": "0.3.
|
|
96
|
-
"@baseplate-dev/tools": "0.3.
|
|
95
|
+
"@baseplate-dev/project-builder-server": "0.3.7",
|
|
96
|
+
"@baseplate-dev/tools": "0.3.7"
|
|
97
97
|
},
|
|
98
98
|
"engines": {
|
|
99
99
|
"node": "^22.0.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"mappings":"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","names":["LensCore","_LensCore","control","path","cache","prop","_a","_b","_c","_d","_e","_f","propString","nestedPath","fromCache","template","result2","overriddenLens","get","arrayItemNestedPath","result","getter","dictionary","target","override","fields","mapper","value","index","array","item","cb","newValue","key","valueTemplate","restructuredLens","v","set","value2","LensesStorage","name","complexKey","cached","lens","useMemo","importShared","useLens","props","deps","ModelUtils","createAdminCrudInputWebConfig","useProjectDefinition","SelectFieldController","AdminCrudEmbeddedInputForm","formProps","model","embeddedFormOptions","definition","foreignRelationOptions","r","prefix","controlTyped","jsxs","Fragment","jsx","adminCrudEmbeddedInputWebConfig","AdminCrudEmbeddedLocalInputForm","definitionContainer","localRelationOptions","relation","adminCrudEmbeddedLocalInputWebConfig","AdminCrudEnumInputForm","enumFieldOptions","f","field","adminCrudEnumInputWebConfig","InputFieldController","AdminCrudForeignInputForm","adminCrudForeignInputWebConfig","AdminCrudTextInputForm","fieldOptions","adminCrudTextInputWebConfig","BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS","createAdminCrudInputSchema","adminCrudInputWebSpec","useDefinitionSchema","Button","Dialog","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","useEffect","useId","FieldDialog","open","onOpenChange","modelRef","isNew","onSave","pluginContainer","fieldSchema","inputWeb","fieldTypeOptions","config","form","useForm","zodResolver","handleSubmit","isDirty","reset","fieldType","useWatch","inputWebConfig","WebForm","onSubmit","data","formId","e","RecordView","RecordViewActions","RecordViewItem","RecordViewItemList","useConfirmDialog","useState","CrudFormFieldsForm","className","requestConfirm","append","remove","update","move","useFieldArray","editingField","setEditingField","isEditing","setIsEditing","isCreating","setIsCreating","formFields","handleDeleteField","fieldIdx","handleEditField","handleCreateField","handleSaveField","fieldData","existingIndex","fieldListItems","idx","MdEdit","MdDeleteOutline","clsx","SortableList","MdAdd","original","useFieldArrayOriginal","options","adminCrudColumnEntityType","createAdminCrudColumnWebConfig","ForeignColumnForm","adminCrudForeignColumnWebConfig","modelId","m","TextColumnForm","adminCrudTextColumnWebConfig","BUILT_IN_ADMIN_CRUD_COLUMN_WEB_CONFIGS","createAdminCrudColumnSchema","adminCrudColumnWebSpec","ColumnDialog","column","columnSchema","columnWeb","columnTypeOptions","columnType","columnWebConfig","CrudTableColumnsForm","editingColumn","setEditingColumn","handleDeleteColumn","columnIdx","columns","handleEditColumn","handleCreateColumn","handleSaveColumn","columnData","columnListItems","createAdminCrudEmbeddedFormSchema","CheckboxFieldController","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","toast","AdminCrudEmbeddedTable","items","edit","TYPE_OPTIONS","AdminCrudEmbeddedForm","initialData","adminCrudEmbeddedFormSchema","watch","modelOptions","type","error","logAndFormatError","createAdminCrudActionWebConfig","adminCrudDeleteActionWebConfig","adminCrudEditActionWebConfig","BUILT_IN_ADMIN_CRUD_ACTION_WEB_CONFIGS","createAdminCrudActionSchema","adminCrudActionWebSpec","ActionDialog","action","actionSchema","actionWeb","actionTypeOptions","actionType","actionWebConfig","CrudTableActionsForm","editingAction","setEditingAction","handleDeleteAction","actionIdx","actions","handleEditAction","handleCreateAction","handleSaveAction","actionData","actionListItems","ComboboxFieldController","SectionListSection","SectionListSectionContent","SectionListSectionDescription","SectionListSectionHeader","SectionListSectionTitle","AdminCrudSectionForm","nameFieldOptions","EmbeddedListInput","tableProps","AsyncComboboxField","useControllerMerged","fetchIcons","hiIcons","__vitePreload","n","faIcons","mdIcons","bsIcons","icons","ReactIconCombobox","rest","query","option","a","b","ReactIconComboboxController","restProps","adminSectionEntityType","createWebAdminSectionSchema","useBlockUnsavedChangesNavigate","useResettableForm","DialogClose","DialogTrigger","FormActionBar","SectionList","useNavigate","SplitComponent","app","section","Route","useLoaderData","appKey","sectionKey","useParams","navigate","from","fullPath","saveDefinitionWithFeedback","isSavingDefinition","adminSectionSchema","featureOptions","features","map","label","id","resolver","values","defaultValues","_dataId","sectionData","draftConfig","webApp","apps","find","adminApp","sections","findIndex","s","idFromKey","undefined","handleDelete","filter","successMessage","onSuccess","to","params","catch"],"ignoreList":[0,9],"sources":["../../../../node_modules/.pnpm/@hookform+lenses@0.8.1_react-hook-form@7.60.0_react@19.1.0__react@19.1.0/node_modules/@hookform/lenses/dist/index.js","../../src/routes/admin-sections.$appKey/-components/inputs/embedded-input-config.tsx","../../src/routes/admin-sections.$appKey/-components/inputs/embedded-local-input-config.tsx","../../src/routes/admin-sections.$appKey/-components/inputs/enum-input-config.tsx","../../src/routes/admin-sections.$appKey/-components/inputs/foreign-input-config.tsx","../../src/routes/admin-sections.$appKey/-components/inputs/text-input-config.tsx","../../src/routes/admin-sections.$appKey/-components/inputs/index.ts","../../src/routes/admin-sections.$appKey/-components/field-dialog.tsx","../../src/routes/admin-sections.$appKey/-components/crud-form-fields-form.tsx","../../../../node_modules/.pnpm/@hookform+lenses@0.8.1_react-hook-form@7.60.0_react@19.1.0__react@19.1.0/node_modules/@hookform/lenses/dist/rhf/index.js","../../src/routes/admin-sections.$appKey/-components/columns/foreign-column-form.tsx","../../src/routes/admin-sections.$appKey/-components/columns/text-column-form.tsx","../../src/routes/admin-sections.$appKey/-components/columns/column-configs.ts","../../src/routes/admin-sections.$appKey/-components/column-dialog.tsx","../../src/routes/admin-sections.$appKey/-components/crud-table-columns-form.tsx","../../src/routes/admin-sections.$appKey/-components/admin-crud-embedded-form.tsx","../../src/routes/admin-sections.$appKey/-components/actions/delete-action-config.tsx","../../src/routes/admin-sections.$appKey/-components/actions/edit-action-config.tsx","../../src/routes/admin-sections.$appKey/-components/actions/index.ts","../../src/routes/admin-sections.$appKey/-components/action-dialog.tsx","../../src/routes/admin-sections.$appKey/-components/crud-table-actions-form.tsx","../../src/routes/admin-sections.$appKey/-components/admin-crud-section-form.tsx","../../src/routes/admin-sections.$appKey/-components/react-icon-combobox.tsx","../../src/routes/admin-sections.$appKey/edit.$sectionKey.tsx?tsr-split=component"],"sourcesContent":["// src/LensCore.ts\nimport { get, set } from \"react-hook-form\";\nvar LensCore = class _LensCore {\n constructor(control, path, cache) {\n this.control = control;\n this.path = path;\n this.cache = cache;\n }\n static create(control, cache) {\n return new _LensCore(control, \"\", cache);\n }\n focus(prop) {\n var _a, _b, _c, _d, _e, _f;\n const propString = prop.toString();\n const nestedPath = this.path ? `${this.path}.${propString}` : propString;\n const fromCache = (_a = this.cache) == null ? void 0 : _a.get(nestedPath, this.reflectedKey);\n if (fromCache) {\n return fromCache;\n }\n if (Array.isArray(this.override)) {\n const [template] = this.override;\n const result2 = new _LensCore(this.control, nestedPath, this.cache);\n result2.isArrayItemReflection = true;\n result2.override = template;\n (_b = this.cache) == null ? void 0 : _b.set(result2, nestedPath);\n return result2;\n } else if (this.override) {\n const overriddenLens = get(this.override, propString);\n if (!overriddenLens) {\n const result2 = new _LensCore(this.control, nestedPath, this.cache);\n (_c = this.cache) == null ? void 0 : _c.set(result2, nestedPath);\n return result2;\n }\n if (this.isArrayItemReflection) {\n const arrayItemNestedPath = `${this.path}.${overriddenLens.path}`;\n const result2 = new _LensCore(this.control, arrayItemNestedPath, this.cache);\n (_d = this.cache) == null ? void 0 : _d.set(result2, arrayItemNestedPath);\n return result2;\n } else {\n (_e = this.cache) == null ? void 0 : _e.set(overriddenLens, nestedPath);\n return overriddenLens;\n }\n }\n const result = new _LensCore(this.control, nestedPath, this.cache);\n (_f = this.cache) == null ? void 0 : _f.set(result, nestedPath);\n return result;\n }\n reflect(getter) {\n var _a, _b, _c;\n const fromCache = (_a = this.cache) == null ? void 0 : _a.get(this.path, getter);\n if (fromCache) {\n return fromCache;\n }\n const template = new _LensCore(this.control, this.path, this.cache);\n const dictionary = new Proxy(\n {},\n {\n get: (target, prop) => {\n if (typeof prop === \"string\") {\n return template.focus(prop);\n }\n return target;\n }\n }\n );\n const override = getter(dictionary, template);\n if (Array.isArray(override)) {\n const result = new _LensCore(this.control, this.path, this.cache);\n template.path = \"\";\n result.override = getter(dictionary, template);\n result.reflectedKey = getter;\n (_b = this.cache) == null ? void 0 : _b.set(result, this.path, getter);\n return result;\n } else {\n template.override = override;\n template.path = this.path;\n template.reflectedKey = getter;\n (_c = this.cache) == null ? void 0 : _c.set(template, this.path, getter);\n return template;\n }\n }\n map(fields, mapper) {\n return fields.map((value, index, array) => {\n const item = this.focus(index.toString());\n const res = mapper(value, item, index, array, this);\n return res;\n });\n }\n interop(cb) {\n var _a;\n if (cb) {\n return cb(this.control, this.path);\n }\n (_a = this.interopCache) != null ? _a : this.interopCache = {\n control: this.control,\n name: this.path || void 0,\n ...this.override ? { getTransformer: this.getTransformer.bind(this), setTransformer: this.setTransformer.bind(this) } : {}\n };\n return this.interopCache;\n }\n narrow() {\n return this;\n }\n assert() {\n return this;\n }\n defined() {\n return this;\n }\n cast() {\n return this;\n }\n getTransformer(value) {\n const [template] = Array.isArray(this.override) ? this.override : [this.override];\n if (!value || !template) {\n return value;\n }\n const newValue = {};\n Object.entries(template).forEach(([key, valueTemplate]) => {\n const restructuredLens = valueTemplate;\n if (!restructuredLens) {\n return;\n }\n const v = get(value, restructuredLens.path);\n set(newValue, key, v);\n });\n return newValue;\n }\n setTransformer(value) {\n const [template] = Array.isArray(this.override) ? this.override : [this.override];\n if (!value || !template) {\n return value;\n }\n const newValue = {};\n Object.entries(value).forEach(([key, value2]) => {\n const restructuredLens = template[key];\n if (!restructuredLens) {\n return;\n }\n set(newValue, restructuredLens.path, value2);\n });\n return newValue;\n }\n};\n\n// src/LensesStorage.ts\nvar LensesStorage = class {\n constructor(control) {\n this.cache = /* @__PURE__ */ new Map();\n control._subscribe({\n formState: {\n values: true\n },\n exact: true,\n callback: () => {\n control._names.unMount.forEach((name) => {\n this.delete(name);\n });\n }\n });\n }\n get(path, complexKey) {\n const cached = this.cache.get(path);\n if (cached) {\n if (complexKey) {\n return cached.complex.get(complexKey);\n }\n return cached.plain;\n }\n return void 0;\n }\n set(lens, path, complexKey) {\n let cached = this.cache.get(path);\n if (!cached) {\n cached = {\n complex: /* @__PURE__ */ new WeakMap()\n };\n this.cache.set(path, cached);\n }\n if (complexKey) {\n cached.complex.set(complexKey, lens);\n } else {\n cached.plain = lens;\n }\n }\n has(path, complexKey) {\n var _a, _b;\n if (complexKey) {\n return (_b = (_a = this.cache.get(path)) == null ? void 0 : _a.complex.has(complexKey)) != null ? _b : false;\n }\n return this.cache.has(path);\n }\n delete(path) {\n for (const key of this.cache.keys()) {\n if (key.startsWith(path)) {\n this.cache.delete(key);\n }\n }\n }\n clear() {\n this.cache.clear();\n }\n};\n\n// src/useLens.ts\nimport { useMemo } from \"react\";\nfunction useLens(props, deps = []) {\n return useMemo(() => {\n const cache = new LensesStorage(props.control);\n const lens = LensCore.create(props.control, cache);\n return lens;\n }, [props.control, ...deps]);\n}\nexport {\n LensCore,\n LensesStorage,\n useLens\n};\n//# sourceMappingURL=index.js.map","import type { AdminCrudEmbeddedInputConfig } from '@baseplate-dev/project-builder-lib';\nimport type { AdminCrudInputWebFormProps } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { ModelUtils } from '@baseplate-dev/project-builder-lib';\nimport {\n createAdminCrudInputWebConfig,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport { SelectFieldController } from '@baseplate-dev/ui-components';\n\nfunction AdminCrudEmbeddedInputForm({\n formProps,\n name,\n model,\n embeddedFormOptions,\n}: AdminCrudInputWebFormProps): React.JSX.Element {\n const { definition } = useProjectDefinition();\n\n const foreignRelationOptions = ModelUtils.getRelationsToModel(\n definition,\n model.id,\n ).map((r) => ({\n label: `${r.relation.foreignRelationName} (${r.model.name})`,\n value: r.relation.foreignId,\n }));\n const prefix = name as 'prefix';\n const controlTyped = formProps.control as Control<{\n prefix: AdminCrudEmbeddedInputConfig;\n }>;\n\n return (\n <>\n <SelectFieldController\n label=\"Relation Name\"\n control={controlTyped}\n name={`${prefix}.modelRelationRef`}\n options={foreignRelationOptions}\n />\n <SelectFieldController\n label=\"Embedded Form\"\n control={controlTyped}\n name={`${prefix}.embeddedFormRef`}\n options={embeddedFormOptions}\n />\n </>\n );\n}\n\nexport const adminCrudEmbeddedInputWebConfig =\n createAdminCrudInputWebConfig<AdminCrudEmbeddedInputConfig>({\n name: 'embedded',\n pluginKey: undefined,\n label: 'Embedded',\n getNewInput: () => ({\n label: '',\n type: 'embedded',\n modelRelationRef: '',\n embeddedFormRef: '',\n }),\n Form: AdminCrudEmbeddedInputForm,\n });\n","import type { AdminCrudEmbeddedLocalInputConfig } from '@baseplate-dev/project-builder-lib';\nimport type { AdminCrudInputWebFormProps } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n createAdminCrudInputWebConfig,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport { SelectFieldController } from '@baseplate-dev/ui-components';\n\nfunction AdminCrudEmbeddedLocalInputForm({\n formProps,\n name,\n model,\n embeddedFormOptions,\n}: AdminCrudInputWebFormProps): React.JSX.Element {\n const { definitionContainer } = useProjectDefinition();\n const localRelationOptions =\n model.model.relations?.map((relation) => ({\n label: `${relation.name} (${definitionContainer.nameFromId(relation.modelRef)})`,\n value: relation.id,\n })) ?? [];\n const prefix = name as 'prefix';\n const controlTyped = formProps.control as Control<{\n prefix: AdminCrudEmbeddedLocalInputConfig;\n }>;\n\n return (\n <>\n <SelectFieldController\n label=\"Relation Name\"\n control={controlTyped}\n name={`${prefix}.localRelationRef`}\n options={localRelationOptions}\n />\n <SelectFieldController\n label=\"Embedded Form\"\n control={controlTyped}\n name={`${prefix}.embeddedFormRef`}\n options={embeddedFormOptions}\n />\n </>\n );\n}\n\nexport const adminCrudEmbeddedLocalInputWebConfig =\n createAdminCrudInputWebConfig<AdminCrudEmbeddedLocalInputConfig>({\n name: 'embeddedLocal',\n pluginKey: undefined,\n label: 'Embedded Local',\n getNewInput: () => ({\n label: '',\n type: 'embeddedLocal',\n embeddedFormRef: '',\n localRelationRef: '',\n }),\n Form: AdminCrudEmbeddedLocalInputForm,\n });\n","import type { AdminCrudEnumInputConfig } from '@baseplate-dev/project-builder-lib';\nimport type { AdminCrudInputWebFormProps } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { createAdminCrudInputWebConfig } from '@baseplate-dev/project-builder-lib/web';\nimport { SelectFieldController } from '@baseplate-dev/ui-components';\n\nfunction AdminCrudEnumInputForm({\n formProps,\n name,\n model,\n}: AdminCrudInputWebFormProps): React.JSX.Element {\n const enumFieldOptions = model.model.fields\n .filter((f) => f.type === 'enum')\n .map((field) => ({\n label: field.name,\n value: field.id,\n }));\n const prefix = name as 'prefix';\n const controlTyped = formProps.control as Control<{\n prefix: AdminCrudEnumInputConfig;\n }>;\n\n return (\n <SelectFieldController\n label=\"Enum Field\"\n control={controlTyped}\n name={`${prefix}.modelFieldRef`}\n options={enumFieldOptions}\n />\n );\n}\n\nexport const adminCrudEnumInputWebConfig =\n createAdminCrudInputWebConfig<AdminCrudEnumInputConfig>({\n name: 'enum',\n pluginKey: undefined,\n label: 'Enum',\n getNewInput: () => ({ label: '', type: 'enum', modelFieldRef: '' }),\n Form: AdminCrudEnumInputForm,\n });\n","import type { AdminCrudForeignInputConfig } from '@baseplate-dev/project-builder-lib';\nimport type { AdminCrudInputWebFormProps } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n createAdminCrudInputWebConfig,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\n\nfunction AdminCrudForeignInputForm({\n formProps,\n name,\n model,\n}: AdminCrudInputWebFormProps): React.JSX.Element {\n const { definitionContainer } = useProjectDefinition();\n const localRelationOptions =\n model.model.relations?.map((relation) => ({\n label: `${relation.name} (${definitionContainer.nameFromId(relation.modelRef)})`,\n value: relation.id,\n })) ?? [];\n const prefix = name as 'prefix';\n const controlTyped = formProps.control as Control<{\n prefix: AdminCrudForeignInputConfig;\n }>;\n\n return (\n <>\n <SelectFieldController\n label=\"Local Relation Name\"\n control={controlTyped}\n name={`${prefix}.localRelationRef`}\n options={localRelationOptions}\n />\n <InputFieldController\n label=\"Label Expression (e.g. name)\"\n control={controlTyped}\n name={`${prefix}.labelExpression`}\n />\n <InputFieldController\n label=\"Value Expression (e.g. id)\"\n control={controlTyped}\n name={`${prefix}.valueExpression`}\n />\n <InputFieldController\n label=\"Default Label (optional)\"\n control={controlTyped}\n name={`${prefix}.defaultLabel`}\n />\n <InputFieldController\n label=\"Empty Label (optional) - only if field is nullable\"\n control={controlTyped}\n name={`${prefix}.nullLabel`}\n />\n </>\n );\n}\n\nexport const adminCrudForeignInputWebConfig =\n createAdminCrudInputWebConfig<AdminCrudForeignInputConfig>({\n name: 'foreign',\n pluginKey: undefined,\n label: 'Foreign',\n getNewInput: () => ({\n label: '',\n type: 'foreign',\n localRelationRef: '',\n labelExpression: '',\n valueExpression: '',\n defaultLabel: '',\n nullLabel: '',\n }),\n Form: AdminCrudForeignInputForm,\n });\n","import type { AdminCrudTextInputConfig } from '@baseplate-dev/project-builder-lib';\nimport type { AdminCrudInputWebFormProps } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport { createAdminCrudInputWebConfig } from '@baseplate-dev/project-builder-lib/web';\nimport {\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\n\nfunction AdminCrudTextInputForm({\n formProps,\n name,\n model,\n}: AdminCrudInputWebFormProps): React.JSX.Element {\n const fieldOptions = model.model.fields.map((field) => ({\n label: field.name,\n value: field.id,\n }));\n const prefix = name as 'prefix';\n const controlTyped = formProps.control as Control<{\n prefix: AdminCrudTextInputConfig;\n }>;\n\n return (\n <>\n <SelectFieldController\n label=\"Field\"\n control={controlTyped}\n name={`${prefix}.modelFieldRef`}\n options={fieldOptions}\n />\n <InputFieldController\n label=\"Validation (zod), e.g. z.string().min(1) (optional)\"\n control={controlTyped}\n name={`${prefix}.validation`}\n />\n </>\n );\n}\n\nexport const adminCrudTextInputWebConfig =\n createAdminCrudInputWebConfig<AdminCrudTextInputConfig>({\n name: 'text',\n pluginKey: undefined,\n label: 'Text',\n getNewInput: () => ({ label: '', type: 'text', modelFieldRef: '' }),\n Form: AdminCrudTextInputForm,\n });\n","import { adminCrudEmbeddedInputWebConfig } from './embedded-input-config.js';\nimport { adminCrudEmbeddedLocalInputWebConfig } from './embedded-local-input-config.js';\nimport { adminCrudEnumInputWebConfig } from './enum-input-config.js';\nimport { adminCrudForeignInputWebConfig } from './foreign-input-config.js';\nimport { adminCrudTextInputWebConfig } from './text-input-config.js';\n\nexport const BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS = [\n adminCrudEmbeddedInputWebConfig,\n adminCrudEmbeddedLocalInputWebConfig,\n adminCrudEnumInputWebConfig,\n adminCrudForeignInputWebConfig,\n adminCrudTextInputWebConfig,\n];\n","import type {\n AdminCrudInputDefinition,\n AdminCrudInputInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n createAdminCrudInputSchema,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n adminCrudInputWebSpec,\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useEffect, useId } from 'react';\nimport { useForm, useWatch } from 'react-hook-form';\n\nimport { BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS } from './inputs/index.js';\n\ninterface Props {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n field?: AdminCrudInputInput;\n modelRef: string;\n embeddedFormOptions: { label: string; value: string }[];\n isNew?: boolean;\n onSave: (field: AdminCrudInputDefinition) => void;\n}\n\nexport function FieldDialog({\n open,\n onOpenChange,\n field,\n modelRef,\n embeddedFormOptions,\n isNew = false,\n onSave,\n}: Props): React.JSX.Element {\n const { definition, pluginContainer } = useProjectDefinition();\n const fieldSchema = useDefinitionSchema(createAdminCrudInputSchema);\n\n const model = modelRef\n ? ModelUtils.byIdOrThrow(definition, modelRef)\n : undefined;\n\n const inputWeb = pluginContainer.getPluginSpec(adminCrudInputWebSpec);\n\n const fieldTypeOptions = inputWeb\n .getInputWebConfigs(BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS)\n .map((config) => ({\n label: config.label,\n value: config.name,\n }));\n\n const form = useForm({\n resolver: zodResolver(fieldSchema),\n values: field ?? {\n type: 'text',\n label: '',\n },\n });\n\n const {\n control,\n handleSubmit,\n formState: { isDirty },\n reset,\n } = form;\n\n useEffect(() => {\n if (open && !field) {\n reset({\n type: 'text',\n label: '',\n });\n }\n }, [open, field, reset]);\n\n const fieldType = useWatch({ control, name: 'type' });\n\n const inputWebConfig = fieldType\n ? inputWeb.getInputWebConfig(\n fieldType,\n BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS,\n )\n : undefined;\n\n const WebForm = inputWebConfig?.Form;\n\n const onSubmit = handleSubmit((data) => {\n onSave(data);\n onOpenChange(false);\n });\n\n const formId = useId();\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[500px]\">\n <form\n id={formId}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n >\n <DialogHeader>\n <DialogTitle>{isNew ? 'Add Field' : 'Edit Field'}</DialogTitle>\n <DialogDescription>\n {isNew\n ? 'Configure the new form field settings.'\n : 'Update the field settings below.'}\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <SelectFieldController\n label=\"Type\"\n control={control}\n options={fieldTypeOptions}\n name=\"type\"\n />\n <InputFieldController\n label=\"Label\"\n control={control}\n name=\"label\"\n placeholder=\"Enter field label\"\n />\n {/* Render field-specific configuration */}\n {WebForm && model && (\n <WebForm\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\n formProps={form as any}\n name=\"\"\n model={model}\n embeddedFormOptions={embeddedFormOptions}\n pluginKey={inputWebConfig.pluginKey}\n />\n )}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n onOpenChange(false);\n }}\n >\n Cancel\n </Button>\n <Button form={formId} type=\"submit\" disabled={!isDirty}>\n {isNew ? 'Add' : 'Update'} Field\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type {\n AdminCrudInputDefinition,\n AdminCrudInputInput,\n AdminCrudSectionConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport {\n Button,\n RecordView,\n RecordViewActions,\n RecordViewItem,\n RecordViewItemList,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { useFieldArray, useWatch } from 'react-hook-form';\nimport { MdAdd, MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { SortableList } from '#src/components/index.js';\n\nimport { FieldDialog } from './field-dialog.js';\n\nexport type AdminCrudFormConfigInput = Pick<\n AdminCrudSectionConfigInput,\n 'form' | 'modelRef'\n>;\n\ninterface Props {\n className?: string;\n formProps: UseFormReturn<AdminCrudFormConfigInput>;\n embeddedFormOptions: { label: string; value: string }[];\n}\n\nfunction CrudFormFieldsForm({\n className,\n formProps,\n embeddedFormOptions,\n}: Props): React.JSX.Element {\n const { control } = formProps;\n const { requestConfirm } = useConfirmDialog();\n\n const { fields, append, remove, update, move } = useFieldArray({\n control,\n name: 'form.fields',\n });\n const [editingField, setEditingField] = useState<\n AdminCrudInputInput | undefined\n >(undefined);\n const [isEditing, setIsEditing] = useState(false);\n const [isCreating, setIsCreating] = useState(false);\n\n const formFields = useWatch({ control, name: 'form.fields' });\n\n function handleDeleteField(fieldIdx: number): void {\n const field = formFields[fieldIdx];\n requestConfirm({\n title: 'Delete Field',\n content: `Are you sure you want to delete the field \"${field.label || 'Untitled'}\"?`,\n onConfirm: () => {\n remove(fieldIdx);\n },\n });\n }\n\n function handleEditField(fieldIdx: number): void {\n setEditingField(formFields[fieldIdx]);\n setIsEditing(true);\n }\n\n function handleCreateField(): void {\n setEditingField(undefined);\n setIsCreating(true);\n }\n\n function handleSaveField(fieldData: AdminCrudInputDefinition): void {\n if (editingField) {\n const existingIndex = formFields.findIndex(\n (field) => field.id === editingField.id,\n );\n if (existingIndex !== -1) {\n update(existingIndex, fieldData);\n }\n } else {\n append(fieldData);\n }\n }\n\n const fieldListItems = fields.map((field, idx) => ({\n id: field.id,\n element: (\n <RecordView key={field.id}>\n <RecordViewItemList>\n <RecordViewItem title=\"Label\">\n <div className=\"flex items-center gap-2\">{field.label}</div>\n </RecordViewItem>\n <RecordViewItem title=\"Type\">{field.type}</RecordViewItem>\n </RecordViewItemList>\n <RecordViewActions>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Edit\"\n aria-label=\"Edit field\"\n onClick={() => {\n handleEditField(idx);\n }}\n >\n <MdEdit />\n </Button>\n <Button\n variant=\"ghostDestructive\"\n size=\"icon\"\n title=\"Delete\"\n aria-label=\"Delete field\"\n onClick={() => {\n handleDeleteField(idx);\n }}\n >\n <MdDeleteOutline />\n </Button>\n </RecordViewActions>\n </RecordView>\n ),\n }));\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fields.length === 0 ? (\n <p className=\"pt-4 text-style-muted\">\n No fields configured. Add fields to create your form.\n </p>\n ) : (\n <div className=\"flex w-full flex-col gap-2\">\n <SortableList listItems={fieldListItems} sortItems={move} />\n </div>\n )}\n <FieldDialog\n open={isEditing || isCreating}\n onOpenChange={(open) => {\n if (!open) {\n setIsEditing(false);\n setIsCreating(false);\n setEditingField(undefined);\n }\n }}\n field={editingField}\n modelRef={useWatch({ control, name: 'modelRef' }) || ''}\n embeddedFormOptions={embeddedFormOptions}\n isNew={isCreating}\n onSave={handleSaveField}\n />\n <Button variant=\"secondary\" size=\"sm\" onClick={handleCreateField}>\n <MdAdd />\n Add Field\n </Button>\n </div>\n );\n}\n\nexport default CrudFormFieldsForm;\n","// src/rhf/useFieldArray.ts\nimport { useMemo } from \"react\";\nimport {\n useFieldArray as useFieldArrayOriginal\n} from \"react-hook-form\";\nfunction useFieldArray(props) {\n const original = useFieldArrayOriginal(props);\n const newFields = useMemo(() => {\n if (!props.getTransformer) {\n return original.fields;\n }\n return original.fields.map(props.getTransformer);\n }, [original.fields, props.getTransformer]);\n return {\n fields: newFields,\n move: original.move,\n remove: original.remove,\n swap: original.swap,\n prepend: (value, options) => {\n if (!props.setTransformer) {\n return original.prepend(value, options);\n }\n const newValue = Array.isArray(value) ? value.map(props.setTransformer) : props.setTransformer(value);\n original.prepend(newValue, options);\n },\n append: (value, options) => {\n if (!props.setTransformer) {\n return original.append(value, options);\n }\n const newValue = Array.isArray(value) ? value.map(props.setTransformer) : props.setTransformer(value);\n original.append(newValue, options);\n },\n insert: (index, value, options) => {\n if (!props.setTransformer) {\n return original.insert(index, value, options);\n }\n const newValue = Array.isArray(value) ? value.map(props.setTransformer) : props.setTransformer(value);\n original.insert(index, newValue, options);\n },\n update: (index, value) => {\n if (!props.setTransformer) {\n return original.update(index, value);\n }\n const newValue = props.setTransformer(value);\n original.update(index, newValue);\n },\n replace: (value) => {\n if (!props.setTransformer) {\n return original.replace(value);\n }\n const newValue = props.setTransformer(value);\n original.replace(newValue);\n }\n };\n}\nexport {\n useFieldArray\n};\n//# sourceMappingURL=index.js.map","import type { AdminCrudForeignColumnInput } from '@baseplate-dev/project-builder-lib';\nimport type { AdminCrudColumnWebFormProps } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\n\nimport { adminCrudColumnEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n createAdminCrudColumnWebConfig,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\n\nfunction ForeignColumnForm({\n formProps,\n model,\n}: AdminCrudColumnWebFormProps<AdminCrudForeignColumnInput>): React.JSX.Element {\n const { control } = formProps;\n const { definitionContainer } = useProjectDefinition();\n\n const localRelationOptions =\n model.model.relations?.map((relation) => ({\n label: `${relation.name} (${definitionContainer.nameFromId(relation.modelRef)})`,\n value: relation.id,\n })) ?? [];\n\n return (\n <>\n <SelectFieldController\n label=\"Local Relation\"\n control={control}\n name=\"localRelationRef\"\n options={localRelationOptions}\n placeholder=\"Select a relation\"\n />\n <InputFieldController\n label=\"Label Expression\"\n control={control}\n name=\"labelExpression\"\n placeholder=\"e.g. name\"\n description=\"Field to display from the related model\"\n />\n <InputFieldController\n label=\"Value Expression\"\n control={control}\n name=\"valueExpression\"\n placeholder=\"e.g. id\"\n description=\"Field to use for matching the relation\"\n />\n </>\n );\n}\n\nexport const adminCrudForeignColumnWebConfig =\n createAdminCrudColumnWebConfig<AdminCrudForeignColumnInput>({\n name: 'foreign',\n pluginKey: undefined,\n label: 'Foreign Column',\n isAvailableForModel: (definition, modelId) => {\n // Foreign columns are available if the model has relations\n const model = definition.models.find((m) => m.id === modelId);\n return (model?.model.relations?.length ?? 0) > 0;\n },\n Form: ForeignColumnForm,\n getNewColumn: () => ({\n id: adminCrudColumnEntityType.generateNewId(),\n type: 'foreign' as const,\n label: '',\n localRelationRef: '',\n labelExpression: '',\n valueExpression: '',\n }),\n });\n","import type { AdminCrudTextColumnInput } from '@baseplate-dev/project-builder-lib';\nimport type { AdminCrudColumnWebFormProps } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\n\nimport { adminCrudColumnEntityType } from '@baseplate-dev/project-builder-lib';\nimport { createAdminCrudColumnWebConfig } from '@baseplate-dev/project-builder-lib/web';\nimport { SelectFieldController } from '@baseplate-dev/ui-components';\n\nfunction TextColumnForm({\n formProps,\n model,\n}: AdminCrudColumnWebFormProps<AdminCrudTextColumnInput>): React.JSX.Element {\n const { control } = formProps;\n\n const fieldOptions = model.model.fields.map((field) => ({\n label: field.name,\n value: field.id,\n }));\n\n return (\n <SelectFieldController\n label=\"Field\"\n control={control}\n name=\"modelFieldRef\"\n options={fieldOptions}\n placeholder=\"Select a field\"\n />\n );\n}\n\nexport const adminCrudTextColumnWebConfig =\n createAdminCrudColumnWebConfig<AdminCrudTextColumnInput>({\n name: 'text',\n pluginKey: undefined,\n label: 'Text Column',\n Form: TextColumnForm,\n isAvailableForModel: () => true,\n getNewColumn: () => ({\n id: adminCrudColumnEntityType.generateNewId(),\n type: 'text' as const,\n label: '',\n modelFieldRef: '',\n }),\n });\n","import { adminCrudForeignColumnWebConfig } from './foreign-column-form';\nimport { adminCrudTextColumnWebConfig } from './text-column-form';\n\nexport const BUILT_IN_ADMIN_CRUD_COLUMN_WEB_CONFIGS = [\n adminCrudForeignColumnWebConfig,\n adminCrudTextColumnWebConfig,\n];\n","import type {\n AdminCrudColumnDefinition,\n AdminCrudColumnInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n createAdminCrudColumnSchema,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n adminCrudColumnWebSpec,\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useEffect, useId } from 'react';\nimport { useForm, useWatch } from 'react-hook-form';\n\nimport { BUILT_IN_ADMIN_CRUD_COLUMN_WEB_CONFIGS } from './columns/index.js';\n\ninterface Props {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n column?: AdminCrudColumnInput;\n modelRef: string;\n isNew?: boolean;\n onSave: (column: AdminCrudColumnDefinition) => void;\n}\n\nexport function ColumnDialog({\n open,\n onOpenChange,\n column,\n modelRef,\n isNew = false,\n onSave,\n}: Props): React.JSX.Element {\n const { definition, pluginContainer } = useProjectDefinition();\n const columnSchema = useDefinitionSchema(createAdminCrudColumnSchema);\n\n const model = modelRef\n ? ModelUtils.byIdOrThrow(definition, modelRef)\n : undefined;\n\n const columnWeb = pluginContainer.getPluginSpec(adminCrudColumnWebSpec);\n\n const columnTypeOptions = columnWeb\n .getColumnWebConfigs(BUILT_IN_ADMIN_CRUD_COLUMN_WEB_CONFIGS)\n .filter(\n (config) => modelRef && config.isAvailableForModel(definition, modelRef),\n )\n .map((config) => ({\n label: config.label,\n value: config.name,\n }));\n\n const form = useForm({\n resolver: zodResolver(columnSchema),\n values: column ?? {\n type: 'text',\n label: '',\n },\n });\n\n const {\n control,\n handleSubmit,\n formState: { isDirty },\n reset,\n } = form;\n\n useEffect(() => {\n if (open && !column) {\n reset({\n type: 'text',\n label: '',\n });\n }\n }, [open, column, reset]);\n\n const columnType = useWatch({ control, name: 'type' });\n\n const columnWebConfig = columnType\n ? columnWeb.getColumnWebConfig(\n columnType,\n BUILT_IN_ADMIN_CRUD_COLUMN_WEB_CONFIGS,\n )\n : undefined;\n\n const WebForm = columnWebConfig?.Form;\n\n const onSubmit = handleSubmit((data) => {\n onSave(data);\n onOpenChange(false);\n });\n\n const formId = useId();\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[425px]\">\n <form\n id={formId}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n >\n <DialogHeader>\n <DialogTitle>{isNew ? 'Add Column' : 'Edit Column'}</DialogTitle>\n <DialogDescription>\n {isNew\n ? 'Configure the new table column settings.'\n : 'Update the column settings below.'}\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <SelectFieldController\n label=\"Type\"\n control={control}\n options={columnTypeOptions}\n name=\"type\"\n />\n <InputFieldController\n label=\"Label\"\n control={control}\n name=\"label\"\n placeholder=\"Enter column label\"\n />\n {/* Render column-specific configuration */}\n {WebForm && model && (\n <WebForm\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\n formProps={form as any}\n model={model}\n pluginKey={columnWebConfig.pluginKey}\n />\n )}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n onOpenChange(false);\n }}\n >\n Cancel\n </Button>\n <Button form={formId} type=\"submit\" disabled={!isDirty}>\n {isNew ? 'Add' : 'Update'} Column\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type {\n AdminCrudColumnDefinition,\n AdminCrudColumnInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type { Lens } from '@hookform/lenses';\nimport type React from 'react';\n\nimport {\n Button,\n RecordView,\n RecordViewActions,\n RecordViewItem,\n RecordViewItemList,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport { useFieldArray } from '@hookform/lenses/rhf';\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { MdAdd, MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { SortableList } from '#src/components/index.js';\n\nimport { ColumnDialog } from './column-dialog.js';\n\ninterface Props {\n className?: string;\n lens: Lens<AdminCrudColumnInput[]>;\n modelRef: string;\n}\n\nfunction CrudTableColumnsForm({\n className,\n lens,\n modelRef,\n}: Props): React.JSX.Element {\n const { requestConfirm } = useConfirmDialog();\n\n const { fields, append, remove, update, move } = useFieldArray(\n lens.interop(),\n );\n const [editingColumn, setEditingColumn] = useState<\n AdminCrudColumnInput | undefined\n >(undefined);\n const [isEditing, setIsEditing] = useState(false);\n const [isCreating, setIsCreating] = useState(false);\n\n function handleDeleteColumn(columnIdx: number): void {\n const column = fields[columnIdx];\n requestConfirm({\n title: 'Delete Column',\n content: `Are you sure you want to delete the column \"${column.label || 'Untitled'}\"?`,\n onConfirm: () => {\n remove(columnIdx);\n },\n });\n }\n\n const columns = useWatch(lens.interop());\n\n function handleEditColumn(columnIdx: number): void {\n setEditingColumn(columns[columnIdx]);\n setIsEditing(true);\n }\n\n function handleCreateColumn(): void {\n setEditingColumn(undefined);\n setIsCreating(true);\n }\n\n function handleSaveColumn(columnData: AdminCrudColumnDefinition): void {\n if (editingColumn) {\n const existingIndex = columns.findIndex(\n (field) => field.id === editingColumn.id,\n );\n if (existingIndex !== -1) {\n update(existingIndex, columnData);\n }\n } else {\n append(columnData);\n }\n }\n\n const columnListItems = fields.map((field, idx) => ({\n id: field.id,\n element: (\n <RecordView key={field.id}>\n <RecordViewItemList>\n <RecordViewItem title=\"Label\">\n <div className=\"flex items-center gap-2\">\n <span>\n {field.label || (\n <span className=\"text-muted-foreground\">Untitled Column</span>\n )}\n </span>\n </div>\n </RecordViewItem>\n <RecordViewItem title=\"Type\">{field.type}</RecordViewItem>\n </RecordViewItemList>\n <RecordViewActions>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Edit\"\n aria-label=\"Edit column\"\n onClick={() => {\n handleEditColumn(idx);\n }}\n >\n <MdEdit />\n </Button>\n <Button\n variant=\"ghostDestructive\"\n size=\"icon\"\n title=\"Delete\"\n aria-label=\"Delete column\"\n onClick={() => {\n handleDeleteColumn(idx);\n }}\n >\n <MdDeleteOutline />\n </Button>\n </RecordViewActions>\n </RecordView>\n ),\n }));\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fields.length === 0 ? (\n <p className=\"pt-4 text-style-muted\">\n No columns configured. Add columns to display data in your table.\n </p>\n ) : (\n <div className=\"flex w-full flex-col gap-2\">\n <SortableList listItems={columnListItems} sortItems={move} />\n </div>\n )}\n <ColumnDialog\n open={isEditing || isCreating}\n onOpenChange={(open) => {\n if (!open) {\n setIsEditing(false);\n setIsCreating(false);\n setEditingColumn(undefined);\n }\n }}\n column={editingColumn}\n modelRef={modelRef}\n isNew={isCreating}\n onSave={handleSaveColumn}\n />\n <Button variant=\"secondary\" size=\"sm\" onClick={handleCreateColumn}>\n <MdAdd />\n Add Column\n </Button>\n </div>\n );\n}\n\nexport default CrudTableColumnsForm;\n","import type {\n AdminCrudColumnInput,\n AdminCrudEmbeddedFormConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type { Lens } from '@hookform/lenses';\nimport type React from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport { createAdminCrudEmbeddedFormSchema } from '@baseplate-dev/project-builder-lib';\nimport {\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n CheckboxFieldController,\n InputFieldController,\n SelectFieldController,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n toast,\n} from '@baseplate-dev/ui-components';\nimport { useLens } from '@hookform/lenses';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useId } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport type {\n EmbeddedListFormProps,\n EmbeddedListTableProps,\n} from '#src/components/index.js';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport type { AdminCrudFormConfigInput } from './crud-form-fields-form.js';\n\nimport CrudFormFieldsForm from './crud-form-fields-form.js';\nimport CrudTableColumnsForm from './crud-table-columns-form.js';\n\nexport function AdminCrudEmbeddedTable({\n items,\n edit,\n remove,\n}: EmbeddedListTableProps<AdminCrudEmbeddedFormConfigInput>): React.JSX.Element {\n const { definitionContainer } = useProjectDefinition();\n return (\n <Table className=\"max-w-6xl\">\n <TableHeader>\n <TableRow>\n <TableHead>Form Name</TableHead>\n <TableHead>Model Name</TableHead>\n <TableHead>Type</TableHead>\n <TableHead>Actions</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {items.map((item, idx) => (\n <TableRow key={item.id}>\n <TableCell>{item.name}</TableCell>\n <TableCell>\n {definitionContainer.nameFromId(item.modelRef)}\n </TableCell>\n <TableCell>{item.type}</TableCell>\n <TableCell className=\"space-x-4\">\n <Button\n variant=\"link\"\n size=\"none\"\n onClick={() => {\n edit(idx);\n }}\n >\n Edit\n </Button>\n <Button\n variant=\"linkDestructive\"\n size=\"none\"\n onClick={() => {\n remove(idx);\n }}\n >\n Remove\n </Button>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n );\n}\n\nconst TYPE_OPTIONS = [\n { label: 'Object', value: 'object' },\n { label: 'List', value: 'list' },\n];\n\ninterface Props\n extends EmbeddedListFormProps<AdminCrudEmbeddedFormConfigInput> {\n embeddedFormOptions: { label: string; value: string }[];\n}\n\nfunction AdminCrudEmbeddedForm({\n initialData,\n onSubmit,\n embeddedFormOptions,\n}: Props): React.JSX.Element {\n const { definition } = useProjectDefinition();\n const adminCrudEmbeddedFormSchema = useDefinitionSchema(\n createAdminCrudEmbeddedFormSchema,\n );\n const formProps = useForm<AdminCrudEmbeddedFormConfigInput>({\n resolver: zodResolver(adminCrudEmbeddedFormSchema),\n defaultValues: initialData,\n });\n const { handleSubmit, control, watch } = formProps;\n\n const modelOptions = definition.models.map((model) => ({\n label: model.name,\n value: model.id,\n }));\n\n const type = watch('type');\n const modelRef = watch('modelRef');\n const lens = useLens({ control });\n const formId = useId();\n\n return (\n <form\n onSubmit={(e) => {\n e.stopPropagation();\n handleSubmit(onSubmit)(e).catch((error: unknown) => {\n toast.error(logAndFormatError(error));\n });\n }}\n id={formId}\n className=\"space-y-4\"\n >\n <InputFieldController label=\"Name\" control={control} name=\"name\" />\n <SelectFieldController\n label=\"Type\"\n control={control}\n name=\"type\"\n options={TYPE_OPTIONS}\n />\n <CheckboxFieldController\n label=\"Include ID Field? (useful for list types)\"\n control={control}\n name=\"includeIdField\"\n />\n <SelectFieldController\n label=\"Model\"\n control={control}\n options={modelOptions}\n name=\"modelRef\"\n />\n {type === 'list' && (\n <>\n <h2>Table</h2>\n <CrudTableColumnsForm\n lens={\n // not sure why but the typings don't work as expected\n lens.focus('table.columns') as unknown as Lens<\n AdminCrudColumnInput[]\n >\n }\n modelRef={modelRef}\n />\n </>\n )}\n <h2>Form</h2>\n <CrudFormFieldsForm\n formProps={\n formProps as unknown as UseFormReturn<AdminCrudFormConfigInput>\n }\n embeddedFormOptions={embeddedFormOptions}\n />\n <Button type=\"submit\" form={formId}>\n Save\n </Button>\n </form>\n );\n}\n\nexport default AdminCrudEmbeddedForm;\n","import type { AdminCrudDeleteActionConfig } from '@baseplate-dev/project-builder-lib';\n\nimport { createAdminCrudActionWebConfig } from '@baseplate-dev/project-builder-lib/web';\n\nexport const adminCrudDeleteActionWebConfig =\n createAdminCrudActionWebConfig<AdminCrudDeleteActionConfig>({\n name: 'delete',\n pluginKey: undefined,\n label: 'Delete',\n isAvailableForModel: () => true,\n getNewAction: () => ({ type: 'delete', position: 'dropdown' }),\n });\n","import type { AdminCrudEditActionConfig } from '@baseplate-dev/project-builder-lib';\n\nimport { createAdminCrudActionWebConfig } from '@baseplate-dev/project-builder-lib/web';\n\nexport const adminCrudEditActionWebConfig =\n createAdminCrudActionWebConfig<AdminCrudEditActionConfig>({\n name: 'edit',\n pluginKey: undefined,\n label: 'Edit',\n isAvailableForModel: () => true,\n getNewAction: () => ({ type: 'edit', position: 'inline' }),\n });\n","import { adminCrudDeleteActionWebConfig } from './delete-action-config.js';\nimport { adminCrudEditActionWebConfig } from './edit-action-config.js';\n\nexport const BUILT_IN_ADMIN_CRUD_ACTION_WEB_CONFIGS = [\n adminCrudEditActionWebConfig,\n adminCrudDeleteActionWebConfig,\n];\n","import type {\n AdminCrudActionDefinition,\n AdminCrudActionInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n createAdminCrudActionSchema,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n adminCrudActionWebSpec,\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useEffect, useId } from 'react';\nimport { useForm, useWatch } from 'react-hook-form';\n\nimport { BUILT_IN_ADMIN_CRUD_ACTION_WEB_CONFIGS } from './actions/index.js';\n\ninterface Props {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n action?: AdminCrudActionInput;\n modelRef: string;\n isNew?: boolean;\n onSave: (action: AdminCrudActionDefinition) => void;\n}\n\nexport function ActionDialog({\n open,\n onOpenChange,\n action,\n modelRef,\n isNew = false,\n onSave,\n}: Props): React.JSX.Element {\n const { definition, pluginContainer } = useProjectDefinition();\n const actionSchema = useDefinitionSchema(createAdminCrudActionSchema);\n\n const model = modelRef\n ? ModelUtils.byIdOrThrow(definition, modelRef)\n : undefined;\n\n const actionWeb = pluginContainer.getPluginSpec(adminCrudActionWebSpec);\n\n const actionTypeOptions = actionWeb\n .getActionWebConfigs(BUILT_IN_ADMIN_CRUD_ACTION_WEB_CONFIGS)\n .filter(\n (config) => modelRef && config.isAvailableForModel(definition, modelRef),\n )\n .map((config) => ({\n label: config.label,\n value: config.name,\n }));\n\n const form = useForm({\n resolver: zodResolver(actionSchema),\n values: action ?? {\n type: 'edit',\n position: 'inline' as const,\n },\n });\n\n const {\n control,\n handleSubmit,\n formState: { isDirty },\n reset,\n } = form;\n\n useEffect(() => {\n if (open && !action) {\n reset({\n type: 'edit',\n position: 'inline' as const,\n });\n }\n }, [open, action, reset]);\n\n const actionType = useWatch({ control, name: 'type' });\n\n const actionWebConfig = actionType\n ? actionWeb.getActionWebConfig(\n actionType,\n BUILT_IN_ADMIN_CRUD_ACTION_WEB_CONFIGS,\n )\n : undefined;\n\n const WebForm = actionWebConfig?.Form;\n\n const onSubmit = handleSubmit((data) => {\n onSave(data);\n onOpenChange(false);\n });\n\n const formId = useId();\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[500px]\">\n <form\n id={formId}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n >\n <DialogHeader>\n <DialogTitle>{isNew ? 'Add Action' : 'Edit Action'}</DialogTitle>\n <DialogDescription>\n {isNew\n ? 'Configure the new table action settings.'\n : 'Update the action settings below.'}\n </DialogDescription>\n </DialogHeader>\n <div className=\"space-y-4 py-4\">\n <SelectFieldController\n label=\"Type\"\n control={control}\n options={actionTypeOptions}\n name=\"type\"\n />\n <SelectFieldController\n label=\"Position\"\n control={control}\n options={[\n { label: 'Inline', value: 'inline' },\n { label: 'Dropdown', value: 'dropdown' },\n ]}\n name=\"position\"\n />\n {/* Render action-specific configuration */}\n {WebForm && model && (\n <WebForm\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\n formProps={form as any}\n model={model}\n pluginKey={actionWebConfig.pluginKey}\n />\n )}\n </div>\n <DialogFooter>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={() => {\n onOpenChange(false);\n }}\n >\n Cancel\n </Button>\n <Button form={formId} type=\"submit\" disabled={!isDirty}>\n {isNew ? 'Add' : 'Update'} Action\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type {\n AdminCrudActionDefinition,\n AdminCrudSectionConfig,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n Button,\n RecordView,\n RecordViewActions,\n RecordViewItem,\n RecordViewItemList,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useState } from 'react';\nimport { useFieldArray, useWatch } from 'react-hook-form';\nimport { MdAdd, MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { SortableList } from '#src/components/index.js';\n\nimport { ActionDialog } from './action-dialog.js';\n\nexport type AdminCrudActionsConfig = Pick<\n AdminCrudSectionConfig,\n 'table' | 'modelRef'\n>;\n\ninterface Props {\n className?: string;\n control: Control<AdminCrudActionsConfig>;\n modelRef: string | undefined;\n}\n\nfunction CrudTableActionsForm({\n className,\n control,\n modelRef,\n}: Props): React.JSX.Element {\n const { requestConfirm } = useConfirmDialog();\n\n const { fields, append, remove, update, move } = useFieldArray({\n control,\n name: 'table.actions',\n });\n\n const [editingAction, setEditingAction] = useState<\n AdminCrudActionDefinition | undefined\n >(undefined);\n const [isEditing, setIsEditing] = useState(false);\n const [isCreating, setIsCreating] = useState(false);\n\n function handleDeleteAction(actionIdx: number): void {\n const action = fields[actionIdx];\n requestConfirm({\n title: 'Delete Action',\n content: `Are you sure you want to delete the \"${action.type}\" action?`,\n onConfirm: () => {\n remove(actionIdx);\n },\n });\n }\n\n const actions = useWatch({ control, name: 'table.actions' });\n\n function handleEditAction(actionIdx: number): void {\n setEditingAction(actions?.[actionIdx]);\n setIsEditing(true);\n }\n\n function handleCreateAction(): void {\n setEditingAction(undefined);\n setIsCreating(true);\n }\n\n function handleSaveAction(actionData: AdminCrudActionDefinition): void {\n if (editingAction) {\n const existingIndex = (actions ?? []).findIndex(\n (action) => action.id === editingAction.id,\n );\n if (existingIndex !== -1) {\n update(existingIndex, actionData);\n }\n } else {\n append(actionData);\n }\n }\n\n const actionListItems = fields.map((field, idx) => ({\n id: field.id,\n element: (\n <RecordView key={field.id}>\n <RecordViewItemList>\n <RecordViewItem title=\"Type\">\n <div className=\"flex items-center gap-2\">\n <span className=\"capitalize\">{field.type}</span>\n </div>\n </RecordViewItem>\n <RecordViewItem title=\"Position\">{field.position}</RecordViewItem>\n </RecordViewItemList>\n <RecordViewActions>\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Edit\"\n aria-label=\"Edit action\"\n onClick={() => {\n handleEditAction(idx);\n }}\n >\n <MdEdit />\n </Button>\n <Button\n variant=\"ghostDestructive\"\n size=\"icon\"\n title=\"Delete\"\n aria-label=\"Delete action\"\n onClick={() => {\n handleDeleteAction(idx);\n }}\n >\n <MdDeleteOutline />\n </Button>\n </RecordViewActions>\n </RecordView>\n ),\n }));\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fields.length === 0 ? (\n <p className=\"pt-4 text-style-muted\">\n No actions configured. Add actions to enable row operations.\n </p>\n ) : (\n <div className=\"flex w-full flex-col gap-2\">\n <SortableList listItems={actionListItems} sortItems={move} />\n </div>\n )}\n <ActionDialog\n open={isEditing || isCreating}\n onOpenChange={(open) => {\n if (!open) {\n setIsEditing(false);\n setIsCreating(false);\n setEditingAction(undefined);\n }\n }}\n action={editingAction}\n modelRef={modelRef ?? ''}\n isNew={isCreating}\n onSave={handleSaveAction}\n />\n <Button variant=\"secondary\" size=\"sm\" onClick={handleCreateAction}>\n <MdAdd />\n Add Action\n </Button>\n </div>\n );\n}\n\nexport default CrudTableActionsForm;\n","import type {\n AdminCrudColumnInput,\n AdminCrudSectionConfigInput,\n} from '@baseplate-dev/project-builder-lib';\nimport type { Lens } from '@hookform/lenses';\nimport type React from 'react';\nimport type { Control, UseFormReturn } from 'react-hook-form';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n CheckboxFieldController,\n ComboboxFieldController,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n} from '@baseplate-dev/ui-components';\nimport { useLens } from '@hookform/lenses';\nimport { useWatch } from 'react-hook-form';\n\nimport { EmbeddedListInput } from '#src/components/index.js';\n\nimport type { AdminCrudFormConfigInput } from './crud-form-fields-form.js';\nimport type { AdminCrudActionsConfig } from './crud-table-actions-form.js';\n\nimport AdminCrudEmbeddedForm, {\n AdminCrudEmbeddedTable,\n} from './admin-crud-embedded-form.js';\nimport CrudFormFieldsForm from './crud-form-fields-form.js';\nimport CrudTableActionsForm from './crud-table-actions-form.js';\nimport CrudTableColumnsForm from './crud-table-columns-form.js';\n\ninterface Props {\n formProps: UseFormReturn<AdminCrudSectionConfigInput>;\n}\n\nfunction AdminCrudSectionForm({ formProps }: Props): React.JSX.Element {\n const { control } = formProps;\n const { definition } = useProjectDefinition();\n const lens = useLens({ control });\n\n const modelOptions = definition.models.map((model) => ({\n label: model.name,\n value: model.id,\n }));\n\n const modelId = useWatch({\n control,\n name: 'modelRef',\n });\n\n const nameFieldOptions =\n definition.models\n .find((m) => m.id === modelId)\n ?.model.fields.map((field) => ({\n label: field.name,\n value: field.id,\n })) ?? [];\n\n const embeddedFormOptions =\n useWatch({\n control,\n name: 'embeddedForms',\n })?.map((form) => ({\n label: form.name,\n value: form.id,\n })) ?? [];\n\n // TODO: Update embedded form names when form is added/removed\n\n return (\n <>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Model Configuration</SectionListSectionTitle>\n <SectionListSectionDescription>\n Configure the data model and basic settings for this CRUD section.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"space-y-6\">\n <ComboboxFieldController\n label=\"Model\"\n control={control}\n options={modelOptions}\n name=\"modelRef\"\n />\n <ComboboxFieldController\n label=\"Name Field\"\n control={control}\n options={nameFieldOptions}\n description=\"The field to use as the name of the record (used in breadcrumbs/title of edit page)\"\n name=\"nameFieldRef\"\n />\n <CheckboxFieldController\n label=\"Disable Create?\"\n control={control}\n name=\"disableCreate\"\n />\n </SectionListSectionContent>\n </SectionListSection>\n\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Table Configuration</SectionListSectionTitle>\n <SectionListSectionDescription>\n Configure which columns to display in the data table.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent>\n <CrudTableColumnsForm\n lens={\n // not sure why but the typings don't work as expected\n lens.focus('table.columns') as unknown as Lens<\n AdminCrudColumnInput[]\n >\n }\n modelRef={modelId}\n />\n </SectionListSectionContent>\n </SectionListSection>\n\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Table Actions</SectionListSectionTitle>\n <SectionListSectionDescription>\n Configure actions available for each row in the table. Drag to\n reorder.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent>\n <CrudTableActionsForm\n control={control as unknown as Control<AdminCrudActionsConfig>}\n modelRef={modelId}\n />\n </SectionListSectionContent>\n </SectionListSection>\n\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Form Configuration</SectionListSectionTitle>\n <SectionListSectionDescription>\n Configure the form fields for creating and editing records.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent>\n <CrudFormFieldsForm\n formProps={\n formProps as unknown as UseFormReturn<AdminCrudFormConfigInput>\n }\n embeddedFormOptions={embeddedFormOptions}\n />\n </SectionListSectionContent>\n </SectionListSection>\n\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Embedded Forms</SectionListSectionTitle>\n <SectionListSectionDescription>\n Configure embedded forms for related data objects.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent>\n <EmbeddedListInput.LabelledController\n control={control}\n name=\"embeddedForms\"\n renderForm={(formProps) => (\n <AdminCrudEmbeddedForm\n {...formProps}\n embeddedFormOptions={embeddedFormOptions}\n />\n )}\n renderTable={(tableProps) => (\n <AdminCrudEmbeddedTable {...tableProps} />\n )}\n defaultValue={{ type: 'object' }}\n />\n </SectionListSectionContent>\n </SectionListSection>\n </>\n );\n}\n\nexport default AdminCrudSectionForm;\n","import type { ComboboxFieldProps } from '@baseplate-dev/ui-components';\nimport type React from 'react';\nimport type { Control, FieldPath, FieldValues } from 'react-hook-form';\nimport type { IconType } from 'react-icons/lib';\n\nimport {\n AsyncComboboxField,\n useControllerMerged,\n} from '@baseplate-dev/ui-components';\n\ninterface IconOption {\n label: string;\n value: string;\n icon: IconType;\n}\n\ntype ReactIconComboboxProps = Omit<\n ComboboxFieldProps<IconOption>,\n 'options' | 'renderText'\n>;\n\nasync function fetchIcons(): Promise<IconOption[]> {\n const hiIcons = await import('react-icons/hi');\n const faIcons = await import('react-icons/fa');\n const mdIcons = await import('react-icons/md');\n const bsIcons = await import('react-icons/bs');\n\n const icons = [hiIcons, faIcons, mdIcons, bsIcons].map((icons) =>\n Object.entries(icons)\n .filter(([, value]) => typeof value === 'function')\n .map(([key, value]) => ({\n label: key,\n value: key,\n icon: value as IconType,\n })),\n );\n\n return icons.flat();\n}\n\nfunction ReactIconCombobox({\n ...rest\n}: ReactIconComboboxProps): React.ReactElement {\n return (\n <AsyncComboboxField\n placeholder=\"Select an icon\"\n {...rest}\n loadOptions={(query) =>\n fetchIcons().then((options) =>\n options\n .filter(\n (option) =>\n !query ||\n option.label.toLowerCase().includes(query.toLowerCase()),\n )\n .sort((a, b) => a.label.localeCompare(b.label))\n .slice(0, 20),\n )\n }\n renderItemLabel={(option) => (\n <div className=\"flex items-center gap-2\">\n <option.icon className=\"size-4\" />\n {option.label}\n </div>\n )}\n />\n );\n}\n\ninterface ReactIconComboboxControllerProps<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> extends Omit<ReactIconComboboxProps, 'value'> {\n control: Control<TFieldValues>;\n name: TFieldName;\n}\n\nfunction ReactIconComboboxController<\n TFieldValues extends FieldValues = FieldValues,\n TFieldName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n name,\n control,\n ...rest\n}: ReactIconComboboxControllerProps<\n TFieldValues,\n TFieldName\n>): React.JSX.Element {\n const {\n field,\n fieldState: { error },\n } = useControllerMerged({ name, control }, rest);\n\n const restProps = rest;\n\n return (\n <ReactIconCombobox\n error={error?.message}\n {...restProps}\n {...field}\n value={field.value ?? null}\n />\n );\n}\n\nexport { ReactIconComboboxController };\n","import type React from 'react';\n\nimport {\n adminSectionEntityType,\n createWebAdminSectionSchema,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockUnsavedChangesNavigate,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n ComboboxFieldController,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n FormActionBar,\n InputFieldController,\n SectionList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { createFileRoute, notFound, useNavigate } from '@tanstack/react-router';\n\nimport { useDefinitionSchema } from '#src/hooks/use-definition-schema.js';\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport AdminCrudSectionForm from './-components/admin-crud-section-form.js';\nimport { ReactIconComboboxController } from './-components/react-icon-combobox.js';\n\nexport const Route = createFileRoute(\n '/admin-sections/$appKey/edit/$sectionKey',\n)({\n component: EditAdminSectionPage,\n beforeLoad: ({ params: { sectionKey }, context: { adminApp } }) => {\n if (!adminApp) return {};\n\n const section = adminApp.sections?.find(\n (s) => adminSectionEntityType.idFromKey(sectionKey) === s.id,\n );\n\n if (!section) return {};\n\n return {\n getTitle: () => section.name,\n section,\n };\n },\n loader: ({ context: { section, app } }) => {\n if (!section || !app) throw notFound();\n return { section, app };\n },\n});\n\nfunction EditAdminSectionPage(): React.JSX.Element {\n const { app, section } = Route.useLoaderData();\n const { appKey, sectionKey } = Route.useParams();\n const navigate = useNavigate({ from: Route.fullPath });\n\n const { definition, saveDefinitionWithFeedback, isSavingDefinition } =\n useProjectDefinition();\n const adminSectionSchema = useDefinitionSchema(createWebAdminSectionSchema);\n\n const featureOptions = definition.features.map((f) => ({\n label: f.name,\n value: f.id,\n }));\n\n const formProps = useResettableForm({\n resolver: zodResolver(adminSectionSchema),\n values: section,\n defaultValues: { type: 'crud' },\n });\n\n const { control, handleSubmit, reset } = formProps;\n\n const onSubmit = handleSubmit((data) => {\n const { id: _dataId, ...sectionData } = data;\n return saveDefinitionWithFeedback((draftConfig) => {\n const webApp = draftConfig.apps.find((a) => a.id === app.id);\n if (webApp?.type !== 'web' || !webApp.adminApp) return;\n\n const existingIndex = webApp.adminApp.sections?.findIndex(\n (s) => s.id === adminSectionEntityType.idFromKey(sectionKey),\n );\n\n if (\n existingIndex !== undefined &&\n existingIndex >= 0 &&\n webApp.adminApp.sections\n ) {\n webApp.adminApp.sections[existingIndex] = {\n ...sectionData,\n id: section.id,\n };\n }\n });\n });\n\n const handleDelete = (): void => {\n void saveDefinitionWithFeedback(\n (draftConfig) => {\n const webApp = draftConfig.apps.find((a) => a.id === app.id);\n if (webApp?.type !== 'web' || !webApp.adminApp) return;\n\n webApp.adminApp.sections = webApp.adminApp.sections?.filter(\n (s) => s.id !== section.id,\n );\n },\n {\n successMessage: `Successfully deleted section \"${section.name}\"!`,\n onSuccess: () => {\n navigate({\n to: '/admin-sections/$appKey',\n params: { appKey },\n }).catch(logAndFormatError);\n },\n },\n );\n };\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={section.id}\n >\n <div className=\"max-w-7xl space-y-4 border-b p-4\">\n <div className=\"flex items-center justify-between space-x-4\">\n <div>\n <h2>{section.name}</h2>\n <p className=\"text-base text-muted-foreground\">\n {section.type} section\n </p>\n </div>\n <Dialog>\n <DialogTrigger asChild>\n <Button variant=\"secondary\">Delete</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete {section.name}</DialogTitle>\n <DialogDescription className=\"sr-only\">\n Are you sure you want to delete{' '}\n <strong>{section.name}</strong>?\n </DialogDescription>\n </DialogHeader>\n <p>\n Are you sure you want to delete <strong>{section.name}</strong>?\n </p>\n <p className=\"text-style-muted\">\n This action will permanently remove the admin section from your\n application. This cannot be undone.\n </p>\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={isSavingDefinition}\n >\n Delete Section\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <form onSubmit={onSubmit} className=\"w-full max-w-7xl space-y-4 p-4\">\n <SectionList>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>General</SectionListSectionTitle>\n <SectionListSectionDescription>\n Basic configuration for your admin section.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"space-y-6\">\n <InputFieldController\n label=\"Name\"\n control={control}\n name=\"name\"\n autoComplete=\"off\"\n />\n <ComboboxFieldController\n label=\"Feature\"\n control={control}\n options={featureOptions}\n name=\"featureRef\"\n />\n <ReactIconComboboxController\n label=\"Icon\"\n control={control}\n name=\"icon\"\n description=\"Choose an icon to represent this section\"\n />\n </SectionListSectionContent>\n </SectionListSection>\n\n <AdminCrudSectionForm formProps={formProps} />\n </SectionList>\n <FormActionBar form={formProps} />\n </form>\n </div>\n </div>\n );\n}\n"],"file":"assets/edit._sectionKey-D4mTSUhO.js"}
|