@baseplate-dev/project-builder-web 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/assets/{-constants-BYERQCO8.js → -constants-CBBXnsgS.js} +2 -2
  2. package/dist/assets/{-constants-BYERQCO8.js.map → -constants-CBBXnsgS.js.map} +1 -1
  3. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/web-Db9HEBw5.js.map +1 -1
  4. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-fZlnH9Ds.js.map +1 -1
  5. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-CoxJjxbV.js.map +1 -1
  6. package/dist/assets/__federation_shared_@baseplate-dev/utils-Bhl1WBIT.js.map +1 -1
  7. package/dist/assets/__federation_shared_@tanstack/react-router-JHHIpdEJ.js.map +1 -1
  8. package/dist/assets/__federation_shared_react-WURrSs1p.js.map +1 -1
  9. package/dist/assets/__federation_shared_react-dom-CWagDEjd.js.map +1 -1
  10. package/dist/assets/__federation_shared_zod-CBKZOTZP.js.map +1 -1
  11. package/dist/assets/_virtual___federation_fn_import-D3sI42Ph.js.map +1 -1
  12. package/dist/assets/{admin-Dy1xMuLp.js → admin-BmEAbqDf.js} +2 -2
  13. package/dist/assets/{admin-Dy1xMuLp.js.map → admin-BmEAbqDf.js.map} +1 -1
  14. package/dist/assets/{backend-SevlkhOM.js → backend-3ZlC6POv.js} +2 -2
  15. package/dist/assets/{backend-SevlkhOM.js.map → backend-3ZlC6POv.js.map} +1 -1
  16. package/dist/assets/badge-with-type-label-CThmzNSh.js.map +1 -1
  17. package/dist/assets/capitalize-gOJXDbsR.js.map +1 -1
  18. package/dist/assets/{edit._key-BgnflZIL.js → edit._key-D-7xw9rv.js} +2 -2
  19. package/dist/assets/{edit._key-BgnflZIL.js.map → edit._key-D-7xw9rv.js.map} +1 -1
  20. package/dist/assets/{edit._sectionKey-D4mTSUhO.js → edit._sectionKey-CZgof0ob.js} +3 -3
  21. package/dist/assets/edit._sectionKey-CZgof0ob.js.map +1 -0
  22. package/dist/assets/enum-info-form-3ykREN-o.js.map +1 -1
  23. package/dist/assets/{graphql-C37jbnTG.js → graphql-DFecTG83.js} +2 -2
  24. package/dist/assets/{graphql-C37jbnTG.js.map → graphql-DFecTG83.js.map} +1 -1
  25. package/dist/assets/{hierarchy-CNBHjTAJ.js → hierarchy-jFN5DTrv.js} +2 -2
  26. package/dist/assets/{hierarchy-CNBHjTAJ.js.map → hierarchy-jFN5DTrv.js.map} +1 -1
  27. package/dist/assets/immer-B7fdkLVi.js.map +1 -1
  28. package/dist/assets/{index-CFlVUowS.js → index-B4AqRYYd.js} +2 -2
  29. package/dist/assets/{index-CFlVUowS.js.map → index-B4AqRYYd.js.map} +1 -1
  30. package/dist/assets/{index-B3A5IWAQ.js → index-BJlq0bmu.js} +2 -2
  31. package/dist/assets/{index-B3A5IWAQ.js.map → index-BJlq0bmu.js.map} +1 -1
  32. package/dist/assets/{index-CDx3IfgN.js → index-BPRSO52F.js} +2 -2
  33. package/dist/assets/{index-CDx3IfgN.js.map → index-BPRSO52F.js.map} +1 -1
  34. package/dist/assets/{index-CAFf3K5-.js → index-BWWBFiT1.js} +2 -2
  35. package/dist/assets/{index-CAFf3K5-.js.map → index-BWWBFiT1.js.map} +1 -1
  36. package/dist/assets/{index-Ckh17o1U.js → index-BZ4uW6kN.js} +2 -2
  37. package/dist/assets/{index-Ckh17o1U.js.map → index-BZ4uW6kN.js.map} +1 -1
  38. package/dist/assets/{index-D48MR3bL.js → index-BpFwTs3X.js} +2 -2
  39. package/dist/assets/{index-D48MR3bL.js.map → index-BpFwTs3X.js.map} +1 -1
  40. package/dist/assets/{index-mFxKl9yz.js → index-CbnCfDth.js} +2 -2
  41. package/dist/assets/{index-mFxKl9yz.js.map → index-CbnCfDth.js.map} +1 -1
  42. package/dist/assets/{index-DEKFCy0H.js → index-Cd_baD6T.js} +4 -4
  43. package/dist/assets/index-Cd_baD6T.js.map +1 -0
  44. package/dist/assets/index-D5UX5AHP.js.map +1 -1
  45. package/dist/assets/index-DRRJXHq_.js.map +1 -1
  46. package/dist/assets/{index-2EwzbJik.js → index-DhfdQsvQ.js} +2 -2
  47. package/dist/assets/{index-2EwzbJik.js.map → index-DhfdQsvQ.js.map} +1 -1
  48. package/dist/assets/index-DqHVrEeL.js.map +1 -1
  49. package/dist/assets/index-Dqph-b0R.css +1 -0
  50. package/dist/assets/{index-B2l1e3vi.js → index-UtPzkFI2.js} +2 -2
  51. package/dist/assets/{index-B2l1e3vi.js.map → index-UtPzkFI2.js.map} +1 -1
  52. package/dist/assets/index-c0qeY2gs.js.map +1 -1
  53. package/dist/assets/index-tHURiz2C.js.map +1 -1
  54. package/dist/assets/index-tflukq04.js.map +1 -1
  55. package/dist/assets/index.esm-CdP29Ssb.js.map +1 -1
  56. package/dist/assets/inflection-C1nKqrJS.js.map +1 -1
  57. package/dist/assets/isEqual-C420KeG-.js.map +1 -1
  58. package/dist/assets/jsx-runtime-D_zvdyIk.js.map +1 -1
  59. package/dist/assets/model-info-form-koY65NLs.js.map +1 -1
  60. package/dist/assets/model-merger-D1L5cIAo.js.map +1 -1
  61. package/dist/assets/{new-admin-section-dialog-4X2fxo7a.js → new-admin-section-dialog-DFpUuP_Z.js} +2 -2
  62. package/dist/assets/{new-admin-section-dialog-4X2fxo7a.js.map → new-admin-section-dialog-DFpUuP_Z.js.map} +1 -1
  63. package/dist/assets/{new-app-dialog-CCI4q4Mt.js → new-app-dialog-Cnp9A5Cx.js} +2 -2
  64. package/dist/assets/{new-app-dialog-CCI4q4Mt.js.map → new-app-dialog-Cnp9A5Cx.js.map} +1 -1
  65. package/dist/assets/{new-enum-dialog-B5zvBxhT.js → new-enum-dialog-CE3pNVPW.js} +2 -2
  66. package/dist/assets/{new-enum-dialog-B5zvBxhT.js.map → new-enum-dialog-CE3pNVPW.js.map} +1 -1
  67. package/dist/assets/{new-model-dialog-CiwTpKcZ.js → new-model-dialog-BUqUnu3F.js} +2 -2
  68. package/dist/assets/{new-model-dialog-CiwTpKcZ.js.map → new-model-dialog-BUqUnu3F.js.map} +1 -1
  69. package/dist/assets/{route-PmxQsBVj.js → route-BMREAhaC.js} +2 -2
  70. package/dist/assets/{route-PmxQsBVj.js.map → route-BMREAhaC.js.map} +1 -1
  71. package/dist/assets/{route-CZgTuGeJ.js → route-B_y_fjG1.js} +2 -2
  72. package/dist/assets/{route-CZgTuGeJ.js.map → route-B_y_fjG1.js.map} +1 -1
  73. package/dist/assets/{route-DluQ5e3_.js → route-CM78Qts_.js} +2 -2
  74. package/dist/assets/{route-DluQ5e3_.js.map → route-CM78Qts_.js.map} +1 -1
  75. package/dist/assets/{route-6ErXC2Qt.js → route-D-8r4X0U.js} +2 -2
  76. package/dist/assets/{route-6ErXC2Qt.js.map → route-D-8r4X0U.js.map} +1 -1
  77. package/dist/assets/{route-gzD4oiAl.js → route-D7DRL965.js} +2 -2
  78. package/dist/assets/{route-gzD4oiAl.js.map → route-D7DRL965.js.map} +1 -1
  79. package/dist/assets/{route-C6wCPwVj.js → route-DGnyRZBc.js} +2 -2
  80. package/dist/assets/{route-C6wCPwVj.js.map → route-DGnyRZBc.js.map} +1 -1
  81. package/dist/assets/route-Dm8VYkZY.js +2 -0
  82. package/dist/assets/{route-DLz_DL5S.js.map → route-Dm8VYkZY.js.map} +1 -1
  83. package/dist/assets/{route-C3eBLQEr.js → route-Dpt-JNZC.js} +2 -2
  84. package/dist/assets/{route-C3eBLQEr.js.map → route-Dpt-JNZC.js.map} +1 -1
  85. package/dist/assets/{route-DzYT3FNA.js → route-pfSpaHo3.js} +2 -2
  86. package/dist/assets/{route-DzYT3FNA.js.map → route-pfSpaHo3.js.map} +1 -1
  87. package/dist/assets/{route-gYB7kkkm.js → route-x978fCyu.js} +2 -2
  88. package/dist/assets/{route-gYB7kkkm.js.map → route-x978fCyu.js.map} +1 -1
  89. package/dist/assets/{service--2LVz4Ht.js → service-BSH0RhEL.js} +2 -2
  90. package/dist/assets/{service--2LVz4Ht.js.map → service-BSH0RhEL.js.map} +1 -1
  91. package/dist/assets/sortBy-C9bvycg5.js.map +1 -1
  92. package/dist/assets/{template-extractor-D33LuEZ8.js → template-extractor-Dzitw66S.js} +2 -2
  93. package/dist/assets/{template-extractor-D33LuEZ8.js.map → template-extractor-Dzitw66S.js.map} +1 -1
  94. package/dist/assets/{theme-builder-CWetoMuo.js → theme-builder-00-pJhvO.js} +2 -2
  95. package/dist/assets/{theme-builder-CWetoMuo.js.map → theme-builder-00-pJhvO.js.map} +1 -1
  96. package/dist/assets/use-definition-schema-BuO4pbji.js.map +1 -1
  97. package/dist/assets/{use-enum-form-BRBAlWJc.js → use-enum-form-CiJfrBqR.js} +2 -2
  98. package/dist/assets/{use-enum-form-BRBAlWJc.js.map → use-enum-form-CiJfrBqR.js.map} +1 -1
  99. package/dist/assets/{use-model-form-psj-JlE9.js → use-model-form-AKI1Wi68.js} +2 -2
  100. package/dist/assets/{use-model-form-psj-JlE9.js.map → use-model-form-AKI1Wi68.js.map} +1 -1
  101. package/dist/index.html +2 -2
  102. package/package.json +11 -11
  103. package/dist/assets/edit._sectionKey-D4mTSUhO.js.map +0 -1
  104. package/dist/assets/index-DEKFCy0H.js.map +0 -1
  105. package/dist/assets/index-DPK1IfNZ.css +0 -1
  106. package/dist/assets/route-DLz_DL5S.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"new-enum-dialog-B5zvBxhT.js","sources":["../../src/routes/data/enums/-components/new-enum-dialog.tsx"],"sourcesContent":["import type React from 'react';\n\nimport { useBlockBeforeContinue } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n SwitchFieldController,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { useEnumForm } from '../-hooks/use-enum-form.js';\nimport { EnumInfoForm } from './enum-info-form.js';\n\ninterface NewEnumDialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function NewEnumDialog({\n children,\n open,\n onOpenChange,\n}: NewEnumDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n const {\n onSubmit,\n form: { control },\n isSavingDefinition,\n } = useEnumForm({\n isCreate: true,\n onSubmitSuccess: () => {\n setIsOpen(false);\n },\n });\n\n const blockBeforeContinue = useBlockBeforeContinue();\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(shouldOpen) => {\n if (shouldOpen) {\n blockBeforeContinue({\n onContinue: () => {\n setIsOpen(true);\n },\n });\n } else {\n setIsOpen(false);\n }\n }}\n >\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>New Enum</DialogTitle>\n <DialogDescription>\n Enums are a list of values that can be used in your data models.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <EnumInfoForm control={control} />\n <SwitchFieldController\n label=\"Expose in GraphQL schema\"\n control={control}\n name=\"isExposed\"\n description=\"Whether to expose this enum in the GraphQL schema\"\n />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Create Enum\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["useBlockBeforeContinue","importShared","Button","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","SwitchFieldController","useControlledState","NewEnumDialog","children","open","onOpenChange","isOpen","setIsOpen","onSubmit","control","isSavingDefinition","useEnumForm","blockBeforeContinue","jsxs","shouldOpen","jsx","EnumInfoForm"],"mappings":"iNAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,OAAAC,EAAA,OAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,kBAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,sBAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAX,EAAA,8BAAA,EAuBO,SAASY,EAAc,CAC5B,SAAAC,EACA,KAAAC,EACA,aAAAC,CACF,EAA0C,CACxC,KAAM,CAACC,EAAQC,CAAS,EAAIN,EAAmBG,EAAMC,EAAc,EAAK,EAClE,CACJ,SAAAG,EACA,KAAM,CAAE,QAAAC,CAAQ,EAChB,mBAAAC,GACEC,EAAY,CACd,SAAU,GACV,gBAAiB,IAAM,CACrBJ,EAAU,EAAK,CAAA,CACjB,CACD,EAEKK,EAAsBvB,EAAuB,EAGjD,OAAAwB,EAAA,KAACrB,EAAA,CACC,KAAMc,EACN,aAAeQ,GAAe,CACxBA,EACkBF,EAAA,CAClB,WAAY,IAAM,CAChBL,EAAU,EAAI,CAAA,CAChB,CACD,EAEDA,EAAU,EAAK,CAEnB,EAEA,SAAA,CAACQ,EAAAA,IAAAhB,EAAA,CAAc,QAAO,GAAE,SAAAI,CAAS,CAAA,SAChCT,EACC,CAAA,SAAA,CAAAmB,OAAChB,EACC,CAAA,SAAA,CAAAkB,EAAAA,IAACjB,GAAY,SAAQ,UAAA,CAAA,EACrBiB,EAAAA,IAACpB,GAAkB,SAEnB,kEAAA,CAAA,CAAA,EACF,EACCkB,EAAA,KAAA,OAAA,CAAK,SAAAL,EAAoB,UAAU,YAClC,SAAA,CAAAO,MAACC,GAAa,QAAAP,EAAkB,EAChCM,EAAA,IAACf,EAAA,CACC,MAAM,2BACN,QAAAS,EACA,KAAK,YACL,YAAY,mDAAA,CACd,SACCb,EACC,CAAA,SAAA,CAACmB,EAAAA,IAAAtB,EAAA,CAAY,QAAO,GAClB,SAAAsB,EAAA,IAACxB,GAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,QACCA,EAAO,CAAA,KAAK,SAAS,SAAUmB,EAAoB,SAEpD,aAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CAEJ"}
1
+ {"version":3,"file":"new-enum-dialog-CE3pNVPW.js","sources":["../../src/routes/data/enums/-components/new-enum-dialog.tsx"],"sourcesContent":["import type React from 'react';\n\nimport { useBlockBeforeContinue } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n SwitchFieldController,\n useControlledState,\n} from '@baseplate-dev/ui-components';\n\nimport { useEnumForm } from '../-hooks/use-enum-form.js';\nimport { EnumInfoForm } from './enum-info-form.js';\n\ninterface NewEnumDialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nexport function NewEnumDialog({\n children,\n open,\n onOpenChange,\n}: NewEnumDialogProps): React.JSX.Element {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n const {\n onSubmit,\n form: { control },\n isSavingDefinition,\n } = useEnumForm({\n isCreate: true,\n onSubmitSuccess: () => {\n setIsOpen(false);\n },\n });\n\n const blockBeforeContinue = useBlockBeforeContinue();\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(shouldOpen) => {\n if (shouldOpen) {\n blockBeforeContinue({\n onContinue: () => {\n setIsOpen(true);\n },\n });\n } else {\n setIsOpen(false);\n }\n }}\n >\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>New Enum</DialogTitle>\n <DialogDescription>\n Enums are a list of values that can be used in your data models.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <EnumInfoForm control={control} />\n <SwitchFieldController\n label=\"Expose in GraphQL schema\"\n control={control}\n name=\"isExposed\"\n description=\"Whether to expose this enum in the GraphQL schema\"\n />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\" disabled={isSavingDefinition}>\n Create Enum\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["useBlockBeforeContinue","importShared","Button","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","SwitchFieldController","useControlledState","NewEnumDialog","children","open","onOpenChange","isOpen","setIsOpen","onSubmit","control","isSavingDefinition","useEnumForm","blockBeforeContinue","jsxs","shouldOpen","jsx","EnumInfoForm"],"mappings":"iNAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,OAAAC,EAAA,OAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,kBAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,sBAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAX,EAAA,8BAAA,EAuBO,SAASY,EAAc,CAC5B,SAAAC,EACA,KAAAC,EACA,aAAAC,CACF,EAA0C,CACxC,KAAM,CAACC,EAAQC,CAAS,EAAIN,EAAmBG,EAAMC,EAAc,EAAK,EAClE,CACJ,SAAAG,EACA,KAAM,CAAE,QAAAC,CAAA,EACR,mBAAAC,CAAA,EACEC,EAAY,CACd,SAAU,GACV,gBAAiB,IAAM,CACrBJ,EAAU,EAAK,CACjB,CAAA,CACD,EAEKK,EAAsBvB,EAAA,EAE5B,OACEwB,EAAAA,KAACrB,EAAA,CACC,KAAMc,EACN,aAAeQ,GAAe,CACxBA,EACFF,EAAoB,CAClB,WAAY,IAAM,CAChBL,EAAU,EAAI,CAChB,CAAA,CACD,EAEDA,EAAU,EAAK,CAEnB,EAEA,SAAA,CAAAQ,EAAAA,IAAChB,EAAA,CAAc,QAAO,GAAE,SAAAI,CAAA,CAAS,SAChCT,EAAA,CACC,SAAA,CAAAmB,OAAChB,EAAA,CACC,SAAA,CAAAkB,EAAAA,IAACjB,GAAY,SAAA,UAAA,CAAQ,EACrBiB,EAAAA,IAACpB,GAAkB,SAAA,kEAAA,CAEnB,CAAA,EACF,EACAkB,EAAAA,KAAC,OAAA,CAAK,SAAAL,EAAoB,UAAU,YAClC,SAAA,CAAAO,MAACC,GAAa,QAAAP,EAAkB,EAChCM,EAAAA,IAACf,EAAA,CACC,MAAM,2BACN,QAAAS,EACA,KAAK,YACL,YAAY,mDAAA,CAAA,SAEbb,EAAA,CACC,SAAA,CAAAmB,EAAAA,IAACtB,EAAA,CAAY,QAAO,GAClB,SAAAsB,EAAAA,IAACxB,GAAO,QAAQ,YAAY,kBAAM,CAAA,CACpC,QACCA,EAAA,CAAO,KAAK,SAAS,SAAUmB,EAAoB,SAAA,aAAA,CAEpD,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CAGN"}
@@ -1,2 +1,2 @@
1
- import{i as o}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{s as F}from"./index-DEKFCy0H.js";import{b as S}from"./index.esm-CdP29Ssb.js";import{M as N}from"./model-info-form-koY65NLs.js";import{s as k}from"./sortBy-C9bvycg5.js";const{createModelBaseSchema:B,FeatureUtils:I,modelEntityType:y,modelScalarFieldEntityType:R}=await o("@baseplate-dev/project-builder-lib"),{useBlockBeforeContinue:E,useDefinitionSchema:O,useProjectDefinition:T}=await o("@baseplate-dev/project-builder-lib/web"),{Button:p,Dialog:L,DialogClose:U,DialogContent:$,DialogDescription:H,DialogFooter:K,DialogHeader:P,DialogTitle:V,DialogTrigger:W,useControlledState:q}=await o("@baseplate-dev/ui-components"),{useNavigate:z}=await o("@tanstack/react-router"),{useMemo:h}=await o("react");function g(){const a=R.generateNewId();return{id:y.generateNewId(),name:"",featureRef:"",service:{create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]},model:{primaryKeyFieldRefs:[a],fields:[{id:a,name:"id",type:"uuid",isOptional:!1,options:{default:"",genUuid:!0}}]}}}function _({children:a,open:b,onOpenChange:x}){const[j,i]=q(b,x,!1),{definition:l,saveDefinitionWithFeedback:d}=T(),M=O(B),w=h(()=>g(),[]),c=z(),{handleSubmit:u,reset:m,setError:f,control:D}=S({resolver:F(M),defaultValues:w}),C=h(()=>u(t=>{if(l.models.find(s=>s.name.toLowerCase()===t.name.toLowerCase())){f("name",{message:`Model with name ${t.name} already exists.`});return}return d(s=>{const r={...t};r.featureRef=I.ensureFeatureByNameRecursively(s,r.featureRef),s.models=k([...s.models.filter(n=>n.id!==r.id),r],[n=>n.name])},{successMessage:"Successfully created model!",onSuccess:()=>{c({to:"/data/models/edit/$key",params:{key:y.keyFromId(t.id)}}),m(g()),i(!1)}})}),[m,f,u,d,c,l,i]),v=E();return e.jsxs(L,{open:j,onOpenChange:t=>{t?v({onContinue:()=>{i(!0)}}):i(!1)},children:[e.jsx(W,{asChild:!0,children:a}),e.jsxs($,{children:[e.jsxs(P,{children:[e.jsx(V,{children:"New Model"}),e.jsx(H,{children:"Models define the structure of your data."})]}),e.jsxs("form",{onSubmit:C,className:"space-y-4",children:[e.jsx(N,{control:D}),e.jsxs(K,{children:[e.jsx(U,{asChild:!0,children:e.jsx(p,{variant:"secondary",children:"Cancel"})}),e.jsx(p,{type:"submit",children:"Create Model"})]})]})]})]})}export{_ as N};
2
- //# sourceMappingURL=new-model-dialog-CiwTpKcZ.js.map
1
+ import{i as o}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{s as F}from"./index-Cd_baD6T.js";import{b as S}from"./index.esm-CdP29Ssb.js";import{M as N}from"./model-info-form-koY65NLs.js";import{s as k}from"./sortBy-C9bvycg5.js";const{createModelBaseSchema:B,FeatureUtils:I,modelEntityType:y,modelScalarFieldEntityType:R}=await o("@baseplate-dev/project-builder-lib"),{useBlockBeforeContinue:E,useDefinitionSchema:O,useProjectDefinition:T}=await o("@baseplate-dev/project-builder-lib/web"),{Button:p,Dialog:L,DialogClose:U,DialogContent:$,DialogDescription:H,DialogFooter:K,DialogHeader:P,DialogTitle:V,DialogTrigger:W,useControlledState:q}=await o("@baseplate-dev/ui-components"),{useNavigate:z}=await o("@tanstack/react-router"),{useMemo:h}=await o("react");function g(){const a=R.generateNewId();return{id:y.generateNewId(),name:"",featureRef:"",service:{create:{enabled:!1},update:{enabled:!1},delete:{enabled:!1},transformers:[]},model:{primaryKeyFieldRefs:[a],fields:[{id:a,name:"id",type:"uuid",isOptional:!1,options:{default:"",genUuid:!0}}]}}}function _({children:a,open:b,onOpenChange:x}){const[j,i]=q(b,x,!1),{definition:l,saveDefinitionWithFeedback:d}=T(),M=O(B),w=h(()=>g(),[]),c=z(),{handleSubmit:u,reset:m,setError:f,control:D}=S({resolver:F(M),defaultValues:w}),C=h(()=>u(t=>{if(l.models.find(s=>s.name.toLowerCase()===t.name.toLowerCase())){f("name",{message:`Model with name ${t.name} already exists.`});return}return d(s=>{const r={...t};r.featureRef=I.ensureFeatureByNameRecursively(s,r.featureRef),s.models=k([...s.models.filter(n=>n.id!==r.id),r],[n=>n.name])},{successMessage:"Successfully created model!",onSuccess:()=>{c({to:"/data/models/edit/$key",params:{key:y.keyFromId(t.id)}}),m(g()),i(!1)}})}),[m,f,u,d,c,l,i]),v=E();return e.jsxs(L,{open:j,onOpenChange:t=>{t?v({onContinue:()=>{i(!0)}}):i(!1)},children:[e.jsx(W,{asChild:!0,children:a}),e.jsxs($,{children:[e.jsxs(P,{children:[e.jsx(V,{children:"New Model"}),e.jsx(H,{children:"Models define the structure of your data."})]}),e.jsxs("form",{onSubmit:C,className:"space-y-4",children:[e.jsx(N,{control:D}),e.jsxs(K,{children:[e.jsx(U,{asChild:!0,children:e.jsx(p,{variant:"secondary",children:"Cancel"})}),e.jsx(p,{type:"submit",children:"Create Model"})]})]})]})]})}export{_ as N};
2
+ //# sourceMappingURL=new-model-dialog-BUqUnu3F.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"new-model-dialog-CiwTpKcZ.js","sources":["../../src/routes/data/models/-components/new-model-dialog.tsx"],"sourcesContent":["import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n createModelBaseSchema,\n FeatureUtils,\n modelEntityType,\n modelScalarFieldEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockBeforeContinue,\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useNavigate } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport { ModelInfoForm } from '../edit.$key/-components/model-info-form.js';\n\ninterface NewModelDialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction createNewModel(): ModelConfigInput {\n const idFieldId = modelScalarFieldEntityType.generateNewId();\n return {\n id: modelEntityType.generateNewId(),\n name: '',\n featureRef: '',\n service: {\n create: { enabled: false },\n update: { enabled: false },\n delete: { enabled: false },\n transformers: [],\n },\n model: {\n primaryKeyFieldRefs: [idFieldId],\n fields: [\n {\n id: idFieldId,\n name: 'id',\n type: 'uuid',\n isOptional: false,\n options: {\n default: '',\n genUuid: true,\n },\n },\n ],\n },\n };\n}\n\nexport function NewModelDialog({\n children,\n open,\n onOpenChange,\n}: NewModelDialogProps): React.ReactElement {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n const { definition, saveDefinitionWithFeedback } = useProjectDefinition();\n // memoize it to keep the same key when resetting\n const baseModelSchema = useDefinitionSchema(createModelBaseSchema);\n\n const defaultValues = useMemo(() => createNewModel(), []);\n const navigate = useNavigate();\n\n const { handleSubmit, reset, setError, control } = useForm({\n resolver: zodResolver(baseModelSchema),\n defaultValues,\n });\n\n const onSubmit = useMemo(\n () =>\n handleSubmit((data) => {\n // check for models with the same name\n const existingModel = definition.models.find(\n (m) => m.name.toLowerCase() === data.name.toLowerCase(),\n );\n if (existingModel) {\n setError('name', {\n message: `Model with name ${data.name} already exists.`,\n });\n return;\n }\n\n return saveDefinitionWithFeedback(\n (draftConfig) => {\n // create feature if a new feature exists\n const updatedModel = { ...data };\n updatedModel.featureRef =\n FeatureUtils.ensureFeatureByNameRecursively(\n draftConfig,\n updatedModel.featureRef,\n );\n draftConfig.models = sortBy(\n [\n ...draftConfig.models.filter((m) => m.id !== updatedModel.id),\n updatedModel,\n ],\n [(m) => m.name],\n );\n },\n {\n successMessage: 'Successfully created model!',\n onSuccess: () => {\n navigate({\n to: '/data/models/edit/$key',\n params: { key: modelEntityType.keyFromId(data.id) },\n });\n reset(createNewModel());\n setIsOpen(false);\n },\n },\n );\n }),\n [\n reset,\n setError,\n handleSubmit,\n saveDefinitionWithFeedback,\n navigate,\n definition,\n setIsOpen,\n ],\n );\n\n const blockBeforeContinue = useBlockBeforeContinue();\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(shouldOpen) => {\n if (shouldOpen) {\n blockBeforeContinue({\n onContinue: () => {\n setIsOpen(true);\n },\n });\n } else {\n setIsOpen(false);\n }\n }}\n >\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>New Model</DialogTitle>\n <DialogDescription>\n Models define the structure of your data.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <ModelInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Create Model</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["createModelBaseSchema","FeatureUtils","modelEntityType","modelScalarFieldEntityType","importShared","useBlockBeforeContinue","useDefinitionSchema","useProjectDefinition","Button","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","useNavigate","useMemo","createNewModel","idFieldId","NewModelDialog","children","open","onOpenChange","isOpen","setIsOpen","definition","saveDefinitionWithFeedback","baseModelSchema","defaultValues","navigate","handleSubmit","reset","setError","control","useForm","zodResolver","onSubmit","data","m","draftConfig","updatedModel","sortBy","blockBeforeContinue","jsxs","shouldOpen","jsx","ModelInfoForm"],"mappings":"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"}
1
+ {"version":3,"file":"new-model-dialog-BUqUnu3F.js","sources":["../../src/routes/data/models/-components/new-model-dialog.tsx"],"sourcesContent":["import type { ModelConfigInput } from '@baseplate-dev/project-builder-lib';\nimport type React from 'react';\n\nimport {\n createModelBaseSchema,\n FeatureUtils,\n modelEntityType,\n modelScalarFieldEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n useBlockBeforeContinue,\n useDefinitionSchema,\n useProjectDefinition,\n} from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n useControlledState,\n} from '@baseplate-dev/ui-components';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useNavigate } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { useMemo } from 'react';\nimport { useForm } from 'react-hook-form';\n\nimport { ModelInfoForm } from '../edit.$key/-components/model-info-form.js';\n\ninterface NewModelDialogProps {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nfunction createNewModel(): ModelConfigInput {\n const idFieldId = modelScalarFieldEntityType.generateNewId();\n return {\n id: modelEntityType.generateNewId(),\n name: '',\n featureRef: '',\n service: {\n create: { enabled: false },\n update: { enabled: false },\n delete: { enabled: false },\n transformers: [],\n },\n model: {\n primaryKeyFieldRefs: [idFieldId],\n fields: [\n {\n id: idFieldId,\n name: 'id',\n type: 'uuid',\n isOptional: false,\n options: {\n default: '',\n genUuid: true,\n },\n },\n ],\n },\n };\n}\n\nexport function NewModelDialog({\n children,\n open,\n onOpenChange,\n}: NewModelDialogProps): React.ReactElement {\n const [isOpen, setIsOpen] = useControlledState(open, onOpenChange, false);\n const { definition, saveDefinitionWithFeedback } = useProjectDefinition();\n // memoize it to keep the same key when resetting\n const baseModelSchema = useDefinitionSchema(createModelBaseSchema);\n\n const defaultValues = useMemo(() => createNewModel(), []);\n const navigate = useNavigate();\n\n const { handleSubmit, reset, setError, control } = useForm({\n resolver: zodResolver(baseModelSchema),\n defaultValues,\n });\n\n const onSubmit = useMemo(\n () =>\n handleSubmit((data) => {\n // check for models with the same name\n const existingModel = definition.models.find(\n (m) => m.name.toLowerCase() === data.name.toLowerCase(),\n );\n if (existingModel) {\n setError('name', {\n message: `Model with name ${data.name} already exists.`,\n });\n return;\n }\n\n return saveDefinitionWithFeedback(\n (draftConfig) => {\n // create feature if a new feature exists\n const updatedModel = { ...data };\n updatedModel.featureRef =\n FeatureUtils.ensureFeatureByNameRecursively(\n draftConfig,\n updatedModel.featureRef,\n );\n draftConfig.models = sortBy(\n [\n ...draftConfig.models.filter((m) => m.id !== updatedModel.id),\n updatedModel,\n ],\n [(m) => m.name],\n );\n },\n {\n successMessage: 'Successfully created model!',\n onSuccess: () => {\n navigate({\n to: '/data/models/edit/$key',\n params: { key: modelEntityType.keyFromId(data.id) },\n });\n reset(createNewModel());\n setIsOpen(false);\n },\n },\n );\n }),\n [\n reset,\n setError,\n handleSubmit,\n saveDefinitionWithFeedback,\n navigate,\n definition,\n setIsOpen,\n ],\n );\n\n const blockBeforeContinue = useBlockBeforeContinue();\n\n return (\n <Dialog\n open={isOpen}\n onOpenChange={(shouldOpen) => {\n if (shouldOpen) {\n blockBeforeContinue({\n onContinue: () => {\n setIsOpen(true);\n },\n });\n } else {\n setIsOpen(false);\n }\n }}\n >\n <DialogTrigger asChild>{children}</DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>New Model</DialogTitle>\n <DialogDescription>\n Models define the structure of your data.\n </DialogDescription>\n </DialogHeader>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <ModelInfoForm control={control} />\n <DialogFooter>\n <DialogClose asChild>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button type=\"submit\">Create Model</Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"names":["createModelBaseSchema","FeatureUtils","modelEntityType","modelScalarFieldEntityType","importShared","useBlockBeforeContinue","useDefinitionSchema","useProjectDefinition","Button","Dialog","DialogClose","DialogContent","DialogDescription","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","useControlledState","useNavigate","useMemo","createNewModel","idFieldId","NewModelDialog","children","open","onOpenChange","isOpen","setIsOpen","definition","saveDefinitionWithFeedback","baseModelSchema","defaultValues","navigate","handleSubmit","reset","setError","control","useForm","zodResolver","onSubmit","data","m","draftConfig","updatedModel","sortBy","blockBeforeContinue","jsxs","shouldOpen","jsx","ModelInfoForm"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as s}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as t}from"./jsx-runtime-D_zvdyIk.js";import{E as r}from"./index-DEKFCy0H.js";const{NavigationMenu:a,NavigationMenuLink:e,NavigationMenuList:n,SidebarLayout:o,SidebarLayoutContent:l,SidebarLayoutSidebar:c}=await s("@baseplate-dev/ui-components"),{Link:i,Outlet:d}=await s("@tanstack/react-router"),j=function(){return t.jsxs(o,{className:"h-full flex-1",children:[t.jsx(c,{className:"space-y-4",width:"sm",children:t.jsx(a,{orientation:"vertical",children:t.jsxs(n,{children:[t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings",children:"Project settings"})}),t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings/hierarchy",children:"Hierarchy"})}),t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings/theme-builder",children:"Theme builder"})}),r&&t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings/template-extractor",children:"Template extractor"})})]})})}),t.jsx(l,{className:"h-full",children:t.jsx(d,{})})]})};export{j as component};
2
- //# sourceMappingURL=route-PmxQsBVj.js.map
1
+ import{i as s}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as t}from"./jsx-runtime-D_zvdyIk.js";import{E as r}from"./index-Cd_baD6T.js";const{NavigationMenu:a,NavigationMenuLink:e,NavigationMenuList:n,SidebarLayout:o,SidebarLayoutContent:l,SidebarLayoutSidebar:c}=await s("@baseplate-dev/ui-components"),{Link:i,Outlet:d}=await s("@tanstack/react-router"),j=function(){return t.jsxs(o,{className:"h-full flex-1",children:[t.jsx(c,{className:"space-y-4",width:"sm",children:t.jsx(a,{orientation:"vertical",children:t.jsxs(n,{children:[t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings",children:"Project settings"})}),t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings/hierarchy",children:"Hierarchy"})}),t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings/theme-builder",children:"Theme builder"})}),r&&t.jsx(e,{asChild:!0,children:t.jsx(i,{to:"/settings/template-extractor",children:"Template extractor"})})]})})}),t.jsx(l,{className:"h-full",children:t.jsx(d,{})})]})};export{j as component};
2
+ //# sourceMappingURL=route-BMREAhaC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-PmxQsBVj.js","sources":["../../src/routes/settings/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n NavigationMenu,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\n\nimport { ENABLE_TEMPLATE_EXTRACTOR } from '#src/services/config.js';\n\nexport const Route = createFileRoute('/settings')({\n component: SettingsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Settings',\n }),\n});\n\nfunction SettingsLayout(): React.JSX.Element {\n return (\n <SidebarLayout className=\"h-full flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n <NavigationMenuLink asChild>\n <Link to={`/settings`}>Project settings</Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/hierarchy`}>Hierarchy</Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/theme-builder`}>Theme builder</Link>\n </NavigationMenuLink>\n {ENABLE_TEMPLATE_EXTRACTOR && (\n <NavigationMenuLink asChild>\n <Link to={`/settings/template-extractor`}>\n Template extractor\n </Link>\n </NavigationMenuLink>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-full\">\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["NavigationMenu","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","importShared","Link","Outlet","SplitComponent","jsxs","jsx","ENABLE_TEMPLATE_EXTRACTOR"],"mappings":"wJAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAQA,CAAA,KAAAC,EAAA,OAAAC,CAAA,EAAA,MAAAF,EAAA,wBAAA,EAEoEG,EAAA,UASvB,CAEzC,OAAAC,EAAA,KAACP,EAAc,CAAA,UAAU,gBACvB,SAAA,CAACQ,EAAA,IAAAN,EAAA,CAAqB,UAAU,YAAY,MAAM,KAChD,eAACL,EAAe,CAAA,YAAY,WAC1B,SAAAU,EAAAA,KAACR,EACC,CAAA,SAAA,CAACS,EAAA,IAAAV,EAAA,CAAmB,QAAO,GACzB,SAAAU,EAAAA,IAACJ,GAAK,GAAI,YAAa,4BAAgB,CACzC,CAAA,EACAI,EAAA,IAACV,GAAmB,QAAO,GACzB,eAACM,EAAK,CAAA,GAAI,sBAAuB,SAAA,WAAA,CAAS,CAC5C,CAAA,EACAI,EAAA,IAACV,GAAmB,QAAO,GACzB,eAACM,EAAK,CAAA,GAAI,0BAA2B,SAAA,eAAA,CAAa,CACpD,CAAA,EACCK,GACED,EAAA,IAAAV,EAAA,CAAmB,QAAO,GACzB,eAACM,EAAK,CAAA,GAAI,+BAA+B,SAAA,oBAAA,CAEzC,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,EACF,QACCH,EAAqB,CAAA,UAAU,SAC9B,SAAAO,EAAA,IAACH,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-BMREAhaC.js","sources":["../../src/routes/settings/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n NavigationMenu,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\n\nimport { ENABLE_TEMPLATE_EXTRACTOR } from '#src/services/config.js';\n\nexport const Route = createFileRoute('/settings')({\n component: SettingsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Settings',\n }),\n});\n\nfunction SettingsLayout(): React.JSX.Element {\n return (\n <SidebarLayout className=\"h-full flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n <NavigationMenuLink asChild>\n <Link to={`/settings`}>Project settings</Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/hierarchy`}>Hierarchy</Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/theme-builder`}>Theme builder</Link>\n </NavigationMenuLink>\n {ENABLE_TEMPLATE_EXTRACTOR && (\n <NavigationMenuLink asChild>\n <Link to={`/settings/template-extractor`}>\n Template extractor\n </Link>\n </NavigationMenuLink>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-full\">\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["NavigationMenu","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","importShared","Link","Outlet","SplitComponent","jsxs","jsx","ENABLE_TEMPLATE_EXTRACTOR"],"mappings":"wJAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAQA,CAAA,KAAAC,EAAA,OAAAC,CAAA,EAAA,MAAAF,EAAA,wBAAA,EAEoEG,EAAA,UASvB,CAC3C,OACEC,EAAAA,KAACP,EAAA,CAAc,UAAU,gBACvB,SAAA,CAAAQ,EAAAA,IAACN,EAAA,CAAqB,UAAU,YAAY,MAAM,KAChD,eAACL,EAAA,CAAe,YAAY,WAC1B,SAAAU,EAAAA,KAACR,EAAA,CACC,SAAA,CAAAS,EAAAA,IAACV,EAAA,CAAmB,QAAO,GACzB,SAAAU,EAAAA,IAACJ,GAAK,GAAI,YAAa,4BAAgB,CAAA,CACzC,EACAI,EAAAA,IAACV,GAAmB,QAAO,GACzB,eAACM,EAAA,CAAK,GAAI,sBAAuB,SAAA,WAAA,CAAS,CAAA,CAC5C,EACAI,EAAAA,IAACV,GAAmB,QAAO,GACzB,eAACM,EAAA,CAAK,GAAI,0BAA2B,SAAA,eAAA,CAAa,CAAA,CACpD,EACCK,GACCD,EAAAA,IAACV,EAAA,CAAmB,QAAO,GACzB,eAACM,EAAA,CAAK,GAAI,+BAA+B,SAAA,oBAAA,CAEzC,CAAA,CACF,CAAA,CAAA,CAEJ,EACF,EACF,QACCH,EAAA,CAAqB,UAAU,SAC9B,SAAAO,EAAAA,IAACH,IAAM,CAAA,CACT,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{c as v,H as b,L as g}from"./index-tflukq04.js";import{l as y,j as f}from"./index-DEKFCy0H.js";import{u as C}from"./use-model-form-psj-JlE9.js";import{M as D}from"./model-info-form-koY65NLs.js";const{Button:j,Dialog:N,DialogClose:w,DialogContent:M,DialogFooter:S,DialogHeader:k,DialogTitle:F,DialogTrigger:E,useControlledState:I}=await i("@baseplate-dev/ui-components");function O({open:a,onOpenChange:t,children:s,asChild:r,modelKey:l}){const[c,o]=I(a,t,!1),{form:{control:d,reset:u},onSubmit:n,defaultValues:m}=C({modelKey:l,onSubmitSuccess(){o(!1)}});return e.jsxs(N,{open:c,onOpenChange:p=>{o(p),p||u(m)},children:[s&&e.jsx(E,{asChild:r,children:s}),e.jsx(M,{"aria-describedby":void 0,children:e.jsxs("form",{onSubmit:n,className:"space-y-4",children:[e.jsx(k,{children:e.jsx(F,{children:"Edit Model Info"})}),e.jsx(D,{control:d}),e.jsxs(S,{children:[e.jsx(w,{asChild:!0,children:e.jsx(j,{variant:"secondary",children:"Cancel"})}),e.jsx(j,{type:"submit",children:"Save"})]})]})})]})}const{FeatureUtils:T,modelEntityType:B}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:L}=await i("@baseplate-dev/project-builder-lib/web"),{Button:$,useConfirmDialog:R}=await i("@baseplate-dev/ui-components"),{useNavigate:H}=await i("@tanstack/react-router");function q({className:a,model:t}){const{definition:s,saveDefinitionWithFeedbackSync:r,isSavingDefinition:l}=L(),c=H(),{requestConfirm:o}=R(),d=u=>{r(n=>{n.models=n.models.filter(m=>m.id!==u)},{onSuccess:()=>{c({to:"/data/models"}).catch(y)},successMessage:"Successfully deleted model!"})};return e.jsxs("div",{className:v("flex items-center justify-between border-b py-4",a),children:[e.jsxs("div",{children:[e.jsx(O,{modelKey:B.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(b,{className:"invisible size-4 group-hover:visible"})]})}),t.featureRef&&e.jsx("div",{className:"text-xs text-muted-foreground",children:T.getFeatureById(s,t.featureRef)?.name})]}),e.jsx("div",{className:"flex gap-8",children:e.jsxs($,{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:()=>{d(t.id)}})},children:[e.jsx(g,{className:"text-destructive"}),e.jsx("div",{className:"sr-only",children:"Delete Model"})]})})]})}const{NavigationTabs:z,NavigationTabsItem:x}=await i("@baseplate-dev/ui-components"),{Link:h,Outlet:A}=await i("@tanstack/react-router"),W=function(){const{model:t}=f.useLoaderData(),{key:s}=f.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(q,{model:t}),e.jsxs(z,{children:[e.jsx(x,{asChild:!0,children:e.jsx(h,{to:"/data/models/edit/$key",params:{key:s},activeOptions:{exact:!0},children:"Fields"})}),e.jsx(x,{asChild:!0,children:e.jsx(h,{to:"/data/models/edit/$key/service",params:{key:s},activeOptions:{exact:!0},children:"Service"})}),e.jsx(x,{asChild:!0,children:e.jsx(h,{to:"/data/models/edit/$key/graphql",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(A,{})})]},t.id)};export{W as component};
2
- //# sourceMappingURL=route-CZgTuGeJ.js.map
1
+ import{i}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{c as v,H as b,L as g}from"./index-tflukq04.js";import{l as y,j as f}from"./index-Cd_baD6T.js";import{u as C}from"./use-model-form-AKI1Wi68.js";import{M as D}from"./model-info-form-koY65NLs.js";const{Button:j,Dialog:N,DialogClose:w,DialogContent:M,DialogFooter:S,DialogHeader:k,DialogTitle:F,DialogTrigger:E,useControlledState:I}=await i("@baseplate-dev/ui-components");function O({open:a,onOpenChange:t,children:s,asChild:r,modelKey:l}){const[c,o]=I(a,t,!1),{form:{control:d,reset:u},onSubmit:n,defaultValues:m}=C({modelKey:l,onSubmitSuccess(){o(!1)}});return e.jsxs(N,{open:c,onOpenChange:p=>{o(p),p||u(m)},children:[s&&e.jsx(E,{asChild:r,children:s}),e.jsx(M,{"aria-describedby":void 0,children:e.jsxs("form",{onSubmit:n,className:"space-y-4",children:[e.jsx(k,{children:e.jsx(F,{children:"Edit Model Info"})}),e.jsx(D,{control:d}),e.jsxs(S,{children:[e.jsx(w,{asChild:!0,children:e.jsx(j,{variant:"secondary",children:"Cancel"})}),e.jsx(j,{type:"submit",children:"Save"})]})]})})]})}const{FeatureUtils:T,modelEntityType:B}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:L}=await i("@baseplate-dev/project-builder-lib/web"),{Button:$,useConfirmDialog:R}=await i("@baseplate-dev/ui-components"),{useNavigate:H}=await i("@tanstack/react-router");function q({className:a,model:t}){const{definition:s,saveDefinitionWithFeedbackSync:r,isSavingDefinition:l}=L(),c=H(),{requestConfirm:o}=R(),d=u=>{r(n=>{n.models=n.models.filter(m=>m.id!==u)},{onSuccess:()=>{c({to:"/data/models"}).catch(y)},successMessage:"Successfully deleted model!"})};return e.jsxs("div",{className:v("flex items-center justify-between border-b py-4",a),children:[e.jsxs("div",{children:[e.jsx(O,{modelKey:B.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(b,{className:"invisible size-4 group-hover:visible"})]})}),t.featureRef&&e.jsx("div",{className:"text-xs text-muted-foreground",children:T.getFeatureById(s,t.featureRef)?.name})]}),e.jsx("div",{className:"flex gap-8",children:e.jsxs($,{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:()=>{d(t.id)}})},children:[e.jsx(g,{className:"text-destructive"}),e.jsx("div",{className:"sr-only",children:"Delete Model"})]})})]})}const{NavigationTabs:z,NavigationTabsItem:x}=await i("@baseplate-dev/ui-components"),{Link:h,Outlet:A}=await i("@tanstack/react-router"),W=function(){const{model:t}=f.useLoaderData(),{key:s}=f.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(q,{model:t}),e.jsxs(z,{children:[e.jsx(x,{asChild:!0,children:e.jsx(h,{to:"/data/models/edit/$key",params:{key:s},activeOptions:{exact:!0},children:"Fields"})}),e.jsx(x,{asChild:!0,children:e.jsx(h,{to:"/data/models/edit/$key/service",params:{key:s},activeOptions:{exact:!0},children:"Service"})}),e.jsx(x,{asChild:!0,children:e.jsx(h,{to:"/data/models/edit/$key/graphql",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(A,{})})]},t.id)};export{W as component};
2
+ //# sourceMappingURL=route-B_y_fjG1.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-CZgTuGeJ.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 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 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 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","useNavigate","ModelHeaderBar","className","model","definition","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","NavigationTabs","NavigationTabsItem","Link","Outlet","SplitComponent","Route","useLoaderData","key","useParams","exact"],"mappings":"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"}
1
+ {"version":3,"file":"route-B_y_fjG1.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 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 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 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","useNavigate","ModelHeaderBar","className","model","definition","saveDefinitionWithFeedbackSync","isSavingDefinition","navigate","requestConfirm","handleDelete","id","draftConfig","logAndFormatError","clsx","MdEdit","MdDeleteOutline","NavigationTabs","NavigationTabsItem","Link","Outlet","SplitComponent","Route","useLoaderData","key","useParams","exact"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as a}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{A as c}from"./index-tflukq04.js";import{a as u}from"./index-DEKFCy0H.js";const{getPluginMetadataByKeyOrThrow:p,pluginEntityType:s}=await a("@baseplate-dev/project-builder-lib"),{useProjectDefinition:m}=await a("@baseplate-dev/project-builder-lib/web"),{Button:h,NavigationMenu:x,NavigationMenuItem:g,NavigationMenuLink:y,NavigationMenuList:j,SidebarLayout:b,SidebarLayoutContent:f,SidebarLayoutSidebar:v}=await a("@baseplate-dev/ui-components"),{notEmpty:w}=await a("@baseplate-dev/utils"),{Link:o,Outlet:N}=await a("@tanstack/react-router"),C=function(){const{definition:r,schemaParserContext:i}=m(),{availablePlugins:l}=i.pluginStore,n=(r.plugins??[]).filter(t=>!p(i.pluginStore,s.keyFromId(t.id)).managedBy).map(t=>l.find(d=>d.metadata.key===s.keyFromId(t.id))?.metadata).filter(w);return e.jsxs(b,{className:"flex-1",children:[e.jsxs(v,{className:"flex flex-col gap-4",width:"sm",children:[e.jsx(o,{to:"/plugins",children:e.jsxs(h,{variant:"secondary",className:"w-full",size:"sm",children:[e.jsx(c,{}),"Add new plugin"]})}),e.jsx(x,{orientation:"vertical",children:e.jsxs(j,{children:[n.map(t=>e.jsx(y,{asChild:!0,children:e.jsx(o,{to:"/plugins/edit/$key",params:{key:t.key},children:t.displayName})},t.key)),n.length===0&&e.jsx(g,{className:"mt-4 w-full text-center opacity-80",children:"No plugins enabled"})]})})]}),e.jsx(f,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:e.jsx(u,{children:e.jsx(N,{})})})]})};export{C as component};
2
- //# sourceMappingURL=route-DluQ5e3_.js.map
1
+ import{i as a}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{A as c}from"./index-tflukq04.js";import{a as u}from"./index-Cd_baD6T.js";const{getPluginMetadataByKeyOrThrow:p,pluginEntityType:s}=await a("@baseplate-dev/project-builder-lib"),{useProjectDefinition:m}=await a("@baseplate-dev/project-builder-lib/web"),{Button:h,NavigationMenu:x,NavigationMenuItem:g,NavigationMenuLink:y,NavigationMenuList:j,SidebarLayout:b,SidebarLayoutContent:f,SidebarLayoutSidebar:v}=await a("@baseplate-dev/ui-components"),{notEmpty:w}=await a("@baseplate-dev/utils"),{Link:o,Outlet:N}=await a("@tanstack/react-router"),C=function(){const{definition:r,schemaParserContext:i}=m(),{availablePlugins:l}=i.pluginStore,n=(r.plugins??[]).filter(t=>!p(i.pluginStore,s.keyFromId(t.id)).managedBy).map(t=>l.find(d=>d.metadata.key===s.keyFromId(t.id))?.metadata).filter(w);return e.jsxs(b,{className:"flex-1",children:[e.jsxs(v,{className:"flex flex-col gap-4",width:"sm",children:[e.jsx(o,{to:"/plugins",children:e.jsxs(h,{variant:"secondary",className:"w-full",size:"sm",children:[e.jsx(c,{}),"Add new plugin"]})}),e.jsx(x,{orientation:"vertical",children:e.jsxs(j,{children:[n.map(t=>e.jsx(y,{asChild:!0,children:e.jsx(o,{to:"/plugins/edit/$key",params:{key:t.key},children:t.displayName})},t.key)),n.length===0&&e.jsx(g,{className:"mt-4 w-full text-center opacity-80",children:"No plugins enabled"})]})})]}),e.jsx(f,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:e.jsx(u,{children:e.jsx(N,{})})})]})};export{C as component};
2
+ //# sourceMappingURL=route-CM78Qts_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-DluQ5e3_.js","sources":["../../src/routes/plugins/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n getPluginMetadataByKeyOrThrow,\n pluginEntityType,\n} 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 .filter(\n (plugin) =>\n !getPluginMetadataByKeyOrThrow(\n schemaParserContext.pluginStore,\n pluginEntityType.keyFromId(plugin.id),\n ).managedBy,\n )\n .map((plugin) => {\n const pluginWithMetadata = availablePlugins.find(\n (p) => p.metadata.key === 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\">\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.key} asChild>\n <Link to={`/plugins/edit/$key`} params={{ key: plugin.key }}>\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":["getPluginMetadataByKeyOrThrow","pluginEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","notEmpty","Link","Outlet","SplitComponent","definition","schemaParserContext","availablePlugins","pluginStore","enabledPlugins","plugins","filter","plugin","keyFromId","id","managedBy","map","find","p","metadata","key","jsxs","jsx","MdAdd","displayName","length","ErrorBoundary"],"mappings":"gMAEA,KAAA,CAAA,8BAAAA,EAAA,iBAAAC,CAAA,EAAA,MAAAC,EAAA,oCAAA,EAIA,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,EAUA,CAAA,SAAAU,CAAA,EAAA,MAAAV,EAAA,sBAAA,EACA,CAAA,KAAAW,EAAA,OAAAC,CAAA,EAAA,MAAAZ,EAAA,wBAAA,EAGyDa,EAAA,UASb,CACpC,KAAA,CAAEC,WAAAA,EAAYC,oBAAAA,GAAwBd,EAAqB,EAE3D,CAAEe,iBAAAA,GAAqBD,EAAoBE,YAE3CC,GAAkBJ,EAAWK,SAAW,IAC3CC,OACEC,GACC,CAACvB,EACCiB,EAAoBE,YACpBlB,EAAiBuB,UAAUD,EAAOE,EAAE,CACtC,EAAEC,SACN,EACCC,IAAgBJ,GACYL,EAAiBU,KACnCC,GAAAA,EAAEC,SAASC,MAAQ9B,EAAiBuB,UAAUD,EAAOE,EAAE,CAChE,GAC2BK,QAC5B,EACAR,OAAOV,CAAQ,EAGhB,OAAAoB,EAAA,KAACvB,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAuB,EAAA,KAACrB,EAAqB,CAAA,UAAU,sBAAsB,MAAM,KAC1D,SAAA,CAACsB,EAAA,IAAApB,EAAA,CAAK,GAAG,WACP,SAACmB,EAAAA,KAAA5B,EAAA,CAAO,QAAQ,YAAY,UAAU,SAAS,KAAK,KAClD,SAAA,CAAA6B,EAAA,IAACC,EAAK,EAAA,EAAA,gBAAA,CAAA,CAER,CACF,CAAA,EACCD,MAAA5B,EAAA,CAAe,YAAY,WAC1B,gBAACG,EACEY,CAAAA,SAAAA,CAAeO,EAAAA,IACdJ,GAAAU,EAAAA,IAAC1B,EAAoC,CAAA,QAAO,GAC1C,SAAC0B,EAAAA,IAAApB,EAAA,CAAK,GAAI,qBAAsB,OAAQ,CAAEkB,IAAKR,EAAOQ,GAAAA,EACnDR,SAAOY,EAAAA,WAAAA,CACV,CAHuBZ,EAAAA,EAAOQ,GAIhC,CACD,EACAX,EAAegB,SAAW,SACxB9B,EAAmB,CAAA,UAAU,qCAAoC,SAElE,oBAAA,CAAA,CAAA,CAAA,CAEJ,CACF,CAAA,CAAA,EACF,EACA2B,EAAAA,IAACvB,GAAqB,UAAU,2CAC9B,eAAC2B,EACC,CAAA,SAAAJ,EAAA,IAACnB,EAAM,CAAA,CAAA,CACT,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-CM78Qts_.js","sources":["../../src/routes/plugins/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n getPluginMetadataByKeyOrThrow,\n pluginEntityType,\n} 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 .filter(\n (plugin) =>\n !getPluginMetadataByKeyOrThrow(\n schemaParserContext.pluginStore,\n pluginEntityType.keyFromId(plugin.id),\n ).managedBy,\n )\n .map((plugin) => {\n const pluginWithMetadata = availablePlugins.find(\n (p) => p.metadata.key === 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\">\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.key} asChild>\n <Link to={`/plugins/edit/$key`} params={{ key: plugin.key }}>\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":["getPluginMetadataByKeyOrThrow","pluginEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","notEmpty","Link","Outlet","SplitComponent","definition","schemaParserContext","availablePlugins","pluginStore","enabledPlugins","plugins","filter","plugin","keyFromId","id","managedBy","map","find","p","metadata","key","jsxs","jsx","MdAdd","displayName","length","ErrorBoundary"],"mappings":"gMAEA,KAAA,CAAA,8BAAAA,EAAA,iBAAAC,CAAA,EAAA,MAAAC,EAAA,oCAAA,EAIA,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,EAUA,CAAA,SAAAU,CAAA,EAAA,MAAAV,EAAA,sBAAA,EACA,CAAA,KAAAW,EAAA,OAAAC,CAAA,EAAA,MAAAZ,EAAA,wBAAA,EAGyDa,EAAA,UASb,CAC1C,KAAM,CAAEC,WAAAA,EAAYC,oBAAAA,CAAAA,EAAwBd,EAAAA,EAEtC,CAAEe,iBAAAA,CAAAA,EAAqBD,EAAoBE,YAE3CC,GAAkBJ,EAAWK,SAAW,CAAA,GAC3CC,OACEC,GACC,CAACvB,EACCiB,EAAoBE,YACpBlB,EAAiBuB,UAAUD,EAAOE,EAAE,CACtC,EAAEC,SACN,EACCC,IAAKJ,GACuBL,EAAiBU,KACzCC,GAAMA,EAAEC,SAASC,MAAQ9B,EAAiBuB,UAAUD,EAAOE,EAAE,CAChE,GAC2BK,QAC5B,EACAR,OAAOV,CAAQ,EAElB,OACEoB,EAAAA,KAACvB,EAAA,CAAc,UAAU,SACvB,SAAA,CAAAuB,EAAAA,KAACrB,EAAA,CAAqB,UAAU,sBAAsB,MAAM,KAC1D,SAAA,CAAAsB,EAAAA,IAACpB,EAAA,CAAK,GAAG,WACP,SAAAmB,EAAAA,KAAC5B,EAAA,CAAO,QAAQ,YAAY,UAAU,SAAS,KAAK,KAClD,SAAA,CAAA6B,EAAAA,IAACC,EAAA,EAAK,EAAA,gBAAA,CAAA,CAER,CAAA,CACF,EACAD,MAAC5B,EAAA,CAAe,YAAY,WAC1B,gBAACG,EAAA,CACEY,SAAAA,CAAAA,EAAeO,IAAKJ,GACnBU,EAAAA,IAAC1B,EAAA,CAAoC,QAAO,GAC1C,SAAA0B,EAAAA,IAACpB,EAAA,CAAK,GAAI,qBAAsB,OAAQ,CAAEkB,IAAKR,EAAOQ,GAAAA,EACnDR,SAAAA,EAAOY,WAAAA,CACV,CAAA,EAHuBZ,EAAOQ,GAIhC,CACD,EACAX,EAAegB,SAAW,SACxB9B,EAAA,CAAmB,UAAU,qCAAoC,SAAA,oBAAA,CAElE,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,EACF,EACA2B,EAAAA,IAACvB,GAAqB,UAAU,2CAC9B,eAAC2B,EAAA,CACC,SAAAJ,EAAAA,IAACnB,EAAA,CAAA,CAAM,CAAA,CACT,CAAA,CACF,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as a}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{A as n}from"./index-tflukq04.js";import{N as r}from"./new-app-dialog-CCI4q4Mt.js";import{s as c}from"./sortBy-C9bvycg5.js";const{appEntityType:d}=await a("@baseplate-dev/project-builder-lib"),{useProjectDefinition:l}=await a("@baseplate-dev/project-builder-lib/web"),{Button:p,NavigationMenu:m,NavigationMenuItemWithLink:u,NavigationMenuList:x,SidebarLayout:j,SidebarLayoutContent:h,SidebarLayoutSidebar:b}=await a("@baseplate-dev/ui-components"),{Link:f,Outlet:y}=await a("@tanstack/react-router"),S=function(){const{definition:i}=l(),{apps:s}=i,o=c(s,[t=>t.name]);return e.jsxs(j,{className:"flex-1",children:[e.jsxs(b,{className:"space-y-4",width:"sm",children:[e.jsx("div",{className:"flex flex-col gap-4",children:e.jsx(r,{children:e.jsxs(p,{variant:"secondary",className:"w-full",children:[e.jsx(n,{}),"New App"]})})}),e.jsx(m,{orientation:"vertical",children:e.jsx(x,{children:o.map(t=>e.jsx(u,{asChild:!0,children:e.jsx(f,{to:"/apps/edit/$key",params:{key:d.keyFromId(t.id)},children:t.name})},t.id))})})]}),e.jsx(h,{children:e.jsx(y,{})})]})};export{S as component};
2
- //# sourceMappingURL=route-6ErXC2Qt.js.map
1
+ import{i as a}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{A as n}from"./index-tflukq04.js";import{N as r}from"./new-app-dialog-Cnp9A5Cx.js";import{s as c}from"./sortBy-C9bvycg5.js";const{appEntityType:d}=await a("@baseplate-dev/project-builder-lib"),{useProjectDefinition:l}=await a("@baseplate-dev/project-builder-lib/web"),{Button:p,NavigationMenu:m,NavigationMenuItemWithLink:u,NavigationMenuList:x,SidebarLayout:j,SidebarLayoutContent:h,SidebarLayoutSidebar:b}=await a("@baseplate-dev/ui-components"),{Link:f,Outlet:y}=await a("@tanstack/react-router"),S=function(){const{definition:i}=l(),{apps:s}=i,o=c(s,[t=>t.name]);return e.jsxs(j,{className:"flex-1",children:[e.jsxs(b,{className:"space-y-4",width:"sm",children:[e.jsx("div",{className:"flex flex-col gap-4",children:e.jsx(r,{children:e.jsxs(p,{variant:"secondary",className:"w-full",children:[e.jsx(n,{}),"New App"]})})}),e.jsx(m,{orientation:"vertical",children:e.jsx(x,{children:o.map(t=>e.jsx(u,{asChild:!0,children:e.jsx(f,{to:"/apps/edit/$key",params:{key:d.keyFromId(t.id)},children:t.name})},t.id))})})]}),e.jsx(h,{children:e.jsx(y,{})})]})};export{S as component};
2
+ //# sourceMappingURL=route-D-8r4X0U.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-6ErXC2Qt.js","sources":["../../src/routes/apps/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { appEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\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';\nimport { MdAdd } from 'react-icons/md';\n\nimport NewAppDialog from './-components/new-app-dialog.js';\n\nexport const Route = createFileRoute('/apps')({\n component: AppsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Apps',\n }),\n});\n\nfunction AppsLayout(): React.JSX.Element {\n const { definition } = useProjectDefinition();\n\n const { apps } = definition;\n const sortedApps = sortBy(apps, [(app) => app.name]);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <div className=\"flex flex-col gap-4\">\n <NewAppDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New App\n </Button>\n </NewAppDialog>\n </div>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedApps.map((app) => (\n <NavigationMenuItemWithLink key={app.id} asChild>\n <Link\n to=\"/apps/edit/$key\"\n params={{ key: appEntityType.keyFromId(app.id) }}\n >\n {app.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent>\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["appEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","Link","Outlet","SplitComponent","definition","apps","sortedApps","sortBy","app","name","jsxs","jsx","NewAppDialog","MdAdd","map","key","keyFromId","id"],"mappings":"kPAEA,KAAA,CAAA,cAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAR,EAAA,8BAAA,EASA,CAAA,KAAAS,EAAA,OAAAC,CAAA,EAAA,MAAAV,EAAA,wBAAA,EAI2DW,EAAA,UASlB,CACjC,KAAA,CAAEC,WAAAA,GAAeX,EAAqB,EAEtC,CAAEY,KAAAA,CAAAA,EAASD,EACXE,EAAaC,EAAOF,EAAM,CAAUG,GAAAA,EAAIC,IAAI,CAAC,EAGjD,OAAAC,EAAA,KAACZ,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAY,EAAA,KAACV,EAAqB,CAAA,UAAU,YAAY,MAAM,KAChD,SAAA,CAACW,EAAA,IAAA,MAAA,CAAI,UAAU,sBACb,SAACA,EAAA,IAAAC,EAAA,CACC,gBAAClB,EAAO,CAAA,QAAQ,YAAY,UAAU,SACpC,SAAA,CAAAiB,EAAA,IAACE,EAAK,EAAA,EAAA,SAAA,CAER,CAAA,CACF,CAAA,EACF,QACClB,EAAe,CAAA,YAAY,WAC1B,SAAAgB,EAAA,IAACd,GACES,SAAWQ,EAAAA,IACVN,GAAAG,EAAAA,IAACf,GAAwC,QAAO,GAC9C,eAACK,EACC,CAAA,GAAG,kBACH,OAAQ,CAAEc,IAAKxB,EAAcyB,UAAUR,EAAIS,EAAE,CAAA,EAE5CT,WAAIC,IACP,CAAA,CAAA,EAN+BD,EAAIS,EAOrC,CACD,EACH,CACF,CAAA,CAAA,EACF,EACCN,EAAA,IAAAZ,EAAA,CACC,SAACY,EAAAA,IAAAT,EAAA,CAAA,CAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-D-8r4X0U.js","sources":["../../src/routes/apps/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { appEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\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';\nimport { MdAdd } from 'react-icons/md';\n\nimport NewAppDialog from './-components/new-app-dialog.js';\n\nexport const Route = createFileRoute('/apps')({\n component: AppsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Apps',\n }),\n});\n\nfunction AppsLayout(): React.JSX.Element {\n const { definition } = useProjectDefinition();\n\n const { apps } = definition;\n const sortedApps = sortBy(apps, [(app) => app.name]);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <div className=\"flex flex-col gap-4\">\n <NewAppDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New App\n </Button>\n </NewAppDialog>\n </div>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedApps.map((app) => (\n <NavigationMenuItemWithLink key={app.id} asChild>\n <Link\n to=\"/apps/edit/$key\"\n params={{ key: appEntityType.keyFromId(app.id) }}\n >\n {app.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent>\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["appEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","Link","Outlet","SplitComponent","definition","apps","sortedApps","sortBy","app","name","jsxs","jsx","NewAppDialog","MdAdd","map","key","keyFromId","id"],"mappings":"kPAEA,KAAA,CAAA,cAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAR,EAAA,8BAAA,EASA,CAAA,KAAAS,EAAA,OAAAC,CAAA,EAAA,MAAAV,EAAA,wBAAA,EAI2DW,EAAA,UASlB,CACvC,KAAM,CAAEC,WAAAA,CAAAA,EAAeX,EAAAA,EAEjB,CAAEY,KAAAA,CAAAA,EAASD,EACXE,EAAaC,EAAOF,EAAM,CAAEG,GAAQA,EAAIC,IAAI,CAAC,EAEnD,OACEC,EAAAA,KAACZ,EAAA,CAAc,UAAU,SACvB,SAAA,CAAAY,EAAAA,KAACV,EAAA,CAAqB,UAAU,YAAY,MAAM,KAChD,SAAA,CAAAW,EAAAA,IAAC,MAAA,CAAI,UAAU,sBACb,SAAAA,EAAAA,IAACC,EAAA,CACC,gBAAClB,EAAA,CAAO,QAAQ,YAAY,UAAU,SACpC,SAAA,CAAAiB,EAAAA,IAACE,EAAA,EAAK,EAAA,SAAA,CAAA,CAER,EACF,EACF,QACClB,EAAA,CAAe,YAAY,WAC1B,SAAAgB,EAAAA,IAACd,GACES,SAAAA,EAAWQ,IAAKN,GACfG,EAAAA,IAACf,GAAwC,QAAO,GAC9C,eAACK,EAAA,CACC,GAAG,kBACH,OAAQ,CAAEc,IAAKxB,EAAcyB,UAAUR,EAAIS,EAAE,CAAA,EAE5CT,WAAIC,IAAAA,CACP,CAAA,EAN+BD,EAAIS,EAOrC,CACD,EACH,CAAA,CACF,CAAA,EACF,EACAN,EAAAA,IAACZ,EAAA,CACC,SAAAY,EAAAA,IAACT,EAAA,CAAA,CAAM,CAAA,CACT,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as t}from"./jsx-runtime-D_zvdyIk.js";import{m as r}from"./index-DEKFCy0H.js";const{NavigationTabs:n,NavigationTabsItem:a}=await i("@baseplate-dev/ui-components"),{Link:s,Outlet:o}=await i("@tanstack/react-router"),l=function(){const{key:e}=r.useParams();return t.jsxs("div",{className:"p-4",children:[t.jsxs(n,{children:[t.jsx(a,{asChild:!0,children:t.jsx(s,{to:"/apps/edit/$key/web",params:{key:e},activeOptions:{exact:!0},children:"General"})}),t.jsx(a,{asChild:!0,children:t.jsx(s,{to:"/apps/edit/$key/web/admin",params:{key:e},children:"Admin"})})]}),t.jsx("div",{className:"mt-4 border-t",children:t.jsx(o,{})})]})};export{l as component};
2
- //# sourceMappingURL=route-gzD4oiAl.js.map
1
+ import{i}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as t}from"./jsx-runtime-D_zvdyIk.js";import{m as r}from"./index-Cd_baD6T.js";const{NavigationTabs:n,NavigationTabsItem:a}=await i("@baseplate-dev/ui-components"),{Link:s,Outlet:o}=await i("@tanstack/react-router"),l=function(){const{key:e}=r.useParams();return t.jsxs("div",{className:"p-4",children:[t.jsxs(n,{children:[t.jsx(a,{asChild:!0,children:t.jsx(s,{to:"/apps/edit/$key/web",params:{key:e},activeOptions:{exact:!0},children:"General"})}),t.jsx(a,{asChild:!0,children:t.jsx(s,{to:"/apps/edit/$key/web/admin",params:{key:e},children:"Admin"})})]}),t.jsx("div",{className:"mt-4 border-t",children:t.jsx(o,{})})]})};export{l as component};
2
+ //# sourceMappingURL=route-D7DRL965.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-gzD4oiAl.js","sources":["../../src/routes/apps/edit.$key/web/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\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/web')({\n component: WebAppLayout,\n beforeLoad: ({ context: { app }, params: { key } }) => {\n if (app?.type !== 'web') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n\n return {\n webDefinition: app,\n };\n },\n});\n\nfunction WebAppLayout(): React.JSX.Element {\n const { key } = Route.useParams();\n return (\n <div className=\"p-4\">\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/apps/edit/$key/web\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n General\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/apps/edit/$key/web/admin\" params={{ key }}>\n Admin\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n\n <div className=\"mt-4 border-t\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["NavigationTabs","NavigationTabsItem","importShared","Link","Outlet","SplitComponent","key","Route","useParams","jsxs","jsx","exact"],"mappings":"mJAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAIA,CAAA,KAAAC,EAAA,OAAAC,CAAA,EAAA,MAAAF,EAAA,wBAAA,EAKgCG,EAAA,UAeW,CACnC,KAAA,CAAEC,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAE9B,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAU,MACb,SAAA,CAAAA,OAACT,EACC,CAAA,SAAA,CAAAU,EAAAA,IAACT,GAAmB,QAAO,GACzB,eAACE,EACC,CAAA,GAAG,sBACH,OAAQ,CAAEG,IAAAA,GACV,cAAe,CAAEK,MAAO,EAAA,EAAO,kBAGjC,CAAA,EACF,EACAD,EAAAA,IAACT,GAAmB,QAAO,GACzB,eAACE,EAAK,CAAA,GAAG,4BAA4B,OAAQ,CAAEG,IAAAA,CAAAA,EAAM,iBAErD,CACF,CAAA,CAAA,EACF,QAEC,MAAI,CAAA,UAAU,gBACb,SAAAI,EAAA,IAACN,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-D7DRL965.js","sources":["../../src/routes/apps/edit.$key/web/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\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/web')({\n component: WebAppLayout,\n beforeLoad: ({ context: { app }, params: { key } }) => {\n if (app?.type !== 'web') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n\n return {\n webDefinition: app,\n };\n },\n});\n\nfunction WebAppLayout(): React.JSX.Element {\n const { key } = Route.useParams();\n return (\n <div className=\"p-4\">\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/apps/edit/$key/web\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n General\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/apps/edit/$key/web/admin\" params={{ key }}>\n Admin\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n\n <div className=\"mt-4 border-t\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["NavigationTabs","NavigationTabsItem","importShared","Link","Outlet","SplitComponent","key","Route","useParams","jsxs","jsx","exact"],"mappings":"mJAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAIA,CAAA,KAAAC,EAAA,OAAAC,CAAA,EAAA,MAAAF,EAAA,wBAAA,EAKgCG,EAAA,UAeW,CACzC,KAAM,CAAEC,IAAAA,CAAAA,EAAQC,EAAMC,UAAAA,EACtB,OACEC,EAAAA,KAAC,MAAA,CAAI,UAAU,MACb,SAAA,CAAAA,OAACT,EAAA,CACC,SAAA,CAAAU,EAAAA,IAACT,GAAmB,QAAO,GACzB,eAACE,EAAA,CACC,GAAG,sBACH,OAAQ,CAAEG,IAAAA,CAAAA,EACV,cAAe,CAAEK,MAAO,EAAA,EAAO,mBAGjC,EACF,EACAD,EAAAA,IAACT,GAAmB,QAAO,GACzB,eAACE,EAAA,CAAK,GAAG,4BAA4B,OAAQ,CAAEG,IAAAA,CAAAA,EAAM,iBAErD,CAAA,CACF,CAAA,EACF,QAEC,MAAA,CAAI,UAAU,gBACb,SAAAI,EAAAA,IAACN,IAAM,CAAA,CACT,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as s}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{f as l,l as x}from"./index-DEKFCy0H.js";const{useProjectDefinition:u}=await s("@baseplate-dev/project-builder-lib/web"),{Button:t,Dialog:m,DialogClose:f,DialogContent:g,DialogFooter:j,DialogHeader:v,DialogTitle:D,DialogTrigger:y}=await s("@baseplate-dev/ui-components"),{Outlet:b,useNavigate:w}=await s("@tanstack/react-router"),A=function(){const{saveDefinitionWithFeedbackSync:o,definition:r,isSavingDefinition:c}=u(),{app:a}=l.useLoaderData(),d=w({from:l.fullPath}),p=()=>{o(n=>{n.apps=n.apps.filter(h=>h.id!==a.id)},{successMessage:"Successfully unlinked app!",disableDeleteRefDialog:!0,onSuccess:()=>{d({to:"/apps"}).catch(x)}})},{packageScope:i}=r.settings.general;return e.jsxs("div",{className:"relative flex h-full flex-1 flex-col overflow-hidden",children:[e.jsx("div",{className:"max-w-7xl space-y-4 p-4",children:e.jsxs("div",{className:"flex items-center justify-between space-x-4",children:[e.jsxs("div",{children:[e.jsx("h2",{children:i?`@${i}/${a.name}`:a.name}),e.jsxs("p",{className:"text-base text-muted-foreground",children:[a.type," app"]})]}),e.jsxs(m,{children:[e.jsx(y,{asChild:!0,children:e.jsx(t,{variant:"secondary",children:"Delete"})}),e.jsxs(g,{children:[e.jsx(v,{children:e.jsxs(D,{children:["Delete ",a.name]})}),e.jsxs("p",{children:["Are you sure you want to delete ",e.jsx("strong",{children:a.name}),"?"]}),e.jsx("p",{className:"text-style-muted",children:"This action will unlink the app from the generation process, so it will no longer be updated or managed through Baseplate. If already generated, the app will remain on the file system. You can manually delete it afterwards if no longer needed."}),e.jsxs(j,{children:[e.jsx(f,{children:e.jsx(t,{variant:"secondary",children:"Cancel"})}),e.jsx(t,{variant:"destructive",onClick:p,disabled:c,children:"Unlink App"})]})]})]})]})}),e.jsx("div",{className:"mb-(--action-bar-height) flex flex-1 overflow-y-auto",style:{"--action-bar-height":"52px"},children:e.jsx(b,{})})]},a.id)};export{A as component};
2
- //# sourceMappingURL=route-C6wCPwVj.js.map
1
+ import{i as s}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{f as l,l as x}from"./index-Cd_baD6T.js";const{useProjectDefinition:u}=await s("@baseplate-dev/project-builder-lib/web"),{Button:t,Dialog:m,DialogClose:f,DialogContent:g,DialogFooter:j,DialogHeader:v,DialogTitle:D,DialogTrigger:y}=await s("@baseplate-dev/ui-components"),{Outlet:b,useNavigate:w}=await s("@tanstack/react-router"),A=function(){const{saveDefinitionWithFeedbackSync:o,definition:r,isSavingDefinition:c}=u(),{app:a}=l.useLoaderData(),d=w({from:l.fullPath}),p=()=>{o(n=>{n.apps=n.apps.filter(h=>h.id!==a.id)},{successMessage:"Successfully unlinked app!",disableDeleteRefDialog:!0,onSuccess:()=>{d({to:"/apps"}).catch(x)}})},{packageScope:i}=r.settings.general;return e.jsxs("div",{className:"relative flex h-full flex-1 flex-col overflow-hidden",children:[e.jsx("div",{className:"max-w-7xl space-y-4 p-4",children:e.jsxs("div",{className:"flex items-center justify-between space-x-4",children:[e.jsxs("div",{children:[e.jsx("h2",{children:i?`@${i}/${a.name}`:a.name}),e.jsxs("p",{className:"text-base text-muted-foreground",children:[a.type," app"]})]}),e.jsxs(m,{children:[e.jsx(y,{asChild:!0,children:e.jsx(t,{variant:"secondary",children:"Delete"})}),e.jsxs(g,{children:[e.jsx(v,{children:e.jsxs(D,{children:["Delete ",a.name]})}),e.jsxs("p",{children:["Are you sure you want to delete ",e.jsx("strong",{children:a.name}),"?"]}),e.jsx("p",{className:"text-style-muted",children:"This action will unlink the app from the generation process, so it will no longer be updated or managed through Baseplate. If already generated, the app will remain on the file system. You can manually delete it afterwards if no longer needed."}),e.jsxs(j,{children:[e.jsx(f,{children:e.jsx(t,{variant:"secondary",children:"Cancel"})}),e.jsx(t,{variant:"destructive",onClick:p,disabled:c,children:"Unlink App"})]})]})]})]})}),e.jsx("div",{className:"mb-(--action-bar-height) flex flex-1 overflow-y-auto",style:{"--action-bar-height":"52px"},children:e.jsx(b,{})})]},a.id)};export{A as component};
2
+ //# sourceMappingURL=route-DGnyRZBc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-C6wCPwVj.js","sources":["../../src/routes/apps/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { appEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n notFound,\n Outlet,\n useNavigate,\n} from '@tanstack/react-router';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nexport const Route = createFileRoute('/apps/edit/$key')({\n component: EditAppPage,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = appEntityType.idFromKey(key);\n const app = id && projectDefinition.apps.find((a) => a.id === id);\n if (!app) {\n return {};\n }\n return {\n getTitle: () => app.name,\n app,\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: { app } }) => {\n if (!app) throw notFound();\n return { app };\n },\n});\n\nfunction EditAppPage(): React.JSX.Element {\n const { saveDefinitionWithFeedbackSync, definition, isSavingDefinition } =\n useProjectDefinition();\n\n const { app } = Route.useLoaderData();\n\n const navigate = useNavigate({ from: Route.fullPath });\n\n const handleDelete = (): void => {\n saveDefinitionWithFeedbackSync(\n (definition) => {\n definition.apps = definition.apps.filter((a) => a.id !== app.id);\n },\n {\n successMessage: 'Successfully unlinked app!',\n disableDeleteRefDialog: true,\n onSuccess: () => {\n navigate({ to: '/apps' }).catch(logAndFormatError);\n },\n },\n );\n };\n\n const { packageScope } = definition.settings.general;\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={app.id}\n >\n <div className=\"max-w-7xl space-y-4 p-4\">\n <div className=\"flex items-center justify-between space-x-4\">\n <div>\n <h2>{packageScope ? `@${packageScope}/${app.name}` : app.name}</h2>\n <p className=\"text-base text-muted-foreground\">{app.type} app</p>\n </div>\n <Dialog>\n <DialogTrigger asChild>\n <Button variant=\"secondary\">Delete</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete {app.name}</DialogTitle>\n </DialogHeader>\n <p>\n Are you sure you want to delete <strong>{app.name}</strong>?\n </p>\n <p className=\"text-style-muted\">\n This action will unlink the app from the generation process, so\n it will no longer be updated or managed through Baseplate. If\n already generated, the app will remain on the file system. You\n can manually delete it afterwards if no longer needed.\n </p>\n\n <DialogFooter>\n <DialogClose>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={isSavingDefinition}\n >\n Unlink App\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["useProjectDefinition","importShared","Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","Outlet","useNavigate","SplitComponent","saveDefinitionWithFeedbackSync","definition","isSavingDefinition","app","Route","useLoaderData","navigate","from","fullPath","handleDelete","apps","filter","a","id","successMessage","disableDeleteRefDialog","onSuccess","to","catch","logAndFormatError","packageScope","settings","general","jsxs","jsx","name","type"],"mappings":"+JAGA,KAAA,CAAA,qBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,OAAAC,EAAA,OAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,cAAAC,CAAA,EAAA,MAAAR,EAAA,8BAAA,EAUA,CAAA,OAAAS,EAAA,YAAAC,CAAA,EAAA,MAAAV,EAAA,wBAAA,EAOqEW,EAAA,UAuB3B,CAClC,KAAA,CAAEC,+BAAAA,EAAgCC,WAAAA,EAAYC,mBAAAA,GAClDf,EAAqB,EAEjB,CAAEgB,IAAAA,CAAAA,EAAQC,EAAMC,cAAc,EAE9BC,EAAWR,EAAY,CAAES,KAAMH,EAAMI,QAAAA,CAAU,EAE/CC,EAAeA,IAAY,CAC/BT,EACGC,GAAe,CACdA,EAAWS,KAAOT,EAAWS,KAAKC,OAAcC,GAAAA,EAAEC,KAAOV,EAAIU,EAAE,CAAA,EAEjE,CACEC,eAAgB,6BAChBC,uBAAwB,GACxBC,UAAWA,IAAM,CACNV,EAAA,CAAEW,GAAI,OAAA,CAAS,EAAEC,MAAMC,CAAiB,CAAA,CACnD,CAEJ,CACF,EAEM,CAAEC,aAAAA,CAAAA,EAAiBnB,EAAWoB,SAASC,QAG3C,OAAAC,EAAA,KAAC,MACC,CAAA,UAAU,uDAGV,SAAA,CAAAC,EAAAA,IAAC,OAAI,UAAU,0BACb,SAACD,EAAA,KAAA,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAA,OAAC,MACC,CAAA,SAAA,CAACC,EAAAA,IAAA,KAAA,CAAIJ,WAAe,IAAIA,CAAY,IAAIjB,EAAIsB,IAAI,GAAKtB,EAAIsB,IAAK,CAAA,EAC9DF,EAAAA,KAAC,IAAE,CAAA,UAAU,kCAAmCpB,SAAAA,CAAIuB,EAAAA,KAAK,MAAA,CAAI,CAAA,CAAA,EAC/D,SACCpC,EACC,CAAA,SAAA,CAACkC,EAAAA,IAAA5B,EAAA,CAAc,QAAO,GACpB,SAAA4B,EAAA,IAACnC,GAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,SACCG,EACC,CAAA,SAAA,CAACgC,EAAA,IAAA9B,EAAA,CACC,gBAACC,EAAY,CAAA,SAAA,CAAA,UAAQQ,EAAIsB,IAAAA,CAAAA,CAAK,CAChC,CAAA,SACC,IAAC,CAAA,SAAA,CAAA,mCACgCD,EAAAA,IAAC,SAAQrB,CAAAA,SAAAA,EAAIsB,IAAK,CAAA,EAAS,GAAA,EAC7D,EACCD,EAAA,IAAA,IAAA,CAAE,UAAU,mBAAkB,SAK/B,sPAAA,SAEC/B,EACC,CAAA,SAAA,CAAA+B,EAAAA,IAACjC,GACC,SAACiC,EAAA,IAAAnC,EAAA,CAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,EACAmC,EAAAA,IAACnC,GACC,QAAQ,cACR,QAASoB,EACT,SAAUP,EAAmB,SAG/B,YAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CACF,CAAA,EACCsB,EAAAA,IAAA,MAAA,CACC,UAAU,uDACV,MACE,CACE,sBAAuB,MACzB,EAGF,SAACA,EAAAA,IAAA3B,EAAA,CAAM,CAAA,CACT,CAAA,CAAA,CAAA,EAnDKM,EAAIU,EAoDX,CAEJ"}
1
+ {"version":3,"file":"route-DGnyRZBc.js","sources":["../../src/routes/apps/edit.$key/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { appEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n Dialog,\n DialogClose,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DialogTrigger,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n notFound,\n Outlet,\n useNavigate,\n} from '@tanstack/react-router';\n\nimport { logAndFormatError } from '#src/services/error-formatter.js';\n\nexport const Route = createFileRoute('/apps/edit/$key')({\n component: EditAppPage,\n beforeLoad: ({ params: { key }, context: { projectDefinition } }) => {\n const id = appEntityType.idFromKey(key);\n const app = id && projectDefinition.apps.find((a) => a.id === id);\n if (!app) {\n return {};\n }\n return {\n getTitle: () => app.name,\n app,\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: { app } }) => {\n if (!app) throw notFound();\n return { app };\n },\n});\n\nfunction EditAppPage(): React.JSX.Element {\n const { saveDefinitionWithFeedbackSync, definition, isSavingDefinition } =\n useProjectDefinition();\n\n const { app } = Route.useLoaderData();\n\n const navigate = useNavigate({ from: Route.fullPath });\n\n const handleDelete = (): void => {\n saveDefinitionWithFeedbackSync(\n (definition) => {\n definition.apps = definition.apps.filter((a) => a.id !== app.id);\n },\n {\n successMessage: 'Successfully unlinked app!',\n disableDeleteRefDialog: true,\n onSuccess: () => {\n navigate({ to: '/apps' }).catch(logAndFormatError);\n },\n },\n );\n };\n\n const { packageScope } = definition.settings.general;\n\n return (\n <div\n className=\"relative flex h-full flex-1 flex-col overflow-hidden\"\n key={app.id}\n >\n <div className=\"max-w-7xl space-y-4 p-4\">\n <div className=\"flex items-center justify-between space-x-4\">\n <div>\n <h2>{packageScope ? `@${packageScope}/${app.name}` : app.name}</h2>\n <p className=\"text-base text-muted-foreground\">{app.type} app</p>\n </div>\n <Dialog>\n <DialogTrigger asChild>\n <Button variant=\"secondary\">Delete</Button>\n </DialogTrigger>\n <DialogContent>\n <DialogHeader>\n <DialogTitle>Delete {app.name}</DialogTitle>\n </DialogHeader>\n <p>\n Are you sure you want to delete <strong>{app.name}</strong>?\n </p>\n <p className=\"text-style-muted\">\n This action will unlink the app from the generation process, so\n it will no longer be updated or managed through Baseplate. If\n already generated, the app will remain on the file system. You\n can manually delete it afterwards if no longer needed.\n </p>\n\n <DialogFooter>\n <DialogClose>\n <Button variant=\"secondary\">Cancel</Button>\n </DialogClose>\n <Button\n variant=\"destructive\"\n onClick={handleDelete}\n disabled={isSavingDefinition}\n >\n Unlink App\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n </div>\n </div>\n <div\n className=\"mb-(--action-bar-height) flex flex-1 overflow-y-auto\"\n style={\n {\n '--action-bar-height': '52px',\n } as React.CSSProperties\n }\n >\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["useProjectDefinition","importShared","Button","Dialog","DialogClose","DialogContent","DialogFooter","DialogHeader","DialogTitle","DialogTrigger","Outlet","useNavigate","SplitComponent","saveDefinitionWithFeedbackSync","definition","isSavingDefinition","app","Route","useLoaderData","navigate","from","fullPath","handleDelete","apps","filter","a","id","successMessage","disableDeleteRefDialog","onSuccess","to","catch","logAndFormatError","packageScope","settings","general","jsxs","jsx","name","type"],"mappings":"+JAGA,KAAA,CAAA,qBAAAA,CAAA,EAAA,MAAAC,EAAA,wCAAA,EACA,CAAA,OAAAC,EAAA,OAAAC,EAAA,YAAAC,EAAA,cAAAC,EAAA,aAAAC,EAAA,aAAAC,EAAA,YAAAC,EAAA,cAAAC,CAAA,EAAA,MAAAR,EAAA,8BAAA,EAUA,CAAA,OAAAS,EAAA,YAAAC,CAAA,EAAA,MAAAV,EAAA,wBAAA,EAOqEW,EAAA,UAuB3B,CACxC,KAAM,CAAEC,+BAAAA,EAAgCC,WAAAA,EAAYC,mBAAAA,CAAAA,EAClDf,EAAAA,EAEI,CAAEgB,IAAAA,CAAAA,EAAQC,EAAMC,cAAAA,EAEhBC,EAAWR,EAAY,CAAES,KAAMH,EAAMI,QAAAA,CAAU,EAE/CC,EAAeA,IAAY,CAC/BT,EACGC,GAAe,CACdA,EAAWS,KAAOT,EAAWS,KAAKC,OAAQC,GAAMA,EAAEC,KAAOV,EAAIU,EAAE,CACjE,EACA,CACEC,eAAgB,6BAChBC,uBAAwB,GACxBC,UAAWA,IAAM,CACfV,EAAS,CAAEW,GAAI,OAAA,CAAS,EAAEC,MAAMC,CAAiB,CACnD,CAAA,CAEJ,CACF,EAEM,CAAEC,aAAAA,CAAAA,EAAiBnB,EAAWoB,SAASC,QAE7C,OACEC,EAAAA,KAAC,MAAA,CACC,UAAU,uDAGV,SAAA,CAAAC,EAAAA,IAAC,OAAI,UAAU,0BACb,SAAAD,EAAAA,KAAC,MAAA,CAAI,UAAU,8CACb,SAAA,CAAAA,OAAC,MAAA,CACC,SAAA,CAAAC,EAAAA,IAAC,KAAA,CAAIJ,WAAe,IAAIA,CAAY,IAAIjB,EAAIsB,IAAI,GAAKtB,EAAIsB,IAAAA,CAAK,EAC9DF,EAAAA,KAAC,IAAA,CAAE,UAAU,kCAAmCpB,SAAAA,CAAAA,EAAIuB,KAAK,MAAA,CAAA,CAAI,CAAA,EAC/D,SACCpC,EAAA,CACC,SAAA,CAAAkC,EAAAA,IAAC5B,EAAA,CAAc,QAAO,GACpB,SAAA4B,EAAAA,IAACnC,GAAO,QAAQ,YAAY,kBAAM,CAAA,CACpC,SACCG,EAAA,CACC,SAAA,CAAAgC,EAAAA,IAAC9B,EAAA,CACC,gBAACC,EAAA,CAAY,SAAA,CAAA,UAAQQ,EAAIsB,IAAAA,CAAAA,CAAK,CAAA,CAChC,SACC,IAAA,CAAC,SAAA,CAAA,mCACgCD,EAAAA,IAAC,SAAA,CAAQrB,SAAAA,EAAIsB,IAAAA,CAAK,EAAS,GAAA,EAC7D,EACAD,EAAAA,IAAC,IAAA,CAAE,UAAU,mBAAkB,SAAA,sPAK/B,SAEC/B,EAAA,CACC,SAAA,CAAA+B,EAAAA,IAACjC,GACC,SAAAiC,EAAAA,IAACnC,EAAA,CAAO,QAAQ,YAAY,kBAAM,CAAA,CACpC,EACAmC,EAAAA,IAACnC,GACC,QAAQ,cACR,QAASoB,EACT,SAAUP,EAAmB,SAAA,YAAA,CAG/B,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EACAsB,EAAAA,IAAC,MAAA,CACC,UAAU,uDACV,MACE,CACE,sBAAuB,MAAA,EAI3B,SAAAA,EAAAA,IAAC3B,EAAA,CAAA,CAAM,CAAA,CACT,CAAA,CAAA,EAnDKM,EAAIU,EAoDX,CAEJ"}
@@ -0,0 +1,2 @@
1
+ import"./jsx-runtime-D_zvdyIk.js";import{N as o}from"./index-Cd_baD6T.js";const p=o;export{p as notFoundComponent};
2
+ //# sourceMappingURL=route-Dm8VYkZY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-DLz_DL5S.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":"0EAEwD,MAAAA,EAA/CC"}
1
+ {"version":3,"file":"route-Dm8VYkZY.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":"0EAEwD,MAAAA,EAA/CC"}
@@ -1,2 +1,2 @@
1
- import{i}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{a as g}from"./index-DEKFCy0H.js";import{c as u,A as b,B as y}from"./index-tflukq04.js";import{N as S}from"./new-enum-dialog-B5zvBxhT.js";import{s as w}from"./sortBy-C9bvycg5.js";import{N as L}from"./new-model-dialog-CiwTpKcZ.js";function k(c,o){let a=c[0],n=-1/0;for(let r=0;r<c.length;r++){const l=c[r],s=o(l);s>n&&(n=s,a=l)}return a}const{modelEnumEntityType:C}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:M}=await i("@baseplate-dev/project-builder-lib/web"),{Button:h,InputField:$,NavigationMenu:E,NavigationMenuItemWithLink:I,NavigationMenuList:T,ScrollArea:A}=await i("@baseplate-dev/ui-components"),{Link:B}=await i("@tanstack/react-router"),{useState:x}=await i("react");function F({className:c}){const{definition:{enums:o=[]}}=M(),[a,n]=x(""),r=o.filter(t=>t.name.toLowerCase().includes(a.toLowerCase())),l=w(r,[t=>t.name]),[s,m]=x(!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(S,{children:e.jsxs(h,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Enum"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx($,{value:a,onChange:t=>{n(t)},placeholder:"Search"}),a&&e.jsx(h,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",size:"icon",onClick:()=>{n("")},children:e.jsx(y,{})})]})]}),e.jsxs(A,{className:u("flex-1 px-2",s&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==s&&m(d)},children:[l.length===0&&a&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No enums found"}),e.jsx(E,{orientation:"vertical",children:e.jsx(T,{children:l.map(t=>e.jsx("li",{children:e.jsx(I,{asChild:!0,children:e.jsx(B,{to:"/data/enums/edit/$key",params:{key:C.keyFromId(t.id)},children:t.name})})},t.id))})})]})]})}const{modelEntityType:D}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:P}=await i("@baseplate-dev/project-builder-lib/web"),{Button:p,InputField:W,NavigationMenu:Q,NavigationMenuItemWithLink:z,NavigationMenuList:R,ScrollArea:O}=await i("@baseplate-dev/ui-components"),{Link:q}=await i("@tanstack/react-router"),{useState:j}=await i("react");function G({className:c}){const{definition:{models:o}}=P(),[a,n]=j(""),r=o.filter(t=>t.name.toLowerCase().includes(a.toLowerCase())),l=w(r,[t=>t.name]),[s,m]=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(L,{children:e.jsxs(p,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Model"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(W,{value:a,onChange:t=>{n(t)},placeholder:"Search"}),a&&e.jsx(p,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",onClick:()=>{n("")},size:"icon",children:e.jsx(y,{})})]})]}),e.jsxs(O,{className:u("flex-1 px-2",s&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==s&&m(d)},children:[l.length===0&&a&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No models found"}),e.jsx(Q,{orientation:"vertical",children:e.jsx(R,{children:l.map(t=>e.jsx(z,{asChild:!0,children:e.jsx(q,{to:"/data/models/edit/$key",params:{key:D.keyFromId(t.id)},children:t.name})},t.id))})})]})]})}const{useProjectDefinition:H}=await i("@baseplate-dev/project-builder-lib/web"),{NavigationTabs:J,NavigationTabsItem:f,SidebarLayout:K,SidebarLayoutContent:U,SidebarLayoutSidebar:V}=await i("@baseplate-dev/ui-components"),{Link:v,Outlet:X,useRouterState:N}=await i("@tanstack/react-router"),ie=function(){const{definition:{models:o=[],enums:a=[]}}=H(),n=k([...o,...a],s=>s.name.length)?.name,r=N({select:s=>s.location.pathname.startsWith("/data/models")}),l=N({select:s=>s.location.pathname.startsWith("/data/enums")});return e.jsxs(K,{className:"flex-1",children:[e.jsxs(V,{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:n}),e.jsx("div",{className:"px-4",children:e.jsxs(J,{className:"w-full",children:[e.jsx(f,{asChild:!0,children:e.jsx(v,{to:"/data/models",children:"Models"})}),e.jsx(f,{asChild:!0,children:e.jsx(v,{to:"/data/enums",children:"Enums"})})]})}),r?e.jsx(G,{}):null,l?e.jsx(F,{}):null]}),e.jsx(U,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:e.jsx(g,{children:e.jsx(X,{})})})]})};export{ie as component};
2
- //# sourceMappingURL=route-C3eBLQEr.js.map
1
+ import{i}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{a as g}from"./index-Cd_baD6T.js";import{c as u,A as b,B as y}from"./index-tflukq04.js";import{N as S}from"./new-enum-dialog-CE3pNVPW.js";import{s as w}from"./sortBy-C9bvycg5.js";import{N as L}from"./new-model-dialog-BUqUnu3F.js";function k(c,o){let a=c[0],n=-1/0;for(let r=0;r<c.length;r++){const l=c[r],s=o(l);s>n&&(n=s,a=l)}return a}const{modelEnumEntityType:C}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:M}=await i("@baseplate-dev/project-builder-lib/web"),{Button:h,InputField:$,NavigationMenu:E,NavigationMenuItemWithLink:I,NavigationMenuList:T,ScrollArea:A}=await i("@baseplate-dev/ui-components"),{Link:B}=await i("@tanstack/react-router"),{useState:x}=await i("react");function F({className:c}){const{definition:{enums:o=[]}}=M(),[a,n]=x(""),r=o.filter(t=>t.name.toLowerCase().includes(a.toLowerCase())),l=w(r,[t=>t.name]),[s,m]=x(!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(S,{children:e.jsxs(h,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Enum"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx($,{value:a,onChange:t=>{n(t)},placeholder:"Search"}),a&&e.jsx(h,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",size:"icon",onClick:()=>{n("")},children:e.jsx(y,{})})]})]}),e.jsxs(A,{className:u("flex-1 px-2",s&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==s&&m(d)},children:[l.length===0&&a&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No enums found"}),e.jsx(E,{orientation:"vertical",children:e.jsx(T,{children:l.map(t=>e.jsx("li",{children:e.jsx(I,{asChild:!0,children:e.jsx(B,{to:"/data/enums/edit/$key",params:{key:C.keyFromId(t.id)},children:t.name})})},t.id))})})]})]})}const{modelEntityType:D}=await i("@baseplate-dev/project-builder-lib"),{useProjectDefinition:P}=await i("@baseplate-dev/project-builder-lib/web"),{Button:p,InputField:W,NavigationMenu:Q,NavigationMenuItemWithLink:z,NavigationMenuList:R,ScrollArea:O}=await i("@baseplate-dev/ui-components"),{Link:q}=await i("@tanstack/react-router"),{useState:j}=await i("react");function G({className:c}){const{definition:{models:o}}=P(),[a,n]=j(""),r=o.filter(t=>t.name.toLowerCase().includes(a.toLowerCase())),l=w(r,[t=>t.name]),[s,m]=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(L,{children:e.jsxs(p,{variant:"secondary",className:"w-full",children:[e.jsx(b,{}),"New Model"]})}),o.length>0&&e.jsxs("div",{className:"relative",children:[e.jsx(W,{value:a,onChange:t=>{n(t)},placeholder:"Search"}),a&&e.jsx(p,{variant:"ghost",className:"absolute top-1/2 right-4 -translate-y-1/2",onClick:()=>{n("")},size:"icon",children:e.jsx(y,{})})]})]}),e.jsxs(O,{className:u("flex-1 px-2",s&&"border-t"),onScrollCapture:t=>{const d=t.currentTarget.scrollTop>0;d!==s&&m(d)},children:[l.length===0&&a&&e.jsx("div",{className:"py-4 text-center text-style-muted",children:"No models found"}),e.jsx(Q,{orientation:"vertical",children:e.jsx(R,{children:l.map(t=>e.jsx(z,{asChild:!0,children:e.jsx(q,{to:"/data/models/edit/$key",params:{key:D.keyFromId(t.id)},children:t.name})},t.id))})})]})]})}const{useProjectDefinition:H}=await i("@baseplate-dev/project-builder-lib/web"),{NavigationTabs:J,NavigationTabsItem:f,SidebarLayout:K,SidebarLayoutContent:U,SidebarLayoutSidebar:V}=await i("@baseplate-dev/ui-components"),{Link:v,Outlet:X,useRouterState:N}=await i("@tanstack/react-router"),ie=function(){const{definition:{models:o=[],enums:a=[]}}=H(),n=k([...o,...a],s=>s.name.length)?.name,r=N({select:s=>s.location.pathname.startsWith("/data/models")}),l=N({select:s=>s.location.pathname.startsWith("/data/enums")});return e.jsxs(K,{className:"flex-1",children:[e.jsxs(V,{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:n}),e.jsx("div",{className:"px-4",children:e.jsxs(J,{className:"w-full",children:[e.jsx(f,{asChild:!0,children:e.jsx(v,{to:"/data/models",children:"Models"})}),e.jsx(f,{asChild:!0,children:e.jsx(v,{to:"/data/enums",children:"Enums"})})]})}),r?e.jsx(G,{}):null,l?e.jsx(F,{}):null]}),e.jsx(U,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:e.jsx(g,{children:e.jsx(X,{})})})]})};export{ie as component};
2
+ //# sourceMappingURL=route-Dpt-JNZC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-C3eBLQEr.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 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 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\">Models</Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\">Enums</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","Link","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","Outlet","useRouterState","SplitComponent","definition","longestName","name","length","modelsActive","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"route-Dpt-JNZC.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 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 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\">Models</Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\">Enums</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","Link","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","Outlet","useRouterState","SplitComponent","definition","longestName","name","length","modelsActive","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{i as a}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{J as m,A as l}from"./index-tflukq04.js";import{N as p}from"./new-admin-section-dialog-4X2fxo7a.js";import{R as o}from"./index-DEKFCy0H.js";import{s as x}from"./sortBy-C9bvycg5.js";const{adminSectionEntityType:u}=await a("@baseplate-dev/project-builder-lib"),{Button:h,NavigationMenu:j,NavigationMenuItemWithLink:f,NavigationMenuList:y,SidebarLayout:N,SidebarLayoutContent:S,SidebarLayoutSidebar:g}=await a("@baseplate-dev/ui-components"),{Link:r,Outlet:v}=await a("@tanstack/react-router"),C=function(){const{adminApp:c,app:i}=o.useLoaderData(),{appKey:t}=o.useParams(),d=c.sections??[],n=x(d,[s=>s.name]);return e.jsxs(N,{className:"flex-1",children:[e.jsxs(g,{className:"space-y-4",width:"sm",children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs(r,{to:"/apps/edit/$key/web/admin",params:{key:t},className:"flex items-center gap-2 text-sm hover:underline",children:[e.jsx(m,{}),"Back to Admin Config"]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold",children:i.name}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Admin Sections"})]})]}),e.jsx("div",{className:"flex flex-col gap-4",children:e.jsx(p,{appId:i.id,appKey:t,children:e.jsxs(h,{variant:"secondary",className:"w-full",children:[e.jsx(l,{}),"New Section"]})})}),n.length>0&&e.jsx(j,{orientation:"vertical",children:e.jsx(y,{children:n.map(s=>e.jsx(f,{asChild:!0,children:e.jsx(r,{to:"/admin-sections/$appKey/edit/$sectionKey",params:{appKey:t,sectionKey:u.keyFromId(s.id)},children:s.name})},s.id))})})]}),e.jsx(S,{children:e.jsx(v,{})})]})};export{C as component};
2
- //# sourceMappingURL=route-DzYT3FNA.js.map
1
+ import{i as a}from"./_virtual___federation_fn_import-D3sI42Ph.js";import{j as e}from"./jsx-runtime-D_zvdyIk.js";import{J as m,A as l}from"./index-tflukq04.js";import{N as p}from"./new-admin-section-dialog-DFpUuP_Z.js";import{R as o}from"./index-Cd_baD6T.js";import{s as x}from"./sortBy-C9bvycg5.js";const{adminSectionEntityType:u}=await a("@baseplate-dev/project-builder-lib"),{Button:h,NavigationMenu:j,NavigationMenuItemWithLink:f,NavigationMenuList:y,SidebarLayout:N,SidebarLayoutContent:S,SidebarLayoutSidebar:g}=await a("@baseplate-dev/ui-components"),{Link:r,Outlet:v}=await a("@tanstack/react-router"),C=function(){const{adminApp:c,app:i}=o.useLoaderData(),{appKey:t}=o.useParams(),d=c.sections??[],n=x(d,[s=>s.name]);return e.jsxs(N,{className:"flex-1",children:[e.jsxs(g,{className:"space-y-4",width:"sm",children:[e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs(r,{to:"/apps/edit/$key/web/admin",params:{key:t},className:"flex items-center gap-2 text-sm hover:underline",children:[e.jsx(m,{}),"Back to Admin Config"]}),e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-semibold",children:i.name}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Admin Sections"})]})]}),e.jsx("div",{className:"flex flex-col gap-4",children:e.jsx(p,{appId:i.id,appKey:t,children:e.jsxs(h,{variant:"secondary",className:"w-full",children:[e.jsx(l,{}),"New Section"]})})}),n.length>0&&e.jsx(j,{orientation:"vertical",children:e.jsx(y,{children:n.map(s=>e.jsx(f,{asChild:!0,children:e.jsx(r,{to:"/admin-sections/$appKey/edit/$sectionKey",params:{appKey:t,sectionKey:u.keyFromId(s.id)},children:s.name})},s.id))})})]}),e.jsx(S,{children:e.jsx(v,{})})]})};export{C as component};
2
+ //# sourceMappingURL=route-pfSpaHo3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-DzYT3FNA.js","sources":["../../src/routes/admin-sections.$appKey/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n adminSectionEntityType,\n appEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n notFound,\n Outlet,\n redirect,\n} from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { MdAdd, MdArrowBack } from 'react-icons/md';\n\nimport NewAdminSectionDialog from './-components/new-admin-section-dialog.js';\n\nexport const Route = createFileRoute('/admin-sections/$appKey')({\n component: AdminSectionsLayout,\n beforeLoad: ({ params: { appKey }, context: { projectDefinition } }) => {\n const appId = appEntityType.idFromKey(appKey);\n const app = appId\n ? projectDefinition.apps.find((a) => a.id === appId)\n : undefined;\n if (!app || app.type !== 'web') {\n return {};\n }\n const { adminApp } = app;\n return {\n getTitle: () => app.name,\n app,\n adminApp,\n };\n },\n loader: ({ context: { app, adminApp } }) => {\n if (!app) throw notFound();\n if (!adminApp)\n throw redirect({\n to: '/apps/edit/$key/web/admin',\n params: { key: appEntityType.keyFromId(app.id) },\n });\n return { app, adminApp };\n },\n});\n\nfunction AdminSectionsLayout(): React.JSX.Element {\n const { adminApp, app } = Route.useLoaderData();\n const { appKey } = Route.useParams();\n\n const sections = adminApp.sections ?? [];\n const sortedSections = sortBy(sections, [(section) => section.name]);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n {/* Header with back link */}\n <div className=\"flex flex-col gap-4\">\n <Link\n to=\"/apps/edit/$key/web/admin\"\n params={{ key: appKey }}\n className=\"flex items-center gap-2 text-sm hover:underline\"\n >\n <MdArrowBack />\n Back to Admin Config\n </Link>\n\n <div>\n <h2 className=\"text-lg font-semibold\">{app.name}</h2>\n <p className=\"text-sm text-muted-foreground\">Admin Sections</p>\n </div>\n </div>\n\n {/* New Section Button */}\n <div className=\"flex flex-col gap-4\">\n <NewAdminSectionDialog appId={app.id} appKey={appKey}>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Section\n </Button>\n </NewAdminSectionDialog>\n </div>\n\n {/* Sections Navigation */}\n {sortedSections.length > 0 && (\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedSections.map((section) => (\n <NavigationMenuItemWithLink key={section.id} asChild>\n <Link\n to=\"/admin-sections/$appKey/edit/$sectionKey\"\n params={{\n appKey,\n sectionKey: adminSectionEntityType.keyFromId(section.id),\n }}\n >\n {section.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n )}\n </SidebarLayoutSidebar>\n\n <SidebarLayoutContent>\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["adminSectionEntityType","importShared","Button","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","Link","Outlet","SplitComponent","adminApp","app","Route","useLoaderData","appKey","useParams","sections","sortedSections","sortBy","section","name","jsxs","key","jsx","MdArrowBack","NewAdminSectionDialog","id","MdAdd","length","map","sectionKey","keyFromId"],"mappings":"2SAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EAIA,CAAA,OAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAP,EAAA,8BAAA,EASA,CAAA,KAAAQ,EAAA,OAAAC,CAAA,EAAA,MAAAT,EAAA,wBAAA,EAU8EU,EAAA,UA8B5B,CAC1C,KAAA,CAAEC,SAAAA,EAAUC,IAAAA,CAAAA,EAAQC,EAAMC,cAAc,EACxC,CAAEC,OAAAA,CAAAA,EAAWF,EAAMG,UAAU,EAE7BC,EAAWN,EAASM,UAAY,CAAE,EAClCC,EAAiBC,EAAOF,EAAU,CAAcG,GAAAA,EAAQC,IAAI,CAAC,EAGjE,OAAAC,EAAA,KAACjB,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAiB,EAAA,KAACf,EAAqB,CAAA,UAAU,YAAY,MAAM,KAEhD,SAAA,CAACe,EAAAA,KAAA,MAAA,CAAI,UAAU,sBACb,SAAA,CAACA,EAAAA,KAAAd,EAAA,CACC,GAAG,4BACH,OAAQ,CAAEe,IAAKR,CAAAA,EACf,UAAU,kDAEV,SAAA,CAAAS,EAAA,IAACC,EAAW,EAAA,EAAA,sBAAA,EAEd,SAEC,MACC,CAAA,SAAA,CAAAD,EAAA,IAAC,KAAG,CAAA,UAAU,wBAAyBZ,SAAAA,EAAIS,KAAK,EAC/CG,EAAA,IAAA,IAAA,CAAE,UAAU,gCAAgC,SAAc,gBAAA,CAAA,CAAA,CAC7D,CAAA,CAAA,EACF,EAGCA,MAAA,MAAA,CAAI,UAAU,sBACb,eAACE,EAAsB,CAAA,MAAOd,EAAIe,GAAI,OAAAZ,EACpC,SAACO,EAAA,KAAArB,EAAA,CAAO,QAAQ,YAAY,UAAU,SACpC,SAAA,CAAAuB,EAAA,IAACI,EAAK,EAAA,EAAA,aAAA,CAER,CAAA,CACF,CAAA,EACF,EAGCV,EAAeW,OAAS,GACvBL,EAAA,IAACtB,GAAe,YAAY,WAC1B,eAACE,EACEc,CAAAA,SAAAA,EAAeY,IACdV,GAAAI,EAAA,IAACrB,GAA4C,QAAO,GAClD,eAACK,EACC,CAAA,GAAG,2CACH,OAAQ,CACNO,OAAAA,EACAgB,WAAYhC,EAAuBiC,UAAUZ,EAAQO,EAAE,CAAA,EAGxDP,WAAQC,IACX,CAAA,CAAA,EAT+BD,EAAQO,EAUzC,CACD,EACH,CACF,CAAA,CAAA,EAEJ,EAECH,EAAA,IAAAlB,EAAA,CACC,SAACkB,EAAAA,IAAAf,EAAA,CAAA,CAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-pfSpaHo3.js","sources":["../../src/routes/admin-sections.$appKey/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n adminSectionEntityType,\n appEntityType,\n} from '@baseplate-dev/project-builder-lib';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n notFound,\n Outlet,\n redirect,\n} from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\nimport { MdAdd, MdArrowBack } from 'react-icons/md';\n\nimport NewAdminSectionDialog from './-components/new-admin-section-dialog.js';\n\nexport const Route = createFileRoute('/admin-sections/$appKey')({\n component: AdminSectionsLayout,\n beforeLoad: ({ params: { appKey }, context: { projectDefinition } }) => {\n const appId = appEntityType.idFromKey(appKey);\n const app = appId\n ? projectDefinition.apps.find((a) => a.id === appId)\n : undefined;\n if (!app || app.type !== 'web') {\n return {};\n }\n const { adminApp } = app;\n return {\n getTitle: () => app.name,\n app,\n adminApp,\n };\n },\n loader: ({ context: { app, adminApp } }) => {\n if (!app) throw notFound();\n if (!adminApp)\n throw redirect({\n to: '/apps/edit/$key/web/admin',\n params: { key: appEntityType.keyFromId(app.id) },\n });\n return { app, adminApp };\n },\n});\n\nfunction AdminSectionsLayout(): React.JSX.Element {\n const { adminApp, app } = Route.useLoaderData();\n const { appKey } = Route.useParams();\n\n const sections = adminApp.sections ?? [];\n const sortedSections = sortBy(sections, [(section) => section.name]);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n {/* Header with back link */}\n <div className=\"flex flex-col gap-4\">\n <Link\n to=\"/apps/edit/$key/web/admin\"\n params={{ key: appKey }}\n className=\"flex items-center gap-2 text-sm hover:underline\"\n >\n <MdArrowBack />\n Back to Admin Config\n </Link>\n\n <div>\n <h2 className=\"text-lg font-semibold\">{app.name}</h2>\n <p className=\"text-sm text-muted-foreground\">Admin Sections</p>\n </div>\n </div>\n\n {/* New Section Button */}\n <div className=\"flex flex-col gap-4\">\n <NewAdminSectionDialog appId={app.id} appKey={appKey}>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Section\n </Button>\n </NewAdminSectionDialog>\n </div>\n\n {/* Sections Navigation */}\n {sortedSections.length > 0 && (\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedSections.map((section) => (\n <NavigationMenuItemWithLink key={section.id} asChild>\n <Link\n to=\"/admin-sections/$appKey/edit/$sectionKey\"\n params={{\n appKey,\n sectionKey: adminSectionEntityType.keyFromId(section.id),\n }}\n >\n {section.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n )}\n </SidebarLayoutSidebar>\n\n <SidebarLayoutContent>\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["adminSectionEntityType","importShared","Button","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","Link","Outlet","SplitComponent","adminApp","app","Route","useLoaderData","appKey","useParams","sections","sortedSections","sortBy","section","name","jsxs","key","jsx","MdArrowBack","NewAdminSectionDialog","id","MdAdd","length","map","sectionKey","keyFromId"],"mappings":"2SAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EAIA,CAAA,OAAAC,EAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAP,EAAA,8BAAA,EASA,CAAA,KAAAQ,EAAA,OAAAC,CAAA,EAAA,MAAAT,EAAA,wBAAA,EAU8EU,EAAA,UA8B5B,CAChD,KAAM,CAAEC,SAAAA,EAAUC,IAAAA,CAAAA,EAAQC,EAAMC,cAAAA,EAC1B,CAAEC,OAAAA,CAAAA,EAAWF,EAAMG,UAAAA,EAEnBC,EAAWN,EAASM,UAAY,CAAA,EAChCC,EAAiBC,EAAOF,EAAU,CAAEG,GAAYA,EAAQC,IAAI,CAAC,EAEnE,OACEC,EAAAA,KAACjB,EAAA,CAAc,UAAU,SACvB,SAAA,CAAAiB,EAAAA,KAACf,EAAA,CAAqB,UAAU,YAAY,MAAM,KAEhD,SAAA,CAAAe,EAAAA,KAAC,MAAA,CAAI,UAAU,sBACb,SAAA,CAAAA,EAAAA,KAACd,EAAA,CACC,GAAG,4BACH,OAAQ,CAAEe,IAAKR,CAAAA,EACf,UAAU,kDAEV,SAAA,CAAAS,EAAAA,IAACC,EAAA,EAAW,EAAA,sBAAA,EAEd,SAEC,MAAA,CACC,SAAA,CAAAD,EAAAA,IAAC,KAAA,CAAG,UAAU,wBAAyBZ,SAAAA,EAAIS,KAAK,EAChDG,EAAAA,IAAC,IAAA,CAAE,UAAU,gCAAgC,SAAA,gBAAA,CAAc,CAAA,CAAA,CAC7D,CAAA,EACF,EAGAA,MAAC,MAAA,CAAI,UAAU,sBACb,eAACE,EAAA,CAAsB,MAAOd,EAAIe,GAAI,OAAAZ,EACpC,SAAAO,EAAAA,KAACrB,EAAA,CAAO,QAAQ,YAAY,UAAU,SACpC,SAAA,CAAAuB,EAAAA,IAACI,EAAA,EAAK,EAAA,aAAA,CAAA,CAER,EACF,EACF,EAGCV,EAAeW,OAAS,GACvBL,EAAAA,IAACtB,GAAe,YAAY,WAC1B,eAACE,EAAA,CACEc,SAAAA,EAAeY,IAAKV,GACnBI,EAAAA,IAACrB,GAA4C,QAAO,GAClD,eAACK,EAAA,CACC,GAAG,2CACH,OAAQ,CACNO,OAAAA,EACAgB,WAAYhC,EAAuBiC,UAAUZ,EAAQO,EAAE,CAAA,EAGxDP,WAAQC,IAAAA,CACX,CAAA,EAT+BD,EAAQO,EAUzC,CACD,EACH,CAAA,CACF,CAAA,EAEJ,EAEAH,EAAAA,IAAClB,EAAA,CACC,SAAAkB,EAAAA,IAACf,EAAA,CAAA,CAAM,CAAA,CACT,CAAA,EACF,CAEJ"}