@plumile/backoffice-react 0.1.183 → 0.1.184

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 (25) hide show
  1. package/lib/esm/components/backoffice/billing/backofficeBillingUsageChart.css.js +0 -1
  2. package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +0 -1
  3. package/lib/esm/components/backoffice/detail/backofficeRelationsSummaryGrid.css.js +1 -0
  4. package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +1 -0
  5. package/lib/esm/i18n/locales/en/backofficeReact.js +1 -0
  6. package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -1
  7. package/lib/esm/i18n/locales/fr/backofficeReact.js +1 -0
  8. package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -1
  9. package/lib/esm/pages/BackofficeEntityDetailFramePage.js +11 -38
  10. package/lib/esm/pages/BackofficeEntityDetailFramePage.js.map +1 -1
  11. package/lib/esm/pages/BackofficeEntityDetailShellPage.js +11 -93
  12. package/lib/esm/pages/BackofficeEntityDetailShellPage.js.map +1 -1
  13. package/lib/esm/pages/detail/BackofficeEntityDetailManifestFallback.js +87 -0
  14. package/lib/esm/pages/detail/BackofficeEntityDetailManifestFallback.js.map +1 -0
  15. package/lib/esm/router/createBackofficeRoutes.js +123 -109
  16. package/lib/esm/router/createBackofficeRoutes.js.map +1 -1
  17. package/lib/types/i18n/resources.d.ts +2 -0
  18. package/lib/types/i18n/resources.d.ts.map +1 -1
  19. package/lib/types/pages/BackofficeEntityDetailFramePage.d.ts.map +1 -1
  20. package/lib/types/pages/BackofficeEntityDetailShellPage.d.ts +3 -3
  21. package/lib/types/pages/BackofficeEntityDetailShellPage.d.ts.map +1 -1
  22. package/lib/types/pages/detail/BackofficeEntityDetailManifestFallback.d.ts +10 -0
  23. package/lib/types/pages/detail/BackofficeEntityDetailManifestFallback.d.ts.map +1 -0
  24. package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -1
  25. package/package.json +13 -13
@@ -1 +1 @@
1
- {"version":3,"file":"createBackofficeRoutes.js","names":[],"sources":["../../../src/router/createBackofficeRoutes.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport {\n useContext,\n useEffect,\n type ComponentType,\n type JSX,\n type ReactNode,\n} from 'react';\nimport {\n getResourcePage,\n type ResourcePage,\n} from '@plumile/router/ResourcePage.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\nimport { r } from '@plumile/router/tools.js';\nimport { type AnyRoute, type Route } from '@plumile/router/types.js';\nimport * as ReactRelay from 'react-relay';\nimport type { PreloadedQuery } from 'react-relay';\nimport type {\n Environment,\n GraphQLTaggedNode,\n OperationType,\n Variables,\n} from 'relay-runtime';\n\nimport { BACKOFFICE_LIST_DEFAULTS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficeDashboardConfig,\n BackofficeDetailPageManifestItem,\n BackofficeEntityManifestItem,\n BackofficeEntityManifestMap,\n I18nLabel,\n BackofficePreparedDetailFrameRoute,\n BackofficePreparedDetailLayoutDataRoute,\n BackofficePreparedDetailPageConfigRoute,\n BackofficePreparedDetailPageDataRoute,\n BackofficePreparedDetailShellRoute,\n BackofficePreparedDetailUnknownPageRoute,\n BackofficePreparedListDataRoute,\n BackofficePreparedListLayoutRoute,\n BackofficePreparedListShellRoute,\n BackofficePreparedToolConfigRoute,\n BackofficePreparedToolRoute,\n} from '@plumile/backoffice-core/types.js';\n\nimport type {\n BackofficeAuthConfig,\n BackofficeDashboardRegistration,\n BackofficeDashboardModule,\n BackofficeResolvedSidebarHubConfig,\n BackofficeSidebarConfig,\n} from '../provider/types.js';\nimport {\n buildEntityGroupLookup,\n resolveSidebarHubEntries,\n resolveSidebarGroups,\n} from '../components/backoffice/layout/sidebarUtils.js';\nimport type { BackofficeEntityRegistry } from '../provider/entityRegistry.js';\nimport { validateBackofficeDashboardRegistrations } from '../provider/dashboardRegistrations.js';\n\nconst { loadQuery, usePreloadedQuery } = ReactRelay;\n\nexport type CreateBackofficeRoutesInput = {\n basePath: string;\n entityManifest: BackofficeEntityManifestMap;\n entityRegistry: BackofficeEntityRegistry;\n sidebar?: BackofficeSidebarConfig;\n auth: BackofficeAuthConfig;\n dashboard?: BackofficeDashboardModule;\n dashboards?: readonly BackofficeDashboardRegistration[];\n toolsOperationPage?: ResourcePage | null;\n};\n\nexport type BackofficeRouterContext = {\n relayEnvironment: Environment;\n};\n\nexport const WrapperPageResource: ResourcePage | null = getResourcePage(\n 'WrapperPage',\n // eslint-disable-next-line arrow-body-style\n async () => ({\n default: (await import('@plumile/ui/pages/WrapperPage.js')).WrapperPage,\n }),\n);\n\nexport const BackofficeLayoutPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeLayoutPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeLayoutPage.js'),\n );\n\nexport const BackofficeEntityListPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityListPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityListPage.js'),\n );\n\nexport const BackofficeEntityListShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityListShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityListShellPage.js'),\n );\n\nexport const BackofficeEntityListDataPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityListDataPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityListDataPage.js'),\n );\n\nexport const BackofficeEntityDetailPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailPage.js'),\n );\n\nexport const BackofficeEntityDetailFramePageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailFramePage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailFramePage.js'),\n );\n\nexport const BackofficeEntityDetailLayoutPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailLayoutPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailLayoutPage.js'),\n );\n\nexport const BackofficeEntityDetailPageConfigPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailPageConfigPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailPageConfigPage.js'),\n );\n\nexport const BackofficeEntityDetailShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailShellPage.js'),\n );\n\nexport const BackofficeEntityDetailUnknownPageRedirectResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailUnknownPageRedirect',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailUnknownPageRedirect.js'),\n );\n\nexport const BackofficeDashboardPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeDashboardPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeDashboardPage.js'),\n );\n\nexport const BackofficeDashboardShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeDashboardShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeDashboardShellPage.js'),\n );\n\nexport const BackofficeToolShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeToolShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeToolShellPage.js'),\n );\n\nexport const BackofficeHubPageResource: ResourcePage | null = getResourcePage(\n 'BackofficeHubPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeHubPage.js'),\n);\n\nexport const BackofficeLoginPageResource: ResourcePage | null = getResourcePage(\n 'BackofficeLoginPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeLoginPage.js'),\n);\n\nexport const BackofficePasswordResetRequestPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficePasswordResetRequestPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficePasswordResetRequestPage.js'),\n );\n\nexport const BackofficePasswordResetCompletePageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficePasswordResetCompletePage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficePasswordResetCompletePage.js'),\n );\n\nexport const BackofficeVerifyEmailPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeVerifyEmailPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeVerifyEmailPage.js'),\n );\n\nexport const BackofficeAcceptInvitationPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeAcceptInvitationPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeAcceptInvitationPage.js'),\n );\n\ntype PreparedLayout = {\n permissionsQuery: PreloadedQuery<OperationType> | null;\n authStatusQuery: PreloadedQuery<OperationType> | null;\n};\n\nexport type BackofficePreparedDashboardShellRoute = {\n dashboardId: string | null;\n label?: I18nLabel;\n};\n\nexport type BackofficePreparedDashboardRoute =\n BackofficePreparedDashboardShellRoute & {\n config: BackofficeDashboardConfig;\n };\n\ntype LayoutAuthStatus = {\n isLoggedIn?: boolean | null;\n me?: {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n initials: string;\n } | null;\n} | null;\n\ntype LayoutRouteComponent = ComponentType<{\n children: ReactNode;\n permissionsQuery?: GraphQLTaggedNode;\n prepared?: PreloadedQuery<OperationType> | null;\n authStatus?: LayoutAuthStatus;\n activeGroupId?: string | null;\n}>;\n\ntype LayoutRouteRenderProps = {\n children: ReactNode;\n Component: LayoutRouteComponent;\n preparedLayout: PreparedLayout | undefined;\n permissionsQuery: GraphQLTaggedNode | undefined;\n activeGroupId: string | null;\n};\n\nconst BackofficeHistoryRedirect = ({\n pathname,\n}: {\n pathname: string;\n}): null => {\n const router = useContext(RoutingContext);\n\n useEffect(() => {\n router?.history.set({\n pathname,\n });\n }, [pathname, router]);\n\n return null;\n};\n\nconst BackofficeLayoutRouteWithoutAuthStatus = ({\n children,\n Component,\n preparedLayout,\n permissionsQuery,\n activeGroupId,\n}: LayoutRouteRenderProps): JSX.Element => {\n return (\n <Component\n permissionsQuery={permissionsQuery}\n prepared={preparedLayout?.permissionsQuery ?? null}\n authStatus={null}\n activeGroupId={activeGroupId}\n >\n {children}\n </Component>\n );\n};\n\nconst BackofficeLayoutRouteWithAuthStatus = ({\n children,\n Component,\n preparedLayout,\n permissionsQuery,\n activeGroupId,\n authStatusQuery,\n authStatusPrepared,\n loginRedirectPath,\n}: LayoutRouteRenderProps & {\n authStatusQuery: GraphQLTaggedNode;\n authStatusPrepared: PreloadedQuery<OperationType>;\n loginRedirectPath: string;\n}): JSX.Element => {\n const data = usePreloadedQuery(authStatusQuery, authStatusPrepared);\n const authStatus = data as LayoutAuthStatus;\n\n if (authStatus?.isLoggedIn !== true) {\n return <BackofficeHistoryRedirect pathname={loginRedirectPath} />;\n }\n\n return (\n <Component\n permissionsQuery={permissionsQuery}\n prepared={preparedLayout?.permissionsQuery ?? null}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </Component>\n );\n};\n\nexport type BackofficePreparedHubRoute = {\n hubId: string;\n hub: BackofficeResolvedSidebarHubConfig;\n};\n\nconst normalizeBaseSegment = (value: string): string => {\n const trimmed = value.trim();\n if (trimmed === '' || trimmed === '/') {\n return '';\n }\n return trimmed.replace(/^\\/+|\\/+$/g, '');\n};\n\nconst normalizePath = (value: string): string => {\n const trimmed = value.trim();\n if (trimmed === '') {\n return '/';\n }\n return `/${trimmed}`.replace(/\\/+/g, '/');\n};\n\nconst buildScopedPath = (baseSegment: string, path: string): string => {\n const normalizedPath = path.replace(/^\\/+|\\/+$/g, '');\n if (baseSegment === '') {\n return normalizedPath;\n }\n if (normalizedPath === '') {\n return baseSegment;\n }\n return `${baseSegment}/${normalizedPath}`;\n};\n\nconst buildScopedAbsolutePath = (baseSegment: string, path: string): string => {\n return normalizePath(buildScopedPath(baseSegment, path));\n};\n\nconst normalizePagePath = (value: string): string => {\n return value.trim().replace(/^\\/+|\\/+$/g, '');\n};\n\nconst buildRelativePath = (\n absolutePath: string,\n baseSegment: string,\n): string => {\n const normalized = normalizePath(absolutePath);\n const basePrefix = baseSegment === '' ? '' : `/${baseSegment}`;\n if (basePrefix !== '' && normalized.startsWith(basePrefix)) {\n return normalized.slice(basePrefix.length).replace(/^\\/+/, '');\n }\n return normalized.replace(/^\\/+/, '');\n};\n\nconst resolveActiveEntityIdFromRoute = (\n route: { routes: AnyRoute[] } | null,\n routeEntityIdMap: WeakMap<AnyRoute, string>,\n): string | null => {\n if (route?.routes == null) {\n return null;\n }\n for (let index = route.routes.length - 1; index >= 0; index -= 1) {\n const routeEntry = route.routes[index];\n if (routeEntry != null) {\n const entityId = routeEntityIdMap.get(routeEntry);\n if (entityId != null) {\n return entityId;\n }\n }\n }\n return null;\n};\n\nconst toSearchParams = (query: Record<string, unknown>): URLSearchParams => {\n const params = new URLSearchParams();\n Object.entries(query).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((entry) => {\n if (entry == null) {\n return;\n }\n params.append(key, String(entry));\n });\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n params.set(key, String(value));\n });\n return params;\n};\n\nconst resolveDetailPageManifestByPath = (\n entityManifestItem: BackofficeEntityManifestItem,\n rawPagePath: string,\n): BackofficeDetailPageManifestItem | null => {\n const pagePath = normalizePagePath(rawPagePath);\n return (\n entityManifestItem.detailPages?.find((page) => {\n return normalizePagePath(page.pathSegment) === pagePath;\n }) ?? null\n );\n};\n\nconst resolveDetailPageIdForPath = (\n entityManifestItem: BackofficeEntityManifestItem,\n rawPagePath: string,\n): string => {\n return (\n resolveDetailPageManifestByPath(entityManifestItem, rawPagePath)?.id ??\n rawPagePath\n );\n};\n\nconst rBackoffice = r<BackofficeRouterContext>;\n\n/**\n * Creates backoffice routes based on the provided configuration\n */\nexport function createBackofficeRoutes(\n input: CreateBackofficeRoutesInput,\n): Route<BackofficeRouterContext, any>[] {\n const { basePath, entityManifest, entityRegistry, sidebar, auth, dashboard } =\n input;\n const dashboards = validateBackofficeDashboardRegistrations(input.dashboards);\n const baseSegment = normalizeBaseSegment(basePath);\n const loginPath = buildScopedPath(baseSegment, 'login');\n const passwordResetRequestPath = buildScopedPath(baseSegment, 'login/reset');\n const passwordResetCompletePath = buildScopedPath(\n baseSegment,\n 'login/reset/complete',\n );\n const verifyEmailPath = buildScopedPath(baseSegment, 'verify-email');\n const acceptInvitationPath = buildScopedPath(\n baseSegment,\n 'accept-invitation',\n );\n const loginRedirectPath = buildScopedAbsolutePath(baseSegment, 'login');\n const entities = entityManifest;\n const groups = resolveSidebarGroups(entities, sidebar);\n const hubEntries = resolveSidebarHubEntries(groups, sidebar);\n const entityGroupLookup = buildEntityGroupLookup(groups, sidebar);\n const entityIdToGroupId = new Map<string, string>();\n entityGroupLookup.forEach((value, entityId) => {\n entityIdToGroupId.set(entityId, value.groupId);\n });\n const routeEntityIdMap = new WeakMap<AnyRoute, string>();\n const routeGroupIdMap = new WeakMap<AnyRoute, string>();\n\n const permissionsQuery = sidebar?.permissionsQuery;\n const layoutPrepare = async ({\n context,\n }: {\n context: BackofficeRouterContext;\n }) => {\n const sessionAuth = await auth.session.load();\n const permissionsQueryRef =\n permissionsQuery != null\n ? loadQuery<OperationType>(\n context.relayEnvironment,\n permissionsQuery,\n {},\n )\n : null;\n const authStatusQueryRef =\n sessionAuth.authStatusQuery != null\n ? loadQuery<OperationType>(\n context.relayEnvironment,\n sessionAuth.authStatusQuery,\n {},\n { fetchPolicy: 'network-only' },\n )\n : null;\n return {\n permissionsQuery: permissionsQueryRef,\n authStatusQuery: authStatusQueryRef,\n };\n };\n\n const prepareRootDashboard =\n async (): Promise<BackofficePreparedDashboardRoute | null> => {\n if (dashboard == null) {\n return null;\n }\n const config = await dashboard.load();\n return {\n dashboardId: 'dashboard',\n config,\n };\n };\n const prepareRootDashboardShell =\n (): BackofficePreparedDashboardShellRoute | null => {\n if (dashboard == null) {\n return null;\n }\n return {\n dashboardId: 'dashboard',\n };\n };\n const renderDashboard = ({\n prepared,\n Component,\n }: {\n prepared: unknown;\n Component?: ComponentType<Record<string, unknown>> | null;\n }): JSX.Element | null => {\n if (Component == null) {\n return null;\n }\n const DashboardComponent = Component as ComponentType<{\n prepared?: unknown;\n }>;\n return <DashboardComponent prepared={prepared} />;\n };\n const renderDashboardShell = ({\n children: dashboardChildren,\n prepared,\n Component,\n }: {\n children: ReactNode;\n prepared: unknown;\n Component?: ComponentType<Record<string, unknown>> | null;\n }): JSX.Element | null => {\n if (Component == null) {\n return null;\n }\n const DashboardShellComponent = Component as ComponentType<{\n children?: ReactNode;\n prepared?: BackofficePreparedDashboardShellRoute | null;\n }>;\n return (\n <DashboardShellComponent\n prepared={prepared as BackofficePreparedDashboardShellRoute | null}\n >\n {dashboardChildren}\n </DashboardShellComponent>\n );\n };\n\n const dashboardConfigRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardPageResource,\n prepare: prepareRootDashboard,\n render: renderDashboard,\n });\n const dashboardRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardShellPageResource,\n prepare: prepareRootDashboardShell,\n render: renderDashboardShell,\n children: [dashboardConfigRoute],\n });\n const dashboardAliasConfigRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardPageResource,\n prepare: prepareRootDashboard,\n render: renderDashboard,\n });\n const dashboardAliasRoute = rBackoffice({\n path: 'dashboard',\n resourcePage: BackofficeDashboardShellPageResource,\n prepare: prepareRootDashboardShell,\n render: renderDashboardShell,\n children: [dashboardAliasConfigRoute],\n });\n const secondaryDashboardRoutes = dashboards.map((registration) => {\n const dashboardConfigChildRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardPageResource,\n prepare: async () => {\n const config = await registration.module.load();\n return {\n dashboardId: registration.id,\n label: registration.label,\n config,\n } satisfies BackofficePreparedDashboardRoute;\n },\n render: renderDashboard,\n });\n return rBackoffice({\n path: `dashboard/${registration.id}`,\n resourcePage: BackofficeDashboardShellPageResource,\n prepare: () => {\n return {\n dashboardId: registration.id,\n label: registration.label,\n } satisfies BackofficePreparedDashboardShellRoute;\n },\n render: renderDashboardShell,\n children: [dashboardConfigChildRoute],\n });\n });\n\n const listEntityEntries = Object.values(entityManifest).filter((entity) => {\n return entity.kind === 'list-detail';\n });\n\n const hubRoutes = hubEntries.map((entry) => {\n const hubRelative = buildRelativePath(entry.hub.href, baseSegment);\n const hubRoute = rBackoffice({\n path: hubRelative,\n resourcePage: BackofficeHubPageResource,\n prepare: () => {\n return {\n hubId: entry.hub.id,\n hub: entry.hub,\n } satisfies BackofficePreparedHubRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component prepared={prepared} />;\n },\n });\n if (entry.groupId != null) {\n routeGroupIdMap.set(hubRoute, entry.groupId);\n }\n return hubRoute;\n });\n\n const entityRoutes = listEntityEntries.map((entityManifestItem) => {\n const listPath = entityManifestItem.routes.list;\n const listRelative = buildRelativePath(listPath, baseSegment);\n const children: Route<any, any>[] = [];\n\n if (entityManifestItem.hasList) {\n const listDataRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityListDataPageResource,\n prepareSearchBehavior: 'path',\n prepare: async ({ context, query }) => {\n const entityModule = await entityRegistry.loadListEntity(\n entityManifestItem.id,\n );\n const { config } = entityModule;\n const { list, listUrlCodec, listDefaults } = config;\n if (listUrlCodec == null || listDefaults == null) {\n throw new Error(\n `Backoffice entity ${entityManifestItem.id} does not expose a list configuration.`,\n );\n }\n const params = toSearchParams(query);\n const state = listUrlCodec.parse(params);\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n const variablesBase = {\n where: state.where,\n sort: state.sort ?? listDefaults.sort,\n count: pageSize,\n cursor: null,\n };\n const variables = list.buildQueryVariables(variablesBase);\n const queryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n list.query,\n variables,\n );\n const prepared: BackofficePreparedListDataRoute = {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: config,\n query: queryRef,\n };\n return prepared;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedListDataRoute;\n return <Component prepared={preparedRoute} />;\n },\n });\n routeEntityIdMap.set(listDataRoute, entityManifestItem.id);\n\n const listRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityListPageResource,\n prepareSearchBehavior: 'path',\n prepare: async () => {\n const entityModule = await entityRegistry.loadListEntity(\n entityManifestItem.id,\n );\n const { config } = entityModule;\n const { listUrlCodec, listDefaults } = config;\n if (listUrlCodec == null || listDefaults == null) {\n throw new Error(\n `Backoffice entity ${entityManifestItem.id} does not expose a list configuration.`,\n );\n }\n const prepared: BackofficePreparedListLayoutRoute = {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: config,\n };\n return prepared;\n },\n render: ({ children: listChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedListLayoutRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n config={preparedRoute.entityConfig}\n prepared={preparedRoute}\n >\n {listChildren}\n </Component>\n );\n },\n children: [listDataRoute],\n });\n routeEntityIdMap.set(listRoute, entityManifestItem.id);\n\n const listShellRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityListShellPageResource,\n prepareSearchBehavior: 'path',\n prepare: () => {\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n } satisfies BackofficePreparedListShellRoute;\n },\n render: ({ children: listShellChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedListShellRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n prepared={preparedRoute}\n >\n {listShellChildren}\n </Component>\n );\n },\n children: [listRoute],\n });\n routeEntityIdMap.set(listShellRoute, entityManifestItem.id);\n children.push(listShellRoute);\n }\n\n const detailPageRoutes = (entityManifestItem.detailPages ?? []).map(\n (pageManifest) => {\n const pageDataRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityDetailPageResource,\n suspenseBoundary: 'segment',\n prepare: async ({ context, variables }) => {\n const rawId = String(variables.id ?? '');\n const pageModule = await entityRegistry.loadDetailPageEntity(\n entityManifestItem.id,\n pageManifest.id,\n );\n const pageBuildResult =\n pageModule.config.page.buildVariables != null\n ? pageModule.config.page.buildVariables({\n id: rawId,\n })\n : { variables: { id: rawId } };\n const pageQueryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n pageModule.config.page.query,\n pageBuildResult.variables as Variables,\n );\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n detailId: pageBuildResult.detailId,\n id: rawId,\n pageConfig: pageModule.config,\n pageQuery: pageQueryRef,\n pageId: pageManifest.id,\n pagePath: pageManifest.pathSegment,\n } satisfies BackofficePreparedDetailPageDataRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute =\n prepared as BackofficePreparedDetailPageDataRoute;\n return <Component prepared={preparedRoute} />;\n },\n });\n routeEntityIdMap.set(pageDataRoute, entityManifestItem.id);\n\n const pageConfigRoute = rBackoffice({\n path: pageManifest.pathSegment,\n resourcePage: BackofficeEntityDetailPageConfigPageResource,\n suspenseBoundary: 'segment',\n prepare: async ({ variables }) => {\n const rawId = String(variables.id ?? '');\n const [pageModule, layoutModule] = await Promise.all([\n entityRegistry.loadDetailPageEntity(\n entityManifestItem.id,\n pageManifest.id,\n ),\n entityRegistry.loadDetailLayoutEntity(entityManifestItem.id),\n ]);\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: layoutModule.config,\n id: rawId,\n pageConfig: pageModule.config,\n pageId: pageManifest.id,\n pagePath: pageManifest.pathSegment,\n } satisfies BackofficePreparedDetailPageConfigRoute;\n },\n render: ({ children: pageChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute =\n prepared as BackofficePreparedDetailPageConfigRoute;\n return (\n <Component\n config={preparedRoute.entityConfig}\n prepared={preparedRoute}\n >\n {pageChildren}\n </Component>\n );\n },\n children: [pageDataRoute],\n });\n routeEntityIdMap.set(pageConfigRoute, entityManifestItem.id);\n return pageConfigRoute;\n },\n );\n\n const detailLayoutDataRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityDetailLayoutPageResource,\n suspenseBoundary: 'segment',\n prepare: async ({ context, variables }) => {\n const entityModule = await entityRegistry.loadDetailLayoutEntity(\n entityManifestItem.id,\n );\n const { config } = entityModule;\n const rawId = String(variables.id ?? '');\n const layoutBuildResult =\n config.layoutPage.buildVariables != null\n ? config.layoutPage.buildVariables({\n id: rawId,\n })\n : { variables: { id: rawId } };\n const layoutQueryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n config.layoutPage.query,\n layoutBuildResult.variables as Variables,\n );\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: config,\n layoutQuery: layoutQueryRef,\n id: rawId,\n } satisfies BackofficePreparedDetailLayoutDataRoute;\n },\n render: ({ children: detailChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute =\n prepared as BackofficePreparedDetailLayoutDataRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n config={preparedRoute.entityConfig}\n prepared={preparedRoute}\n >\n {detailChildren}\n </Component>\n );\n },\n children: [\n rBackoffice({\n path: '',\n resourcePage: WrapperPageResource,\n prepare: ({ variables }) => {\n const rawId = String(variables.id ?? '').trim();\n return {\n redirectTo:\n rawId === ''\n ? null\n : entityManifestItem.routes.detailPage(\n rawId,\n entityManifestItem.defaultDetailPageId ?? 'overview',\n ),\n };\n },\n render: ({ prepared }) => {\n const redirectTo =\n (prepared as { redirectTo?: string | null }).redirectTo ?? null;\n if (redirectTo == null) {\n return null;\n }\n return <BackofficeHistoryRedirect pathname={redirectTo} />;\n },\n }),\n ...detailPageRoutes,\n rBackoffice({\n path: ':pagePath',\n resourcePage: BackofficeEntityDetailUnknownPageRedirectResource,\n suspenseBoundary: 'segment',\n prepare: async ({ variables }) => {\n const entityModule = await entityRegistry.loadDetailLayoutEntity(\n entityManifestItem.id,\n );\n const rawId = String(variables.id ?? '');\n const rawPagePath = String(variables.pagePath ?? '');\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: entityModule.config,\n id: rawId,\n pagePath: rawPagePath,\n } satisfies BackofficePreparedDetailUnknownPageRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedDetail =\n prepared as BackofficePreparedDetailUnknownPageRoute;\n return (\n <Component\n entityManifest={preparedDetail.entityManifest}\n config={preparedDetail.entityConfig}\n prepared={preparedDetail}\n />\n );\n },\n }),\n ],\n });\n routeEntityIdMap.set(detailLayoutDataRoute, entityManifestItem.id);\n\n const detailShellRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityDetailShellPageResource,\n suspenseBoundary: 'segment',\n prepare: async ({ variables }) => {\n const entityModule = await entityRegistry.loadDetailLayoutEntity(\n entityManifestItem.id,\n );\n const rawId = String(variables.id ?? '');\n const rawPagePath =\n typeof variables.pagePath === 'string' ? variables.pagePath : null;\n const pageId =\n rawPagePath == null\n ? (entityManifestItem.defaultDetailPageId ?? 'overview')\n : resolveDetailPageIdForPath(entityManifestItem, rawPagePath);\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: entityModule.config,\n id: rawId,\n pageId,\n pagePath: rawPagePath,\n } satisfies BackofficePreparedDetailShellRoute;\n },\n render: ({ children: shellChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedDetailShellRoute;\n return (\n <Component\n config={preparedRoute.entityConfig}\n prepared={preparedRoute}\n >\n {shellChildren}\n </Component>\n );\n },\n children: [detailLayoutDataRoute],\n });\n routeEntityIdMap.set(detailShellRoute, entityManifestItem.id);\n\n const detailFrameRoute = rBackoffice({\n path: ':id',\n resourcePage: BackofficeEntityDetailFramePageResource,\n suspenseBoundary: 'segment',\n prepare: ({ variables }) => {\n const rawId = String(variables.id ?? '');\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n id: rawId,\n } satisfies BackofficePreparedDetailFrameRoute;\n },\n render: ({ children: detailChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedDetailFrameRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n prepared={preparedRoute}\n >\n {detailChildren}\n </Component>\n );\n },\n children: [detailShellRoute],\n });\n routeEntityIdMap.set(detailFrameRoute, entityManifestItem.id);\n children.push(detailFrameRoute);\n\n return rBackoffice({\n path: listRelative,\n children,\n resourcePage: WrapperPageResource,\n suspenseBoundary: 'segment',\n });\n });\n\n const toolsRoutes = Object.values(entityManifest)\n .filter((entity) => {\n return entity.kind === 'tool';\n })\n .map((toolManifest) => {\n const toolRelative = buildRelativePath(\n toolManifest.routes.list,\n baseSegment,\n );\n const toolConfigRoute = rBackoffice({\n path: '',\n resourcePage: input.toolsOperationPage ?? null,\n prepare: async () => {\n const toolModule = await entityRegistry.loadToolEntity(\n toolManifest.id,\n );\n return {\n entityId: toolManifest.id,\n entityManifest: toolManifest,\n entityConfig: toolModule.config,\n } satisfies BackofficePreparedToolConfigRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedTool = prepared as BackofficePreparedToolConfigRoute;\n return (\n <Component\n entityManifest={preparedTool.entityManifest}\n operation={preparedTool.entityConfig.tool.operation}\n toolId={preparedTool.entityConfig.id}\n />\n );\n },\n });\n routeEntityIdMap.set(toolConfigRoute, toolManifest.id);\n\n const toolRoute = rBackoffice({\n path: toolRelative,\n resourcePage: BackofficeToolShellPageResource,\n prepare: () => {\n return {\n entityId: toolManifest.id,\n entityManifest: toolManifest,\n } satisfies BackofficePreparedToolRoute;\n },\n render: ({ children: toolChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedTool = prepared as BackofficePreparedToolRoute;\n return (\n <Component\n entityManifest={preparedTool.entityManifest}\n prepared={preparedTool}\n >\n {toolChildren}\n </Component>\n );\n },\n children: [toolConfigRoute],\n });\n routeEntityIdMap.set(toolRoute, toolManifest.id);\n return toolRoute;\n });\n\n const layoutRoute = rBackoffice({\n path: baseSegment,\n resourcePage: BackofficeLayoutPageResource,\n prepareSearchBehavior: 'path',\n suspenseBoundary: 'segment',\n prepare: layoutPrepare,\n render: ({ children, prepared, route, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedLayout = prepared as PreparedLayout | undefined;\n const activeEntityId = resolveActiveEntityIdFromRoute(\n route,\n routeEntityIdMap,\n );\n const activeGroupId =\n activeEntityId != null\n ? (entityIdToGroupId.get(activeEntityId) ?? null)\n : resolveActiveEntityIdFromRoute(route, routeGroupIdMap);\n const LayoutComponent = Component as LayoutRouteComponent;\n const authStatusQuery = auth.session.get()?.authStatusQuery ?? null;\n if (authStatusQuery != null && preparedLayout?.authStatusQuery != null) {\n return (\n <BackofficeLayoutRouteWithAuthStatus\n Component={LayoutComponent}\n preparedLayout={preparedLayout}\n permissionsQuery={sidebar?.permissionsQuery}\n activeGroupId={activeGroupId}\n authStatusQuery={authStatusQuery}\n authStatusPrepared={preparedLayout.authStatusQuery}\n loginRedirectPath={loginRedirectPath}\n >\n {children}\n </BackofficeLayoutRouteWithAuthStatus>\n );\n }\n return (\n <BackofficeLayoutRouteWithoutAuthStatus\n Component={LayoutComponent}\n preparedLayout={preparedLayout}\n permissionsQuery={sidebar?.permissionsQuery}\n activeGroupId={activeGroupId}\n >\n {children}\n </BackofficeLayoutRouteWithoutAuthStatus>\n );\n },\n children: [\n dashboardRoute,\n ...hubRoutes,\n ...entityRoutes,\n ...toolsRoutes,\n ...secondaryDashboardRoutes,\n dashboardAliasRoute,\n ],\n });\n\n const routes: Route<BackofficeRouterContext, any>[] = [\n rBackoffice({\n path: loginPath,\n resourcePage: BackofficeLoginPageResource,\n prepare: async ({ context }) => {\n const loginAuth = await auth.login.load();\n const queryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n loginAuth.loginQuery,\n {},\n );\n return { query: queryRef };\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component prepared={prepared} />;\n },\n }),\n rBackoffice({\n path: passwordResetRequestPath,\n resourcePage: BackofficePasswordResetRequestPageResource,\n prepare: async () => {\n await auth.passwordResetRequest.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n rBackoffice({\n path: passwordResetCompletePath,\n resourcePage: BackofficePasswordResetCompletePageResource,\n prepare: async () => {\n await auth.passwordResetComplete.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n rBackoffice({\n path: verifyEmailPath,\n resourcePage: BackofficeVerifyEmailPageResource,\n prepare: async () => {\n await auth.verifyEmail.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n ];\n\n if (auth.hasAcceptInvitation === true || auth.acceptInvitation != null) {\n routes.push(\n rBackoffice({\n path: acceptInvitationPath,\n resourcePage: BackofficeAcceptInvitationPageResource,\n prepare: async () => {\n await auth.acceptInvitation?.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n );\n }\n\n routes.push(layoutRoute);\n\n return routes;\n}\n\nexport const __test = {\n normalizeBaseSegment,\n normalizePath,\n buildScopedPath,\n buildScopedAbsolutePath,\n buildRelativePath,\n resolveActiveEntityIdFromRoute,\n resolveDetailPageIdForPath,\n resolveDetailPageManifestByPath,\n toSearchParams,\n validateBackofficeDashboardRegistrations,\n BackofficeLayoutRouteWithAuthStatus,\n} as const;\n\nexport default createBackofficeRoutes;\n"],"mappings":"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"}
1
+ {"version":3,"file":"createBackofficeRoutes.js","names":[],"sources":["../../../src/router/createBackofficeRoutes.tsx"],"sourcesContent":["/* eslint-disable no-ternary */\nimport {\n useContext,\n useEffect,\n type ComponentType,\n type JSX,\n type ReactNode,\n} from 'react';\nimport {\n getResourcePage,\n type ResourcePage,\n} from '@plumile/router/ResourcePage.js';\nimport RoutingContext from '@plumile/router/routing/RoutingContext.js';\nimport { r } from '@plumile/router/tools.js';\nimport {\n type AnyRoute,\n type Route,\n type RouteFallbackArgs,\n} from '@plumile/router/types.js';\nimport * as ReactRelay from 'react-relay';\nimport type { PreloadedQuery } from 'react-relay';\nimport type {\n Environment,\n GraphQLTaggedNode,\n OperationType,\n Variables,\n} from 'relay-runtime';\n\nimport { BACKOFFICE_LIST_DEFAULTS } from '@plumile/backoffice-core/constants.js';\nimport type {\n BackofficeDashboardConfig,\n BackofficeDetailPageManifestItem,\n BackofficeEntityManifestItem,\n BackofficeEntityManifestMap,\n I18nLabel,\n BackofficePreparedDetailFrameRoute,\n BackofficePreparedDetailLayoutDataRoute,\n BackofficePreparedDetailPageConfigRoute,\n BackofficePreparedDetailPageDataRoute,\n BackofficePreparedDetailShellRoute,\n BackofficePreparedDetailUnknownPageRoute,\n BackofficePreparedListDataRoute,\n BackofficePreparedListLayoutRoute,\n BackofficePreparedListShellRoute,\n BackofficePreparedToolConfigRoute,\n BackofficePreparedToolRoute,\n} from '@plumile/backoffice-core/types.js';\n\nimport type {\n BackofficeAuthConfig,\n BackofficeDashboardRegistration,\n BackofficeDashboardModule,\n BackofficeResolvedSidebarHubConfig,\n BackofficeSidebarConfig,\n} from '../provider/types.js';\nimport {\n buildEntityGroupLookup,\n resolveSidebarHubEntries,\n resolveSidebarGroups,\n} from '../components/backoffice/layout/sidebarUtils.js';\nimport type { BackofficeEntityRegistry } from '../provider/entityRegistry.js';\nimport { validateBackofficeDashboardRegistrations } from '../provider/dashboardRegistrations.js';\nimport { BackofficeEntityDetailManifestFallback } from '../pages/detail/BackofficeEntityDetailManifestFallback.js';\n\nconst { loadQuery, usePreloadedQuery } = ReactRelay;\n\nexport type CreateBackofficeRoutesInput = {\n basePath: string;\n entityManifest: BackofficeEntityManifestMap;\n entityRegistry: BackofficeEntityRegistry;\n sidebar?: BackofficeSidebarConfig;\n auth: BackofficeAuthConfig;\n dashboard?: BackofficeDashboardModule;\n dashboards?: readonly BackofficeDashboardRegistration[];\n toolsOperationPage?: ResourcePage | null;\n};\n\nexport type BackofficeRouterContext = {\n relayEnvironment: Environment;\n};\n\nexport const WrapperPageResource: ResourcePage | null = getResourcePage(\n 'WrapperPage',\n // eslint-disable-next-line arrow-body-style\n async () => ({\n default: (await import('@plumile/ui/pages/WrapperPage.js')).WrapperPage,\n }),\n);\n\nexport const BackofficeLayoutPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeLayoutPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeLayoutPage.js'),\n );\n\nexport const BackofficeEntityListPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityListPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityListPage.js'),\n );\n\nexport const BackofficeEntityListShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityListShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityListShellPage.js'),\n );\n\nexport const BackofficeEntityListDataPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityListDataPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityListDataPage.js'),\n );\n\nexport const BackofficeEntityDetailPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailPage.js'),\n );\n\nexport const BackofficeEntityDetailFramePageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailFramePage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailFramePage.js'),\n );\n\nexport const BackofficeEntityDetailLayoutPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailLayoutPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailLayoutPage.js'),\n );\n\nexport const BackofficeEntityDetailPageConfigPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailPageConfigPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailPageConfigPage.js'),\n );\n\nexport const BackofficeEntityDetailShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailShellPage.js'),\n );\n\nexport const BackofficeEntityDetailUnknownPageRedirectResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeEntityDetailUnknownPageRedirect',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeEntityDetailUnknownPageRedirect.js'),\n );\n\nexport const BackofficeDashboardPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeDashboardPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeDashboardPage.js'),\n );\n\nexport const BackofficeDashboardShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeDashboardShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeDashboardShellPage.js'),\n );\n\nexport const BackofficeToolShellPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeToolShellPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeToolShellPage.js'),\n );\n\nexport const BackofficeHubPageResource: ResourcePage | null = getResourcePage(\n 'BackofficeHubPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeHubPage.js'),\n);\n\nexport const BackofficeLoginPageResource: ResourcePage | null = getResourcePage(\n 'BackofficeLoginPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeLoginPage.js'),\n);\n\nexport const BackofficePasswordResetRequestPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficePasswordResetRequestPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficePasswordResetRequestPage.js'),\n );\n\nexport const BackofficePasswordResetCompletePageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficePasswordResetCompletePage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficePasswordResetCompletePage.js'),\n );\n\nexport const BackofficeVerifyEmailPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeVerifyEmailPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeVerifyEmailPage.js'),\n );\n\nexport const BackofficeAcceptInvitationPageResource: ResourcePage | null =\n getResourcePage(\n 'BackofficeAcceptInvitationPage',\n // eslint-disable-next-line arrow-body-style\n async () => import('../pages/BackofficeAcceptInvitationPage.js'),\n );\n\ntype PreparedLayout = {\n permissionsQuery: PreloadedQuery<OperationType> | null;\n authStatusQuery: PreloadedQuery<OperationType> | null;\n};\n\nexport type BackofficePreparedDashboardShellRoute = {\n dashboardId: string | null;\n label?: I18nLabel;\n};\n\nexport type BackofficePreparedDashboardRoute =\n BackofficePreparedDashboardShellRoute & {\n config: BackofficeDashboardConfig;\n };\n\ntype LayoutAuthStatus = {\n isLoggedIn?: boolean | null;\n me?: {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n initials: string;\n } | null;\n} | null;\n\ntype LayoutRouteComponent = ComponentType<{\n children: ReactNode;\n permissionsQuery?: GraphQLTaggedNode;\n prepared?: PreloadedQuery<OperationType> | null;\n authStatus?: LayoutAuthStatus;\n activeGroupId?: string | null;\n}>;\n\ntype LayoutRouteRenderProps = {\n children: ReactNode;\n Component: LayoutRouteComponent;\n preparedLayout: PreparedLayout | undefined;\n permissionsQuery: GraphQLTaggedNode | undefined;\n activeGroupId: string | null;\n};\n\nconst BackofficeHistoryRedirect = ({\n pathname,\n}: {\n pathname: string;\n}): null => {\n const router = useContext(RoutingContext);\n\n useEffect(() => {\n router?.history.set({\n pathname,\n });\n }, [pathname, router]);\n\n return null;\n};\n\nconst BackofficeLayoutRouteWithoutAuthStatus = ({\n children,\n Component,\n preparedLayout,\n permissionsQuery,\n activeGroupId,\n}: LayoutRouteRenderProps): JSX.Element => {\n return (\n <Component\n permissionsQuery={permissionsQuery}\n prepared={preparedLayout?.permissionsQuery ?? null}\n authStatus={null}\n activeGroupId={activeGroupId}\n >\n {children}\n </Component>\n );\n};\n\nconst BackofficeLayoutRouteWithAuthStatus = ({\n children,\n Component,\n preparedLayout,\n permissionsQuery,\n activeGroupId,\n authStatusQuery,\n authStatusPrepared,\n loginRedirectPath,\n}: LayoutRouteRenderProps & {\n authStatusQuery: GraphQLTaggedNode;\n authStatusPrepared: PreloadedQuery<OperationType>;\n loginRedirectPath: string;\n}): JSX.Element => {\n const data = usePreloadedQuery(authStatusQuery, authStatusPrepared);\n const authStatus = data as LayoutAuthStatus;\n\n if (authStatus?.isLoggedIn !== true) {\n return <BackofficeHistoryRedirect pathname={loginRedirectPath} />;\n }\n\n return (\n <Component\n permissionsQuery={permissionsQuery}\n prepared={preparedLayout?.permissionsQuery ?? null}\n authStatus={authStatus}\n activeGroupId={activeGroupId}\n >\n {children}\n </Component>\n );\n};\n\nexport type BackofficePreparedHubRoute = {\n hubId: string;\n hub: BackofficeResolvedSidebarHubConfig;\n};\n\nconst normalizeBaseSegment = (value: string): string => {\n const trimmed = value.trim();\n if (trimmed === '' || trimmed === '/') {\n return '';\n }\n return trimmed.replace(/^\\/+|\\/+$/g, '');\n};\n\nconst normalizePath = (value: string): string => {\n const trimmed = value.trim();\n if (trimmed === '') {\n return '/';\n }\n return `/${trimmed}`.replace(/\\/+/g, '/');\n};\n\nconst buildScopedPath = (baseSegment: string, path: string): string => {\n const normalizedPath = path.replace(/^\\/+|\\/+$/g, '');\n if (baseSegment === '') {\n return normalizedPath;\n }\n if (normalizedPath === '') {\n return baseSegment;\n }\n return `${baseSegment}/${normalizedPath}`;\n};\n\nconst buildScopedAbsolutePath = (baseSegment: string, path: string): string => {\n return normalizePath(buildScopedPath(baseSegment, path));\n};\n\nconst normalizePagePath = (value: string): string => {\n return value.trim().replace(/^\\/+|\\/+$/g, '');\n};\n\nconst buildRelativePath = (\n absolutePath: string,\n baseSegment: string,\n): string => {\n const normalized = normalizePath(absolutePath);\n const basePrefix = baseSegment === '' ? '' : `/${baseSegment}`;\n if (basePrefix !== '' && normalized.startsWith(basePrefix)) {\n return normalized.slice(basePrefix.length).replace(/^\\/+/, '');\n }\n return normalized.replace(/^\\/+/, '');\n};\n\nconst resolveActiveEntityIdFromRoute = (\n route: { routes: AnyRoute[] } | null,\n routeEntityIdMap: WeakMap<AnyRoute, string>,\n): string | null => {\n if (route?.routes == null) {\n return null;\n }\n for (let index = route.routes.length - 1; index >= 0; index -= 1) {\n const routeEntry = route.routes[index];\n if (routeEntry != null) {\n const entityId = routeEntityIdMap.get(routeEntry);\n if (entityId != null) {\n return entityId;\n }\n }\n }\n return null;\n};\n\nconst toSearchParams = (query: Record<string, unknown>): URLSearchParams => {\n const params = new URLSearchParams();\n Object.entries(query).forEach(([key, value]) => {\n if (value == null) {\n return;\n }\n if (Array.isArray(value)) {\n value.forEach((entry) => {\n if (entry == null) {\n return;\n }\n params.append(key, String(entry));\n });\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n params.set(key, String(value));\n });\n return params;\n};\n\nconst resolveDetailPageManifestByPath = (\n entityManifestItem: BackofficeEntityManifestItem,\n rawPagePath: string,\n): BackofficeDetailPageManifestItem | null => {\n const pagePath = normalizePagePath(rawPagePath);\n return (\n entityManifestItem.detailPages?.find((page) => {\n return normalizePagePath(page.pathSegment) === pagePath;\n }) ?? null\n );\n};\n\nconst resolveDetailPageIdForPath = (\n entityManifestItem: BackofficeEntityManifestItem,\n rawPagePath: string,\n): string => {\n return (\n resolveDetailPageManifestByPath(entityManifestItem, rawPagePath)?.id ??\n rawPagePath\n );\n};\n\nconst rBackoffice = r<BackofficeRouterContext>;\n\n/**\n * Creates backoffice routes based on the provided configuration\n */\nexport function createBackofficeRoutes(\n input: CreateBackofficeRoutesInput,\n): Route<BackofficeRouterContext, any>[] {\n const { basePath, entityManifest, entityRegistry, sidebar, auth, dashboard } =\n input;\n const dashboards = validateBackofficeDashboardRegistrations(input.dashboards);\n const baseSegment = normalizeBaseSegment(basePath);\n const loginPath = buildScopedPath(baseSegment, 'login');\n const passwordResetRequestPath = buildScopedPath(baseSegment, 'login/reset');\n const passwordResetCompletePath = buildScopedPath(\n baseSegment,\n 'login/reset/complete',\n );\n const verifyEmailPath = buildScopedPath(baseSegment, 'verify-email');\n const acceptInvitationPath = buildScopedPath(\n baseSegment,\n 'accept-invitation',\n );\n const loginRedirectPath = buildScopedAbsolutePath(baseSegment, 'login');\n const entities = entityManifest;\n const groups = resolveSidebarGroups(entities, sidebar);\n const hubEntries = resolveSidebarHubEntries(groups, sidebar);\n const entityGroupLookup = buildEntityGroupLookup(groups, sidebar);\n const entityIdToGroupId = new Map<string, string>();\n entityGroupLookup.forEach((value, entityId) => {\n entityIdToGroupId.set(entityId, value.groupId);\n });\n const routeEntityIdMap = new WeakMap<AnyRoute, string>();\n const routeGroupIdMap = new WeakMap<AnyRoute, string>();\n\n const permissionsQuery = sidebar?.permissionsQuery;\n const layoutPrepare = async ({\n context,\n }: {\n context: BackofficeRouterContext;\n }) => {\n const sessionAuth = await auth.session.load();\n const permissionsQueryRef =\n permissionsQuery != null\n ? loadQuery<OperationType>(\n context.relayEnvironment,\n permissionsQuery,\n {},\n )\n : null;\n const authStatusQueryRef =\n sessionAuth.authStatusQuery != null\n ? loadQuery<OperationType>(\n context.relayEnvironment,\n sessionAuth.authStatusQuery,\n {},\n { fetchPolicy: 'network-only' },\n )\n : null;\n return {\n permissionsQuery: permissionsQueryRef,\n authStatusQuery: authStatusQueryRef,\n };\n };\n\n const prepareRootDashboard =\n async (): Promise<BackofficePreparedDashboardRoute | null> => {\n if (dashboard == null) {\n return null;\n }\n const config = await dashboard.load();\n return {\n dashboardId: 'dashboard',\n config,\n };\n };\n const prepareRootDashboardShell =\n (): BackofficePreparedDashboardShellRoute | null => {\n if (dashboard == null) {\n return null;\n }\n return {\n dashboardId: 'dashboard',\n };\n };\n const renderDashboard = ({\n prepared,\n Component,\n }: {\n prepared: unknown;\n Component?: ComponentType<Record<string, unknown>> | null;\n }): JSX.Element | null => {\n if (Component == null) {\n return null;\n }\n const DashboardComponent = Component as ComponentType<{\n prepared?: unknown;\n }>;\n return <DashboardComponent prepared={prepared} />;\n };\n const renderDashboardShell = ({\n children: dashboardChildren,\n prepared,\n Component,\n }: {\n children: ReactNode;\n prepared: unknown;\n Component?: ComponentType<Record<string, unknown>> | null;\n }): JSX.Element | null => {\n if (Component == null) {\n return null;\n }\n const DashboardShellComponent = Component as ComponentType<{\n children?: ReactNode;\n prepared?: BackofficePreparedDashboardShellRoute | null;\n }>;\n return (\n <DashboardShellComponent\n prepared={prepared as BackofficePreparedDashboardShellRoute | null}\n >\n {dashboardChildren}\n </DashboardShellComponent>\n );\n };\n\n const dashboardConfigRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardPageResource,\n prepare: prepareRootDashboard,\n render: renderDashboard,\n });\n const dashboardRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardShellPageResource,\n prepare: prepareRootDashboardShell,\n render: renderDashboardShell,\n children: [dashboardConfigRoute],\n });\n const dashboardAliasConfigRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardPageResource,\n prepare: prepareRootDashboard,\n render: renderDashboard,\n });\n const dashboardAliasRoute = rBackoffice({\n path: 'dashboard',\n resourcePage: BackofficeDashboardShellPageResource,\n prepare: prepareRootDashboardShell,\n render: renderDashboardShell,\n children: [dashboardAliasConfigRoute],\n });\n const secondaryDashboardRoutes = dashboards.map((registration) => {\n const dashboardConfigChildRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeDashboardPageResource,\n prepare: async () => {\n const config = await registration.module.load();\n return {\n dashboardId: registration.id,\n label: registration.label,\n config,\n } satisfies BackofficePreparedDashboardRoute;\n },\n render: renderDashboard,\n });\n return rBackoffice({\n path: `dashboard/${registration.id}`,\n resourcePage: BackofficeDashboardShellPageResource,\n prepare: () => {\n return {\n dashboardId: registration.id,\n label: registration.label,\n } satisfies BackofficePreparedDashboardShellRoute;\n },\n render: renderDashboardShell,\n children: [dashboardConfigChildRoute],\n });\n });\n\n const listEntityEntries = Object.values(entityManifest).filter((entity) => {\n return entity.kind === 'list-detail';\n });\n\n const hubRoutes = hubEntries.map((entry) => {\n const hubRelative = buildRelativePath(entry.hub.href, baseSegment);\n const hubRoute = rBackoffice({\n path: hubRelative,\n resourcePage: BackofficeHubPageResource,\n prepare: () => {\n return {\n hubId: entry.hub.id,\n hub: entry.hub,\n } satisfies BackofficePreparedHubRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component prepared={prepared} />;\n },\n });\n if (entry.groupId != null) {\n routeGroupIdMap.set(hubRoute, entry.groupId);\n }\n return hubRoute;\n });\n\n const entityRoutes = listEntityEntries.map((entityManifestItem) => {\n const listPath = entityManifestItem.routes.list;\n const listRelative = buildRelativePath(listPath, baseSegment);\n const children: Route<any, any>[] = [];\n const renderDetailRouteFallback = ({\n match,\n }: RouteFallbackArgs<BackofficeRouterContext>): JSX.Element => {\n const rawId = String(match?.params.id ?? '');\n const rawPagePath =\n typeof match?.params.pagePath === 'string'\n ? match.params.pagePath\n : null;\n const pageId =\n rawPagePath == null\n ? (entityManifestItem.defaultDetailPageId ?? 'overview')\n : resolveDetailPageIdForPath(entityManifestItem, rawPagePath);\n return (\n <BackofficeEntityDetailManifestFallback\n entityManifest={entityManifestItem}\n id={rawId}\n pageId={pageId}\n pagePath={rawPagePath}\n />\n );\n };\n\n if (entityManifestItem.hasList) {\n const listDataRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityListDataPageResource,\n prepareSearchBehavior: 'path',\n prepare: async ({ context, query }) => {\n const entityModule = await entityRegistry.loadListEntity(\n entityManifestItem.id,\n );\n const { config } = entityModule;\n const { list, listUrlCodec, listDefaults } = config;\n if (listUrlCodec == null || listDefaults == null) {\n throw new Error(\n `Backoffice entity ${entityManifestItem.id} does not expose a list configuration.`,\n );\n }\n const params = toSearchParams(query);\n const state = listUrlCodec.parse(params);\n const { pageSize } = BACKOFFICE_LIST_DEFAULTS;\n const variablesBase = {\n where: state.where,\n sort: state.sort ?? listDefaults.sort,\n count: pageSize,\n cursor: null,\n };\n const variables = list.buildQueryVariables(variablesBase);\n const queryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n list.query,\n variables,\n );\n const prepared: BackofficePreparedListDataRoute = {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: config,\n query: queryRef,\n };\n return prepared;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedListDataRoute;\n return <Component prepared={preparedRoute} />;\n },\n });\n routeEntityIdMap.set(listDataRoute, entityManifestItem.id);\n\n const listRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityListPageResource,\n prepareSearchBehavior: 'path',\n prepare: async () => {\n const entityModule = await entityRegistry.loadListEntity(\n entityManifestItem.id,\n );\n const { config } = entityModule;\n const { listUrlCodec, listDefaults } = config;\n if (listUrlCodec == null || listDefaults == null) {\n throw new Error(\n `Backoffice entity ${entityManifestItem.id} does not expose a list configuration.`,\n );\n }\n const prepared: BackofficePreparedListLayoutRoute = {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: config,\n };\n return prepared;\n },\n render: ({ children: listChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedListLayoutRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n config={preparedRoute.entityConfig}\n prepared={preparedRoute}\n >\n {listChildren}\n </Component>\n );\n },\n children: [listDataRoute],\n });\n routeEntityIdMap.set(listRoute, entityManifestItem.id);\n\n const listShellRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityListShellPageResource,\n prepareSearchBehavior: 'path',\n prepare: () => {\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n } satisfies BackofficePreparedListShellRoute;\n },\n render: ({ children: listShellChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedListShellRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n prepared={preparedRoute}\n >\n {listShellChildren}\n </Component>\n );\n },\n children: [listRoute],\n });\n routeEntityIdMap.set(listShellRoute, entityManifestItem.id);\n children.push(listShellRoute);\n }\n\n const detailPageRoutes = (entityManifestItem.detailPages ?? []).map(\n (pageManifest) => {\n const pageDataRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityDetailPageResource,\n suspenseBoundary: 'segment',\n fallback: renderDetailRouteFallback,\n prepare: async ({ context, variables }) => {\n const rawId = String(variables.id ?? '');\n const pageModule = await entityRegistry.loadDetailPageEntity(\n entityManifestItem.id,\n pageManifest.id,\n );\n const pageBuildResult =\n pageModule.config.page.buildVariables != null\n ? pageModule.config.page.buildVariables({\n id: rawId,\n })\n : { variables: { id: rawId } };\n const pageQueryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n pageModule.config.page.query,\n pageBuildResult.variables as Variables,\n );\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n detailId: pageBuildResult.detailId,\n id: rawId,\n pageConfig: pageModule.config,\n pageQuery: pageQueryRef,\n pageId: pageManifest.id,\n pagePath: pageManifest.pathSegment,\n } satisfies BackofficePreparedDetailPageDataRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute =\n prepared as BackofficePreparedDetailPageDataRoute;\n return <Component prepared={preparedRoute} />;\n },\n });\n routeEntityIdMap.set(pageDataRoute, entityManifestItem.id);\n\n const pageConfigRoute = rBackoffice({\n path: pageManifest.pathSegment,\n resourcePage: BackofficeEntityDetailPageConfigPageResource,\n suspenseBoundary: 'segment',\n fallback: renderDetailRouteFallback,\n prepare: async ({ variables }) => {\n const rawId = String(variables.id ?? '');\n const [pageModule, layoutModule] = await Promise.all([\n entityRegistry.loadDetailPageEntity(\n entityManifestItem.id,\n pageManifest.id,\n ),\n entityRegistry.loadDetailLayoutEntity(entityManifestItem.id),\n ]);\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: layoutModule.config,\n id: rawId,\n pageConfig: pageModule.config,\n pageId: pageManifest.id,\n pagePath: pageManifest.pathSegment,\n } satisfies BackofficePreparedDetailPageConfigRoute;\n },\n render: ({ children: pageChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute =\n prepared as BackofficePreparedDetailPageConfigRoute;\n return (\n <Component\n config={preparedRoute.entityConfig}\n prepared={preparedRoute}\n >\n {pageChildren}\n </Component>\n );\n },\n children: [pageDataRoute],\n });\n routeEntityIdMap.set(pageConfigRoute, entityManifestItem.id);\n return pageConfigRoute;\n },\n );\n\n const detailLayoutDataRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityDetailLayoutPageResource,\n suspenseBoundary: 'segment',\n fallback: renderDetailRouteFallback,\n prepare: async ({ context, variables }) => {\n const entityModule = await entityRegistry.loadDetailLayoutEntity(\n entityManifestItem.id,\n );\n const { config } = entityModule;\n const rawId = String(variables.id ?? '');\n const layoutBuildResult =\n config.layoutPage.buildVariables != null\n ? config.layoutPage.buildVariables({\n id: rawId,\n })\n : { variables: { id: rawId } };\n const layoutQueryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n config.layoutPage.query,\n layoutBuildResult.variables as Variables,\n );\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: config,\n layoutQuery: layoutQueryRef,\n id: rawId,\n } satisfies BackofficePreparedDetailLayoutDataRoute;\n },\n render: ({ children: detailChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute =\n prepared as BackofficePreparedDetailLayoutDataRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n config={preparedRoute.entityConfig}\n prepared={preparedRoute}\n >\n {detailChildren}\n </Component>\n );\n },\n children: [\n rBackoffice({\n path: '',\n resourcePage: WrapperPageResource,\n prepare: ({ variables }) => {\n const rawId = String(variables.id ?? '').trim();\n return {\n redirectTo:\n rawId === ''\n ? null\n : entityManifestItem.routes.detailPage(\n rawId,\n entityManifestItem.defaultDetailPageId ?? 'overview',\n ),\n };\n },\n render: ({ prepared }) => {\n const redirectTo =\n (prepared as { redirectTo?: string | null }).redirectTo ?? null;\n if (redirectTo == null) {\n return null;\n }\n return <BackofficeHistoryRedirect pathname={redirectTo} />;\n },\n }),\n ...detailPageRoutes,\n rBackoffice({\n path: ':pagePath',\n resourcePage: BackofficeEntityDetailUnknownPageRedirectResource,\n suspenseBoundary: 'segment',\n fallback: renderDetailRouteFallback,\n prepare: async ({ variables }) => {\n const entityModule = await entityRegistry.loadDetailLayoutEntity(\n entityManifestItem.id,\n );\n const rawId = String(variables.id ?? '');\n const rawPagePath = String(variables.pagePath ?? '');\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n entityConfig: entityModule.config,\n id: rawId,\n pagePath: rawPagePath,\n } satisfies BackofficePreparedDetailUnknownPageRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedDetail =\n prepared as BackofficePreparedDetailUnknownPageRoute;\n return (\n <Component\n entityManifest={preparedDetail.entityManifest}\n config={preparedDetail.entityConfig}\n prepared={preparedDetail}\n />\n );\n },\n }),\n ],\n });\n routeEntityIdMap.set(detailLayoutDataRoute, entityManifestItem.id);\n\n const detailShellRoute = rBackoffice({\n path: '',\n resourcePage: BackofficeEntityDetailShellPageResource,\n suspenseBoundary: 'segment',\n fallback: renderDetailRouteFallback,\n prepare: ({ variables }) => {\n const rawId = String(variables.id ?? '');\n const rawPagePath =\n typeof variables.pagePath === 'string' ? variables.pagePath : null;\n const pageId =\n rawPagePath == null\n ? (entityManifestItem.defaultDetailPageId ?? 'overview')\n : resolveDetailPageIdForPath(entityManifestItem, rawPagePath);\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n id: rawId,\n pageId,\n pagePath: rawPagePath,\n } satisfies BackofficePreparedDetailShellRoute;\n },\n render: ({ children: shellChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedDetailShellRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n prepared={preparedRoute}\n >\n {shellChildren}\n </Component>\n );\n },\n children: [detailLayoutDataRoute],\n });\n routeEntityIdMap.set(detailShellRoute, entityManifestItem.id);\n\n const detailFrameRoute = rBackoffice({\n path: ':id',\n resourcePage: BackofficeEntityDetailFramePageResource,\n suspenseBoundary: 'segment',\n fallback: renderDetailRouteFallback,\n prepare: ({ variables }) => {\n const rawId = String(variables.id ?? '');\n return {\n entityId: entityManifestItem.id,\n entityManifest: entityManifestItem,\n id: rawId,\n } satisfies BackofficePreparedDetailFrameRoute;\n },\n render: ({ children: detailChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedRoute = prepared as BackofficePreparedDetailFrameRoute;\n return (\n <Component\n entityManifest={preparedRoute.entityManifest}\n prepared={preparedRoute}\n >\n {detailChildren}\n </Component>\n );\n },\n children: [detailShellRoute],\n });\n routeEntityIdMap.set(detailFrameRoute, entityManifestItem.id);\n children.push(detailFrameRoute);\n\n return rBackoffice({\n path: listRelative,\n children,\n resourcePage: WrapperPageResource,\n suspenseBoundary: 'segment',\n });\n });\n\n const toolsRoutes = Object.values(entityManifest)\n .filter((entity) => {\n return entity.kind === 'tool';\n })\n .map((toolManifest) => {\n const toolRelative = buildRelativePath(\n toolManifest.routes.list,\n baseSegment,\n );\n const toolConfigRoute = rBackoffice({\n path: '',\n resourcePage: input.toolsOperationPage ?? null,\n prepare: async () => {\n const toolModule = await entityRegistry.loadToolEntity(\n toolManifest.id,\n );\n return {\n entityId: toolManifest.id,\n entityManifest: toolManifest,\n entityConfig: toolModule.config,\n } satisfies BackofficePreparedToolConfigRoute;\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedTool = prepared as BackofficePreparedToolConfigRoute;\n return (\n <Component\n entityManifest={preparedTool.entityManifest}\n operation={preparedTool.entityConfig.tool.operation}\n toolId={preparedTool.entityConfig.id}\n />\n );\n },\n });\n routeEntityIdMap.set(toolConfigRoute, toolManifest.id);\n\n const toolRoute = rBackoffice({\n path: toolRelative,\n resourcePage: BackofficeToolShellPageResource,\n prepare: () => {\n return {\n entityId: toolManifest.id,\n entityManifest: toolManifest,\n } satisfies BackofficePreparedToolRoute;\n },\n render: ({ children: toolChildren, prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedTool = prepared as BackofficePreparedToolRoute;\n return (\n <Component\n entityManifest={preparedTool.entityManifest}\n prepared={preparedTool}\n >\n {toolChildren}\n </Component>\n );\n },\n children: [toolConfigRoute],\n });\n routeEntityIdMap.set(toolRoute, toolManifest.id);\n return toolRoute;\n });\n\n const layoutRoute = rBackoffice({\n path: baseSegment,\n resourcePage: BackofficeLayoutPageResource,\n prepareSearchBehavior: 'path',\n suspenseBoundary: 'segment',\n prepare: layoutPrepare,\n render: ({ children, prepared, route, Component }) => {\n if (Component == null) {\n return null;\n }\n const preparedLayout = prepared as PreparedLayout | undefined;\n const activeEntityId = resolveActiveEntityIdFromRoute(\n route,\n routeEntityIdMap,\n );\n const activeGroupId =\n activeEntityId != null\n ? (entityIdToGroupId.get(activeEntityId) ?? null)\n : resolveActiveEntityIdFromRoute(route, routeGroupIdMap);\n const LayoutComponent = Component as LayoutRouteComponent;\n const authStatusQuery = auth.session.get()?.authStatusQuery ?? null;\n if (authStatusQuery != null && preparedLayout?.authStatusQuery != null) {\n return (\n <BackofficeLayoutRouteWithAuthStatus\n Component={LayoutComponent}\n preparedLayout={preparedLayout}\n permissionsQuery={sidebar?.permissionsQuery}\n activeGroupId={activeGroupId}\n authStatusQuery={authStatusQuery}\n authStatusPrepared={preparedLayout.authStatusQuery}\n loginRedirectPath={loginRedirectPath}\n >\n {children}\n </BackofficeLayoutRouteWithAuthStatus>\n );\n }\n return (\n <BackofficeLayoutRouteWithoutAuthStatus\n Component={LayoutComponent}\n preparedLayout={preparedLayout}\n permissionsQuery={sidebar?.permissionsQuery}\n activeGroupId={activeGroupId}\n >\n {children}\n </BackofficeLayoutRouteWithoutAuthStatus>\n );\n },\n children: [\n dashboardRoute,\n ...hubRoutes,\n ...entityRoutes,\n ...toolsRoutes,\n ...secondaryDashboardRoutes,\n dashboardAliasRoute,\n ],\n });\n\n const routes: Route<BackofficeRouterContext, any>[] = [\n rBackoffice({\n path: loginPath,\n resourcePage: BackofficeLoginPageResource,\n prepare: async ({ context }) => {\n const loginAuth = await auth.login.load();\n const queryRef = loadQuery<OperationType>(\n context.relayEnvironment,\n loginAuth.loginQuery,\n {},\n );\n return { query: queryRef };\n },\n render: ({ prepared, Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component prepared={prepared} />;\n },\n }),\n rBackoffice({\n path: passwordResetRequestPath,\n resourcePage: BackofficePasswordResetRequestPageResource,\n prepare: async () => {\n await auth.passwordResetRequest.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n rBackoffice({\n path: passwordResetCompletePath,\n resourcePage: BackofficePasswordResetCompletePageResource,\n prepare: async () => {\n await auth.passwordResetComplete.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n rBackoffice({\n path: verifyEmailPath,\n resourcePage: BackofficeVerifyEmailPageResource,\n prepare: async () => {\n await auth.verifyEmail.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n ];\n\n if (auth.hasAcceptInvitation === true || auth.acceptInvitation != null) {\n routes.push(\n rBackoffice({\n path: acceptInvitationPath,\n resourcePage: BackofficeAcceptInvitationPageResource,\n prepare: async () => {\n await auth.acceptInvitation?.load();\n return null;\n },\n render: ({ Component }) => {\n if (Component == null) {\n return null;\n }\n return <Component />;\n },\n }),\n );\n }\n\n routes.push(layoutRoute);\n\n return routes;\n}\n\nexport const __test = {\n normalizeBaseSegment,\n normalizePath,\n buildScopedPath,\n buildScopedAbsolutePath,\n buildRelativePath,\n resolveActiveEntityIdFromRoute,\n resolveDetailPageIdForPath,\n resolveDetailPageManifestByPath,\n toSearchParams,\n validateBackofficeDashboardRegistrations,\n BackofficeLayoutRouteWithAuthStatus,\n} as const;\n\nexport default createBackofficeRoutes;\n"],"mappings":";;;;;;;;;;;AAgEA,IAAM,EAAE,WAAA,GAAW,mBAAA,MAAsB,GAiB5B,IAA2C,EACtD,eAEA,aAAa,EACX,UAAU,MAAM,OAAO,qCAAqC,YAC9D,EACF,GAEa,IACX,EACE,wBAEA,YAAY,OAAO,mCACrB,GAEW,IACX,EACE,4BAEA,YAAY,OAAO,uCACrB,GAEW,IACX,EACE,iCAEA,YAAY,OAAO,4CACrB,GAEW,IACX,EACE,gCAEA,YAAY,OAAO,2CACrB,GAEW,KACX,EACE,8BAEA,YAAY,OAAO,yCACrB,GAEW,IACX,EACE,mCAEA,YAAY,OAAO,8CACrB,GAEW,IACX,EACE,oCAEA,YAAY,OAAO,+CACrB,GAEW,IACX,EACE,wCAEA,YAAY,OAAO,mDACrB,GAEW,IACX,EACE,mCAEA,YAAY,OAAO,8CACrB,GAEW,IACX,EACE,6CAEA,YAAY,OAAO,wDACrB,GAEW,IACX,EACE,2BAEA,YAAY,OAAO,sCACrB,GAEW,IACX,EACE,gCAEA,YAAY,OAAO,2CACrB,GAEW,IACX,EACE,2BAEA,YAAY,OAAO,sCACrB,GAEW,KAAiD,EAC5D,qBAEA,YAAY,OAAO,gCACrB,GAEa,KAAmD,EAC9D,uBAEA,YAAY,OAAO,kCACrB,GAEa,KACX,EACE,sCAEA,YAAY,OAAO,iDACrB,GAEW,IACX,EACE,uCAEA,YAAY,OAAO,kDACrB,GAEW,IACX,EACE,6BAEA,YAAY,OAAO,wCACrB,GAEW,IACX,EACE,kCAEA,YAAY,OAAO,6CACrB,GA4CI,KAA6B,EACjC,kBAGU;CACV,IAAM,IAAS,EAAW,CAAc;CAQxC,OANA,QAAgB;EACd,GAAQ,QAAQ,IAAI,EAClB,YACF,CAAC;CACH,GAAG,CAAC,GAAU,CAAM,CAAC,GAEd;AACT,GAEM,MAA0C,EAC9C,aACA,cACA,mBACA,qBACA,uBAGE,kBAAC,GAAD;CACoB;CAClB,UAAU,GAAgB,oBAAoB;CAC9C,YAAY;CACG;CAEd;AACQ,CAAA,GAIT,KAAuC,EAC3C,aACA,cACA,mBACA,qBACA,kBACA,oBACA,uBACA,2BAKiB;CAEjB,IAAM,IADO,EAAkB,GAAiB,CAC7B;CAMnB,OAJI,GAAY,eAAe,KAK7B,kBAAC,GAAD;EACoB;EAClB,UAAU,GAAgB,oBAAoB;EAClC;EACG;EAEd;CACQ,CAAA,IAXJ,kBAAC,GAAD,EAA2B,UAAU,EAAoB,CAAA;AAapE,GAOM,KAAwB,MAA0B;CACtD,IAAM,IAAU,EAAM,KAAK;CAI3B,OAHI,MAAY,MAAM,MAAY,MACzB,KAEF,EAAQ,QAAQ,cAAc,EAAE;AACzC,GAEM,KAAiB,MAA0B;CAC/C,IAAM,IAAU,EAAM,KAAK;CAI3B,OAHI,MAAY,KACP,MAEF,IAAI,IAAU,QAAQ,QAAQ,GAAG;AAC1C,GAEM,KAAmB,GAAqB,MAAyB;CACrE,IAAM,IAAiB,EAAK,QAAQ,cAAc,EAAE;CAOpD,OANI,MAAgB,KACX,IAEL,MAAmB,KACd,IAEF,GAAG,EAAY,GAAG;AAC3B,GAEM,KAA2B,GAAqB,MAC7C,EAAc,EAAgB,GAAa,CAAI,CAAC,GAGnD,KAAqB,MAClB,EAAM,KAAK,EAAE,QAAQ,cAAc,EAAE,GAGxC,KACJ,GACA,MACW;CACX,IAAM,IAAa,EAAc,CAAY,GACvC,IAAa,MAAgB,KAAK,KAAK,IAAI;CAIjD,OAHI,MAAe,MAAM,EAAW,WAAW,CAAU,IAChD,EAAW,MAAM,EAAW,MAAM,EAAE,QAAQ,QAAQ,EAAE,IAExD,EAAW,QAAQ,QAAQ,EAAE;AACtC,GAEM,KACJ,GACA,MACkB;CAClB,IAAI,GAAO,UAAU,MACnB,OAAO;CAET,KAAK,IAAI,IAAQ,EAAM,OAAO,SAAS,GAAG,KAAS,GAAG,KAAY;EAChE,IAAM,IAAa,EAAM,OAAO;EAChC,IAAI,KAAc,MAAM;GACtB,IAAM,IAAW,EAAiB,IAAI,CAAU;GAChD,IAAI,KAAY,MACd,OAAO;EAEX;CACF;CACA,OAAO;AACT,GAEM,KAAkB,MAAoD;CAC1E,IAAM,IAAS,IAAI,gBAAgB;CAiBnC,OAhBA,OAAO,QAAQ,CAAK,EAAE,SAAS,CAAC,GAAK,OAAW;EAC1C,SAAS,MAGb;OAAI,MAAM,QAAQ,CAAK,GAAG;IACxB,EAAM,SAAS,MAAU;KACnB,KAAS,QAGb,EAAO,OAAO,GAAK,OAAO,CAAK,CAAC;IAClC,CAAC;IACD;GACF;GAEA,EAAO,IAAI,GAAK,OAAO,CAAK,CAAC;EAF7B;CAGF,CAAC,GACM;AACT,GAEM,KACJ,GACA,MAC4C;CAC5C,IAAM,IAAW,EAAkB,CAAW;CAC9C,OACE,EAAmB,aAAa,MAAM,MAC7B,EAAkB,EAAK,WAAW,MAAM,CAChD,KAAK;AAEV,GAEM,KACJ,GACA,MAGE,EAAgC,GAAoB,CAAW,GAAG,MAClE,GAIE,IAAc;AAKpB,SAAgB,EACd,GACuC;CACvC,IAAM,EAAE,aAAU,mBAAgB,mBAAgB,YAAS,SAAM,iBAC/D,GACI,IAAa,EAAyC,EAAM,UAAU,GACtE,IAAc,EAAqB,CAAQ,GAC3C,IAAY,EAAgB,GAAa,OAAO,GAChD,IAA2B,EAAgB,GAAa,aAAa,GACrE,IAA4B,EAChC,GACA,sBACF,GACM,KAAkB,EAAgB,GAAa,cAAc,GAC7D,KAAuB,EAC3B,GACA,mBACF,GACM,KAAoB,EAAwB,GAAa,OAAO,GAEhE,IAAS,EAAqB,GAAU,CAAO,GAC/C,KAAa,EAAyB,GAAQ,CAAO,GACrD,KAAoB,EAAuB,GAAQ,CAAO,GAC1D,oBAAoB,IAAI,IAAoB;CAClD,GAAkB,SAAS,GAAO,MAAa;EAC7C,EAAkB,IAAI,GAAU,EAAM,OAAO;CAC/C,CAAC;CACD,IAAM,oBAAmB,IAAI,QAA0B,GACjD,oBAAkB,IAAI,QAA0B,GAEhD,IAAmB,GAAS,kBAC5B,KAAgB,OAAO,EAC3B,iBAGI;EACJ,IAAM,IAAc,MAAM,EAAK,QAAQ,KAAK;EAkB5C,OAAO;GACL,kBAjBA,KAAoB,OAMhB,OALA,EACE,EAAQ,kBACR,GACA,CAAC,CACH;GAaJ,iBAVA,EAAY,mBAAmB,OAO3B,OANA,EACE,EAAQ,kBACR,EAAY,iBACZ,CAAC,GACD,EAAE,aAAa,eAAe,CAChC;EAKN;CACF,GAEM,IACJ,YACM,KAAa,OACR,OAGF;EACL,aAAa;EACb,QAAA,MAHmB,EAAU,KAAK;CAIpC,GAEE,WAEE,KAAa,OACR,OAEF,EACL,aAAa,YACf,GAEE,KAAmB,EACvB,aACA,mBAKI,KAAa,OACR,OAKF,kBAAC,GAAD,EAA8B,YAAW,CAAA,GAE5C,KAAwB,EAC5B,UAAU,GACV,aACA,mBAMI,KAAa,OACR,OAOP,kBAAC,GAAD;EACY;YAET;CACsB,CAAA,GAUvB,KAAiB,EAAY;EACjC,MAAM;EACN,cAAc;EACd,SAAS;EACT,QAAQ;EACR,UAAU,CAXiB,EAAY;GACvC,MAAM;GACN,cAAc;GACd,SAAS;GACT,QAAQ;EACV,CAMa,CAAoB;CACjC,CAAC,GAOK,KAAsB,EAAY;EACtC,MAAM;EACN,cAAc;EACd,SAAS;EACT,QAAQ;EACR,UAAU,CAXsB,EAAY;GAC5C,MAAM;GACN,cAAc;GACd,SAAS;GACT,QAAQ;EACV,CAMa,CAAyB;CACtC,CAAC,GACK,KAA2B,EAAW,KAAK,MAAiB;EAChE,IAAM,IAA4B,EAAY;GAC5C,MAAM;GACN,cAAc;GACd,SAAS,YAAY;IACnB,IAAM,IAAS,MAAM,EAAa,OAAO,KAAK;IAC9C,OAAO;KACL,aAAa,EAAa;KAC1B,OAAO,EAAa;KACpB;IACF;GACF;GACA,QAAQ;EACV,CAAC;EACD,OAAO,EAAY;GACjB,MAAM,aAAa,EAAa;GAChC,cAAc;GACd,gBACS;IACL,aAAa,EAAa;IAC1B,OAAO,EAAa;GACtB;GAEF,QAAQ;GACR,UAAU,CAAC,CAAyB;EACtC,CAAC;CACH,CAAC,GAEK,KAAoB,OAAO,OAAO,CAAc,EAAE,QAAQ,MACvD,EAAO,SAAS,aACxB,GAEK,KAAY,GAAW,KAAK,MAAU;EAE1C,IAAM,IAAW,EAAY;GAC3B,MAFkB,EAAkB,EAAM,IAAI,MAAM,CAE9C;GACN,cAAc;GACd,gBACS;IACL,OAAO,EAAM,IAAI;IACjB,KAAK,EAAM;GACb;GAEF,SAAS,EAAE,aAAU,mBACf,KAAa,OACR,OAEF,kBAAC,GAAD,EAAqB,YAAW,CAAA;EAE3C,CAAC;EAID,OAHI,EAAM,WAAW,QACnB,EAAgB,IAAI,GAAU,EAAM,OAAO,GAEtC;CACT,CAAC,GAEK,KAAe,GAAkB,KAAK,MAAuB;EACjE,IAAM,IAAW,EAAmB,OAAO,MACrC,IAAe,EAAkB,GAAU,CAAW,GACtD,IAA8B,CAAC,GAC/B,KAA6B,EACjC,eAC6D;GAC7D,IAAM,IAAQ,OAAO,GAAO,OAAO,MAAM,EAAE,GACrC,IACJ,OAAO,GAAO,OAAO,YAAa,WAC9B,EAAM,OAAO,WACb;GAKN,OACE,kBAAC,GAAD;IACE,gBAAgB;IAChB,IAAI;IACI,QAPV,KAAe,OACV,EAAmB,uBAAuB,aAC3C,EAA2B,GAAoB,CAAW;IAM5D,UAAU;GACX,CAAA;EAEL;EAEA,IAAI,EAAmB,SAAS;GAC9B,IAAM,IAAgB,EAAY;IAChC,MAAM;IACN,cAAc;IACd,uBAAuB;IACvB,SAAS,OAAO,EAAE,YAAS,eAAY;KAIrC,IAAM,EAAE,cAAW,MAHQ,EAAe,eACxC,EAAmB,EACrB,GAEM,EAAE,SAAM,iBAAc,oBAAiB;KAC7C,IAAI,KAAgB,QAAQ,KAAgB,MAC1C,MAAU,MACR,qBAAqB,EAAmB,GAAG,uCAC7C;KAEF,IAAM,IAAS,EAAe,CAAK,GAC7B,IAAQ,EAAa,MAAM,CAAM,GACjC,EAAE,gBAAa,IACf,IAAgB;MACpB,OAAO,EAAM;MACb,MAAM,EAAM,QAAQ,EAAa;MACjC,OAAO;MACP,QAAQ;KACV,GACM,IAAY,EAAK,oBAAoB,CAAa,GAClD,IAAW,EACf,EAAQ,kBACR,EAAK,OACL,CACF;KAOA,OAAO;MALL,UAAU,EAAmB;MAC7B,gBAAgB;MAChB,cAAc;MACd,OAAO;KAEF;IACT;IACA,SAAS,EAAE,aAAU,mBACf,KAAa,OACR,OAGF,kBAAC,GAAD,EAAqB,YAAgB,CAAA;GAEhD,CAAC;GACD,EAAiB,IAAI,GAAe,EAAmB,EAAE;GAEzD,IAAM,IAAY,EAAY;IAC5B,MAAM;IACN,cAAc;IACd,uBAAuB;IACvB,SAAS,YAAY;KAInB,IAAM,EAAE,cAAW,MAHQ,EAAe,eACxC,EAAmB,EACrB,GAEM,EAAE,iBAAc,oBAAiB;KACvC,IAAI,KAAgB,QAAQ,KAAgB,MAC1C,MAAU,MACR,qBAAqB,EAAmB,GAAG,uCAC7C;KAOF,OAAO;MAJL,UAAU,EAAmB;MAC7B,gBAAgB;MAChB,cAAc;KAET;IACT;IACA,SAAS,EAAE,UAAU,GAAc,aAAU,mBAAgB;KAC3D,IAAI,KAAa,MACf,OAAO;KAET,IAAM,IAAgB;KACtB,OACE,kBAAC,GAAD;MACE,gBAAgB,EAAc;MAC9B,QAAQ,EAAc;MACtB,UAAU;gBAET;KACQ,CAAA;IAEf;IACA,UAAU,CAAC,CAAa;GAC1B,CAAC;GACD,EAAiB,IAAI,GAAW,EAAmB,EAAE;GAErD,IAAM,IAAiB,EAAY;IACjC,MAAM;IACN,cAAc;IACd,uBAAuB;IACvB,gBACS;KACL,UAAU,EAAmB;KAC7B,gBAAgB;IAClB;IAEF,SAAS,EAAE,UAAU,GAAmB,aAAU,mBAAgB;KAChE,IAAI,KAAa,MACf,OAAO;KAET,IAAM,IAAgB;KACtB,OACE,kBAAC,GAAD;MACE,gBAAgB,EAAc;MAC9B,UAAU;gBAET;KACQ,CAAA;IAEf;IACA,UAAU,CAAC,CAAS;GACtB,CAAC;GAED,AADA,EAAiB,IAAI,GAAgB,EAAmB,EAAE,GAC1D,EAAS,KAAK,CAAc;EAC9B;EAEA,IAAM,KAAoB,EAAmB,eAAe,CAAC,GAAG,KAC7D,MAAiB;GAChB,IAAM,IAAgB,EAAY;IAChC,MAAM;IACN,cAAc;IACd,kBAAkB;IAClB,UAAU;IACV,SAAS,OAAO,EAAE,YAAS,mBAAgB;KACzC,IAAM,IAAQ,OAAO,EAAU,MAAM,EAAE,GACjC,IAAa,MAAM,EAAe,qBACtC,EAAmB,IACnB,EAAa,EACf,GACM,IACJ,EAAW,OAAO,KAAK,kBAAkB,OAIrC,EAAE,WAAW,EAAE,IAAI,EAAM,EAAE,IAH3B,EAAW,OAAO,KAAK,eAAe,EACpC,IAAI,EACN,CAAC,GAED,IAAe,EACnB,EAAQ,kBACR,EAAW,OAAO,KAAK,OACvB,EAAgB,SAClB;KACA,OAAO;MACL,UAAU,EAAmB;MAC7B,gBAAgB;MAChB,UAAU,EAAgB;MAC1B,IAAI;MACJ,YAAY,EAAW;MACvB,WAAW;MACX,QAAQ,EAAa;MACrB,UAAU,EAAa;KACzB;IACF;IACA,SAAS,EAAE,aAAU,mBACf,KAAa,OACR,OAIF,kBAAC,GAAD,EAAqB,YAAgB,CAAA;GAEhD,CAAC;GACD,EAAiB,IAAI,GAAe,EAAmB,EAAE;GAEzD,IAAM,IAAkB,EAAY;IAClC,MAAM,EAAa;IACnB,cAAc;IACd,kBAAkB;IAClB,UAAU;IACV,SAAS,OAAO,EAAE,mBAAgB;KAChC,IAAM,IAAQ,OAAO,EAAU,MAAM,EAAE,GACjC,CAAC,GAAY,KAAgB,MAAM,QAAQ,IAAI,CACnD,EAAe,qBACb,EAAmB,IACnB,EAAa,EACf,GACA,EAAe,uBAAuB,EAAmB,EAAE,CAC7D,CAAC;KACD,OAAO;MACL,UAAU,EAAmB;MAC7B,gBAAgB;MAChB,cAAc,EAAa;MAC3B,IAAI;MACJ,YAAY,EAAW;MACvB,QAAQ,EAAa;MACrB,UAAU,EAAa;KACzB;IACF;IACA,SAAS,EAAE,UAAU,GAAc,aAAU,mBAAgB;KAC3D,IAAI,KAAa,MACf,OAAO;KAET,IAAM,IACJ;KACF,OACE,kBAAC,GAAD;MACE,QAAQ,EAAc;MACtB,UAAU;gBAET;KACQ,CAAA;IAEf;IACA,UAAU,CAAC,CAAa;GAC1B,CAAC;GAED,OADA,EAAiB,IAAI,GAAiB,EAAmB,EAAE,GACpD;EACT,CACF,GAEM,IAAwB,EAAY;GACxC,MAAM;GACN,cAAc;GACd,kBAAkB;GAClB,UAAU;GACV,SAAS,OAAO,EAAE,YAAS,mBAAgB;IAIzC,IAAM,EAAE,cAAW,MAHQ,EAAe,uBACxC,EAAmB,EACrB,GAEM,IAAQ,OAAO,EAAU,MAAM,EAAE,GACjC,IACJ,EAAO,WAAW,kBAAkB,OAIhC,EAAE,WAAW,EAAE,IAAI,EAAM,EAAE,IAH3B,EAAO,WAAW,eAAe,EAC/B,IAAI,EACN,CAAC,GAED,IAAiB,EACrB,EAAQ,kBACR,EAAO,WAAW,OAClB,EAAkB,SACpB;IACA,OAAO;KACL,UAAU,EAAmB;KAC7B,gBAAgB;KAChB,cAAc;KACd,aAAa;KACb,IAAI;IACN;GACF;GACA,SAAS,EAAE,UAAU,GAAgB,aAAU,mBAAgB;IAC7D,IAAI,KAAa,MACf,OAAO;IAET,IAAM,IACJ;IACF,OACE,kBAAC,GAAD;KACE,gBAAgB,EAAc;KAC9B,QAAQ,EAAc;KACtB,UAAU;eAET;IACQ,CAAA;GAEf;GACA,UAAU;IACR,EAAY;KACV,MAAM;KACN,cAAc;KACd,UAAU,EAAE,mBAAgB;MAC1B,IAAM,IAAQ,OAAO,EAAU,MAAM,EAAE,EAAE,KAAK;MAC9C,OAAO,EACL,YACE,MAAU,KACN,OACA,EAAmB,OAAO,WACxB,GACA,EAAmB,uBAAuB,UAC5C,EACR;KACF;KACA,SAAS,EAAE,kBAAe;MACxB,IAAM,IACH,EAA4C,cAAc;MAI7D,OAHI,KAAc,OACT,OAEF,kBAAC,GAAD,EAA2B,UAAU,EAAa,CAAA;KAC3D;IACF,CAAC;IACD,GAAG;IACH,EAAY;KACV,MAAM;KACN,cAAc;KACd,kBAAkB;KAClB,UAAU;KACV,SAAS,OAAO,EAAE,mBAAgB;MAChC,IAAM,IAAe,MAAM,EAAe,uBACxC,EAAmB,EACrB,GACM,IAAQ,OAAO,EAAU,MAAM,EAAE,GACjC,IAAc,OAAO,EAAU,YAAY,EAAE;MACnD,OAAO;OACL,UAAU,EAAmB;OAC7B,gBAAgB;OAChB,cAAc,EAAa;OAC3B,IAAI;OACJ,UAAU;MACZ;KACF;KACA,SAAS,EAAE,aAAU,mBAAgB;MACnC,IAAI,KAAa,MACf,OAAO;MAET,IAAM,IACJ;MACF,OACE,kBAAC,GAAD;OACE,gBAAgB,EAAe;OAC/B,QAAQ,EAAe;OACvB,UAAU;MACX,CAAA;KAEL;IACF,CAAC;GACH;EACF,CAAC;EACD,EAAiB,IAAI,GAAuB,EAAmB,EAAE;EAEjE,IAAM,IAAmB,EAAY;GACnC,MAAM;GACN,cAAc;GACd,kBAAkB;GAClB,UAAU;GACV,UAAU,EAAE,mBAAgB;IAC1B,IAAM,IAAQ,OAAO,EAAU,MAAM,EAAE,GACjC,IACJ,OAAO,EAAU,YAAa,WAAW,EAAU,WAAW,MAC1D,IACJ,KAAe,OACV,EAAmB,uBAAuB,aAC3C,EAA2B,GAAoB,CAAW;IAChE,OAAO;KACL,UAAU,EAAmB;KAC7B,gBAAgB;KAChB,IAAI;KACJ;KACA,UAAU;IACZ;GACF;GACA,SAAS,EAAE,UAAU,GAAe,aAAU,mBAAgB;IAC5D,IAAI,KAAa,MACf,OAAO;IAET,IAAM,IAAgB;IACtB,OACE,kBAAC,GAAD;KACE,gBAAgB,EAAc;KAC9B,UAAU;eAET;IACQ,CAAA;GAEf;GACA,UAAU,CAAC,CAAqB;EAClC,CAAC;EACD,EAAiB,IAAI,GAAkB,EAAmB,EAAE;EAE5D,IAAM,IAAmB,EAAY;GACnC,MAAM;GACN,cAAc;GACd,kBAAkB;GAClB,UAAU;GACV,UAAU,EAAE,mBAAgB;IAC1B,IAAM,IAAQ,OAAO,EAAU,MAAM,EAAE;IACvC,OAAO;KACL,UAAU,EAAmB;KAC7B,gBAAgB;KAChB,IAAI;IACN;GACF;GACA,SAAS,EAAE,UAAU,GAAgB,aAAU,mBAAgB;IAC7D,IAAI,KAAa,MACf,OAAO;IAET,IAAM,IAAgB;IACtB,OACE,kBAAC,GAAD;KACE,gBAAgB,EAAc;KAC9B,UAAU;eAET;IACQ,CAAA;GAEf;GACA,UAAU,CAAC,CAAgB;EAC7B,CAAC;EAID,OAHA,EAAiB,IAAI,GAAkB,EAAmB,EAAE,GAC5D,EAAS,KAAK,CAAgB,GAEvB,EAAY;GACjB,MAAM;GACN;GACA,cAAc;GACd,kBAAkB;EACpB,CAAC;CACH,CAAC,GAEK,KAAc,OAAO,OAAO,CAAc,EAC7C,QAAQ,MACA,EAAO,SAAS,MACxB,EACA,KAAK,MAAiB;EACrB,IAAM,IAAe,EACnB,EAAa,OAAO,MACpB,CACF,GACM,IAAkB,EAAY;GAClC,MAAM;GACN,cAAc,EAAM,sBAAsB;GAC1C,SAAS,YAAY;IACnB,IAAM,IAAa,MAAM,EAAe,eACtC,EAAa,EACf;IACA,OAAO;KACL,UAAU,EAAa;KACvB,gBAAgB;KAChB,cAAc,EAAW;IAC3B;GACF;GACA,SAAS,EAAE,aAAU,mBAAgB;IACnC,IAAI,KAAa,MACf,OAAO;IAET,IAAM,IAAe;IACrB,OACE,kBAAC,GAAD;KACE,gBAAgB,EAAa;KAC7B,WAAW,EAAa,aAAa,KAAK;KAC1C,QAAQ,EAAa,aAAa;IACnC,CAAA;GAEL;EACF,CAAC;EACD,EAAiB,IAAI,GAAiB,EAAa,EAAE;EAErD,IAAM,IAAY,EAAY;GAC5B,MAAM;GACN,cAAc;GACd,gBACS;IACL,UAAU,EAAa;IACvB,gBAAgB;GAClB;GAEF,SAAS,EAAE,UAAU,GAAc,aAAU,mBAAgB;IAC3D,IAAI,KAAa,MACf,OAAO;IAET,IAAM,IAAe;IACrB,OACE,kBAAC,GAAD;KACE,gBAAgB,EAAa;KAC7B,UAAU;eAET;IACQ,CAAA;GAEf;GACA,UAAU,CAAC,CAAe;EAC5B,CAAC;EAED,OADA,EAAiB,IAAI,GAAW,EAAa,EAAE,GACxC;CACT,CAAC,GAEG,KAAc,EAAY;EAC9B,MAAM;EACN,cAAc;EACd,uBAAuB;EACvB,kBAAkB;EAClB,SAAS;EACT,SAAS,EAAE,aAAU,aAAU,UAAO,mBAAgB;GACpD,IAAI,KAAa,MACf,OAAO;GAET,IAAM,IAAiB,GACjB,IAAiB,EACrB,GACA,CACF,GACM,IACJ,KAAkB,OAEd,EAA+B,GAAO,CAAe,IADpD,EAAkB,IAAI,CAAc,KAAK,MAE1C,IAAkB,GAClB,IAAkB,EAAK,QAAQ,IAAI,GAAG,mBAAmB;GAgB/D,OAfI,KAAmB,QAAQ,GAAgB,mBAAmB,OAE9D,kBAAC,GAAD;IACE,WAAW;IACK;IAChB,kBAAkB,GAAS;IACZ;IACE;IACjB,oBAAoB,EAAe;IAChB;IAElB;GACkC,CAAA,IAIvC,kBAAC,IAAD;IACE,WAAW;IACK;IAChB,kBAAkB,GAAS;IACZ;IAEd;GACqC,CAAA;EAE5C;EACA,UAAU;GACR;GACA,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH;EACF;CACF,CAAC,GAEK,IAAgD;EACpD,EAAY;GACV,MAAM;GACN,cAAc;GACd,SAAS,OAAO,EAAE,iBAAc;IAC9B,IAAM,IAAY,MAAM,EAAK,MAAM,KAAK;IAMxC,OAAO,EAAE,OALQ,EACf,EAAQ,kBACR,EAAU,YACV,CAAC,CAEa,EAAS;GAC3B;GACA,SAAS,EAAE,aAAU,mBACf,KAAa,OACR,OAEF,kBAAC,GAAD,EAAqB,YAAW,CAAA;EAE3C,CAAC;EACD,EAAY;GACV,MAAM;GACN,cAAc;GACd,SAAS,aACP,MAAM,EAAK,qBAAqB,KAAK,GAC9B;GAET,SAAS,EAAE,mBACL,KAAa,OACR,OAEF,kBAAC,GAAD,CAAY,CAAA;EAEvB,CAAC;EACD,EAAY;GACV,MAAM;GACN,cAAc;GACd,SAAS,aACP,MAAM,EAAK,sBAAsB,KAAK,GAC/B;GAET,SAAS,EAAE,mBACL,KAAa,OACR,OAEF,kBAAC,GAAD,CAAY,CAAA;EAEvB,CAAC;EACD,EAAY;GACV,MAAM;GACN,cAAc;GACd,SAAS,aACP,MAAM,EAAK,YAAY,KAAK,GACrB;GAET,SAAS,EAAE,mBACL,KAAa,OACR,OAEF,kBAAC,GAAD,CAAY,CAAA;EAEvB,CAAC;CACH;CAuBA,QArBI,EAAK,wBAAwB,MAAQ,EAAK,oBAAoB,SAChE,EAAO,KACL,EAAY;EACV,MAAM;EACN,cAAc;EACd,SAAS,aACP,MAAM,EAAK,kBAAkB,KAAK,GAC3B;EAET,SAAS,EAAE,mBACL,KAAa,OACR,OAEF,kBAAC,GAAD,CAAY,CAAA;CAEvB,CAAC,CACH,GAGF,EAAO,KAAK,EAAW,GAEhB;AACT;AAEA,IAAa,IAAS;CACpB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
@@ -278,6 +278,7 @@ export declare const backofficeReactI18nResources: {
278
278
  name: string;
279
279
  rawCost: string;
280
280
  };
281
+ loadingTitle: string;
281
282
  notFound: string;
282
283
  notFoundDescription: string;
283
284
  };
@@ -752,6 +753,7 @@ export declare const backofficeReactI18nResources: {
752
753
  name: string;
753
754
  rawCost: string;
754
755
  };
756
+ loadingTitle: string;
755
757
  notFound: string;
756
758
  notFoundDescription: string;
757
759
  };
@@ -1 +1 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/i18n/resources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,SAAS,CAAC;AAI1D,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG/B,CAAC;AAEX,MAAM,MAAM,4BAA4B,GAAG,OAAO,4BAA4B,CAAC;AAsB/E,wBAAgB,gCAAgC,CAC9C,YAAY,GAAE,QAAa,GAC1B,QAAQ,CAsBV"}
1
+ {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../src/i18n/resources.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,SAAS,CAAC;AAI1D,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAG/B,CAAC;AAEX,MAAM,MAAM,4BAA4B,GAAG,OAAO,4BAA4B,CAAC;AAsB/E,wBAAgB,gCAAgC,CAC9C,YAAY,GAAE,QAAa,GAC1B,QAAQ,CAsBV"}
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailFramePage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeEntityDetailFramePage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EACV,4BAA4B,EAC5B,kCAAkC,EACnC,MAAM,mCAAmC,CAAC;AAQ3C,MAAM,MAAM,oCAAoC,GAAG;IACjD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,EAAE,kCAAkC,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,mCAAmC,GAAI,yBAGjD;IACD,cAAc,EAAE,4BAA4B,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;CACZ,KAAG,GAAG,CAAC,OAmCP,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,yCAI7C,oCAAoC,KAAG,GAAG,CAAC,OAa7C,CAAC;AAEF,eAAe,+BAA+B,CAAC"}
1
+ {"version":3,"file":"BackofficeEntityDetailFramePage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeEntityDetailFramePage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EACV,4BAA4B,EAC5B,kCAAkC,EACnC,MAAM,mCAAmC,CAAC;AAI3C,MAAM,MAAM,oCAAoC,GAAG;IACjD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,EAAE,kCAAkC,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,mCAAmC,GAAI,yBAGjD;IACD,cAAc,EAAE,4BAA4B,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;CACZ,KAAG,GAAG,CAAC,OAOP,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,yCAI7C,oCAAoC,KAAG,GAAG,CAAC,OAa7C,CAAC;AAEF,eAAe,+BAA+B,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { type JSX, type ReactNode } from 'react';
2
- import type { BackofficePreparedDetailShellRoute, BackofficeResolvedDetailLayoutFacetConfig } from '@plumile/backoffice-core/types.js';
2
+ import type { BackofficeEntityManifestItem, BackofficePreparedDetailShellRoute } from '@plumile/backoffice-core/types.js';
3
3
  export type BackofficeEntityDetailShellPageProps = {
4
- config: BackofficeResolvedDetailLayoutFacetConfig;
4
+ entityManifest: BackofficeEntityManifestItem;
5
5
  prepared: BackofficePreparedDetailShellRoute;
6
6
  children?: ReactNode;
7
7
  };
8
- export declare const BackofficeEntityDetailShellPage: ({ children, config, prepared, }: BackofficeEntityDetailShellPageProps) => JSX.Element;
8
+ export declare const BackofficeEntityDetailShellPage: ({ children, entityManifest, prepared, }: BackofficeEntityDetailShellPageProps) => JSX.Element;
9
9
  export default BackofficeEntityDetailShellPage;
10
10
  //# sourceMappingURL=BackofficeEntityDetailShellPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeEntityDetailShellPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeEntityDetailShellPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAEV,kCAAkC,EAClC,yCAAyC,EAC1C,MAAM,mCAAmC,CAAC;AAW3C,MAAM,MAAM,oCAAoC,GAAG;IACjD,MAAM,EAAE,yCAAyC,CAAC;IAClD,QAAQ,EAAE,kCAAkC,CAAC;IAC7C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAuKF,eAAO,MAAM,+BAA+B,GAAI,iCAI7C,oCAAoC,KAAG,GAAG,CAAC,OAa7C,CAAC;AAEF,eAAe,+BAA+B,CAAC"}
1
+ {"version":3,"file":"BackofficeEntityDetailShellPage.d.ts","sourceRoot":"","sources":["../../../src/pages/BackofficeEntityDetailShellPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EACV,4BAA4B,EAC5B,kCAAkC,EACnC,MAAM,mCAAmC,CAAC;AAI3C,MAAM,MAAM,oCAAoC,GAAG;IACjD,cAAc,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,EAAE,kCAAkC,CAAC;IAC7C,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,+BAA+B,GAAI,yCAI7C,oCAAoC,KAAG,GAAG,CAAC,OAe7C,CAAC;AAEF,eAAe,+BAA+B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { type JSX } from 'react';
2
+ import type { BackofficeEntityManifestItem } from '@plumile/backoffice-core/types.js';
3
+ export type BackofficeEntityDetailManifestFallbackProps = {
4
+ entityManifest: BackofficeEntityManifestItem;
5
+ id: string;
6
+ pageId?: string | null;
7
+ pagePath?: string | null;
8
+ };
9
+ export declare const BackofficeEntityDetailManifestFallback: ({ entityManifest, id, pageId, pagePath, }: BackofficeEntityDetailManifestFallbackProps) => JSX.Element;
10
+ //# sourceMappingURL=BackofficeEntityDetailManifestFallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackofficeEntityDetailManifestFallback.d.ts","sourceRoot":"","sources":["../../../../src/pages/detail/BackofficeEntityDetailManifestFallback.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAIjC,OAAO,KAAK,EAEV,4BAA4B,EAC7B,MAAM,mCAAmC,CAAC;AAU3C,MAAM,MAAM,2CAA2C,GAAG;IACxD,cAAc,EAAE,4BAA4B,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAwDF,eAAO,MAAM,sCAAsC,GAAI,2CAKpD,2CAA2C,KAAG,GAAG,CAAC,OAyFpD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createBackofficeRoutes.d.ts","sourceRoot":"","sources":["../../../src/router/createBackofficeRoutes.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createBackofficeRoutes.d.ts","sourceRoot":"","sources":["../../../src/router/createBackofficeRoutes.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,GAAG,EACR,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,KAAK,EAEX,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,aAAa,EAEd,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,yBAAyB,EACzB,gCAAgC,EAChC,4BAA4B,EAC5B,2BAA2B,EAC3B,SAAS,EAYV,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EACV,oBAAoB,EACpB,+BAA+B,EAC/B,yBAAyB,EACzB,kCAAkC,EAClC,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAM9E,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,2BAA2B,CAAC;IAC5C,cAAc,EAAE,wBAAwB,CAAC;IACzC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAClC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,UAAU,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAC;IACxD,kBAAkB,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,gBAAgB,EAAE,WAAW,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,YAAY,GAAG,IAMhD,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,YAAY,GAAG,IAKvD,CAAC;AAEJ,eAAO,MAAM,gCAAgC,EAAE,YAAY,GAAG,IAK3D,CAAC;AAEJ,eAAO,MAAM,qCAAqC,EAAE,YAAY,GAAG,IAKhE,CAAC;AAEJ,eAAO,MAAM,oCAAoC,EAAE,YAAY,GAAG,IAK/D,CAAC;AAEJ,eAAO,MAAM,kCAAkC,EAAE,YAAY,GAAG,IAK7D,CAAC;AAEJ,eAAO,MAAM,uCAAuC,EAAE,YAAY,GAAG,IAKlE,CAAC;AAEJ,eAAO,MAAM,wCAAwC,EAAE,YAAY,GAAG,IAKnE,CAAC;AAEJ,eAAO,MAAM,4CAA4C,EAAE,YAAY,GAAG,IAKvE,CAAC;AAEJ,eAAO,MAAM,uCAAuC,EAAE,YAAY,GAAG,IAKlE,CAAC;AAEJ,eAAO,MAAM,iDAAiD,EAAE,YAAY,GAAG,IAK5E,CAAC;AAEJ,eAAO,MAAM,+BAA+B,EAAE,YAAY,GAAG,IAK1D,CAAC;AAEJ,eAAO,MAAM,oCAAoC,EAAE,YAAY,GAAG,IAK/D,CAAC;AAEJ,eAAO,MAAM,+BAA+B,EAAE,YAAY,GAAG,IAK1D,CAAC;AAEJ,eAAO,MAAM,yBAAyB,EAAE,YAAY,GAAG,IAItD,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,YAAY,GAAG,IAIxD,CAAC;AAEF,eAAO,MAAM,0CAA0C,EAAE,YAAY,GAAG,IAKrE,CAAC;AAEJ,eAAO,MAAM,2CAA2C,EAAE,YAAY,GAAG,IAKtE,CAAC;AAEJ,eAAO,MAAM,iCAAiC,EAAE,YAAY,GAAG,IAK5D,CAAC;AAEJ,eAAO,MAAM,sCAAsC,EAAE,YAAY,GAAG,IAKjE,CAAC;AAEJ,KAAK,cAAc,GAAG;IACpB,gBAAgB,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACvD,eAAe,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,qCAAqC,GAAG;IAClD,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAC1C,qCAAqC,GAAG;IACtC,MAAM,EAAE,yBAAyB,CAAC;CACnC,CAAC;AAEJ,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,EAAE,CAAC,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,IAAI,CAAC;CACV,GAAG,IAAI,CAAC;AAET,KAAK,oBAAoB,GAAG,aAAa,CAAC;IACxC,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IAChD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC,CAAC;AAEH,KAAK,sBAAsB,GAAG;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,oBAAoB,CAAC;IAChC,cAAc,EAAE,cAAc,GAAG,SAAS,CAAC;IAC3C,gBAAgB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAChD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAsEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,kCAAkC,CAAC;CACzC,CAAC;AAoHF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,EAAE,CAq0BvC;AAED,eAAO,MAAM,MAAM;2CA37BkB,MAAM,KAAG,MAAM;oCAQtB,MAAM,KAAG,MAAM;4CAQP,MAAM,QAAQ,MAAM,KAAG,MAAM;oDAWrB,MAAM,QAAQ,MAAM,KAAG,MAAM;+CAS3D,MAAM,eACP,MAAM,KAClB,MAAM;qDAUA;QAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;KAAE,GAAG,IAAI,oBAClB,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,KAC1C,MAAM,GAAG,IAAI;8DAkDM,4BAA4B,eACnC,MAAM,KAClB,MAAM;mEAda,4BAA4B,eACnC,MAAM,KAClB,gCAAgC,GAAG,IAAI;qCAxBX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,eAAe;;sLA/FrE,sBAAsB,GAAG;QAC1B,eAAe,EAAE,iBAAiB,CAAC;QACnC,kBAAkB,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;QAClD,iBAAiB,EAAE,MAAM,CAAC;KAC3B,KAAG,GAAG,CAAC,OAAO;CAg+BL,CAAC;AAEX,eAAe,sBAAsB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumile/backoffice-react",
3
- "version": "0.1.183",
3
+ "version": "0.1.184",
4
4
  "description": "React provider and pages for Kronex backoffice",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -179,12 +179,12 @@
179
179
  "tslib": "^2.8.1"
180
180
  },
181
181
  "devDependencies": {
182
- "@plumile/auth": "^0.1.183",
183
- "@plumile/backoffice-core": "^0.1.183",
184
- "@plumile/filter-query": "^0.1.183",
185
- "@plumile/relay": "^0.1.183",
186
- "@plumile/router": "^0.1.183",
187
- "@plumile/ui": "^0.1.183",
182
+ "@plumile/auth": "^0.1.184",
183
+ "@plumile/backoffice-core": "^0.1.184",
184
+ "@plumile/filter-query": "^0.1.184",
185
+ "@plumile/relay": "^0.1.184",
186
+ "@plumile/router": "^0.1.184",
187
+ "@plumile/ui": "^0.1.184",
188
188
  "@types/react": "19.2.17",
189
189
  "@types/react-dom": "19.2.3",
190
190
  "@types/relay-runtime": "20.1.1",
@@ -197,12 +197,12 @@
197
197
  "typescript": "6.0.3"
198
198
  },
199
199
  "peerDependencies": {
200
- "@plumile/auth": "^0.1.182",
201
- "@plumile/backoffice-core": "^0.1.182",
202
- "@plumile/filter-query": "^0.1.182",
203
- "@plumile/relay": "^0.1.182",
204
- "@plumile/router": "^0.1.182",
205
- "@plumile/ui": "^0.1.182",
200
+ "@plumile/auth": "^0.1.183",
201
+ "@plumile/backoffice-core": "^0.1.183",
202
+ "@plumile/filter-query": "^0.1.183",
203
+ "@plumile/relay": "^0.1.183",
204
+ "@plumile/router": "^0.1.183",
205
+ "@plumile/ui": "^0.1.183",
206
206
  "i18next": "^26.3.1",
207
207
  "react": "^19.2.7",
208
208
  "react-dom": "^19.2.7",