@baseplate-dev/project-builder-web 0.2.2 → 0.2.3
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-DdiaSxL9.js → -constants-gwObfy2j.js} +2 -2
- package/dist/assets/{-constants-DdiaSxL9.js.map → -constants-gwObfy2j.js.map} +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-BEiksgOM.js → web-BXxolMLm.js} +2 -2
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-BEiksgOM.js.map → web-BXxolMLm.js.map} +1 -1
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CDWHycLw.js +5 -0
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CDWHycLw.js.map +1 -0
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DGE1buQ-.js +46 -0
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DGE1buQ-.js.map +1 -0
- package/dist/assets/{_virtual___federation_fn_import-BllbkH3T.js → _virtual___federation_fn_import-CE3p-l_2.js} +2 -2
- package/dist/assets/{_virtual___federation_fn_import-BllbkH3T.js.map → _virtual___federation_fn_import-CE3p-l_2.js.map} +1 -1
- package/dist/assets/{backend-CoTpyUcx.js → backend-BAEsy0fr.js} +2 -2
- package/dist/assets/{backend-CoTpyUcx.js.map → backend-BAEsy0fr.js.map} +1 -1
- package/dist/assets/{badge-with-type-label-BTWMyfcL.js → badge-with-type-label-BuG6yCtf.js} +2 -2
- package/dist/assets/{badge-with-type-label-BTWMyfcL.js.map → badge-with-type-label-BuG6yCtf.js.map} +1 -1
- package/dist/assets/{edit._id-BzfH4jc0.js → edit._id-DPcGRUbG.js} +2 -2
- package/dist/assets/{edit._id-BzfH4jc0.js.map → edit._id-DPcGRUbG.js.map} +1 -1
- package/dist/assets/{enum-info-form-EeSfFY6Y.js → enum-info-form-BjI1ArPU.js} +2 -2
- package/dist/assets/{enum-info-form-EeSfFY6Y.js.map → enum-info-form-BjI1ArPU.js.map} +1 -1
- package/dist/assets/{graphql-D5k81FHL.js → graphql-DksHNLLL.js} +2 -2
- package/dist/assets/{graphql-D5k81FHL.js.map → graphql-DksHNLLL.js.map} +1 -1
- package/dist/assets/{hierarchy-CDgBahPq.js → hierarchy-BwshirJR.js} +2 -2
- package/dist/assets/{hierarchy-CDgBahPq.js.map → hierarchy-BwshirJR.js.map} +1 -1
- package/dist/assets/{index-B5VAZnNv.js → index-B6qfP-Zp.js} +2 -2
- package/dist/assets/{index-B5VAZnNv.js.map → index-B6qfP-Zp.js.map} +1 -1
- package/dist/assets/index-B9Di1LKs.css +1 -0
- package/dist/assets/{index-HA6UU1kS.js → index-BNK4j9mt.js} +2 -2
- package/dist/assets/{index-HA6UU1kS.js.map → index-BNK4j9mt.js.map} +1 -1
- package/dist/assets/{index-MPyZaAGd.js → index-BS45dlQs.js} +2 -2
- package/dist/assets/{index-MPyZaAGd.js.map → index-BS45dlQs.js.map} +1 -1
- package/dist/assets/{index-DbPo0KMc.js → index-C6ezfkGk.js} +2 -2
- package/dist/assets/{index-DbPo0KMc.js.map → index-C6ezfkGk.js.map} +1 -1
- package/dist/assets/{index-CJO9KLcs.js → index-CVRvV2mv.js} +2 -2
- package/dist/assets/{index-CJO9KLcs.js.map → index-CVRvV2mv.js.map} +1 -1
- package/dist/assets/{index-y6w6FRv9.js → index-CwavzuOe.js} +2 -2
- package/dist/assets/index-CwavzuOe.js.map +1 -0
- package/dist/assets/{index-Lx-c3w3C.js → index-Dp90A2TJ.js} +2 -2
- package/dist/assets/{index-Lx-c3w3C.js.map → index-Dp90A2TJ.js.map} +1 -1
- package/dist/assets/{index-BYcSgAsc.js → index-E5Zy1ClF.js} +2 -2
- package/dist/assets/{index-BYcSgAsc.js.map → index-E5Zy1ClF.js.map} +1 -1
- package/dist/assets/{index-ghp0h4jr.js → index-La9rk06J.js} +2 -2
- package/dist/assets/{index-ghp0h4jr.js.map → index-La9rk06J.js.map} +1 -1
- package/dist/assets/{index-VsI1zxbc.js → index-gE__lQ6b.js} +5 -5
- package/dist/assets/index-gE__lQ6b.js.map +1 -0
- package/dist/assets/{index-CJK2iGtK.js → index-s17MV-9f.js} +2 -2
- package/dist/assets/{index-CJK2iGtK.js.map → index-s17MV-9f.js.map} +1 -1
- package/dist/assets/index.esm-CyH9wtdI.js +10 -0
- package/dist/assets/index.esm-CyH9wtdI.js.map +1 -0
- package/dist/assets/{model-info-form-DWYyoR9g.js → model-info-form-B9t3m8Pj.js} +2 -2
- package/dist/assets/{model-info-form-DWYyoR9g.js.map → model-info-form-B9t3m8Pj.js.map} +1 -1
- package/dist/assets/model-merger-DL4MVNID.js +2 -0
- package/dist/assets/model-merger-DL4MVNID.js.map +1 -0
- package/dist/assets/new-app-dialog-Cd7rJ7i5.js +2 -0
- package/dist/assets/new-app-dialog-Cd7rJ7i5.js.map +1 -0
- package/dist/assets/{new-enum-dialog-DQxXV11c.js → new-enum-dialog-Z3aWnnBr.js} +2 -2
- package/dist/assets/{new-enum-dialog-DQxXV11c.js.map → new-enum-dialog-Z3aWnnBr.js.map} +1 -1
- package/dist/assets/{new-model-dialog-Ta_YghmL.js → new-model-dialog-uEX7hTid.js} +2 -2
- package/dist/assets/{new-model-dialog-Ta_YghmL.js.map → new-model-dialog-uEX7hTid.js.map} +1 -1
- package/dist/assets/{route-D9aGR6_H.js → route-B2oYTZT4.js} +2 -2
- package/dist/assets/{route-D9aGR6_H.js.map → route-B2oYTZT4.js.map} +1 -1
- package/dist/assets/{route-C0DpSC86.js → route-B6DRGm3t.js} +2 -2
- package/dist/assets/{route-C0DpSC86.js.map → route-B6DRGm3t.js.map} +1 -1
- package/dist/assets/{route-DwYLJh1Z.js → route-BOOZxY6E.js} +2 -2
- package/dist/assets/{route-DwYLJh1Z.js.map → route-BOOZxY6E.js.map} +1 -1
- package/dist/assets/{route-Ofm_Xk4Q.js → route-BwqWBMDI.js} +2 -2
- package/dist/assets/{route-Ofm_Xk4Q.js.map → route-BwqWBMDI.js.map} +1 -1
- package/dist/assets/{route-DzDATEIF.js → route-BxjC9xAo.js} +2 -2
- package/dist/assets/{route-DzDATEIF.js.map → route-BxjC9xAo.js.map} +1 -1
- package/dist/assets/{route-CmgYcJT_.js → route-BzTxfPrV.js} +2 -2
- package/dist/assets/{route-CmgYcJT_.js.map → route-BzTxfPrV.js.map} +1 -1
- package/dist/assets/route-C8YLDv4I.js +2 -0
- package/dist/assets/{route-cP4l-WDl.js.map → route-C8YLDv4I.js.map} +1 -1
- package/dist/assets/{route-De01FR6I.js → route-DrufP1-c.js} +2 -2
- package/dist/assets/{route-De01FR6I.js.map → route-DrufP1-c.js.map} +1 -1
- package/dist/assets/{route-xrfcRWC7.js → route-_AecKyFO.js} +2 -2
- package/dist/assets/{route-xrfcRWC7.js.map → route-_AecKyFO.js.map} +1 -1
- package/dist/assets/{sections-Bl6CBMqu.js → sections-D-GS6uoS.js} +2 -2
- package/dist/assets/{sections-Bl6CBMqu.js.map → sections-D-GS6uoS.js.map} +1 -1
- package/dist/assets/{sections._sectionKey-lnWxksec.js → sections._sectionKey-Bj4VmUuM.js} +2 -2
- package/dist/assets/{sections._sectionKey-lnWxksec.js.map → sections._sectionKey-Bj4VmUuM.js.map} +1 -1
- package/dist/assets/{service-CH1p5s9d.js → service-C6FdRXxU.js} +2 -2
- package/dist/assets/{service-CH1p5s9d.js.map → service-C6FdRXxU.js.map} +1 -1
- package/dist/assets/template-extractor-D2LqkpO5.js +2 -0
- package/dist/assets/template-extractor-D2LqkpO5.js.map +1 -0
- package/dist/assets/{theme-builder-LEW3UAWc.js → theme-builder-_PghOvuC.js} +2 -2
- package/dist/assets/{theme-builder-LEW3UAWc.js.map → theme-builder-_PghOvuC.js.map} +1 -1
- package/dist/assets/{use-definition-schema-BB2JVpWG.js → use-definition-schema-B2FBXmC_.js} +2 -2
- package/dist/assets/{use-definition-schema-BB2JVpWG.js.map → use-definition-schema-B2FBXmC_.js.map} +1 -1
- package/dist/assets/{use-enum-form-CMIHUOLu.js → use-enum-form-DQza9C6Q.js} +2 -2
- package/dist/assets/{use-enum-form-CMIHUOLu.js.map → use-enum-form-DQza9C6Q.js.map} +1 -1
- package/dist/assets/{use-model-form-hncL1MN2.js → use-model-form-D4qoaVd7.js} +2 -2
- package/dist/assets/{use-model-form-hncL1MN2.js.map → use-model-form-D4qoaVd7.js.map} +1 -1
- package/dist/assets/{utils-BMK0C56t.js → utils-CH9UxfXa.js} +2 -2
- package/dist/assets/{utils-BMK0C56t.js.map → utils-CH9UxfXa.js.map} +1 -1
- package/dist/assets/{web-BRltYNcY.js → web-C6Idxok-.js} +2 -2
- package/dist/assets/{web-BRltYNcY.js.map → web-C6Idxok-.js.map} +1 -1
- package/dist/index.html +5 -5
- package/package.json +7 -7
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-ByoEPRxY.js +0 -5
- package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-ByoEPRxY.js.map +0 -1
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-2ByEN20H.js +0 -46
- package/dist/assets/__federation_shared_@baseplate-dev/ui-components-2ByEN20H.js.map +0 -1
- package/dist/assets/index-BDJ79UQH.css +0 -1
- package/dist/assets/index-VsI1zxbc.js.map +0 -1
- package/dist/assets/index-y6w6FRv9.js.map +0 -1
- package/dist/assets/index.esm-CGbP6mNa.js +0 -10
- package/dist/assets/index.esm-CGbP6mNa.js.map +0 -1
- package/dist/assets/model-merger-s86W4xg2.js +0 -2
- package/dist/assets/model-merger-s86W4xg2.js.map +0 -1
- package/dist/assets/new-app-dialog-CGp0nciM.js +0 -2
- package/dist/assets/new-app-dialog-CGp0nciM.js.map +0 -1
- package/dist/assets/route-cP4l-WDl.js +0 -2
- package/dist/assets/template-extractor-_5pq8PSE.js +0 -2
- package/dist/assets/template-extractor-_5pq8PSE.js.map +0 -1
package/dist/assets/{sections._sectionKey-lnWxksec.js.map → sections._sectionKey-Bj4VmUuM.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections._sectionKey-lnWxksec.js","sources":["../../src/routes/apps/edit.$key/admin/-components/inputs/embedded-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/embedded-local-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/enum-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/foreign-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/text-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/index.ts","../../src/routes/apps/edit.$key/admin/-components/crud-form-fields-form.tsx","../../src/routes/apps/edit.$key/admin/-components/crud-table-columns-form.tsx","../../src/routes/apps/edit.$key/admin/-components/admin-crud-embedded-form.tsx","../../src/routes/apps/edit.$key/admin/-components/admin-crud-section-form.tsx","../../src/routes/apps/edit.$key/admin/sections.$sectionKey.tsx?tsr-split=component"],"sourcesContent":["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 pluginId: 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 pluginId: 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 pluginId: 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 pluginId: 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 pluginId: 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 { AdminCrudSectionConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport { ModelUtils } from '@baseplate-dev/project-builder-lib';\nimport {\n adminCrudInputWebSpec,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useFieldArray, useWatch } from 'react-hook-form';\n\nimport { CollapsibleRow } from '#src/components/index.js';\n\nimport { BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS } from './inputs/index.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 FieldForm({\n idx,\n formProps,\n embeddedFormOptions,\n}: {\n idx: number;\n formProps: UseFormReturn<AdminCrudFormConfigInput>;\n embeddedFormOptions: { label: string; value: string }[];\n}): React.JSX.Element {\n const { control } = formProps;\n const modelRef = useWatch({ control, name: 'modelRef' });\n const { definition, pluginContainer } = useProjectDefinition();\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 type = useWatch({\n control,\n name: `form.fields.${idx}.type`,\n });\n const inputWebConfig = inputWeb.getInputWebConfig(\n type,\n BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS,\n );\n const WebForm = inputWebConfig.Form;\n\n return (\n <div className=\"space-y-4\">\n <SelectFieldController\n label=\"Type\"\n control={control}\n options={fieldTypeOptions}\n name={`form.fields.${idx}.type`}\n />\n <InputFieldController\n label=\"Label\"\n control={control}\n name={`form.fields.${idx}.label`}\n />\n {WebForm && model && (\n <WebForm\n formProps={formProps}\n name={`form.fields.${idx}`}\n model={model}\n embeddedFormOptions={embeddedFormOptions}\n pluginId={inputWebConfig.pluginId}\n />\n )}\n </div>\n );\n}\n\nfunction CrudFormFieldsForm({\n className,\n formProps,\n embeddedFormOptions,\n}: Props): React.JSX.Element {\n const { control } = formProps;\n const { fields, append, remove } = useFieldArray({\n control,\n name: 'form.fields',\n });\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fields.map((field, idx) => (\n <CollapsibleRow\n key={field.id}\n collapsedContents={\n <div>\n {field.label} ({field.type})\n </div>\n }\n onRemove={() => {\n remove(idx);\n }}\n defaultOpen={!field.label}\n >\n <FieldForm\n key={field.id}\n idx={idx}\n formProps={formProps}\n embeddedFormOptions={embeddedFormOptions}\n />\n </CollapsibleRow>\n ))}\n <Button\n onClick={() => {\n append({ type: 'text', label: '' });\n }}\n >\n Add Field\n </Button>\n </div>\n );\n}\n\nexport default CrudFormFieldsForm;\n","import type { AdminCrudSectionConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n adminCrudDisplayTypes,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useFieldArray, useWatch } from 'react-hook-form';\n\nimport { CollapsibleRow } from '#src/components/index.js';\n\nexport type AdminCrudTableConfig = Pick<\n AdminCrudSectionConfig,\n 'table' | 'modelRef'\n>;\n\ninterface Props {\n className?: string;\n control: Control<AdminCrudTableConfig>;\n}\n\nfunction ColumnForm({\n idx,\n control,\n fieldOptions,\n localRelationOptions,\n}: {\n idx: number;\n control: Control<AdminCrudTableConfig>;\n fieldOptions: { label: string; value: string }[];\n localRelationOptions: { label: string; value: string }[];\n}): React.JSX.Element {\n const displayTypeOptions = adminCrudDisplayTypes.map((t) => ({\n label: t,\n value: t,\n }));\n const type = useWatch({ control, name: `table.columns.${idx}.display.type` });\n return (\n <div className=\"space-y-4\">\n <SelectFieldController\n label=\"Type\"\n control={control}\n options={displayTypeOptions}\n name={`table.columns.${idx}.display.type`}\n />\n <InputFieldController\n label=\"Label\"\n control={control}\n name={`table.columns.${idx}.label`}\n />\n\n {type === 'text' && (\n <SelectFieldController\n label=\"Field\"\n control={control}\n name={`table.columns.${idx}.display.modelFieldRef`}\n options={fieldOptions}\n />\n )}\n {type === 'foreign' && (\n <>\n <SelectFieldController\n label=\"Local Relation Name\"\n control={control}\n name={`table.columns.${idx}.display.localRelationRef`}\n options={localRelationOptions}\n />\n <InputFieldController\n label=\"Label Expression (e.g. name)\"\n control={control}\n name={`table.columns.${idx}.display.labelExpression`}\n />\n <InputFieldController\n label=\"Value Expression (e.g. id)\"\n control={control}\n name={`table.columns.${idx}.display.valueExpression`}\n />\n </>\n )}\n </div>\n );\n}\n\nfunction CrudTableColumnsForm({\n className,\n control,\n}: Props): React.JSX.Element {\n const modelRef = useWatch({ control, name: 'modelRef' });\n const { definition, definitionContainer } = useProjectDefinition();\n const model = modelRef\n ? ModelUtils.byIdOrThrow(definition, modelRef)\n : undefined;\n const { fields, append, remove } = useFieldArray({\n control,\n name: 'table.columns',\n });\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 const fieldOptions =\n model?.model.fields.map((field) => ({\n label: field.name,\n value: field.id,\n })) ?? [];\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fields.map((field, idx) => (\n <CollapsibleRow\n key={field.id}\n collapsedContents={\n <div>\n {field.label} ({field.display.type})\n </div>\n }\n onRemove={() => {\n remove(idx);\n }}\n defaultOpen={!field.label}\n >\n <ColumnForm\n key={field.id}\n idx={idx}\n control={control}\n fieldOptions={fieldOptions}\n localRelationOptions={localRelationOptions}\n />\n </CollapsibleRow>\n ))}\n <Button\n onClick={() => {\n append({ display: { type: 'text', modelFieldRef: '' }, label: '' });\n }}\n >\n Add Column\n </Button>\n </div>\n );\n}\n\nexport default CrudTableColumnsForm;\n","import type { AdminCrudEmbeddedFormConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, 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 { 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';\nimport type { AdminCrudTableConfig } from './crud-table-columns-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\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 control={control as unknown as Control<AdminCrudTableConfig>}\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 { AdminCrudSectionConfigInput } from '@baseplate-dev/project-builder-lib';\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 SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\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 { AdminCrudTableConfig } from './crud-table-columns-form.js';\n\nimport AdminCrudEmbeddedForm, {\n AdminCrudEmbeddedTable,\n} from './admin-crud-embedded-form.js';\nimport CrudFormFieldsForm from './crud-form-fields-form.js';\nimport CrudTableColumnsForm from './crud-table-columns-form.js';\n\ninterface Props {\n className?: string;\n formProps: UseFormReturn<AdminCrudSectionConfigInput>;\n}\n\nfunction AdminCrudSectionForm({\n className,\n formProps,\n}: Props): React.JSX.Element {\n const { control } = formProps;\n const { definition } = useProjectDefinition();\n\n const modelOptions = definition.models.map((model) => ({\n label: model.name,\n value: model.id,\n }));\n\n // TODO: struggles with https://github.com/react-hook-form/react-hook-form/discussions/7354\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 <div className={clsx('space-y-4', className)}>\n <SelectFieldController\n label=\"Model\"\n control={control}\n options={modelOptions}\n name=\"modelRef\"\n />\n <CheckboxFieldController\n label=\"Disable Create?\"\n control={control}\n name=\"disableCreate\"\n />\n <h2>Table</h2>\n <CrudTableColumnsForm\n control={control as unknown as Control<AdminCrudTableConfig>}\n />\n <h2>Form</h2>\n <CrudFormFieldsForm\n formProps={\n formProps as unknown as UseFormReturn<AdminCrudFormConfigInput>\n }\n embeddedFormOptions={embeddedFormOptions}\n />\n <h2>Embedded Forms</h2>\n <EmbeddedListInput.LabelledController\n control={control}\n name=\"embeddedForms\"\n renderForm={(formProps) => (\n <AdminCrudEmbeddedForm\n {...formProps}\n embeddedFormOptions={embeddedFormOptions}\n />\n )}\n renderTable={(tableProps) => <AdminCrudEmbeddedTable {...tableProps} />}\n defaultValue={{ type: 'object' }}\n />\n </div>\n );\n}\n\nexport default AdminCrudSectionForm;\n","import type React from 'react';\n\nimport {\n adminSectionEntityType,\n createAdminSectionSchema,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockUnsavedChangesNavigate,\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n ComboboxFieldController,\n InputFieldController,\n SelectFieldController,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { createFileRoute, notFound, useNavigate } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { useEffect } from 'react';\n\nimport AdminCrudSectionForm from './-components/admin-crud-section-form.js';\n\nconst SECTION_OPTIONS = [{ label: 'Crud', value: 'crud' }];\n\nexport const Route = createFileRoute(\n '/apps/edit/$key/admin/sections/$sectionKey',\n)({\n component: AdminAppEditSectionPage,\n loader: ({ context: { adminDefinition }, params: { sectionKey } }) => {\n const sectionId =\n sectionKey === 'new'\n ? undefined\n : adminSectionEntityType.idFromKey(sectionKey);\n const existingSection = sectionId\n ? adminDefinition.sections?.find((section) => section.id === sectionId)\n : undefined;\n if (sectionId && !existingSection) throw notFound();\n return { adminDefinition, sectionId, existingSection };\n },\n});\n\nfunction AdminAppEditSectionPage(): React.JSX.Element {\n const { requestConfirm } = useConfirmDialog();\n const { key } = Route.useParams();\n const {\n saveDefinitionWithFeedback,\n saveDefinitionWithFeedbackSync,\n isSavingDefinition,\n definition,\n } = useProjectDefinition();\n const navigate = useNavigate();\n const { adminDefinition, sectionId, existingSection } = Route.useLoaderData();\n\n const adminSectionSchema = useDefinitionSchema(createAdminSectionSchema);\n\n const formProps = useResettableForm({\n values: existingSection,\n defaultValues: { type: 'crud' },\n resolver: zodResolver(adminSectionSchema),\n });\n\n const { control, handleSubmit, watch, reset } = formProps;\n\n useEffect(() => {\n reset(existingSection ?? { type: 'crud' });\n }, [reset, existingSection]);\n\n const onSubmit = handleSubmit((data) => {\n const id = data.id || adminSectionEntityType.generateNewId();\n return saveDefinitionWithFeedback(\n (config) => {\n const adminApp = config.apps.find(\n (app) => app.id === adminDefinition.id,\n );\n if (adminApp?.type !== 'admin') {\n throw new Error('Cannot add a section to a non-admin app');\n }\n\n adminApp.sections = sortBy(\n [\n ...(adminApp.sections ?? []).filter(\n (section) => !sectionId || section.id !== sectionId,\n ),\n { ...data, id },\n ],\n [(section) => section.name],\n );\n },\n {\n onSuccess: () => {\n if (!sectionId) {\n navigate({\n to: `/apps/edit/$key/admin/sections/$sectionKey`,\n params: { key, sectionKey: adminSectionEntityType.keyFromId(id) },\n });\n }\n },\n },\n );\n });\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n const type = watch('type');\n\n function handleDelete(): void {\n requestConfirm({\n title: 'Delete Section',\n content: `Are you sure you want to delete ${\n existingSection?.name ?? 'this section'\n }?`,\n onConfirm: () => {\n saveDefinitionWithFeedbackSync(\n (config) => {\n const adminApp = config.apps.find(\n (app) => app.id === adminDefinition.id,\n );\n if (adminApp?.type !== 'admin') {\n throw new Error('Cannot add a section to a non-admin app');\n }\n\n adminApp.sections = (adminApp.sections ?? []).filter(\n (section) => !sectionId || section.id !== sectionId,\n );\n },\n {\n successMessage: 'Successfully deleted section!',\n onSuccess: () => {\n navigate({ to: '..' });\n },\n },\n );\n },\n });\n }\n\n const featureOptions = definition.features.map((f) => ({\n label: f.name,\n value: f.id,\n }));\n\n return (\n <div className=\"p-4\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n {sectionId && (\n <Button\n variant=\"link\"\n size=\"none\"\n onClick={() => {\n handleDelete();\n }}\n >\n Delete Section\n </Button>\n )}\n <InputFieldController label=\"Name\" control={control} name=\"name\" />\n <ComboboxFieldController\n label=\"Feature\"\n control={control}\n options={featureOptions}\n name=\"featureRef\"\n />\n <InputFieldController label=\"Icon\" control={control} name=\"icon\" />\n <SelectFieldController\n label=\"Type\"\n control={control}\n name=\"type\"\n options={SECTION_OPTIONS}\n />\n {(() => {\n switch (type as string) {\n case 'crud': {\n return <AdminCrudSectionForm formProps={formProps} />;\n }\n default: {\n return <div>Unsupported type {type}</div>;\n }\n }\n })()}\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Save\n </Button>\n </form>\n </div>\n );\n}\n"],"names":["ModelUtils","importShared","createAdminCrudInputWebConfig","useProjectDefinition","SelectFieldController","AdminCrudEmbeddedInputForm","formProps","name","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","adminCrudInputWebSpec","Button","FieldForm","idx","control","modelRef","useWatch","pluginContainer","inputWeb","fieldTypeOptions","config","type","inputWebConfig","WebForm","CrudFormFieldsForm","className","fields","append","remove","useFieldArray","clsx","CollapsibleRow","adminCrudDisplayTypes","ColumnForm","displayTypeOptions","t","CrudTableColumnsForm","createAdminCrudEmbeddedFormSchema","useDefinitionSchema","CheckboxFieldController","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","toast","useId","AdminCrudEmbeddedTable","items","edit","item","TYPE_OPTIONS","AdminCrudEmbeddedForm","initialData","onSubmit","adminCrudEmbeddedFormSchema","useForm","zodResolver","handleSubmit","watch","modelOptions","formId","e","error","logAndFormatError","AdminCrudSectionForm","form","EmbeddedListInput","tableProps","adminSectionEntityType","createAdminSectionSchema","useBlockUnsavedChangesNavigate","useResettableForm","ComboboxFieldController","useConfirmDialog","useEffect","SECTION_OPTIONS","label","value","SplitComponent","requestConfirm","key","Route","useParams","saveDefinitionWithFeedback","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","useNavigate","adminDefinition","sectionId","existingSection","useLoaderData","adminSectionSchema","values","defaultValues","resolver","reset","data","id","generateNewId","adminApp","apps","find","app","Error","sections","sortBy","filter","section","onSuccess","to","params","sectionKey","keyFromId","handleDelete","title","content","onConfirm","successMessage","featureOptions","features","map"],"mappings":"gSAKA,KAAA,CAAA,WAAAA,EAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,8BAAAC,GAAA,qBAAAC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAA,sBAAAG,CAAA,EAAA,MAAAH,EAAA,8BAAA,EAEA,SAASI,GAA2B,CAClC,UAAAC,EACA,KAAAC,EACA,MAAAC,EACA,oBAAAC,CACF,EAAkD,CAC1C,KAAA,CAAE,WAAAC,CAAW,EAAIP,GAAqB,EAEtCQ,EAAyBX,GAAW,oBACxCU,EACAF,EAAM,EAAA,EACN,IAAKI,IAAO,CACZ,MAAO,GAAGA,EAAE,SAAS,mBAAmB,KAAKA,EAAE,MAAM,IAAI,IACzD,MAAOA,EAAE,SAAS,SAAA,EAClB,EACIC,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,oBACf,QAASF,CAAA,CACX,EACAM,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,mBACf,QAASJ,CAAA,CAAA,CACX,EACF,CAEJ,CAEO,MAAMS,GACXhB,GAA4D,CAC1D,KAAM,WACN,SAAU,OACV,MAAO,WACP,YAAa,KAAO,CAClB,MAAO,GACP,KAAM,WACN,iBAAkB,GAClB,gBAAiB,EAAA,GAEnB,KAAMG,EACR,CAAC,ECzDH,CAAA,8BAAAH,GAAA,qBAAAC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAA,sBAAAG,CAAA,EAAA,MAAAH,EAAA,8BAAA,EAEA,SAASkB,GAAgC,CACvC,UAAAb,EACA,KAAAC,EACA,MAAAC,EACA,oBAAAC,CACF,EAAkD,CAC1C,KAAA,CAAE,oBAAAW,CAAoB,EAAIjB,GAAqB,EAC/CkB,EACJb,EAAM,MAAM,WAAW,IAAKc,IAAc,CACxC,MAAO,GAAGA,EAAS,IAAI,KAAKF,EAAoB,WAAWE,EAAS,QAAQ,CAAC,IAC7E,MAAOA,EAAS,EAClB,EAAE,GAAK,CAAC,EACJT,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,oBACf,QAASQ,CAAA,CACX,EACAJ,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,mBACf,QAASJ,CAAA,CAAA,CACX,EACF,CAEJ,CAEO,MAAMc,GACXrB,GAAiE,CAC/D,KAAM,gBACN,SAAU,OACV,MAAO,iBACP,YAAa,KAAO,CAClB,MAAO,GACP,KAAM,gBACN,gBAAiB,GACjB,iBAAkB,EAAA,GAEpB,KAAMiB,EACR,CAAC,ECrDH,CAAA,8BAAAjB,EAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,sBAAAG,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAEA,SAASuB,GAAuB,CAC9B,UAAAlB,EACA,KAAAC,EACA,MAAAC,CACF,EAAkD,CAChD,MAAMiB,EAAmBjB,EAAM,MAAM,OAClC,OAAQkB,GAAMA,EAAE,OAAS,MAAM,EAC/B,IAAKC,IAAW,CACf,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EACEd,EAASN,EACTO,EAAeR,EAAU,QAK7B,OAAAW,EAAA,IAACb,GAAA,CACC,MAAM,aACN,QAASU,EACT,KAAM,GAAGD,CAAM,iBACf,QAASY,CAAA,CACX,CAEJ,CAEO,MAAMG,GACX1B,GAAwD,CACtD,KAAM,OACN,SAAU,OACV,MAAO,OACP,YAAa,KAAO,CAAE,MAAO,GAAI,KAAM,OAAQ,cAAe,KAC9D,KAAMsB,EACR,CAAC,ECpCH,CAAA,8BAAAtB,GAAA,qBAAAC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAA,qBAAA4B,EAAA,sBAAAzB,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAKA,SAAS6B,GAA0B,CACjC,UAAAxB,EACA,KAAAC,EACA,MAAAC,CACF,EAAkD,CAC1C,KAAA,CAAE,oBAAAY,CAAoB,EAAIjB,GAAqB,EAC/CkB,EACJb,EAAM,MAAM,WAAW,IAAKc,IAAc,CACxC,MAAO,GAAGA,EAAS,IAAI,KAAKF,EAAoB,WAAWE,EAAS,QAAQ,CAAC,IAC7E,MAAOA,EAAS,EAClB,EAAE,GAAK,CAAC,EACJT,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,GAAA,CACC,MAAM,sBACN,QAASU,EACT,KAAM,GAAGD,CAAM,oBACf,QAASQ,CAAA,CACX,EACAJ,EAAA,IAACY,EAAA,CACC,MAAM,+BACN,QAASf,EACT,KAAM,GAAGD,CAAM,kBAAA,CACjB,EACAI,EAAA,IAACY,EAAA,CACC,MAAM,6BACN,QAASf,EACT,KAAM,GAAGD,CAAM,kBAAA,CACjB,EACAI,EAAA,IAACY,EAAA,CACC,MAAM,2BACN,QAASf,EACT,KAAM,GAAGD,CAAM,eAAA,CACjB,EACAI,EAAA,IAACY,EAAA,CACC,MAAM,qDACN,QAASf,EACT,KAAM,GAAGD,CAAM,YAAA,CAAA,CACjB,EACF,CAEJ,CAEO,MAAMkB,GACX7B,GAA2D,CACzD,KAAM,UACN,SAAU,OACV,MAAO,UACP,YAAa,KAAO,CAClB,MAAO,GACP,KAAM,UACN,iBAAkB,GAClB,gBAAiB,GACjB,gBAAiB,GACjB,aAAc,GACd,UAAW,EAAA,GAEb,KAAM4B,EACR,CAAC,ECxEH,CAAA,8BAAA5B,EAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,qBAAA4B,GAAA,sBAAAzB,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAKA,SAAS+B,GAAuB,CAC9B,UAAA1B,EACA,KAAAC,EACA,MAAAC,CACF,EAAkD,CAChD,MAAMyB,EAAezB,EAAM,MAAM,OAAO,IAAKmB,IAAW,CACtD,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EACId,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,GAAA,CACC,MAAM,QACN,QAASU,EACT,KAAM,GAAGD,CAAM,iBACf,QAASoB,CAAA,CACX,EACAhB,EAAA,IAACY,GAAA,CACC,MAAM,sDACN,QAASf,EACT,KAAM,GAAGD,CAAM,aAAA,CAAA,CACjB,EACF,CAEJ,CAEO,MAAMqB,GACXhC,GAAwD,CACtD,KAAM,OACN,SAAU,OACV,MAAO,OACP,YAAa,KAAO,CAAE,MAAO,GAAI,KAAM,OAAQ,cAAe,KAC9D,KAAM8B,EACR,CAAC,EC3CUG,EAAwC,CACnDjB,GACAK,GACAK,GACAG,GACAG,EACF,ECRA,CAAA,WAAAlC,EAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,sBAAAmC,GAAA,qBAAAjC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAAoC,OAAAA,GAAAR,qBAAAA,GAAAzB,sBAAAA,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAuBA,SAASqC,GAAU,CACjB,IAAAC,EACA,UAAAjC,EACA,oBAAAG,CACF,EAIsB,CACd,KAAA,CAAE,QAAA+B,GAAYlC,EACdmC,EAAWC,EAAS,CAAE,QAAAF,EAAS,KAAM,WAAY,EACjD,CAAE,WAAA9B,EAAY,gBAAAiC,CAAgB,EAAIxC,GAAqB,EACvDK,EAAQiC,EACVzC,GAAW,YAAYU,EAAY+B,CAAQ,EAC3C,OAEEG,EAAWD,EAAgB,cAAcP,EAAqB,EAE9DS,EAAmBD,EACtB,mBAAmBT,CAAqC,EACxD,IAAKW,IAAY,CAChB,MAAOA,EAAO,MACd,MAAOA,EAAO,IAAA,EACd,EAEEC,EAAOL,EAAS,CACpB,QAAAF,EACA,KAAM,eAAeD,CAAG,OAAA,CACzB,EACKS,EAAiBJ,EAAS,kBAC9BG,EACAZ,CACF,EACMc,EAAUD,EAAe,KAG7B,OAAAjC,EAAA,KAAC,MAAI,CAAA,UAAU,YACb,SAAA,CAAAE,EAAA,IAACb,GAAA,CACC,MAAM,OACN,QAAAoC,EACA,QAASK,EACT,KAAM,eAAeN,CAAG,OAAA,CAC1B,EACAtB,EAAA,IAACY,GAAA,CACC,MAAM,QACN,QAAAW,EACA,KAAM,eAAeD,CAAG,QAAA,CAC1B,EACCU,GAAWzC,GACVS,EAAA,IAACgC,EAAA,CACC,UAAA3C,EACA,KAAM,eAAeiC,CAAG,GACxB,MAAA/B,EACA,oBAAAC,EACA,SAAUuC,EAAe,QAAA,CAAA,CAC3B,EAEJ,CAEJ,CAEA,SAASE,EAAmB,CAC1B,UAAAC,EACA,UAAA7C,EACA,oBAAAG,CACF,EAA6B,CACrB,KAAA,CAAE,QAAA+B,GAAYlC,EACd,CAAE,OAAA8C,EAAQ,OAAAC,EAAQ,OAAAC,CAAA,EAAWC,EAAc,CAC/C,QAAAf,EACA,KAAM,aAAA,CACP,EAED,cACG,MAAI,CAAA,UAAWgB,EAAK,YAAaL,CAAS,EACxC,SAAA,CAAOC,EAAA,IAAI,CAACzB,EAAOY,IAClBtB,EAAA,IAACwC,EAAA,CAEC,yBACG,MACE,CAAA,SAAA,CAAM9B,EAAA,MAAM,KAAGA,EAAM,KAAK,GAAA,EAC7B,EAEF,SAAU,IAAM,CACd2B,EAAOf,CAAG,CACZ,EACA,YAAa,CAACZ,EAAM,MAEpB,SAAAV,EAAA,IAACqB,GAAA,CAEC,IAAAC,EACA,UAAAjC,EACA,oBAAAG,CAAA,EAHKkB,EAAM,EAAA,CAIb,EAhBKA,EAAM,EAAA,CAkBd,EACDV,EAAA,IAACoB,GAAA,CACC,QAAS,IAAM,CACbgB,EAAO,CAAE,KAAM,OAAQ,MAAO,GAAI,CACpC,EACD,SAAA,WAAA,CAAA,CAED,EACF,CAEJ,CCpIA,KAAA,CAAA,sBAAAK,GAAA,WAAA1D,EAAA,EAAA,MAAAC,EAAA,oCAAA,EAIA,CAAA,qBAAAE,EAAA,EAAA,MAAAF,EAAA,wCAAA,EACA,CAAAoC,OAAAA,GAAAR,qBAAAA,EAAAzB,sBAAAA,CAAA,EAAA,MAAAH,EAAA,8BAAA,EAoBA,SAAS0D,GAAW,CAClB,IAAApB,EACA,QAAAC,EACA,aAAAP,EACA,qBAAAZ,CACF,EAKsB,CACpB,MAAMuC,EAAqBF,GAAsB,IAAKG,IAAO,CAC3D,MAAOA,EACP,MAAOA,CAAA,EACP,EACId,EAAOL,EAAS,CAAE,QAAAF,EAAS,KAAM,iBAAiBD,CAAG,gBAAiB,EAE1E,OAAAxB,EAAA,KAAC,MAAI,CAAA,UAAU,YACb,SAAA,CAAAE,EAAA,IAACb,EAAA,CACC,MAAM,OACN,QAAAoC,EACA,QAASoB,EACT,KAAM,iBAAiBrB,CAAG,eAAA,CAC5B,EACAtB,EAAA,IAACY,EAAA,CACC,MAAM,QACN,QAAAW,EACA,KAAM,iBAAiBD,CAAG,QAAA,CAC5B,EAECQ,IAAS,QACR9B,EAAA,IAACb,EAAA,CACC,MAAM,QACN,QAAAoC,EACA,KAAM,iBAAiBD,CAAG,yBAC1B,QAASN,CAAA,CACX,EAEDc,IAAS,WAENhC,EAAAA,KAAAC,EAAA,SAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,EAAA,CACC,MAAM,sBACN,QAAAoC,EACA,KAAM,iBAAiBD,CAAG,4BAC1B,QAASlB,CAAA,CACX,EACAJ,EAAA,IAACY,EAAA,CACC,MAAM,+BACN,QAAAW,EACA,KAAM,iBAAiBD,CAAG,0BAAA,CAC5B,EACAtB,EAAA,IAACY,EAAA,CACC,MAAM,6BACN,QAAAW,EACA,KAAM,iBAAiBD,CAAG,0BAAA,CAAA,CAC5B,CACF,CAAA,CAAA,EAEJ,CAEJ,CAEA,SAASuB,EAAqB,CAC5B,UAAAX,EACA,QAAAX,CACF,EAA6B,CAC3B,MAAMC,EAAWC,EAAS,CAAE,QAAAF,EAAS,KAAM,WAAY,EACjD,CAAE,WAAA9B,EAAY,oBAAAU,CAAoB,EAAIjB,GAAqB,EAC3DK,EAAQiC,EACVzC,GAAW,YAAYU,EAAY+B,CAAQ,EAC3C,OACE,CAAE,OAAAW,EAAQ,OAAAC,EAAQ,OAAAC,CAAA,EAAWC,EAAc,CAC/C,QAAAf,EACA,KAAM,eAAA,CACP,EAEKnB,EACJb,GAAO,MAAM,WAAW,IAAKc,IAAc,CACzC,MAAO,GAAGA,EAAS,IAAI,KAAKF,EAAoB,WAAWE,EAAS,QAAQ,CAAC,IAC7E,MAAOA,EAAS,EAClB,EAAE,GAAK,CAAC,EAEJW,EACJzB,GAAO,MAAM,OAAO,IAAKmB,IAAW,CAClC,MAAOA,EAAM,KACb,MAAOA,EAAM,EACf,EAAE,GAAK,CAAC,EAEV,cACG,MAAI,CAAA,UAAW6B,EAAK,YAAaL,CAAS,EACxC,SAAA,CAAOC,EAAA,IAAI,CAACzB,EAAOY,IAClBtB,EAAA,IAACwC,EAAA,CAEC,yBACG,MACE,CAAA,SAAA,CAAM9B,EAAA,MAAM,KAAGA,EAAM,QAAQ,KAAK,GAAA,EACrC,EAEF,SAAU,IAAM,CACd2B,EAAOf,CAAG,CACZ,EACA,YAAa,CAACZ,EAAM,MAEpB,SAAAV,EAAA,IAAC0C,GAAA,CAEC,IAAApB,EACA,QAAAC,EACA,aAAAP,EACA,qBAAAZ,CAAA,EAJKM,EAAM,EAAA,CAKb,EAjBKA,EAAM,EAAA,CAmBd,EACDV,EAAA,IAACoB,GAAA,CACC,QAAS,IAAM,CACNgB,EAAA,CAAE,QAAS,CAAE,KAAM,OAAQ,cAAe,EAAG,EAAG,MAAO,GAAI,CACpE,EACD,SAAA,YAAA,CAAA,CAED,EACF,CAEJ,CClJA,KAAA,CAAA,kCAAAU,EAAA,EAAA,MAAA9D,EAAA,oCAAA,EACA,CAAA,oBAAA+D,GAAA,qBAAA7D,CAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAAoC,OAAAA,EAAA4B,wBAAAA,GAAApC,qBAAAA,GAAAzB,sBAAAA,EAAA,MAAA8D,GAAA,UAAAC,GAAA,UAAAC,EAAA,UAAAC,EAAA,YAAAC,GAAA,SAAAC,EAAA,MAAAC,EAAA,EAAA,MAAAvE,EAAA,8BAAA,EAcA,CAAA,MAAAwE,EAAA,EAAA,MAAAxE,EAAA,OAAA,EAgBO,SAASyE,GAAuB,CACrC,MAAAC,EACA,KAAAC,EACA,OAAAtB,CACF,EAAgF,CACxE,KAAA,CAAE,oBAAAlC,CAAoB,EAAIjB,EAAqB,EAEnD,OAAAY,EAAA,KAACmD,GAAM,CAAA,UAAU,YACf,SAAA,CAACjD,EAAA,IAAAqD,GAAA,CACC,gBAACC,EACC,CAAA,SAAA,CAAAtD,EAAAA,IAACoD,GAAU,SAAS,WAAA,CAAA,EACpBpD,EAAAA,IAACoD,GAAU,SAAU,YAAA,CAAA,EACrBpD,EAAAA,IAACoD,GAAU,SAAI,MAAA,CAAA,EACfpD,EAAAA,IAACoD,GAAU,SAAO,SAAA,CAAA,CAAA,CAAA,CACpB,CACF,CAAA,EACApD,EAAAA,IAACkD,IACE,SAAMQ,EAAA,IAAI,CAACE,EAAMtC,WACfgC,EACC,CAAA,SAAA,CAACtD,EAAAA,IAAAmD,EAAA,CAAW,WAAK,IAAK,CAAA,QACrBA,EACE,CAAA,SAAAhD,EAAoB,WAAWyD,EAAK,QAAQ,EAC/C,EACA5D,EAAAA,IAACmD,EAAW,CAAA,SAAAS,EAAK,IAAK,CAAA,EACtB9D,EAAAA,KAACqD,EAAU,CAAA,UAAU,YACnB,SAAA,CAAAnD,EAAA,IAACoB,EAAA,CACC,QAAQ,OACR,KAAK,OACL,QAAS,IAAM,CACbuC,EAAKrC,CAAG,CACV,EACD,SAAA,MAAA,CAED,EACAtB,EAAA,IAACoB,EAAA,CACC,QAAQ,kBACR,KAAK,OACL,QAAS,IAAM,CACbiB,EAAOf,CAAG,CACZ,EACD,SAAA,QAAA,CAAA,CAED,CACF,CAAA,CAAA,GAzBasC,EAAK,EA0BpB,CACD,CACH,CAAA,CAAA,EACF,CAEJ,CAEA,MAAMC,GAAe,CACnB,CAAE,MAAO,SAAU,MAAO,QAAS,EACnC,CAAE,MAAO,OAAQ,MAAO,MAAO,CACjC,EAOA,SAASC,GAAsB,CAC7B,YAAAC,EACA,SAAAC,EACA,oBAAAxE,CACF,EAA6B,CACrB,KAAA,CAAE,WAAAC,CAAW,EAAIP,EAAqB,EACtC+E,EAA8BlB,GAClCD,EACF,EACMzD,EAAY6E,EAA0C,CAC1D,SAAUC,EAAYF,CAA2B,EACjD,cAAeF,CAAA,CAChB,EACK,CAAE,aAAAK,EAAc,QAAA7C,EAAS,MAAA8C,CAAU,EAAAhF,EAEnCiF,EAAe7E,EAAW,OAAO,IAAKF,IAAW,CACrD,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EAEIuC,EAAOuC,EAAM,MAAM,EAEnBE,EAASf,GAAM,EAGnB,OAAA1D,EAAA,KAAC,OAAA,CACC,SAAW0E,GAAM,CACfA,EAAE,gBAAgB,EAClBJ,EAAaJ,CAAQ,EAAEQ,CAAC,EAAE,MAAOC,GAAmB,CAC5ClB,GAAA,MAAMmB,EAAkBD,CAAK,CAAC,CAAA,CACrC,CACH,EACA,GAAIF,EACJ,UAAU,YAEV,SAAA,CAAAvE,EAAA,IAACY,GAAqB,CAAA,MAAM,OAAO,QAAAW,EAAkB,KAAK,OAAO,EACjEvB,EAAA,IAACb,EAAA,CACC,MAAM,OACN,QAAAoC,EACA,KAAK,OACL,QAASsC,EAAA,CACX,EACA7D,EAAA,IAACgD,GAAA,CACC,MAAM,4CACN,QAAAzB,EACA,KAAK,gBAAA,CACP,EACAvB,EAAA,IAACb,EAAA,CACC,MAAM,QACN,QAAAoC,EACA,QAAS+C,EACT,KAAK,UAAA,CACP,EACCxC,IAAS,QAENhC,EAAAA,KAAAC,EAAA,SAAA,CAAA,SAAA,CAAAC,EAAAA,IAAC,MAAG,SAAK,OAAA,CAAA,EACTA,EAAA,IAAC6C,EAAA,CACC,QAAAtB,CAAA,CAAA,CACF,EACF,EAEFvB,EAAAA,IAAC,MAAG,SAAI,MAAA,CAAA,EACRA,EAAA,IAACiC,EAAA,CACC,UAAA5C,EAGA,oBAAAG,CAAA,CACF,QACC4B,EAAO,CAAA,KAAK,SAAS,KAAMmD,EAAQ,SAEpC,MAAA,CAAA,CAAA,CAAA,CACF,CAEJ,CCzKA,KAAA,CAAA,qBAAArF,EAAA,EAAA,MAAAF,EAAA,wCAAA,EACA,CAAA,wBAAAgE,GAAA,sBAAA7D,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAuBA,SAAS2F,GAAqB,CAC5B,UAAAzC,EACA,UAAA7C,CACF,EAA6B,CACrB,KAAA,CAAE,QAAAkC,GAAYlC,EACd,CAAE,WAAAI,CAAW,EAAIP,GAAqB,EAEtCoF,EAAe7E,EAAW,OAAO,IAAKF,IAAW,CACrD,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EAIIC,EACJiC,EAAS,CACP,QAAAF,EACA,KAAM,eAAA,CACP,GAAG,IAAKqD,IAAU,CACjB,MAAOA,EAAK,KACZ,MAAOA,EAAK,EACd,EAAE,GAAK,CAAC,EAIV,cACG,MAAI,CAAA,UAAWrC,EAAK,YAAaL,CAAS,EACzC,SAAA,CAAAlC,EAAA,IAACb,GAAA,CACC,MAAM,QACN,QAAAoC,EACA,QAAS+C,EACT,KAAK,UAAA,CACP,EACAtE,EAAA,IAACgD,GAAA,CACC,MAAM,kBACN,QAAAzB,EACA,KAAK,eAAA,CACP,EACAvB,EAAAA,IAAC,MAAG,SAAK,OAAA,CAAA,EACTA,EAAA,IAAC6C,EAAA,CACC,QAAAtB,CAAA,CACF,EACAvB,EAAAA,IAAC,MAAG,SAAI,MAAA,CAAA,EACRA,EAAA,IAACiC,EAAA,CACC,UAAA5C,EAGA,oBAAAG,CAAA,CACF,EACAQ,EAAAA,IAAC,MAAG,SAAc,gBAAA,CAAA,EAClBA,EAAA,IAAC6E,EAAkB,mBAAlB,CACC,QAAAtD,EACA,KAAK,gBACL,WAAalC,GACXW,EAAA,IAAC8D,GAAA,CACE,GAAGzE,EACJ,oBAAAG,CAAA,CACF,EAEF,YAAcsF,GAAgB9E,EAAAA,IAAAyD,GAAA,CAAwB,GAAGqB,EAAY,EACrE,aAAc,CAAE,KAAM,QAAS,CAAA,CAAA,CACjC,EACF,CAEJ,CC1FA,KAAA,CAAA,uBAAAC,EAAA,yBAAAC,EAAA,EAAA,MAAAhG,EAAA,oCAAA,EAIA,CAAA,+BAAAiG,GAAA,oBAAAlC,GAAA,qBAAA7D,GAAA,kBAAAgG,EAAA,EAAA,MAAAlG,EAAA,wCAAA,EAMA,CAAA,OAAAoC,EAAA,wBAAA+D,GAAA,qBAAAvE,EAAA,sBAAAzB,GAAA,iBAAAiG,EAAA,EAAA,MAAApG,EAAA,8BAAA,EAUA,CAAA,UAAAqG,EAAA,EAAA,MAAArG,EAAA,OAAA,EAIMsG,GAAkB,CAAC,CAAEC,MAAO,OAAQC,MAAO,MAAO,CAAC,EAAEC,GAAA,UAmBL,CAC9C,KAAA,CAAEC,eAAAA,GAAmBN,GAAiB,EACtC,CAAEO,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAC1B,CACJC,2BAAAA,EACAC,+BAAAA,EACAC,mBAAAA,EACAvG,WAAAA,GACEP,GAAqB,EACnB+G,EAAWC,GAAY,EACvB,CAAEC,gBAAAA,EAAiBC,UAAAA,EAAWC,gBAAAA,CAAAA,EAAoBT,EAAMU,cAAc,EAEtEC,EAAqBxD,GAAoBiC,EAAwB,EAEjE3F,EAAY6F,GAAkB,CAClCsB,OAAQH,EACRI,cAAe,CAAE3E,KAAM,MAAO,EAC9B4E,SAAUvC,EAAYoC,CAAkB,CAAA,CACzC,EAEK,CAAEhF,QAAAA,EAAS6C,aAAAA,EAAcC,MAAAA,EAAOsC,MAAAA,CAAAA,EAAUtH,EAEhDgG,GAAU,IAAM,CACdsB,EAAMN,GAAmB,CAAEvE,KAAM,MAAA,CAAQ,CAAA,EACxC,CAAC6E,EAAON,CAAe,CAAC,EAErBrC,MAAAA,EAAWI,EAAuBwC,GAAA,CACtC,MAAMC,EAAKD,EAAKC,IAAM9B,EAAuB+B,cAAc,EAC3D,OAAOhB,EACOjE,GAAA,CACJkF,MAAAA,EAAWlF,EAAOmF,KAAKC,QAClBC,EAAIL,KAAOV,EAAgBU,EACtC,EACIE,GAAAA,GAAUjF,OAAS,QACf,MAAA,IAAIqF,MAAM,yCAAyC,EAG3DJ,EAASK,SAAWC,GAClB,CACE,IAAIN,EAASK,UAAY,CAAA,GAAIE,UACd,CAAClB,GAAamB,EAAQV,KAAOT,CAC5C,EACA,CAAE,GAAGQ,EAAMC,GAAAA,CAAI,CAAA,EAEjB,CAAcU,GAAAA,EAAQjI,IAAI,CAC5B,CAAA,EAEF,CACEkI,UAAWA,IAAM,CACVpB,GACMH,EAAA,CACPwB,GAAI,6CACJC,OAAQ,CAAE/B,IAAAA,EAAKgC,WAAY5C,EAAuB6C,UAAUf,CAAE,CAAA,CAAE,CACjE,CACH,CACF,CAEJ,CAAA,CACD,EAE8B5B,GAAA,CAAE1D,QAAAA,EAASoF,MAAAA,EAAO3C,SAAAA,CAAAA,CAAU,EAErDlC,MAAAA,EAAOuC,EAAM,MAAM,EAEzB,SAASwD,GAAqB,CACbnC,EAAA,CACboC,MAAO,iBACPC,QAAS,mCACP1B,GAAiB/G,MAAQ,cAAc,IAEzC0I,UAAWA,IAAM,CACfjC,EACclE,GAAA,CACJkF,MAAAA,EAAWlF,EAAOmF,KAAKC,QAClBC,EAAIL,KAAOV,EAAgBU,EACtC,EACIE,GAAAA,GAAUjF,OAAS,QACf,MAAA,IAAIqF,MAAM,yCAAyC,EAGlDC,EAAAA,UAAYL,EAASK,UAAY,CAAA,GAAIE,OAC3CC,GAAY,CAACnB,GAAamB,EAAQV,KAAOT,CAC5C,CAAA,EAEF,CACE6B,eAAgB,gCAChBT,UAAWA,IAAM,CACNvB,EAAA,CAAEwB,GAAI,IAAA,CAAM,CAAA,CACvB,CAEJ,CAAA,CACF,CACD,CAAA,CAGH,MAAMS,EAAiBzI,EAAW0I,SAASC,IAAY3H,IAAA,CACrD8E,MAAO9E,EAAEnB,KACTkG,MAAO/E,EAAEoG,EAAAA,EACT,EAGA,OAAA7G,EAAA,IAAC,OAAI,UAAU,MACb,gBAAC,OAAK,CAAA,SAAAgE,EAAoB,UAAU,YACjCoC,SAAAA,CAAAA,SACEhF,EACC,CAAA,QAAQ,OACR,KAAK,OACL,QAAS,IAAM,CACAyG,EAAA,CAAA,EACb,SAGJ,iBAAA,QAEDjH,EAAqB,CAAA,MAAM,OAAO,QAAAW,EAAkB,KAAK,OAAM,EAChEvB,MAACmF,IACC,MAAM,UACN,QAAA5D,EACA,QAAS2G,EACT,KAAK,aAAY,QAElBtH,EAAqB,CAAA,MAAM,OAAO,QAAAW,EAAkB,KAAK,OAAM,EAChEvB,MAACb,IACC,MAAM,OACN,QAAAoC,EACA,KAAK,OACL,QAAS+D,GAAgB,GAEzB,IAAM,CACN,OAAQxD,EAAc,CACpB,IAAK,OACI,OAAA9B,MAAC2E,IAAqB,UAAAtF,EAAwB,EAEvD,QACE,cAAQ,MAAI,CAAA,SAAA,CAAA,oBAAkByC,CAAAA,EAAK,CACrC,CACF,GACC,QACFV,EAAO,CAAA,KAAK,SAAS,SAAU4E,EAAmB,SAEnD,MAAA,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAEJ"}
|
|
1
|
+
{"version":3,"file":"sections._sectionKey-Bj4VmUuM.js","sources":["../../src/routes/apps/edit.$key/admin/-components/inputs/embedded-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/embedded-local-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/enum-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/foreign-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/text-input-config.tsx","../../src/routes/apps/edit.$key/admin/-components/inputs/index.ts","../../src/routes/apps/edit.$key/admin/-components/crud-form-fields-form.tsx","../../src/routes/apps/edit.$key/admin/-components/crud-table-columns-form.tsx","../../src/routes/apps/edit.$key/admin/-components/admin-crud-embedded-form.tsx","../../src/routes/apps/edit.$key/admin/-components/admin-crud-section-form.tsx","../../src/routes/apps/edit.$key/admin/sections.$sectionKey.tsx?tsr-split=component"],"sourcesContent":["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 pluginId: 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 pluginId: 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 pluginId: 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 pluginId: 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 pluginId: 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 { AdminCrudSectionConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport { ModelUtils } from '@baseplate-dev/project-builder-lib';\nimport {\n adminCrudInputWebSpec,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useFieldArray, useWatch } from 'react-hook-form';\n\nimport { CollapsibleRow } from '#src/components/index.js';\n\nimport { BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS } from './inputs/index.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 FieldForm({\n idx,\n formProps,\n embeddedFormOptions,\n}: {\n idx: number;\n formProps: UseFormReturn<AdminCrudFormConfigInput>;\n embeddedFormOptions: { label: string; value: string }[];\n}): React.JSX.Element {\n const { control } = formProps;\n const modelRef = useWatch({ control, name: 'modelRef' });\n const { definition, pluginContainer } = useProjectDefinition();\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 type = useWatch({\n control,\n name: `form.fields.${idx}.type`,\n });\n const inputWebConfig = inputWeb.getInputWebConfig(\n type,\n BUILT_IN_ADMIN_CRUD_INPUT_WEB_CONFIGS,\n );\n const WebForm = inputWebConfig.Form;\n\n return (\n <div className=\"space-y-4\">\n <SelectFieldController\n label=\"Type\"\n control={control}\n options={fieldTypeOptions}\n name={`form.fields.${idx}.type`}\n />\n <InputFieldController\n label=\"Label\"\n control={control}\n name={`form.fields.${idx}.label`}\n />\n {WebForm && model && (\n <WebForm\n formProps={formProps}\n name={`form.fields.${idx}`}\n model={model}\n embeddedFormOptions={embeddedFormOptions}\n pluginId={inputWebConfig.pluginId}\n />\n )}\n </div>\n );\n}\n\nfunction CrudFormFieldsForm({\n className,\n formProps,\n embeddedFormOptions,\n}: Props): React.JSX.Element {\n const { control } = formProps;\n const { fields, append, remove } = useFieldArray({\n control,\n name: 'form.fields',\n });\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fields.map((field, idx) => (\n <CollapsibleRow\n key={field.id}\n collapsedContents={\n <div>\n {field.label} ({field.type})\n </div>\n }\n onRemove={() => {\n remove(idx);\n }}\n defaultOpen={!field.label}\n >\n <FieldForm\n key={field.id}\n idx={idx}\n formProps={formProps}\n embeddedFormOptions={embeddedFormOptions}\n />\n </CollapsibleRow>\n ))}\n <Button\n onClick={() => {\n append({ type: 'text', label: '' });\n }}\n >\n Add Field\n </Button>\n </div>\n );\n}\n\nexport default CrudFormFieldsForm;\n","import type { AdminCrudSectionConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control } from 'react-hook-form';\n\nimport {\n adminCrudDisplayTypes,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputFieldController,\n SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\nimport { useFieldArray, useWatch } from 'react-hook-form';\n\nimport { CollapsibleRow } from '#src/components/index.js';\n\nexport type AdminCrudTableConfig = Pick<\n AdminCrudSectionConfig,\n 'table' | 'modelRef'\n>;\n\ninterface Props {\n className?: string;\n control: Control<AdminCrudTableConfig>;\n}\n\nfunction ColumnForm({\n idx,\n control,\n fieldOptions,\n localRelationOptions,\n}: {\n idx: number;\n control: Control<AdminCrudTableConfig>;\n fieldOptions: { label: string; value: string }[];\n localRelationOptions: { label: string; value: string }[];\n}): React.JSX.Element {\n const displayTypeOptions = adminCrudDisplayTypes.map((t) => ({\n label: t,\n value: t,\n }));\n const type = useWatch({ control, name: `table.columns.${idx}.display.type` });\n return (\n <div className=\"space-y-4\">\n <SelectFieldController\n label=\"Type\"\n control={control}\n options={displayTypeOptions}\n name={`table.columns.${idx}.display.type`}\n />\n <InputFieldController\n label=\"Label\"\n control={control}\n name={`table.columns.${idx}.label`}\n />\n\n {type === 'text' && (\n <SelectFieldController\n label=\"Field\"\n control={control}\n name={`table.columns.${idx}.display.modelFieldRef`}\n options={fieldOptions}\n />\n )}\n {type === 'foreign' && (\n <>\n <SelectFieldController\n label=\"Local Relation Name\"\n control={control}\n name={`table.columns.${idx}.display.localRelationRef`}\n options={localRelationOptions}\n />\n <InputFieldController\n label=\"Label Expression (e.g. name)\"\n control={control}\n name={`table.columns.${idx}.display.labelExpression`}\n />\n <InputFieldController\n label=\"Value Expression (e.g. id)\"\n control={control}\n name={`table.columns.${idx}.display.valueExpression`}\n />\n </>\n )}\n </div>\n );\n}\n\nfunction CrudTableColumnsForm({\n className,\n control,\n}: Props): React.JSX.Element {\n const modelRef = useWatch({ control, name: 'modelRef' });\n const { definition, definitionContainer } = useProjectDefinition();\n const model = modelRef\n ? ModelUtils.byIdOrThrow(definition, modelRef)\n : undefined;\n const { fields, append, remove } = useFieldArray({\n control,\n name: 'table.columns',\n });\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 const fieldOptions =\n model?.model.fields.map((field) => ({\n label: field.name,\n value: field.id,\n })) ?? [];\n\n return (\n <div className={clsx('space-y-4', className)}>\n {fields.map((field, idx) => (\n <CollapsibleRow\n key={field.id}\n collapsedContents={\n <div>\n {field.label} ({field.display.type})\n </div>\n }\n onRemove={() => {\n remove(idx);\n }}\n defaultOpen={!field.label}\n >\n <ColumnForm\n key={field.id}\n idx={idx}\n control={control}\n fieldOptions={fieldOptions}\n localRelationOptions={localRelationOptions}\n />\n </CollapsibleRow>\n ))}\n <Button\n onClick={() => {\n append({ display: { type: 'text', modelFieldRef: '' }, label: '' });\n }}\n >\n Add Column\n </Button>\n </div>\n );\n}\n\nexport default CrudTableColumnsForm;\n","import type { AdminCrudEmbeddedFormConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, 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 { 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';\nimport type { AdminCrudTableConfig } from './crud-table-columns-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\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 control={control as unknown as Control<AdminCrudTableConfig>}\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 { AdminCrudSectionConfigInput } from '@baseplate-dev/project-builder-lib';\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 SelectFieldController,\n} from '@baseplate-dev/ui-components';\nimport clsx from 'clsx';\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 { AdminCrudTableConfig } from './crud-table-columns-form.js';\n\nimport AdminCrudEmbeddedForm, {\n AdminCrudEmbeddedTable,\n} from './admin-crud-embedded-form.js';\nimport CrudFormFieldsForm from './crud-form-fields-form.js';\nimport CrudTableColumnsForm from './crud-table-columns-form.js';\n\ninterface Props {\n className?: string;\n formProps: UseFormReturn<AdminCrudSectionConfigInput>;\n}\n\nfunction AdminCrudSectionForm({\n className,\n formProps,\n}: Props): React.JSX.Element {\n const { control } = formProps;\n const { definition } = useProjectDefinition();\n\n const modelOptions = definition.models.map((model) => ({\n label: model.name,\n value: model.id,\n }));\n\n // TODO: struggles with https://github.com/react-hook-form/react-hook-form/discussions/7354\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 <div className={clsx('space-y-4', className)}>\n <SelectFieldController\n label=\"Model\"\n control={control}\n options={modelOptions}\n name=\"modelRef\"\n />\n <CheckboxFieldController\n label=\"Disable Create?\"\n control={control}\n name=\"disableCreate\"\n />\n <h2>Table</h2>\n <CrudTableColumnsForm\n control={control as unknown as Control<AdminCrudTableConfig>}\n />\n <h2>Form</h2>\n <CrudFormFieldsForm\n formProps={\n formProps as unknown as UseFormReturn<AdminCrudFormConfigInput>\n }\n embeddedFormOptions={embeddedFormOptions}\n />\n <h2>Embedded Forms</h2>\n <EmbeddedListInput.LabelledController\n control={control}\n name=\"embeddedForms\"\n renderForm={(formProps) => (\n <AdminCrudEmbeddedForm\n {...formProps}\n embeddedFormOptions={embeddedFormOptions}\n />\n )}\n renderTable={(tableProps) => <AdminCrudEmbeddedTable {...tableProps} />}\n defaultValue={{ type: 'object' }}\n />\n </div>\n );\n}\n\nexport default AdminCrudSectionForm;\n","import type React from 'react';\n\nimport {\n adminSectionEntityType,\n createAdminSectionSchema,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockUnsavedChangesNavigate,\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n ComboboxFieldController,\n InputFieldController,\n SelectFieldController,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { createFileRoute, notFound, useNavigate } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { useEffect } from 'react';\n\nimport AdminCrudSectionForm from './-components/admin-crud-section-form.js';\n\nconst SECTION_OPTIONS = [{ label: 'Crud', value: 'crud' }];\n\nexport const Route = createFileRoute(\n '/apps/edit/$key/admin/sections/$sectionKey',\n)({\n component: AdminAppEditSectionPage,\n loader: ({ context: { adminDefinition }, params: { sectionKey } }) => {\n const sectionId =\n sectionKey === 'new'\n ? undefined\n : adminSectionEntityType.idFromKey(sectionKey);\n const existingSection = sectionId\n ? adminDefinition.sections?.find((section) => section.id === sectionId)\n : undefined;\n if (sectionId && !existingSection) throw notFound();\n return { adminDefinition, sectionId, existingSection };\n },\n});\n\nfunction AdminAppEditSectionPage(): React.JSX.Element {\n const { requestConfirm } = useConfirmDialog();\n const { key } = Route.useParams();\n const {\n saveDefinitionWithFeedback,\n saveDefinitionWithFeedbackSync,\n isSavingDefinition,\n definition,\n } = useProjectDefinition();\n const navigate = useNavigate();\n const { adminDefinition, sectionId, existingSection } = Route.useLoaderData();\n\n const adminSectionSchema = useDefinitionSchema(createAdminSectionSchema);\n\n const formProps = useResettableForm({\n values: existingSection,\n defaultValues: { type: 'crud' },\n resolver: zodResolver(adminSectionSchema),\n });\n\n const { control, handleSubmit, watch, reset } = formProps;\n\n useEffect(() => {\n reset(existingSection ?? { type: 'crud' });\n }, [reset, existingSection]);\n\n const onSubmit = handleSubmit((data) => {\n const id = data.id || adminSectionEntityType.generateNewId();\n return saveDefinitionWithFeedback(\n (config) => {\n const adminApp = config.apps.find(\n (app) => app.id === adminDefinition.id,\n );\n if (adminApp?.type !== 'admin') {\n throw new Error('Cannot add a section to a non-admin app');\n }\n\n adminApp.sections = sortBy(\n [\n ...(adminApp.sections ?? []).filter(\n (section) => !sectionId || section.id !== sectionId,\n ),\n { ...data, id },\n ],\n [(section) => section.name],\n );\n },\n {\n onSuccess: () => {\n if (!sectionId) {\n navigate({\n to: `/apps/edit/$key/admin/sections/$sectionKey`,\n params: { key, sectionKey: adminSectionEntityType.keyFromId(id) },\n });\n }\n },\n },\n );\n });\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n const type = watch('type');\n\n function handleDelete(): void {\n requestConfirm({\n title: 'Delete Section',\n content: `Are you sure you want to delete ${\n existingSection?.name ?? 'this section'\n }?`,\n onConfirm: () => {\n saveDefinitionWithFeedbackSync(\n (config) => {\n const adminApp = config.apps.find(\n (app) => app.id === adminDefinition.id,\n );\n if (adminApp?.type !== 'admin') {\n throw new Error('Cannot add a section to a non-admin app');\n }\n\n adminApp.sections = (adminApp.sections ?? []).filter(\n (section) => !sectionId || section.id !== sectionId,\n );\n },\n {\n successMessage: 'Successfully deleted section!',\n onSuccess: () => {\n navigate({ to: '..' });\n },\n },\n );\n },\n });\n }\n\n const featureOptions = definition.features.map((f) => ({\n label: f.name,\n value: f.id,\n }));\n\n return (\n <div className=\"p-4\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n {sectionId && (\n <Button\n variant=\"link\"\n size=\"none\"\n onClick={() => {\n handleDelete();\n }}\n >\n Delete Section\n </Button>\n )}\n <InputFieldController label=\"Name\" control={control} name=\"name\" />\n <ComboboxFieldController\n label=\"Feature\"\n control={control}\n options={featureOptions}\n name=\"featureRef\"\n />\n <InputFieldController label=\"Icon\" control={control} name=\"icon\" />\n <SelectFieldController\n label=\"Type\"\n control={control}\n name=\"type\"\n options={SECTION_OPTIONS}\n />\n {(() => {\n switch (type as string) {\n case 'crud': {\n return <AdminCrudSectionForm formProps={formProps} />;\n }\n default: {\n return <div>Unsupported type {type}</div>;\n }\n }\n })()}\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Save\n </Button>\n </form>\n </div>\n );\n}\n"],"names":["ModelUtils","importShared","createAdminCrudInputWebConfig","useProjectDefinition","SelectFieldController","AdminCrudEmbeddedInputForm","formProps","name","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","adminCrudInputWebSpec","Button","FieldForm","idx","control","modelRef","useWatch","pluginContainer","inputWeb","fieldTypeOptions","config","type","inputWebConfig","WebForm","CrudFormFieldsForm","className","fields","append","remove","useFieldArray","clsx","CollapsibleRow","adminCrudDisplayTypes","ColumnForm","displayTypeOptions","t","CrudTableColumnsForm","createAdminCrudEmbeddedFormSchema","useDefinitionSchema","CheckboxFieldController","Table","TableBody","TableCell","TableHead","TableHeader","TableRow","toast","useId","AdminCrudEmbeddedTable","items","edit","item","TYPE_OPTIONS","AdminCrudEmbeddedForm","initialData","onSubmit","adminCrudEmbeddedFormSchema","useForm","zodResolver","handleSubmit","watch","modelOptions","formId","e","error","logAndFormatError","AdminCrudSectionForm","form","EmbeddedListInput","tableProps","adminSectionEntityType","createAdminSectionSchema","useBlockUnsavedChangesNavigate","useResettableForm","ComboboxFieldController","useConfirmDialog","useEffect","SECTION_OPTIONS","label","value","SplitComponent","requestConfirm","key","Route","useParams","saveDefinitionWithFeedback","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","useNavigate","adminDefinition","sectionId","existingSection","useLoaderData","adminSectionSchema","values","defaultValues","resolver","reset","data","id","generateNewId","adminApp","apps","find","app","Error","sections","sortBy","filter","section","onSuccess","to","params","sectionKey","keyFromId","handleDelete","title","content","onConfirm","successMessage","featureOptions","features","map"],"mappings":"gSAKA,KAAA,CAAA,WAAAA,EAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,8BAAAC,GAAA,qBAAAC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAA,sBAAAG,CAAA,EAAA,MAAAH,EAAA,8BAAA,EAEA,SAASI,GAA2B,CAClC,UAAAC,EACA,KAAAC,EACA,MAAAC,EACA,oBAAAC,CACF,EAAkD,CAC1C,KAAA,CAAE,WAAAC,CAAW,EAAIP,GAAqB,EAEtCQ,EAAyBX,GAAW,oBACxCU,EACAF,EAAM,EAAA,EACN,IAAKI,IAAO,CACZ,MAAO,GAAGA,EAAE,SAAS,mBAAmB,KAAKA,EAAE,MAAM,IAAI,IACzD,MAAOA,EAAE,SAAS,SAAA,EAClB,EACIC,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,oBACf,QAASF,CAAA,CACX,EACAM,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,mBACf,QAASJ,CAAA,CAAA,CACX,EACF,CAEJ,CAEO,MAAMS,GACXhB,GAA4D,CAC1D,KAAM,WACN,SAAU,OACV,MAAO,WACP,YAAa,KAAO,CAClB,MAAO,GACP,KAAM,WACN,iBAAkB,GAClB,gBAAiB,EAAA,GAEnB,KAAMG,EACR,CAAC,ECzDH,CAAA,8BAAAH,GAAA,qBAAAC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAA,sBAAAG,CAAA,EAAA,MAAAH,EAAA,8BAAA,EAEA,SAASkB,GAAgC,CACvC,UAAAb,EACA,KAAAC,EACA,MAAAC,EACA,oBAAAC,CACF,EAAkD,CAC1C,KAAA,CAAE,oBAAAW,CAAoB,EAAIjB,GAAqB,EAC/CkB,EACJb,EAAM,MAAM,WAAW,IAAKc,IAAc,CACxC,MAAO,GAAGA,EAAS,IAAI,KAAKF,EAAoB,WAAWE,EAAS,QAAQ,CAAC,IAC7E,MAAOA,EAAS,EAClB,EAAE,GAAK,CAAC,EACJT,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,oBACf,QAASQ,CAAA,CACX,EACAJ,EAAA,IAACb,EAAA,CACC,MAAM,gBACN,QAASU,EACT,KAAM,GAAGD,CAAM,mBACf,QAASJ,CAAA,CAAA,CACX,EACF,CAEJ,CAEO,MAAMc,GACXrB,GAAiE,CAC/D,KAAM,gBACN,SAAU,OACV,MAAO,iBACP,YAAa,KAAO,CAClB,MAAO,GACP,KAAM,gBACN,gBAAiB,GACjB,iBAAkB,EAAA,GAEpB,KAAMiB,EACR,CAAC,ECrDH,CAAA,8BAAAjB,EAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,sBAAAG,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAEA,SAASuB,GAAuB,CAC9B,UAAAlB,EACA,KAAAC,EACA,MAAAC,CACF,EAAkD,CAChD,MAAMiB,EAAmBjB,EAAM,MAAM,OAClC,OAAQkB,GAAMA,EAAE,OAAS,MAAM,EAC/B,IAAKC,IAAW,CACf,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EACEd,EAASN,EACTO,EAAeR,EAAU,QAK7B,OAAAW,EAAA,IAACb,GAAA,CACC,MAAM,aACN,QAASU,EACT,KAAM,GAAGD,CAAM,iBACf,QAASY,CAAA,CACX,CAEJ,CAEO,MAAMG,GACX1B,GAAwD,CACtD,KAAM,OACN,SAAU,OACV,MAAO,OACP,YAAa,KAAO,CAAE,MAAO,GAAI,KAAM,OAAQ,cAAe,KAC9D,KAAMsB,EACR,CAAC,ECpCH,CAAA,8BAAAtB,GAAA,qBAAAC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAA,qBAAA4B,EAAA,sBAAAzB,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAKA,SAAS6B,GAA0B,CACjC,UAAAxB,EACA,KAAAC,EACA,MAAAC,CACF,EAAkD,CAC1C,KAAA,CAAE,oBAAAY,CAAoB,EAAIjB,GAAqB,EAC/CkB,EACJb,EAAM,MAAM,WAAW,IAAKc,IAAc,CACxC,MAAO,GAAGA,EAAS,IAAI,KAAKF,EAAoB,WAAWE,EAAS,QAAQ,CAAC,IAC7E,MAAOA,EAAS,EAClB,EAAE,GAAK,CAAC,EACJT,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,GAAA,CACC,MAAM,sBACN,QAASU,EACT,KAAM,GAAGD,CAAM,oBACf,QAASQ,CAAA,CACX,EACAJ,EAAA,IAACY,EAAA,CACC,MAAM,+BACN,QAASf,EACT,KAAM,GAAGD,CAAM,kBAAA,CACjB,EACAI,EAAA,IAACY,EAAA,CACC,MAAM,6BACN,QAASf,EACT,KAAM,GAAGD,CAAM,kBAAA,CACjB,EACAI,EAAA,IAACY,EAAA,CACC,MAAM,2BACN,QAASf,EACT,KAAM,GAAGD,CAAM,eAAA,CACjB,EACAI,EAAA,IAACY,EAAA,CACC,MAAM,qDACN,QAASf,EACT,KAAM,GAAGD,CAAM,YAAA,CAAA,CACjB,EACF,CAEJ,CAEO,MAAMkB,GACX7B,GAA2D,CACzD,KAAM,UACN,SAAU,OACV,MAAO,UACP,YAAa,KAAO,CAClB,MAAO,GACP,KAAM,UACN,iBAAkB,GAClB,gBAAiB,GACjB,gBAAiB,GACjB,aAAc,GACd,UAAW,EAAA,GAEb,KAAM4B,EACR,CAAC,ECxEH,CAAA,8BAAA5B,EAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,qBAAA4B,GAAA,sBAAAzB,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAKA,SAAS+B,GAAuB,CAC9B,UAAA1B,EACA,KAAAC,EACA,MAAAC,CACF,EAAkD,CAChD,MAAMyB,EAAezB,EAAM,MAAM,OAAO,IAAKmB,IAAW,CACtD,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EACId,EAASN,EACTO,EAAeR,EAAU,QAI/B,OAEIS,EAAA,KAAAC,WAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,GAAA,CACC,MAAM,QACN,QAASU,EACT,KAAM,GAAGD,CAAM,iBACf,QAASoB,CAAA,CACX,EACAhB,EAAA,IAACY,GAAA,CACC,MAAM,sDACN,QAASf,EACT,KAAM,GAAGD,CAAM,aAAA,CAAA,CACjB,EACF,CAEJ,CAEO,MAAMqB,GACXhC,GAAwD,CACtD,KAAM,OACN,SAAU,OACV,MAAO,OACP,YAAa,KAAO,CAAE,MAAO,GAAI,KAAM,OAAQ,cAAe,KAC9D,KAAM8B,EACR,CAAC,EC3CUG,EAAwC,CACnDjB,GACAK,GACAK,GACAG,GACAG,EACF,ECRA,CAAA,WAAAlC,EAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,sBAAAmC,GAAA,qBAAAjC,EAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAAoC,OAAAA,GAAAR,qBAAAA,GAAAzB,sBAAAA,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAuBA,SAASqC,GAAU,CACjB,IAAAC,EACA,UAAAjC,EACA,oBAAAG,CACF,EAIsB,CACd,KAAA,CAAE,QAAA+B,GAAYlC,EACdmC,EAAWC,EAAS,CAAE,QAAAF,EAAS,KAAM,WAAY,EACjD,CAAE,WAAA9B,EAAY,gBAAAiC,CAAgB,EAAIxC,GAAqB,EACvDK,EAAQiC,EACVzC,GAAW,YAAYU,EAAY+B,CAAQ,EAC3C,OAEEG,EAAWD,EAAgB,cAAcP,EAAqB,EAE9DS,EAAmBD,EACtB,mBAAmBT,CAAqC,EACxD,IAAKW,IAAY,CAChB,MAAOA,EAAO,MACd,MAAOA,EAAO,IAAA,EACd,EAEEC,EAAOL,EAAS,CACpB,QAAAF,EACA,KAAM,eAAeD,CAAG,OAAA,CACzB,EACKS,EAAiBJ,EAAS,kBAC9BG,EACAZ,CACF,EACMc,EAAUD,EAAe,KAG7B,OAAAjC,EAAA,KAAC,MAAI,CAAA,UAAU,YACb,SAAA,CAAAE,EAAA,IAACb,GAAA,CACC,MAAM,OACN,QAAAoC,EACA,QAASK,EACT,KAAM,eAAeN,CAAG,OAAA,CAC1B,EACAtB,EAAA,IAACY,GAAA,CACC,MAAM,QACN,QAAAW,EACA,KAAM,eAAeD,CAAG,QAAA,CAC1B,EACCU,GAAWzC,GACVS,EAAA,IAACgC,EAAA,CACC,UAAA3C,EACA,KAAM,eAAeiC,CAAG,GACxB,MAAA/B,EACA,oBAAAC,EACA,SAAUuC,EAAe,QAAA,CAAA,CAC3B,EAEJ,CAEJ,CAEA,SAASE,EAAmB,CAC1B,UAAAC,EACA,UAAA7C,EACA,oBAAAG,CACF,EAA6B,CACrB,KAAA,CAAE,QAAA+B,GAAYlC,EACd,CAAE,OAAA8C,EAAQ,OAAAC,EAAQ,OAAAC,CAAA,EAAWC,EAAc,CAC/C,QAAAf,EACA,KAAM,aAAA,CACP,EAED,cACG,MAAI,CAAA,UAAWgB,EAAK,YAAaL,CAAS,EACxC,SAAA,CAAOC,EAAA,IAAI,CAACzB,EAAOY,IAClBtB,EAAA,IAACwC,EAAA,CAEC,yBACG,MACE,CAAA,SAAA,CAAM9B,EAAA,MAAM,KAAGA,EAAM,KAAK,GAAA,EAC7B,EAEF,SAAU,IAAM,CACd2B,EAAOf,CAAG,CACZ,EACA,YAAa,CAACZ,EAAM,MAEpB,SAAAV,EAAA,IAACqB,GAAA,CAEC,IAAAC,EACA,UAAAjC,EACA,oBAAAG,CAAA,EAHKkB,EAAM,EAAA,CAIb,EAhBKA,EAAM,EAAA,CAkBd,EACDV,EAAA,IAACoB,GAAA,CACC,QAAS,IAAM,CACbgB,EAAO,CAAE,KAAM,OAAQ,MAAO,GAAI,CACpC,EACD,SAAA,WAAA,CAAA,CAED,EACF,CAEJ,CCpIA,KAAA,CAAA,sBAAAK,GAAA,WAAA1D,EAAA,EAAA,MAAAC,EAAA,oCAAA,EAIA,CAAA,qBAAAE,EAAA,EAAA,MAAAF,EAAA,wCAAA,EACA,CAAAoC,OAAAA,GAAAR,qBAAAA,EAAAzB,sBAAAA,CAAA,EAAA,MAAAH,EAAA,8BAAA,EAoBA,SAAS0D,GAAW,CAClB,IAAApB,EACA,QAAAC,EACA,aAAAP,EACA,qBAAAZ,CACF,EAKsB,CACpB,MAAMuC,EAAqBF,GAAsB,IAAKG,IAAO,CAC3D,MAAOA,EACP,MAAOA,CAAA,EACP,EACId,EAAOL,EAAS,CAAE,QAAAF,EAAS,KAAM,iBAAiBD,CAAG,gBAAiB,EAE1E,OAAAxB,EAAA,KAAC,MAAI,CAAA,UAAU,YACb,SAAA,CAAAE,EAAA,IAACb,EAAA,CACC,MAAM,OACN,QAAAoC,EACA,QAASoB,EACT,KAAM,iBAAiBrB,CAAG,eAAA,CAC5B,EACAtB,EAAA,IAACY,EAAA,CACC,MAAM,QACN,QAAAW,EACA,KAAM,iBAAiBD,CAAG,QAAA,CAC5B,EAECQ,IAAS,QACR9B,EAAA,IAACb,EAAA,CACC,MAAM,QACN,QAAAoC,EACA,KAAM,iBAAiBD,CAAG,yBAC1B,QAASN,CAAA,CACX,EAEDc,IAAS,WAENhC,EAAAA,KAAAC,EAAA,SAAA,CAAA,SAAA,CAAAC,EAAA,IAACb,EAAA,CACC,MAAM,sBACN,QAAAoC,EACA,KAAM,iBAAiBD,CAAG,4BAC1B,QAASlB,CAAA,CACX,EACAJ,EAAA,IAACY,EAAA,CACC,MAAM,+BACN,QAAAW,EACA,KAAM,iBAAiBD,CAAG,0BAAA,CAC5B,EACAtB,EAAA,IAACY,EAAA,CACC,MAAM,6BACN,QAAAW,EACA,KAAM,iBAAiBD,CAAG,0BAAA,CAAA,CAC5B,CACF,CAAA,CAAA,EAEJ,CAEJ,CAEA,SAASuB,EAAqB,CAC5B,UAAAX,EACA,QAAAX,CACF,EAA6B,CAC3B,MAAMC,EAAWC,EAAS,CAAE,QAAAF,EAAS,KAAM,WAAY,EACjD,CAAE,WAAA9B,EAAY,oBAAAU,CAAoB,EAAIjB,GAAqB,EAC3DK,EAAQiC,EACVzC,GAAW,YAAYU,EAAY+B,CAAQ,EAC3C,OACE,CAAE,OAAAW,EAAQ,OAAAC,EAAQ,OAAAC,CAAA,EAAWC,EAAc,CAC/C,QAAAf,EACA,KAAM,eAAA,CACP,EAEKnB,EACJb,GAAO,MAAM,WAAW,IAAKc,IAAc,CACzC,MAAO,GAAGA,EAAS,IAAI,KAAKF,EAAoB,WAAWE,EAAS,QAAQ,CAAC,IAC7E,MAAOA,EAAS,EAClB,EAAE,GAAK,CAAC,EAEJW,EACJzB,GAAO,MAAM,OAAO,IAAKmB,IAAW,CAClC,MAAOA,EAAM,KACb,MAAOA,EAAM,EACf,EAAE,GAAK,CAAC,EAEV,cACG,MAAI,CAAA,UAAW6B,EAAK,YAAaL,CAAS,EACxC,SAAA,CAAOC,EAAA,IAAI,CAACzB,EAAOY,IAClBtB,EAAA,IAACwC,EAAA,CAEC,yBACG,MACE,CAAA,SAAA,CAAM9B,EAAA,MAAM,KAAGA,EAAM,QAAQ,KAAK,GAAA,EACrC,EAEF,SAAU,IAAM,CACd2B,EAAOf,CAAG,CACZ,EACA,YAAa,CAACZ,EAAM,MAEpB,SAAAV,EAAA,IAAC0C,GAAA,CAEC,IAAApB,EACA,QAAAC,EACA,aAAAP,EACA,qBAAAZ,CAAA,EAJKM,EAAM,EAAA,CAKb,EAjBKA,EAAM,EAAA,CAmBd,EACDV,EAAA,IAACoB,GAAA,CACC,QAAS,IAAM,CACNgB,EAAA,CAAE,QAAS,CAAE,KAAM,OAAQ,cAAe,EAAG,EAAG,MAAO,GAAI,CACpE,EACD,SAAA,YAAA,CAAA,CAED,EACF,CAEJ,CClJA,KAAA,CAAA,kCAAAU,EAAA,EAAA,MAAA9D,EAAA,oCAAA,EACA,CAAA,oBAAA+D,GAAA,qBAAA7D,CAAA,EAAA,MAAAF,EAAA,wCAAA,EAIA,CAAAoC,OAAAA,EAAA4B,wBAAAA,GAAApC,qBAAAA,GAAAzB,sBAAAA,EAAA,MAAA8D,GAAA,UAAAC,GAAA,UAAAC,EAAA,UAAAC,EAAA,YAAAC,GAAA,SAAAC,EAAA,MAAAC,EAAA,EAAA,MAAAvE,EAAA,8BAAA,EAcA,CAAA,MAAAwE,EAAA,EAAA,MAAAxE,EAAA,OAAA,EAgBO,SAASyE,GAAuB,CACrC,MAAAC,EACA,KAAAC,EACA,OAAAtB,CACF,EAAgF,CACxE,KAAA,CAAE,oBAAAlC,CAAoB,EAAIjB,EAAqB,EAEnD,OAAAY,EAAA,KAACmD,GAAM,CAAA,UAAU,YACf,SAAA,CAACjD,EAAA,IAAAqD,GAAA,CACC,gBAACC,EACC,CAAA,SAAA,CAAAtD,EAAAA,IAACoD,GAAU,SAAS,WAAA,CAAA,EACpBpD,EAAAA,IAACoD,GAAU,SAAU,YAAA,CAAA,EACrBpD,EAAAA,IAACoD,GAAU,SAAI,MAAA,CAAA,EACfpD,EAAAA,IAACoD,GAAU,SAAO,SAAA,CAAA,CAAA,CAAA,CACpB,CACF,CAAA,EACApD,EAAAA,IAACkD,IACE,SAAMQ,EAAA,IAAI,CAACE,EAAMtC,WACfgC,EACC,CAAA,SAAA,CAACtD,EAAAA,IAAAmD,EAAA,CAAW,WAAK,IAAK,CAAA,QACrBA,EACE,CAAA,SAAAhD,EAAoB,WAAWyD,EAAK,QAAQ,EAC/C,EACA5D,EAAAA,IAACmD,EAAW,CAAA,SAAAS,EAAK,IAAK,CAAA,EACtB9D,EAAAA,KAACqD,EAAU,CAAA,UAAU,YACnB,SAAA,CAAAnD,EAAA,IAACoB,EAAA,CACC,QAAQ,OACR,KAAK,OACL,QAAS,IAAM,CACbuC,EAAKrC,CAAG,CACV,EACD,SAAA,MAAA,CAED,EACAtB,EAAA,IAACoB,EAAA,CACC,QAAQ,kBACR,KAAK,OACL,QAAS,IAAM,CACbiB,EAAOf,CAAG,CACZ,EACD,SAAA,QAAA,CAAA,CAED,CACF,CAAA,CAAA,GAzBasC,EAAK,EA0BpB,CACD,CACH,CAAA,CAAA,EACF,CAEJ,CAEA,MAAMC,GAAe,CACnB,CAAE,MAAO,SAAU,MAAO,QAAS,EACnC,CAAE,MAAO,OAAQ,MAAO,MAAO,CACjC,EAOA,SAASC,GAAsB,CAC7B,YAAAC,EACA,SAAAC,EACA,oBAAAxE,CACF,EAA6B,CACrB,KAAA,CAAE,WAAAC,CAAW,EAAIP,EAAqB,EACtC+E,EAA8BlB,GAClCD,EACF,EACMzD,EAAY6E,EAA0C,CAC1D,SAAUC,EAAYF,CAA2B,EACjD,cAAeF,CAAA,CAChB,EACK,CAAE,aAAAK,EAAc,QAAA7C,EAAS,MAAA8C,CAAU,EAAAhF,EAEnCiF,EAAe7E,EAAW,OAAO,IAAKF,IAAW,CACrD,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EAEIuC,EAAOuC,EAAM,MAAM,EAEnBE,EAASf,GAAM,EAGnB,OAAA1D,EAAA,KAAC,OAAA,CACC,SAAW0E,GAAM,CACfA,EAAE,gBAAgB,EAClBJ,EAAaJ,CAAQ,EAAEQ,CAAC,EAAE,MAAOC,GAAmB,CAC5ClB,GAAA,MAAMmB,EAAkBD,CAAK,CAAC,CAAA,CACrC,CACH,EACA,GAAIF,EACJ,UAAU,YAEV,SAAA,CAAAvE,EAAA,IAACY,GAAqB,CAAA,MAAM,OAAO,QAAAW,EAAkB,KAAK,OAAO,EACjEvB,EAAA,IAACb,EAAA,CACC,MAAM,OACN,QAAAoC,EACA,KAAK,OACL,QAASsC,EAAA,CACX,EACA7D,EAAA,IAACgD,GAAA,CACC,MAAM,4CACN,QAAAzB,EACA,KAAK,gBAAA,CACP,EACAvB,EAAA,IAACb,EAAA,CACC,MAAM,QACN,QAAAoC,EACA,QAAS+C,EACT,KAAK,UAAA,CACP,EACCxC,IAAS,QAENhC,EAAAA,KAAAC,EAAA,SAAA,CAAA,SAAA,CAAAC,EAAAA,IAAC,MAAG,SAAK,OAAA,CAAA,EACTA,EAAA,IAAC6C,EAAA,CACC,QAAAtB,CAAA,CAAA,CACF,EACF,EAEFvB,EAAAA,IAAC,MAAG,SAAI,MAAA,CAAA,EACRA,EAAA,IAACiC,EAAA,CACC,UAAA5C,EAGA,oBAAAG,CAAA,CACF,QACC4B,EAAO,CAAA,KAAK,SAAS,KAAMmD,EAAQ,SAEpC,MAAA,CAAA,CAAA,CAAA,CACF,CAEJ,CCzKA,KAAA,CAAA,qBAAArF,EAAA,EAAA,MAAAF,EAAA,wCAAA,EACA,CAAA,wBAAAgE,GAAA,sBAAA7D,EAAA,EAAA,MAAAH,EAAA,8BAAA,EAuBA,SAAS2F,GAAqB,CAC5B,UAAAzC,EACA,UAAA7C,CACF,EAA6B,CACrB,KAAA,CAAE,QAAAkC,GAAYlC,EACd,CAAE,WAAAI,CAAW,EAAIP,GAAqB,EAEtCoF,EAAe7E,EAAW,OAAO,IAAKF,IAAW,CACrD,MAAOA,EAAM,KACb,MAAOA,EAAM,EAAA,EACb,EAIIC,EACJiC,EAAS,CACP,QAAAF,EACA,KAAM,eAAA,CACP,GAAG,IAAKqD,IAAU,CACjB,MAAOA,EAAK,KACZ,MAAOA,EAAK,EACd,EAAE,GAAK,CAAC,EAIV,cACG,MAAI,CAAA,UAAWrC,EAAK,YAAaL,CAAS,EACzC,SAAA,CAAAlC,EAAA,IAACb,GAAA,CACC,MAAM,QACN,QAAAoC,EACA,QAAS+C,EACT,KAAK,UAAA,CACP,EACAtE,EAAA,IAACgD,GAAA,CACC,MAAM,kBACN,QAAAzB,EACA,KAAK,eAAA,CACP,EACAvB,EAAAA,IAAC,MAAG,SAAK,OAAA,CAAA,EACTA,EAAA,IAAC6C,EAAA,CACC,QAAAtB,CAAA,CACF,EACAvB,EAAAA,IAAC,MAAG,SAAI,MAAA,CAAA,EACRA,EAAA,IAACiC,EAAA,CACC,UAAA5C,EAGA,oBAAAG,CAAA,CACF,EACAQ,EAAAA,IAAC,MAAG,SAAc,gBAAA,CAAA,EAClBA,EAAA,IAAC6E,EAAkB,mBAAlB,CACC,QAAAtD,EACA,KAAK,gBACL,WAAalC,GACXW,EAAA,IAAC8D,GAAA,CACE,GAAGzE,EACJ,oBAAAG,CAAA,CACF,EAEF,YAAcsF,GAAgB9E,EAAAA,IAAAyD,GAAA,CAAwB,GAAGqB,EAAY,EACrE,aAAc,CAAE,KAAM,QAAS,CAAA,CAAA,CACjC,EACF,CAEJ,CC1FA,KAAA,CAAA,uBAAAC,EAAA,yBAAAC,EAAA,EAAA,MAAAhG,EAAA,oCAAA,EAIA,CAAA,+BAAAiG,GAAA,oBAAAlC,GAAA,qBAAA7D,GAAA,kBAAAgG,EAAA,EAAA,MAAAlG,EAAA,wCAAA,EAMA,CAAA,OAAAoC,EAAA,wBAAA+D,GAAA,qBAAAvE,EAAA,sBAAAzB,GAAA,iBAAAiG,EAAA,EAAA,MAAApG,EAAA,8BAAA,EAUA,CAAA,UAAAqG,EAAA,EAAA,MAAArG,EAAA,OAAA,EAIMsG,GAAkB,CAAC,CAAEC,MAAO,OAAQC,MAAO,MAAO,CAAC,EAAEC,GAAA,UAmBL,CAC9C,KAAA,CAAEC,eAAAA,GAAmBN,GAAiB,EACtC,CAAEO,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAC1B,CACJC,2BAAAA,EACAC,+BAAAA,EACAC,mBAAAA,EACAvG,WAAAA,GACEP,GAAqB,EACnB+G,EAAWC,GAAY,EACvB,CAAEC,gBAAAA,EAAiBC,UAAAA,EAAWC,gBAAAA,CAAAA,EAAoBT,EAAMU,cAAc,EAEtEC,EAAqBxD,GAAoBiC,EAAwB,EAEjE3F,EAAY6F,GAAkB,CAClCsB,OAAQH,EACRI,cAAe,CAAE3E,KAAM,MAAO,EAC9B4E,SAAUvC,EAAYoC,CAAkB,CAAA,CACzC,EAEK,CAAEhF,QAAAA,EAAS6C,aAAAA,EAAcC,MAAAA,EAAOsC,MAAAA,CAAAA,EAAUtH,EAEhDgG,GAAU,IAAM,CACdsB,EAAMN,GAAmB,CAAEvE,KAAM,MAAA,CAAQ,CAAA,EACxC,CAAC6E,EAAON,CAAe,CAAC,EAErBrC,MAAAA,EAAWI,EAAuBwC,GAAA,CACtC,MAAMC,EAAKD,EAAKC,IAAM9B,EAAuB+B,cAAc,EAC3D,OAAOhB,EACOjE,GAAA,CACJkF,MAAAA,EAAWlF,EAAOmF,KAAKC,QAClBC,EAAIL,KAAOV,EAAgBU,EACtC,EACIE,GAAAA,GAAUjF,OAAS,QACf,MAAA,IAAIqF,MAAM,yCAAyC,EAG3DJ,EAASK,SAAWC,GAClB,CACE,IAAIN,EAASK,UAAY,CAAA,GAAIE,UACd,CAAClB,GAAamB,EAAQV,KAAOT,CAC5C,EACA,CAAE,GAAGQ,EAAMC,GAAAA,CAAI,CAAA,EAEjB,CAAcU,GAAAA,EAAQjI,IAAI,CAC5B,CAAA,EAEF,CACEkI,UAAWA,IAAM,CACVpB,GACMH,EAAA,CACPwB,GAAI,6CACJC,OAAQ,CAAE/B,IAAAA,EAAKgC,WAAY5C,EAAuB6C,UAAUf,CAAE,CAAA,CAAE,CACjE,CACH,CACF,CAEJ,CAAA,CACD,EAE8B5B,GAAA,CAAE1D,QAAAA,EAASoF,MAAAA,EAAO3C,SAAAA,CAAAA,CAAU,EAErDlC,MAAAA,EAAOuC,EAAM,MAAM,EAEzB,SAASwD,GAAqB,CACbnC,EAAA,CACboC,MAAO,iBACPC,QAAS,mCACP1B,GAAiB/G,MAAQ,cAAc,IAEzC0I,UAAWA,IAAM,CACfjC,EACclE,GAAA,CACJkF,MAAAA,EAAWlF,EAAOmF,KAAKC,QAClBC,EAAIL,KAAOV,EAAgBU,EACtC,EACIE,GAAAA,GAAUjF,OAAS,QACf,MAAA,IAAIqF,MAAM,yCAAyC,EAGlDC,EAAAA,UAAYL,EAASK,UAAY,CAAA,GAAIE,OAC3CC,GAAY,CAACnB,GAAamB,EAAQV,KAAOT,CAC5C,CAAA,EAEF,CACE6B,eAAgB,gCAChBT,UAAWA,IAAM,CACNvB,EAAA,CAAEwB,GAAI,IAAA,CAAM,CAAA,CACvB,CAEJ,CAAA,CACF,CACD,CAAA,CAGH,MAAMS,EAAiBzI,EAAW0I,SAASC,IAAY3H,IAAA,CACrD8E,MAAO9E,EAAEnB,KACTkG,MAAO/E,EAAEoG,EAAAA,EACT,EAGA,OAAA7G,EAAA,IAAC,OAAI,UAAU,MACb,gBAAC,OAAK,CAAA,SAAAgE,EAAoB,UAAU,YACjCoC,SAAAA,CAAAA,SACEhF,EACC,CAAA,QAAQ,OACR,KAAK,OACL,QAAS,IAAM,CACAyG,EAAA,CAAA,EACb,SAGJ,iBAAA,QAEDjH,EAAqB,CAAA,MAAM,OAAO,QAAAW,EAAkB,KAAK,OAAM,EAChEvB,MAACmF,IACC,MAAM,UACN,QAAA5D,EACA,QAAS2G,EACT,KAAK,aAAY,QAElBtH,EAAqB,CAAA,MAAM,OAAO,QAAAW,EAAkB,KAAK,OAAM,EAChEvB,MAACb,IACC,MAAM,OACN,QAAAoC,EACA,KAAK,OACL,QAAS+D,GAAgB,GAEzB,IAAM,CACN,OAAQxD,EAAc,CACpB,IAAK,OACI,OAAA9B,MAAC2E,IAAqB,UAAAtF,EAAwB,EAEvD,QACE,cAAQ,MAAI,CAAA,SAAA,CAAA,oBAAkByC,CAAAA,EAAK,CACrC,CACF,GACC,QACFV,EAAO,CAAA,KAAK,SAAS,SAAU4E,EAAmB,SAEnD,MAAA,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{i as d}from"./_virtual___federation_fn_import-
|
|
2
|
-
//# sourceMappingURL=service-
|
|
1
|
+
import{i as d}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{e as C,j as e,b as _,f as O}from"./index.esm-CyH9wtdI.js";import{s as U,v as B,r as A}from"./index-gE__lQ6b.js";import{u as D,S as z,B as N,E as H}from"./-constants-gwObfy2j.js";import{u as V}from"./use-model-form-D4qoaVd7.js";import{B as L}from"./badge-with-type-label-BuG6yCtf.js";import{c as k,B as G,I as K,P as q}from"./index-BS45dlQs.js";const{ModelTransformerUtils:Y}=await d("@baseplate-dev/project-builder-lib"),{modelTransformerWebSpec:J,useProjectDefinition:Q}=await d("@baseplate-dev/project-builder-lib/web"),{Label:M,SectionListSection:X,SectionListSectionContent:Z,SectionListSectionDescription:ee,SectionListSectionHeader:te,SectionListSectionTitle:se,SwitchField:v}=await d("@baseplate-dev/ui-components");function ne({className:h,control:i,setValue:o}){const a=D(t=>t.model.fields),p=C({control:i,name:"service.create"}),s=C({control:i,name:"service.update"}),m=p?.enabled,n=s?.enabled,u=C({control:i,name:"service.transformers"})??[],{definitionContainer:r,pluginContainer:j}=Q();if(!m&&!n)return null;const c=p?.fields??[],S=s?.fields??[],b=p?.transformerNames??[],l=s?.transformerNames??[],g="w-full border-collapse text-left [&_td]:py-1 [&_th]:sticky [&_th]:top-0 [&_th]:bg-background [&_th]:z-10 [&_th]:py-2",T=j.getPluginSpec(J);return e.jsxs(X,{className:h,children:[e.jsxs(te,{children:[e.jsx(se,{children:"Create / Update Fields"}),e.jsx(ee,{children:"Configure the fields that can be created or updated by the service method"})]}),e.jsx(Z,{className:"max-w-xl space-y-4",children:e.jsxs("table",{className:g,children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx("th",{className:"w-full",children:e.jsx(M,{children:"Fields"})}),m&&e.jsx("th",{className:"pl-8",children:"Create"}),n&&e.jsx("th",{className:"pl-8",children:"Update"})]})}),e.jsxs("tbody",{children:[a.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx(L,{type:t.type==="enum"&&t.options?.enumRef?r.nameFromId(t.options.enumRef):z[t.type].label,children:t.name})}),m&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:c.includes(t.id),onChange:f=>{o("service.create.fields",f?[...c,t.id]:c.filter(x=>x!==t.id),{shouldDirty:!0})}})}),n&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:S.includes(t.id),onChange:f=>{o("service.update.fields",f?[...S,t.id]:S.filter(x=>x!==t.id),{shouldDirty:!0})}})})]},t.id)),u.length>0&&e.jsx("tr",{children:e.jsx("th",{children:e.jsx(M,{children:"Transformers"})})}),u.map(t=>e.jsxs("tr",{children:[e.jsx("td",{children:e.jsx(L,{type:T.getTransformerWebConfig(t.type,N).label,children:Y.getTransformName(r,t,j)})}),m&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:b.includes(t.id),onChange:f=>{o("service.create.transformerNames",f?[...b,t.id]:b.filter(x=>x!==t.id),{shouldDirty:!0})}})}),n&&e.jsx("td",{className:"pl-8",children:e.jsx(v,{value:l.includes(t.id),onChange:f=>{o("service.update.transformerNames",f?[...l,t.id]:l.filter(x=>x!==t.id),{shouldDirty:!0})}})})]},t.id))]})]})})]})}const{createTransformerSchema:ie,modelTransformerEntityType:re}=await d("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:oe}=await d("@baseplate-dev/project-builder-lib/web"),{Button:E,DialogClose:ae,DialogFooter:ce}=await d("@baseplate-dev/ui-components"),{useId:le,useMemo:de}=await d("react"),{z:me}=await d("zod");function pe({className:h,webConfig:{Form:i,pluginId:o},transformer:a,onUpdate:p,isCreate:s}){const m=D(l=>l),n=oe(ie),u=de(()=>me.object({transformer:n}),[n]),r=_({resolver:U(u),defaultValues:{transformer:a}}),{handleSubmit:j,formState:{isDirty:c}}=r,S=j(l=>{p({...l.transformer,id:l.transformer.id?l.transformer.id:re.generateNewId()})}),b=le();return i?e.jsxs("form",{className:k("space-y-4",h),id:b,onSubmit:l=>(l.stopPropagation(),S(l)),children:[e.jsx(i,{formProps:r,name:"transformer",originalModel:m,pluginId:o}),e.jsxs(ce,{children:[e.jsx(ae,{asChild:!0,children:e.jsx(E,{variant:"secondary",children:"Cancel"})}),e.jsx(E,{type:"submit",disabled:!s&&!c,form:b,children:"Save"})]})]}):null}const{Dialog:ue,DialogContent:he,DialogDescription:fe,DialogHeader:xe,DialogTitle:je,DialogTrigger:Se,useControlledState:be}=await d("@baseplate-dev/ui-components");function R({children:h,transformer:i,asChild:o,webConfig:a,open:p,onOpenChange:s,onUpdate:m,isCreate:n}){const[u,r]=be(p,s,!1);return e.jsxs(ue,{open:u,onOpenChange:r,children:[h&&e.jsx(Se,{asChild:o,children:h}),e.jsxs(he,{children:[e.jsxs(xe,{children:[e.jsxs(je,{children:[n?"Create":"Edit"," ",a?.label," Transformer"]}),e.jsx(fe,{children:a?.instructions??"Manage the transformer for the service"})]}),a&&e.jsx(pe,{transformer:i,onUpdate:j=>{r(!1),m(j)},webConfig:a,isCreate:n})]})]})}const{modelTransformerWebSpec:$,useProjectDefinition:P}=await d("@baseplate-dev/project-builder-lib/web"),{Button:y,DropdownMenu:ge,DropdownMenuContent:ve,DropdownMenuGroup:Ce,DropdownMenuItem:Te,DropdownMenuTrigger:we,RecordView:ye,RecordViewActions:De,RecordViewItem:F,RecordViewItemList:Ne,SectionListSection:Le,SectionListSectionContent:Me,SectionListSectionDescription:Ee,SectionListSectionHeader:Fe,SectionListSectionTitle:Ie,useConfirmDialog:Re}=await d("@baseplate-dev/ui-components"),{useState:I}=await d("react");function $e({formProps:h,idx:i,onRemove:o,onUpdate:a}){const{pluginContainer:p,definitionContainer:s}=P(),{control:m}=h,n=C({control:m,name:`service.transformers.${i}`}),r=p.getPluginSpec($).getTransformerWebConfig(n.type,N),j=r.getSummary(n,s);return e.jsxs(ye,{children:[e.jsxs(Ne,{children:[e.jsx(F,{title:"Type",children:r.label}),j.map(c=>e.jsx(F,{title:c.label,children:c.description},c.label))]}),e.jsxs(De,{children:[r.Form&&e.jsx(R,{webConfig:r,transformer:n,onUpdate:c=>{a(c,i)},asChild:!0,isCreate:!1,children:e.jsx(y,{variant:"ghost",size:"icon",title:"Edit",children:e.jsx(K,{})})}),e.jsx(y,{variant:"ghost",size:"icon",onClick:()=>{o(i)},title:"Remove",className:"text-destructive hover:text-destructive-hover",children:e.jsx(q,{})})]})]})}function Pe({className:h,formProps:i}){const{control:o}=i,{fields:a,remove:p,append:s,update:m}=O({control:o,name:"service.transformers"}),{pluginContainer:n,definitionContainer:u}=P(),{requestConfirm:r}=Re(),j=n.getPluginSpec($),c=D(t=>t),S=j.getTransformerWebConfigs(N).filter(t=>t.allowNewTransformer?t.allowNewTransformer(u,c):!0),[b,l]=I(!1),[g,T]=I(0);return e.jsxs(Le,{className:h,children:[e.jsxs(Fe,{children:[e.jsx(Ie,{children:"Transformers"}),e.jsx(Ee,{children:"Transformers are used to operate on the data from the client into the shape that the database ORM expects."})]}),e.jsxs(Me,{className:"max-w-xl space-y-4",children:[a.map((t,f)=>e.jsx($e,{formProps:i,idx:f,onUpdate:(x,W)=>{m(W,x)},onRemove:x=>{r({title:"Confirm delete",content:"Are you sure you want to delete this transformer?",buttonConfirmText:"Delete",buttonConfirmVariant:"destructive",onConfirm:()=>{p(x)}})}},t.id)),S.length>0&&e.jsxs(ge,{children:[e.jsx(we,{asChild:!0,children:e.jsxs(y,{variant:"secondary",size:"sm",children:[e.jsx(G,{}),"Add Transformer"]})}),e.jsx(ve,{children:e.jsx(Ce,{children:S.map((t,f)=>e.jsx(Te,{onSelect:()=>{t.Form?(T(f),l(!0)):s(t.getNewTransformer(u,c))},children:e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx("div",{children:t.label}),e.jsx("div",{className:"text-style-muted",children:t.description})]})},t.name))})})]}),e.jsx(R,{webConfig:S[g],transformer:S[g]?.getNewTransformer(u,c),onUpdate:t=>{s(t)},open:b,onOpenChange:l,isCreate:!0})]})]})}const{modelTransformerEntityType:We}=await d("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:_e}=await d("@baseplate-dev/project-builder-lib/web"),{FormActionBar:Oe,SectionList:Ue,SectionListSection:Be,SectionListSectionContent:Ae,SectionListSectionDescription:ze,SectionListSectionHeader:He,SectionListSectionTitle:Ve,SwitchFieldController:w}=await d("@baseplate-dev/ui-components");A(We,"/data/models/edit/{parentKey}");const Xe=function(){const{key:i}=B.useParams(),{form:o,onSubmit:a,defaultValues:p}=V({omit:["name","featureRef"],modelKey:i}),{control:s,watch:m,getValues:n,setValue:u,reset:r}=o;return _e({control:s,reset:r,onSubmit:a}),e.jsx(H,{initialModel:p,getValues:n,watch:m,children:e.jsxs("form",{onSubmit:a,className:"w-full max-w-7xl space-y-4 p-4",children:[e.jsxs(Ue,{children:[e.jsxs(Be,{children:[e.jsxs(He,{children:[e.jsx(Ve,{children:"Methods"}),e.jsx(ze,{children:"Enable or disable which service methods will be generated"})]}),e.jsxs(Ae,{className:"flex gap-8",children:[e.jsx(w,{label:"Create",name:"service.create.enabled",control:s}),e.jsx(w,{label:"Update",name:"service.update.enabled",control:s}),e.jsx(w,{label:"Delete",name:"service.delete.enabled",control:s})]})]}),e.jsx(ne,{control:s,setValue:u}),e.jsx(Pe,{formProps:o})]}),e.jsx(Oe,{form:o})]})})};export{Xe as component};
|
|
2
|
+
//# sourceMappingURL=service-C6FdRXxU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-CH1p5s9d.js","sources":["../../src/routes/data/models/edit.$key/-components/service/service-method-fields-section.tsx","../../src/routes/data/models/edit.$key/-components/service/service-transformer-form.tsx","../../src/routes/data/models/edit.$key/-components/service/service-transformer-dialog.tsx","../../src/routes/data/models/edit.$key/-components/service/service-transformers-section.tsx","../../src/routes/data/models/edit.$key/service.tsx?tsr-split=component"],"sourcesContent":["import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, UseFormSetValue } from 'react-hook-form';\n\nimport { ModelTransformerUtils } from '@baseplate-dev/project-builder-lib';\nimport {\n modelTransformerWebSpec,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Label,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n SwitchField,\n} from '@baseplate-dev/ui-components';\nimport { useWatch } from 'react-hook-form';\n\nimport {\n BUILT_IN_TRANSFORMER_WEB_CONFIGS,\n SCALAR_FIELD_TYPE_OPTIONS,\n} from '../../../-constants.js';\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\nimport { BadgeWithTypeLabel } from '../badge-with-type-label.js';\n\ninterface ServiceMethodFieldsSectionProps {\n className?: string;\n control: Control<ModelConfigInput>;\n setValue: UseFormSetValue<ModelConfigInput>;\n}\n\nexport function ServiceMethodFieldsSection({\n className,\n control,\n setValue,\n}: ServiceMethodFieldsSectionProps): React.JSX.Element | null {\n const fields = useEditedModelConfig((model) => model.model.fields);\n const create = useWatch({ control, name: 'service.create' });\n const update = useWatch({ control, name: 'service.update' });\n const isCreateEnabled = create?.enabled;\n const isUpdateEnabled = update?.enabled;\n const transformers =\n useWatch({ control, name: 'service.transformers' }) ?? [];\n const { definitionContainer, pluginContainer } = useProjectDefinition();\n\n if (!isCreateEnabled && !isUpdateEnabled) {\n return null;\n }\n\n const createFields = create?.fields ?? [];\n const updateFields = update?.fields ?? [];\n\n const createTransformers = create?.transformerNames ?? [];\n const updateTransformers = update?.transformerNames ?? [];\n\n const tableClassName =\n 'w-full border-collapse text-left [&_td]:py-1 [&_th]:sticky [&_th]:top-0 [&_th]:bg-background [&_th]:z-10 [&_th]:py-2';\n\n const transformerWeb = pluginContainer.getPluginSpec(modelTransformerWebSpec);\n\n return (\n <SectionListSection className={className}>\n <SectionListSectionHeader>\n <SectionListSectionTitle>\n Create / Update Fields\n </SectionListSectionTitle>\n <SectionListSectionDescription>\n Configure the fields that can be created or updated by the service\n method\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"max-w-xl space-y-4\">\n <table className={tableClassName}>\n <thead>\n <tr>\n <th className=\"w-full\">\n <Label>Fields</Label>\n </th>\n {isCreateEnabled && <th className=\"pl-8\">Create</th>}\n {isUpdateEnabled && <th className=\"pl-8\">Update</th>}\n </tr>\n </thead>\n <tbody>\n {fields.map((field) => (\n <tr key={field.id}>\n <td>\n <BadgeWithTypeLabel\n type={\n field.type === 'enum' && field.options?.enumRef\n ? definitionContainer.nameFromId(field.options.enumRef)\n : SCALAR_FIELD_TYPE_OPTIONS[field.type].label\n }\n >\n {field.name}\n </BadgeWithTypeLabel>\n </td>\n {isCreateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={createFields.includes(field.id)}\n onChange={(value) => {\n setValue(\n 'service.create.fields',\n value\n ? [...createFields, field.id]\n : createFields.filter((id) => id !== field.id),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n {isUpdateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={updateFields.includes(field.id)}\n onChange={(value) => {\n setValue(\n 'service.update.fields',\n value\n ? [...updateFields, field.id]\n : updateFields.filter((id) => id !== field.id),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n </tr>\n ))}\n {transformers.length > 0 && (\n <tr>\n <th>\n <Label>Transformers</Label>\n </th>\n </tr>\n )}\n {transformers.map((transformer) => (\n <tr key={transformer.id}>\n <td>\n <BadgeWithTypeLabel\n type={\n transformerWeb.getTransformerWebConfig(\n transformer.type,\n BUILT_IN_TRANSFORMER_WEB_CONFIGS,\n ).label\n }\n >\n {ModelTransformerUtils.getTransformName(\n definitionContainer,\n transformer,\n pluginContainer,\n )}\n </BadgeWithTypeLabel>\n </td>\n {isCreateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={createTransformers.includes(transformer.id)}\n onChange={(value) => {\n setValue(\n 'service.create.transformerNames',\n value\n ? [...createTransformers, transformer.id]\n : createTransformers.filter(\n (id) => id !== transformer.id,\n ),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n {isUpdateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={updateTransformers.includes(transformer.id)}\n onChange={(value) => {\n setValue(\n 'service.update.transformerNames',\n value\n ? [...updateTransformers, transformer.id]\n : updateTransformers.filter(\n (id) => id !== transformer.id,\n ),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </SectionListSectionContent>\n </SectionListSection>\n );\n}\n","import type { TransformerConfig } from '@baseplate-dev/project-builder-lib';\nimport type { ModelTransformerWebConfig } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\n\nimport {\n createTransformerSchema,\n modelTransformerEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useDefinitionSchema } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n DialogClose,\n DialogFooter,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { clsx } from 'clsx';\nimport { useId, useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\n\ninterface ServiceTransformerFormProps {\n className?: string;\n webConfig: ModelTransformerWebConfig;\n transformer?: TransformerConfig;\n onUpdate: (transformer: TransformerConfig) => void;\n isCreate: boolean;\n}\n\nexport function ServiceTransformerForm({\n className,\n webConfig: { Form, pluginId },\n transformer,\n onUpdate,\n isCreate,\n}: ServiceTransformerFormProps): React.JSX.Element | null {\n const originalModel = useEditedModelConfig((model) => model);\n const transformerSchema = useDefinitionSchema(createTransformerSchema);\n const schema = useMemo(\n () =>\n z.object({\n transformer: transformerSchema,\n }),\n [transformerSchema],\n );\n const formProps = useForm<{ transformer: TransformerConfig }>({\n resolver: zodResolver(schema),\n defaultValues: { transformer },\n });\n const {\n handleSubmit,\n formState: { isDirty },\n } = formProps;\n\n const onSubmit = handleSubmit((data) => {\n onUpdate({\n ...data.transformer,\n id: data.transformer.id\n ? data.transformer.id\n : modelTransformerEntityType.generateNewId(),\n });\n });\n\n const formId = useId();\n\n if (!Form) {\n return null;\n }\n\n return (\n <form\n className={clsx('space-y-4', className)}\n id={formId}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n >\n <Form\n formProps={formProps}\n name=\"transformer\"\n originalModel={originalModel}\n pluginId={pluginId}\n />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={!isCreate && !isDirty} form={formId}>\n Save\n </Button>\n </DialogFooter>\n </form>\n );\n}\n","import type { TransformerConfig } from '@baseplate-dev/project-builder-lib';\nimport type { ModelTransformerWebConfig } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { ServiceTransformerForm } from './service-transformer-form.js';\n\ninterface ServiceTransformerDialogProps {\n children?: React.ReactNode;\n asChild?: boolean;\n open?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n webConfig: ModelTransformerWebConfig | undefined;\n transformer: TransformerConfig | undefined;\n onUpdate: (transformer: TransformerConfig) => void;\n isCreate: boolean;\n}\n\nexport function ServiceTransformerDialog({\n children,\n transformer,\n asChild,\n webConfig,\n open,\n onOpenChange,\n onUpdate,\n isCreate,\n}: ServiceTransformerDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>\n {isCreate ? 'Create' : 'Edit'} {webConfig?.label} Transformer\n </DialogTitle>\n <DialogDescription>\n {webConfig?.instructions ??\n 'Manage the transformer for the service'}\n </DialogDescription>\n </DialogHeader>\n {webConfig && (\n <ServiceTransformerForm\n transformer={transformer}\n onUpdate={(transformer) => {\n setIsOpen(false);\n onUpdate(transformer);\n }}\n webConfig={webConfig}\n isCreate={isCreate}\n />\n )}\n </DialogContent>\n </Dialog>\n );\n}\n","import type {\n ModelConfigInput,\n TransformerConfig,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport {\n modelTransformerWebSpec,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n RecordView,\n RecordViewActions,\n RecordViewItem,\n RecordViewItemList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport { useState } from 'react';\nimport { useFieldArray, useWatch } from 'react-hook-form';\nimport { MdAdd, MdEdit, MdOutlineDelete } from 'react-icons/md';\n\nimport { BUILT_IN_TRANSFORMER_WEB_CONFIGS } from '#src/routes/data/models/-constants.js';\n\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\nimport { ServiceTransformerDialog } from './service-transformer-dialog.js';\n\ninterface Props {\n className?: string;\n formProps: UseFormReturn<ModelConfigInput>;\n}\n\nfunction ServiceTransformerRecord({\n formProps,\n idx,\n onRemove,\n onUpdate,\n}: {\n formProps: UseFormReturn<ModelConfigInput>;\n idx: number;\n onUpdate: (transformer: TransformerConfig, idx: number) => void;\n onRemove: (idx: number) => void;\n}): React.JSX.Element {\n const { pluginContainer, definitionContainer } = useProjectDefinition();\n const { control } = formProps;\n\n const field = useWatch({\n control,\n name: `service.transformers.${idx}`,\n });\n\n const transformerWeb = pluginContainer.getPluginSpec(modelTransformerWebSpec);\n const transformerConfig = transformerWeb.getTransformerWebConfig(\n field.type,\n BUILT_IN_TRANSFORMER_WEB_CONFIGS,\n );\n const summary = transformerConfig.getSummary(field, definitionContainer);\n return (\n <RecordView>\n <RecordViewItemList>\n <RecordViewItem title=\"Type\">{transformerConfig.label}</RecordViewItem>\n {summary.map((item) => (\n <RecordViewItem key={item.label} title={item.label}>\n {item.description}\n </RecordViewItem>\n ))}\n </RecordViewItemList>\n <RecordViewActions>\n {transformerConfig.Form && (\n <ServiceTransformerDialog\n webConfig={transformerConfig}\n transformer={field}\n onUpdate={(transformer) => {\n onUpdate(transformer, idx);\n }}\n asChild\n isCreate={false}\n >\n <Button variant=\"ghost\" size=\"icon\" title=\"Edit\">\n <MdEdit />\n </Button>\n </ServiceTransformerDialog>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => {\n onRemove(idx);\n }}\n title=\"Remove\"\n className=\"text-destructive hover:text-destructive-hover\"\n >\n <MdOutlineDelete />\n </Button>\n </RecordViewActions>\n </RecordView>\n );\n}\n\nexport function ServiceTransformersSection({\n className,\n formProps,\n}: Props): React.JSX.Element | null {\n const { control } = formProps;\n const { fields, remove, append, update } = useFieldArray({\n control,\n name: `service.transformers`,\n });\n const { pluginContainer, definitionContainer } = useProjectDefinition();\n\n const { requestConfirm } = useConfirmDialog();\n\n const transformerWeb = pluginContainer.getPluginSpec(modelTransformerWebSpec);\n\n const modelConfig = useEditedModelConfig((model) => model);\n\n const addableTransformers = transformerWeb\n .getTransformerWebConfigs(BUILT_IN_TRANSFORMER_WEB_CONFIGS)\n .filter((transformer) =>\n transformer.allowNewTransformer\n ? transformer.allowNewTransformer(definitionContainer, modelConfig)\n : true,\n );\n\n const [isNewTransfomerDialogOpen, setIsNewTransformerDialogOpen] =\n useState(false);\n const [addableTransformerIdx, setAddableTransformerIdx] = useState<number>(0);\n\n return (\n <SectionListSection className={className}>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Transformers</SectionListSectionTitle>\n <SectionListSectionDescription>\n Transformers are used to operate on the data from the client into the\n shape that the database ORM expects.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"max-w-xl space-y-4\">\n {fields.map((field, idx) => (\n <ServiceTransformerRecord\n key={field.id}\n formProps={formProps}\n idx={idx}\n onUpdate={(transformer, idx) => {\n update(idx, transformer);\n }}\n onRemove={(idx) => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete this transformer?`,\n buttonConfirmText: 'Delete',\n buttonConfirmVariant: 'destructive',\n onConfirm: () => {\n remove(idx);\n },\n });\n }}\n />\n ))}\n {addableTransformers.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"secondary\" size=\"sm\">\n <MdAdd />\n Add Transformer\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {addableTransformers.map((transformer, idx) => (\n <DropdownMenuItem\n key={transformer.name}\n onSelect={() => {\n if (transformer.Form) {\n setAddableTransformerIdx(idx);\n setIsNewTransformerDialogOpen(true);\n } else {\n append(\n transformer.getNewTransformer(\n definitionContainer,\n modelConfig,\n ),\n );\n }\n }}\n >\n <div className=\"flex flex-col gap-1\">\n <div>{transformer.label}</div>\n <div className=\"text-style-muted\">\n {transformer.description}\n </div>\n </div>\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <ServiceTransformerDialog\n webConfig={addableTransformers[addableTransformerIdx]}\n transformer={addableTransformers[\n addableTransformerIdx\n ]?.getNewTransformer(definitionContainer, modelConfig)}\n onUpdate={(transformer) => {\n append(transformer);\n }}\n open={isNewTransfomerDialogOpen}\n onOpenChange={setIsNewTransformerDialogOpen}\n isCreate={true}\n />\n </SectionListSectionContent>\n </SectionListSection>\n );\n}\n","import type React from 'react';\n\nimport { modelTransformerEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useBlockUnsavedChangesNavigate } from '@baseplate-dev/project-builder-lib/web';\nimport {\n FormActionBar,\n SectionList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n SwitchFieldController,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute } from '@tanstack/react-router';\n\nimport { registerEntityTypeUrl } from '#src/services/entity-type.js';\n\nimport { EditedModelContextProvider } from '../-hooks/use-edited-model-config.js';\nimport { useModelForm } from '../-hooks/use-model-form.js';\nimport { ServiceMethodFieldsSection } from './-components/service/service-method-fields-section.js';\nimport { ServiceTransformersSection } from './-components/service/service-transformers-section.js';\n\nregisterEntityTypeUrl(\n modelTransformerEntityType,\n `/data/models/edit/{parentKey}`,\n);\n\nexport const Route = createFileRoute('/data/models/edit/$key/service')({\n component: ModelEditServicePage,\n beforeLoad: () => ({\n getTitle: () => 'Service',\n }),\n});\n\nfunction ModelEditServicePage(): React.JSX.Element {\n const { key } = Route.useParams();\n const { form, onSubmit, defaultValues } = useModelForm({\n omit: ['name', 'featureRef'],\n modelKey: key,\n });\n const { control, watch, getValues, setValue, reset } = form;\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n return (\n <EditedModelContextProvider\n initialModel={defaultValues}\n getValues={getValues}\n watch={watch}\n >\n <form onSubmit={onSubmit} className=\"w-full max-w-7xl space-y-4 p-4\">\n <SectionList>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Methods</SectionListSectionTitle>\n <SectionListSectionDescription>\n Enable or disable which service methods will be generated\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"flex gap-8\">\n <SwitchFieldController\n label=\"Create\"\n name=\"service.create.enabled\"\n control={control}\n />\n <SwitchFieldController\n label=\"Update\"\n name=\"service.update.enabled\"\n control={control}\n />\n <SwitchFieldController\n label=\"Delete\"\n name=\"service.delete.enabled\"\n control={control}\n />\n </SectionListSectionContent>\n </SectionListSection>\n <ServiceMethodFieldsSection control={control} setValue={setValue} />\n <ServiceTransformersSection formProps={form} />\n </SectionList>\n <FormActionBar form={form} />\n </form>\n </EditedModelContextProvider>\n );\n}\n"],"names":["ModelTransformerUtils","importShared","modelTransformerWebSpec","useProjectDefinition","Label","SectionListSection","SectionListSectionContent","SectionListSectionDescription","SectionListSectionHeader","SectionListSectionTitle","SwitchField","ServiceMethodFieldsSection","className","control","setValue","fields","useEditedModelConfig","model","create","useWatch","update","isCreateEnabled","isUpdateEnabled","transformers","definitionContainer","pluginContainer","createFields","updateFields","createTransformers","updateTransformers","tableClassName","transformerWeb","jsxs","jsx","field","BadgeWithTypeLabel","SCALAR_FIELD_TYPE_OPTIONS","value","id","transformer","BUILT_IN_TRANSFORMER_WEB_CONFIGS","createTransformerSchema","modelTransformerEntityType","useDefinitionSchema","Button","DialogClose","DialogFooter","useId","useMemo","z","ServiceTransformerForm","Form","pluginId","onUpdate","isCreate","originalModel","transformerSchema","schema","formProps","useForm","zodResolver","handleSubmit","isDirty","onSubmit","data","formId","clsx","e","Dialog","DialogContent","DialogDescription","DialogHeader","DialogTitle","DialogTrigger","useControlledState","ServiceTransformerDialog","children","asChild","webConfig","open","onOpenChange","isOpen","setIsOpen","DropdownMenu","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuTrigger","RecordView","RecordViewActions","RecordViewItem","RecordViewItemList","useConfirmDialog","useState","ServiceTransformerRecord","idx","onRemove","transformerConfig","summary","item","MdEdit","MdOutlineDelete","ServiceTransformersSection","remove","append","useFieldArray","requestConfirm","modelConfig","addableTransformers","isNewTransfomerDialogOpen","setIsNewTransformerDialogOpen","addableTransformerIdx","setAddableTransformerIdx","MdAdd","useBlockUnsavedChangesNavigate","FormActionBar","SectionList","SwitchFieldController","registerEntityTypeUrl","SplitComponent","key","Route","useParams","form","defaultValues","useModelForm","omit","modelKey","watch","getValues","reset","EditedModelContextProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service-C6FdRXxU.js","sources":["../../src/routes/data/models/edit.$key/-components/service/service-method-fields-section.tsx","../../src/routes/data/models/edit.$key/-components/service/service-transformer-form.tsx","../../src/routes/data/models/edit.$key/-components/service/service-transformer-dialog.tsx","../../src/routes/data/models/edit.$key/-components/service/service-transformers-section.tsx","../../src/routes/data/models/edit.$key/service.tsx?tsr-split=component"],"sourcesContent":["import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { Control, UseFormSetValue } from 'react-hook-form';\n\nimport { ModelTransformerUtils } from '@baseplate-dev/project-builder-lib';\nimport {\n modelTransformerWebSpec,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Label,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n SwitchField,\n} from '@baseplate-dev/ui-components';\nimport { useWatch } from 'react-hook-form';\n\nimport {\n BUILT_IN_TRANSFORMER_WEB_CONFIGS,\n SCALAR_FIELD_TYPE_OPTIONS,\n} from '../../../-constants.js';\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\nimport { BadgeWithTypeLabel } from '../badge-with-type-label.js';\n\ninterface ServiceMethodFieldsSectionProps {\n className?: string;\n control: Control<ModelConfigInput>;\n setValue: UseFormSetValue<ModelConfigInput>;\n}\n\nexport function ServiceMethodFieldsSection({\n className,\n control,\n setValue,\n}: ServiceMethodFieldsSectionProps): React.JSX.Element | null {\n const fields = useEditedModelConfig((model) => model.model.fields);\n const create = useWatch({ control, name: 'service.create' });\n const update = useWatch({ control, name: 'service.update' });\n const isCreateEnabled = create?.enabled;\n const isUpdateEnabled = update?.enabled;\n const transformers =\n useWatch({ control, name: 'service.transformers' }) ?? [];\n const { definitionContainer, pluginContainer } = useProjectDefinition();\n\n if (!isCreateEnabled && !isUpdateEnabled) {\n return null;\n }\n\n const createFields = create?.fields ?? [];\n const updateFields = update?.fields ?? [];\n\n const createTransformers = create?.transformerNames ?? [];\n const updateTransformers = update?.transformerNames ?? [];\n\n const tableClassName =\n 'w-full border-collapse text-left [&_td]:py-1 [&_th]:sticky [&_th]:top-0 [&_th]:bg-background [&_th]:z-10 [&_th]:py-2';\n\n const transformerWeb = pluginContainer.getPluginSpec(modelTransformerWebSpec);\n\n return (\n <SectionListSection className={className}>\n <SectionListSectionHeader>\n <SectionListSectionTitle>\n Create / Update Fields\n </SectionListSectionTitle>\n <SectionListSectionDescription>\n Configure the fields that can be created or updated by the service\n method\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"max-w-xl space-y-4\">\n <table className={tableClassName}>\n <thead>\n <tr>\n <th className=\"w-full\">\n <Label>Fields</Label>\n </th>\n {isCreateEnabled && <th className=\"pl-8\">Create</th>}\n {isUpdateEnabled && <th className=\"pl-8\">Update</th>}\n </tr>\n </thead>\n <tbody>\n {fields.map((field) => (\n <tr key={field.id}>\n <td>\n <BadgeWithTypeLabel\n type={\n field.type === 'enum' && field.options?.enumRef\n ? definitionContainer.nameFromId(field.options.enumRef)\n : SCALAR_FIELD_TYPE_OPTIONS[field.type].label\n }\n >\n {field.name}\n </BadgeWithTypeLabel>\n </td>\n {isCreateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={createFields.includes(field.id)}\n onChange={(value) => {\n setValue(\n 'service.create.fields',\n value\n ? [...createFields, field.id]\n : createFields.filter((id) => id !== field.id),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n {isUpdateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={updateFields.includes(field.id)}\n onChange={(value) => {\n setValue(\n 'service.update.fields',\n value\n ? [...updateFields, field.id]\n : updateFields.filter((id) => id !== field.id),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n </tr>\n ))}\n {transformers.length > 0 && (\n <tr>\n <th>\n <Label>Transformers</Label>\n </th>\n </tr>\n )}\n {transformers.map((transformer) => (\n <tr key={transformer.id}>\n <td>\n <BadgeWithTypeLabel\n type={\n transformerWeb.getTransformerWebConfig(\n transformer.type,\n BUILT_IN_TRANSFORMER_WEB_CONFIGS,\n ).label\n }\n >\n {ModelTransformerUtils.getTransformName(\n definitionContainer,\n transformer,\n pluginContainer,\n )}\n </BadgeWithTypeLabel>\n </td>\n {isCreateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={createTransformers.includes(transformer.id)}\n onChange={(value) => {\n setValue(\n 'service.create.transformerNames',\n value\n ? [...createTransformers, transformer.id]\n : createTransformers.filter(\n (id) => id !== transformer.id,\n ),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n {isUpdateEnabled && (\n <td className=\"pl-8\">\n <SwitchField\n value={updateTransformers.includes(transformer.id)}\n onChange={(value) => {\n setValue(\n 'service.update.transformerNames',\n value\n ? [...updateTransformers, transformer.id]\n : updateTransformers.filter(\n (id) => id !== transformer.id,\n ),\n { shouldDirty: true },\n );\n }}\n />\n </td>\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </SectionListSectionContent>\n </SectionListSection>\n );\n}\n","import type { TransformerConfig } from '@baseplate-dev/project-builder-lib';\nimport type { ModelTransformerWebConfig } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\n\nimport {\n createTransformerSchema,\n modelTransformerEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useDefinitionSchema } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n DialogClose,\n DialogFooter,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { clsx } from 'clsx';\nimport { useId, useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { z } from 'zod';\n\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\n\ninterface ServiceTransformerFormProps {\n className?: string;\n webConfig: ModelTransformerWebConfig;\n transformer?: TransformerConfig;\n onUpdate: (transformer: TransformerConfig) => void;\n isCreate: boolean;\n}\n\nexport function ServiceTransformerForm({\n className,\n webConfig: { Form, pluginId },\n transformer,\n onUpdate,\n isCreate,\n}: ServiceTransformerFormProps): React.JSX.Element | null {\n const originalModel = useEditedModelConfig((model) => model);\n const transformerSchema = useDefinitionSchema(createTransformerSchema);\n const schema = useMemo(\n () =>\n z.object({\n transformer: transformerSchema,\n }),\n [transformerSchema],\n );\n const formProps = useForm<{ transformer: TransformerConfig }>({\n resolver: zodResolver(schema),\n defaultValues: { transformer },\n });\n const {\n handleSubmit,\n formState: { isDirty },\n } = formProps;\n\n const onSubmit = handleSubmit((data) => {\n onUpdate({\n ...data.transformer,\n id: data.transformer.id\n ? data.transformer.id\n : modelTransformerEntityType.generateNewId(),\n });\n });\n\n const formId = useId();\n\n if (!Form) {\n return null;\n }\n\n return (\n <form\n className={clsx('space-y-4', className)}\n id={formId}\n onSubmit={(e) => {\n e.stopPropagation();\n return onSubmit(e);\n }}\n >\n <Form\n formProps={formProps}\n name=\"transformer\"\n originalModel={originalModel}\n pluginId={pluginId}\n />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={!isCreate && !isDirty} form={formId}>\n Save\n </Button>\n </DialogFooter>\n </form>\n );\n}\n","import type { TransformerConfig } from '@baseplate-dev/project-builder-lib';\nimport type { ModelTransformerWebConfig } from '@baseplate-dev/project-builder-lib/web';\nimport type React from 'react';\n\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { ServiceTransformerForm } from './service-transformer-form.js';\n\ninterface ServiceTransformerDialogProps {\n children?: React.ReactNode;\n asChild?: boolean;\n open?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n webConfig: ModelTransformerWebConfig | undefined;\n transformer: TransformerConfig | undefined;\n onUpdate: (transformer: TransformerConfig) => void;\n isCreate: boolean;\n}\n\nexport function ServiceTransformerDialog({\n children,\n transformer,\n asChild,\n webConfig,\n open,\n onOpenChange,\n onUpdate,\n isCreate,\n}: ServiceTransformerDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n return (\n <Dialog open={isOpen} onOpenChange={setIsOpen}>\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent>\n <DialogHeader>\n <DialogTitle>\n {isCreate ? 'Create' : 'Edit'} {webConfig?.label} Transformer\n </DialogTitle>\n <DialogDescription>\n {webConfig?.instructions ??\n 'Manage the transformer for the service'}\n </DialogDescription>\n </DialogHeader>\n {webConfig && (\n <ServiceTransformerForm\n transformer={transformer}\n onUpdate={(transformer) => {\n setIsOpen(false);\n onUpdate(transformer);\n }}\n webConfig={webConfig}\n isCreate={isCreate}\n />\n )}\n </DialogContent>\n </Dialog>\n );\n}\n","import type {\n ModelConfigInput,\n TransformerConfig,\n} from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\nimport type { UseFormReturn } from 'react-hook-form';\n\nimport {\n modelTransformerWebSpec,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n RecordView,\n RecordViewActions,\n RecordViewItem,\n RecordViewItemList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n useConfirmDialog,\n} from '@baseplate-dev/ui-components';\nimport { useState } from 'react';\nimport { useFieldArray, useWatch } from 'react-hook-form';\nimport { MdAdd, MdEdit, MdOutlineDelete } from 'react-icons/md';\n\nimport { BUILT_IN_TRANSFORMER_WEB_CONFIGS } from '#src/routes/data/models/-constants.js';\n\nimport { useEditedModelConfig } from '../../../-hooks/use-edited-model-config.js';\nimport { ServiceTransformerDialog } from './service-transformer-dialog.js';\n\ninterface Props {\n className?: string;\n formProps: UseFormReturn<ModelConfigInput>;\n}\n\nfunction ServiceTransformerRecord({\n formProps,\n idx,\n onRemove,\n onUpdate,\n}: {\n formProps: UseFormReturn<ModelConfigInput>;\n idx: number;\n onUpdate: (transformer: TransformerConfig, idx: number) => void;\n onRemove: (idx: number) => void;\n}): React.JSX.Element {\n const { pluginContainer, definitionContainer } = useProjectDefinition();\n const { control } = formProps;\n\n const field = useWatch({\n control,\n name: `service.transformers.${idx}`,\n });\n\n const transformerWeb = pluginContainer.getPluginSpec(modelTransformerWebSpec);\n const transformerConfig = transformerWeb.getTransformerWebConfig(\n field.type,\n BUILT_IN_TRANSFORMER_WEB_CONFIGS,\n );\n const summary = transformerConfig.getSummary(field, definitionContainer);\n return (\n <RecordView>\n <RecordViewItemList>\n <RecordViewItem title=\"Type\">{transformerConfig.label}</RecordViewItem>\n {summary.map((item) => (\n <RecordViewItem key={item.label} title={item.label}>\n {item.description}\n </RecordViewItem>\n ))}\n </RecordViewItemList>\n <RecordViewActions>\n {transformerConfig.Form && (\n <ServiceTransformerDialog\n webConfig={transformerConfig}\n transformer={field}\n onUpdate={(transformer) => {\n onUpdate(transformer, idx);\n }}\n asChild\n isCreate={false}\n >\n <Button variant=\"ghost\" size=\"icon\" title=\"Edit\">\n <MdEdit />\n </Button>\n </ServiceTransformerDialog>\n )}\n <Button\n variant=\"ghost\"\n size=\"icon\"\n onClick={() => {\n onRemove(idx);\n }}\n title=\"Remove\"\n className=\"text-destructive hover:text-destructive-hover\"\n >\n <MdOutlineDelete />\n </Button>\n </RecordViewActions>\n </RecordView>\n );\n}\n\nexport function ServiceTransformersSection({\n className,\n formProps,\n}: Props): React.JSX.Element | null {\n const { control } = formProps;\n const { fields, remove, append, update } = useFieldArray({\n control,\n name: `service.transformers`,\n });\n const { pluginContainer, definitionContainer } = useProjectDefinition();\n\n const { requestConfirm } = useConfirmDialog();\n\n const transformerWeb = pluginContainer.getPluginSpec(modelTransformerWebSpec);\n\n const modelConfig = useEditedModelConfig((model) => model);\n\n const addableTransformers = transformerWeb\n .getTransformerWebConfigs(BUILT_IN_TRANSFORMER_WEB_CONFIGS)\n .filter((transformer) =>\n transformer.allowNewTransformer\n ? transformer.allowNewTransformer(definitionContainer, modelConfig)\n : true,\n );\n\n const [isNewTransfomerDialogOpen, setIsNewTransformerDialogOpen] =\n useState(false);\n const [addableTransformerIdx, setAddableTransformerIdx] = useState<number>(0);\n\n return (\n <SectionListSection className={className}>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Transformers</SectionListSectionTitle>\n <SectionListSectionDescription>\n Transformers are used to operate on the data from the client into the\n shape that the database ORM expects.\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"max-w-xl space-y-4\">\n {fields.map((field, idx) => (\n <ServiceTransformerRecord\n key={field.id}\n formProps={formProps}\n idx={idx}\n onUpdate={(transformer, idx) => {\n update(idx, transformer);\n }}\n onRemove={(idx) => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete this transformer?`,\n buttonConfirmText: 'Delete',\n buttonConfirmVariant: 'destructive',\n onConfirm: () => {\n remove(idx);\n },\n });\n }}\n />\n ))}\n {addableTransformers.length > 0 && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"secondary\" size=\"sm\">\n <MdAdd />\n Add Transformer\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent>\n <DropdownMenuGroup>\n {addableTransformers.map((transformer, idx) => (\n <DropdownMenuItem\n key={transformer.name}\n onSelect={() => {\n if (transformer.Form) {\n setAddableTransformerIdx(idx);\n setIsNewTransformerDialogOpen(true);\n } else {\n append(\n transformer.getNewTransformer(\n definitionContainer,\n modelConfig,\n ),\n );\n }\n }}\n >\n <div className=\"flex flex-col gap-1\">\n <div>{transformer.label}</div>\n <div className=\"text-style-muted\">\n {transformer.description}\n </div>\n </div>\n </DropdownMenuItem>\n ))}\n </DropdownMenuGroup>\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n <ServiceTransformerDialog\n webConfig={addableTransformers[addableTransformerIdx]}\n transformer={addableTransformers[\n addableTransformerIdx\n ]?.getNewTransformer(definitionContainer, modelConfig)}\n onUpdate={(transformer) => {\n append(transformer);\n }}\n open={isNewTransfomerDialogOpen}\n onOpenChange={setIsNewTransformerDialogOpen}\n isCreate={true}\n />\n </SectionListSectionContent>\n </SectionListSection>\n );\n}\n","import type React from 'react';\n\nimport { modelTransformerEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useBlockUnsavedChangesNavigate } from '@baseplate-dev/project-builder-lib/web';\nimport {\n FormActionBar,\n SectionList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionDescription,\n SectionListSectionHeader,\n SectionListSectionTitle,\n SwitchFieldController,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute } from '@tanstack/react-router';\n\nimport { registerEntityTypeUrl } from '#src/services/entity-type.js';\n\nimport { EditedModelContextProvider } from '../-hooks/use-edited-model-config.js';\nimport { useModelForm } from '../-hooks/use-model-form.js';\nimport { ServiceMethodFieldsSection } from './-components/service/service-method-fields-section.js';\nimport { ServiceTransformersSection } from './-components/service/service-transformers-section.js';\n\nregisterEntityTypeUrl(\n modelTransformerEntityType,\n `/data/models/edit/{parentKey}`,\n);\n\nexport const Route = createFileRoute('/data/models/edit/$key/service')({\n component: ModelEditServicePage,\n beforeLoad: () => ({\n getTitle: () => 'Service',\n }),\n});\n\nfunction ModelEditServicePage(): React.JSX.Element {\n const { key } = Route.useParams();\n const { form, onSubmit, defaultValues } = useModelForm({\n omit: ['name', 'featureRef'],\n modelKey: key,\n });\n const { control, watch, getValues, setValue, reset } = form;\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n return (\n <EditedModelContextProvider\n initialModel={defaultValues}\n getValues={getValues}\n watch={watch}\n >\n <form onSubmit={onSubmit} className=\"w-full max-w-7xl space-y-4 p-4\">\n <SectionList>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Methods</SectionListSectionTitle>\n <SectionListSectionDescription>\n Enable or disable which service methods will be generated\n </SectionListSectionDescription>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"flex gap-8\">\n <SwitchFieldController\n label=\"Create\"\n name=\"service.create.enabled\"\n control={control}\n />\n <SwitchFieldController\n label=\"Update\"\n name=\"service.update.enabled\"\n control={control}\n />\n <SwitchFieldController\n label=\"Delete\"\n name=\"service.delete.enabled\"\n control={control}\n />\n </SectionListSectionContent>\n </SectionListSection>\n <ServiceMethodFieldsSection control={control} setValue={setValue} />\n <ServiceTransformersSection formProps={form} />\n </SectionList>\n <FormActionBar form={form} />\n </form>\n </EditedModelContextProvider>\n );\n}\n"],"names":["ModelTransformerUtils","importShared","modelTransformerWebSpec","useProjectDefinition","Label","SectionListSection","SectionListSectionContent","SectionListSectionDescription","SectionListSectionHeader","SectionListSectionTitle","SwitchField","ServiceMethodFieldsSection","className","control","setValue","fields","useEditedModelConfig","model","create","useWatch","update","isCreateEnabled","isUpdateEnabled","transformers","definitionContainer","pluginContainer","createFields","updateFields","createTransformers","updateTransformers","tableClassName","transformerWeb","jsxs","jsx","field","BadgeWithTypeLabel","SCALAR_FIELD_TYPE_OPTIONS","value","id","transformer","BUILT_IN_TRANSFORMER_WEB_CONFIGS","createTransformerSchema","modelTransformerEntityType","useDefinitionSchema","Button","DialogClose","DialogFooter","useId","useMemo","z","ServiceTransformerForm","Form","pluginId","onUpdate","isCreate","originalModel","transformerSchema","schema","formProps","useForm","zodResolver","handleSubmit","isDirty","onSubmit","data","formId","clsx","e","Dialog","DialogContent","DialogDescription","DialogHeader","DialogTitle","DialogTrigger","useControlledState","ServiceTransformerDialog","children","asChild","webConfig","open","onOpenChange","isOpen","setIsOpen","DropdownMenu","DropdownMenuContent","DropdownMenuGroup","DropdownMenuItem","DropdownMenuTrigger","RecordView","RecordViewActions","RecordViewItem","RecordViewItemList","useConfirmDialog","useState","ServiceTransformerRecord","idx","onRemove","transformerConfig","summary","item","MdEdit","MdOutlineDelete","ServiceTransformersSection","remove","append","useFieldArray","requestConfirm","modelConfig","addableTransformers","isNewTransfomerDialogOpen","setIsNewTransformerDialogOpen","addableTransformerIdx","setAddableTransformerIdx","MdAdd","useBlockUnsavedChangesNavigate","FormActionBar","SectionList","SwitchFieldController","registerEntityTypeUrl","SplitComponent","key","Route","useParams","form","defaultValues","useModelForm","omit","modelKey","watch","getValues","reset","EditedModelContextProvider"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as a}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{s as h,E as p}from"./index-gE__lQ6b.js";const{createTemplateExtractorSchema:f}=await a("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:b,useDefinitionSchema:u,useProjectDefinition:j,useResettableForm:g}=await a("@baseplate-dev/project-builder-lib/web"),{Alert:E,AlertDescription:S,AlertTitle:T,CheckboxFieldController:v,FormActionBar:w,SectionList:A,SectionListSection:L,SectionListSectionContent:R,SectionListSectionHeader:C,SectionListSectionTitle:N,TextareaFieldController:y}=await a("@baseplate-dev/ui-components"),k=function(){const{definition:l,saveDefinitionWithFeedback:r}=j(),o=l.settings.templateExtractor??{writeMetadata:!1,fileIdRegexWhitelist:""},n=u(f),i=g({resolver:h(n),defaultValues:o}),{handleSubmit:c,control:t,reset:d}=i,s=c(m=>r(x=>{x.settings.templateExtractor=m}));return b({control:t,reset:d,onSubmit:s}),p?e.jsxs("form",{className:"relative h-full max-h-full pb-(--action-bar-height)",onSubmit:s,children:[e.jsxs("div",{className:"flex h-full max-h-full flex-1 flex-col overflow-y-auto px-6",children:[e.jsx("div",{className:"sticky top-0 border-b bg-background py-6",children:e.jsx("h1",{children:"Template Extractor"})}),e.jsx(A,{children:e.jsxs(L,{children:[e.jsx(C,{children:e.jsx(N,{children:"Settings"})}),e.jsxs(R,{className:"flex max-w-md flex-col gap-4",children:[e.jsx(v,{name:"writeMetadata",label:"Write Metadata",description:"Write metadata to the project to enable template extraction",control:t}),e.jsx(y,{name:"fileIdRegexWhitelist",label:"File ID Regex Whitelist",description:"A list of file IDs to include in the template extractor metadata for generators that have a manually assigned file IDs, e.g. files generated by generators that have multiple instances. The list is delimited by a newline and must be a valid regex.",control:t})]})]})})]}),e.jsx(w,{form:i})]}):e.jsxs(E,{variant:"error",className:"mx-auto my-16 max-w-2xl",children:[e.jsx(T,{children:"Template Extractor is disabled"}),e.jsxs(S,{children:["Template extractor is disabled in the environment. Please enable it with ",e.jsx("code",{children:"VITE_ENABLE_TEMPLATE_EXTRACTOR=true"})," to use it."]})]})};export{k as component};
|
|
2
|
+
//# sourceMappingURL=template-extractor-D2LqkpO5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-extractor-D2LqkpO5.js","sources":["../../src/routes/settings/template-extractor.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { createTemplateExtractorSchema } from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockUnsavedChangesNavigate,\n useDefinitionSchema,\n useProjectDefinition,\n useResettableForm,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n CheckboxFieldController,\n FormActionBar,\n SectionList,\n SectionListSection,\n SectionListSectionContent,\n SectionListSectionHeader,\n SectionListSectionTitle,\n TextareaFieldController,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { createFileRoute } from '@tanstack/react-router';\n\nimport { ENABLE_TEMPLATE_EXTRACTOR } from '#src/services/config.js';\n\nexport const Route = createFileRoute('/settings/template-extractor')({\n component: TemplateExtractorSettingsPage,\n beforeLoad: () => ({\n getTitle: () => 'Template Extractor',\n }),\n});\n\n/**\n * Settings page for template extractor configuration\n *\n * Allows users to control template metadata generation during the extraction process.\n */\nfunction TemplateExtractorSettingsPage(): React.JSX.Element {\n const { definition, saveDefinitionWithFeedback } = useProjectDefinition();\n const defaultValues = definition.settings.templateExtractor ?? {\n writeMetadata: false,\n fileIdRegexWhitelist: '',\n };\n const templateExtractorSchema = useDefinitionSchema(\n createTemplateExtractorSchema,\n );\n const form = useResettableForm({\n resolver: zodResolver(templateExtractorSchema),\n defaultValues,\n });\n\n const { handleSubmit, control, reset } = form;\n\n const onSubmit = handleSubmit((data) =>\n saveDefinitionWithFeedback((draftConfig) => {\n draftConfig.settings.templateExtractor = data;\n }),\n );\n\n useBlockUnsavedChangesNavigate({ control, reset, onSubmit });\n\n if (!ENABLE_TEMPLATE_EXTRACTOR) {\n return (\n <Alert variant=\"error\" className=\"mx-auto my-16 max-w-2xl\">\n <AlertTitle>Template Extractor is disabled</AlertTitle>\n <AlertDescription>\n Template extractor is disabled in the environment. Please enable it\n with <code>VITE_ENABLE_TEMPLATE_EXTRACTOR=true</code> to use it.\n </AlertDescription>\n </Alert>\n );\n }\n\n return (\n <form\n className=\"relative h-full max-h-full pb-(--action-bar-height)\"\n onSubmit={onSubmit}\n >\n <div className=\"flex h-full max-h-full flex-1 flex-col overflow-y-auto px-6\">\n <div className=\"sticky top-0 border-b bg-background py-6\">\n <h1>Template Extractor</h1>\n </div>\n <SectionList>\n <SectionListSection>\n <SectionListSectionHeader>\n <SectionListSectionTitle>Settings</SectionListSectionTitle>\n </SectionListSectionHeader>\n <SectionListSectionContent className=\"flex max-w-md flex-col gap-4\">\n <CheckboxFieldController\n name=\"writeMetadata\"\n label=\"Write Metadata\"\n description=\"Write metadata to the project to enable template extraction\"\n control={control}\n />\n <TextareaFieldController\n name=\"fileIdRegexWhitelist\"\n label=\"File ID Regex Whitelist\"\n description=\"A list of file IDs to include in the template extractor metadata for generators that have a manually assigned file IDs, e.g. files generated by generators that have multiple instances. The list is delimited by a newline and must be a valid regex.\"\n control={control}\n />\n </SectionListSectionContent>\n </SectionListSection>\n </SectionList>\n </div>\n <FormActionBar form={form} />\n </form>\n );\n}\n"],"names":["createTemplateExtractorSchema","importShared","useBlockUnsavedChangesNavigate","useDefinitionSchema","useProjectDefinition","useResettableForm","Alert","AlertDescription","AlertTitle","CheckboxFieldController","FormActionBar","SectionList","SectionListSection","SectionListSectionContent","SectionListSectionHeader","SectionListSectionTitle","TextareaFieldController","SplitComponent","definition","saveDefinitionWithFeedback","defaultValues","settings","templateExtractor","writeMetadata","fileIdRegexWhitelist","templateExtractorSchema","form","resolver","zodResolver","handleSubmit","control","reset","onSubmit","draftConfig","data","ENABLE_TEMPLATE_EXTRACTOR","jsxs","jsx"],"mappings":"6JAEA,KAAA,CAAA,8BAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,+BAAAC,EAAA,oBAAAC,EAAA,qBAAAC,EAAA,kBAAAC,CAAA,EAAA,MAAAJ,EAAA,wCAAA,EAMA,CAAA,MAAAK,EAAA,iBAAAC,EAAA,WAAAC,EAAA,wBAAAC,EAAA,cAAAC,EAAA,YAAAC,EAAA,mBAAAC,EAAA,0BAAAC,EAAA,yBAAAC,EAAA,wBAAAC,EAAA,wBAAAC,CAAA,EAAA,MAAAf,EAAA,8BAAA,EAyBAgB,EAAA,UAK4D,CACpD,KAAA,CAAEC,WAAAA,EAAYC,2BAAAA,GAA+Bf,EAAqB,EAClEgB,EAAgBF,EAAWG,SAASC,mBAAqB,CAC7DC,cAAe,GACfC,qBAAsB,EACxB,EACMC,EAA0BtB,EAC9BH,CACF,EACM0B,EAAOrB,EAAkB,CAC7BsB,SAAUC,EAAYH,CAAuB,EAC7CL,cAAAA,CAAAA,CACD,EAEK,CAAES,aAAAA,EAAcC,QAAAA,EAASC,MAAAA,CAAAA,EAAUL,EAEnCM,EAAWH,EACfV,GAAAA,EAA4Cc,GAAA,CAC1CA,EAAYZ,SAASC,kBAAoBY,CAAAA,CAC1C,CACH,EAIA,OAF+BhC,EAAA,CAAE4B,QAAAA,EAASC,MAAAA,EAAOC,SAAAA,CAAAA,CAAU,EAEtDG,EAaFC,EAAAA,KAAA,OAAA,CACC,UAAU,sDACV,SAAAJ,EAEA,SAAA,CAACI,EAAAA,KAAA,MAAA,CAAI,UAAU,8DACb,SAAA,CAAAC,EAAAA,IAAC,OAAI,UAAU,2CACb,SAACA,MAAA,KAAA,CAAG,8BAAkB,CACxB,CAAA,EACAA,EAAA,IAAC1B,EACC,CAAA,SAAAyB,EAAAA,KAACxB,EACC,CAAA,SAAA,CAAAyB,MAACvB,EACC,CAAA,SAAAuB,EAAA,IAACtB,EAAwB,CAAA,SAAA,UAAQ,CAAA,EACnC,EACAqB,EAAAA,KAACvB,EAA0B,CAAA,UAAU,+BACnC,SAAA,CAAAwB,MAAC5B,GACC,KAAK,gBACL,MAAM,iBACN,YAAY,8DACZ,QAAAqB,EAAiB,EAEnBO,MAACrB,GACC,KAAK,uBACL,MAAM,0BACN,YAAY,yPACZ,QAAAc,CAAiB,CAAA,CAAA,CAErB,CAAA,CAAA,CAAA,CACF,CACF,CAAA,CAAA,EACF,EACAO,MAAC3B,GAAc,KAAAgB,CAAW,CAAA,CAAA,EAC5B,EA1CGU,EAAAA,KAAA9B,EAAA,CAAM,QAAQ,QAAQ,UAAU,0BAC/B,SAAA,CAAA+B,EAAAA,IAAC7B,GAAW,SAA8B,gCAAA,CAAA,SACzCD,EAAgB,CAAA,SAAA,CAAA,4EAEV8B,EAAAA,IAAC,QAAK,SAAmC,qCAAA,CAAA,EAAO,aAAA,CACvD,CAAA,CAAA,EACF,CAsCN"}
|