@baseplate-dev/project-builder-web 0.2.2 → 0.2.4

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 (120) hide show
  1. package/dist/assets/-constants-BC9esibq.js +4 -0
  2. package/dist/assets/-constants-BC9esibq.js.map +1 -0
  3. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-BEiksgOM.js → web-BaAZd6c4.js} +2 -2
  4. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib/{web-BEiksgOM.js.map → web-BaAZd6c4.js.map} +1 -1
  5. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-C7fVVw7M.js +5 -0
  6. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-C7fVVw7M.js.map +1 -0
  7. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-CbLT5eCP.js +46 -0
  8. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-CbLT5eCP.js.map +1 -0
  9. package/dist/assets/{_virtual___federation_fn_import-BllbkH3T.js → _virtual___federation_fn_import-CzwHXTRo.js} +2 -2
  10. package/dist/assets/{_virtual___federation_fn_import-BllbkH3T.js.map → _virtual___federation_fn_import-CzwHXTRo.js.map} +1 -1
  11. package/dist/assets/{backend-CoTpyUcx.js → backend-B3MDDop9.js} +2 -2
  12. package/dist/assets/{backend-CoTpyUcx.js.map → backend-B3MDDop9.js.map} +1 -1
  13. package/dist/assets/{badge-with-type-label-BTWMyfcL.js → badge-with-type-label-CNVJUqNt.js} +2 -2
  14. package/dist/assets/{badge-with-type-label-BTWMyfcL.js.map → badge-with-type-label-CNVJUqNt.js.map} +1 -1
  15. package/dist/assets/{edit._id-BzfH4jc0.js → edit._id-Ce2Ymc-o.js} +2 -2
  16. package/dist/assets/{edit._id-BzfH4jc0.js.map → edit._id-Ce2Ymc-o.js.map} +1 -1
  17. package/dist/assets/{enum-info-form-EeSfFY6Y.js → enum-info-form-CVHvQqYN.js} +2 -2
  18. package/dist/assets/{enum-info-form-EeSfFY6Y.js.map → enum-info-form-CVHvQqYN.js.map} +1 -1
  19. package/dist/assets/{graphql-D5k81FHL.js → graphql-BlURtGp8.js} +2 -2
  20. package/dist/assets/{graphql-D5k81FHL.js.map → graphql-BlURtGp8.js.map} +1 -1
  21. package/dist/assets/{hierarchy-CDgBahPq.js → hierarchy-B1V1qwhL.js} +2 -2
  22. package/dist/assets/{hierarchy-CDgBahPq.js.map → hierarchy-B1V1qwhL.js.map} +1 -1
  23. package/dist/assets/{index-CJO9KLcs.js → index-1DYdEncJ.js} +2 -2
  24. package/dist/assets/{index-CJO9KLcs.js.map → index-1DYdEncJ.js.map} +1 -1
  25. package/dist/assets/{index-ghp0h4jr.js → index-1rH5AIf1.js} +2 -2
  26. package/dist/assets/{index-ghp0h4jr.js.map → index-1rH5AIf1.js.map} +1 -1
  27. package/dist/assets/index-B9Di1LKs.css +1 -0
  28. package/dist/assets/{index-CJK2iGtK.js → index-BEMXZzJT.js} +2 -2
  29. package/dist/assets/{index-CJK2iGtK.js.map → index-BEMXZzJT.js.map} +1 -1
  30. package/dist/assets/{index-VsI1zxbc.js → index-BMCloLL3.js} +5 -5
  31. package/dist/assets/index-BMCloLL3.js.map +1 -0
  32. package/dist/assets/{index-Lx-c3w3C.js → index-BRdI-lNh.js} +2 -2
  33. package/dist/assets/{index-Lx-c3w3C.js.map → index-BRdI-lNh.js.map} +1 -1
  34. package/dist/assets/{index-BYcSgAsc.js → index-BazMYfmA.js} +2 -2
  35. package/dist/assets/{index-BYcSgAsc.js.map → index-BazMYfmA.js.map} +1 -1
  36. package/dist/assets/index-Bw18F51O.js +2 -0
  37. package/dist/assets/index-Bw18F51O.js.map +1 -0
  38. package/dist/assets/{index-MPyZaAGd.js → index-BxN9iLEr.js} +2 -2
  39. package/dist/assets/{index-MPyZaAGd.js.map → index-BxN9iLEr.js.map} +1 -1
  40. package/dist/assets/{index-B5VAZnNv.js → index-D9m5kBYP.js} +2 -2
  41. package/dist/assets/{index-B5VAZnNv.js.map → index-D9m5kBYP.js.map} +1 -1
  42. package/dist/assets/{index-DbPo0KMc.js → index-DJrwWHdu.js} +2 -2
  43. package/dist/assets/{index-DbPo0KMc.js.map → index-DJrwWHdu.js.map} +1 -1
  44. package/dist/assets/{index-HA6UU1kS.js → index-DlrvL7L-.js} +2 -2
  45. package/dist/assets/{index-HA6UU1kS.js.map → index-DlrvL7L-.js.map} +1 -1
  46. package/dist/assets/index.esm-C6ngV5UE.js +10 -0
  47. package/dist/assets/index.esm-C6ngV5UE.js.map +1 -0
  48. package/dist/assets/{model-info-form-DWYyoR9g.js → model-info-form-B3UWaCuz.js} +2 -2
  49. package/dist/assets/{model-info-form-DWYyoR9g.js.map → model-info-form-B3UWaCuz.js.map} +1 -1
  50. package/dist/assets/model-merger-BoPVsTMR.js +2 -0
  51. package/dist/assets/model-merger-BoPVsTMR.js.map +1 -0
  52. package/dist/assets/new-app-dialog-DmiiaAcy.js +2 -0
  53. package/dist/assets/new-app-dialog-DmiiaAcy.js.map +1 -0
  54. package/dist/assets/{new-enum-dialog-DQxXV11c.js → new-enum-dialog-eE-ABw-k.js} +2 -2
  55. package/dist/assets/{new-enum-dialog-DQxXV11c.js.map → new-enum-dialog-eE-ABw-k.js.map} +1 -1
  56. package/dist/assets/new-model-dialog-DsUABBKe.js +2 -0
  57. package/dist/assets/new-model-dialog-DsUABBKe.js.map +1 -0
  58. package/dist/assets/{route-DzDATEIF.js → route-BcszKLdV.js} +2 -2
  59. package/dist/assets/{route-DzDATEIF.js.map → route-BcszKLdV.js.map} +1 -1
  60. package/dist/assets/{route-DwYLJh1Z.js → route-CBp4D5qe.js} +2 -2
  61. package/dist/assets/{route-DwYLJh1Z.js.map → route-CBp4D5qe.js.map} +1 -1
  62. package/dist/assets/{route-Ofm_Xk4Q.js → route-Cey_4lZX.js} +2 -2
  63. package/dist/assets/{route-Ofm_Xk4Q.js.map → route-Cey_4lZX.js.map} +1 -1
  64. package/dist/assets/route-CqtFDOsk.js +2 -0
  65. package/dist/assets/{route-cP4l-WDl.js.map → route-CqtFDOsk.js.map} +1 -1
  66. package/dist/assets/{route-De01FR6I.js → route-DioBcaFQ.js} +2 -2
  67. package/dist/assets/{route-De01FR6I.js.map → route-DioBcaFQ.js.map} +1 -1
  68. package/dist/assets/{route-CmgYcJT_.js → route-MODh5ysn.js} +2 -2
  69. package/dist/assets/{route-CmgYcJT_.js.map → route-MODh5ysn.js.map} +1 -1
  70. package/dist/assets/{route-xrfcRWC7.js → route-VW3n5-PC.js} +2 -2
  71. package/dist/assets/{route-xrfcRWC7.js.map → route-VW3n5-PC.js.map} +1 -1
  72. package/dist/assets/{route-D9aGR6_H.js → route-rX4E9J5V.js} +2 -2
  73. package/dist/assets/{route-D9aGR6_H.js.map → route-rX4E9J5V.js.map} +1 -1
  74. package/dist/assets/{route-C0DpSC86.js → route-sqtj7nCf.js} +2 -2
  75. package/dist/assets/{route-C0DpSC86.js.map → route-sqtj7nCf.js.map} +1 -1
  76. package/dist/assets/{sections-Bl6CBMqu.js → sections-D48VzvlO.js} +2 -2
  77. package/dist/assets/{sections-Bl6CBMqu.js.map → sections-D48VzvlO.js.map} +1 -1
  78. package/dist/assets/{sections._sectionKey-lnWxksec.js → sections._sectionKey-Cojmxr6C.js} +2 -2
  79. package/dist/assets/{sections._sectionKey-lnWxksec.js.map → sections._sectionKey-Cojmxr6C.js.map} +1 -1
  80. package/dist/assets/{service-CH1p5s9d.js → service-CuzPG1Yl.js} +2 -2
  81. package/dist/assets/{service-CH1p5s9d.js.map → service-CuzPG1Yl.js.map} +1 -1
  82. package/dist/assets/template-extractor-B9fEhgo_.js +2 -0
  83. package/dist/assets/template-extractor-B9fEhgo_.js.map +1 -0
  84. package/dist/assets/{theme-builder-LEW3UAWc.js → theme-builder-Bw8c01EE.js} +2 -2
  85. package/dist/assets/{theme-builder-LEW3UAWc.js.map → theme-builder-Bw8c01EE.js.map} +1 -1
  86. package/dist/assets/{use-definition-schema-BB2JVpWG.js → use-definition-schema-DANa9pch.js} +2 -2
  87. package/dist/assets/{use-definition-schema-BB2JVpWG.js.map → use-definition-schema-DANa9pch.js.map} +1 -1
  88. package/dist/assets/{use-enum-form-CMIHUOLu.js → use-enum-form-Dz-Wnbxj.js} +2 -2
  89. package/dist/assets/{use-enum-form-CMIHUOLu.js.map → use-enum-form-Dz-Wnbxj.js.map} +1 -1
  90. package/dist/assets/use-model-form-DMG7DdSK.js +2 -0
  91. package/dist/assets/use-model-form-DMG7DdSK.js.map +1 -0
  92. package/dist/assets/{utils-BMK0C56t.js → utils-95Eli4qP.js} +2 -2
  93. package/dist/assets/{utils-BMK0C56t.js.map → utils-95Eli4qP.js.map} +1 -1
  94. package/dist/assets/{web-BRltYNcY.js → web-B6BjTv_c.js} +2 -2
  95. package/dist/assets/{web-BRltYNcY.js.map → web-B6BjTv_c.js.map} +1 -1
  96. package/dist/index.html +5 -5
  97. package/package.json +7 -7
  98. package/dist/assets/-constants-DdiaSxL9.js +0 -4
  99. package/dist/assets/-constants-DdiaSxL9.js.map +0 -1
  100. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-ByoEPRxY.js +0 -5
  101. package/dist/assets/__federation_shared_@baseplate-dev/project-builder-lib-ByoEPRxY.js.map +0 -1
  102. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-2ByEN20H.js +0 -46
  103. package/dist/assets/__federation_shared_@baseplate-dev/ui-components-2ByEN20H.js.map +0 -1
  104. package/dist/assets/index-BDJ79UQH.css +0 -1
  105. package/dist/assets/index-VsI1zxbc.js.map +0 -1
  106. package/dist/assets/index-y6w6FRv9.js +0 -2
  107. package/dist/assets/index-y6w6FRv9.js.map +0 -1
  108. package/dist/assets/index.esm-CGbP6mNa.js +0 -10
  109. package/dist/assets/index.esm-CGbP6mNa.js.map +0 -1
  110. package/dist/assets/model-merger-s86W4xg2.js +0 -2
  111. package/dist/assets/model-merger-s86W4xg2.js.map +0 -1
  112. package/dist/assets/new-app-dialog-CGp0nciM.js +0 -2
  113. package/dist/assets/new-app-dialog-CGp0nciM.js.map +0 -1
  114. package/dist/assets/new-model-dialog-Ta_YghmL.js +0 -2
  115. package/dist/assets/new-model-dialog-Ta_YghmL.js.map +0 -1
  116. package/dist/assets/route-cP4l-WDl.js +0 -2
  117. package/dist/assets/template-extractor-_5pq8PSE.js +0 -2
  118. package/dist/assets/template-extractor-_5pq8PSE.js.map +0 -1
  119. package/dist/assets/use-model-form-hncL1MN2.js +0 -2
  120. package/dist/assets/use-model-form-hncL1MN2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"route-De01FR6I.js","sources":["../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/array/maxBy.mjs","../../src/routes/data/enums/-components/enums-sidebar-list.tsx","../../src/routes/data/models/-components/models-sidebar-list.tsx","../../src/routes/data/route.tsx?tsr-split=component"],"sourcesContent":["function maxBy(items, getValue) {\n let maxElement = items[0];\n let max = -Infinity;\n for (let i = 0; i < items.length; i++) {\n const element = items[i];\n const value = getValue(element);\n if (value > max) {\n max = value;\n maxElement = element;\n }\n }\n return maxElement;\n}\n\nexport { maxBy };\n","import type React from 'react';\n\nimport { modelEnumEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewEnumDialog } from './new-enum-dialog.js';\n\ninterface EnumsSidebarListProps {\n className?: string;\n}\n\nexport function EnumsSidebarList({\n className,\n}: EnumsSidebarListProps): React.JSX.Element {\n const {\n definition: { enums = [] },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredEnums = enums.filter((item) =>\n item.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedEnums = sortBy(filteredEnums, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewEnumDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Enum\n </Button>\n </NewEnumDialog>\n {enums.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n size=\"icon\"\n onClick={() => {\n setFilterQuery('');\n }}\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedEnums.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No enums found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedEnums.map((enumDef) => (\n <li key={enumDef.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/data/enums/edit/$key\"\n from=\"/\"\n params={{ key: modelEnumEntityType.keyFromId(enumDef.id) }}\n >\n {enumDef.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { modelEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewModelDialog } from './new-model-dialog.js';\n\ninterface ModelsSidebarListProps {\n className?: string;\n}\n\nexport function ModelsSidebarList({\n className,\n}: ModelsSidebarListProps): React.JSX.Element {\n const {\n definition: { models },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredModels = models.filter((model) =>\n model.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedModels = sortBy(filteredModels, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewModelDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Model\n </Button>\n </NewModelDialog>\n {models.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n onClick={() => {\n setFilterQuery('');\n }}\n size=\"icon\"\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedModels.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No models found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedModels.map((model) => (\n <NavigationMenuItemWithLink key={model.id} asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key: modelEntityType.keyFromId(model.id) }}\n >\n {model.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n useRouterState,\n} from '@tanstack/react-router';\nimport { maxBy } from 'es-toolkit';\n\nimport { ErrorBoundary } from '#src/components/error-boundary/error-boundary.js';\n\nimport { EnumsSidebarList } from './enums/-components/enums-sidebar-list.js';\nimport { ModelsSidebarList } from './models/-components/models-sidebar-list.js';\n\nexport const Route = createFileRoute('/data')({\n component: DataLayout,\n});\n\nfunction DataLayout(): React.JSX.Element {\n const {\n definition: { models = [], enums = [] },\n } = useProjectDefinition();\n\n const longestName = maxBy([...models, ...enums], (m) => m.name.length)?.name;\n\n const modelsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/models'),\n });\n const enumsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/enums'),\n });\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar\n className=\"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4\"\n width=\"auto\"\n noPadding\n >\n {/* Allows us to ensure the width doesn't change when selected is semi-bold or search filter is active */}\n <div className=\"invisible block h-1 overflow-hidden font-semibold text-transparent\">\n {longestName}\n </div>\n <div className=\"px-4\">\n <NavigationTabs className=\"w-full\">\n <NavigationTabsItem asChild>\n <Link to=\"/data/models\" from=\"/\">\n Models\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\" from=\"/\">\n Enums\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n {modelsActive ? <ModelsSidebarList /> : null}\n {enumsActive ? <EnumsSidebarList /> : null}\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["maxBy","items","getValue","maxElement","max","i","element","value","modelEnumEntityType","importShared","useProjectDefinition","Button","InputField","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","ScrollArea","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","Link","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","longestName","name","length","modelsActive","useRouterState","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary","Outlet"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"route-DioBcaFQ.js","sources":["../../../../node_modules/.pnpm/es-toolkit@1.31.0/node_modules/es-toolkit/dist/array/maxBy.mjs","../../src/routes/data/enums/-components/enums-sidebar-list.tsx","../../src/routes/data/models/-components/models-sidebar-list.tsx","../../src/routes/data/route.tsx?tsr-split=component"],"sourcesContent":["function maxBy(items, getValue) {\n let maxElement = items[0];\n let max = -Infinity;\n for (let i = 0; i < items.length; i++) {\n const element = items[i];\n const value = getValue(element);\n if (value > max) {\n max = value;\n maxElement = element;\n }\n }\n return maxElement;\n}\n\nexport { maxBy };\n","import type React from 'react';\n\nimport { modelEnumEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewEnumDialog } from './new-enum-dialog.js';\n\ninterface EnumsSidebarListProps {\n className?: string;\n}\n\nexport function EnumsSidebarList({\n className,\n}: EnumsSidebarListProps): React.JSX.Element {\n const {\n definition: { enums = [] },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredEnums = enums.filter((item) =>\n item.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedEnums = sortBy(filteredEnums, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewEnumDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Enum\n </Button>\n </NewEnumDialog>\n {enums.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n size=\"icon\"\n onClick={() => {\n setFilterQuery('');\n }}\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedEnums.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No enums found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedEnums.map((enumDef) => (\n <li key={enumDef.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/data/enums/edit/$key\"\n from=\"/\"\n params={{ key: modelEnumEntityType.keyFromId(enumDef.id) }}\n >\n {enumDef.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { modelEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n InputField,\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n ScrollArea,\n} from '@baseplate-dev/ui-components';\nimport { Link } from '@tanstack/react-router';\nimport clsx from 'clsx';\nimport { sortBy } from 'es-toolkit';\nimport { useState } from 'react';\nimport { MdAdd, MdClear } from 'react-icons/md';\n\nimport { NewModelDialog } from './new-model-dialog.js';\n\ninterface ModelsSidebarListProps {\n className?: string;\n}\n\nexport function ModelsSidebarList({\n className,\n}: ModelsSidebarListProps): React.JSX.Element {\n const {\n definition: { models },\n } = useProjectDefinition();\n\n const [filterQuery, setFilterQuery] = useState('');\n const filteredModels = models.filter((model) =>\n model.name.toLowerCase().includes(filterQuery.toLowerCase()),\n );\n\n const sortedModels = sortBy(filteredModels, [(m) => m.name]);\n\n const [isScrolled, setIsScrolled] = useState(false);\n\n return (\n <div\n className={clsx(\n className,\n 'flex flex-1 flex-col space-y-4 overflow-y-auto',\n )}\n >\n <div className=\"space-y-4 px-4\">\n <NewModelDialog>\n <Button variant=\"secondary\" className=\"w-full\">\n <MdAdd />\n New Model\n </Button>\n </NewModelDialog>\n {models.length > 0 && (\n <div className=\"relative\">\n <InputField\n value={filterQuery}\n onChange={(text) => {\n setFilterQuery(text);\n }}\n placeholder=\"Search\"\n />\n {filterQuery && (\n <Button\n variant=\"ghost\"\n className=\"absolute top-1/2 right-4 -translate-y-1/2\"\n onClick={() => {\n setFilterQuery('');\n }}\n size=\"icon\"\n >\n <MdClear />\n </Button>\n )}\n </div>\n )}\n </div>\n\n <ScrollArea\n className={clsx('flex-1 px-2', isScrolled && 'border-t')}\n onScrollCapture={(e) => {\n const hasScrolled = e.currentTarget.scrollTop > 0;\n if (hasScrolled !== isScrolled) {\n setIsScrolled(hasScrolled);\n }\n }}\n >\n {sortedModels.length === 0 && filterQuery && (\n <div className=\"py-4 text-center text-style-muted\">\n No models found\n </div>\n )}\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {sortedModels.map((model) => (\n <NavigationMenuItemWithLink key={model.id} asChild>\n <Link\n to=\"/data/models/edit/$key\"\n from=\"/\"\n params={{ key: modelEntityType.keyFromId(model.id) }}\n >\n {model.name}\n </Link>\n </NavigationMenuItemWithLink>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </ScrollArea>\n </div>\n );\n}\n","import type React from 'react';\n\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n NavigationTabs,\n NavigationTabsItem,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n useRouterState,\n} from '@tanstack/react-router';\nimport { maxBy } from 'es-toolkit';\n\nimport { ErrorBoundary } from '#src/components/error-boundary/error-boundary.js';\n\nimport { EnumsSidebarList } from './enums/-components/enums-sidebar-list.js';\nimport { ModelsSidebarList } from './models/-components/models-sidebar-list.js';\n\nexport const Route = createFileRoute('/data')({\n component: DataLayout,\n});\n\nfunction DataLayout(): React.JSX.Element {\n const {\n definition: { models = [], enums = [] },\n } = useProjectDefinition();\n\n const longestName = maxBy([...models, ...enums], (m) => m.name.length)?.name;\n\n const modelsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/models'),\n });\n const enumsActive = useRouterState({\n select: (state) => state.location.pathname.startsWith('/data/enums'),\n });\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar\n className=\"flex h-[calc(100vh-var(--topbar-height)-1px)] max-w-sm min-w-[230px] flex-col space-y-4\"\n width=\"auto\"\n noPadding\n >\n {/* Allows us to ensure the width doesn't change when selected is semi-bold or search filter is active */}\n <div className=\"invisible block h-1 overflow-hidden font-semibold text-transparent\">\n {longestName}\n </div>\n <div className=\"px-4\">\n <NavigationTabs className=\"w-full\">\n <NavigationTabsItem asChild>\n <Link to=\"/data/models\" from=\"/\">\n Models\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/data/enums\" from=\"/\">\n Enums\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n </div>\n {modelsActive ? <ModelsSidebarList /> : null}\n {enumsActive ? <EnumsSidebarList /> : null}\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["maxBy","items","getValue","maxElement","max","i","element","value","modelEnumEntityType","importShared","useProjectDefinition","Button","InputField","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","ScrollArea","useState","EnumsSidebarList","className","enums","filterQuery","setFilterQuery","filteredEnums","item","sortedEnums","sortBy","m","isScrolled","setIsScrolled","jsxs","clsx","jsx","NewEnumDialog","MdAdd","text","MdClear","e","hasScrolled","enumDef","Link","modelEntityType","ModelsSidebarList","models","filteredModels","model","sortedModels","NewModelDialog","NavigationTabs","NavigationTabsItem","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","longestName","name","length","modelsActive","useRouterState","select","state","location","pathname","startsWith","enumsActive","ErrorBoundary","Outlet"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +1,2 @@
1
- import{i as t}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as a}from"./index.esm-CGbP6mNa.js";import{L as n,a as d,O as c}from"./index-VsI1zxbc.js";import{n as m,B as p}from"./index-MPyZaAGd.js";const{pluginEntityType:u}=await t("@baseplate-dev/project-builder-lib"),{useProjectDefinition:h}=await t("@baseplate-dev/project-builder-lib/web"),{Button:x,NavigationMenu:j,NavigationMenuItem:g,NavigationMenuLink:b,NavigationMenuList:f,SidebarLayout:v,SidebarLayoutContent:y,SidebarLayoutSidebar:N}=await t("@baseplate-dev/ui-components"),E=function(){const{definition:s,schemaParserContext:o}=h(),{availablePlugins:r}=o.pluginStore,i=(s.plugins??[]).map(e=>r.find(l=>l.metadata.id===u.keyFromId(e.id))?.metadata).filter(m);return a.jsxs(v,{className:"flex-1",children:[a.jsxs(N,{className:"flex flex-col gap-4",width:"sm",children:[a.jsx(n,{to:"/plugins",from:"/",children:a.jsxs(x,{variant:"secondary",className:"w-full",size:"sm",children:[a.jsx(p,{}),"Add new plugin"]})}),a.jsx(j,{orientation:"vertical",children:a.jsxs(f,{children:[i.map(e=>a.jsx(b,{asChild:!0,children:a.jsx(n,{to:"/plugins/edit/$id",from:"/",params:{id:e.id},children:e.displayName})},e.id)),i.length===0&&a.jsx(g,{className:"mt-4 w-full text-center opacity-80",children:"No plugins enabled"})]})})]}),a.jsx(y,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:a.jsx(d,{children:a.jsx(c,{})})})]})};export{E as component};
2
- //# sourceMappingURL=route-CmgYcJT_.js.map
1
+ import{i as t}from"./_virtual___federation_fn_import-CzwHXTRo.js";import{j as a}from"./index.esm-C6ngV5UE.js";import{L as n,a as d,O as c}from"./index-BMCloLL3.js";import{n as m,B as p}from"./index-BxN9iLEr.js";const{pluginEntityType:u}=await t("@baseplate-dev/project-builder-lib"),{useProjectDefinition:h}=await t("@baseplate-dev/project-builder-lib/web"),{Button:x,NavigationMenu:j,NavigationMenuItem:g,NavigationMenuLink:b,NavigationMenuList:f,SidebarLayout:v,SidebarLayoutContent:y,SidebarLayoutSidebar:N}=await t("@baseplate-dev/ui-components"),E=function(){const{definition:s,schemaParserContext:o}=h(),{availablePlugins:r}=o.pluginStore,i=(s.plugins??[]).map(e=>r.find(l=>l.metadata.id===u.keyFromId(e.id))?.metadata).filter(m);return a.jsxs(v,{className:"flex-1",children:[a.jsxs(N,{className:"flex flex-col gap-4",width:"sm",children:[a.jsx(n,{to:"/plugins",from:"/",children:a.jsxs(x,{variant:"secondary",className:"w-full",size:"sm",children:[a.jsx(p,{}),"Add new plugin"]})}),a.jsx(j,{orientation:"vertical",children:a.jsxs(f,{children:[i.map(e=>a.jsx(b,{asChild:!0,children:a.jsx(n,{to:"/plugins/edit/$id",from:"/",params:{id:e.id},children:e.displayName})},e.id)),i.length===0&&a.jsx(g,{className:"mt-4 w-full text-center opacity-80",children:"No plugins enabled"})]})})]}),a.jsx(y,{className:"h-[calc(100vh-var(--topbar-height)-1px)]",children:a.jsx(d,{children:a.jsx(c,{})})})]})};export{E as component};
2
+ //# sourceMappingURL=route-MODh5ysn.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-CmgYcJT_.js","sources":["../../src/routes/plugins/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { pluginEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { notEmpty } from '@baseplate-dev/utils';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { MdAdd } from 'react-icons/md';\n\nimport { ErrorBoundary } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/plugins')({\n component: PluginsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Plugins',\n }),\n});\n\nfunction PluginsLayout(): React.JSX.Element {\n const { definition, schemaParserContext } = useProjectDefinition();\n\n const { availablePlugins } = schemaParserContext.pluginStore;\n\n const enabledPlugins = (definition.plugins ?? [])\n .map((plugin) => {\n const pluginWithMetadata = availablePlugins.find(\n (p) => p.metadata.id === pluginEntityType.keyFromId(plugin.id),\n );\n return pluginWithMetadata?.metadata;\n })\n .filter(notEmpty);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"flex flex-col gap-4\" width=\"sm\">\n <Link to=\"/plugins\" from=\"/\">\n <Button variant=\"secondary\" className=\"w-full\" size=\"sm\">\n <MdAdd />\n Add new plugin\n </Button>\n </Link>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {enabledPlugins.map((plugin) => (\n <NavigationMenuLink key={plugin.id} asChild>\n <Link\n to={`/plugins/edit/$id`}\n from=\"/\"\n params={{ id: plugin.id }}\n >\n {plugin.displayName}\n </Link>\n </NavigationMenuLink>\n ))}\n {enabledPlugins.length === 0 && (\n <NavigationMenuItem className=\"mt-4 w-full text-center opacity-80\">\n No plugins enabled\n </NavigationMenuItem>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["pluginEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","schemaParserContext","availablePlugins","pluginStore","enabledPlugins","plugins","map","plugin","find","p","metadata","id","keyFromId","filter","notEmpty","jsxs","jsx","Link","MdAdd","displayName","length","ErrorBoundary","Outlet"],"mappings":"mNAEA,KAAA,CAAA,iBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAT,EAAA,8BAAA,EAcyDU,EAAA,UASb,CACpC,KAAA,CAAEC,WAAAA,EAAYC,oBAAAA,GAAwBX,EAAqB,EAE3D,CAAEY,iBAAAA,GAAqBD,EAAoBE,YAE3CC,GAAkBJ,EAAWK,SAAW,CAAA,GAC3CC,IAAgBC,GACYL,EAAiBM,KACnCC,GAAAA,EAAEC,SAASC,KAAOvB,EAAiBwB,UAAUL,EAAOI,EAAE,CAC/D,GAC2BD,QAC5B,EACAG,OAAOC,CAAQ,EAGhB,OAAAC,EAAA,KAACnB,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAmB,EAAA,KAACjB,EAAqB,CAAA,UAAU,sBAAsB,MAAM,KAC1D,SAAA,CAAAkB,EAAA,IAACC,EAAK,CAAA,GAAG,WAAW,KAAK,IACvB,SAAAF,EAAAA,KAACxB,EAAO,CAAA,QAAQ,YAAY,UAAU,SAAS,KAAK,KAClD,SAAA,CAAAyB,EAAA,IAACE,EAAK,EAAA,EAAA,gBAAA,CAAA,CAER,CACF,CAAA,EACCF,MAAAxB,EAAA,CAAe,YAAY,WAC1B,gBAACG,EACES,CAAAA,SAAAA,CAAAA,EAAeE,IAAKC,GAClBS,EAAA,IAAAtB,EAAA,CAAmC,QAAO,GACzC,SAACsB,EAAAA,IAAAC,EAAA,CACC,GAAI,oBACJ,KAAK,IACL,OAAQ,CAAEN,GAAIJ,EAAOI,EAAAA,EAEpBJ,SAAOY,EAAAA,WAAAA,CACV,CAPuBZ,EAAAA,EAAOI,EAQhC,CACD,EACAP,EAAegB,SAAW,SACxB3B,EAAmB,CAAA,UAAU,qCAAoC,SAElE,oBAAA,CAAA,CAAA,CAAA,CAEJ,CACF,CAAA,CAAA,EACF,EACAuB,EAAAA,IAACnB,GAAqB,UAAU,2CAC9B,eAACwB,EACC,CAAA,SAAAL,EAAA,IAACM,EAAM,CAAA,CAAA,CACT,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-MODh5ysn.js","sources":["../../src/routes/plugins/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { pluginEntityType } from '@baseplate-dev/project-builder-lib';\nimport { useProjectDefinition } from '@baseplate-dev/project-builder-lib/web';\nimport {\n Button,\n NavigationMenu,\n NavigationMenuItem,\n NavigationMenuLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { notEmpty } from '@baseplate-dev/utils';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { MdAdd } from 'react-icons/md';\n\nimport { ErrorBoundary } from '#src/components/index.js';\n\nexport const Route = createFileRoute('/plugins')({\n component: PluginsLayout,\n beforeLoad: () => ({\n getTitle: () => 'Plugins',\n }),\n});\n\nfunction PluginsLayout(): React.JSX.Element {\n const { definition, schemaParserContext } = useProjectDefinition();\n\n const { availablePlugins } = schemaParserContext.pluginStore;\n\n const enabledPlugins = (definition.plugins ?? [])\n .map((plugin) => {\n const pluginWithMetadata = availablePlugins.find(\n (p) => p.metadata.id === pluginEntityType.keyFromId(plugin.id),\n );\n return pluginWithMetadata?.metadata;\n })\n .filter(notEmpty);\n\n return (\n <SidebarLayout className=\"flex-1\">\n <SidebarLayoutSidebar className=\"flex flex-col gap-4\" width=\"sm\">\n <Link to=\"/plugins\" from=\"/\">\n <Button variant=\"secondary\" className=\"w-full\" size=\"sm\">\n <MdAdd />\n Add new plugin\n </Button>\n </Link>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n {enabledPlugins.map((plugin) => (\n <NavigationMenuLink key={plugin.id} asChild>\n <Link\n to={`/plugins/edit/$id`}\n from=\"/\"\n params={{ id: plugin.id }}\n >\n {plugin.displayName}\n </Link>\n </NavigationMenuLink>\n ))}\n {enabledPlugins.length === 0 && (\n <NavigationMenuItem className=\"mt-4 w-full text-center opacity-80\">\n No plugins enabled\n </NavigationMenuItem>\n )}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"h-[calc(100vh-var(--topbar-height)-1px)]\">\n <ErrorBoundary>\n <Outlet />\n </ErrorBoundary>\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["pluginEntityType","importShared","useProjectDefinition","Button","NavigationMenu","NavigationMenuItem","NavigationMenuLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","SplitComponent","definition","schemaParserContext","availablePlugins","pluginStore","enabledPlugins","plugins","map","plugin","find","p","metadata","id","keyFromId","filter","notEmpty","jsxs","jsx","Link","MdAdd","displayName","length","ErrorBoundary","Outlet"],"mappings":"mNAEA,KAAA,CAAA,iBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,qBAAAC,CAAA,EAAA,MAAAD,EAAA,wCAAA,EACA,CAAA,OAAAE,EAAA,eAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAT,EAAA,8BAAA,EAcyDU,EAAA,UASb,CACpC,KAAA,CAAEC,WAAAA,EAAYC,oBAAAA,GAAwBX,EAAqB,EAE3D,CAAEY,iBAAAA,GAAqBD,EAAoBE,YAE3CC,GAAkBJ,EAAWK,SAAW,CAAA,GAC3CC,IAAgBC,GACYL,EAAiBM,KACnCC,GAAAA,EAAEC,SAASC,KAAOvB,EAAiBwB,UAAUL,EAAOI,EAAE,CAC/D,GAC2BD,QAC5B,EACAG,OAAOC,CAAQ,EAGhB,OAAAC,EAAA,KAACnB,EAAc,CAAA,UAAU,SACvB,SAAA,CAAAmB,EAAA,KAACjB,EAAqB,CAAA,UAAU,sBAAsB,MAAM,KAC1D,SAAA,CAAAkB,EAAA,IAACC,EAAK,CAAA,GAAG,WAAW,KAAK,IACvB,SAAAF,EAAAA,KAACxB,EAAO,CAAA,QAAQ,YAAY,UAAU,SAAS,KAAK,KAClD,SAAA,CAAAyB,EAAA,IAACE,EAAK,EAAA,EAAA,gBAAA,CAAA,CAER,CACF,CAAA,EACCF,MAAAxB,EAAA,CAAe,YAAY,WAC1B,gBAACG,EACES,CAAAA,SAAAA,CAAAA,EAAeE,IAAKC,GAClBS,EAAA,IAAAtB,EAAA,CAAmC,QAAO,GACzC,SAACsB,EAAAA,IAAAC,EAAA,CACC,GAAI,oBACJ,KAAK,IACL,OAAQ,CAAEN,GAAIJ,EAAOI,EAAAA,EAEpBJ,SAAOY,EAAAA,WAAAA,CACV,CAPuBZ,EAAAA,EAAOI,EAQhC,CACD,EACAP,EAAegB,SAAW,SACxB3B,EAAmB,CAAA,UAAU,qCAAoC,SAElE,oBAAA,CAAA,CAAA,CAAA,CAEJ,CACF,CAAA,CAAA,EACF,EACAuB,EAAAA,IAACnB,GAAqB,UAAU,2CAC9B,eAACwB,EACC,CAAA,SAAAL,EAAA,IAACM,EAAM,CAAA,CAAA,CACT,CAAA,CACF,CAAA,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as r}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{k as n,L as s,O as a}from"./index-VsI1zxbc.js";const{Alert:o,AlertDescription:l,AlertTitle:p,NavigationTabs:d,NavigationTabsItem:t}=await r("@baseplate-dev/ui-components"),x=function(){const{key:i}=n.useParams();return e.jsxs("div",{className:"p-4",children:[e.jsxs(o,{variant:"warning",className:"mb-4",children:[e.jsx(p,{children:"⚠️ Development Preview"}),e.jsx(l,{children:"The admin app functionality will likely be fully rewritten in future versions. This is provided for preview purposes only and should not be relied upon for production use."})]}),e.jsxs(d,{children:[e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin",from:"/",params:{key:i},activeOptions:{exact:!0},children:"General"})}),e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin/sections",params:{key:i},children:"Sections"})})]}),e.jsx("div",{className:"mt-4 border-t",children:e.jsx(a,{})})]})};export{x as component};
2
- //# sourceMappingURL=route-xrfcRWC7.js.map
1
+ import{i as r}from"./_virtual___federation_fn_import-CzwHXTRo.js";import{j as e}from"./index.esm-C6ngV5UE.js";import{k as n,L as s,O as a}from"./index-BMCloLL3.js";const{Alert:o,AlertDescription:l,AlertTitle:p,NavigationTabs:d,NavigationTabsItem:t}=await r("@baseplate-dev/ui-components"),x=function(){const{key:i}=n.useParams();return e.jsxs("div",{className:"p-4",children:[e.jsxs(o,{variant:"warning",className:"mb-4",children:[e.jsx(p,{children:"⚠️ Development Preview"}),e.jsx(l,{children:"The admin app functionality will likely be fully rewritten in future versions. This is provided for preview purposes only and should not be relied upon for production use."})]}),e.jsxs(d,{children:[e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin",from:"/",params:{key:i},activeOptions:{exact:!0},children:"General"})}),e.jsx(t,{asChild:!0,children:e.jsx(s,{to:"/apps/edit/$key/admin/sections",params:{key:i},children:"Sections"})})]}),e.jsx("div",{className:"mt-4 border-t",children:e.jsx(a,{})})]})};export{x as component};
2
+ //# sourceMappingURL=route-VW3n5-PC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-xrfcRWC7.js","sources":["../../src/routes/apps/edit.$key/admin/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n redirect,\n} from '@tanstack/react-router';\n\nexport const Route = createFileRoute('/apps/edit/$key/admin')({\n component: AdminAppEditLayout,\n beforeLoad: ({ context: { app }, params: { key } }) => {\n if (app?.type !== 'admin') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n return {\n adminDefinition: app,\n };\n },\n});\n\nfunction AdminAppEditLayout(): React.JSX.Element {\n const { key } = Route.useParams();\n return (\n <div className=\"p-4\">\n <Alert variant=\"warning\" className=\"mb-4\">\n <AlertTitle>⚠️ Development Preview</AlertTitle>\n <AlertDescription>\n The admin app functionality will likely be fully rewritten in future\n versions. This is provided for preview purposes only and should not be\n relied upon for production use.\n </AlertDescription>\n </Alert>\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/apps/edit/$key/admin\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n General\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/apps/edit/$key/admin/sections\" params={{ key }}>\n Sections\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n <div className=\"mt-4 border-t\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Alert","AlertDescription","AlertTitle","NavigationTabs","NavigationTabsItem","importShared","SplitComponent","key","Route","useParams","jsxs","jsx","Link","exact","Outlet"],"mappings":"oKAEA,KAAA,CAAA,MAAAA,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAYgCC,EAAA,UAciB,CACzC,KAAA,CAAEC,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAE9B,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAU,MACb,SAAA,CAAAA,EAAA,KAACV,EAAM,CAAA,QAAQ,UAAU,UAAU,OACjC,SAAA,CAAAW,EAAAA,IAACT,GAAW,SAAsB,wBAAA,CAAA,EAClCS,EAAAA,IAACV,GAAgB,SAIjB,6KAAA,CAAA,CAAA,EACF,SACCE,EACC,CAAA,SAAA,CAACQ,EAAAA,IAAAP,EAAA,CAAmB,QAAO,GACzB,SAAAO,EAAAA,IAACC,GACC,GAAG,wBACH,KAAK,IACL,OAAQ,CAAEL,IAAAA,GACV,cAAe,CAAEM,MAAO,EAAA,EAAO,kBAGjC,CAAA,EACF,EACAF,EAAAA,IAACP,GAAmB,QAAO,GACzB,eAACQ,EAAK,CAAA,GAAG,iCAAiC,OAAQ,CAAEL,IAAAA,CAAAA,EAAM,oBAE1D,CACF,CAAA,CAAA,EACF,QACC,MAAI,CAAA,UAAU,gBACb,SAAAI,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-VW3n5-PC.js","sources":["../../src/routes/apps/edit.$key/admin/route.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport {\n Alert,\n AlertDescription,\n AlertTitle,\n NavigationTabs,\n NavigationTabsItem,\n} from '@baseplate-dev/ui-components';\nimport {\n createFileRoute,\n Link,\n Outlet,\n redirect,\n} from '@tanstack/react-router';\n\nexport const Route = createFileRoute('/apps/edit/$key/admin')({\n component: AdminAppEditLayout,\n beforeLoad: ({ context: { app }, params: { key } }) => {\n if (app?.type !== 'admin') {\n throw redirect({ to: '/apps/edit/$key', params: { key } });\n }\n return {\n adminDefinition: app,\n };\n },\n});\n\nfunction AdminAppEditLayout(): React.JSX.Element {\n const { key } = Route.useParams();\n return (\n <div className=\"p-4\">\n <Alert variant=\"warning\" className=\"mb-4\">\n <AlertTitle>⚠️ Development Preview</AlertTitle>\n <AlertDescription>\n The admin app functionality will likely be fully rewritten in future\n versions. This is provided for preview purposes only and should not be\n relied upon for production use.\n </AlertDescription>\n </Alert>\n <NavigationTabs>\n <NavigationTabsItem asChild>\n <Link\n to=\"/apps/edit/$key/admin\"\n from=\"/\"\n params={{ key }}\n activeOptions={{ exact: true }}\n >\n General\n </Link>\n </NavigationTabsItem>\n <NavigationTabsItem asChild>\n <Link to=\"/apps/edit/$key/admin/sections\" params={{ key }}>\n Sections\n </Link>\n </NavigationTabsItem>\n </NavigationTabs>\n <div className=\"mt-4 border-t\">\n <Outlet />\n </div>\n </div>\n );\n}\n"],"names":["Alert","AlertDescription","AlertTitle","NavigationTabs","NavigationTabsItem","importShared","SplitComponent","key","Route","useParams","jsxs","jsx","Link","exact","Outlet"],"mappings":"oKAEA,KAAA,CAAA,MAAAA,EAAA,iBAAAC,EAAA,WAAAC,EAAA,eAAAC,EAAA,mBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAYgCC,EAAA,UAciB,CACzC,KAAA,CAAEC,IAAAA,CAAAA,EAAQC,EAAMC,UAAU,EAE9B,OAAAC,EAAA,KAAC,MAAI,CAAA,UAAU,MACb,SAAA,CAAAA,EAAA,KAACV,EAAM,CAAA,QAAQ,UAAU,UAAU,OACjC,SAAA,CAAAW,EAAAA,IAACT,GAAW,SAAsB,wBAAA,CAAA,EAClCS,EAAAA,IAACV,GAAgB,SAIjB,6KAAA,CAAA,CAAA,EACF,SACCE,EACC,CAAA,SAAA,CAACQ,EAAAA,IAAAP,EAAA,CAAmB,QAAO,GACzB,SAAAO,EAAAA,IAACC,GACC,GAAG,wBACH,KAAK,IACL,OAAQ,CAAEL,IAAAA,GACV,cAAe,CAAEM,MAAO,EAAA,EAAO,kBAGjC,CAAA,EACF,EACAF,EAAAA,IAACP,GAAmB,QAAO,GACzB,eAACQ,EAAK,CAAA,GAAG,iCAAiC,OAAQ,CAAEL,IAAAA,CAAAA,EAAM,oBAE1D,CACF,CAAA,CAAA,EACF,QACC,MAAI,CAAA,UAAU,gBACb,SAAAI,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as l}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{f as n,c as x,O as u,l as m}from"./index-VsI1zxbc.js";const{useProjectDefinition:f}=await l("@baseplate-dev/project-builder-lib/web"),{Button:s,Dialog:g,DialogClose:j,DialogContent:v,DialogFooter:D,DialogHeader:y,DialogTitle:b,DialogTrigger:w}=await l("@baseplate-dev/ui-components"),A=function(){const{saveDefinitionWithFeedbackSync:o,definition:r,isSavingDefinition:c}=f(),{app:a}=n.useLoaderData(),d=x({from:n.fullPath}),p=()=>{o(i=>{i.apps=i.apps.filter(h=>h.id!==a.id)},{successMessage:"Successfully unlinked app!",disableDeleteRefDialog:!0,onSuccess:()=>{d({to:"/apps"}).catch(m)}})},{packageScope:t}=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:t?`@${t}/${a.name}`:a.name}),e.jsxs("p",{className:"text-base text-muted-foreground",children:[a.type," app"]})]}),e.jsxs(g,{children:[e.jsx(w,{asChild:!0,children:e.jsx(s,{variant:"secondary",children:"Delete"})}),e.jsxs(v,{children:[e.jsx(y,{children:e.jsxs(b,{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(D,{children:[e.jsx(j,{children:e.jsx(s,{variant:"secondary",children:"Cancel"})}),e.jsx(s,{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(u,{})})]},a.id)};export{A as component};
2
- //# sourceMappingURL=route-D9aGR6_H.js.map
1
+ import{i as l}from"./_virtual___federation_fn_import-CzwHXTRo.js";import{j as e}from"./index.esm-C6ngV5UE.js";import{f as n,c as x,O as u,l as m}from"./index-BMCloLL3.js";const{useProjectDefinition:f}=await l("@baseplate-dev/project-builder-lib/web"),{Button:s,Dialog:g,DialogClose:j,DialogContent:v,DialogFooter:D,DialogHeader:y,DialogTitle:b,DialogTrigger:w}=await l("@baseplate-dev/ui-components"),A=function(){const{saveDefinitionWithFeedbackSync:o,definition:r,isSavingDefinition:c}=f(),{app:a}=n.useLoaderData(),d=x({from:n.fullPath}),p=()=>{o(i=>{i.apps=i.apps.filter(h=>h.id!==a.id)},{successMessage:"Successfully unlinked app!",disableDeleteRefDialog:!0,onSuccess:()=>{d({to:"/apps"}).catch(m)}})},{packageScope:t}=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:t?`@${t}/${a.name}`:a.name}),e.jsxs("p",{className:"text-base text-muted-foreground",children:[a.type," app"]})]}),e.jsxs(g,{children:[e.jsx(w,{asChild:!0,children:e.jsx(s,{variant:"secondary",children:"Delete"})}),e.jsxs(v,{children:[e.jsx(y,{children:e.jsxs(b,{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(D,{children:[e.jsx(j,{children:e.jsx(s,{variant:"secondary",children:"Cancel"})}),e.jsx(s,{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(u,{})})]},a.id)};export{A as component};
2
+ //# sourceMappingURL=route-rX4E9J5V.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-D9aGR6_H.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","SplitComponent","saveDefinitionWithFeedbackSync","definition","isSavingDefinition","app","Route","useLoaderData","navigate","useNavigate","from","fullPath","handleDelete","apps","filter","a","id","successMessage","disableDeleteRefDialog","onSuccess","to","catch","logAndFormatError","packageScope","settings","general","jsxs","jsx","name","type","Outlet"],"mappings":"2KAGA,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,EAiBqES,EAAA,UAuB3B,CAClC,KAAA,CAAEC,+BAAAA,EAAgCC,WAAAA,EAAYC,mBAAAA,GAClDb,EAAqB,EAEjB,CAAEc,IAAAA,CAAAA,EAAQC,EAAMC,cAAc,EAE9BC,EAAWC,EAAY,CAAEC,KAAMJ,EAAMK,QAAAA,CAAU,EAE/CC,EAAeA,IAAY,CAC/BV,EACGC,GAAe,CACdA,EAAWU,KAAOV,EAAWU,KAAKC,OAAcC,GAAAA,EAAEC,KAAOX,EAAIW,EAAE,CAAA,EAEjE,CACEC,eAAgB,6BAChBC,uBAAwB,GACxBC,UAAWA,IAAM,CACNX,EAAA,CAAEY,GAAI,OAAA,CAAS,EAAEC,MAAMC,CAAiB,CAAA,CACnD,CAEJ,CACF,EAEM,CAAEC,aAAAA,CAAAA,EAAiBpB,EAAWqB,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,IAAIlB,EAAIuB,IAAI,GAAKvB,EAAIuB,IAAK,CAAA,EAC9DF,EAAAA,KAAC,IAAE,CAAA,UAAU,kCAAmCrB,SAAAA,CAAIwB,EAAAA,KAAK,MAAA,CAAI,CAAA,CAAA,EAC/D,SACCnC,EACC,CAAA,SAAA,CAACiC,EAAAA,IAAA3B,EAAA,CAAc,QAAO,GACpB,SAAA2B,EAAA,IAAClC,GAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,SACCG,EACC,CAAA,SAAA,CAAC+B,EAAA,IAAA7B,EAAA,CACC,gBAACC,EAAY,CAAA,SAAA,CAAA,UAAQM,EAAIuB,IAAAA,CAAAA,CAAK,CAChC,CAAA,SACC,IAAC,CAAA,SAAA,CAAA,mCACgCD,EAAAA,IAAC,SAAQtB,CAAAA,SAAAA,EAAIuB,IAAK,CAAA,EAAS,GAAA,EAC7D,EACCD,EAAA,IAAA,IAAA,CAAE,UAAU,mBAAkB,SAK/B,sPAAA,SAEC9B,EACC,CAAA,SAAA,CAAA8B,EAAAA,IAAChC,GACC,SAACgC,EAAA,IAAAlC,EAAA,CAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,EACAkC,EAAAA,IAAClC,GACC,QAAQ,cACR,QAASmB,EACT,SAAUR,EAAmB,SAG/B,YAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CACF,CAAA,EACCuB,EAAAA,IAAA,MAAA,CACC,UAAU,uDACV,MACE,CACE,sBAAuB,MACzB,EAGF,SAACA,EAAAA,IAAAG,EAAA,CAAM,CAAA,CACT,CAAA,CAAA,CAAA,EAnDKzB,EAAIW,EAoDX,CAEJ"}
1
+ {"version":3,"file":"route-rX4E9J5V.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","SplitComponent","saveDefinitionWithFeedbackSync","definition","isSavingDefinition","app","Route","useLoaderData","navigate","useNavigate","from","fullPath","handleDelete","apps","filter","a","id","successMessage","disableDeleteRefDialog","onSuccess","to","catch","logAndFormatError","packageScope","settings","general","jsxs","jsx","name","type","Outlet"],"mappings":"2KAGA,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,EAiBqES,EAAA,UAuB3B,CAClC,KAAA,CAAEC,+BAAAA,EAAgCC,WAAAA,EAAYC,mBAAAA,GAClDb,EAAqB,EAEjB,CAAEc,IAAAA,CAAAA,EAAQC,EAAMC,cAAc,EAE9BC,EAAWC,EAAY,CAAEC,KAAMJ,EAAMK,QAAAA,CAAU,EAE/CC,EAAeA,IAAY,CAC/BV,EACGC,GAAe,CACdA,EAAWU,KAAOV,EAAWU,KAAKC,OAAcC,GAAAA,EAAEC,KAAOX,EAAIW,EAAE,CAAA,EAEjE,CACEC,eAAgB,6BAChBC,uBAAwB,GACxBC,UAAWA,IAAM,CACNX,EAAA,CAAEY,GAAI,OAAA,CAAS,EAAEC,MAAMC,CAAiB,CAAA,CACnD,CAEJ,CACF,EAEM,CAAEC,aAAAA,CAAAA,EAAiBpB,EAAWqB,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,IAAIlB,EAAIuB,IAAI,GAAKvB,EAAIuB,IAAK,CAAA,EAC9DF,EAAAA,KAAC,IAAE,CAAA,UAAU,kCAAmCrB,SAAAA,CAAIwB,EAAAA,KAAK,MAAA,CAAI,CAAA,CAAA,EAC/D,SACCnC,EACC,CAAA,SAAA,CAACiC,EAAAA,IAAA3B,EAAA,CAAc,QAAO,GACpB,SAAA2B,EAAA,IAAClC,GAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,SACCG,EACC,CAAA,SAAA,CAAC+B,EAAA,IAAA7B,EAAA,CACC,gBAACC,EAAY,CAAA,SAAA,CAAA,UAAQM,EAAIuB,IAAAA,CAAAA,CAAK,CAChC,CAAA,SACC,IAAC,CAAA,SAAA,CAAA,mCACgCD,EAAAA,IAAC,SAAQtB,CAAAA,SAAAA,EAAIuB,IAAK,CAAA,EAAS,GAAA,EAC7D,EACCD,EAAA,IAAA,IAAA,CAAE,UAAU,mBAAkB,SAK/B,sPAAA,SAEC9B,EACC,CAAA,SAAA,CAAA8B,EAAAA,IAAChC,GACC,SAACgC,EAAA,IAAAlC,EAAA,CAAO,QAAQ,YAAY,kBAAM,CACpC,CAAA,EACAkC,EAAAA,IAAClC,GACC,QAAQ,cACR,QAASmB,EACT,SAAUR,EAAmB,SAG/B,YAAA,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,CACF,CACF,CAAA,EACCuB,EAAAA,IAAA,MAAA,CACC,UAAU,uDACV,MACE,CACE,sBAAuB,MACzB,EAGF,SAACA,EAAAA,IAAAG,EAAA,CAAM,CAAA,CACT,CAAA,CAAA,CAAA,EAnDKzB,EAAIW,EAoDX,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as s}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{E as r,L as t,O as a}from"./index-VsI1zxbc.js";const{NavigationMenu:n,NavigationMenuLink:i,NavigationMenuList:o,SidebarLayout:l,SidebarLayoutContent:c,SidebarLayoutSidebar:d}=await s("@baseplate-dev/ui-components"),j=function(){return e.jsxs(l,{className:"h-full flex-1",children:[e.jsx(d,{className:"space-y-4",width:"sm",children:e.jsx(n,{orientation:"vertical",children:e.jsxs(o,{children:[e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings",from:"/",children:"Project settings"})}),e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/hierarchy",from:"/",children:"Hierarchy"})}),e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/theme-builder",from:"/",children:"Theme builder"})}),r&&e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/template-extractor",from:"/",children:"Template extractor"})})]})})}),e.jsx(c,{className:"h-full",children:e.jsx(a,{})})]})};export{j as component};
2
- //# sourceMappingURL=route-C0DpSC86.js.map
1
+ import{i as s}from"./_virtual___federation_fn_import-CzwHXTRo.js";import{j as e}from"./index.esm-C6ngV5UE.js";import{E as r,L as t,O as a}from"./index-BMCloLL3.js";const{NavigationMenu:n,NavigationMenuLink:i,NavigationMenuList:o,SidebarLayout:l,SidebarLayoutContent:c,SidebarLayoutSidebar:d}=await s("@baseplate-dev/ui-components"),j=function(){return e.jsxs(l,{className:"h-full flex-1",children:[e.jsx(d,{className:"space-y-4",width:"sm",children:e.jsx(n,{orientation:"vertical",children:e.jsxs(o,{children:[e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings",from:"/",children:"Project settings"})}),e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/hierarchy",from:"/",children:"Hierarchy"})}),e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/theme-builder",from:"/",children:"Theme builder"})}),r&&e.jsx(i,{asChild:!0,children:e.jsx(t,{to:"/settings/template-extractor",from:"/",children:"Template extractor"})})]})})}),e.jsx(c,{className:"h-full",children:e.jsx(a,{})})]})};export{j as component};
2
+ //# sourceMappingURL=route-sqtj7nCf.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-C0DpSC86.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`} from=\"/\">\n Project settings\n </Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/hierarchy`} from=\"/\">\n Hierarchy\n </Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/theme-builder`} from=\"/\">\n Theme builder\n </Link>\n </NavigationMenuLink>\n {ENABLE_TEMPLATE_EXTRACTOR && (\n <NavigationMenuLink asChild>\n <Link to={`/settings/template-extractor`} from=\"/\">\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","SplitComponent","jsxs","jsx","Link","ENABLE_TEMPLATE_EXTRACTOR","Outlet"],"mappings":"oKAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAUoEC,EAAA,UASvB,CAEzC,OAAAC,EAAA,KAACL,EAAc,CAAA,UAAU,gBACvB,SAAA,CAACM,EAAA,IAAAJ,EAAA,CAAqB,UAAU,YAAY,MAAM,KAChD,eAACL,EAAe,CAAA,YAAY,WAC1B,SAAAQ,EAAAA,KAACN,EACC,CAAA,SAAA,CAACO,EAAA,IAAAR,EAAA,CAAmB,QAAO,GACzB,SAACQ,EAAA,IAAAC,EAAA,CAAK,GAAI,YAAa,KAAK,IAAG,SAAA,kBAE/B,CAAA,EACF,EACAD,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,EAAA,IAACC,EAAK,CAAA,GAAI,sBAAuB,KAAK,IAAG,SAAA,WAEzC,CAAA,EACF,EACAD,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,EAAA,IAACC,EAAK,CAAA,GAAI,0BAA2B,KAAK,IAAG,SAAA,eAE7C,CAAA,EACF,EACCC,GACCF,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,MAACC,EAAK,CAAA,GAAI,+BAAgC,KAAK,IAAG,SAAA,oBAAA,CAElD,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,EACF,QACCN,EAAqB,CAAA,UAAU,SAC9B,SAAAK,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"route-sqtj7nCf.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`} from=\"/\">\n Project settings\n </Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/hierarchy`} from=\"/\">\n Hierarchy\n </Link>\n </NavigationMenuLink>\n <NavigationMenuLink asChild>\n <Link to={`/settings/theme-builder`} from=\"/\">\n Theme builder\n </Link>\n </NavigationMenuLink>\n {ENABLE_TEMPLATE_EXTRACTOR && (\n <NavigationMenuLink asChild>\n <Link to={`/settings/template-extractor`} from=\"/\">\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","SplitComponent","jsxs","jsx","Link","ENABLE_TEMPLATE_EXTRACTOR","Outlet"],"mappings":"oKAEA,KAAA,CAAA,eAAAA,EAAA,mBAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAC,EAAA,8BAAA,EAUoEC,EAAA,UASvB,CAEzC,OAAAC,EAAA,KAACL,EAAc,CAAA,UAAU,gBACvB,SAAA,CAACM,EAAA,IAAAJ,EAAA,CAAqB,UAAU,YAAY,MAAM,KAChD,eAACL,EAAe,CAAA,YAAY,WAC1B,SAAAQ,EAAAA,KAACN,EACC,CAAA,SAAA,CAACO,EAAA,IAAAR,EAAA,CAAmB,QAAO,GACzB,SAACQ,EAAA,IAAAC,EAAA,CAAK,GAAI,YAAa,KAAK,IAAG,SAAA,kBAE/B,CAAA,EACF,EACAD,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,EAAA,IAACC,EAAK,CAAA,GAAI,sBAAuB,KAAK,IAAG,SAAA,WAEzC,CAAA,EACF,EACAD,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,EAAA,IAACC,EAAK,CAAA,GAAI,0BAA2B,KAAK,IAAG,SAAA,eAE7C,CAAA,EACF,EACCC,GACCF,EAAA,IAACR,EAAmB,CAAA,QAAO,GACzB,SAAAQ,MAACC,EAAK,CAAA,GAAI,+BAAgC,KAAK,IAAG,SAAA,oBAAA,CAElD,CACF,CAAA,CAAA,CAEJ,CAAA,CACF,CAAA,EACF,QACCN,EAAqB,CAAA,UAAU,SAC9B,SAAAK,EAAA,IAACG,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as o}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e}from"./index.esm-CGbP6mNa.js";import{y as s,L as n,O as m,r as l}from"./index-VsI1zxbc.js";import{s as p}from"./immer-xieDw-3D.js";const{adminSectionEntityType:r}=await o("@baseplate-dev/project-builder-lib"),{NavigationMenu:y,NavigationMenuItemWithLink:a,NavigationMenuList:x,SidebarLayout:h,SidebarLayoutContent:u,SidebarLayoutSidebar:j}=await o("@baseplate-dev/ui-components");l(r,"/apps/edit/{parentKey}/sections/edit/{key}");const v=function(){const{adminDefinition:c}=s.useRouteContext(),{key:t}=s.useParams(),d=p(c.sections??[],[i=>i.name]);return e.jsxs(h,{children:[e.jsxs(j,{className:"space-y-4",width:"sm",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("h2",{children:"Sections"})}),e.jsx(y,{orientation:"vertical",children:e.jsxs(x,{children:[e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:"new"},className:"text-green-500",children:"New Section"})})}),d.map(i=>e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:r.keyFromId(i.id)},children:i.name})})},i.id))]})})]}),e.jsx(u,{className:"p-4",children:e.jsx(m,{})})]})};export{v as component};
2
- //# sourceMappingURL=sections-Bl6CBMqu.js.map
1
+ import{i as o}from"./_virtual___federation_fn_import-CzwHXTRo.js";import{j as e}from"./index.esm-C6ngV5UE.js";import{y as s,L as n,O as m,r as l}from"./index-BMCloLL3.js";import{s as p}from"./immer-xieDw-3D.js";const{adminSectionEntityType:r}=await o("@baseplate-dev/project-builder-lib"),{NavigationMenu:y,NavigationMenuItemWithLink:a,NavigationMenuList:x,SidebarLayout:h,SidebarLayoutContent:u,SidebarLayoutSidebar:j}=await o("@baseplate-dev/ui-components");l(r,"/apps/edit/{parentKey}/sections/edit/{key}");const v=function(){const{adminDefinition:c}=s.useRouteContext(),{key:t}=s.useParams(),d=p(c.sections??[],[i=>i.name]);return e.jsxs(h,{children:[e.jsxs(j,{className:"space-y-4",width:"sm",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsx("h2",{children:"Sections"})}),e.jsx(y,{orientation:"vertical",children:e.jsxs(x,{children:[e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:"new"},className:"text-green-500",children:"New Section"})})}),d.map(i=>e.jsx("li",{children:e.jsx(a,{asChild:!0,children:e.jsx(n,{to:"/apps/edit/$key/admin/sections/$sectionKey",from:"/",params:{key:t,sectionKey:r.keyFromId(i.id)},children:i.name})})},i.id))]})})]}),e.jsx(u,{className:"p-4",children:e.jsx(m,{})})]})};export{v as component};
2
+ //# sourceMappingURL=sections-D48VzvlO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sections-Bl6CBMqu.js","sources":["../../src/routes/apps/edit.$key/admin/sections.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { adminSectionEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\n\nimport { registerEntityTypeUrl } from '#src/services/entity-type.js';\n\nregisterEntityTypeUrl(\n adminSectionEntityType,\n `/apps/edit/{parentKey}/sections/edit/{key}`,\n);\n\nexport const Route = createFileRoute('/apps/edit/$key/admin/sections')({\n component: AdminAppEditSectionsPage,\n});\n\nfunction AdminAppEditSectionsPage(): React.JSX.Element {\n const { adminDefinition } = Route.useRouteContext();\n const { key } = Route.useParams();\n const sortedSections = sortBy(adminDefinition.sections ?? [], [\n (section) => section.name,\n ]);\n\n return (\n <SidebarLayout>\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <div className=\"flex items-center justify-between\">\n <h2>Sections</h2>\n </div>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n <li>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: 'new',\n }}\n className=\"text-green-500\"\n >\n New Section\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n {sortedSections.map((section) => (\n <li key={section.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: adminSectionEntityType.keyFromId(section.id),\n }}\n >\n {section.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"p-4\">\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["adminSectionEntityType","importShared","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","registerEntityTypeUrl","SplitComponent","adminDefinition","Route","useRouteContext","key","useParams","sortedSections","sortBy","sections","section","name","jsxs","jsx","Link","sectionKey","map","keyFromId","id","Outlet"],"mappings":"mNAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAN,EAAA,8BAAA,EAaAO,EACER,EACA,4CACF,EAAES,MAAAA,EAAA,UAMqD,CAC/C,KAAA,CAAEC,gBAAAA,CAAAA,EAAoBC,EAAMC,gBAAgB,EAC5C,CAAEC,IAAAA,CAAAA,EAAQF,EAAMG,UAAU,EAC1BC,EAAiBC,EAAON,EAAgBO,UAAY,GAAI,CAC3DC,GAAYA,EAAQC,IAAI,CAC1B,EAED,cACGd,EACC,CAAA,SAAA,CAAAe,EAAA,KAACb,EAAqB,CAAA,UAAU,YAAY,MAAM,KAChD,SAAA,CAAAc,EAAAA,IAAC,OAAI,UAAU,oCACb,SAACA,MAAA,KAAA,CAAG,oBAAQ,CACd,CAAA,EACCA,MAAAnB,EAAA,CAAe,YAAY,WAC1B,gBAACE,EACC,CAAA,SAAA,CAACiB,EAAA,IAAA,KAAA,CACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,SAACkB,EAAA,IAAAC,EAAA,CACC,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAY,KAAA,EAEd,UAAU,iBAAgB,SAAA,aAG5B,CAAA,CACF,CAAA,EACF,EACCR,EAAeS,IACdN,GAAAG,EAAAA,IAAC,MACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,eAACmB,EACC,CAAA,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAYvB,EAAuByB,UAAUP,EAAQQ,EAAE,CAAA,EAGxDR,SAAQC,EAAAA,IAAAA,CACX,EACF,CAZOD,EAAAA,EAAQQ,EAajB,CACD,CAAA,CAAA,CACH,CACF,CAAA,CAAA,EACF,QACCpB,EAAqB,CAAA,UAAU,MAC9B,SAAAe,EAAA,IAACM,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
1
+ {"version":3,"file":"sections-D48VzvlO.js","sources":["../../src/routes/apps/edit.$key/admin/sections.tsx?tsr-split=component"],"sourcesContent":["import type React from 'react';\n\nimport { adminSectionEntityType } from '@baseplate-dev/project-builder-lib';\nimport {\n NavigationMenu,\n NavigationMenuItemWithLink,\n NavigationMenuList,\n SidebarLayout,\n SidebarLayoutContent,\n SidebarLayoutSidebar,\n} from '@baseplate-dev/ui-components';\nimport { createFileRoute, Link, Outlet } from '@tanstack/react-router';\nimport { sortBy } from 'es-toolkit';\n\nimport { registerEntityTypeUrl } from '#src/services/entity-type.js';\n\nregisterEntityTypeUrl(\n adminSectionEntityType,\n `/apps/edit/{parentKey}/sections/edit/{key}`,\n);\n\nexport const Route = createFileRoute('/apps/edit/$key/admin/sections')({\n component: AdminAppEditSectionsPage,\n});\n\nfunction AdminAppEditSectionsPage(): React.JSX.Element {\n const { adminDefinition } = Route.useRouteContext();\n const { key } = Route.useParams();\n const sortedSections = sortBy(adminDefinition.sections ?? [], [\n (section) => section.name,\n ]);\n\n return (\n <SidebarLayout>\n <SidebarLayoutSidebar className=\"space-y-4\" width=\"sm\">\n <div className=\"flex items-center justify-between\">\n <h2>Sections</h2>\n </div>\n <NavigationMenu orientation=\"vertical\">\n <NavigationMenuList>\n <li>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: 'new',\n }}\n className=\"text-green-500\"\n >\n New Section\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n {sortedSections.map((section) => (\n <li key={section.id}>\n <NavigationMenuItemWithLink asChild>\n <Link\n to=\"/apps/edit/$key/admin/sections/$sectionKey\"\n from=\"/\"\n params={{\n key,\n sectionKey: adminSectionEntityType.keyFromId(section.id),\n }}\n >\n {section.name}\n </Link>\n </NavigationMenuItemWithLink>\n </li>\n ))}\n </NavigationMenuList>\n </NavigationMenu>\n </SidebarLayoutSidebar>\n <SidebarLayoutContent className=\"p-4\">\n <Outlet />\n </SidebarLayoutContent>\n </SidebarLayout>\n );\n}\n"],"names":["adminSectionEntityType","importShared","NavigationMenu","NavigationMenuItemWithLink","NavigationMenuList","SidebarLayout","SidebarLayoutContent","SidebarLayoutSidebar","registerEntityTypeUrl","SplitComponent","adminDefinition","Route","useRouteContext","key","useParams","sortedSections","sortBy","sections","section","name","jsxs","jsx","Link","sectionKey","map","keyFromId","id","Outlet"],"mappings":"mNAEA,KAAA,CAAA,uBAAAA,CAAA,EAAA,MAAAC,EAAA,oCAAA,EACA,CAAA,eAAAC,EAAA,2BAAAC,EAAA,mBAAAC,EAAA,cAAAC,EAAA,qBAAAC,EAAA,qBAAAC,CAAA,EAAA,MAAAN,EAAA,8BAAA,EAaAO,EACER,EACA,4CACF,EAAES,MAAAA,EAAA,UAMqD,CAC/C,KAAA,CAAEC,gBAAAA,CAAAA,EAAoBC,EAAMC,gBAAgB,EAC5C,CAAEC,IAAAA,CAAAA,EAAQF,EAAMG,UAAU,EAC1BC,EAAiBC,EAAON,EAAgBO,UAAY,GAAI,CAC3DC,GAAYA,EAAQC,IAAI,CAC1B,EAED,cACGd,EACC,CAAA,SAAA,CAAAe,EAAA,KAACb,EAAqB,CAAA,UAAU,YAAY,MAAM,KAChD,SAAA,CAAAc,EAAAA,IAAC,OAAI,UAAU,oCACb,SAACA,MAAA,KAAA,CAAG,oBAAQ,CACd,CAAA,EACCA,MAAAnB,EAAA,CAAe,YAAY,WAC1B,gBAACE,EACC,CAAA,SAAA,CAACiB,EAAA,IAAA,KAAA,CACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,SAACkB,EAAA,IAAAC,EAAA,CACC,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAY,KAAA,EAEd,UAAU,iBAAgB,SAAA,aAG5B,CAAA,CACF,CAAA,EACF,EACCR,EAAeS,IACdN,GAAAG,EAAAA,IAAC,MACC,SAACA,EAAA,IAAAlB,EAAA,CAA2B,QAAO,GACjC,eAACmB,EACC,CAAA,GAAG,6CACH,KAAK,IACL,OAAQ,CACNT,IAAAA,EACAU,WAAYvB,EAAuByB,UAAUP,EAAQQ,EAAE,CAAA,EAGxDR,SAAQC,EAAAA,IAAAA,CACX,EACF,CAZOD,EAAAA,EAAQQ,EAajB,CACD,CAAA,CAAA,CACH,CACF,CAAA,CAAA,EACF,QACCpB,EAAqB,CAAA,UAAU,MAC9B,SAAAe,EAAA,IAACM,IAAM,CACT,CAAA,CAAA,EACF,CAEJ"}
@@ -1,2 +1,2 @@
1
- import{i as r}from"./_virtual___federation_fn_import-BllbkH3T.js";import{j as e,f as U,e as v,b as Q}from"./index.esm-CGbP6mNa.js";import{C as _,s as z,l as X,z as Z,A as N,c as ee}from"./index-VsI1zxbc.js";import{c as E}from"./index-MPyZaAGd.js";import{s as ne}from"./immer-xieDw-3D.js";const{ModelUtils:oe}=await r("@baseplate-dev/project-builder-lib"),{createAdminCrudInputWebConfig:le,useProjectDefinition:te}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:A}=await r("@baseplate-dev/ui-components");function ie({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definition:a}=te(),l=oe.getRelationsToModel(a,i.id).map(c=>({label:`${c.relation.foreignRelationName} (${c.model.name})`,value:c.relation.foreignId})),n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(A,{label:"Relation Name",control:s,name:`${n}.modelRelationRef`,options:l}),e.jsx(A,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ae=le({name:"embedded",pluginId:void 0,label:"Embedded",getNewInput:()=>({label:"",type:"embedded",modelRelationRef:"",embeddedFormRef:""}),Form:ie}),{createAdminCrudInputWebConfig:se,useProjectDefinition:de}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:O}=await r("@baseplate-dev/ui-components");function re({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definitionContainer:a}=de(),l=i.model.relations?.map(c=>({label:`${c.name} (${a.nameFromId(c.modelRef)})`,value:c.id}))??[],n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(O,{label:"Relation Name",control:s,name:`${n}.localRelationRef`,options:l}),e.jsx(O,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ce=se({name:"embeddedLocal",pluginId:void 0,label:"Embedded Local",getNewInput:()=>({label:"",type:"embeddedLocal",embeddedFormRef:"",localRelationRef:""}),Form:re}),{createAdminCrudInputWebConfig:me}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:pe}=await r("@baseplate-dev/ui-components");function ue({formProps:t,name:o,model:i}){const d=i.model.fields.filter(n=>n.type==="enum").map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsx(pe,{label:"Enum Field",control:l,name:`${a}.modelFieldRef`,options:d})}const be=me({name:"enum",pluginId:void 0,label:"Enum",getNewInput:()=>({label:"",type:"enum",modelFieldRef:""}),Form:ue}),{createAdminCrudInputWebConfig:fe,useProjectDefinition:je}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:y,SelectFieldController:Ce}=await r("@baseplate-dev/ui-components");function xe({formProps:t,name:o,model:i}){const{definitionContainer:d}=je(),a=i.model.relations?.map(s=>({label:`${s.name} (${d.nameFromId(s.modelRef)})`,value:s.id}))??[],l=o,n=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(Ce,{label:"Local Relation Name",control:n,name:`${l}.localRelationRef`,options:a}),e.jsx(y,{label:"Label Expression (e.g. name)",control:n,name:`${l}.labelExpression`}),e.jsx(y,{label:"Value Expression (e.g. id)",control:n,name:`${l}.valueExpression`}),e.jsx(y,{label:"Default Label (optional)",control:n,name:`${l}.defaultLabel`}),e.jsx(y,{label:"Empty Label (optional) - only if field is nullable",control:n,name:`${l}.nullLabel`})]})}const Fe=fe({name:"foreign",pluginId:void 0,label:"Foreign",getNewInput:()=>({label:"",type:"foreign",localRelationRef:"",labelExpression:"",valueExpression:"",defaultLabel:"",nullLabel:""}),Form:xe}),{createAdminCrudInputWebConfig:ve}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:ye,SelectFieldController:he}=await r("@baseplate-dev/ui-components");function Ie({formProps:t,name:o,model:i}){const d=i.model.fields.map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(he,{label:"Field",control:l,name:`${a}.modelFieldRef`,options:d}),e.jsx(ye,{label:"Validation (zod), e.g. z.string().min(1) (optional)",control:l,name:`${a}.validation`})]})}const ge=ve({name:"text",pluginId:void 0,label:"Text",getNewInput:()=>({label:"",type:"text",modelFieldRef:""}),Form:Ie}),W=[ae,ce,be,Fe,ge],{ModelUtils:$e}=await r("@baseplate-dev/project-builder-lib"),{adminCrudInputWebSpec:we,useProjectDefinition:Re}=await r("@baseplate-dev/project-builder-lib/web"),{Button:Se,InputFieldController:Ee,SelectFieldController:Te}=await r("@baseplate-dev/ui-components");function De({idx:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,a=v({control:d,name:"modelRef"}),{definition:l,pluginContainer:n}=Re(),s=a?$e.byIdOrThrow(l,a):void 0,c=n.getPluginSpec(we),u=c.getInputWebConfigs(W).map(f=>({label:f.label,value:f.name})),b=v({control:d,name:`form.fields.${t}.type`}),m=c.getInputWebConfig(b,W),p=m.Form;return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Te,{label:"Type",control:d,options:u,name:`form.fields.${t}.type`}),e.jsx(Ee,{label:"Label",control:d,name:`form.fields.${t}.label`}),p&&s&&e.jsx(p,{formProps:o,name:`form.fields.${t}`,model:s,embeddedFormOptions:i,pluginId:m.pluginId})]})}function V({className:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,{fields:a,append:l,remove:n}=U({control:d,name:"form.fields"});return e.jsxs("div",{className:E("space-y-4",t),children:[a.map((s,c)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[s.label," (",s.type,")"]}),onRemove:()=>{n(c)},defaultOpen:!s.label,children:e.jsx(De,{idx:c,formProps:o,embeddedFormOptions:i},s.id)},s.id)),e.jsx(Se,{onClick:()=>{l({type:"text",label:""})},children:"Add Field"})]})}const{adminCrudDisplayTypes:Ne,ModelUtils:Ae}=await r("@baseplate-dev/project-builder-lib"),{useProjectDefinition:Oe}=await r("@baseplate-dev/project-builder-lib/web"),{Button:We,InputFieldController:w,SelectFieldController:R}=await r("@baseplate-dev/ui-components");function Le({idx:t,control:o,fieldOptions:i,localRelationOptions:d}){const a=Ne.map(n=>({label:n,value:n})),l=v({control:o,name:`table.columns.${t}.display.type`});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(R,{label:"Type",control:o,options:a,name:`table.columns.${t}.display.type`}),e.jsx(w,{label:"Label",control:o,name:`table.columns.${t}.label`}),l==="text"&&e.jsx(R,{label:"Field",control:o,name:`table.columns.${t}.display.modelFieldRef`,options:i}),l==="foreign"&&e.jsxs(e.Fragment,{children:[e.jsx(R,{label:"Local Relation Name",control:o,name:`table.columns.${t}.display.localRelationRef`,options:d}),e.jsx(w,{label:"Label Expression (e.g. name)",control:o,name:`table.columns.${t}.display.labelExpression`}),e.jsx(w,{label:"Value Expression (e.g. id)",control:o,name:`table.columns.${t}.display.valueExpression`})]})]})}function H({className:t,control:o}){const i=v({control:o,name:"modelRef"}),{definition:d,definitionContainer:a}=Oe(),l=i?Ae.byIdOrThrow(d,i):void 0,{fields:n,append:s,remove:c}=U({control:o,name:"table.columns"}),u=l?.model.relations?.map(m=>({label:`${m.name} (${a.nameFromId(m.modelRef)})`,value:m.id}))??[],b=l?.model.fields.map(m=>({label:m.name,value:m.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[n.map((m,p)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[m.label," (",m.display.type,")"]}),onRemove:()=>{c(p)},defaultOpen:!m.label,children:e.jsx(Le,{idx:p,control:o,fieldOptions:b,localRelationOptions:u},m.id)},m.id)),e.jsx(We,{onClick:()=>{s({display:{type:"text",modelFieldRef:""},label:""})},children:"Add Column"})]})}const{createAdminCrudEmbeddedFormSchema:Pe}=await r("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:ke,useProjectDefinition:K}=await r("@baseplate-dev/project-builder-lib/web"),{Button:S,CheckboxFieldController:Be,InputFieldController:Me,SelectFieldController:L,Table:Ue,TableBody:_e,TableCell:h,TableHead:I,TableHeader:ze,TableRow:P,toast:Ve}=await r("@baseplate-dev/ui-components"),{useId:He}=await r("react");function Ke({items:t,edit:o,remove:i}){const{definitionContainer:d}=K();return e.jsxs(Ue,{className:"max-w-6xl",children:[e.jsx(ze,{children:e.jsxs(P,{children:[e.jsx(I,{children:"Form Name"}),e.jsx(I,{children:"Model Name"}),e.jsx(I,{children:"Type"}),e.jsx(I,{children:"Actions"})]})}),e.jsx(_e,{children:t.map((a,l)=>e.jsxs(P,{children:[e.jsx(h,{children:a.name}),e.jsx(h,{children:d.nameFromId(a.modelRef)}),e.jsx(h,{children:a.type}),e.jsxs(h,{className:"space-x-4",children:[e.jsx(S,{variant:"link",size:"none",onClick:()=>{o(l)},children:"Edit"}),e.jsx(S,{variant:"linkDestructive",size:"none",onClick:()=>{i(l)},children:"Remove"})]})]},a.id))})]})}const qe=[{label:"Object",value:"object"},{label:"List",value:"list"}];function Ge({initialData:t,onSubmit:o,embeddedFormOptions:i}){const{definition:d}=K(),a=ke(Pe),l=Q({resolver:z(a),defaultValues:t}),{handleSubmit:n,control:s,watch:c}=l,u=d.models.map(p=>({label:p.name,value:p.id})),b=c("type"),m=He();return e.jsxs("form",{onSubmit:p=>{p.stopPropagation(),n(o)(p).catch(f=>{Ve.error(X(f))})},id:m,className:"space-y-4",children:[e.jsx(Me,{label:"Name",control:s,name:"name"}),e.jsx(L,{label:"Type",control:s,name:"type",options:qe}),e.jsx(Be,{label:"Include ID Field? (useful for list types)",control:s,name:"includeIdField"}),e.jsx(L,{label:"Model",control:s,options:u,name:"modelRef"}),b==="list"&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:"Table"}),e.jsx(H,{control:s})]}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:l,embeddedFormOptions:i}),e.jsx(S,{type:"submit",form:m,children:"Save"})]})}const{useProjectDefinition:Ye}=await r("@baseplate-dev/project-builder-lib/web"),{CheckboxFieldController:Je,SelectFieldController:Qe}=await r("@baseplate-dev/ui-components");function Xe({className:t,formProps:o}){const{control:i}=o,{definition:d}=Ye(),a=d.models.map(n=>({label:n.name,value:n.id})),l=v({control:i,name:"embeddedForms"})?.map(n=>({label:n.name,value:n.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[e.jsx(Qe,{label:"Model",control:i,options:a,name:"modelRef"}),e.jsx(Je,{label:"Disable Create?",control:i,name:"disableCreate"}),e.jsx("h2",{children:"Table"}),e.jsx(H,{control:i}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:o,embeddedFormOptions:l}),e.jsx("h2",{children:"Embedded Forms"}),e.jsx(Z.LabelledController,{control:i,name:"embeddedForms",renderForm:n=>e.jsx(Ge,{...n,embeddedFormOptions:l}),renderTable:n=>e.jsx(Ke,{...n}),defaultValue:{type:"object"}})]})}const{adminSectionEntityType:k,createAdminSectionSchema:Ze}=await r("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:en,useDefinitionSchema:nn,useProjectDefinition:on,useResettableForm:ln}=await r("@baseplate-dev/project-builder-lib/web"),{Button:B,ComboboxFieldController:tn,InputFieldController:M,SelectFieldController:an,useConfirmDialog:sn}=await r("@baseplate-dev/ui-components"),{useEffect:dn}=await r("react"),rn=[{label:"Crud",value:"crud"}],fn=function(){const{requestConfirm:o}=sn(),{key:i}=N.useParams(),{saveDefinitionWithFeedback:d,saveDefinitionWithFeedbackSync:a,isSavingDefinition:l,definition:n}=on(),s=ee(),{adminDefinition:c,sectionId:u,existingSection:b}=N.useLoaderData(),m=nn(Ze),p=ln({values:b,defaultValues:{type:"crud"},resolver:z(m)}),{control:f,handleSubmit:q,watch:G,reset:g}=p;dn(()=>{g(b??{type:"crud"})},[g,b]);const T=q(j=>{const C=j.id||k.generateNewId();return d(x=>{const $=x.apps.find(F=>F.id===c.id);if($?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");$.sections=ne([...($.sections??[]).filter(F=>!u||F.id!==u),{...j,id:C}],[F=>F.name])},{onSuccess:()=>{u||s({to:"/apps/edit/$key/admin/sections/$sectionKey",params:{key:i,sectionKey:k.keyFromId(C)}})}})});en({control:f,reset:g,onSubmit:T});const D=G("type");function Y(){o({title:"Delete Section",content:`Are you sure you want to delete ${b?.name??"this section"}?`,onConfirm:()=>{a(j=>{const C=j.apps.find(x=>x.id===c.id);if(C?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");C.sections=(C.sections??[]).filter(x=>!u||x.id!==u)},{successMessage:"Successfully deleted section!",onSuccess:()=>{s({to:".."})}})}})}const J=n.features.map(j=>({label:j.name,value:j.id}));return e.jsx("div",{className:"p-4",children:e.jsxs("form",{onSubmit:T,className:"space-y-4",children:[u&&e.jsx(B,{variant:"link",size:"none",onClick:()=>{Y()},children:"Delete Section"}),e.jsx(M,{label:"Name",control:f,name:"name"}),e.jsx(tn,{label:"Feature",control:f,options:J,name:"featureRef"}),e.jsx(M,{label:"Icon",control:f,name:"icon"}),e.jsx(an,{label:"Type",control:f,name:"type",options:rn}),(()=>{switch(D){case"crud":return e.jsx(Xe,{formProps:p});default:return e.jsxs("div",{children:["Unsupported type ",D]})}})(),e.jsx(B,{type:"submit",disabled:l,children:"Save"})]})})};export{fn as component};
2
- //# sourceMappingURL=sections._sectionKey-lnWxksec.js.map
1
+ import{i as r}from"./_virtual___federation_fn_import-CzwHXTRo.js";import{j as e,f as U,e as v,b as Q}from"./index.esm-C6ngV5UE.js";import{C as _,s as z,l as X,z as Z,A as N,c as ee}from"./index-BMCloLL3.js";import{c as E}from"./index-BxN9iLEr.js";import{s as ne}from"./immer-xieDw-3D.js";const{ModelUtils:oe}=await r("@baseplate-dev/project-builder-lib"),{createAdminCrudInputWebConfig:le,useProjectDefinition:te}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:A}=await r("@baseplate-dev/ui-components");function ie({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definition:a}=te(),l=oe.getRelationsToModel(a,i.id).map(c=>({label:`${c.relation.foreignRelationName} (${c.model.name})`,value:c.relation.foreignId})),n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(A,{label:"Relation Name",control:s,name:`${n}.modelRelationRef`,options:l}),e.jsx(A,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ae=le({name:"embedded",pluginId:void 0,label:"Embedded",getNewInput:()=>({label:"",type:"embedded",modelRelationRef:"",embeddedFormRef:""}),Form:ie}),{createAdminCrudInputWebConfig:se,useProjectDefinition:de}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:O}=await r("@baseplate-dev/ui-components");function re({formProps:t,name:o,model:i,embeddedFormOptions:d}){const{definitionContainer:a}=de(),l=i.model.relations?.map(c=>({label:`${c.name} (${a.nameFromId(c.modelRef)})`,value:c.id}))??[],n=o,s=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(O,{label:"Relation Name",control:s,name:`${n}.localRelationRef`,options:l}),e.jsx(O,{label:"Embedded Form",control:s,name:`${n}.embeddedFormRef`,options:d})]})}const ce=se({name:"embeddedLocal",pluginId:void 0,label:"Embedded Local",getNewInput:()=>({label:"",type:"embeddedLocal",embeddedFormRef:"",localRelationRef:""}),Form:re}),{createAdminCrudInputWebConfig:me}=await r("@baseplate-dev/project-builder-lib/web"),{SelectFieldController:pe}=await r("@baseplate-dev/ui-components");function ue({formProps:t,name:o,model:i}){const d=i.model.fields.filter(n=>n.type==="enum").map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsx(pe,{label:"Enum Field",control:l,name:`${a}.modelFieldRef`,options:d})}const be=me({name:"enum",pluginId:void 0,label:"Enum",getNewInput:()=>({label:"",type:"enum",modelFieldRef:""}),Form:ue}),{createAdminCrudInputWebConfig:fe,useProjectDefinition:je}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:y,SelectFieldController:Ce}=await r("@baseplate-dev/ui-components");function xe({formProps:t,name:o,model:i}){const{definitionContainer:d}=je(),a=i.model.relations?.map(s=>({label:`${s.name} (${d.nameFromId(s.modelRef)})`,value:s.id}))??[],l=o,n=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(Ce,{label:"Local Relation Name",control:n,name:`${l}.localRelationRef`,options:a}),e.jsx(y,{label:"Label Expression (e.g. name)",control:n,name:`${l}.labelExpression`}),e.jsx(y,{label:"Value Expression (e.g. id)",control:n,name:`${l}.valueExpression`}),e.jsx(y,{label:"Default Label (optional)",control:n,name:`${l}.defaultLabel`}),e.jsx(y,{label:"Empty Label (optional) - only if field is nullable",control:n,name:`${l}.nullLabel`})]})}const Fe=fe({name:"foreign",pluginId:void 0,label:"Foreign",getNewInput:()=>({label:"",type:"foreign",localRelationRef:"",labelExpression:"",valueExpression:"",defaultLabel:"",nullLabel:""}),Form:xe}),{createAdminCrudInputWebConfig:ve}=await r("@baseplate-dev/project-builder-lib/web"),{InputFieldController:ye,SelectFieldController:he}=await r("@baseplate-dev/ui-components");function Ie({formProps:t,name:o,model:i}){const d=i.model.fields.map(n=>({label:n.name,value:n.id})),a=o,l=t.control;return e.jsxs(e.Fragment,{children:[e.jsx(he,{label:"Field",control:l,name:`${a}.modelFieldRef`,options:d}),e.jsx(ye,{label:"Validation (zod), e.g. z.string().min(1) (optional)",control:l,name:`${a}.validation`})]})}const ge=ve({name:"text",pluginId:void 0,label:"Text",getNewInput:()=>({label:"",type:"text",modelFieldRef:""}),Form:Ie}),W=[ae,ce,be,Fe,ge],{ModelUtils:$e}=await r("@baseplate-dev/project-builder-lib"),{adminCrudInputWebSpec:we,useProjectDefinition:Re}=await r("@baseplate-dev/project-builder-lib/web"),{Button:Se,InputFieldController:Ee,SelectFieldController:Te}=await r("@baseplate-dev/ui-components");function De({idx:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,a=v({control:d,name:"modelRef"}),{definition:l,pluginContainer:n}=Re(),s=a?$e.byIdOrThrow(l,a):void 0,c=n.getPluginSpec(we),u=c.getInputWebConfigs(W).map(f=>({label:f.label,value:f.name})),b=v({control:d,name:`form.fields.${t}.type`}),m=c.getInputWebConfig(b,W),p=m.Form;return e.jsxs("div",{className:"space-y-4",children:[e.jsx(Te,{label:"Type",control:d,options:u,name:`form.fields.${t}.type`}),e.jsx(Ee,{label:"Label",control:d,name:`form.fields.${t}.label`}),p&&s&&e.jsx(p,{formProps:o,name:`form.fields.${t}`,model:s,embeddedFormOptions:i,pluginId:m.pluginId})]})}function V({className:t,formProps:o,embeddedFormOptions:i}){const{control:d}=o,{fields:a,append:l,remove:n}=U({control:d,name:"form.fields"});return e.jsxs("div",{className:E("space-y-4",t),children:[a.map((s,c)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[s.label," (",s.type,")"]}),onRemove:()=>{n(c)},defaultOpen:!s.label,children:e.jsx(De,{idx:c,formProps:o,embeddedFormOptions:i},s.id)},s.id)),e.jsx(Se,{onClick:()=>{l({type:"text",label:""})},children:"Add Field"})]})}const{adminCrudDisplayTypes:Ne,ModelUtils:Ae}=await r("@baseplate-dev/project-builder-lib"),{useProjectDefinition:Oe}=await r("@baseplate-dev/project-builder-lib/web"),{Button:We,InputFieldController:w,SelectFieldController:R}=await r("@baseplate-dev/ui-components");function Le({idx:t,control:o,fieldOptions:i,localRelationOptions:d}){const a=Ne.map(n=>({label:n,value:n})),l=v({control:o,name:`table.columns.${t}.display.type`});return e.jsxs("div",{className:"space-y-4",children:[e.jsx(R,{label:"Type",control:o,options:a,name:`table.columns.${t}.display.type`}),e.jsx(w,{label:"Label",control:o,name:`table.columns.${t}.label`}),l==="text"&&e.jsx(R,{label:"Field",control:o,name:`table.columns.${t}.display.modelFieldRef`,options:i}),l==="foreign"&&e.jsxs(e.Fragment,{children:[e.jsx(R,{label:"Local Relation Name",control:o,name:`table.columns.${t}.display.localRelationRef`,options:d}),e.jsx(w,{label:"Label Expression (e.g. name)",control:o,name:`table.columns.${t}.display.labelExpression`}),e.jsx(w,{label:"Value Expression (e.g. id)",control:o,name:`table.columns.${t}.display.valueExpression`})]})]})}function H({className:t,control:o}){const i=v({control:o,name:"modelRef"}),{definition:d,definitionContainer:a}=Oe(),l=i?Ae.byIdOrThrow(d,i):void 0,{fields:n,append:s,remove:c}=U({control:o,name:"table.columns"}),u=l?.model.relations?.map(m=>({label:`${m.name} (${a.nameFromId(m.modelRef)})`,value:m.id}))??[],b=l?.model.fields.map(m=>({label:m.name,value:m.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[n.map((m,p)=>e.jsx(_,{collapsedContents:e.jsxs("div",{children:[m.label," (",m.display.type,")"]}),onRemove:()=>{c(p)},defaultOpen:!m.label,children:e.jsx(Le,{idx:p,control:o,fieldOptions:b,localRelationOptions:u},m.id)},m.id)),e.jsx(We,{onClick:()=>{s({display:{type:"text",modelFieldRef:""},label:""})},children:"Add Column"})]})}const{createAdminCrudEmbeddedFormSchema:Pe}=await r("@baseplate-dev/project-builder-lib"),{useDefinitionSchema:ke,useProjectDefinition:K}=await r("@baseplate-dev/project-builder-lib/web"),{Button:S,CheckboxFieldController:Be,InputFieldController:Me,SelectFieldController:L,Table:Ue,TableBody:_e,TableCell:h,TableHead:I,TableHeader:ze,TableRow:P,toast:Ve}=await r("@baseplate-dev/ui-components"),{useId:He}=await r("react");function Ke({items:t,edit:o,remove:i}){const{definitionContainer:d}=K();return e.jsxs(Ue,{className:"max-w-6xl",children:[e.jsx(ze,{children:e.jsxs(P,{children:[e.jsx(I,{children:"Form Name"}),e.jsx(I,{children:"Model Name"}),e.jsx(I,{children:"Type"}),e.jsx(I,{children:"Actions"})]})}),e.jsx(_e,{children:t.map((a,l)=>e.jsxs(P,{children:[e.jsx(h,{children:a.name}),e.jsx(h,{children:d.nameFromId(a.modelRef)}),e.jsx(h,{children:a.type}),e.jsxs(h,{className:"space-x-4",children:[e.jsx(S,{variant:"link",size:"none",onClick:()=>{o(l)},children:"Edit"}),e.jsx(S,{variant:"linkDestructive",size:"none",onClick:()=>{i(l)},children:"Remove"})]})]},a.id))})]})}const qe=[{label:"Object",value:"object"},{label:"List",value:"list"}];function Ge({initialData:t,onSubmit:o,embeddedFormOptions:i}){const{definition:d}=K(),a=ke(Pe),l=Q({resolver:z(a),defaultValues:t}),{handleSubmit:n,control:s,watch:c}=l,u=d.models.map(p=>({label:p.name,value:p.id})),b=c("type"),m=He();return e.jsxs("form",{onSubmit:p=>{p.stopPropagation(),n(o)(p).catch(f=>{Ve.error(X(f))})},id:m,className:"space-y-4",children:[e.jsx(Me,{label:"Name",control:s,name:"name"}),e.jsx(L,{label:"Type",control:s,name:"type",options:qe}),e.jsx(Be,{label:"Include ID Field? (useful for list types)",control:s,name:"includeIdField"}),e.jsx(L,{label:"Model",control:s,options:u,name:"modelRef"}),b==="list"&&e.jsxs(e.Fragment,{children:[e.jsx("h2",{children:"Table"}),e.jsx(H,{control:s})]}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:l,embeddedFormOptions:i}),e.jsx(S,{type:"submit",form:m,children:"Save"})]})}const{useProjectDefinition:Ye}=await r("@baseplate-dev/project-builder-lib/web"),{CheckboxFieldController:Je,SelectFieldController:Qe}=await r("@baseplate-dev/ui-components");function Xe({className:t,formProps:o}){const{control:i}=o,{definition:d}=Ye(),a=d.models.map(n=>({label:n.name,value:n.id})),l=v({control:i,name:"embeddedForms"})?.map(n=>({label:n.name,value:n.id}))??[];return e.jsxs("div",{className:E("space-y-4",t),children:[e.jsx(Qe,{label:"Model",control:i,options:a,name:"modelRef"}),e.jsx(Je,{label:"Disable Create?",control:i,name:"disableCreate"}),e.jsx("h2",{children:"Table"}),e.jsx(H,{control:i}),e.jsx("h2",{children:"Form"}),e.jsx(V,{formProps:o,embeddedFormOptions:l}),e.jsx("h2",{children:"Embedded Forms"}),e.jsx(Z.LabelledController,{control:i,name:"embeddedForms",renderForm:n=>e.jsx(Ge,{...n,embeddedFormOptions:l}),renderTable:n=>e.jsx(Ke,{...n}),defaultValue:{type:"object"}})]})}const{adminSectionEntityType:k,createAdminSectionSchema:Ze}=await r("@baseplate-dev/project-builder-lib"),{useBlockUnsavedChangesNavigate:en,useDefinitionSchema:nn,useProjectDefinition:on,useResettableForm:ln}=await r("@baseplate-dev/project-builder-lib/web"),{Button:B,ComboboxFieldController:tn,InputFieldController:M,SelectFieldController:an,useConfirmDialog:sn}=await r("@baseplate-dev/ui-components"),{useEffect:dn}=await r("react"),rn=[{label:"Crud",value:"crud"}],fn=function(){const{requestConfirm:o}=sn(),{key:i}=N.useParams(),{saveDefinitionWithFeedback:d,saveDefinitionWithFeedbackSync:a,isSavingDefinition:l,definition:n}=on(),s=ee(),{adminDefinition:c,sectionId:u,existingSection:b}=N.useLoaderData(),m=nn(Ze),p=ln({values:b,defaultValues:{type:"crud"},resolver:z(m)}),{control:f,handleSubmit:q,watch:G,reset:g}=p;dn(()=>{g(b??{type:"crud"})},[g,b]);const T=q(j=>{const C=j.id||k.generateNewId();return d(x=>{const $=x.apps.find(F=>F.id===c.id);if($?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");$.sections=ne([...($.sections??[]).filter(F=>!u||F.id!==u),{...j,id:C}],[F=>F.name])},{onSuccess:()=>{u||s({to:"/apps/edit/$key/admin/sections/$sectionKey",params:{key:i,sectionKey:k.keyFromId(C)}})}})});en({control:f,reset:g,onSubmit:T});const D=G("type");function Y(){o({title:"Delete Section",content:`Are you sure you want to delete ${b?.name??"this section"}?`,onConfirm:()=>{a(j=>{const C=j.apps.find(x=>x.id===c.id);if(C?.type!=="admin")throw new Error("Cannot add a section to a non-admin app");C.sections=(C.sections??[]).filter(x=>!u||x.id!==u)},{successMessage:"Successfully deleted section!",onSuccess:()=>{s({to:".."})}})}})}const J=n.features.map(j=>({label:j.name,value:j.id}));return e.jsx("div",{className:"p-4",children:e.jsxs("form",{onSubmit:T,className:"space-y-4",children:[u&&e.jsx(B,{variant:"link",size:"none",onClick:()=>{Y()},children:"Delete Section"}),e.jsx(M,{label:"Name",control:f,name:"name"}),e.jsx(tn,{label:"Feature",control:f,options:J,name:"featureRef"}),e.jsx(M,{label:"Icon",control:f,name:"icon"}),e.jsx(an,{label:"Type",control:f,name:"type",options:rn}),(()=>{switch(D){case"crud":return e.jsx(Xe,{formProps:p});default:return e.jsxs("div",{children:["Unsupported type ",D]})}})(),e.jsx(B,{type:"submit",disabled:l,children:"Save"})]})})};export{fn as component};
2
+ //# sourceMappingURL=sections._sectionKey-Cojmxr6C.js.map