@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.
Files changed (113) hide show
  1. package/dist/assets/{-constants-DdiaSxL9.js → -constants-gwObfy2j.js} +2 -2
  2. package/dist/assets/{-constants-DdiaSxL9.js.map → -constants-gwObfy2j.js.map} +1 -1
  3. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-BEiksgOM.js → web-BXxolMLm.js} +2 -2
  4. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-BEiksgOM.js.map → web-BXxolMLm.js.map} +1 -1
  5. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CDWHycLw.js +5 -0
  6. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-CDWHycLw.js.map +1 -0
  7. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DGE1buQ-.js +46 -0
  8. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-DGE1buQ-.js.map +1 -0
  9. package/dist/assets/{_virtual___federation_fn_import-BllbkH3T.js → _virtual___federation_fn_import-CE3p-l_2.js} +2 -2
  10. package/dist/assets/{_virtual___federation_fn_import-BllbkH3T.js.map → _virtual___federation_fn_import-CE3p-l_2.js.map} +1 -1
  11. package/dist/assets/{backend-CoTpyUcx.js → backend-BAEsy0fr.js} +2 -2
  12. package/dist/assets/{backend-CoTpyUcx.js.map → backend-BAEsy0fr.js.map} +1 -1
  13. package/dist/assets/{badge-with-type-label-BTWMyfcL.js → badge-with-type-label-BuG6yCtf.js} +2 -2
  14. package/dist/assets/{badge-with-type-label-BTWMyfcL.js.map → badge-with-type-label-BuG6yCtf.js.map} +1 -1
  15. package/dist/assets/{edit._id-BzfH4jc0.js → edit._id-DPcGRUbG.js} +2 -2
  16. package/dist/assets/{edit._id-BzfH4jc0.js.map → edit._id-DPcGRUbG.js.map} +1 -1
  17. package/dist/assets/{enum-info-form-EeSfFY6Y.js → enum-info-form-BjI1ArPU.js} +2 -2
  18. package/dist/assets/{enum-info-form-EeSfFY6Y.js.map → enum-info-form-BjI1ArPU.js.map} +1 -1
  19. package/dist/assets/{graphql-D5k81FHL.js → graphql-DksHNLLL.js} +2 -2
  20. package/dist/assets/{graphql-D5k81FHL.js.map → graphql-DksHNLLL.js.map} +1 -1
  21. package/dist/assets/{hierarchy-CDgBahPq.js → hierarchy-BwshirJR.js} +2 -2
  22. package/dist/assets/{hierarchy-CDgBahPq.js.map → hierarchy-BwshirJR.js.map} +1 -1
  23. package/dist/assets/{index-B5VAZnNv.js → index-B6qfP-Zp.js} +2 -2
  24. package/dist/assets/{index-B5VAZnNv.js.map → index-B6qfP-Zp.js.map} +1 -1
  25. package/dist/assets/index-B9Di1LKs.css +1 -0
  26. package/dist/assets/{index-HA6UU1kS.js → index-BNK4j9mt.js} +2 -2
  27. package/dist/assets/{index-HA6UU1kS.js.map → index-BNK4j9mt.js.map} +1 -1
  28. package/dist/assets/{index-MPyZaAGd.js → index-BS45dlQs.js} +2 -2
  29. package/dist/assets/{index-MPyZaAGd.js.map → index-BS45dlQs.js.map} +1 -1
  30. package/dist/assets/{index-DbPo0KMc.js → index-C6ezfkGk.js} +2 -2
  31. package/dist/assets/{index-DbPo0KMc.js.map → index-C6ezfkGk.js.map} +1 -1
  32. package/dist/assets/{index-CJO9KLcs.js → index-CVRvV2mv.js} +2 -2
  33. package/dist/assets/{index-CJO9KLcs.js.map → index-CVRvV2mv.js.map} +1 -1
  34. package/dist/assets/{index-y6w6FRv9.js → index-CwavzuOe.js} +2 -2
  35. package/dist/assets/index-CwavzuOe.js.map +1 -0
  36. package/dist/assets/{index-Lx-c3w3C.js → index-Dp90A2TJ.js} +2 -2
  37. package/dist/assets/{index-Lx-c3w3C.js.map → index-Dp90A2TJ.js.map} +1 -1
  38. package/dist/assets/{index-BYcSgAsc.js → index-E5Zy1ClF.js} +2 -2
  39. package/dist/assets/{index-BYcSgAsc.js.map → index-E5Zy1ClF.js.map} +1 -1
  40. package/dist/assets/{index-ghp0h4jr.js → index-La9rk06J.js} +2 -2
  41. package/dist/assets/{index-ghp0h4jr.js.map → index-La9rk06J.js.map} +1 -1
  42. package/dist/assets/{index-VsI1zxbc.js → index-gE__lQ6b.js} +5 -5
  43. package/dist/assets/index-gE__lQ6b.js.map +1 -0
  44. package/dist/assets/{index-CJK2iGtK.js → index-s17MV-9f.js} +2 -2
  45. package/dist/assets/{index-CJK2iGtK.js.map → index-s17MV-9f.js.map} +1 -1
  46. package/dist/assets/index.esm-CyH9wtdI.js +10 -0
  47. package/dist/assets/index.esm-CyH9wtdI.js.map +1 -0
  48. package/dist/assets/{model-info-form-DWYyoR9g.js → model-info-form-B9t3m8Pj.js} +2 -2
  49. package/dist/assets/{model-info-form-DWYyoR9g.js.map → model-info-form-B9t3m8Pj.js.map} +1 -1
  50. package/dist/assets/model-merger-DL4MVNID.js +2 -0
  51. package/dist/assets/model-merger-DL4MVNID.js.map +1 -0
  52. package/dist/assets/new-app-dialog-Cd7rJ7i5.js +2 -0
  53. package/dist/assets/new-app-dialog-Cd7rJ7i5.js.map +1 -0
  54. package/dist/assets/{new-enum-dialog-DQxXV11c.js → new-enum-dialog-Z3aWnnBr.js} +2 -2
  55. package/dist/assets/{new-enum-dialog-DQxXV11c.js.map → new-enum-dialog-Z3aWnnBr.js.map} +1 -1
  56. package/dist/assets/{new-model-dialog-Ta_YghmL.js → new-model-dialog-uEX7hTid.js} +2 -2
  57. package/dist/assets/{new-model-dialog-Ta_YghmL.js.map → new-model-dialog-uEX7hTid.js.map} +1 -1
  58. package/dist/assets/{route-D9aGR6_H.js → route-B2oYTZT4.js} +2 -2
  59. package/dist/assets/{route-D9aGR6_H.js.map → route-B2oYTZT4.js.map} +1 -1
  60. package/dist/assets/{route-C0DpSC86.js → route-B6DRGm3t.js} +2 -2
  61. package/dist/assets/{route-C0DpSC86.js.map → route-B6DRGm3t.js.map} +1 -1
  62. package/dist/assets/{route-DwYLJh1Z.js → route-BOOZxY6E.js} +2 -2
  63. package/dist/assets/{route-DwYLJh1Z.js.map → route-BOOZxY6E.js.map} +1 -1
  64. package/dist/assets/{route-Ofm_Xk4Q.js → route-BwqWBMDI.js} +2 -2
  65. package/dist/assets/{route-Ofm_Xk4Q.js.map → route-BwqWBMDI.js.map} +1 -1
  66. package/dist/assets/{route-DzDATEIF.js → route-BxjC9xAo.js} +2 -2
  67. package/dist/assets/{route-DzDATEIF.js.map → route-BxjC9xAo.js.map} +1 -1
  68. package/dist/assets/{route-CmgYcJT_.js → route-BzTxfPrV.js} +2 -2
  69. package/dist/assets/{route-CmgYcJT_.js.map → route-BzTxfPrV.js.map} +1 -1
  70. package/dist/assets/route-C8YLDv4I.js +2 -0
  71. package/dist/assets/{route-cP4l-WDl.js.map → route-C8YLDv4I.js.map} +1 -1
  72. package/dist/assets/{route-De01FR6I.js → route-DrufP1-c.js} +2 -2
  73. package/dist/assets/{route-De01FR6I.js.map → route-DrufP1-c.js.map} +1 -1
  74. package/dist/assets/{route-xrfcRWC7.js → route-_AecKyFO.js} +2 -2
  75. package/dist/assets/{route-xrfcRWC7.js.map → route-_AecKyFO.js.map} +1 -1
  76. package/dist/assets/{sections-Bl6CBMqu.js → sections-D-GS6uoS.js} +2 -2
  77. package/dist/assets/{sections-Bl6CBMqu.js.map → sections-D-GS6uoS.js.map} +1 -1
  78. package/dist/assets/{sections._sectionKey-lnWxksec.js → sections._sectionKey-Bj4VmUuM.js} +2 -2
  79. package/dist/assets/{sections._sectionKey-lnWxksec.js.map → sections._sectionKey-Bj4VmUuM.js.map} +1 -1
  80. package/dist/assets/{service-CH1p5s9d.js → service-C6FdRXxU.js} +2 -2
  81. package/dist/assets/{service-CH1p5s9d.js.map → service-C6FdRXxU.js.map} +1 -1
  82. package/dist/assets/template-extractor-D2LqkpO5.js +2 -0
  83. package/dist/assets/template-extractor-D2LqkpO5.js.map +1 -0
  84. package/dist/assets/{theme-builder-LEW3UAWc.js → theme-builder-_PghOvuC.js} +2 -2
  85. package/dist/assets/{theme-builder-LEW3UAWc.js.map → theme-builder-_PghOvuC.js.map} +1 -1
  86. package/dist/assets/{use-definition-schema-BB2JVpWG.js → use-definition-schema-B2FBXmC_.js} +2 -2
  87. package/dist/assets/{use-definition-schema-BB2JVpWG.js.map → use-definition-schema-B2FBXmC_.js.map} +1 -1
  88. package/dist/assets/{use-enum-form-CMIHUOLu.js → use-enum-form-DQza9C6Q.js} +2 -2
  89. package/dist/assets/{use-enum-form-CMIHUOLu.js.map → use-enum-form-DQza9C6Q.js.map} +1 -1
  90. package/dist/assets/{use-model-form-hncL1MN2.js → use-model-form-D4qoaVd7.js} +2 -2
  91. package/dist/assets/{use-model-form-hncL1MN2.js.map → use-model-form-D4qoaVd7.js.map} +1 -1
  92. package/dist/assets/{utils-BMK0C56t.js → utils-CH9UxfXa.js} +2 -2
  93. package/dist/assets/{utils-BMK0C56t.js.map → utils-CH9UxfXa.js.map} +1 -1
  94. package/dist/assets/{web-BRltYNcY.js → web-C6Idxok-.js} +2 -2
  95. package/dist/assets/{web-BRltYNcY.js.map → web-C6Idxok-.js.map} +1 -1
  96. package/dist/index.html +5 -5
  97. package/package.json +7 -7
  98. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-ByoEPRxY.js +0 -5
  99. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-ByoEPRxY.js.map +0 -1
  100. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-2ByEN20H.js +0 -46
  101. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-2ByEN20H.js.map +0 -1
  102. package/dist/assets/index-BDJ79UQH.css +0 -1
  103. package/dist/assets/index-VsI1zxbc.js.map +0 -1
  104. package/dist/assets/index-y6w6FRv9.js.map +0 -1
  105. package/dist/assets/index.esm-CGbP6mNa.js +0 -10
  106. package/dist/assets/index.esm-CGbP6mNa.js.map +0 -1
  107. package/dist/assets/model-merger-s86W4xg2.js +0 -2
  108. package/dist/assets/model-merger-s86W4xg2.js.map +0 -1
  109. package/dist/assets/new-app-dialog-CGp0nciM.js +0 -2
  110. package/dist/assets/new-app-dialog-CGp0nciM.js.map +0 -1
  111. package/dist/assets/route-cP4l-WDl.js +0 -2
  112. package/dist/assets/template-extractor-_5pq8PSE.js +0 -2
  113. package/dist/assets/template-extractor-_5pq8PSE.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"route-Ofm_Xk4Q.js","sources":["../../src/routes/data/enums/edit.$key/-components/enum-info-edit-dialog.tsx","../../src/routes/data/enums/edit.$key/-components/enum-header-bar.tsx","../../src/routes/data/enums/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { EnumInfoForm } from '../../-components/enum-info-form.js';\nimport { useEnumForm } from '../../-hooks/use-enum-form.js';\n\ninterface EnumInfoEditDialogProps {\n enumKey: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n}\n\nexport function EnumInfoEditDialog({\n enumKey,\n open,\n onOpenChange,\n asChild,\n children,\n}: EnumInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n isSavingDefinition,\n } = useEnumForm({\n enumKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n <DialogTrigger asChild={asChild}>{children}</DialogTrigger>\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Enum Info</DialogTitle>\n </DialogHeader>\n <EnumInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Save\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { EnumConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { EnumInfoEditDialog } from './enum-info-edit-dialog.js';\n\ninterface EnumHeaderBarProps {\n className?: string;\n enumDefinition: EnumConfig;\n}\n\nexport function EnumHeaderBar({\n className,\n enumDefinition,\n}: EnumHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.enums = draftConfig.enums?.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/enums' }).catch(logAndFormatError);\n },\n },\n );\n };\n\n return (\n <div className={clsx('flex items-center justify-between', className)}>\n <div>\n <EnumInfoEditDialog\n enumKey={modelEnumEntityType.keyFromId(enumDefinition.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Enum Info\"\n >\n <h1>{enumDefinition.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </EnumInfoEditDialog>\n {enumDefinition.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {\n FeatureUtils.getFeatureById(definition, enumDefinition.featureRef)\n ?.name\n }\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${\n enumDefinition.name\n }?`,\n buttonConfirmVariant: 'destructive',\n buttonConfirmText: 'Delete',\n onConfirm: () => {\n handleDelete(enumDefinition.id);\n },\n });\n }}\n disabled={isSavingDefinition}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Enum</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n EnumUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { createFileRoute, notFound, Outlet } from '@tanstack/react-router';\n\nimport { EnumHeaderBar } from './-components/enum-header-bar.js';\n\nexport const Route = createFileRoute('/data/enums/edit/$key')({\n component: EnumEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEnumEntityType.idFromKey(key);\n const enumDefinition = EnumUtils.byId(projectDefinition, id);\n if (!enumDefinition) return {};\n return {\n getTitle: () => enumDefinition.name,\n enumDefinition,\n };\n },\n // Workaround for https://github.com/TanStack/router/issues/2139#issuecomment-2632375738\n // where throwing notFound() in beforeLoad causes the not found component to be rendered incorrectly\n loader: ({ context: { enumDefinition } }) => {\n if (!enumDefinition) throw notFound();\n return { enumDefinition };\n },\n});\n\nfunction EnumEditLayout(): React.JSX.Element {\n const { enumDefinition } = Route.useLoaderData();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={enumDefinition.id}\n >\n <div className=\"mx-4 max-w-7xl space-y-4 border-b py-4\">\n <EnumHeaderBar enumDefinition={enumDefinition} />\n </div>\n <div className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","EnumInfoEditDialog","enumKey","open","onOpenChange","asChild","children","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","isSavingDefinition","useEnumForm","jsxs","newOpen","jsx","EnumInfoForm","FeatureUtils","modelEnumEntityType","useProjectDefinition","useConfirmDialog","EnumHeaderBar","className","enumDefinition","definition","saveDefinitionWithFeedbackSync","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","SplitComponent","Route","useLoaderData","Outlet"],"mappings":"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"}
1
+ {"version":3,"file":"route-BwqWBMDI.js","sources":["../../src/routes/data/enums/edit.$key/-components/enum-info-edit-dialog.tsx","../../src/routes/data/enums/edit.$key/-components/enum-header-bar.tsx","../../src/routes/data/enums/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { EnumInfoForm } from '../../-components/enum-info-form.js';\nimport { useEnumForm } from '../../-hooks/use-enum-form.js';\n\ninterface EnumInfoEditDialogProps {\n enumKey: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n}\n\nexport function EnumInfoEditDialog({\n enumKey,\n open,\n onOpenChange,\n asChild,\n children,\n}: EnumInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n isSavingDefinition,\n } = useEnumForm({\n enumKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n <DialogTrigger asChild={asChild}>{children}</DialogTrigger>\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Enum Info</DialogTitle>\n </DialogHeader>\n <EnumInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Save\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { EnumConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { EnumInfoEditDialog } from './enum-info-edit-dialog.js';\n\ninterface EnumHeaderBarProps {\n className?: string;\n enumDefinition: EnumConfig;\n}\n\nexport function EnumHeaderBar({\n className,\n enumDefinition,\n}: EnumHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.enums = draftConfig.enums?.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/enums' }).catch(logAndFormatError);\n },\n },\n );\n };\n\n return (\n <div className={clsx('flex items-center justify-between', className)}>\n <div>\n <EnumInfoEditDialog\n enumKey={modelEnumEntityType.keyFromId(enumDefinition.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Enum Info\"\n >\n <h1>{enumDefinition.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </EnumInfoEditDialog>\n {enumDefinition.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {\n FeatureUtils.getFeatureById(definition, enumDefinition.featureRef)\n ?.name\n }\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${\n enumDefinition.name\n }?`,\n buttonConfirmVariant: 'destructive',\n buttonConfirmText: 'Delete',\n onConfirm: () => {\n handleDelete(enumDefinition.id);\n },\n });\n }}\n disabled={isSavingDefinition}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Enum</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n EnumUtils,\n modelEnumEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { createFileRoute, notFound, Outlet } from '@tanstack/react-router';\n\nimport { EnumHeaderBar } from './-components/enum-header-bar.js';\n\nexport const Route = createFileRoute('/data/enums/edit/$key')({\n component: EnumEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEnumEntityType.idFromKey(key);\n const enumDefinition = EnumUtils.byId(projectDefinition, id);\n if (!enumDefinition) return {};\n return {\n getTitle: () => enumDefinition.name,\n enumDefinition,\n };\n },\n // Workaround for https://github.com/TanStack/router/issues/2139#issuecomment-2632375738\n // where throwing notFound() in beforeLoad causes the not found component to be rendered incorrectly\n loader: ({ context: { enumDefinition } }) => {\n if (!enumDefinition) throw notFound();\n return { enumDefinition };\n },\n});\n\nfunction EnumEditLayout(): React.JSX.Element {\n const { enumDefinition } = Route.useLoaderData();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={enumDefinition.id}\n >\n <div className=\"mx-4 max-w-7xl space-y-4 border-b py-4\">\n <EnumHeaderBar enumDefinition={enumDefinition} />\n </div>\n <div className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","EnumInfoEditDialog","enumKey","open","onOpenChange","asChild","children","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","isSavingDefinition","useEnumForm","jsxs","newOpen","jsx","EnumInfoForm","FeatureUtils","modelEnumEntityType","useProjectDefinition","useConfirmDialog","EnumHeaderBar","className","enumDefinition","definition","saveDefinitionWithFeedbackSync","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","SplitComponent","Route","useLoaderData","Outlet"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{c as v,l as b,i as p,L as x,O as g}from"./index-VsI1zxbc.js";import{c as y,I as C,K as D}from"./index-MPyZaAGd.js";import{u as N}from"./use-model-form-hncL1MN2.js";import{M}from"./model-info-form-DWYyoR9g.js";const{Button:j,Dialog:S,DialogClose:w,DialogContent:F,DialogFooter:I,DialogHeader:k,DialogTitle:E,DialogTrigger:O,useControlledState:T}=await i("@baseplate-dev/ui-components");function B({open:a,onOpenChange:t,children:s,asChild:r,modelKey:l}){const[d,o]=T(a,t,!1),{form:{control:c,reset:u},onSubmit:n,defaultValues:m}=N({modelKey:l,onSubmitSuccess(){o(!1)}});return e.jsxs(S,{open:d,onOpenChange:h=>{o(h),h||u(m)},children:[s&&e.jsx(O,{asChild:r,children:s}),e.jsx(F,{"aria-describedby":void 0,children:e.jsxs("form",{onSubmit:n,className:"space-y-4",children:[e.jsx(k,{children:e.jsx(E,{children:"Edit Model Info"})}),e.jsx(M,{control:c}),e.jsxs(I,{children:[e.jsx(w,{asChild:!0,children:e.jsx(j,{variant:"secondary",children:"Cancel"})}),e.jsx(j,{type:"submit",children:"Save"})]})]})})]})}const{FeatureUtils:L,modelEntityType:$}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:R}=await i("@baseplate-dev/project-builder-lib/web"),{Button:q,useConfirmDialog:z}=await i("@baseplate-dev/ui-components");function A({className:a,model:t}){const{definition:s,saveDefinitionWithFeedbackSync:r,isSavingDefinition:l}=R(),d=v(),{requestConfirm:o}=z(),c=u=>{r(n=>{n.models=n.models.filter(m=>m.id!==u)},{onSuccess:()=>{d({to:"/data/models"}).catch(b)},successMessage:"Successfully deleted model!"})};return e.jsxs("div",{className:y("flex items-center justify-between border-b py-4",a),children:[e.jsxs("div",{children:[e.jsx(B,{modelKey:$.keyFromId(t.id),asChild:!0,children:e.jsxs("button",{className:"group flex items-center space-x-2 hover:cursor-pointer",type:"button",title:"Edit Model Info",children:[e.jsx("h1",{children:t.name}),e.jsx(C,{className:"invisible size-4 group-hover:visible"})]})}),t.featureRef&&e.jsx("div",{className:"text-xs text-muted-foreground",children:L.getFeatureById(s,t.featureRef)?.name})]}),e.jsx("div",{className:"flex gap-8",children:e.jsxs(q,{variant:"outline",size:"icon",disabled:l,onClick:()=>{o({title:"Confirm delete",content:`Are you sure you want to delete ${t.name}?`,buttonConfirmText:"Delete",buttonConfirmVariant:"destructive",onConfirm:()=>{c(t.id)}})},children:[e.jsx(D,{className:"text-destructive"}),e.jsx("div",{className:"sr-only",children:"Delete Model"})]})})]})}const{NavigationTabs:H,NavigationTabsItem:f}=await i("@baseplate-dev/ui-components"),W=function(){const{model:t}=p.useLoaderData(),{key:s}=p.useParams();return e.jsxs("div",{className:"relative flex h-full flex-1 flex-col overflow-hidden",children:[e.jsxs("div",{className:"max-w-7xl space-y-4 px-4 pb-4",children:[e.jsx(A,{model:t}),e.jsxs(H,{children:[e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key",from:"/",params:{key:s},activeOptions:{exact:!0},children:"Fields"})}),e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key/service",from:"/",params:{key:s},activeOptions:{exact:!0},children:"Service"})}),e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key/graphql",from:"/",params:{key:s},activeOptions:{exact:!0},children:"GraphQL"})})]})]}),e.jsx("div",{className:"mb-(--action-bar-height) flex flex-1 overflow-y-auto",style:{"--action-bar-height":"52px"},children:e.jsx(g,{})})]},t.id)};export{W as component};
2
- //# sourceMappingURL=route-DzDATEIF.js.map
1
+ import{i}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{c as v,l as b,i as p,L as x,O as g}from"./index-gE__lQ6b.js";import{c as y,I as C,K as D}from"./index-BS45dlQs.js";import{u as N}from"./use-model-form-D4qoaVd7.js";import{M}from"./model-info-form-B9t3m8Pj.js";const{Button:j,Dialog:S,DialogClose:w,DialogContent:F,DialogFooter:I,DialogHeader:k,DialogTitle:E,DialogTrigger:O,useControlledState:T}=await i("@baseplate-dev/ui-components");function B({open:a,onOpenChange:t,children:s,asChild:r,modelKey:l}){const[d,o]=T(a,t,!1),{form:{control:c,reset:u},onSubmit:n,defaultValues:m}=N({modelKey:l,onSubmitSuccess(){o(!1)}});return e.jsxs(S,{open:d,onOpenChange:h=>{o(h),h||u(m)},children:[s&&e.jsx(O,{asChild:r,children:s}),e.jsx(F,{"aria-describedby":void 0,children:e.jsxs("form",{onSubmit:n,className:"space-y-4",children:[e.jsx(k,{children:e.jsx(E,{children:"Edit Model Info"})}),e.jsx(M,{control:c}),e.jsxs(I,{children:[e.jsx(w,{asChild:!0,children:e.jsx(j,{variant:"secondary",children:"Cancel"})}),e.jsx(j,{type:"submit",children:"Save"})]})]})})]})}const{FeatureUtils:L,modelEntityType:$}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:R}=await i("@baseplate-dev/project-builder-lib/web"),{Button:q,useConfirmDialog:z}=await i("@baseplate-dev/ui-components");function A({className:a,model:t}){const{definition:s,saveDefinitionWithFeedbackSync:r,isSavingDefinition:l}=R(),d=v(),{requestConfirm:o}=z(),c=u=>{r(n=>{n.models=n.models.filter(m=>m.id!==u)},{onSuccess:()=>{d({to:"/data/models"}).catch(b)},successMessage:"Successfully deleted model!"})};return e.jsxs("div",{className:y("flex items-center justify-between border-b py-4",a),children:[e.jsxs("div",{children:[e.jsx(B,{modelKey:$.keyFromId(t.id),asChild:!0,children:e.jsxs("button",{className:"group flex items-center space-x-2 hover:cursor-pointer",type:"button",title:"Edit Model Info",children:[e.jsx("h1",{children:t.name}),e.jsx(C,{className:"invisible size-4 group-hover:visible"})]})}),t.featureRef&&e.jsx("div",{className:"text-xs text-muted-foreground",children:L.getFeatureById(s,t.featureRef)?.name})]}),e.jsx("div",{className:"flex gap-8",children:e.jsxs(q,{variant:"outline",size:"icon",disabled:l,onClick:()=>{o({title:"Confirm delete",content:`Are you sure you want to delete ${t.name}?`,buttonConfirmText:"Delete",buttonConfirmVariant:"destructive",onConfirm:()=>{c(t.id)}})},children:[e.jsx(D,{className:"text-destructive"}),e.jsx("div",{className:"sr-only",children:"Delete Model"})]})})]})}const{NavigationTabs:H,NavigationTabsItem:f}=await i("@baseplate-dev/ui-components"),W=function(){const{model:t}=p.useLoaderData(),{key:s}=p.useParams();return e.jsxs("div",{className:"relative flex h-full flex-1 flex-col overflow-hidden",children:[e.jsxs("div",{className:"max-w-7xl space-y-4 px-4 pb-4",children:[e.jsx(A,{model:t}),e.jsxs(H,{children:[e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key",from:"/",params:{key:s},activeOptions:{exact:!0},children:"Fields"})}),e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key/service",from:"/",params:{key:s},activeOptions:{exact:!0},children:"Service"})}),e.jsx(f,{asChild:!0,children:e.jsx(x,{to:"/data/models/edit/$key/graphql",from:"/",params:{key:s},activeOptions:{exact:!0},children:"GraphQL"})})]})]}),e.jsx("div",{className:"mb-(--action-bar-height) flex flex-1 overflow-y-auto",style:{"--action-bar-height":"52px"},children:e.jsx(g,{})})]},t.id)};export{W as component};
2
+ //# sourceMappingURL=route-BxjC9xAo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-DzDATEIF.js","sources":["../../src/routes/data/models/edit.$key/-components/model-info-edit-dialog.tsx","../../src/routes/data/models/edit.$key/-components/model-header-bar.tsx","../../src/routes/data/models/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { useModelForm } from '../../-hooks/use-model-form.js';\nimport { ModelInfoForm } from './model-info-form.js';\n\ninterface ModelInfoEditDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n modelKey: string;\n}\n\nexport function ModelInfoEditDialog({\n open,\n onOpenChange,\n children,\n asChild,\n modelKey,\n}: ModelInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n } = useModelForm({\n modelKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Model Info</DialogTitle>\n </DialogHeader>\n <ModelInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Save</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { ModelConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { ModelInfoEditDialog } from './model-info-edit-dialog.js';\n\ninterface ModelHeaderBarProps {\n className?: string;\n model: ModelConfig;\n}\n\nexport function ModelHeaderBar({\n className,\n model,\n}: ModelHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.models = draftConfig.models.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/models' }).catch(logAndFormatError);\n },\n successMessage: 'Successfully deleted model!',\n },\n );\n };\n\n return (\n <div\n className={clsx(\n 'flex items-center justify-between border-b py-4',\n className,\n )}\n >\n <div>\n <ModelInfoEditDialog\n modelKey={modelEntityType.keyFromId(model.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Model Info\"\n >\n <h1>{model.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </ModelInfoEditDialog>\n {model.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {FeatureUtils.getFeatureById(definition, model.featureRef)?.name}\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={isSavingDefinition}\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${model.name}?`,\n buttonConfirmText: 'Delete',\n buttonConfirmVariant: 'destructive',\n onConfirm: () => {\n handleDelete(model.id);\n },\n });\n }}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Model</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n modelEntityType,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n notFound,\n Outlet,\n} from '@tanstack/react-router';\n\nimport { ModelHeaderBar } from './-components/model-header-bar.js';\n\nexport const Route = createFileRoute('/data/models/edit/$key')({\n component: ModelEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEntityType.idFromKey(key);\n const model = ModelUtils.byId(projectDefinition, id);\n if (!model) return {};\n return {\n getTitle: () => model.name,\n model,\n };\n },\n loader: ({ context: { model } }) => {\n if (!model) throw notFound();\n return { model };\n },\n});\n\nfunction ModelEditLayout(): React.JSX.Element {\n const { model } = Route.useLoaderData();\n const { key } = Route.useParams();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={model.id}\n >\n <div className=\"max-w-7xl space-y-4 px-4 pb-4\">\n <ModelHeaderBar model={model} />\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Fields\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/service\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Service\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/graphql\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n GraphQL\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","ModelInfoEditDialog","open","onOpenChange","children","asChild","modelKey","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","useModelForm","jsxs","newOpen","jsx","ModelInfoForm","FeatureUtils","modelEntityType","useProjectDefinition","useConfirmDialog","ModelHeaderBar","className","model","definition","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","NavigationTabs","NavigationTabsItem","SplitComponent","Route","useLoaderData","key","useParams","Link","exact","Outlet"],"mappings":"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"}
1
+ {"version":3,"file":"route-BxjC9xAo.js","sources":["../../src/routes/data/models/edit.$key/-components/model-info-edit-dialog.tsx","../../src/routes/data/models/edit.$key/-components/model-header-bar.tsx","../../src/routes/data/models/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { useModelForm } from '../../-hooks/use-model-form.js';\nimport { ModelInfoForm } from './model-info-form.js';\n\ninterface ModelInfoEditDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children?: React.ReactNode;\n asChild?: boolean;\n modelKey: string;\n}\n\nexport function ModelInfoEditDialog({\n open,\n onOpenChange,\n children,\n asChild,\n modelKey,\n}: ModelInfoEditDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n\n const {\n form: { control, reset },\n onSubmit,\n defaultValues,\n } = useModelForm({\n modelKey,\n onSubmitSuccess() {\n setIsOpen(false);\n },\n });\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(newOpen) => {\n setIsOpen(newOpen);\n if (!newOpen) {\n reset(defaultValues);\n }\n }}\n >\n {children && <DialogTrigger asChild={asChild}>{children}</DialogTrigger>}\n <DialogContent aria-describedby={undefined}>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <DialogHeader>\n <DialogTitle>Edit Model Info</DialogTitle>\n </DialogHeader>\n <ModelInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Save</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n","import type { ModelConfig } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n FeatureUtils,\n modelEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport { Button, useConfirmDialog } from '@baseplate-dev/ui-components';\nimport { useNavigate } from '@tanstack/react-router';\nimport { clsx } from 'clsx';\nimport { MdDeleteOutline, MdEdit } from 'react-icons/md';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nimport { ModelInfoEditDialog } from './model-info-edit-dialog.js';\n\ninterface ModelHeaderBarProps {\n className?: string;\n model: ModelConfig;\n}\n\nexport function ModelHeaderBar({\n className,\n model,\n}: ModelHeaderBarProps): React.JSX.Element {\n const { definition, saveDefinitionWithFeedbackSync, isSavingDefinition } =\n useProjectDefinition();\n const navigate = useNavigate();\n const { requestConfirm } = useConfirmDialog();\n\n const handleDelete = (id: string): void => {\n saveDefinitionWithFeedbackSync(\n (draftConfig) => {\n draftConfig.models = draftConfig.models.filter((m) => m.id !== id);\n },\n {\n onSuccess: () => {\n navigate({ to: '/data/models' }).catch(logAndFormatError);\n },\n successMessage: 'Successfully deleted model!',\n },\n );\n };\n\n return (\n <div\n className={clsx(\n 'flex items-center justify-between border-b py-4',\n className,\n )}\n >\n <div>\n <ModelInfoEditDialog\n modelKey={modelEntityType.keyFromId(model.id)}\n asChild\n >\n <button\n className=\"group flex items-center space-x-2 hover:cursor-pointer\"\n type=\"button\"\n title=\"Edit Model Info\"\n >\n <h1>{model.name}</h1>\n <MdEdit className=\"invisible size-4 group-hover:visible\" />\n </button>\n </ModelInfoEditDialog>\n {model.featureRef && (\n <div className=\"text-xs text-muted-foreground\">\n {FeatureUtils.getFeatureById(definition, model.featureRef)?.name}\n </div>\n )}\n </div>\n <div className=\"flex gap-8\">\n <Button\n variant=\"outline\"\n size=\"icon\"\n disabled={isSavingDefinition}\n onClick={() => {\n requestConfirm({\n title: 'Confirm delete',\n content: `Are you sure you want to delete ${model.name}?`,\n buttonConfirmText: 'Delete',\n buttonConfirmVariant: 'destructive',\n onConfirm: () => {\n handleDelete(model.id);\n },\n });\n }}\n >\n <MdDeleteOutline className=\"text-destructive\" />\n <div className=\"sr-only\">Delete Model</div>\n </Button>\n </div>\n </div>\n );\n}\n","import type React from 'react';\n\nimport {\n modelEntityType,\n ModelUtils,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n notFound,\n Outlet,\n} from '@tanstack/react-router';\n\nimport { ModelHeaderBar } from './-components/model-header-bar.js';\n\nexport const Route = createFileRoute('/data/models/edit/$key')({\n component: ModelEditLayout,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = modelEntityType.idFromKey(key);\n const model = ModelUtils.byId(projectDefinition, id);\n if (!model) return {};\n return {\n getTitle: () => model.name,\n model,\n };\n },\n loader: ({ context: { model } }) => {\n if (!model) throw notFound();\n return { model };\n },\n});\n\nfunction ModelEditLayout(): React.JSX.Element {\n const { model } = Route.useLoaderData();\n const { key } = Route.useParams();\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={model.id}\n >\n <div className=\"max-w-7xl space-y-4 px-4 pb-4\">\n <ModelHeaderBar model={model} />\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Fields\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/service\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n Service\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link\n to=\"/data/models/edit/$key/graphql\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n GraphQL\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","importShared","ModelInfoEditDialog","open","onOpenChange","children","asChild","modelKey","isOpen","setIsOpen","control","reset","onSubmit","defaultValues","useModelForm","jsxs","newOpen","jsx","ModelInfoForm","FeatureUtils","modelEntityType","useProjectDefinition","useConfirmDialog","ModelHeaderBar","className","model","definition","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","useNavigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","NavigationTabs","NavigationTabsItem","SplitComponent","Route","useLoaderData","key","useParams","Link","exact","Outlet"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as t}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as a}from"./index.esm-CGbP6mNa.js";import{L as n,a as d,O as c}from"./index-VsI1zxbc.js";import{n as m,B as p}from"./index-MPyZaAGd.js";const{pluginEntityType:u}=await t("@baseplate-dev/project-builder-lib"),{useProjectDefinition:h}=await t("@baseplate-dev/project-builder-lib/web"),{Button:x,NavigationMenu:j,NavigationMenuItem:g,NavigationMenuLink:b,NavigationMenuList:f,SidebarLayout:v,SidebarLayoutContent:y,SidebarLayoutSidebar:N}=await t("@baseplate-dev/ui-components"),E=function(){const{definition:s,schemaParserContext:o}=h(),{availablePlugins:r}=o.pluginStore,i=(s.plugins??[]).map(e=>r.find(l=>l.metadata.id===u.keyFromId(e.id))?.metadata).filter(m);return a.jsxs(v,{className:"flex-1",children:[a.jsxs(N,{className:"flex flex-col gap-4",width:"sm",children:[a.jsx(n,{to:"/plugins",from:"/",children:a.jsxs(x,{variant:"secondary",className:"w-full",size:"sm",children:[a.jsx(p,{}),"Add new plugin"]})}),a.jsx(j,{orientation:"vertical",children:a.jsxs(f,{children:[i.map(e=>a.jsx(b,{asChild:!0,children:a.jsx(n,{to:"/plugins/edit/$id",from:"/",params:{id:e.id},children:e.displayName})},e.id)),i.length===0&&a.jsx(g,{className:"mt-4 w-full text-center opacity-80",children:"No plugins enabled"})]})})]}),a.jsx(y,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:a.jsx(d,{children:a.jsx(c,{})})})]})};export{E as component};
2
- //# sourceMappingURL=route-CmgYcJT_.js.map
1
+ import{i as t}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as a}from"./index.esm-CyH9wtdI.js";import{L as n,a as d,O as c}from"./index-gE__lQ6b.js";import{n as m,B as p}from"./index-BS45dlQs.js";const{pluginEntityType:u}=await t("@baseplate-dev/project-builder-lib"),{useProjectDefinition:h}=await t("@baseplate-dev/project-builder-lib/web"),{Button:x,NavigationMenu:j,NavigationMenuItem:g,NavigationMenuLink:b,NavigationMenuList:f,SidebarLayout:v,SidebarLayoutContent:y,SidebarLayoutSidebar:N}=await t("@baseplate-dev/ui-components"),E=function(){const{definition:s,schemaParserContext:o}=h(),{availablePlugins:r}=o.pluginStore,i=(s.plugins??[]).map(e=>r.find(l=>l.metadata.id===u.keyFromId(e.id))?.metadata).filter(m);return a.jsxs(v,{className:"flex-1",children:[a.jsxs(N,{className:"flex flex-col gap-4",width:"sm",children:[a.jsx(n,{to:"/plugins",from:"/",children:a.jsxs(x,{variant:"secondary",className:"w-full",size:"sm",children:[a.jsx(p,{}),"Add new plugin"]})}),a.jsx(j,{orientation:"vertical",children:a.jsxs(f,{children:[i.map(e=>a.jsx(b,{asChild:!0,children:a.jsx(n,{to:"/plugins/edit/$id",from:"/",params:{id:e.id},children:e.displayName})},e.id)),i.length===0&&a.jsx(g,{className:"mt-4 w-full text-center opacity-80",children:"No plugins enabled"})]})})]}),a.jsx(y,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:a.jsx(d,{children:a.jsx(c,{})})})]})};export{E as component};
2
+ //# sourceMappingURL=route-BzTxfPrV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-CmgYcJT_.js","sources":["../../src/routes/plugins/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { pluginEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { notEmpty } from '@baseplate-dev/utils';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { MdAdd } from 'react-icons/md';\n\nimport { ErrorBoundary } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/plugins')({\n component: PluginsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Plugins',\n }),\n});\n\nfunction PluginsLayout(): React.JSX.Element {\n const { definition, schemaParserContext } = useProjectDefinition();\n\n const { availablePlugins } = schemaParserContext.pluginStore;\n\n const enabledPlugins = (definition.plugins ?? [])\n .map((plugin) => {\n const pluginWithMetadata = availablePlugins.find(\n (p) => p.metadata.id === pluginEntityType.keyFromId(plugin.id),\n );\n return pluginWithMetadata?.metadata;\n })\n .filter(notEmpty);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"flex flex-col gap-4\" width=\"sm\">\n <Link to=\"/plugins\" from=\"/\">\n <Button variant=\"secondary\" className=\"w-full\" size=\"sm\">\n <MdAdd />\n Add new plugin\n </Button>\n </Link>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {enabledPlugins.map((plugin) => (\n <NavigationMenuLink key={plugin.id} asChild>\n <Link\n to={`/plugins/edit/$id`}\n from=\"/\"\n params={{ id: plugin.id }}\n >\n {plugin.displayName}\n </Link>\n </NavigationMenuLink>\n ))}\n {enabledPlugins.length === 0 && (\n <NavigationMenuItem className=\"mt-4 w-full text-center opacity-80\">\n No plugins enabled\n </NavigationMenuItem>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["pluginEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","schemaParserContext","availablePlugins","pluginStore","enabledPlugins","plugins","map","plugin","find","p","metadata","id","keyFromId","filter","notEmpty","jsxs","jsx","Link","MdAdd","displayName","length","ErrorBoundary","Outlet"],"mappings":"mNAEA,KAAA,CAAA,iBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAT,EAAA,8BAAA,EAcyDU,EAAA,UASb,CACpC,KAAA,CAAEC,WAAAA,EAAYC,oBAAAA,GAAwBX,EAAqB,EAE3D,CAAEY,iBAAAA,GAAqBD,EAAoBE,YAE3CC,GAAkBJ,EAAWK,SAAW,CAAA,GAC3CC,IAAgBC,GACYL,EAAiBM,KACnCC,GAAAA,EAAEC,SAASC,KAAOvB,EAAiBwB,UAAUL,EAAOI,EAAE,CAC/D,GAC2BD,QAC5B,EACAG,OAAOC,CAAQ,EAGhB,OAAAC,EAAA,KAACnB,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAmB,EAAA,KAACjB,EAAqB,CAAA,UAAU,sBAAsB,MAAM,KAC1D,SAAA,CAAAkB,EAAA,IAACC,EAAK,CAAA,GAAG,WAAW,KAAK,IACvB,SAAAF,EAAAA,KAACxB,EAAO,CAAA,QAAQ,YAAY,UAAU,SAAS,KAAK,KAClD,SAAA,CAAAyB,EAAA,IAACE,EAAK,EAAA,EAAA,gBAAA,CAAA,CAER,CACF,CAAA,EACCF,MAAAxB,EAAA,CAAe,YAAY,WAC1B,gBAACG,EACES,CAAAA,SAAAA,CAAAA,EAAeE,IAAKC,GAClBS,EAAA,IAAAtB,EAAA,CAAmC,QAAO,GACzC,SAACsB,EAAAA,IAAAC,EAAA,CACC,GAAI,oBACJ,KAAK,IACL,OAAQ,CAAEN,GAAIJ,EAAOI,EAAAA,EAEpBJ,SAAOY,EAAAA,WAAAA,CACV,CAPuBZ,EAAAA,EAAOI,EAQhC,CACD,EACAP,EAAegB,SAAW,SACxB3B,EAAmB,CAAA,UAAU,qCAAoC,SAElE,oBAAA,CAAA,CAAA,CAAA,CAEJ,CACF,CAAA,CAAA,EACF,EACAuB,EAAAA,IAACnB,GAAqB,UAAU,2CAC9B,eAACwB,EACC,CAAA,SAAAL,EAAA,IAACM,EAAM,CAAA,CAAA,CACT,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-BzTxfPrV.js","sources":["../../src/routes/plugins/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { pluginEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { notEmpty } from '@baseplate-dev/utils';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { MdAdd } from 'react-icons/md';\n\nimport { ErrorBoundary } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/plugins')({\n component: PluginsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Plugins',\n }),\n});\n\nfunction PluginsLayout(): React.JSX.Element {\n const { definition, schemaParserContext } = useProjectDefinition();\n\n const { availablePlugins } = schemaParserContext.pluginStore;\n\n const enabledPlugins = (definition.plugins ?? [])\n .map((plugin) => {\n const pluginWithMetadata = availablePlugins.find(\n (p) => p.metadata.id === pluginEntityType.keyFromId(plugin.id),\n );\n return pluginWithMetadata?.metadata;\n })\n .filter(notEmpty);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"flex flex-col gap-4\" width=\"sm\">\n <Link to=\"/plugins\" from=\"/\">\n <Button variant=\"secondary\" className=\"w-full\" size=\"sm\">\n <MdAdd />\n Add new plugin\n </Button>\n </Link>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {enabledPlugins.map((plugin) => (\n <NavigationMenuLink key={plugin.id} asChild>\n <Link\n to={`/plugins/edit/$id`}\n from=\"/\"\n params={{ id: plugin.id }}\n >\n {plugin.displayName}\n </Link>\n </NavigationMenuLink>\n ))}\n {enabledPlugins.length === 0 && (\n <NavigationMenuItem className=\"mt-4 w-full text-center opacity-80\">\n No plugins enabled\n </NavigationMenuItem>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["pluginEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","schemaParserContext","availablePlugins","pluginStore","enabledPlugins","plugins","map","plugin","find","p","metadata","id","keyFromId","filter","notEmpty","jsxs","jsx","Link","MdAdd","displayName","length","ErrorBoundary","Outlet"],"mappings":"mNAEA,KAAA,CAAA,iBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAT,EAAA,8BAAA,EAcyDU,EAAA,UASb,CACpC,KAAA,CAAEC,WAAAA,EAAYC,oBAAAA,GAAwBX,EAAqB,EAE3D,CAAEY,iBAAAA,GAAqBD,EAAoBE,YAE3CC,GAAkBJ,EAAWK,SAAW,CAAA,GAC3CC,IAAgBC,GACYL,EAAiBM,KACnCC,GAAAA,EAAEC,SAASC,KAAOvB,EAAiBwB,UAAUL,EAAOI,EAAE,CAC/D,GAC2BD,QAC5B,EACAG,OAAOC,CAAQ,EAGhB,OAAAC,EAAA,KAACnB,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAmB,EAAA,KAACjB,EAAqB,CAAA,UAAU,sBAAsB,MAAM,KAC1D,SAAA,CAAAkB,EAAA,IAACC,EAAK,CAAA,GAAG,WAAW,KAAK,IACvB,SAAAF,EAAAA,KAACxB,EAAO,CAAA,QAAQ,YAAY,UAAU,SAAS,KAAK,KAClD,SAAA,CAAAyB,EAAA,IAACE,EAAK,EAAA,EAAA,gBAAA,CAAA,CAER,CACF,CAAA,EACCF,MAAAxB,EAAA,CAAe,YAAY,WAC1B,gBAACG,EACES,CAAAA,SAAAA,CAAAA,EAAeE,IAAKC,GAClBS,EAAA,IAAAtB,EAAA,CAAmC,QAAO,GACzC,SAACsB,EAAAA,IAAAC,EAAA,CACC,GAAI,oBACJ,KAAK,IACL,OAAQ,CAAEN,GAAIJ,EAAOI,EAAAA,EAEpBJ,SAAOY,EAAAA,WAAAA,CACV,CAPuBZ,EAAAA,EAAOI,EAQhC,CACD,EACAP,EAAegB,SAAW,SACxB3B,EAAmB,CAAA,UAAU,qCAAoC,SAElE,oBAAA,CAAA,CAAA,CAAA,CAEJ,CACF,CAAA,CAAA,EACF,EACAuB,EAAAA,IAACnB,GAAqB,UAAU,2CAC9B,eAACwB,EACC,CAAA,SAAAL,EAAA,IAACM,EAAM,CAAA,CAAA,CACT,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import"./index.esm-CyH9wtdI.js";import{N as o}from"./index-gE__lQ6b.js";const p=o;export{p as notFoundComponent};
2
+ //# sourceMappingURL=route-C8YLDv4I.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-cP4l-WDl.js","sources":["../../src/routes/data/models/route.tsx?tsr-split=notFoundComponent"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router';\n\nimport { NotFoundCard } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/data/models')({\n beforeLoad: () => ({\n getTitle: () => 'Models',\n }),\n notFoundComponent: NotFoundCard,\n});\n"],"names":["SplitNotFoundComponent","NotFoundCard"],"mappings":"wEAEwD,MAAAA,EAA/CC"}
1
+ {"version":3,"file":"route-C8YLDv4I.js","sources":["../../src/routes/data/models/route.tsx?tsr-split=notFoundComponent"],"sourcesContent":["import { createFileRoute } from '@tanstack/react-router';\n\nimport { NotFoundCard } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/data/models')({\n beforeLoad: () => ({\n getTitle: () => 'Models',\n }),\n notFoundComponent: NotFoundCard,\n});\n"],"names":["SplitNotFoundComponent","NotFoundCard"],"mappings":"wEAEwD,MAAAA,EAA/CC"}
@@ -1,2 +1,2 @@
1
- import{i as l}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{L as m,u as x,a as w,O as S}from"./index-VsI1zxbc.js";import{c as u,B as b,C as y}from"./index-MPyZaAGd.js";import{N as C}from"./new-enum-dialog-DQxXV11c.js";import{s as g}from"./immer-xieDw-3D.js";import{N as L}from"./new-model-dialog-Ta_YghmL.js";function M(c,o){let s=c[0],i=-1/0;for(let r=0;r<c.length;r++){const n=c[r],a=o(n);a>i&&(i=a,s=n)}return s}const{modelEnumEntityType:k}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:E}=await l("@baseplate-dev/project-builder-lib/web"),{Button:p,InputField:I,NavigationMenu:$,NavigationMenuItemWithLink:T,NavigationMenuList:B,ScrollArea:F}=await l("@baseplate-dev/ui-components"),{useState:j}=await l("react");function A({className:c}){const{definition:{enums:o=[]}}=E(),[s,i]=j(""),r=o.filter(t=>t.name.toLowerCase().includes(s.toLowerCase())),n=g(r,[t=>t.name]),[a,h]=j(!1);return e.jsxs("div",{className:u(c,"flex flex-1 flex-col space-y-4 overflow-y-auto"),children:[e.jsxs("div",{className:"space-y-4 px-4",children:[e.jsx(C,{children:e.jsxs(p,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Enum"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(I,{value:s,onChange:t=>{i(t)},placeholder:"Search"}),s&&e.jsx(p,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",size:"icon",onClick:()=>{i("")},children:e.jsx(y,{})})]})]}),e.jsxs(F,{className:u("flex-1 px-2",a&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==a&&h(d)},children:[n.length===0&&s&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No enums found"}),e.jsx($,{orientation:"vertical",children:e.jsx(B,{children:n.map(t=>e.jsx("li",{children:e.jsx(T,{asChild:!0,children:e.jsx(m,{to:"/data/enums/edit/$key",from:"/",params:{key:k.keyFromId(t.id)},children:t.name})})},t.id))})})]})]})}const{modelEntityType:D}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:P}=await l("@baseplate-dev/project-builder-lib/web"),{Button:f,InputField:W,NavigationMenu:Q,NavigationMenuItemWithLink:z,NavigationMenuList:O,ScrollArea:R}=await l("@baseplate-dev/ui-components"),{useState:v}=await l("react");function q({className:c}){const{definition:{models:o}}=P(),[s,i]=v(""),r=o.filter(t=>t.name.toLowerCase().includes(s.toLowerCase())),n=g(r,[t=>t.name]),[a,h]=v(!1);return e.jsxs("div",{className:u(c,"flex flex-1 flex-col space-y-4 overflow-y-auto"),children:[e.jsxs("div",{className:"space-y-4 px-4",children:[e.jsx(L,{children:e.jsxs(f,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Model"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(W,{value:s,onChange:t=>{i(t)},placeholder:"Search"}),s&&e.jsx(f,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",onClick:()=>{i("")},size:"icon",children:e.jsx(y,{})})]})]}),e.jsxs(R,{className:u("flex-1 px-2",a&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==a&&h(d)},children:[n.length===0&&s&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No models found"}),e.jsx(Q,{orientation:"vertical",children:e.jsx(O,{children:n.map(t=>e.jsx(z,{asChild:!0,children:e.jsx(m,{to:"/data/models/edit/$key",from:"/",params:{key:D.keyFromId(t.id)},children:t.name})},t.id))})})]})]})}const{useProjectDefinition:G}=await l("@baseplate-dev/project-builder-lib/web"),{NavigationTabs:H,NavigationTabsItem:N,SidebarLayout:J,SidebarLayoutContent:K,SidebarLayoutSidebar:U}=await l("@baseplate-dev/ui-components"),se=function(){const{definition:{models:o=[],enums:s=[]}}=G(),i=M([...o,...s],a=>a.name.length)?.name,r=x({select:a=>a.location.pathname.startsWith("/data/models")}),n=x({select:a=>a.location.pathname.startsWith("/data/enums")});return e.jsxs(J,{className:"flex-1",children:[e.jsxs(U,{className:"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4",width:"auto",noPadding:!0,children:[e.jsx("div",{className:"invisible block h-1 overflow-hidden font-semibold text-transparent",children:i}),e.jsx("div",{className:"px-4",children:e.jsxs(H,{className:"w-full",children:[e.jsx(N,{asChild:!0,children:e.jsx(m,{to:"/data/models",from:"/",children:"Models"})}),e.jsx(N,{asChild:!0,children:e.jsx(m,{to:"/data/enums",from:"/",children:"Enums"})})]})}),r?e.jsx(q,{}):null,n?e.jsx(A,{}):null]}),e.jsx(K,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:e.jsx(w,{children:e.jsx(S,{})})})]})};export{se as component};
2
- //# sourceMappingURL=route-De01FR6I.js.map
1
+ import{i as l}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{L as m,u as x,a as w,O as S}from"./index-gE__lQ6b.js";import{c as u,B as b,C as y}from"./index-BS45dlQs.js";import{N as C}from"./new-enum-dialog-Z3aWnnBr.js";import{s as g}from"./immer-xieDw-3D.js";import{N as L}from"./new-model-dialog-uEX7hTid.js";function M(c,o){let s=c[0],i=-1/0;for(let r=0;r<c.length;r++){const n=c[r],a=o(n);a>i&&(i=a,s=n)}return s}const{modelEnumEntityType:k}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:E}=await l("@baseplate-dev/project-builder-lib/web"),{Button:p,InputField:I,NavigationMenu:$,NavigationMenuItemWithLink:T,NavigationMenuList:B,ScrollArea:F}=await l("@baseplate-dev/ui-components"),{useState:j}=await l("react");function A({className:c}){const{definition:{enums:o=[]}}=E(),[s,i]=j(""),r=o.filter(t=>t.name.toLowerCase().includes(s.toLowerCase())),n=g(r,[t=>t.name]),[a,h]=j(!1);return e.jsxs("div",{className:u(c,"flex flex-1 flex-col space-y-4 overflow-y-auto"),children:[e.jsxs("div",{className:"space-y-4 px-4",children:[e.jsx(C,{children:e.jsxs(p,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Enum"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(I,{value:s,onChange:t=>{i(t)},placeholder:"Search"}),s&&e.jsx(p,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",size:"icon",onClick:()=>{i("")},children:e.jsx(y,{})})]})]}),e.jsxs(F,{className:u("flex-1 px-2",a&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==a&&h(d)},children:[n.length===0&&s&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No enums found"}),e.jsx($,{orientation:"vertical",children:e.jsx(B,{children:n.map(t=>e.jsx("li",{children:e.jsx(T,{asChild:!0,children:e.jsx(m,{to:"/data/enums/edit/$key",from:"/",params:{key:k.keyFromId(t.id)},children:t.name})})},t.id))})})]})]})}const{modelEntityType:D}=await l("@baseplate-dev/project-builder-lib"),{useProjectDefinition:P}=await l("@baseplate-dev/project-builder-lib/web"),{Button:f,InputField:W,NavigationMenu:Q,NavigationMenuItemWithLink:z,NavigationMenuList:O,ScrollArea:R}=await l("@baseplate-dev/ui-components"),{useState:v}=await l("react");function q({className:c}){const{definition:{models:o}}=P(),[s,i]=v(""),r=o.filter(t=>t.name.toLowerCase().includes(s.toLowerCase())),n=g(r,[t=>t.name]),[a,h]=v(!1);return e.jsxs("div",{className:u(c,"flex flex-1 flex-col space-y-4 overflow-y-auto"),children:[e.jsxs("div",{className:"space-y-4 px-4",children:[e.jsx(L,{children:e.jsxs(f,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Model"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(W,{value:s,onChange:t=>{i(t)},placeholder:"Search"}),s&&e.jsx(f,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",onClick:()=>{i("")},size:"icon",children:e.jsx(y,{})})]})]}),e.jsxs(R,{className:u("flex-1 px-2",a&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==a&&h(d)},children:[n.length===0&&s&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No models found"}),e.jsx(Q,{orientation:"vertical",children:e.jsx(O,{children:n.map(t=>e.jsx(z,{asChild:!0,children:e.jsx(m,{to:"/data/models/edit/$key",from:"/",params:{key:D.keyFromId(t.id)},children:t.name})},t.id))})})]})]})}const{useProjectDefinition:G}=await l("@baseplate-dev/project-builder-lib/web"),{NavigationTabs:H,NavigationTabsItem:N,SidebarLayout:J,SidebarLayoutContent:K,SidebarLayoutSidebar:U}=await l("@baseplate-dev/ui-components"),se=function(){const{definition:{models:o=[],enums:s=[]}}=G(),i=M([...o,...s],a=>a.name.length)?.name,r=x({select:a=>a.location.pathname.startsWith("/data/models")}),n=x({select:a=>a.location.pathname.startsWith("/data/enums")});return e.jsxs(J,{className:"flex-1",children:[e.jsxs(U,{className:"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4",width:"auto",noPadding:!0,children:[e.jsx("div",{className:"invisible block h-1 overflow-hidden font-semibold text-transparent",children:i}),e.jsx("div",{className:"px-4",children:e.jsxs(H,{className:"w-full",children:[e.jsx(N,{asChild:!0,children:e.jsx(m,{to:"/data/models",from:"/",children:"Models"})}),e.jsx(N,{asChild:!0,children:e.jsx(m,{to:"/data/enums",from:"/",children:"Enums"})})]})}),r?e.jsx(q,{}):null,n?e.jsx(A,{}):null]}),e.jsx(K,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:e.jsx(w,{children:e.jsx(S,{})})})]})};export{se as component};
2
+ //# sourceMappingURL=route-DrufP1-c.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-De01FR6I.js","sources":["../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/array/maxBy.mjs","../../src/routes/data/enums/-components/enums-sidebar-list.tsx","../../src/routes/data/models/-components/models-sidebar-list.tsx","../../src/routes/data/route.tsx?tsr-split=component"],"sourcesContent":["function maxBy(items, getValue) {\n let maxElement = items[0];\n let max = -Infinity;\n for (let i = 0; i < items.length; i++) {\n const element = items[i];\n const value = getValue(element);\n if (value > max) {\n max = value;\n maxElement = element;\n }\n }\n return maxElement;\n}\n\nexport { maxBy };\n","import type React from 'react';\n\nimport { modelEnumEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewEnumDialog } from './new-enum-dialog.js';\n\ninterface EnumsSidebarListProps {\n className?: string;\n}\n\nexport function EnumsSidebarList({\n className,\n}: EnumsSidebarListProps): React.JSX.Element {\n const {\n definition: { enums = [] },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredEnums = enums.filter((item) =>\n item.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedEnums = sortBy(filteredEnums, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewEnumDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Enum\n </Button>\n </NewEnumDialog>\n {enums.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n size=\"icon\"\n onClick={() => {\n setFilterQuery('');\n }}\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedEnums.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No enums found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedEnums.map((enumDef) => (\n <li key={enumDef.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/data/enums/edit/$key\"\n from=\"/\"\n params={{ key: modelEnumEntityType.keyFromId(enumDef.id) }}\n >\n {enumDef.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { modelEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewModelDialog } from './new-model-dialog.js';\n\ninterface ModelsSidebarListProps {\n className?: string;\n}\n\nexport function ModelsSidebarList({\n className,\n}: ModelsSidebarListProps): React.JSX.Element {\n const {\n definition: { models },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredModels = models.filter((model) =>\n model.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedModels = sortBy(filteredModels, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewModelDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Model\n </Button>\n </NewModelDialog>\n {models.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n onClick={() => {\n setFilterQuery('');\n }}\n size=\"icon\"\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedModels.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No models found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedModels.map((model) => (\n <NavigationMenuItemWithLink key={model.id} asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key: modelEntityType.keyFromId(model.id) }}\n >\n {model.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n useRouterState,\n} from '@tanstack/react-router';\nimport { maxBy } from 'es-toolkit';\n\nimport { ErrorBoundary } from '#src/components/error-boundary/error-boundary.js';\n\nimport { EnumsSidebarList } from './enums/-components/enums-sidebar-list.js';\nimport { ModelsSidebarList } from './models/-components/models-sidebar-list.js';\n\nexport const Route = createFileRoute('/data')({\n component: DataLayout,\n});\n\nfunction DataLayout(): React.JSX.Element {\n const {\n definition: { models = [], enums = [] },\n } = useProjectDefinition();\n\n const longestName = maxBy([...models, ...enums], (m) => m.name.length)?.name;\n\n const modelsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/models'),\n });\n const enumsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/enums'),\n });\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar\n className=\"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4\"\n width=\"auto\"\n noPadding\n >\n {/* Allows us to ensure the width doesn't change when selected is semi-bold or search filter is active */}\n <div className=\"invisible block h-1 overflow-hidden font-semibold text-transparent\">\n {longestName}\n </div>\n <div className=\"px-4\">\n <NavigationTabs className=\"w-full\">\n <NavigationTabsItem asChild>\n <Link to=\"/data/models\" from=\"/\">\n Models\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\" from=\"/\">\n Enums\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n {modelsActive ? <ModelsSidebarList /> : null}\n {enumsActive ? <EnumsSidebarList /> : null}\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["maxBy","items","getValue","maxElement","max","i","element","value","modelEnumEntityType","importShared","useProjectDefinition","Button","InputField","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","ScrollArea","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","Link","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","longestName","name","length","modelsActive","useRouterState","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary","Outlet"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"route-DrufP1-c.js","sources":["../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/array/maxBy.mjs","../../src/routes/data/enums/-components/enums-sidebar-list.tsx","../../src/routes/data/models/-components/models-sidebar-list.tsx","../../src/routes/data/route.tsx?tsr-split=component"],"sourcesContent":["function maxBy(items, getValue) {\n let maxElement = items[0];\n let max = -Infinity;\n for (let i = 0; i < items.length; i++) {\n const element = items[i];\n const value = getValue(element);\n if (value > max) {\n max = value;\n maxElement = element;\n }\n }\n return maxElement;\n}\n\nexport { maxBy };\n","import type React from 'react';\n\nimport { modelEnumEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewEnumDialog } from './new-enum-dialog.js';\n\ninterface EnumsSidebarListProps {\n className?: string;\n}\n\nexport function EnumsSidebarList({\n className,\n}: EnumsSidebarListProps): React.JSX.Element {\n const {\n definition: { enums = [] },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredEnums = enums.filter((item) =>\n item.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedEnums = sortBy(filteredEnums, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewEnumDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Enum\n </Button>\n </NewEnumDialog>\n {enums.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n size=\"icon\"\n onClick={() => {\n setFilterQuery('');\n }}\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedEnums.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No enums found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedEnums.map((enumDef) => (\n <li key={enumDef.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/data/enums/edit/$key\"\n from=\"/\"\n params={{ key: modelEnumEntityType.keyFromId(enumDef.id) }}\n >\n {enumDef.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { modelEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewModelDialog } from './new-model-dialog.js';\n\ninterface ModelsSidebarListProps {\n className?: string;\n}\n\nexport function ModelsSidebarList({\n className,\n}: ModelsSidebarListProps): React.JSX.Element {\n const {\n definition: { models },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredModels = models.filter((model) =>\n model.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedModels = sortBy(filteredModels, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewModelDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Model\n </Button>\n </NewModelDialog>\n {models.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n onClick={() => {\n setFilterQuery('');\n }}\n size=\"icon\"\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedModels.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No models found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedModels.map((model) => (\n <NavigationMenuItemWithLink key={model.id} asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key: modelEntityType.keyFromId(model.id) }}\n >\n {model.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n useRouterState,\n} from '@tanstack/react-router';\nimport { maxBy } from 'es-toolkit';\n\nimport { ErrorBoundary } from '#src/components/error-boundary/error-boundary.js';\n\nimport { EnumsSidebarList } from './enums/-components/enums-sidebar-list.js';\nimport { ModelsSidebarList } from './models/-components/models-sidebar-list.js';\n\nexport const Route = createFileRoute('/data')({\n component: DataLayout,\n});\n\nfunction DataLayout(): React.JSX.Element {\n const {\n definition: { models = [], enums = [] },\n } = useProjectDefinition();\n\n const longestName = maxBy([...models, ...enums], (m) => m.name.length)?.name;\n\n const modelsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/models'),\n });\n const enumsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/enums'),\n });\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar\n className=\"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4\"\n width=\"auto\"\n noPadding\n >\n {/* Allows us to ensure the width doesn't change when selected is semi-bold or search filter is active */}\n <div className=\"invisible block h-1 overflow-hidden font-semibold text-transparent\">\n {longestName}\n </div>\n <div className=\"px-4\">\n <NavigationTabs className=\"w-full\">\n <NavigationTabsItem asChild>\n <Link to=\"/data/models\" from=\"/\">\n Models\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\" from=\"/\">\n Enums\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n {modelsActive ? <ModelsSidebarList /> : null}\n {enumsActive ? <EnumsSidebarList /> : null}\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["maxBy","items","getValue","maxElement","max","i","element","value","modelEnumEntityType","importShared","useProjectDefinition","Button","InputField","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","ScrollArea","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","Link","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","longestName","name","length","modelsActive","useRouterState","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary","Outlet"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{i as r}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{k as n,L as s,O as a}from"./index-VsI1zxbc.js";const{Alert:o,AlertDescription:l,AlertTitle:p,NavigationTabs:d,NavigationTabsItem:t}=await r("@baseplate-dev/ui-components"),x=function(){const{key:i}=n.useParams();return e.jsxs("div",{className:"p-4",children:[e.jsxs(o,{variant:"warning",className:"mb-4",children:[e.jsx(p,{children:"⚠️ Development Preview"}),e.jsx(l,{children:"The admin app functionality will likely be fully rewritten in future versions. This is provided for preview purposes only and should not be relied upon for production use."})]}),e.jsxs(d,{children:[e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin",from:"/",params:{key:i},activeOptions:{exact:!0},children:"General"})}),e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin/sections",params:{key:i},children:"Sections"})})]}),e.jsx("div",{className:"mt-4 border-t",children:e.jsx(a,{})})]})};export{x as component};
2
- //# sourceMappingURL=route-xrfcRWC7.js.map
1
+ import{i as r}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{k as n,L as s,O as a}from"./index-gE__lQ6b.js";const{Alert:o,AlertDescription:l,AlertTitle:p,NavigationTabs:d,NavigationTabsItem:t}=await r("@baseplate-dev/ui-components"),x=function(){const{key:i}=n.useParams();return e.jsxs("div",{className:"p-4",children:[e.jsxs(o,{variant:"warning",className:"mb-4",children:[e.jsx(p,{children:"⚠️ Development Preview"}),e.jsx(l,{children:"The admin app functionality will likely be fully rewritten in future versions. This is provided for preview purposes only and should not be relied upon for production use."})]}),e.jsxs(d,{children:[e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin",from:"/",params:{key:i},activeOptions:{exact:!0},children:"General"})}),e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin/sections",params:{key:i},children:"Sections"})})]}),e.jsx("div",{className:"mt-4 border-t",children:e.jsx(a,{})})]})};export{x as component};
2
+ //# sourceMappingURL=route-_AecKyFO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-xrfcRWC7.js","sources":["../../src/routes/apps/edit.$key/admin/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n redirect,\n} from '@tanstack/react-router';\n\nexport const Route = createFileRoute('/apps/edit/$key/admin')({\n component: AdminAppEditLayout,\n beforeLoad: ({ context: { app }, params: { key } }) => {\n if (app?.type !== 'admin') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n return {\n adminDefinition: app,\n };\n },\n});\n\nfunction AdminAppEditLayout(): React.JSX.Element {\n const { key } = Route.useParams();\n return (\n <div className=\"p-4\">\n <Alert variant=\"warning\" className=\"mb-4\">\n <AlertTitle>⚠️ Development Preview</AlertTitle>\n <AlertDescription>\n The admin app functionality will likely be fully rewritten in future\n versions. This is provided for preview purposes only and should not be\n relied upon for production use.\n </AlertDescription>\n </Alert>\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/apps/edit/$key/admin\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n General\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/apps/edit/$key/admin/sections\" params={{ key }}>\n Sections\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n <div className=\"mt-4 border-t\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Alert","AlertDescription","AlertTitle","NavigationTabs","NavigationTabsItem","importShared","SplitComponent","key","Route","useParams","jsxs","jsx","Link","exact","Outlet"],"mappings":"oKAEA,KAAA,CAAA,MAAAA,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAYgCC,EAAA,UAciB,CACzC,KAAA,CAAEC,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAE9B,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAU,MACb,SAAA,CAAAA,EAAA,KAACV,EAAM,CAAA,QAAQ,UAAU,UAAU,OACjC,SAAA,CAAAW,EAAAA,IAACT,GAAW,SAAsB,wBAAA,CAAA,EAClCS,EAAAA,IAACV,GAAgB,SAIjB,6KAAA,CAAA,CAAA,EACF,SACCE,EACC,CAAA,SAAA,CAACQ,EAAAA,IAAAP,EAAA,CAAmB,QAAO,GACzB,SAAAO,EAAAA,IAACC,GACC,GAAG,wBACH,KAAK,IACL,OAAQ,CAAEL,IAAAA,GACV,cAAe,CAAEM,MAAO,EAAA,EAAO,kBAGjC,CAAA,EACF,EACAF,EAAAA,IAACP,GAAmB,QAAO,GACzB,eAACQ,EAAK,CAAA,GAAG,iCAAiC,OAAQ,CAAEL,IAAAA,CAAAA,EAAM,oBAE1D,CACF,CAAA,CAAA,EACF,QACC,MAAI,CAAA,UAAU,gBACb,SAAAI,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-_AecKyFO.js","sources":["../../src/routes/apps/edit.$key/admin/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n redirect,\n} from '@tanstack/react-router';\n\nexport const Route = createFileRoute('/apps/edit/$key/admin')({\n component: AdminAppEditLayout,\n beforeLoad: ({ context: { app }, params: { key } }) => {\n if (app?.type !== 'admin') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n return {\n adminDefinition: app,\n };\n },\n});\n\nfunction AdminAppEditLayout(): React.JSX.Element {\n const { key } = Route.useParams();\n return (\n <div className=\"p-4\">\n <Alert variant=\"warning\" className=\"mb-4\">\n <AlertTitle>⚠️ Development Preview</AlertTitle>\n <AlertDescription>\n The admin app functionality will likely be fully rewritten in future\n versions. This is provided for preview purposes only and should not be\n relied upon for production use.\n </AlertDescription>\n </Alert>\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/apps/edit/$key/admin\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n General\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/apps/edit/$key/admin/sections\" params={{ key }}>\n Sections\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n <div className=\"mt-4 border-t\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Alert","AlertDescription","AlertTitle","NavigationTabs","NavigationTabsItem","importShared","SplitComponent","key","Route","useParams","jsxs","jsx","Link","exact","Outlet"],"mappings":"oKAEA,KAAA,CAAA,MAAAA,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAYgCC,EAAA,UAciB,CACzC,KAAA,CAAEC,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAE9B,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAU,MACb,SAAA,CAAAA,EAAA,KAACV,EAAM,CAAA,QAAQ,UAAU,UAAU,OACjC,SAAA,CAAAW,EAAAA,IAACT,GAAW,SAAsB,wBAAA,CAAA,EAClCS,EAAAA,IAACV,GAAgB,SAIjB,6KAAA,CAAA,CAAA,EACF,SACCE,EACC,CAAA,SAAA,CAACQ,EAAAA,IAAAP,EAAA,CAAmB,QAAO,GACzB,SAAAO,EAAAA,IAACC,GACC,GAAG,wBACH,KAAK,IACL,OAAQ,CAAEL,IAAAA,GACV,cAAe,CAAEM,MAAO,EAAA,EAAO,kBAGjC,CAAA,EACF,EACAF,EAAAA,IAACP,GAAmB,QAAO,GACzB,eAACQ,EAAK,CAAA,GAAG,iCAAiC,OAAQ,CAAEL,IAAAA,CAAAA,EAAM,oBAE1D,CACF,CAAA,CAAA,EACF,QACC,MAAI,CAAA,UAAU,gBACb,SAAAI,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as o}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{y as s,L as n,O as m,r as l}from"./index-VsI1zxbc.js";import{s as p}from"./immer-xieDw-3D.js";const{adminSectionEntityType:r}=await o("@baseplate-dev/project-builder-lib"),{NavigationMenu:y,NavigationMenuItemWithLink:a,NavigationMenuList:x,SidebarLayout:h,SidebarLayoutContent:u,SidebarLayoutSidebar:j}=await o("@baseplate-dev/ui-components");l(r,"/apps/edit/{parentKey}/sections/edit/{key}");const v=function(){const{adminDefinition:c}=s.useRouteContext(),{key:t}=s.useParams(),d=p(c.sections??[],[i=>i.name]);return e.jsxs(h,{children:[e.jsxs(j,{className:"space-y-4",width:"sm",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("h2",{children:"Sections"})}),e.jsx(y,{orientation:"vertical",children:e.jsxs(x,{children:[e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:"new"},className:"text-green-500",children:"New Section"})})}),d.map(i=>e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:r.keyFromId(i.id)},children:i.name})})},i.id))]})})]}),e.jsx(u,{className:"p-4",children:e.jsx(m,{})})]})};export{v as component};
2
- //# sourceMappingURL=sections-Bl6CBMqu.js.map
1
+ import{i as o}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e}from"./index.esm-CyH9wtdI.js";import{y as s,L as n,O as m,r as l}from"./index-gE__lQ6b.js";import{s as p}from"./immer-xieDw-3D.js";const{adminSectionEntityType:r}=await o("@baseplate-dev/project-builder-lib"),{NavigationMenu:y,NavigationMenuItemWithLink:a,NavigationMenuList:x,SidebarLayout:h,SidebarLayoutContent:u,SidebarLayoutSidebar:j}=await o("@baseplate-dev/ui-components");l(r,"/apps/edit/{parentKey}/sections/edit/{key}");const v=function(){const{adminDefinition:c}=s.useRouteContext(),{key:t}=s.useParams(),d=p(c.sections??[],[i=>i.name]);return e.jsxs(h,{children:[e.jsxs(j,{className:"space-y-4",width:"sm",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("h2",{children:"Sections"})}),e.jsx(y,{orientation:"vertical",children:e.jsxs(x,{children:[e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:"new"},className:"text-green-500",children:"New Section"})})}),d.map(i=>e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:r.keyFromId(i.id)},children:i.name})})},i.id))]})})]}),e.jsx(u,{className:"p-4",children:e.jsx(m,{})})]})};export{v as component};
2
+ //# sourceMappingURL=sections-D-GS6uoS.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sections-Bl6CBMqu.js","sources":["../../src/routes/apps/edit.$key/admin/sections.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { adminSectionEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\n\nimport { registerEntityTypeUrl } from '#src/services/entity-type.js';\n\nregisterEntityTypeUrl(\n adminSectionEntityType,\n `/apps/edit/{parentKey}/sections/edit/{key}`,\n);\n\nexport const Route = createFileRoute('/apps/edit/$key/admin/sections')({\n component: AdminAppEditSectionsPage,\n});\n\nfunction AdminAppEditSectionsPage(): React.JSX.Element {\n const { adminDefinition } = Route.useRouteContext();\n const { key } = Route.useParams();\n const sortedSections = sortBy(adminDefinition.sections ?? [], [\n (section) => section.name,\n ]);\n\n return (\n <SidebarLayout>\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <div className=\"flex items-center justify-between\">\n <h2>Sections</h2>\n </div>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n <li>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: 'new',\n }}\n className=\"text-green-500\"\n >\n New Section\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n {sortedSections.map((section) => (\n <li key={section.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: adminSectionEntityType.keyFromId(section.id),\n }}\n >\n {section.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"p-4\">\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["adminSectionEntityType","importShared","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","registerEntityTypeUrl","SplitComponent","adminDefinition","Route","useRouteContext","key","useParams","sortedSections","sortBy","sections","section","name","jsxs","jsx","Link","sectionKey","map","keyFromId","id","Outlet"],"mappings":"mNAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAN,EAAA,8BAAA,EAaAO,EACER,EACA,4CACF,EAAES,MAAAA,EAAA,UAMqD,CAC/C,KAAA,CAAEC,gBAAAA,CAAAA,EAAoBC,EAAMC,gBAAgB,EAC5C,CAAEC,IAAAA,CAAAA,EAAQF,EAAMG,UAAU,EAC1BC,EAAiBC,EAAON,EAAgBO,UAAY,GAAI,CAC3DC,GAAYA,EAAQC,IAAI,CAC1B,EAED,cACGd,EACC,CAAA,SAAA,CAAAe,EAAA,KAACb,EAAqB,CAAA,UAAU,YAAY,MAAM,KAChD,SAAA,CAAAc,EAAAA,IAAC,OAAI,UAAU,oCACb,SAACA,MAAA,KAAA,CAAG,oBAAQ,CACd,CAAA,EACCA,MAAAnB,EAAA,CAAe,YAAY,WAC1B,gBAACE,EACC,CAAA,SAAA,CAACiB,EAAA,IAAA,KAAA,CACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,SAACkB,EAAA,IAAAC,EAAA,CACC,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAY,KAAA,EAEd,UAAU,iBAAgB,SAAA,aAG5B,CAAA,CACF,CAAA,EACF,EACCR,EAAeS,IACdN,GAAAG,EAAAA,IAAC,MACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,eAACmB,EACC,CAAA,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAYvB,EAAuByB,UAAUP,EAAQQ,EAAE,CAAA,EAGxDR,SAAQC,EAAAA,IAAAA,CACX,EACF,CAZOD,EAAAA,EAAQQ,EAajB,CACD,CAAA,CAAA,CACH,CACF,CAAA,CAAA,EACF,QACCpB,EAAqB,CAAA,UAAU,MAC9B,SAAAe,EAAA,IAACM,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"sections-D-GS6uoS.js","sources":["../../src/routes/apps/edit.$key/admin/sections.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { adminSectionEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\n\nimport { registerEntityTypeUrl } from '#src/services/entity-type.js';\n\nregisterEntityTypeUrl(\n adminSectionEntityType,\n `/apps/edit/{parentKey}/sections/edit/{key}`,\n);\n\nexport const Route = createFileRoute('/apps/edit/$key/admin/sections')({\n component: AdminAppEditSectionsPage,\n});\n\nfunction AdminAppEditSectionsPage(): React.JSX.Element {\n const { adminDefinition } = Route.useRouteContext();\n const { key } = Route.useParams();\n const sortedSections = sortBy(adminDefinition.sections ?? [], [\n (section) => section.name,\n ]);\n\n return (\n <SidebarLayout>\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <div className=\"flex items-center justify-between\">\n <h2>Sections</h2>\n </div>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n <li>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: 'new',\n }}\n className=\"text-green-500\"\n >\n New Section\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n {sortedSections.map((section) => (\n <li key={section.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: adminSectionEntityType.keyFromId(section.id),\n }}\n >\n {section.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"p-4\">\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["adminSectionEntityType","importShared","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","registerEntityTypeUrl","SplitComponent","adminDefinition","Route","useRouteContext","key","useParams","sortedSections","sortBy","sections","section","name","jsxs","jsx","Link","sectionKey","map","keyFromId","id","Outlet"],"mappings":"mNAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAN,EAAA,8BAAA,EAaAO,EACER,EACA,4CACF,EAAES,MAAAA,EAAA,UAMqD,CAC/C,KAAA,CAAEC,gBAAAA,CAAAA,EAAoBC,EAAMC,gBAAgB,EAC5C,CAAEC,IAAAA,CAAAA,EAAQF,EAAMG,UAAU,EAC1BC,EAAiBC,EAAON,EAAgBO,UAAY,GAAI,CAC3DC,GAAYA,EAAQC,IAAI,CAC1B,EAED,cACGd,EACC,CAAA,SAAA,CAAAe,EAAA,KAACb,EAAqB,CAAA,UAAU,YAAY,MAAM,KAChD,SAAA,CAAAc,EAAAA,IAAC,OAAI,UAAU,oCACb,SAACA,MAAA,KAAA,CAAG,oBAAQ,CACd,CAAA,EACCA,MAAAnB,EAAA,CAAe,YAAY,WAC1B,gBAACE,EACC,CAAA,SAAA,CAACiB,EAAA,IAAA,KAAA,CACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,SAACkB,EAAA,IAAAC,EAAA,CACC,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAY,KAAA,EAEd,UAAU,iBAAgB,SAAA,aAG5B,CAAA,CACF,CAAA,EACF,EACCR,EAAeS,IACdN,GAAAG,EAAAA,IAAC,MACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,eAACmB,EACC,CAAA,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAYvB,EAAuByB,UAAUP,EAAQQ,EAAE,CAAA,EAGxDR,SAAQC,EAAAA,IAAAA,CACX,EACF,CAZOD,EAAAA,EAAQQ,EAajB,CACD,CAAA,CAAA,CACH,CACF,CAAA,CAAA,EACF,QACCpB,EAAqB,CAAA,UAAU,MAC9B,SAAAe,EAAA,IAACM,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as r}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e,f as U,e as v,b as Q}from"./index.esm-CGbP6mNa.js";import{C as _,s as z,l as X,z as Z,A as N,c as ee}from"./index-VsI1zxbc.js";import{c as E}from"./index-MPyZaAGd.js";import{s as ne}from"./immer-xieDw-3D.js";const{ModelUtils:oe}=await r("@baseplate-dev/project-builder-lib"),{createAdminCrudInputWebConfig:le,useProjectDefinition:te}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:A}=await r("@baseplate-dev/ui-components");function ie({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definition:a}=te(),l=oe.getRelationsToModel(a,i.id).map(c=>({label:`${c.relation.foreignRelationName} (${c.model.name})`,value:c.relation.foreignId})),n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(A,{label:"Relation Name",control:s,name:`${n}.modelRelationRef`,options:l}),e.jsx(A,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ae=le({name:"embedded",pluginId:void 0,label:"Embedded",getNewInput:()=>({label:"",type:"embedded",modelRelationRef:"",embeddedFormRef:""}),Form:ie}),{createAdminCrudInputWebConfig:se,useProjectDefinition:de}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:O}=await r("@baseplate-dev/ui-components");function re({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definitionContainer:a}=de(),l=i.model.relations?.map(c=>({label:`${c.name} (${a.nameFromId(c.modelRef)})`,value:c.id}))??[],n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(O,{label:"Relation Name",control:s,name:`${n}.localRelationRef`,options:l}),e.jsx(O,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ce=se({name:"embeddedLocal",pluginId:void 0,label:"Embedded Local",getNewInput:()=>({label:"",type:"embeddedLocal",embeddedFormRef:"",localRelationRef:""}),Form:re}),{createAdminCrudInputWebConfig:me}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:pe}=await r("@baseplate-dev/ui-components");function ue({formProps:t,name:o,model:i}){const d=i.model.fields.filter(n=>n.type==="enum").map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsx(pe,{label:"Enum Field",control:l,name:`${a}.modelFieldRef`,options:d})}const be=me({name:"enum",pluginId:void 0,label:"Enum",getNewInput:()=>({label:"",type:"enum",modelFieldRef:""}),Form:ue}),{createAdminCrudInputWebConfig:fe,useProjectDefinition:je}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:y,SelectFieldController:Ce}=await r("@baseplate-dev/ui-components");function xe({formProps:t,name:o,model:i}){const{definitionContainer:d}=je(),a=i.model.relations?.map(s=>({label:`${s.name} (${d.nameFromId(s.modelRef)})`,value:s.id}))??[],l=o,n=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(Ce,{label:"Local Relation Name",control:n,name:`${l}.localRelationRef`,options:a}),e.jsx(y,{label:"Label Expression (e.g. name)",control:n,name:`${l}.labelExpression`}),e.jsx(y,{label:"Value Expression (e.g. id)",control:n,name:`${l}.valueExpression`}),e.jsx(y,{label:"Default Label (optional)",control:n,name:`${l}.defaultLabel`}),e.jsx(y,{label:"Empty Label (optional) - only if field is nullable",control:n,name:`${l}.nullLabel`})]})}const Fe=fe({name:"foreign",pluginId:void 0,label:"Foreign",getNewInput:()=>({label:"",type:"foreign",localRelationRef:"",labelExpression:"",valueExpression:"",defaultLabel:"",nullLabel:""}),Form:xe}),{createAdminCrudInputWebConfig:ve}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:ye,SelectFieldController:he}=await r("@baseplate-dev/ui-components");function Ie({formProps:t,name:o,model:i}){const d=i.model.fields.map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(he,{label:"Field",control:l,name:`${a}.modelFieldRef`,options:d}),e.jsx(ye,{label:"Validation (zod), e.g. z.string().min(1) (optional)",control:l,name:`${a}.validation`})]})}const ge=ve({name:"text",pluginId:void 0,label:"Text",getNewInput:()=>({label:"",type:"text",modelFieldRef:""}),Form:Ie}),W=[ae,ce,be,Fe,ge],{ModelUtils:$e}=await r("@baseplate-dev/project-builder-lib"),{adminCrudInputWebSpec:we,useProjectDefinition:Re}=await r("@baseplate-dev/project-builder-lib/web"),{Button:Se,InputFieldController:Ee,SelectFieldController:Te}=await r("@baseplate-dev/ui-components");function De({idx:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,a=v({control:d,name:"modelRef"}),{definition:l,pluginContainer:n}=Re(),s=a?$e.byIdOrThrow(l,a):void 0,c=n.getPluginSpec(we),u=c.getInputWebConfigs(W).map(f=>({label:f.label,value:f.name})),b=v({control:d,name:`form.fields.${t}.type`}),m=c.getInputWebConfig(b,W),p=m.Form;return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Te,{label:"Type",control:d,options:u,name:`form.fields.${t}.type`}),e.jsx(Ee,{label:"Label",control:d,name:`form.fields.${t}.label`}),p&&s&&e.jsx(p,{formProps:o,name:`form.fields.${t}`,model:s,embeddedFormOptions:i,pluginId:m.pluginId})]})}function V({className:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,{fields:a,append:l,remove:n}=U({control:d,name:"form.fields"});return e.jsxs("div",{className:E("space-y-4",t),children:[a.map((s,c)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[s.label," (",s.type,")"]}),onRemove:()=>{n(c)},defaultOpen:!s.label,children:e.jsx(De,{idx:c,formProps:o,embeddedFormOptions:i},s.id)},s.id)),e.jsx(Se,{onClick:()=>{l({type:"text",label:""})},children:"Add Field"})]})}const{adminCrudDisplayTypes:Ne,ModelUtils:Ae}=await r("@baseplate-dev/project-builder-lib"),{useProjectDefinition:Oe}=await r("@baseplate-dev/project-builder-lib/web"),{Button:We,InputFieldController:w,SelectFieldController:R}=await r("@baseplate-dev/ui-components");function Le({idx:t,control:o,fieldOptions:i,localRelationOptions:d}){const a=Ne.map(n=>({label:n,value:n})),l=v({control:o,name:`table.columns.${t}.display.type`});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(R,{label:"Type",control:o,options:a,name:`table.columns.${t}.display.type`}),e.jsx(w,{label:"Label",control:o,name:`table.columns.${t}.label`}),l==="text"&&e.jsx(R,{label:"Field",control:o,name:`table.columns.${t}.display.modelFieldRef`,options:i}),l==="foreign"&&e.jsxs(e.Fragment,{children:[e.jsx(R,{label:"Local Relation Name",control:o,name:`table.columns.${t}.display.localRelationRef`,options:d}),e.jsx(w,{label:"Label Expression (e.g. name)",control:o,name:`table.columns.${t}.display.labelExpression`}),e.jsx(w,{label:"Value Expression (e.g. id)",control:o,name:`table.columns.${t}.display.valueExpression`})]})]})}function H({className:t,control:o}){const i=v({control:o,name:"modelRef"}),{definition:d,definitionContainer:a}=Oe(),l=i?Ae.byIdOrThrow(d,i):void 0,{fields:n,append:s,remove:c}=U({control:o,name:"table.columns"}),u=l?.model.relations?.map(m=>({label:`${m.name} (${a.nameFromId(m.modelRef)})`,value:m.id}))??[],b=l?.model.fields.map(m=>({label:m.name,value:m.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[n.map((m,p)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[m.label," (",m.display.type,")"]}),onRemove:()=>{c(p)},defaultOpen:!m.label,children:e.jsx(Le,{idx:p,control:o,fieldOptions:b,localRelationOptions:u},m.id)},m.id)),e.jsx(We,{onClick:()=>{s({display:{type:"text",modelFieldRef:""},label:""})},children:"Add Column"})]})}const{createAdminCrudEmbeddedFormSchema:Pe}=await r("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:ke,useProjectDefinition:K}=await r("@baseplate-dev/project-builder-lib/web"),{Button:S,CheckboxFieldController:Be,InputFieldController:Me,SelectFieldController:L,Table:Ue,TableBody:_e,TableCell:h,TableHead:I,TableHeader:ze,TableRow:P,toast:Ve}=await r("@baseplate-dev/ui-components"),{useId:He}=await r("react");function Ke({items:t,edit:o,remove:i}){const{definitionContainer:d}=K();return e.jsxs(Ue,{className:"max-w-6xl",children:[e.jsx(ze,{children:e.jsxs(P,{children:[e.jsx(I,{children:"Form Name"}),e.jsx(I,{children:"Model Name"}),e.jsx(I,{children:"Type"}),e.jsx(I,{children:"Actions"})]})}),e.jsx(_e,{children:t.map((a,l)=>e.jsxs(P,{children:[e.jsx(h,{children:a.name}),e.jsx(h,{children:d.nameFromId(a.modelRef)}),e.jsx(h,{children:a.type}),e.jsxs(h,{className:"space-x-4",children:[e.jsx(S,{variant:"link",size:"none",onClick:()=>{o(l)},children:"Edit"}),e.jsx(S,{variant:"linkDestructive",size:"none",onClick:()=>{i(l)},children:"Remove"})]})]},a.id))})]})}const qe=[{label:"Object",value:"object"},{label:"List",value:"list"}];function Ge({initialData:t,onSubmit:o,embeddedFormOptions:i}){const{definition:d}=K(),a=ke(Pe),l=Q({resolver:z(a),defaultValues:t}),{handleSubmit:n,control:s,watch:c}=l,u=d.models.map(p=>({label:p.name,value:p.id})),b=c("type"),m=He();return e.jsxs("form",{onSubmit:p=>{p.stopPropagation(),n(o)(p).catch(f=>{Ve.error(X(f))})},id:m,className:"space-y-4",children:[e.jsx(Me,{label:"Name",control:s,name:"name"}),e.jsx(L,{label:"Type",control:s,name:"type",options:qe}),e.jsx(Be,{label:"Include ID Field? (useful for list types)",control:s,name:"includeIdField"}),e.jsx(L,{label:"Model",control:s,options:u,name:"modelRef"}),b==="list"&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:"Table"}),e.jsx(H,{control:s})]}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:l,embeddedFormOptions:i}),e.jsx(S,{type:"submit",form:m,children:"Save"})]})}const{useProjectDefinition:Ye}=await r("@baseplate-dev/project-builder-lib/web"),{CheckboxFieldController:Je,SelectFieldController:Qe}=await r("@baseplate-dev/ui-components");function Xe({className:t,formProps:o}){const{control:i}=o,{definition:d}=Ye(),a=d.models.map(n=>({label:n.name,value:n.id})),l=v({control:i,name:"embeddedForms"})?.map(n=>({label:n.name,value:n.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[e.jsx(Qe,{label:"Model",control:i,options:a,name:"modelRef"}),e.jsx(Je,{label:"Disable Create?",control:i,name:"disableCreate"}),e.jsx("h2",{children:"Table"}),e.jsx(H,{control:i}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:o,embeddedFormOptions:l}),e.jsx("h2",{children:"Embedded Forms"}),e.jsx(Z.LabelledController,{control:i,name:"embeddedForms",renderForm:n=>e.jsx(Ge,{...n,embeddedFormOptions:l}),renderTable:n=>e.jsx(Ke,{...n}),defaultValue:{type:"object"}})]})}const{adminSectionEntityType:k,createAdminSectionSchema:Ze}=await r("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:en,useDefinitionSchema:nn,useProjectDefinition:on,useResettableForm:ln}=await r("@baseplate-dev/project-builder-lib/web"),{Button:B,ComboboxFieldController:tn,InputFieldController:M,SelectFieldController:an,useConfirmDialog:sn}=await r("@baseplate-dev/ui-components"),{useEffect:dn}=await r("react"),rn=[{label:"Crud",value:"crud"}],fn=function(){const{requestConfirm:o}=sn(),{key:i}=N.useParams(),{saveDefinitionWithFeedback:d,saveDefinitionWithFeedbackSync:a,isSavingDefinition:l,definition:n}=on(),s=ee(),{adminDefinition:c,sectionId:u,existingSection:b}=N.useLoaderData(),m=nn(Ze),p=ln({values:b,defaultValues:{type:"crud"},resolver:z(m)}),{control:f,handleSubmit:q,watch:G,reset:g}=p;dn(()=>{g(b??{type:"crud"})},[g,b]);const T=q(j=>{const C=j.id||k.generateNewId();return d(x=>{const $=x.apps.find(F=>F.id===c.id);if($?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");$.sections=ne([...($.sections??[]).filter(F=>!u||F.id!==u),{...j,id:C}],[F=>F.name])},{onSuccess:()=>{u||s({to:"/apps/edit/$key/admin/sections/$sectionKey",params:{key:i,sectionKey:k.keyFromId(C)}})}})});en({control:f,reset:g,onSubmit:T});const D=G("type");function Y(){o({title:"Delete Section",content:`Are you sure you want to delete ${b?.name??"this section"}?`,onConfirm:()=>{a(j=>{const C=j.apps.find(x=>x.id===c.id);if(C?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");C.sections=(C.sections??[]).filter(x=>!u||x.id!==u)},{successMessage:"Successfully deleted section!",onSuccess:()=>{s({to:".."})}})}})}const J=n.features.map(j=>({label:j.name,value:j.id}));return e.jsx("div",{className:"p-4",children:e.jsxs("form",{onSubmit:T,className:"space-y-4",children:[u&&e.jsx(B,{variant:"link",size:"none",onClick:()=>{Y()},children:"Delete Section"}),e.jsx(M,{label:"Name",control:f,name:"name"}),e.jsx(tn,{label:"Feature",control:f,options:J,name:"featureRef"}),e.jsx(M,{label:"Icon",control:f,name:"icon"}),e.jsx(an,{label:"Type",control:f,name:"type",options:rn}),(()=>{switch(D){case"crud":return e.jsx(Xe,{formProps:p});default:return e.jsxs("div",{children:["Unsupported type ",D]})}})(),e.jsx(B,{type:"submit",disabled:l,children:"Save"})]})})};export{fn as component};
2
- //# sourceMappingURL=sections._sectionKey-lnWxksec.js.map
1
+ import{i as r}from"./_virtual___federation_fn_import-CE3p-l_2.js";import{j as e,f as U,e as v,b as Q}from"./index.esm-CyH9wtdI.js";import{C as _,s as z,l as X,z as Z,A as N,c as ee}from"./index-gE__lQ6b.js";import{c as E}from"./index-BS45dlQs.js";import{s as ne}from"./immer-xieDw-3D.js";const{ModelUtils:oe}=await r("@baseplate-dev/project-builder-lib"),{createAdminCrudInputWebConfig:le,useProjectDefinition:te}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:A}=await r("@baseplate-dev/ui-components");function ie({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definition:a}=te(),l=oe.getRelationsToModel(a,i.id).map(c=>({label:`${c.relation.foreignRelationName} (${c.model.name})`,value:c.relation.foreignId})),n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(A,{label:"Relation Name",control:s,name:`${n}.modelRelationRef`,options:l}),e.jsx(A,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ae=le({name:"embedded",pluginId:void 0,label:"Embedded",getNewInput:()=>({label:"",type:"embedded",modelRelationRef:"",embeddedFormRef:""}),Form:ie}),{createAdminCrudInputWebConfig:se,useProjectDefinition:de}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:O}=await r("@baseplate-dev/ui-components");function re({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definitionContainer:a}=de(),l=i.model.relations?.map(c=>({label:`${c.name} (${a.nameFromId(c.modelRef)})`,value:c.id}))??[],n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(O,{label:"Relation Name",control:s,name:`${n}.localRelationRef`,options:l}),e.jsx(O,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ce=se({name:"embeddedLocal",pluginId:void 0,label:"Embedded Local",getNewInput:()=>({label:"",type:"embeddedLocal",embeddedFormRef:"",localRelationRef:""}),Form:re}),{createAdminCrudInputWebConfig:me}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:pe}=await r("@baseplate-dev/ui-components");function ue({formProps:t,name:o,model:i}){const d=i.model.fields.filter(n=>n.type==="enum").map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsx(pe,{label:"Enum Field",control:l,name:`${a}.modelFieldRef`,options:d})}const be=me({name:"enum",pluginId:void 0,label:"Enum",getNewInput:()=>({label:"",type:"enum",modelFieldRef:""}),Form:ue}),{createAdminCrudInputWebConfig:fe,useProjectDefinition:je}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:y,SelectFieldController:Ce}=await r("@baseplate-dev/ui-components");function xe({formProps:t,name:o,model:i}){const{definitionContainer:d}=je(),a=i.model.relations?.map(s=>({label:`${s.name} (${d.nameFromId(s.modelRef)})`,value:s.id}))??[],l=o,n=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(Ce,{label:"Local Relation Name",control:n,name:`${l}.localRelationRef`,options:a}),e.jsx(y,{label:"Label Expression (e.g. name)",control:n,name:`${l}.labelExpression`}),e.jsx(y,{label:"Value Expression (e.g. id)",control:n,name:`${l}.valueExpression`}),e.jsx(y,{label:"Default Label (optional)",control:n,name:`${l}.defaultLabel`}),e.jsx(y,{label:"Empty Label (optional) - only if field is nullable",control:n,name:`${l}.nullLabel`})]})}const Fe=fe({name:"foreign",pluginId:void 0,label:"Foreign",getNewInput:()=>({label:"",type:"foreign",localRelationRef:"",labelExpression:"",valueExpression:"",defaultLabel:"",nullLabel:""}),Form:xe}),{createAdminCrudInputWebConfig:ve}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:ye,SelectFieldController:he}=await r("@baseplate-dev/ui-components");function Ie({formProps:t,name:o,model:i}){const d=i.model.fields.map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(he,{label:"Field",control:l,name:`${a}.modelFieldRef`,options:d}),e.jsx(ye,{label:"Validation (zod), e.g. z.string().min(1) (optional)",control:l,name:`${a}.validation`})]})}const ge=ve({name:"text",pluginId:void 0,label:"Text",getNewInput:()=>({label:"",type:"text",modelFieldRef:""}),Form:Ie}),W=[ae,ce,be,Fe,ge],{ModelUtils:$e}=await r("@baseplate-dev/project-builder-lib"),{adminCrudInputWebSpec:we,useProjectDefinition:Re}=await r("@baseplate-dev/project-builder-lib/web"),{Button:Se,InputFieldController:Ee,SelectFieldController:Te}=await r("@baseplate-dev/ui-components");function De({idx:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,a=v({control:d,name:"modelRef"}),{definition:l,pluginContainer:n}=Re(),s=a?$e.byIdOrThrow(l,a):void 0,c=n.getPluginSpec(we),u=c.getInputWebConfigs(W).map(f=>({label:f.label,value:f.name})),b=v({control:d,name:`form.fields.${t}.type`}),m=c.getInputWebConfig(b,W),p=m.Form;return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Te,{label:"Type",control:d,options:u,name:`form.fields.${t}.type`}),e.jsx(Ee,{label:"Label",control:d,name:`form.fields.${t}.label`}),p&&s&&e.jsx(p,{formProps:o,name:`form.fields.${t}`,model:s,embeddedFormOptions:i,pluginId:m.pluginId})]})}function V({className:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,{fields:a,append:l,remove:n}=U({control:d,name:"form.fields"});return e.jsxs("div",{className:E("space-y-4",t),children:[a.map((s,c)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[s.label," (",s.type,")"]}),onRemove:()=>{n(c)},defaultOpen:!s.label,children:e.jsx(De,{idx:c,formProps:o,embeddedFormOptions:i},s.id)},s.id)),e.jsx(Se,{onClick:()=>{l({type:"text",label:""})},children:"Add Field"})]})}const{adminCrudDisplayTypes:Ne,ModelUtils:Ae}=await r("@baseplate-dev/project-builder-lib"),{useProjectDefinition:Oe}=await r("@baseplate-dev/project-builder-lib/web"),{Button:We,InputFieldController:w,SelectFieldController:R}=await r("@baseplate-dev/ui-components");function Le({idx:t,control:o,fieldOptions:i,localRelationOptions:d}){const a=Ne.map(n=>({label:n,value:n})),l=v({control:o,name:`table.columns.${t}.display.type`});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(R,{label:"Type",control:o,options:a,name:`table.columns.${t}.display.type`}),e.jsx(w,{label:"Label",control:o,name:`table.columns.${t}.label`}),l==="text"&&e.jsx(R,{label:"Field",control:o,name:`table.columns.${t}.display.modelFieldRef`,options:i}),l==="foreign"&&e.jsxs(e.Fragment,{children:[e.jsx(R,{label:"Local Relation Name",control:o,name:`table.columns.${t}.display.localRelationRef`,options:d}),e.jsx(w,{label:"Label Expression (e.g. name)",control:o,name:`table.columns.${t}.display.labelExpression`}),e.jsx(w,{label:"Value Expression (e.g. id)",control:o,name:`table.columns.${t}.display.valueExpression`})]})]})}function H({className:t,control:o}){const i=v({control:o,name:"modelRef"}),{definition:d,definitionContainer:a}=Oe(),l=i?Ae.byIdOrThrow(d,i):void 0,{fields:n,append:s,remove:c}=U({control:o,name:"table.columns"}),u=l?.model.relations?.map(m=>({label:`${m.name} (${a.nameFromId(m.modelRef)})`,value:m.id}))??[],b=l?.model.fields.map(m=>({label:m.name,value:m.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[n.map((m,p)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[m.label," (",m.display.type,")"]}),onRemove:()=>{c(p)},defaultOpen:!m.label,children:e.jsx(Le,{idx:p,control:o,fieldOptions:b,localRelationOptions:u},m.id)},m.id)),e.jsx(We,{onClick:()=>{s({display:{type:"text",modelFieldRef:""},label:""})},children:"Add Column"})]})}const{createAdminCrudEmbeddedFormSchema:Pe}=await r("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:ke,useProjectDefinition:K}=await r("@baseplate-dev/project-builder-lib/web"),{Button:S,CheckboxFieldController:Be,InputFieldController:Me,SelectFieldController:L,Table:Ue,TableBody:_e,TableCell:h,TableHead:I,TableHeader:ze,TableRow:P,toast:Ve}=await r("@baseplate-dev/ui-components"),{useId:He}=await r("react");function Ke({items:t,edit:o,remove:i}){const{definitionContainer:d}=K();return e.jsxs(Ue,{className:"max-w-6xl",children:[e.jsx(ze,{children:e.jsxs(P,{children:[e.jsx(I,{children:"Form Name"}),e.jsx(I,{children:"Model Name"}),e.jsx(I,{children:"Type"}),e.jsx(I,{children:"Actions"})]})}),e.jsx(_e,{children:t.map((a,l)=>e.jsxs(P,{children:[e.jsx(h,{children:a.name}),e.jsx(h,{children:d.nameFromId(a.modelRef)}),e.jsx(h,{children:a.type}),e.jsxs(h,{className:"space-x-4",children:[e.jsx(S,{variant:"link",size:"none",onClick:()=>{o(l)},children:"Edit"}),e.jsx(S,{variant:"linkDestructive",size:"none",onClick:()=>{i(l)},children:"Remove"})]})]},a.id))})]})}const qe=[{label:"Object",value:"object"},{label:"List",value:"list"}];function Ge({initialData:t,onSubmit:o,embeddedFormOptions:i}){const{definition:d}=K(),a=ke(Pe),l=Q({resolver:z(a),defaultValues:t}),{handleSubmit:n,control:s,watch:c}=l,u=d.models.map(p=>({label:p.name,value:p.id})),b=c("type"),m=He();return e.jsxs("form",{onSubmit:p=>{p.stopPropagation(),n(o)(p).catch(f=>{Ve.error(X(f))})},id:m,className:"space-y-4",children:[e.jsx(Me,{label:"Name",control:s,name:"name"}),e.jsx(L,{label:"Type",control:s,name:"type",options:qe}),e.jsx(Be,{label:"Include ID Field? (useful for list types)",control:s,name:"includeIdField"}),e.jsx(L,{label:"Model",control:s,options:u,name:"modelRef"}),b==="list"&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:"Table"}),e.jsx(H,{control:s})]}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:l,embeddedFormOptions:i}),e.jsx(S,{type:"submit",form:m,children:"Save"})]})}const{useProjectDefinition:Ye}=await r("@baseplate-dev/project-builder-lib/web"),{CheckboxFieldController:Je,SelectFieldController:Qe}=await r("@baseplate-dev/ui-components");function Xe({className:t,formProps:o}){const{control:i}=o,{definition:d}=Ye(),a=d.models.map(n=>({label:n.name,value:n.id})),l=v({control:i,name:"embeddedForms"})?.map(n=>({label:n.name,value:n.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[e.jsx(Qe,{label:"Model",control:i,options:a,name:"modelRef"}),e.jsx(Je,{label:"Disable Create?",control:i,name:"disableCreate"}),e.jsx("h2",{children:"Table"}),e.jsx(H,{control:i}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:o,embeddedFormOptions:l}),e.jsx("h2",{children:"Embedded Forms"}),e.jsx(Z.LabelledController,{control:i,name:"embeddedForms",renderForm:n=>e.jsx(Ge,{...n,embeddedFormOptions:l}),renderTable:n=>e.jsx(Ke,{...n}),defaultValue:{type:"object"}})]})}const{adminSectionEntityType:k,createAdminSectionSchema:Ze}=await r("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:en,useDefinitionSchema:nn,useProjectDefinition:on,useResettableForm:ln}=await r("@baseplate-dev/project-builder-lib/web"),{Button:B,ComboboxFieldController:tn,InputFieldController:M,SelectFieldController:an,useConfirmDialog:sn}=await r("@baseplate-dev/ui-components"),{useEffect:dn}=await r("react"),rn=[{label:"Crud",value:"crud"}],fn=function(){const{requestConfirm:o}=sn(),{key:i}=N.useParams(),{saveDefinitionWithFeedback:d,saveDefinitionWithFeedbackSync:a,isSavingDefinition:l,definition:n}=on(),s=ee(),{adminDefinition:c,sectionId:u,existingSection:b}=N.useLoaderData(),m=nn(Ze),p=ln({values:b,defaultValues:{type:"crud"},resolver:z(m)}),{control:f,handleSubmit:q,watch:G,reset:g}=p;dn(()=>{g(b??{type:"crud"})},[g,b]);const T=q(j=>{const C=j.id||k.generateNewId();return d(x=>{const $=x.apps.find(F=>F.id===c.id);if($?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");$.sections=ne([...($.sections??[]).filter(F=>!u||F.id!==u),{...j,id:C}],[F=>F.name])},{onSuccess:()=>{u||s({to:"/apps/edit/$key/admin/sections/$sectionKey",params:{key:i,sectionKey:k.keyFromId(C)}})}})});en({control:f,reset:g,onSubmit:T});const D=G("type");function Y(){o({title:"Delete Section",content:`Are you sure you want to delete ${b?.name??"this section"}?`,onConfirm:()=>{a(j=>{const C=j.apps.find(x=>x.id===c.id);if(C?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");C.sections=(C.sections??[]).filter(x=>!u||x.id!==u)},{successMessage:"Successfully deleted section!",onSuccess:()=>{s({to:".."})}})}})}const J=n.features.map(j=>({label:j.name,value:j.id}));return e.jsx("div",{className:"p-4",children:e.jsxs("form",{onSubmit:T,className:"space-y-4",children:[u&&e.jsx(B,{variant:"link",size:"none",onClick:()=>{Y()},children:"Delete Section"}),e.jsx(M,{label:"Name",control:f,name:"name"}),e.jsx(tn,{label:"Feature",control:f,options:J,name:"featureRef"}),e.jsx(M,{label:"Icon",control:f,name:"icon"}),e.jsx(an,{label:"Type",control:f,name:"type",options:rn}),(()=>{switch(D){case"crud":return e.jsx(Xe,{formProps:p});default:return e.jsxs("div",{children:["Unsupported type ",D]})}})(),e.jsx(B,{type:"submit",disabled:l,children:"Save"})]})})};export{fn as component};
2
+ //# sourceMappingURL=sections._sectionKey-Bj4VmUuM.js.map