@burdenoff/microfe-adaptercloud 2026.716.1 → 2026.720.2

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 (48) hide show
  1. package/dist/adaptercloud/AdapterCloudRoot.js.map +1 -1
  2. package/dist/adaptercloud/AdapterCloudRoutes.js.map +1 -1
  3. package/dist/adaptercloud/components/ConfirmDialog.js.map +1 -1
  4. package/dist/adaptercloud/components/DataState.js.map +1 -1
  5. package/dist/adaptercloud/components/EmptyState.js.map +1 -1
  6. package/dist/adaptercloud/components/MetricsCard.js.map +1 -1
  7. package/dist/adaptercloud/components/PageLayout.js.map +1 -1
  8. package/dist/adaptercloud/components/SeverityBadge.js.map +1 -1
  9. package/dist/adaptercloud/components/StatusBadge.js.map +1 -1
  10. package/dist/adaptercloud/components/viz/BarChart.js.map +1 -1
  11. package/dist/adaptercloud/components/viz/Sparkline.js.map +1 -1
  12. package/dist/adaptercloud/components/viz/TopologyGraph.js +5 -5
  13. package/dist/adaptercloud/components/viz/TopologyGraph.js.map +1 -1
  14. package/dist/adaptercloud/context/AdapterCloudContext.js.map +1 -1
  15. package/dist/adaptercloud/hooks/useAdapterCloudApi.d.ts.map +1 -1
  16. package/dist/adaptercloud/hooks/useAdapterCloudApi.js +8 -4
  17. package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -1
  18. package/dist/adaptercloud/lib/toast.js.map +1 -1
  19. package/dist/adaptercloud/pages/OverviewPage.js.map +1 -1
  20. package/dist/adaptercloud/pages/adapters/AdapterDetailPage.js.map +1 -1
  21. package/dist/adaptercloud/pages/adapters/AdapterFormPage.js.map +1 -1
  22. package/dist/adaptercloud/pages/adapters/AdaptersListPage.js.map +1 -1
  23. package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js.map +1 -1
  24. package/dist/adaptercloud/pages/connections/ConnectionFormPage.js.map +1 -1
  25. package/dist/adaptercloud/pages/connections/ConnectionsListPage.js.map +1 -1
  26. package/dist/adaptercloud/pages/costs/CostsPage.js.map +1 -1
  27. package/dist/adaptercloud/pages/drift/DriftListPage.js.map +1 -1
  28. package/dist/adaptercloud/pages/policies/PoliciesListPage.js.map +1 -1
  29. package/dist/adaptercloud/pages/policies/PolicyDetailPage.js.map +1 -1
  30. package/dist/adaptercloud/pages/policies/PolicyFormPage.js.map +1 -1
  31. package/dist/adaptercloud/pages/resources/ResourceDetailPage.js.map +1 -1
  32. package/dist/adaptercloud/pages/resources/ResourcesListPage.js.map +1 -1
  33. package/dist/adaptercloud/pages/sync-runs/SyncRunsListPage.js.map +1 -1
  34. package/dist/adaptercloud/pages/topology/TopologyPage.js.map +1 -1
  35. package/dist/adaptercloud/pages/violations/ViolationsListPage.js.map +1 -1
  36. package/dist/adaptercloud/store/adaptercloudStore.js.map +1 -1
  37. package/dist/adaptercloud/types/index.d.ts +4 -0
  38. package/dist/adaptercloud/types/index.d.ts.map +1 -1
  39. package/dist/adaptercloud/utils/cn.js.map +1 -1
  40. package/dist/adaptercloud/utils/domain.js.map +1 -1
  41. package/dist/adaptercloud/utils/formatters.js.map +1 -1
  42. package/dist/adaptercloud/utils/navigation.js.map +1 -1
  43. package/dist/node_modules/clsx/dist/clsx.js.map +1 -1
  44. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +1 -1
  45. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
  46. package/dist/services/createSandboxAssistantTransport.js.map +1 -1
  47. package/dist/utils/pageContext.js.map +1 -1
  48. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AdapterCloudRoot.js","names":[],"sources":["../../src/adaptercloud/AdapterCloudRoot.tsx"],"sourcesContent":["/**\n * AdapterCloud Root Component\n * @module adaptercloud\n */\n\nimport type { FC } from 'react';\nimport { useCallback, useEffect } from 'react';\nimport { MutationCache, QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n LayoutDashboard,\n Boxes,\n Cable,\n Server,\n Waypoints,\n ScrollText,\n ShieldAlert,\n GitCompareArrows,\n Activity,\n DollarSign,\n} from 'lucide-react';\nimport { AdapterCloudProvider } from './context/AdapterCloudContext';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { AdapterCloudRoutes } from './AdapterCloudRoutes';\nimport { notify } from './lib/toast';\nimport type { AdapterCloudRootProps, NavItem } from './types';\n\n// Create a query client for this microfrontend. A shared MutationCache surfaces\n// every failed write as a toast, so no mutation can fail silently with only\n// inline error state (the <Toaster> is owned by the host app shell).\nconst queryClient = new QueryClient({\n mutationCache: new MutationCache({\n onError: (error) => {\n notify.error(\n 'Something went wrong',\n error instanceof Error ? error.message : 'Please try again.'\n );\n },\n }),\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\nexport const AdapterCloudRoot: FC<AdapterCloudRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t: translate } = useI18n();\n const t = useCallback(\n (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n },\n [translate]\n );\n\n // Helper to join paths correctly\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with shell on mount\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n // Overview\n {\n id: 'adaptercloud-overview',\n label: t('adaptercloud.nav.overview', 'Overview'),\n path: joinPath(basePath, ''),\n icon: <LayoutDashboard size={20} />,\n order: 1,\n group: 'main',\n },\n\n // Fabric\n {\n id: 'adaptercloud-adapters',\n label: t('adaptercloud.nav.adapters', 'Adapters'),\n path: joinPath(basePath, 'adapters'),\n icon: <Boxes size={20} />,\n order: 10,\n group: 'fabric',\n },\n {\n id: 'adaptercloud-connections',\n label: t('adaptercloud.nav.connections', 'Connections'),\n path: joinPath(basePath, 'connections'),\n icon: <Cable size={20} />,\n order: 11,\n group: 'fabric',\n },\n {\n id: 'adaptercloud-resources',\n label: t('adaptercloud.nav.resources', 'Resources'),\n path: joinPath(basePath, 'resources'),\n icon: <Server size={20} />,\n order: 12,\n group: 'fabric',\n },\n {\n id: 'adaptercloud-topology',\n label: t('adaptercloud.nav.topology', 'Topology'),\n path: joinPath(basePath, 'topology'),\n icon: <Waypoints size={20} />,\n order: 13,\n group: 'fabric',\n },\n\n // Governance\n {\n id: 'adaptercloud-policies',\n label: t('adaptercloud.nav.policies', 'Policies'),\n path: joinPath(basePath, 'policies'),\n icon: <ScrollText size={20} />,\n order: 20,\n group: 'governance',\n },\n {\n id: 'adaptercloud-violations',\n label: t('adaptercloud.nav.violations', 'Violations'),\n path: joinPath(basePath, 'violations'),\n icon: <ShieldAlert size={20} />,\n order: 21,\n group: 'governance',\n },\n {\n id: 'adaptercloud-drift',\n label: t('adaptercloud.nav.drift', 'Drift'),\n path: joinPath(basePath, 'drift'),\n icon: <GitCompareArrows size={20} />,\n order: 22,\n group: 'governance',\n },\n\n // Operations\n {\n id: 'adaptercloud-sync-runs',\n label: t('adaptercloud.nav.syncRuns', 'Sync Runs'),\n path: joinPath(basePath, 'sync-runs'),\n icon: <Activity size={20} />,\n order: 30,\n group: 'operations',\n },\n {\n id: 'adaptercloud-costs',\n label: t('adaptercloud.nav.finops', 'FinOps'),\n path: joinPath(basePath, 'costs'),\n icon: <DollarSign size={20} />,\n order: 31,\n group: 'operations',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, t]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'adaptercloud-status',\n label: t('adaptercloud.footer.ready', 'AdapterCloud Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, t]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <AdapterCloudProvider {...props}>\n <AdapterCloudRoutes />\n </AdapterCloudProvider>\n </FeatureFlagProvider>\n </QueryClientProvider>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdapterCloudRoot.js","names":[],"sources":["../../src/adaptercloud/AdapterCloudRoot.tsx"],"sourcesContent":["/**\n * AdapterCloud Root Component\n * @module adaptercloud\n */\n\nimport type { FC } from 'react';\nimport { useCallback, useEffect } from 'react';\nimport { MutationCache, QueryClient, QueryClientProvider } from '@tanstack/react-query';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n LayoutDashboard,\n Boxes,\n Cable,\n Server,\n Waypoints,\n ScrollText,\n ShieldAlert,\n GitCompareArrows,\n Activity,\n DollarSign,\n} from 'lucide-react';\nimport { AdapterCloudProvider } from './context/AdapterCloudContext';\nimport { FeatureFlagProvider } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { AdapterCloudRoutes } from './AdapterCloudRoutes';\nimport { notify } from './lib/toast';\nimport type { AdapterCloudRootProps, NavItem } from './types';\n\n// Create a query client for this microfrontend. A shared MutationCache surfaces\n// every failed write as a toast, so no mutation can fail silently with only\n// inline error state (the <Toaster> is owned by the host app shell).\nconst queryClient = new QueryClient({\n mutationCache: new MutationCache({\n onError: (error) => {\n notify.error(\n 'Something went wrong',\n error instanceof Error ? error.message : 'Please try again.'\n );\n },\n }),\n defaultOptions: {\n queries: {\n staleTime: 5 * 60 * 1000,\n retry: 1,\n },\n },\n});\n\nexport const AdapterCloudRoot: FC<AdapterCloudRootProps> = (props) => {\n const { registerNavItems, registerFooterItems, basePath = '/' } = props;\n const { t: translate } = useI18n();\n const t = useCallback(\n (key: string, fallback: string): string => {\n const value = translate(key);\n return value === key ? fallback : value;\n },\n [translate]\n );\n\n // Helper to join paths correctly\n const joinPath = (base: string, path: string): string => {\n const cleanBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const cleanPath = path.startsWith('/') ? path : `/${path}`;\n return cleanBase + cleanPath;\n };\n\n // Register navigation items with shell on mount\n useEffect(() => {\n if (!registerNavItems) return;\n\n const navItems: NavItem[] = [\n // Overview\n {\n id: 'adaptercloud-overview',\n label: t('adaptercloud.nav.overview', 'Overview'),\n path: joinPath(basePath, ''),\n icon: <LayoutDashboard size={20} />,\n order: 1,\n group: 'main',\n },\n\n // Fabric\n {\n id: 'adaptercloud-adapters',\n label: t('adaptercloud.nav.adapters', 'Adapters'),\n path: joinPath(basePath, 'adapters'),\n icon: <Boxes size={20} />,\n order: 10,\n group: 'fabric',\n },\n {\n id: 'adaptercloud-connections',\n label: t('adaptercloud.nav.connections', 'Connections'),\n path: joinPath(basePath, 'connections'),\n icon: <Cable size={20} />,\n order: 11,\n group: 'fabric',\n },\n {\n id: 'adaptercloud-resources',\n label: t('adaptercloud.nav.resources', 'Resources'),\n path: joinPath(basePath, 'resources'),\n icon: <Server size={20} />,\n order: 12,\n group: 'fabric',\n },\n {\n id: 'adaptercloud-topology',\n label: t('adaptercloud.nav.topology', 'Topology'),\n path: joinPath(basePath, 'topology'),\n icon: <Waypoints size={20} />,\n order: 13,\n group: 'fabric',\n },\n\n // Governance\n {\n id: 'adaptercloud-policies',\n label: t('adaptercloud.nav.policies', 'Policies'),\n path: joinPath(basePath, 'policies'),\n icon: <ScrollText size={20} />,\n order: 20,\n group: 'governance',\n },\n {\n id: 'adaptercloud-violations',\n label: t('adaptercloud.nav.violations', 'Violations'),\n path: joinPath(basePath, 'violations'),\n icon: <ShieldAlert size={20} />,\n order: 21,\n group: 'governance',\n },\n {\n id: 'adaptercloud-drift',\n label: t('adaptercloud.nav.drift', 'Drift'),\n path: joinPath(basePath, 'drift'),\n icon: <GitCompareArrows size={20} />,\n order: 22,\n group: 'governance',\n },\n\n // Operations\n {\n id: 'adaptercloud-sync-runs',\n label: t('adaptercloud.nav.syncRuns', 'Sync Runs'),\n path: joinPath(basePath, 'sync-runs'),\n icon: <Activity size={20} />,\n order: 30,\n group: 'operations',\n },\n {\n id: 'adaptercloud-costs',\n label: t('adaptercloud.nav.finops', 'FinOps'),\n path: joinPath(basePath, 'costs'),\n icon: <DollarSign size={20} />,\n order: 31,\n group: 'operations',\n },\n ];\n\n const cleanup = registerNavItems(navItems);\n return cleanup;\n }, [registerNavItems, basePath, t]);\n\n // Register footer items\n useEffect(() => {\n if (!registerFooterItems) return;\n\n const footerItems = [\n {\n id: 'adaptercloud-status',\n label: t('adaptercloud.footer.ready', 'AdapterCloud Ready'),\n type: 'status' as const,\n order: 10,\n section: 'left' as const,\n },\n ];\n\n const cleanup = registerFooterItems(footerItems);\n return cleanup;\n }, [registerFooterItems, t]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <FeatureFlagProvider workspaceId={null} gateway=\"global\" defaultEnabled={true}>\n <AdapterCloudProvider {...props}>\n <AdapterCloudRoutes />\n </AdapterCloudProvider>\n </FeatureFlagProvider>\n </QueryClientProvider>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdapterCloudRoutes.js","names":[],"sources":["../../src/adaptercloud/AdapterCloudRoutes.tsx"],"sourcesContent":["/**\n * AdapterCloud Routes\n * @module adaptercloud\n *\n * Domain routing for the AdapterCloud (InfraVerse) control plane: an overview\n * landing page plus fabric (adapters / connections / resources), governance\n * (policies / violations / drift) and operations (sync runs / FinOps).\n */\n\nimport { type FC, lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router-dom';\nimport { useAdapterCloud } from './context/AdapterCloudContext';\n\n// Eager — overview landing page\nimport { OverviewPage } from './pages/OverviewPage';\n\n// Fabric — adapters\nconst AdaptersListPage = lazy(() =>\n import('./pages/adapters/AdaptersListPage').then((m) => ({ default: m.AdaptersListPage }))\n);\nconst AdapterDetailPage = lazy(() =>\n import('./pages/adapters/AdapterDetailPage').then((m) => ({ default: m.AdapterDetailPage }))\n);\nconst AdapterFormPage = lazy(() =>\n import('./pages/adapters/AdapterFormPage').then((m) => ({ default: m.AdapterFormPage }))\n);\n\n// Fabric — connections\nconst ConnectionsListPage = lazy(() =>\n import('./pages/connections/ConnectionsListPage').then((m) => ({\n default: m.ConnectionsListPage,\n }))\n);\nconst ConnectionDetailPage = lazy(() =>\n import('./pages/connections/ConnectionDetailPage').then((m) => ({\n default: m.ConnectionDetailPage,\n }))\n);\nconst ConnectionFormPage = lazy(() =>\n import('./pages/connections/ConnectionFormPage').then((m) => ({\n default: m.ConnectionFormPage,\n }))\n);\n\n// Fabric — resources\nconst ResourcesListPage = lazy(() =>\n import('./pages/resources/ResourcesListPage').then((m) => ({ default: m.ResourcesListPage }))\n);\nconst ResourceDetailPage = lazy(() =>\n import('./pages/resources/ResourceDetailPage').then((m) => ({ default: m.ResourceDetailPage }))\n);\n\n// Fabric — estate topology (dependency graph)\nconst TopologyPage = lazy(() =>\n import('./pages/topology/TopologyPage').then((m) => ({ default: m.TopologyPage }))\n);\n\n// Governance — policies\nconst PoliciesListPage = lazy(() =>\n import('./pages/policies/PoliciesListPage').then((m) => ({ default: m.PoliciesListPage }))\n);\nconst PolicyDetailPage = lazy(() =>\n import('./pages/policies/PolicyDetailPage').then((m) => ({ default: m.PolicyDetailPage }))\n);\nconst PolicyFormPage = lazy(() =>\n import('./pages/policies/PolicyFormPage').then((m) => ({ default: m.PolicyFormPage }))\n);\n\n// Governance — violations & drift\nconst ViolationsListPage = lazy(() =>\n import('./pages/violations/ViolationsListPage').then((m) => ({ default: m.ViolationsListPage }))\n);\nconst DriftListPage = lazy(() =>\n import('./pages/drift/DriftListPage').then((m) => ({ default: m.DriftListPage }))\n);\n\n// Operations — sync runs & costs\nconst SyncRunsListPage = lazy(() =>\n import('./pages/sync-runs/SyncRunsListPage').then((m) => ({ default: m.SyncRunsListPage }))\n);\nconst CostsPage = lazy(() =>\n import('./pages/costs/CostsPage').then((m) => ({ default: m.CostsPage }))\n);\n\n// Loading fallback component\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-b-2 border-accent-blue\" />\n </div>\n);\n\nexport const AdapterCloudRoutes: FC = () => {\n const { basePath, isStandalone } = useAdapterCloud();\n const location = useLocation();\n\n // Normalize base path\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n // Guard: Only render if path matches basePath (when integrated)\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Overview — eager loaded */}\n <Route index element={<OverviewPage />} />\n\n {/* Adapters */}\n <Route path=\"adapters\" element={<AdaptersListPage />} />\n <Route path=\"adapters/new\" element={<AdapterFormPage />} />\n <Route path=\"adapters/:id\" element={<AdapterDetailPage />} />\n <Route path=\"adapters/:id/edit\" element={<AdapterFormPage />} />\n\n {/* Connections */}\n <Route path=\"connections\" element={<ConnectionsListPage />} />\n <Route path=\"connections/new\" element={<ConnectionFormPage />} />\n <Route path=\"connections/:id\" element={<ConnectionDetailPage />} />\n <Route path=\"connections/:id/edit\" element={<ConnectionFormPage />} />\n\n {/* Resources */}\n <Route path=\"resources\" element={<ResourcesListPage />} />\n <Route path=\"resources/:id\" element={<ResourceDetailPage />} />\n\n {/* Fabric — estate topology graph */}\n <Route path=\"topology\" element={<TopologyPage />} />\n\n {/* Policies */}\n <Route path=\"policies\" element={<PoliciesListPage />} />\n <Route path=\"policies/new\" element={<PolicyFormPage />} />\n <Route path=\"policies/:id\" element={<PolicyDetailPage />} />\n <Route path=\"policies/:id/edit\" element={<PolicyFormPage />} />\n\n {/* Governance */}\n <Route path=\"violations\" element={<ViolationsListPage />} />\n <Route path=\"drift\" element={<DriftListPage />} />\n\n {/* Operations */}\n <Route path=\"sync-runs\" element={<SyncRunsListPage />} />\n <Route path=\"costs\" element={<CostsPage />} />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"AdapterCloudRoutes.js","names":[],"sources":["../../src/adaptercloud/AdapterCloudRoutes.tsx"],"sourcesContent":["/**\n * AdapterCloud Routes\n * @module adaptercloud\n *\n * Domain routing for the AdapterCloud (InfraVerse) control plane: an overview\n * landing page plus fabric (adapters / connections / resources), governance\n * (policies / violations / drift) and operations (sync runs / FinOps).\n */\n\nimport { type FC, lazy, Suspense } from 'react';\nimport { Routes, Route, Navigate, useLocation } from 'react-router-dom';\nimport { useAdapterCloud } from './context/AdapterCloudContext';\n\n// Eager — overview landing page\nimport { OverviewPage } from './pages/OverviewPage';\n\n// Fabric — adapters\nconst AdaptersListPage = lazy(() =>\n import('./pages/adapters/AdaptersListPage').then((m) => ({ default: m.AdaptersListPage }))\n);\nconst AdapterDetailPage = lazy(() =>\n import('./pages/adapters/AdapterDetailPage').then((m) => ({ default: m.AdapterDetailPage }))\n);\nconst AdapterFormPage = lazy(() =>\n import('./pages/adapters/AdapterFormPage').then((m) => ({ default: m.AdapterFormPage }))\n);\n\n// Fabric — connections\nconst ConnectionsListPage = lazy(() =>\n import('./pages/connections/ConnectionsListPage').then((m) => ({\n default: m.ConnectionsListPage,\n }))\n);\nconst ConnectionDetailPage = lazy(() =>\n import('./pages/connections/ConnectionDetailPage').then((m) => ({\n default: m.ConnectionDetailPage,\n }))\n);\nconst ConnectionFormPage = lazy(() =>\n import('./pages/connections/ConnectionFormPage').then((m) => ({\n default: m.ConnectionFormPage,\n }))\n);\n\n// Fabric — resources\nconst ResourcesListPage = lazy(() =>\n import('./pages/resources/ResourcesListPage').then((m) => ({ default: m.ResourcesListPage }))\n);\nconst ResourceDetailPage = lazy(() =>\n import('./pages/resources/ResourceDetailPage').then((m) => ({ default: m.ResourceDetailPage }))\n);\n\n// Fabric — estate topology (dependency graph)\nconst TopologyPage = lazy(() =>\n import('./pages/topology/TopologyPage').then((m) => ({ default: m.TopologyPage }))\n);\n\n// Governance — policies\nconst PoliciesListPage = lazy(() =>\n import('./pages/policies/PoliciesListPage').then((m) => ({ default: m.PoliciesListPage }))\n);\nconst PolicyDetailPage = lazy(() =>\n import('./pages/policies/PolicyDetailPage').then((m) => ({ default: m.PolicyDetailPage }))\n);\nconst PolicyFormPage = lazy(() =>\n import('./pages/policies/PolicyFormPage').then((m) => ({ default: m.PolicyFormPage }))\n);\n\n// Governance — violations & drift\nconst ViolationsListPage = lazy(() =>\n import('./pages/violations/ViolationsListPage').then((m) => ({ default: m.ViolationsListPage }))\n);\nconst DriftListPage = lazy(() =>\n import('./pages/drift/DriftListPage').then((m) => ({ default: m.DriftListPage }))\n);\n\n// Operations — sync runs & costs\nconst SyncRunsListPage = lazy(() =>\n import('./pages/sync-runs/SyncRunsListPage').then((m) => ({ default: m.SyncRunsListPage }))\n);\nconst CostsPage = lazy(() =>\n import('./pages/costs/CostsPage').then((m) => ({ default: m.CostsPage }))\n);\n\n// Loading fallback component\nconst PageLoader: FC = () => (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"h-8 w-8 animate-spin rounded-full border-b-2 border-accent-blue\" />\n </div>\n);\n\nexport const AdapterCloudRoutes: FC = () => {\n const { basePath, isStandalone } = useAdapterCloud();\n const location = useLocation();\n\n // Normalize base path\n const normalizedBasePath = basePath === '/' ? '' : (basePath ?? '').replace(/\\/$/, '');\n\n // Guard: Only render if path matches basePath (when integrated)\n if (normalizedBasePath && !isStandalone) {\n const pathMatches =\n location.pathname === normalizedBasePath ||\n location.pathname.startsWith(normalizedBasePath + '/');\n\n if (!pathMatches) {\n return null;\n }\n }\n\n return (\n <div className=\"flex min-h-full flex-col\">\n <Suspense fallback={<PageLoader />}>\n <Routes>\n {/* Overview — eager loaded */}\n <Route index element={<OverviewPage />} />\n\n {/* Adapters */}\n <Route path=\"adapters\" element={<AdaptersListPage />} />\n <Route path=\"adapters/new\" element={<AdapterFormPage />} />\n <Route path=\"adapters/:id\" element={<AdapterDetailPage />} />\n <Route path=\"adapters/:id/edit\" element={<AdapterFormPage />} />\n\n {/* Connections */}\n <Route path=\"connections\" element={<ConnectionsListPage />} />\n <Route path=\"connections/new\" element={<ConnectionFormPage />} />\n <Route path=\"connections/:id\" element={<ConnectionDetailPage />} />\n <Route path=\"connections/:id/edit\" element={<ConnectionFormPage />} />\n\n {/* Resources */}\n <Route path=\"resources\" element={<ResourcesListPage />} />\n <Route path=\"resources/:id\" element={<ResourceDetailPage />} />\n\n {/* Fabric — estate topology graph */}\n <Route path=\"topology\" element={<TopologyPage />} />\n\n {/* Policies */}\n <Route path=\"policies\" element={<PoliciesListPage />} />\n <Route path=\"policies/new\" element={<PolicyFormPage />} />\n <Route path=\"policies/:id\" element={<PolicyDetailPage />} />\n <Route path=\"policies/:id/edit\" element={<PolicyFormPage />} />\n\n {/* Governance */}\n <Route path=\"violations\" element={<ViolationsListPage />} />\n <Route path=\"drift\" element={<DriftListPage />} />\n\n {/* Operations */}\n <Route path=\"sync-runs\" element={<SyncRunsListPage />} />\n <Route path=\"costs\" element={<CostsPage />} />\n\n {/* Fallback */}\n <Route path=\"*\" element={<Navigate to=\"\" replace />} />\n </Routes>\n </Suspense>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmDialog.js","names":[],"sources":["../../../src/adaptercloud/components/ConfirmDialog.tsx"],"sourcesContent":["/**\n * ConfirmDialog Component\n * @module adaptercloud/components\n *\n * A consistent \"Are you sure?\" confirmation gate for destructive or\n * consequential actions (archive, disable, remediate, cancel). Built on the\n * shared fe-libs `ResponsiveDialog` primitive so it adapts to mobile as a sheet\n * and desktop as a modal. Cancel dismisses; Confirm invokes `onConfirm` and can\n * show a pending spinner while the mutation is in flight.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport {\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\n\ninterface ConfirmDialogProps {\n /** Controls visibility. */\n open: boolean;\n /** Called with `false` when the dialog should close (Cancel / overlay / esc). */\n onOpenChange: (open: boolean) => void;\n /** Dialog heading, e.g. \"Archive adapter?\". */\n title: string;\n /** Supporting body copy explaining the consequence. */\n description?: ReactNode;\n /** Confirm button label. Defaults to \"Confirm\". */\n confirmLabel: string;\n /** Cancel button label. Defaults to \"Cancel\". */\n cancelLabel: string;\n /** Invoked when the user confirms. */\n onConfirm: () => void;\n /** When true the confirm button spins and both buttons disable. */\n isPending?: boolean;\n /**\n * Visual tone of the confirm button. `danger` for destructive actions\n * (archive/disable/cancel), `primary` for neutral consequential ones.\n */\n tone?: 'danger' | 'primary';\n}\n\nexport const ConfirmDialog: FC<ConfirmDialogProps> = ({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n cancelLabel,\n onConfirm,\n isPending = false,\n tone = 'danger',\n}) => {\n const confirmClass =\n tone === 'danger'\n ? 'inline-flex items-center justify-center gap-2 rounded-lg bg-action-danger-bg px-4 py-2 text-sm font-medium text-action-danger-text transition-colors hover:bg-action-danger-bg-hover disabled:opacity-50'\n : 'inline-flex items-center justify-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:opacity-90 disabled:opacity-50';\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n if (!next) onOpenChange(false);\n }}\n >\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{title}</ResponsiveDialogTitle>\n {description && <ResponsiveDialogDescription>{description}</ResponsiveDialogDescription>}\n </ResponsiveDialogHeader>\n <ResponsiveDialogFooter>\n <button\n type=\"button\"\n disabled={isPending}\n onClick={() => onOpenChange(false)}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-accent disabled:opacity-50\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" disabled={isPending} onClick={onConfirm} className={confirmClass}>\n {isPending && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {confirmLabel}\n </button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n};\n"],"mappings":";;;;AA8CA,IAAa,KAAyC,EACpD,SACA,iBACA,UACA,gBACA,iBACA,gBACA,cACA,eAAY,IACZ,UAAO,eAQL,kBAAC,GAAD;CACQ;CACN,eAAe,MAAS;AACtB,EAAK,KAAM,EAAa,GAAM;;WAGhC,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAwB,GAA8B,CAAA,EACrD,KAAe,kBAAC,GAAD,EAAA,UAA8B,GAA0C,CAAA,CACjE,EAAA,CAAA,EACzB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,UAAD;EACE,MAAK;EACL,UAAU;EACV,eAAe,EAAa,GAAM;EAClC,WAAU;YAET;EACM,CAAA,EACT,kBAAC,UAAD;EAAQ,MAAK;EAAS,UAAU;EAAW,SAAS;EAAW,WAzBrE,MAAS,WACL,6MACA;YAuBE,CACG,KAAa,kBAAC,GAAD,EAAS,WAAU,wBAAyB,CAAA,EACzD,EACM;IACc,EAAA,CAAA,CACD,EAAA,CAAA;CACT,CAAA"}
1
+ {"version":3,"file":"ConfirmDialog.js","names":[],"sources":["../../../src/adaptercloud/components/ConfirmDialog.tsx"],"sourcesContent":["/**\n * ConfirmDialog Component\n * @module adaptercloud/components\n *\n * A consistent \"Are you sure?\" confirmation gate for destructive or\n * consequential actions (archive, disable, remediate, cancel). Built on the\n * shared fe-libs `ResponsiveDialog` primitive so it adapts to mobile as a sheet\n * and desktop as a modal. Cancel dismisses; Confirm invokes `onConfirm` and can\n * show a pending spinner while the mutation is in flight.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { Loader2 } from 'lucide-react';\nimport {\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n} from '@burdenoff/fe-libs/ui';\n\ninterface ConfirmDialogProps {\n /** Controls visibility. */\n open: boolean;\n /** Called with `false` when the dialog should close (Cancel / overlay / esc). */\n onOpenChange: (open: boolean) => void;\n /** Dialog heading, e.g. \"Archive adapter?\". */\n title: string;\n /** Supporting body copy explaining the consequence. */\n description?: ReactNode;\n /** Confirm button label. Defaults to \"Confirm\". */\n confirmLabel: string;\n /** Cancel button label. Defaults to \"Cancel\". */\n cancelLabel: string;\n /** Invoked when the user confirms. */\n onConfirm: () => void;\n /** When true the confirm button spins and both buttons disable. */\n isPending?: boolean;\n /**\n * Visual tone of the confirm button. `danger` for destructive actions\n * (archive/disable/cancel), `primary` for neutral consequential ones.\n */\n tone?: 'danger' | 'primary';\n}\n\nexport const ConfirmDialog: FC<ConfirmDialogProps> = ({\n open,\n onOpenChange,\n title,\n description,\n confirmLabel,\n cancelLabel,\n onConfirm,\n isPending = false,\n tone = 'danger',\n}) => {\n const confirmClass =\n tone === 'danger'\n ? 'inline-flex items-center justify-center gap-2 rounded-lg bg-action-danger-bg px-4 py-2 text-sm font-medium text-action-danger-text transition-colors hover:bg-action-danger-bg-hover disabled:opacity-50'\n : 'inline-flex items-center justify-center gap-2 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text transition-colors hover:opacity-90 disabled:opacity-50';\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n if (!next) onOpenChange(false);\n }}\n >\n <ResponsiveDialogContent>\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{title}</ResponsiveDialogTitle>\n {description && <ResponsiveDialogDescription>{description}</ResponsiveDialogDescription>}\n </ResponsiveDialogHeader>\n <ResponsiveDialogFooter>\n <button\n type=\"button\"\n disabled={isPending}\n onClick={() => onOpenChange(false)}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-accent disabled:opacity-50\"\n >\n {cancelLabel}\n </button>\n <button type=\"button\" disabled={isPending} onClick={onConfirm} className={confirmClass}>\n {isPending && <Loader2 className=\"h-4 w-4 animate-spin\" />}\n {confirmLabel}\n </button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n};\n"],"mappings":";;;;AA8CA,IAAa,KAAyC,EACpD,SACA,iBACA,UACA,gBACA,iBACA,gBACA,cACA,eAAY,IACZ,UAAO,eAQL,kBAAC,GAAD;CACQ;CACN,eAAe,MAAS;EACtB,AAAK,KAAM,EAAa,EAAK;CAC/B;WAEA,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UAAwB,EAA6B,CAAA,GACpD,KAAe,kBAAC,GAAD,EAAA,UAA8B,EAAyC,CAAA,CACjE,EAAA,CAAA,GACxB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,UAAD;EACE,MAAK;EACL,UAAU;EACV,eAAe,EAAa,EAAK;EACjC,WAAU;YAET;CACK,CAAA,GACR,kBAAC,UAAD;EAAQ,MAAK;EAAS,UAAU;EAAW,SAAS;EAAW,WAzBrE,MAAS,WACL,6MACA;YAuBE,CACG,KAAa,kBAAC,GAAD,EAAS,WAAU,uBAAwB,CAAA,GACxD,CACK;GACc,EAAA,CAAA,CACD,EAAA,CAAA;AACT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataState.js","names":[],"sources":["../../../src/adaptercloud/components/DataState.tsx"],"sourcesContent":["/**\n * DataState Component\n * @module adaptercloud/components\n *\n * Standard loading / error / empty wrapper for query-backed sections. Renders\n * `children` only when there is data; otherwise shows a spinner, an error panel,\n * or an illustrated empty state. Keeps every page's async UX consistent.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { AlertCircle, Loader2 } from 'lucide-react';\nimport { EmptyState } from './EmptyState';\nimport { cn } from '../utils/cn';\n\ninterface DataStateProps {\n isLoading: boolean;\n isError: boolean;\n /** True when the underlying list/record is empty (only checked once loaded). */\n isEmpty?: boolean;\n error?: unknown;\n onRetry?: () => void;\n emptyTitle?: string;\n emptyDescription?: string;\n emptyIcon?: ReactNode;\n emptyAction?: ReactNode;\n emptyIllustration?: string;\n className?: string;\n children: ReactNode;\n}\n\nfunction errorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n return 'Something went wrong while loading data.';\n}\n\nexport const DataState: FC<DataStateProps> = ({\n isLoading,\n isError,\n isEmpty = false,\n error,\n onRetry,\n emptyTitle = 'Nothing here yet',\n emptyDescription,\n emptyIcon,\n emptyAction,\n emptyIllustration,\n className,\n children,\n}) => {\n if (isLoading) {\n return (\n <div className={cn('flex min-h-[240px] items-center justify-center', className)}>\n <Loader2 className=\"h-8 w-8 animate-spin text-accent-blue\" />\n </div>\n );\n }\n\n if (isError) {\n return (\n <div\n className={cn(\n 'flex min-h-[240px] flex-col items-center justify-center gap-3 rounded-xl border border-border-subtle bg-bg-surface p-8 text-center',\n className\n )}\n >\n <AlertCircle className=\"h-10 w-10 text-status-error-text\" />\n <h3 className=\"text-base font-semibold text-text-primary\">Failed to load</h3>\n <p className=\"max-w-md text-sm text-text-secondary\">{errorMessage(error)}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-1 rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-accent\"\n >\n Try again\n </button>\n )}\n </div>\n );\n }\n\n if (isEmpty) {\n return (\n <EmptyState\n title={emptyTitle}\n description={emptyDescription}\n icon={emptyIcon}\n action={emptyAction}\n illustration={emptyIllustration}\n className={className}\n />\n );\n }\n\n return <>{children}</>;\n};\n"],"mappings":";;;;;AA8BA,SAAS,EAAa,GAAwB;AAG5C,QAFI,aAAiB,QAAc,EAAM,UACrC,OAAO,KAAU,WAAiB,IAC/B;;AAGT,IAAa,KAAiC,EAC5C,cACA,YACA,aAAU,IACV,UACA,YACA,gBAAa,oBACb,qBACA,cACA,gBACA,sBACA,cACA,kBAEI,IAEA,kBAAC,OAAD;CAAK,WAAW,EAAG,kDAAkD,EAAU;WAC7E,kBAAC,GAAD,EAAS,WAAU,yCAA0C,CAAA;CACzD,CAAA,GAIN,IAEA,kBAAC,OAAD;CACE,WAAW,EACT,sIACA,EACD;WAJH;EAME,kBAAC,GAAD,EAAa,WAAU,oCAAqC,CAAA;EAC5D,kBAAC,MAAD;GAAI,WAAU;aAA4C;GAAmB,CAAA;EAC7E,kBAAC,KAAD;GAAG,WAAU;aAAwC,EAAa,EAAM;GAAK,CAAA;EAC5E,KACC,kBAAC,UAAD;GACE,MAAK;GACL,SAAS;GACT,WAAU;aACX;GAEQ,CAAA;EAEP;KAIN,IAEA,kBAAC,GAAD;CACE,OAAO;CACP,aAAa;CACb,MAAM;CACN,QAAQ;CACR,cAAc;CACH;CACX,CAAA,GAIC,kBAAA,GAAA,EAAG,aAAY,CAAA"}
1
+ {"version":3,"file":"DataState.js","names":[],"sources":["../../../src/adaptercloud/components/DataState.tsx"],"sourcesContent":["/**\n * DataState Component\n * @module adaptercloud/components\n *\n * Standard loading / error / empty wrapper for query-backed sections. Renders\n * `children` only when there is data; otherwise shows a spinner, an error panel,\n * or an illustrated empty state. Keeps every page's async UX consistent.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { AlertCircle, Loader2 } from 'lucide-react';\nimport { EmptyState } from './EmptyState';\nimport { cn } from '../utils/cn';\n\ninterface DataStateProps {\n isLoading: boolean;\n isError: boolean;\n /** True when the underlying list/record is empty (only checked once loaded). */\n isEmpty?: boolean;\n error?: unknown;\n onRetry?: () => void;\n emptyTitle?: string;\n emptyDescription?: string;\n emptyIcon?: ReactNode;\n emptyAction?: ReactNode;\n emptyIllustration?: string;\n className?: string;\n children: ReactNode;\n}\n\nfunction errorMessage(error: unknown): string {\n if (error instanceof Error) return error.message;\n if (typeof error === 'string') return error;\n return 'Something went wrong while loading data.';\n}\n\nexport const DataState: FC<DataStateProps> = ({\n isLoading,\n isError,\n isEmpty = false,\n error,\n onRetry,\n emptyTitle = 'Nothing here yet',\n emptyDescription,\n emptyIcon,\n emptyAction,\n emptyIllustration,\n className,\n children,\n}) => {\n if (isLoading) {\n return (\n <div className={cn('flex min-h-[240px] items-center justify-center', className)}>\n <Loader2 className=\"h-8 w-8 animate-spin text-accent-blue\" />\n </div>\n );\n }\n\n if (isError) {\n return (\n <div\n className={cn(\n 'flex min-h-[240px] flex-col items-center justify-center gap-3 rounded-xl border border-border-subtle bg-bg-surface p-8 text-center',\n className\n )}\n >\n <AlertCircle className=\"h-10 w-10 text-status-error-text\" />\n <h3 className=\"text-base font-semibold text-text-primary\">Failed to load</h3>\n <p className=\"max-w-md text-sm text-text-secondary\">{errorMessage(error)}</p>\n {onRetry && (\n <button\n type=\"button\"\n onClick={onRetry}\n className=\"mt-1 rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary transition-colors hover:bg-accent\"\n >\n Try again\n </button>\n )}\n </div>\n );\n }\n\n if (isEmpty) {\n return (\n <EmptyState\n title={emptyTitle}\n description={emptyDescription}\n icon={emptyIcon}\n action={emptyAction}\n illustration={emptyIllustration}\n className={className}\n />\n );\n }\n\n return <>{children}</>;\n};\n"],"mappings":";;;;;AA8BA,SAAS,EAAa,GAAwB;CAG5C,OAFI,aAAiB,QAAc,EAAM,UACrC,OAAO,KAAU,WAAiB,IAC/B;AACT;AAEA,IAAa,KAAiC,EAC5C,cACA,YACA,aAAU,IACV,UACA,YACA,gBAAa,oBACb,qBACA,cACA,gBACA,sBACA,cACA,kBAEI,IAEA,kBAAC,OAAD;CAAK,WAAW,EAAG,kDAAkD,CAAS;WAC5E,kBAAC,GAAD,EAAS,WAAU,wCAAyC,CAAA;AACzD,CAAA,IAIL,IAEA,kBAAC,OAAD;CACE,WAAW,EACT,sIACA,CACF;WAJF;EAME,kBAAC,GAAD,EAAa,WAAU,mCAAoC,CAAA;EAC3D,kBAAC,MAAD;GAAI,WAAU;aAA4C;EAAkB,CAAA;EAC5E,kBAAC,KAAD;GAAG,WAAU;aAAwC,EAAa,CAAK;EAAK,CAAA;EAC3E,KACC,kBAAC,UAAD;GACE,MAAK;GACL,SAAS;GACT,WAAU;aACX;EAEO,CAAA;CAEP;KAIL,IAEA,kBAAC,GAAD;CACE,OAAO;CACP,aAAa;CACb,MAAM;CACN,QAAQ;CACR,cAAc;CACH;AACZ,CAAA,IAIE,kBAAA,GAAA,EAAG,YAAW,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"EmptyState.js","names":[],"sources":["../../../src/adaptercloud/components/EmptyState.tsx"],"sourcesContent":["/**\n * Empty State Component\n * @module adaptercloud/components\n *\n * Boff UI 2.0: renders an on-brand illustrated empty state. When an explicit\n * `icon` is supplied (legacy callers) it is kept as a calm glyph above the\n * copy; otherwise an illustration (default: empty-data) is used.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { IllustratedEmptyState } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n /** Host-served illustration name (e.g. \"empty-search\", \"empty-people\"). */\n illustration?: string;\n}\n\nexport const EmptyState: FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n className,\n illustration = 'empty-data',\n}) => {\n return (\n <div className={cn('py-8', className)}>\n <IllustratedEmptyState\n illustration={illustration}\n title={title}\n description={\n icon || description ? (\n <span className=\"flex flex-col items-center gap-3\">\n {icon && <span className=\"text-text-secondary opacity-70\">{icon}</span>}\n {description && <span>{description}</span>}\n </span>\n ) : undefined\n }\n action={action}\n alt={title}\n />\n </div>\n );\n};\n"],"mappings":";;;;AAuBA,IAAa,KAAmC,EAC9C,SACA,UACA,gBACA,WACA,cACA,kBAAe,mBAGb,kBAAC,OAAD;CAAK,WAAW,EAAG,QAAQ,EAAU;WACnC,kBAAC,GAAD;EACgB;EACP;EACP,aACE,KAAQ,IACN,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACG,KAAQ,kBAAC,QAAD;IAAM,WAAU;cAAkC;IAAY,CAAA,EACtE,KAAe,kBAAC,QAAD,EAAA,UAAO,GAAmB,CAAA,CACrC;OACL,KAAA;EAEE;EACR,KAAK;EACL,CAAA;CACE,CAAA"}
1
+ {"version":3,"file":"EmptyState.js","names":[],"sources":["../../../src/adaptercloud/components/EmptyState.tsx"],"sourcesContent":["/**\n * Empty State Component\n * @module adaptercloud/components\n *\n * Boff UI 2.0: renders an on-brand illustrated empty state. When an explicit\n * `icon` is supplied (legacy callers) it is kept as a calm glyph above the\n * copy; otherwise an illustration (default: empty-data) is used.\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { IllustratedEmptyState } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n /** Host-served illustration name (e.g. \"empty-search\", \"empty-people\"). */\n illustration?: string;\n}\n\nexport const EmptyState: FC<EmptyStateProps> = ({\n icon,\n title,\n description,\n action,\n className,\n illustration = 'empty-data',\n}) => {\n return (\n <div className={cn('py-8', className)}>\n <IllustratedEmptyState\n illustration={illustration}\n title={title}\n description={\n icon || description ? (\n <span className=\"flex flex-col items-center gap-3\">\n {icon && <span className=\"text-text-secondary opacity-70\">{icon}</span>}\n {description && <span>{description}</span>}\n </span>\n ) : undefined\n }\n action={action}\n alt={title}\n />\n </div>\n );\n};\n"],"mappings":";;;;AAuBA,IAAa,KAAmC,EAC9C,SACA,UACA,gBACA,WACA,cACA,kBAAe,mBAGb,kBAAC,OAAD;CAAK,WAAW,EAAG,QAAQ,CAAS;WAClC,kBAAC,GAAD;EACgB;EACP;EACP,aACE,KAAQ,IACN,kBAAC,QAAD;GAAM,WAAU;aAAhB,CACG,KAAQ,kBAAC,QAAD;IAAM,WAAU;cAAkC;GAAW,CAAA,GACrE,KAAe,kBAAC,QAAD,EAAA,UAAO,EAAkB,CAAA,CACrC;OACJ,KAAA;EAEE;EACR,KAAK;CACN,CAAA;AACE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"MetricsCard.js","names":[],"sources":["../../../src/adaptercloud/components/MetricsCard.tsx"],"sourcesContent":["/**\n * Metrics Card Component\n * @module adaptercloud/components\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\nimport type { TrendDirection } from '../types';\n\ninterface MetricsCardProps {\n icon: ReactNode;\n value: string | number;\n label: string;\n trend?: TrendDirection;\n trendValue?: string;\n className?: string;\n /** Renders the featured hero metric (glass treatment + accent glow). */\n featured?: boolean;\n}\n\nconst trendConfig: Record<TrendDirection, { icon: typeof TrendingUp; color: string }> = {\n up: { icon: TrendingUp, color: 'text-status-success-text' },\n down: { icon: TrendingDown, color: 'text-status-error-text' },\n neutral: { icon: Minus, color: 'text-text-secondary' },\n};\n\nexport const MetricsCard: FC<MetricsCardProps> = ({\n icon,\n value,\n label,\n trend,\n trendValue,\n className,\n featured = false,\n}) => {\n const trendInfo = trend ? trendConfig[trend] : null;\n const TrendIcon = trendInfo?.icon;\n\n return (\n <GlassCard\n treatment={featured ? 'glass' : 'metric'}\n glow={featured}\n className={cn('p-6', className)}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"text-text-secondary\">{icon}</div>\n {trend && trendInfo && TrendIcon && (\n <div className={cn('flex items-center gap-1 text-xs font-medium', trendInfo.color)}>\n <TrendIcon className=\"h-3.5 w-3.5\" />\n {trendValue && <span className=\"tabular-nums\">{trendValue}</span>}\n </div>\n )}\n </div>\n <div className=\"mt-3\">\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">{value}</p>\n <p className=\"mt-1 text-sm text-text-secondary\">{label}</p>\n </div>\n </GlassCard>\n );\n};\n"],"mappings":";;;;;AAsBA,IAAM,IAAkF;CACtF,IAAI;EAAE,MAAM;EAAY,OAAO;EAA4B;CAC3D,MAAM;EAAE,MAAM;EAAc,OAAO;EAA0B;CAC7D,SAAS;EAAE,MAAM;EAAO,OAAO;EAAuB;CACvD,EAEY,KAAqC,EAChD,SACA,UACA,UACA,UACA,eACA,cACA,cAAW,SACP;CACJ,IAAM,IAAY,IAAQ,EAAY,KAAS,MACzC,IAAY,GAAW;AAE7B,QACE,kBAAC,GAAD;EACE,WAAW,IAAW,UAAU;EAChC,MAAM;EACN,WAAW,EAAG,OAAO,EAAU;YAHjC,CAKE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAuB;IAAW,CAAA,EAChD,KAAS,KAAa,KACrB,kBAAC,OAAD;IAAK,WAAW,EAAG,+CAA+C,EAAU,MAAM;cAAlF,CACE,kBAAC,GAAD,EAAW,WAAU,eAAgB,CAAA,EACpC,KAAc,kBAAC,QAAD;KAAM,WAAU;eAAgB;KAAkB,CAAA,CAC7D;MAEJ;MACN,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAqD;IAAU,CAAA,EAC5E,kBAAC,KAAD;IAAG,WAAU;cAAoC;IAAU,CAAA,CACvD;KACI"}
1
+ {"version":3,"file":"MetricsCard.js","names":[],"sources":["../../../src/adaptercloud/components/MetricsCard.tsx"],"sourcesContent":["/**\n * Metrics Card Component\n * @module adaptercloud/components\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { TrendingUp, TrendingDown, Minus } from 'lucide-react';\nimport { GlassCard } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\nimport type { TrendDirection } from '../types';\n\ninterface MetricsCardProps {\n icon: ReactNode;\n value: string | number;\n label: string;\n trend?: TrendDirection;\n trendValue?: string;\n className?: string;\n /** Renders the featured hero metric (glass treatment + accent glow). */\n featured?: boolean;\n}\n\nconst trendConfig: Record<TrendDirection, { icon: typeof TrendingUp; color: string }> = {\n up: { icon: TrendingUp, color: 'text-status-success-text' },\n down: { icon: TrendingDown, color: 'text-status-error-text' },\n neutral: { icon: Minus, color: 'text-text-secondary' },\n};\n\nexport const MetricsCard: FC<MetricsCardProps> = ({\n icon,\n value,\n label,\n trend,\n trendValue,\n className,\n featured = false,\n}) => {\n const trendInfo = trend ? trendConfig[trend] : null;\n const TrendIcon = trendInfo?.icon;\n\n return (\n <GlassCard\n treatment={featured ? 'glass' : 'metric'}\n glow={featured}\n className={cn('p-6', className)}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"text-text-secondary\">{icon}</div>\n {trend && trendInfo && TrendIcon && (\n <div className={cn('flex items-center gap-1 text-xs font-medium', trendInfo.color)}>\n <TrendIcon className=\"h-3.5 w-3.5\" />\n {trendValue && <span className=\"tabular-nums\">{trendValue}</span>}\n </div>\n )}\n </div>\n <div className=\"mt-3\">\n <p className=\"text-2xl font-bold text-text-primary tabular-nums\">{value}</p>\n <p className=\"mt-1 text-sm text-text-secondary\">{label}</p>\n </div>\n </GlassCard>\n );\n};\n"],"mappings":";;;;;AAsBA,IAAM,IAAkF;CACtF,IAAI;EAAE,MAAM;EAAY,OAAO;CAA2B;CAC1D,MAAM;EAAE,MAAM;EAAc,OAAO;CAAyB;CAC5D,SAAS;EAAE,MAAM;EAAO,OAAO;CAAsB;AACvD,GAEa,KAAqC,EAChD,SACA,UACA,UACA,UACA,eACA,cACA,cAAW,SACP;CACJ,IAAM,IAAY,IAAQ,EAAY,KAAS,MACzC,IAAY,GAAW;CAE7B,OACE,kBAAC,GAAD;EACE,WAAW,IAAW,UAAU;EAChC,MAAM;EACN,WAAW,EAAG,OAAO,CAAS;YAHhC,CAKE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAuB;GAAU,CAAA,GAC/C,KAAS,KAAa,KACrB,kBAAC,OAAD;IAAK,WAAW,EAAG,+CAA+C,EAAU,KAAK;cAAjF,CACE,kBAAC,GAAD,EAAW,WAAU,cAAe,CAAA,GACnC,KAAc,kBAAC,QAAD;KAAM,WAAU;eAAgB;IAAiB,CAAA,CAC7D;KAEJ;MACL,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cAAqD;GAAS,CAAA,GAC3E,kBAAC,KAAD;IAAG,WAAU;cAAoC;GAAS,CAAA,CACvD;IACI;;AAEf"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/adaptercloud/components/PageLayout.tsx"],"sourcesContent":["/**\n * Page Layout Component\n * @module adaptercloud/components\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { AuroraBackground, GradientText, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\n\ninterface PageLayoutProps {\n title: ReactNode;\n description?: string;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n /**\n * Plain-language \"story\" for the page — WHAT it is for and the use-case —\n * rendered as a calm {@link PagePurpose} line under the header so every page\n * is self-explanatory for a new user. Prefer this over `description` for the\n * primary page-purpose copy.\n */\n purpose?: ReactNode;\n /**\n * Enables the living-glass hero backdrop (AuroraBackground) behind the page\n * header. Use on at most ONE page per MFE (the primary landing page).\n */\n hero?: boolean;\n}\n\n/**\n * Renders the page title, gradient-emphasising the final word when the title is\n * a plain string (the \"one gradient hero title per page\" convention). Custom\n * ReactNode titles are rendered verbatim so callers keep full control.\n */\nfunction renderTitle(title: ReactNode): ReactNode {\n if (typeof title !== 'string') return title;\n const trimmed = title.trim();\n const lastSpace = trimmed.lastIndexOf(' ');\n if (lastSpace === -1) {\n return <GradientText as=\"span\">{trimmed}</GradientText>;\n }\n const head = trimmed.slice(0, lastSpace + 1);\n const tail = trimmed.slice(lastSpace + 1);\n return (\n <>\n {head}\n <GradientText as=\"span\">{tail}</GradientText>\n </>\n );\n}\n\nexport const PageLayout: FC<PageLayoutProps> = ({\n title,\n description,\n actions,\n children,\n className,\n purpose,\n hero = false,\n}) => {\n return (\n <div className={cn('flex flex-col h-full', className)}>\n {/* Page Header */}\n <div\n className={cn(\n 'relative overflow-hidden flex flex-col gap-3 px-4 py-4 sm:flex-row sm:items-center sm:justify-between sm:px-6',\n 'border-b border-border-seam',\n hero ? 'bg-hero-mesh' : 'bg-gloss-card'\n )}\n >\n {hero && <AuroraBackground intensity=\"subtle\" />}\n <div className=\"min-w-0\">\n <h1 className=\"text-2xl font-semibold text-text-primary tracking-tight\">\n {renderTitle(title)}\n </h1>\n {description && <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>}\n {purpose && <PagePurpose className=\"mt-2 max-w-2xl\">{purpose}</PagePurpose>}\n </div>\n {actions && (\n <div className=\"flex flex-wrap items-center gap-2 sm:gap-3 sm:justify-end\">{actions}</div>\n )}\n </div>\n\n {/* Page Content */}\n <div className=\"flex-1 overflow-auto p-4 sm:p-6\">{children}</div>\n </div>\n );\n};\n"],"mappings":";;;;AAkCA,SAAS,EAAY,GAA6B;AAChD,KAAI,OAAO,KAAU,SAAU,QAAO;CACtC,IAAM,IAAU,EAAM,MAAM,EACtB,IAAY,EAAQ,YAAY,IAAI;AAM1C,QALI,MAAc,KACT,kBAAC,GAAD;EAAc,IAAG;YAAQ;EAAuB,CAAA,GAKvD,kBAAA,GAAA,EAAA,UAAA,CAHW,EAAQ,MAAM,GAAG,IAAY,EAAE,EAKxC,kBAAC,GAAD;EAAc,IAAG;YAJR,EAAQ,MAAM,IAAY,EAAE;EAIQ,CAAA,CAC5C,EAAA,CAAA;;AAIP,IAAa,KAAmC,EAC9C,UACA,gBACA,YACA,aACA,cACA,YACA,UAAO,SAGL,kBAAC,OAAD;CAAK,WAAW,EAAG,wBAAwB,EAAU;WAArD,CAEE,kBAAC,OAAD;EACE,WAAW,EACT,iHACA,+BACA,IAAO,iBAAiB,gBACzB;YALH;GAOG,KAAQ,kBAAC,GAAD,EAAkB,WAAU,UAAW,CAAA;GAChD,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAY,EAAM;MAChB,CAAA;KACJ,KAAe,kBAAC,KAAD;MAAG,WAAU;gBAAoC;MAAgB,CAAA;KAChF,KAAW,kBAAC,GAAD;MAAa,WAAU;gBAAkB;MAAsB,CAAA;KACvE;;GACL,KACC,kBAAC,OAAD;IAAK,WAAU;cAA6D;IAAc,CAAA;GAExF;KAGN,kBAAC,OAAD;EAAK,WAAU;EAAmC;EAAe,CAAA,CAC7D"}
1
+ {"version":3,"file":"PageLayout.js","names":[],"sources":["../../../src/adaptercloud/components/PageLayout.tsx"],"sourcesContent":["/**\n * Page Layout Component\n * @module adaptercloud/components\n */\n\nimport type { FC, ReactNode } from 'react';\nimport { AuroraBackground, GradientText, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { cn } from '../utils/cn';\n\ninterface PageLayoutProps {\n title: ReactNode;\n description?: string;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n /**\n * Plain-language \"story\" for the page — WHAT it is for and the use-case —\n * rendered as a calm {@link PagePurpose} line under the header so every page\n * is self-explanatory for a new user. Prefer this over `description` for the\n * primary page-purpose copy.\n */\n purpose?: ReactNode;\n /**\n * Enables the living-glass hero backdrop (AuroraBackground) behind the page\n * header. Use on at most ONE page per MFE (the primary landing page).\n */\n hero?: boolean;\n}\n\n/**\n * Renders the page title, gradient-emphasising the final word when the title is\n * a plain string (the \"one gradient hero title per page\" convention). Custom\n * ReactNode titles are rendered verbatim so callers keep full control.\n */\nfunction renderTitle(title: ReactNode): ReactNode {\n if (typeof title !== 'string') return title;\n const trimmed = title.trim();\n const lastSpace = trimmed.lastIndexOf(' ');\n if (lastSpace === -1) {\n return <GradientText as=\"span\">{trimmed}</GradientText>;\n }\n const head = trimmed.slice(0, lastSpace + 1);\n const tail = trimmed.slice(lastSpace + 1);\n return (\n <>\n {head}\n <GradientText as=\"span\">{tail}</GradientText>\n </>\n );\n}\n\nexport const PageLayout: FC<PageLayoutProps> = ({\n title,\n description,\n actions,\n children,\n className,\n purpose,\n hero = false,\n}) => {\n return (\n <div className={cn('flex flex-col h-full', className)}>\n {/* Page Header */}\n <div\n className={cn(\n 'relative overflow-hidden flex flex-col gap-3 px-4 py-4 sm:flex-row sm:items-center sm:justify-between sm:px-6',\n 'border-b border-border-seam',\n hero ? 'bg-hero-mesh' : 'bg-gloss-card'\n )}\n >\n {hero && <AuroraBackground intensity=\"subtle\" />}\n <div className=\"min-w-0\">\n <h1 className=\"text-2xl font-semibold text-text-primary tracking-tight\">\n {renderTitle(title)}\n </h1>\n {description && <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>}\n {purpose && <PagePurpose className=\"mt-2 max-w-2xl\">{purpose}</PagePurpose>}\n </div>\n {actions && (\n <div className=\"flex flex-wrap items-center gap-2 sm:gap-3 sm:justify-end\">{actions}</div>\n )}\n </div>\n\n {/* Page Content */}\n <div className=\"flex-1 overflow-auto p-4 sm:p-6\">{children}</div>\n </div>\n );\n};\n"],"mappings":";;;;AAkCA,SAAS,EAAY,GAA6B;CAChD,IAAI,OAAO,KAAU,UAAU,OAAO;CACtC,IAAM,IAAU,EAAM,KAAK,GACrB,IAAY,EAAQ,YAAY,GAAG;CAMzC,OALI,MAAc,KACT,kBAAC,GAAD;EAAc,IAAG;YAAQ;CAAsB,CAAA,IAKtD,kBAAA,GAAA,EAAA,UAAA,CAHW,EAAQ,MAAM,GAAG,IAAY,CAIrC,GACD,kBAAC,GAAD;EAAc,IAAG;YAJR,EAAQ,MAAM,IAAY,CAIV;CAAmB,CAAA,CAC5C,EAAA,CAAA;AAEN;AAEA,IAAa,KAAmC,EAC9C,UACA,gBACA,YACA,aACA,cACA,YACA,UAAO,SAGL,kBAAC,OAAD;CAAK,WAAW,EAAG,wBAAwB,CAAS;WAApD,CAEE,kBAAC,OAAD;EACE,WAAW,EACT,iHACA,+BACA,IAAO,iBAAiB,eAC1B;YALF;GAOG,KAAQ,kBAAC,GAAD,EAAkB,WAAU,SAAU,CAAA;GAC/C,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAY,CAAK;KAChB,CAAA;KACH,KAAe,kBAAC,KAAD;MAAG,WAAU;gBAAoC;KAAe,CAAA;KAC/E,KAAW,kBAAC,GAAD;MAAa,WAAU;gBAAkB;KAAqB,CAAA;IACvE;;GACJ,KACC,kBAAC,OAAD;IAAK,WAAU;cAA6D;GAAa,CAAA;EAExF;KAGL,kBAAC,OAAD;EAAK,WAAU;EAAmC;CAAc,CAAA,CAC7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"SeverityBadge.js","names":[],"sources":["../../../src/adaptercloud/components/SeverityBadge.tsx"],"sourcesContent":["/**\n * Severity Badge Component\n * @module adaptercloud/components\n *\n * Renders an AdapterCloud severity (CRITICAL / HIGH / MEDIUM / LOW / INFO) as a\n * semantic-token pill.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\nimport { severityLabels, severityPillClass } from '../utils/domain';\nimport type { AdaSeverity } from '../types';\n\ninterface SeverityBadgeProps {\n severity: AdaSeverity;\n className?: string;\n}\n\nexport const SeverityBadge: FC<SeverityBadgeProps> = ({ severity, className }) => (\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n severityPillClass[severity],\n className\n )}\n >\n {severityLabels[severity]}\n </span>\n);\n"],"mappings":";;;;AAkBA,IAAa,KAAyC,EAAE,aAAU,mBAChE,kBAAC,QAAD;CACE,WAAW,EACT,2EACA,EAAkB,IAClB,EACD;WAEA,EAAe;CACX,CAAA"}
1
+ {"version":3,"file":"SeverityBadge.js","names":[],"sources":["../../../src/adaptercloud/components/SeverityBadge.tsx"],"sourcesContent":["/**\n * Severity Badge Component\n * @module adaptercloud/components\n *\n * Renders an AdapterCloud severity (CRITICAL / HIGH / MEDIUM / LOW / INFO) as a\n * semantic-token pill.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\nimport { severityLabels, severityPillClass } from '../utils/domain';\nimport type { AdaSeverity } from '../types';\n\ninterface SeverityBadgeProps {\n severity: AdaSeverity;\n className?: string;\n}\n\nexport const SeverityBadge: FC<SeverityBadgeProps> = ({ severity, className }) => (\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n severityPillClass[severity],\n className\n )}\n >\n {severityLabels[severity]}\n </span>\n);\n"],"mappings":";;;;AAkBA,IAAa,KAAyC,EAAE,aAAU,mBAChE,kBAAC,QAAD;CACE,WAAW,EACT,2EACA,EAAkB,IAClB,CACF;WAEC,EAAe;AACZ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"StatusBadge.js","names":[],"sources":["../../../src/adaptercloud/components/StatusBadge.tsx"],"sourcesContent":["/**\n * Status Badge Component\n * @module adaptercloud/components\n *\n * A colored badge based on a domain status value with semantic-token color\n * mapping for AdapterCloud entity lifecycles (adapter / connection / resource /\n * violation / drift / sync-run). Accepts the raw enum value (e.g. `CONNECTED`)\n * and renders a humanized label.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\nimport { humanizeEnum } from '../utils/domain';\n\ninterface StatusBadgeProps {\n status: string;\n /** Optional explicit label override (defaults to humanized status). */\n label?: string;\n className?: string;\n}\n\ntype BadgeVariant = 'success' | 'warning' | 'destructive' | 'secondary' | 'info' | 'outline';\n\nconst variantStyles: Record<BadgeVariant, string> = {\n success: 'bg-status-success-bg-subtle text-status-success-text',\n warning: 'bg-status-warning-bg-subtle text-status-warning-text',\n destructive: 'bg-status-error-bg-subtle text-status-error-text',\n secondary: 'bg-bg-sunken text-text-secondary',\n info: 'bg-accent-blue-subtle text-accent-blue',\n outline: 'border border-border-seam text-text-primary',\n};\n\nconst dotStyles: Record<BadgeVariant, string> = {\n success: 'bg-status-success-text',\n warning: 'bg-status-warning-text',\n destructive: 'bg-status-error-text',\n secondary: 'bg-text-secondary',\n info: 'bg-accent-blue',\n outline: 'bg-text-secondary',\n};\n\nconst statusVariantMap: Record<string, BadgeVariant> = {\n // Adapter status\n PUBLISHED: 'success',\n DRAFT: 'secondary',\n DEPRECATED: 'warning',\n ARCHIVED: 'outline',\n\n // Connection status\n CONNECTED: 'success',\n DEGRADED: 'warning',\n PENDING: 'info',\n ERROR: 'destructive',\n DISABLED: 'outline',\n\n // Resource state\n RECONCILED: 'success',\n DISCOVERED: 'info',\n DRIFTED: 'warning',\n ORPHANED: 'warning',\n DELETED: 'outline',\n\n // Violation status\n OPEN: 'destructive',\n ACKNOWLEDGED: 'warning',\n RESOLVED: 'success',\n WAIVED: 'outline',\n\n // Drift status\n DETECTED: 'destructive',\n REMEDIATED: 'success',\n IGNORED: 'outline',\n\n // Sync-run status\n RUNNING: 'info',\n QUEUED: 'secondary',\n SUCCEEDED: 'success',\n FAILED: 'destructive',\n CANCELLED: 'outline',\n};\n\n/** Statuses that represent a live/active state get a calm opacity pulse on the dot. */\nconst liveStatuses = new Set(['CONNECTED', 'RUNNING', 'QUEUED', 'PENDING']);\n\nexport const StatusBadge: FC<StatusBadgeProps> = ({ status, label, className }) => {\n const key = status.toUpperCase();\n const variant = statusVariantMap[key] ?? 'secondary';\n const isLive = liveStatuses.has(key);\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium',\n variantStyles[variant],\n className\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'h-1.5 w-1.5 rounded-full',\n dotStyles[variant],\n isLive && 'motion-safe:animate-vc-glow-pulse'\n )}\n />\n {label ?? humanizeEnum(status)}\n </span>\n );\n};\n"],"mappings":";;;;AAuBA,IAAM,IAA8C;CAClD,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;CACV,EAEK,IAA0C;CAC9C,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;CACV,EAEK,IAAiD;CAErD,WAAW;CACX,OAAO;CACP,YAAY;CACZ,UAAU;CAGV,WAAW;CACX,UAAU;CACV,SAAS;CACT,OAAO;CACP,UAAU;CAGV,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,UAAU;CACV,SAAS;CAGT,MAAM;CACN,cAAc;CACd,UAAU;CACV,QAAQ;CAGR,UAAU;CACV,YAAY;CACZ,SAAS;CAGT,SAAS;CACT,QAAQ;CACR,WAAW;CACX,QAAQ;CACR,WAAW;CACZ,EAGK,IAAe,IAAI,IAAI;CAAC;CAAa;CAAW;CAAU;CAAU,CAAC,EAE9D,KAAqC,EAAE,WAAQ,UAAO,mBAAgB;CACjF,IAAM,IAAM,EAAO,aAAa,EAC1B,IAAU,EAAiB,MAAQ,aACnC,IAAS,EAAa,IAAI,EAAI;AAEpC,QACE,kBAAC,QAAD;EACE,WAAW,EACT,mFACA,EAAc,IACd,EACD;YALH,CAOE,kBAAC,QAAD;GACE,eAAY;GACZ,WAAW,EACT,4BACA,EAAU,IACV,KAAU,oCACX;GACD,CAAA,EACD,KAAS,EAAa,EAAO,CACzB"}
1
+ {"version":3,"file":"StatusBadge.js","names":[],"sources":["../../../src/adaptercloud/components/StatusBadge.tsx"],"sourcesContent":["/**\n * Status Badge Component\n * @module adaptercloud/components\n *\n * A colored badge based on a domain status value with semantic-token color\n * mapping for AdapterCloud entity lifecycles (adapter / connection / resource /\n * violation / drift / sync-run). Accepts the raw enum value (e.g. `CONNECTED`)\n * and renders a humanized label.\n */\n\nimport type { FC } from 'react';\nimport { cn } from '../utils/cn';\nimport { humanizeEnum } from '../utils/domain';\n\ninterface StatusBadgeProps {\n status: string;\n /** Optional explicit label override (defaults to humanized status). */\n label?: string;\n className?: string;\n}\n\ntype BadgeVariant = 'success' | 'warning' | 'destructive' | 'secondary' | 'info' | 'outline';\n\nconst variantStyles: Record<BadgeVariant, string> = {\n success: 'bg-status-success-bg-subtle text-status-success-text',\n warning: 'bg-status-warning-bg-subtle text-status-warning-text',\n destructive: 'bg-status-error-bg-subtle text-status-error-text',\n secondary: 'bg-bg-sunken text-text-secondary',\n info: 'bg-accent-blue-subtle text-accent-blue',\n outline: 'border border-border-seam text-text-primary',\n};\n\nconst dotStyles: Record<BadgeVariant, string> = {\n success: 'bg-status-success-text',\n warning: 'bg-status-warning-text',\n destructive: 'bg-status-error-text',\n secondary: 'bg-text-secondary',\n info: 'bg-accent-blue',\n outline: 'bg-text-secondary',\n};\n\nconst statusVariantMap: Record<string, BadgeVariant> = {\n // Adapter status\n PUBLISHED: 'success',\n DRAFT: 'secondary',\n DEPRECATED: 'warning',\n ARCHIVED: 'outline',\n\n // Connection status\n CONNECTED: 'success',\n DEGRADED: 'warning',\n PENDING: 'info',\n ERROR: 'destructive',\n DISABLED: 'outline',\n\n // Resource state\n RECONCILED: 'success',\n DISCOVERED: 'info',\n DRIFTED: 'warning',\n ORPHANED: 'warning',\n DELETED: 'outline',\n\n // Violation status\n OPEN: 'destructive',\n ACKNOWLEDGED: 'warning',\n RESOLVED: 'success',\n WAIVED: 'outline',\n\n // Drift status\n DETECTED: 'destructive',\n REMEDIATED: 'success',\n IGNORED: 'outline',\n\n // Sync-run status\n RUNNING: 'info',\n QUEUED: 'secondary',\n SUCCEEDED: 'success',\n FAILED: 'destructive',\n CANCELLED: 'outline',\n};\n\n/** Statuses that represent a live/active state get a calm opacity pulse on the dot. */\nconst liveStatuses = new Set(['CONNECTED', 'RUNNING', 'QUEUED', 'PENDING']);\n\nexport const StatusBadge: FC<StatusBadgeProps> = ({ status, label, className }) => {\n const key = status.toUpperCase();\n const variant = statusVariantMap[key] ?? 'secondary';\n const isLive = liveStatuses.has(key);\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium',\n variantStyles[variant],\n className\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'h-1.5 w-1.5 rounded-full',\n dotStyles[variant],\n isLive && 'motion-safe:animate-vc-glow-pulse'\n )}\n />\n {label ?? humanizeEnum(status)}\n </span>\n );\n};\n"],"mappings":";;;;AAuBA,IAAM,IAA8C;CAClD,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;AACX,GAEM,IAA0C;CAC9C,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,MAAM;CACN,SAAS;AACX,GAEM,IAAiD;CAErD,WAAW;CACX,OAAO;CACP,YAAY;CACZ,UAAU;CAGV,WAAW;CACX,UAAU;CACV,SAAS;CACT,OAAO;CACP,UAAU;CAGV,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,UAAU;CACV,SAAS;CAGT,MAAM;CACN,cAAc;CACd,UAAU;CACV,QAAQ;CAGR,UAAU;CACV,YAAY;CACZ,SAAS;CAGT,SAAS;CACT,QAAQ;CACR,WAAW;CACX,QAAQ;CACR,WAAW;AACb,GAGM,IAAe,IAAI,IAAI;CAAC;CAAa;CAAW;CAAU;AAAS,CAAC,GAE7D,KAAqC,EAAE,WAAQ,UAAO,mBAAgB;CACjF,IAAM,IAAM,EAAO,YAAY,GACzB,IAAU,EAAiB,MAAQ,aACnC,IAAS,EAAa,IAAI,CAAG;CAEnC,OACE,kBAAC,QAAD;EACE,WAAW,EACT,mFACA,EAAc,IACd,CACF;YALF,CAOE,kBAAC,QAAD;GACE,eAAY;GACZ,WAAW,EACT,4BACA,EAAU,IACV,KAAU,mCACZ;EACD,CAAA,GACA,KAAS,EAAa,CAAM,CACzB;;AAEV"}
@@ -1 +1 @@
1
- {"version":3,"file":"BarChart.js","names":[],"sources":["../../../../src/adaptercloud/components/viz/BarChart.tsx"],"sourcesContent":["/**\n * BarChart — a compact horizontal bar list (label · bar · value). Tokenized,\n * responsive, no raw colors. Used for breakdowns like cost-by-service.\n */\nimport type { FC } from 'react';\n\nexport interface BarDatum {\n key: string;\n label: string;\n value: number;\n /** Preformatted value shown on the right (e.g. \"$22,400\"). */\n display: string;\n}\n\ninterface BarChartProps {\n data: BarDatum[];\n /** Semantic-token fill class for the bar (default accent-blue). */\n barClassName?: string;\n labelWidthClassName?: string;\n}\n\nexport const BarChart: FC<BarChartProps> = ({\n data,\n barClassName = 'bg-accent-blue',\n labelWidthClassName = 'w-20 sm:w-24',\n}) => {\n const max = Math.max(...data.map((d) => d.value), 1);\n\n return (\n <ul className=\"space-y-2.5\">\n {data.map((d) => (\n <li key={d.key} className=\"flex items-center gap-3\">\n <span className={`${labelWidthClassName} shrink-0 truncate text-xs text-text-secondary`}>\n {d.label}\n </span>\n <div className=\"h-2.5 flex-1 overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className={`h-full rounded-full ${barClassName} transition-[width] duration-500`}\n style={{ width: `${Math.max(2, (d.value / max) * 100)}%` }}\n />\n </div>\n <span className=\"shrink-0 text-xs font-semibold tabular-nums text-text-primary\">\n {d.display}\n </span>\n </li>\n ))}\n </ul>\n );\n};\n"],"mappings":";;AAqBA,IAAa,KAA+B,EAC1C,SACA,kBAAe,kBACf,yBAAsB,qBAClB;CACJ,IAAM,IAAM,KAAK,IAAI,GAAG,EAAK,KAAK,MAAM,EAAE,MAAM,EAAE,EAAE;AAEpD,QACE,kBAAC,MAAD;EAAI,WAAU;YACX,EAAK,KAAK,MACT,kBAAC,MAAD;GAAgB,WAAU;aAA1B;IACE,kBAAC,QAAD;KAAM,WAAW,GAAG,EAAoB;eACrC,EAAE;KACE,CAAA;IACP,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MACE,WAAW,uBAAuB,EAAa;MAC/C,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,GAAI,EAAE,QAAQ,IAAO,IAAI,CAAC,IAAI;MAC1D,CAAA;KACE,CAAA;IACN,kBAAC,QAAD;KAAM,WAAU;eACb,EAAE;KACE,CAAA;IACJ;KAbI,EAAE,IAaN,CACL;EACC,CAAA"}
1
+ {"version":3,"file":"BarChart.js","names":[],"sources":["../../../../src/adaptercloud/components/viz/BarChart.tsx"],"sourcesContent":["/**\n * BarChart — a compact horizontal bar list (label · bar · value). Tokenized,\n * responsive, no raw colors. Used for breakdowns like cost-by-service.\n */\nimport type { FC } from 'react';\n\nexport interface BarDatum {\n key: string;\n label: string;\n value: number;\n /** Preformatted value shown on the right (e.g. \"$22,400\"). */\n display: string;\n}\n\ninterface BarChartProps {\n data: BarDatum[];\n /** Semantic-token fill class for the bar (default accent-blue). */\n barClassName?: string;\n labelWidthClassName?: string;\n}\n\nexport const BarChart: FC<BarChartProps> = ({\n data,\n barClassName = 'bg-accent-blue',\n labelWidthClassName = 'w-20 sm:w-24',\n}) => {\n const max = Math.max(...data.map((d) => d.value), 1);\n\n return (\n <ul className=\"space-y-2.5\">\n {data.map((d) => (\n <li key={d.key} className=\"flex items-center gap-3\">\n <span className={`${labelWidthClassName} shrink-0 truncate text-xs text-text-secondary`}>\n {d.label}\n </span>\n <div className=\"h-2.5 flex-1 overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className={`h-full rounded-full ${barClassName} transition-[width] duration-500`}\n style={{ width: `${Math.max(2, (d.value / max) * 100)}%` }}\n />\n </div>\n <span className=\"shrink-0 text-xs font-semibold tabular-nums text-text-primary\">\n {d.display}\n </span>\n </li>\n ))}\n </ul>\n );\n};\n"],"mappings":";;AAqBA,IAAa,KAA+B,EAC1C,SACA,kBAAe,kBACf,yBAAsB,qBAClB;CACJ,IAAM,IAAM,KAAK,IAAI,GAAG,EAAK,KAAK,MAAM,EAAE,KAAK,GAAG,CAAC;CAEnD,OACE,kBAAC,MAAD;EAAI,WAAU;YACX,EAAK,KAAK,MACT,kBAAC,MAAD;GAAgB,WAAU;aAA1B;IACE,kBAAC,QAAD;KAAM,WAAW,GAAG,EAAoB;eACrC,EAAE;IACC,CAAA;IACN,kBAAC,OAAD;KAAK,WAAU;eACb,kBAAC,OAAD;MACE,WAAW,uBAAuB,EAAa;MAC/C,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,GAAI,EAAE,QAAQ,IAAO,GAAG,EAAE,GAAG;KAC1D,CAAA;IACE,CAAA;IACL,kBAAC,QAAD;KAAM,WAAU;eACb,EAAE;IACC,CAAA;GACJ;KAbK,EAAE,GAaP,CACL;CACC,CAAA;AAER"}
@@ -1 +1 @@
1
- {"version":3,"file":"Sparkline.js","names":[],"sources":["../../../../src/adaptercloud/components/viz/Sparkline.tsx"],"sourcesContent":["/**\n * Sparkline — a tiny tokenized SVG area/line trend (e.g. monthly cost trend).\n * Uses currentColor + a unique gradient id so multiple sparklines coexist.\n */\nimport { useId, type FC } from 'react';\n\ninterface SparklineProps {\n points: number[];\n /** Wrapper class controls size + color (via text-*). Default accent-blue, full width, 40px tall. */\n className?: string;\n ariaLabel?: string;\n}\n\nexport const Sparkline: FC<SparklineProps> = ({\n points,\n className = 'text-accent-blue h-10 w-full',\n ariaLabel,\n}) => {\n const gradientId = useId();\n if (points.length < 2) return null;\n\n const w = 120;\n const h = 40;\n const max = Math.max(...points);\n const min = Math.min(...points);\n const range = max - min || 1;\n const step = w / (points.length - 1);\n const coords = points.map((p, i) => [i * step, h - ((p - min) / range) * (h - 4) - 2]);\n const line = coords\n .map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(1)},${y.toFixed(1)}`)\n .join(' ');\n const area = `${line} L${w},${h} L0,${h} Z`;\n\n return (\n <svg\n viewBox={`0 0 ${w} ${h}`}\n className={className}\n preserveAspectRatio=\"none\"\n role=\"img\"\n aria-label={ariaLabel ?? 'trend'}\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"currentColor\" stopOpacity=\"0.3\" />\n <stop offset=\"100%\" stopColor=\"currentColor\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <path d={area} fill={`url(#${gradientId})`} />\n <path\n d={line}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n );\n};\n"],"mappings":";;;AAaA,IAAa,KAAiC,EAC5C,WACA,eAAY,gCACZ,mBACI;CACJ,IAAM,IAAa,GAAO;AAC1B,KAAI,EAAO,SAAS,EAAG,QAAO;CAE9B,IAEM,IAAM,KAAK,IAAI,GAAG,EAAO,EACzB,IAAM,KAAK,IAAI,GAAG,EAAO,EACzB,IAAQ,IAAM,KAAO,GACrB,IAAO,OAAK,EAAO,SAAS,IAE5B,IADS,EAAO,KAAK,GAAG,MAAM,CAAC,IAAI,GAAM,MAAM,IAAI,KAAO,IAAU,KAAS,EAAE,CAAC,CAEnF,KAAK,CAAC,GAAG,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAC3E,KAAK,IAAI,EACN,IAAO,GAAG,EAAK;AAErB,QACE,kBAAC,OAAD;EACE,SAAS;EACE;EACX,qBAAoB;EACpB,MAAK;EACL,cAAY,KAAa;YAL3B;GAOE,kBAAC,QAAD,EAAA,UACE,kBAAC,kBAAD;IAAgB,IAAI;IAAY,IAAG;IAAI,IAAG;IAAI,IAAG;IAAI,IAAG;cAAxD,CACE,kBAAC,QAAD;KAAM,QAAO;KAAK,WAAU;KAAe,aAAY;KAAQ,CAAA,EAC/D,kBAAC,QAAD;KAAM,QAAO;KAAO,WAAU;KAAe,aAAY;KAAM,CAAA,CAChD;OACZ,CAAA;GACP,kBAAC,QAAD;IAAM,GAAG;IAAM,MAAM,QAAQ,EAAW;IAAM,CAAA;GAC9C,kBAAC,QAAD;IACK;IACH,MAAK;IACL,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf,cAAa;IACb,CAAA;GACE"}
1
+ {"version":3,"file":"Sparkline.js","names":[],"sources":["../../../../src/adaptercloud/components/viz/Sparkline.tsx"],"sourcesContent":["/**\n * Sparkline — a tiny tokenized SVG area/line trend (e.g. monthly cost trend).\n * Uses currentColor + a unique gradient id so multiple sparklines coexist.\n */\nimport { useId, type FC } from 'react';\n\ninterface SparklineProps {\n points: number[];\n /** Wrapper class controls size + color (via text-*). Default accent-blue, full width, 40px tall. */\n className?: string;\n ariaLabel?: string;\n}\n\nexport const Sparkline: FC<SparklineProps> = ({\n points,\n className = 'text-accent-blue h-10 w-full',\n ariaLabel,\n}) => {\n const gradientId = useId();\n if (points.length < 2) return null;\n\n const w = 120;\n const h = 40;\n const max = Math.max(...points);\n const min = Math.min(...points);\n const range = max - min || 1;\n const step = w / (points.length - 1);\n const coords = points.map((p, i) => [i * step, h - ((p - min) / range) * (h - 4) - 2]);\n const line = coords\n .map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(1)},${y.toFixed(1)}`)\n .join(' ');\n const area = `${line} L${w},${h} L0,${h} Z`;\n\n return (\n <svg\n viewBox={`0 0 ${w} ${h}`}\n className={className}\n preserveAspectRatio=\"none\"\n role=\"img\"\n aria-label={ariaLabel ?? 'trend'}\n >\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"currentColor\" stopOpacity=\"0.3\" />\n <stop offset=\"100%\" stopColor=\"currentColor\" stopOpacity=\"0\" />\n </linearGradient>\n </defs>\n <path d={area} fill={`url(#${gradientId})`} />\n <path\n d={line}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n );\n};\n"],"mappings":";;;AAaA,IAAa,KAAiC,EAC5C,WACA,eAAY,gCACZ,mBACI;CACJ,IAAM,IAAa,EAAM;CACzB,IAAI,EAAO,SAAS,GAAG,OAAO;CAE9B,IAEM,IAAM,KAAK,IAAI,GAAG,CAAM,GACxB,IAAM,KAAK,IAAI,GAAG,CAAM,GACxB,IAAQ,IAAM,KAAO,GACrB,IAAO,OAAK,EAAO,SAAS,IAE5B,IADS,EAAO,KAAK,GAAG,MAAM,CAAC,IAAI,GAAM,MAAM,IAAI,KAAO,IAAU,KAAS,CAAC,CACvE,EACV,KAAK,CAAC,GAAG,IAAI,MAAM,GAAG,MAAM,IAAI,MAAM,MAAM,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAC1E,KAAK,GAAG,GACL,IAAO,GAAG,EAAK;CAErB,OACE,kBAAC,OAAD;EACE,SAAS;EACE;EACX,qBAAoB;EACpB,MAAK;EACL,cAAY,KAAa;YAL3B;GAOE,kBAAC,QAAD,EAAA,UACE,kBAAC,kBAAD;IAAgB,IAAI;IAAY,IAAG;IAAI,IAAG;IAAI,IAAG;IAAI,IAAG;cAAxD,CACE,kBAAC,QAAD;KAAM,QAAO;KAAK,WAAU;KAAe,aAAY;IAAO,CAAA,GAC9D,kBAAC,QAAD;KAAM,QAAO;KAAO,WAAU;KAAe,aAAY;IAAK,CAAA,CAChD;MACZ,CAAA;GACN,kBAAC,QAAD;IAAM,GAAG;IAAM,MAAM,QAAQ,EAAW;GAAK,CAAA;GAC7C,kBAAC,QAAD;IACK;IACH,MAAK;IACL,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf,cAAa;GACd,CAAA;EACE;;AAET"}
@@ -9,12 +9,12 @@ var r = 168, i = 44, a = 120, o = 26, s = 28, c = ({ nodes: c, edges: l, selecte
9
9
  n.push(t), e.set(t.group, n);
10
10
  }
11
11
  let t = [...e.keys()], n = Math.max(1, ...[...e.values()].map((e) => e.length)), u = /* @__PURE__ */ new Map();
12
- t.forEach((t, c) => {
13
- let l = e.get(t), d = l.length * i + (l.length - 1) * o, f = s + (n * i + (n - 1) * o - d) / 2;
14
- l.forEach((e, t) => {
12
+ t.forEach((t, r) => {
13
+ let a = e.get(t), c = a.length * i + (a.length - 1) * o, l = s + (n * i + (n - 1) * o - c) / 2;
14
+ a.forEach((e, t) => {
15
15
  u.set(e.id, {
16
- x: s + c * (r + a),
17
- y: f + t * (i + o),
16
+ x: s + r * 288,
17
+ y: l + t * 70,
18
18
  node: e
19
19
  });
20
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"TopologyGraph.js","names":[],"sources":["../../../../src/adaptercloud/components/viz/TopologyGraph.tsx"],"sourcesContent":["/**\n * TopologyGraph — a tokenized, dependency graph of the estate. Deterministic\n * layered layout: nodes are grouped into columns by `group` (class of system),\n * stacked within the column; edges are drawn as SVG bezier curves between node\n * centres. Clicking a node highlights its incident edges and selects it (the\n * parent renders an inspector). No external graph lib — pure SVG + tokens.\n *\n * Data is REAL: the parent feeds nodes from `adaListResources` and edges from\n * `adaListTopologyEdges`.\n */\nimport { useMemo, type FC } from 'react';\n\nexport interface TopologyNode {\n id: string;\n label: string;\n /** Column grouping label, e.g. \"Public Cloud\", \"Kubernetes\", \"Edge / IoT\". */\n group: string;\n type?: string;\n /** Resource state — drives the node accent (DRIFTED → warning, ORPHANED → error, else default). */\n state?: string;\n}\n\nexport interface TopologyEdge {\n id: string;\n from: string;\n to: string;\n kind?: string;\n /** Optional: mark an edge as drifted to render it amber. */\n drifted?: boolean;\n}\n\nconst NODE_W = 168;\nconst NODE_H = 44;\nconst COL_GAP = 120;\nconst ROW_GAP = 26;\nconst PAD = 28;\n\ninterface TopologyGraphProps {\n nodes: TopologyNode[];\n edges: TopologyEdge[];\n selectedId?: string | null;\n onSelect?: (id: string) => void;\n}\n\nexport const TopologyGraph: FC<TopologyGraphProps> = ({ nodes, edges, selectedId, onSelect }) => {\n const { positioned, width, height, edgePaths } = useMemo(() => {\n // group → ordered nodes\n const groups = new Map<string, TopologyNode[]>();\n for (const n of nodes) {\n const g = groups.get(n.group) ?? [];\n g.push(n);\n groups.set(n.group, g);\n }\n const groupNames = [...groups.keys()];\n const maxCol = Math.max(1, ...[...groups.values()].map((g) => g.length));\n\n const pos = new Map<string, { x: number; y: number; node: TopologyNode }>();\n groupNames.forEach((name, ci) => {\n const colNodes = groups.get(name)!;\n const colHeight = colNodes.length * NODE_H + (colNodes.length - 1) * ROW_GAP;\n const fullHeight = maxCol * NODE_H + (maxCol - 1) * ROW_GAP;\n const yStart = PAD + (fullHeight - colHeight) / 2;\n colNodes.forEach((node, ri) => {\n pos.set(node.id, {\n x: PAD + ci * (NODE_W + COL_GAP),\n y: yStart + ri * (NODE_H + ROW_GAP),\n node,\n });\n });\n });\n\n const w = PAD * 2 + groupNames.length * NODE_W + Math.max(0, groupNames.length - 1) * COL_GAP;\n const h = PAD * 2 + maxCol * NODE_H + Math.max(0, maxCol - 1) * ROW_GAP;\n\n const paths = edges\n .map((e) => {\n const a = pos.get(e.from);\n const b = pos.get(e.to);\n if (!a || !b) return null;\n const x1 = a.x + NODE_W;\n const y1 = a.y + NODE_H / 2;\n const x2 = b.x;\n const y2 = b.y + NODE_H / 2;\n const mx = (x1 + x2) / 2;\n const d = `M${x1},${y1} C${mx},${y1} ${mx},${y2} ${x2},${y2}`;\n return { ...e, d };\n })\n .filter(Boolean) as (TopologyEdge & { d: string })[];\n\n return { positioned: [...pos.values()], width: w, height: h, edgePaths: paths };\n }, [nodes, edges]);\n\n const incident = useMemo(() => {\n if (!selectedId) return new Set<string>();\n return new Set(\n edgePaths.filter((e) => e.from === selectedId || e.to === selectedId).map((e) => e.id)\n );\n }, [selectedId, edgePaths]);\n\n const stateAccent = (state?: string) =>\n state === 'DRIFTED'\n ? 'border-status-warning-text/60'\n : state === 'ORPHANED' || state === 'DELETED'\n ? 'border-status-error-text/60'\n : 'border-border-strong';\n\n return (\n <div className=\"relative w-full overflow-auto rounded-xl border border-border-subtle bg-bg-sunken/40\">\n <div className=\"relative\" style={{ width, height, minWidth: '100%' }}>\n <svg className=\"absolute inset-0 h-full w-full\" width={width} height={height} aria-hidden>\n {edgePaths.map((e) => {\n const active = incident.has(e.id);\n const cls = e.drifted\n ? 'stroke-status-warning-text'\n : active\n ? 'stroke-accent-blue'\n : 'stroke-border-strong';\n return (\n <path\n key={e.id}\n d={e.d}\n fill=\"none\"\n className={cls}\n strokeWidth={active ? 2 : 1.25}\n strokeOpacity={selectedId && !active && !e.drifted ? 0.35 : 0.9}\n />\n );\n })}\n </svg>\n\n {positioned.map(({ x, y, node }) => {\n const selected = node.id === selectedId;\n return (\n <button\n key={node.id}\n type=\"button\"\n onClick={() => onSelect?.(node.id)}\n style={{ left: x, top: y, width: NODE_W, height: NODE_H }}\n className={`absolute flex items-center gap-2 rounded-lg border bg-bg-surface/90 px-3 text-left backdrop-blur transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] ${\n selected ? 'border-accent-blue ring-2 ring-accent-blue/40' : stateAccent(node.state)\n }`}\n title={node.type ? `${node.label} · ${node.type}` : node.label}\n >\n <span\n className={`h-2 w-2 shrink-0 rounded-full ${\n node.state === 'DRIFTED'\n ? 'bg-status-warning-text'\n : node.state === 'ORPHANED' || node.state === 'DELETED'\n ? 'bg-status-error-text'\n : 'bg-status-success-text'\n }`}\n aria-hidden\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-medium text-text-primary\">\n {node.label}\n </span>\n {node.type && (\n <span className=\"block truncate font-mono text-[10px] text-text-secondary\">\n {node.type}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"TopologyGraph.js","names":[],"sources":["../../../../src/adaptercloud/components/viz/TopologyGraph.tsx"],"sourcesContent":["/**\n * TopologyGraph — a tokenized, dependency graph of the estate. Deterministic\n * layered layout: nodes are grouped into columns by `group` (class of system),\n * stacked within the column; edges are drawn as SVG bezier curves between node\n * centres. Clicking a node highlights its incident edges and selects it (the\n * parent renders an inspector). No external graph lib — pure SVG + tokens.\n *\n * Data is REAL: the parent feeds nodes from `adaListResources` and edges from\n * `adaListTopologyEdges`.\n */\nimport { useMemo, type FC } from 'react';\n\nexport interface TopologyNode {\n id: string;\n label: string;\n /** Column grouping label, e.g. \"Public Cloud\", \"Kubernetes\", \"Edge / IoT\". */\n group: string;\n type?: string;\n /** Resource state — drives the node accent (DRIFTED → warning, ORPHANED → error, else default). */\n state?: string;\n}\n\nexport interface TopologyEdge {\n id: string;\n from: string;\n to: string;\n kind?: string;\n /** Optional: mark an edge as drifted to render it amber. */\n drifted?: boolean;\n}\n\nconst NODE_W = 168;\nconst NODE_H = 44;\nconst COL_GAP = 120;\nconst ROW_GAP = 26;\nconst PAD = 28;\n\ninterface TopologyGraphProps {\n nodes: TopologyNode[];\n edges: TopologyEdge[];\n selectedId?: string | null;\n onSelect?: (id: string) => void;\n}\n\nexport const TopologyGraph: FC<TopologyGraphProps> = ({ nodes, edges, selectedId, onSelect }) => {\n const { positioned, width, height, edgePaths } = useMemo(() => {\n // group → ordered nodes\n const groups = new Map<string, TopologyNode[]>();\n for (const n of nodes) {\n const g = groups.get(n.group) ?? [];\n g.push(n);\n groups.set(n.group, g);\n }\n const groupNames = [...groups.keys()];\n const maxCol = Math.max(1, ...[...groups.values()].map((g) => g.length));\n\n const pos = new Map<string, { x: number; y: number; node: TopologyNode }>();\n groupNames.forEach((name, ci) => {\n const colNodes = groups.get(name)!;\n const colHeight = colNodes.length * NODE_H + (colNodes.length - 1) * ROW_GAP;\n const fullHeight = maxCol * NODE_H + (maxCol - 1) * ROW_GAP;\n const yStart = PAD + (fullHeight - colHeight) / 2;\n colNodes.forEach((node, ri) => {\n pos.set(node.id, {\n x: PAD + ci * (NODE_W + COL_GAP),\n y: yStart + ri * (NODE_H + ROW_GAP),\n node,\n });\n });\n });\n\n const w = PAD * 2 + groupNames.length * NODE_W + Math.max(0, groupNames.length - 1) * COL_GAP;\n const h = PAD * 2 + maxCol * NODE_H + Math.max(0, maxCol - 1) * ROW_GAP;\n\n const paths = edges\n .map((e) => {\n const a = pos.get(e.from);\n const b = pos.get(e.to);\n if (!a || !b) return null;\n const x1 = a.x + NODE_W;\n const y1 = a.y + NODE_H / 2;\n const x2 = b.x;\n const y2 = b.y + NODE_H / 2;\n const mx = (x1 + x2) / 2;\n const d = `M${x1},${y1} C${mx},${y1} ${mx},${y2} ${x2},${y2}`;\n return { ...e, d };\n })\n .filter(Boolean) as (TopologyEdge & { d: string })[];\n\n return { positioned: [...pos.values()], width: w, height: h, edgePaths: paths };\n }, [nodes, edges]);\n\n const incident = useMemo(() => {\n if (!selectedId) return new Set<string>();\n return new Set(\n edgePaths.filter((e) => e.from === selectedId || e.to === selectedId).map((e) => e.id)\n );\n }, [selectedId, edgePaths]);\n\n const stateAccent = (state?: string) =>\n state === 'DRIFTED'\n ? 'border-status-warning-text/60'\n : state === 'ORPHANED' || state === 'DELETED'\n ? 'border-status-error-text/60'\n : 'border-border-strong';\n\n return (\n <div className=\"relative w-full overflow-auto rounded-xl border border-border-subtle bg-bg-sunken/40\">\n <div className=\"relative\" style={{ width, height, minWidth: '100%' }}>\n <svg className=\"absolute inset-0 h-full w-full\" width={width} height={height} aria-hidden>\n {edgePaths.map((e) => {\n const active = incident.has(e.id);\n const cls = e.drifted\n ? 'stroke-status-warning-text'\n : active\n ? 'stroke-accent-blue'\n : 'stroke-border-strong';\n return (\n <path\n key={e.id}\n d={e.d}\n fill=\"none\"\n className={cls}\n strokeWidth={active ? 2 : 1.25}\n strokeOpacity={selectedId && !active && !e.drifted ? 0.35 : 0.9}\n />\n );\n })}\n </svg>\n\n {positioned.map(({ x, y, node }) => {\n const selected = node.id === selectedId;\n return (\n <button\n key={node.id}\n type=\"button\"\n onClick={() => onSelect?.(node.id)}\n style={{ left: x, top: y, width: NODE_W, height: NODE_H }}\n className={`absolute flex items-center gap-2 rounded-lg border bg-bg-surface/90 px-3 text-left backdrop-blur transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-focus-ring)] ${\n selected ? 'border-accent-blue ring-2 ring-accent-blue/40' : stateAccent(node.state)\n }`}\n title={node.type ? `${node.label} · ${node.type}` : node.label}\n >\n <span\n className={`h-2 w-2 shrink-0 rounded-full ${\n node.state === 'DRIFTED'\n ? 'bg-status-warning-text'\n : node.state === 'ORPHANED' || node.state === 'DELETED'\n ? 'bg-status-error-text'\n : 'bg-status-success-text'\n }`}\n aria-hidden\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-medium text-text-primary\">\n {node.label}\n </span>\n {node.type && (\n <span className=\"block truncate font-mono text-[10px] text-text-secondary\">\n {node.type}\n </span>\n )}\n </span>\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdapterCloudContext.js","names":[],"sources":["../../../src/adaptercloud/context/AdapterCloudContext.tsx"],"sourcesContent":["/**\n * AdapterCloud Context Provider\n * @module adaptercloud/context\n *\n * Provides the host-passed integration props (basePath / currentUser /\n * apiGatewayUrl / tenantId / workspaceId / authToken) plus navigation helpers to\n * the AdapterCloud pages. Standalone mode wraps a MemoryRouter; integrated mode\n * uses the shell-provided `navigate`.\n */\n\nimport type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo, useCallback } from 'react';\nimport { MemoryRouter, useNavigate as useRouterNavigate } from 'react-router-dom';\nimport type { AdapterCloudRootProps } from '../types';\nimport { joinPath } from '../utils/navigation';\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface AdapterCloudContextValue extends Omit<\n AdapterCloudRootProps,\n 'registerNavItems' | 'registerFooterItems' | 'navigate'\n> {\n isStandalone: boolean;\n /** Shell's navigate function (only available in integrated mode) */\n navigate?: (path: string) => void;\n /** Navigate to a path relative to basePath */\n navigateTo: (relativePath: string) => void;\n /** Get the full path for a relative path */\n getPath: (relativePath: string) => string;\n}\n\nconst AdapterCloudContext = createContext<AdapterCloudContextValue | null>(null);\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport function useAdapterCloud(): AdapterCloudContextValue {\n const context = useContext(AdapterCloudContext);\n if (!context) {\n throw new Error('useAdapterCloud must be used within a AdapterCloudProvider');\n }\n return context;\n}\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\ntype ProviderProps = Omit<AdapterCloudRootProps, 'registerNavItems' | 'registerFooterItems'> & {\n isStandalone: boolean;\n};\n\n/** Provider for standalone mode (has access to MemoryRouter) */\nconst StandaloneProviderInner: FC<PropsWithChildren<ProviderProps>> = ({\n children,\n basePath,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n}) => {\n const routerNavigate = useRouterNavigate();\n const effectiveBasePath = basePath || '/';\n\n const getPath = useCallback(\n (relativePath: string) => joinPath(effectiveBasePath, relativePath),\n [effectiveBasePath]\n );\n\n const navigateTo = useCallback(\n (relativePath: string) => {\n const fullPath = joinPath(effectiveBasePath, relativePath);\n routerNavigate(fullPath);\n },\n [effectiveBasePath, routerNavigate]\n );\n\n const contextValue = useMemo<AdapterCloudContextValue>(\n () => ({\n basePath: effectiveBasePath,\n navigate: undefined,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n isStandalone: true,\n navigateTo,\n getPath,\n }),\n [\n effectiveBasePath,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n navigateTo,\n getPath,\n ]\n );\n\n return (\n <AdapterCloudContext.Provider value={contextValue}>{children}</AdapterCloudContext.Provider>\n );\n};\n\n/** Provider for integrated mode (shell provides navigate) */\nconst IntegratedProviderInner: FC<\n PropsWithChildren<ProviderProps & { navigate: (path: string) => void }>\n> = ({\n children,\n basePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n}) => {\n const effectiveBasePath = basePath || '/';\n\n const getPath = useCallback(\n (relativePath: string) => joinPath(effectiveBasePath, relativePath),\n [effectiveBasePath]\n );\n\n const navigateTo = useCallback(\n (relativePath: string) => {\n const fullPath = joinPath(effectiveBasePath, relativePath);\n navigate(fullPath);\n },\n [effectiveBasePath, navigate]\n );\n\n const contextValue = useMemo<AdapterCloudContextValue>(\n () => ({\n basePath: effectiveBasePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n isStandalone: false,\n navigateTo,\n getPath,\n }),\n [\n effectiveBasePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n navigateTo,\n getPath,\n ]\n );\n\n return (\n <AdapterCloudContext.Provider value={contextValue}>{children}</AdapterCloudContext.Provider>\n );\n};\n\nexport const AdapterCloudProvider: FC<PropsWithChildren<AdapterCloudRootProps>> = (props) => {\n const { children, navigate } = props;\n // Standalone mode: no navigate function provided (MFE manages its own router)\n // Integrated mode: navigate function provided by shell (shell provides router)\n const isStandalone = !navigate;\n\n // Standalone mode: wrap in MemoryRouter\n if (isStandalone) {\n return (\n <MemoryRouter>\n <StandaloneProviderInner {...props} isStandalone={true}>\n {children}\n </StandaloneProviderInner>\n </MemoryRouter>\n );\n }\n\n // Integrated mode: shell provides router\n return (\n <IntegratedProviderInner {...props} navigate={navigate} isStandalone={false}>\n {children}\n </IntegratedProviderInner>\n );\n};\n"],"mappings":";;;;;AAiCA,IAAM,IAAsB,EAA+C,KAAK;AAMhF,SAAgB,IAA4C;CAC1D,IAAM,IAAU,EAAW,EAAoB;AAC/C,KAAI,CAAC,EACH,OAAU,MAAM,6DAA6D;AAE/E,QAAO;;AAYT,IAAM,KAAiE,EACrE,aACA,aACA,gBACA,aACA,gBACA,kBACA,mBACI;CACJ,IAAM,IAAiB,GAAmB,EACpC,IAAoB,KAAY,KAEhC,IAAU,GACb,MAAyB,EAAS,GAAmB,EAAa,EACnE,CAAC,EAAkB,CACpB,EAEK,IAAa,GAChB,MAAyB;AAExB,IADiB,EAAS,GAAmB,EAAa,CAClC;IAE1B,CAAC,GAAmB,EAAe,CACpC,EAEK,IAAe,SACZ;EACL,UAAU;EACV,UAAU,KAAA;EACV;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QACE,kBAAC,EAAoB,UAArB;EAA8B,OAAO;EAAe;EAAwC,CAAA;GAK1F,KAED,EACH,aACA,aACA,aACA,gBACA,aACA,gBACA,kBACA,mBACI;CACJ,IAAM,IAAoB,KAAY,KAEhC,IAAU,GACb,MAAyB,EAAS,GAAmB,EAAa,EACnE,CAAC,EAAkB,CACpB,EAEK,IAAa,GAChB,MAAyB;AAExB,IADiB,EAAS,GAAmB,EAAa,CACxC;IAEpB,CAAC,GAAmB,EAAS,CAC9B,EAEK,IAAe,SACZ;EACL,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;EACD,GACD;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF;AAED,QACE,kBAAC,EAAoB,UAArB;EAA8B,OAAO;EAAe;EAAwC,CAAA;GAInF,KAAsE,MAAU;CAC3F,IAAM,EAAE,aAAU,gBAAa;AAiB/B,QAdsB,IAepB,kBAAC,GAAD;EAAyB,GAAI;EAAiB;EAAU,cAAc;EACnE;EACuB,CAAA,GAZxB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EAAyB,GAAI;EAAO,cAAc;EAC/C;EACuB,CAAA,EACb,CAAA"}
1
+ {"version":3,"file":"AdapterCloudContext.js","names":[],"sources":["../../../src/adaptercloud/context/AdapterCloudContext.tsx"],"sourcesContent":["/**\n * AdapterCloud Context Provider\n * @module adaptercloud/context\n *\n * Provides the host-passed integration props (basePath / currentUser /\n * apiGatewayUrl / tenantId / workspaceId / authToken) plus navigation helpers to\n * the AdapterCloud pages. Standalone mode wraps a MemoryRouter; integrated mode\n * uses the shell-provided `navigate`.\n */\n\nimport type { FC, PropsWithChildren } from 'react';\nimport { createContext, useContext, useMemo, useCallback } from 'react';\nimport { MemoryRouter, useNavigate as useRouterNavigate } from 'react-router-dom';\nimport type { AdapterCloudRootProps } from '../types';\nimport { joinPath } from '../utils/navigation';\n\n// ============================================================================\n// Context\n// ============================================================================\n\ninterface AdapterCloudContextValue extends Omit<\n AdapterCloudRootProps,\n 'registerNavItems' | 'registerFooterItems' | 'navigate'\n> {\n isStandalone: boolean;\n /** Shell's navigate function (only available in integrated mode) */\n navigate?: (path: string) => void;\n /** Navigate to a path relative to basePath */\n navigateTo: (relativePath: string) => void;\n /** Get the full path for a relative path */\n getPath: (relativePath: string) => string;\n}\n\nconst AdapterCloudContext = createContext<AdapterCloudContextValue | null>(null);\n\n// ============================================================================\n// Hook\n// ============================================================================\n\nexport function useAdapterCloud(): AdapterCloudContextValue {\n const context = useContext(AdapterCloudContext);\n if (!context) {\n throw new Error('useAdapterCloud must be used within a AdapterCloudProvider');\n }\n return context;\n}\n\n// ============================================================================\n// Provider Component\n// ============================================================================\n\ntype ProviderProps = Omit<AdapterCloudRootProps, 'registerNavItems' | 'registerFooterItems'> & {\n isStandalone: boolean;\n};\n\n/** Provider for standalone mode (has access to MemoryRouter) */\nconst StandaloneProviderInner: FC<PropsWithChildren<ProviderProps>> = ({\n children,\n basePath,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n}) => {\n const routerNavigate = useRouterNavigate();\n const effectiveBasePath = basePath || '/';\n\n const getPath = useCallback(\n (relativePath: string) => joinPath(effectiveBasePath, relativePath),\n [effectiveBasePath]\n );\n\n const navigateTo = useCallback(\n (relativePath: string) => {\n const fullPath = joinPath(effectiveBasePath, relativePath);\n routerNavigate(fullPath);\n },\n [effectiveBasePath, routerNavigate]\n );\n\n const contextValue = useMemo<AdapterCloudContextValue>(\n () => ({\n basePath: effectiveBasePath,\n navigate: undefined,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n isStandalone: true,\n navigateTo,\n getPath,\n }),\n [\n effectiveBasePath,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n navigateTo,\n getPath,\n ]\n );\n\n return (\n <AdapterCloudContext.Provider value={contextValue}>{children}</AdapterCloudContext.Provider>\n );\n};\n\n/** Provider for integrated mode (shell provides navigate) */\nconst IntegratedProviderInner: FC<\n PropsWithChildren<ProviderProps & { navigate: (path: string) => void }>\n> = ({\n children,\n basePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n}) => {\n const effectiveBasePath = basePath || '/';\n\n const getPath = useCallback(\n (relativePath: string) => joinPath(effectiveBasePath, relativePath),\n [effectiveBasePath]\n );\n\n const navigateTo = useCallback(\n (relativePath: string) => {\n const fullPath = joinPath(effectiveBasePath, relativePath);\n navigate(fullPath);\n },\n [effectiveBasePath, navigate]\n );\n\n const contextValue = useMemo<AdapterCloudContextValue>(\n () => ({\n basePath: effectiveBasePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n isStandalone: false,\n navigateTo,\n getPath,\n }),\n [\n effectiveBasePath,\n navigate,\n currentUser,\n tenantId,\n workspaceId,\n apiGatewayUrl,\n authToken,\n navigateTo,\n getPath,\n ]\n );\n\n return (\n <AdapterCloudContext.Provider value={contextValue}>{children}</AdapterCloudContext.Provider>\n );\n};\n\nexport const AdapterCloudProvider: FC<PropsWithChildren<AdapterCloudRootProps>> = (props) => {\n const { children, navigate } = props;\n // Standalone mode: no navigate function provided (MFE manages its own router)\n // Integrated mode: navigate function provided by shell (shell provides router)\n const isStandalone = !navigate;\n\n // Standalone mode: wrap in MemoryRouter\n if (isStandalone) {\n return (\n <MemoryRouter>\n <StandaloneProviderInner {...props} isStandalone={true}>\n {children}\n </StandaloneProviderInner>\n </MemoryRouter>\n );\n }\n\n // Integrated mode: shell provides router\n return (\n <IntegratedProviderInner {...props} navigate={navigate} isStandalone={false}>\n {children}\n </IntegratedProviderInner>\n );\n};\n"],"mappings":";;;;;AAiCA,IAAM,IAAsB,EAA+C,IAAI;AAM/E,SAAgB,IAA4C;CAC1D,IAAM,IAAU,EAAW,CAAmB;CAC9C,IAAI,CAAC,GACH,MAAU,MAAM,4DAA4D;CAE9E,OAAO;AACT;AAWA,IAAM,KAAiE,EACrE,aACA,aACA,gBACA,aACA,gBACA,kBACA,mBACI;CACJ,IAAM,IAAiB,EAAkB,GACnC,IAAoB,KAAY,KAEhC,IAAU,GACb,MAAyB,EAAS,GAAmB,CAAY,GAClE,CAAC,CAAiB,CACpB,GAEM,IAAa,GAChB,MAAyB;EAExB,EADiB,EAAS,GAAmB,CAC9B,CAAQ;CACzB,GACA,CAAC,GAAmB,CAAc,CACpC,GAEM,IAAe,SACZ;EACL,UAAU;EACV,UAAU,KAAA;EACV;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,OACE,kBAAC,EAAoB,UAArB;EAA8B,OAAO;EAAe;CAAuC,CAAA;AAE/F,GAGM,KAED,EACH,aACA,aACA,aACA,gBACA,aACA,gBACA,kBACA,mBACI;CACJ,IAAM,IAAoB,KAAY,KAEhC,IAAU,GACb,MAAyB,EAAS,GAAmB,CAAY,GAClE,CAAC,CAAiB,CACpB,GAEM,IAAa,GAChB,MAAyB;EAExB,EADiB,EAAS,GAAmB,CACpC,CAAQ;CACnB,GACA,CAAC,GAAmB,CAAQ,CAC9B,GAEM,IAAe,SACZ;EACL,UAAU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACd;EACA;CACF,IACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CACF;CAEA,OACE,kBAAC,EAAoB,UAArB;EAA8B,OAAO;EAAe;CAAuC,CAAA;AAE/F,GAEa,KAAsE,MAAU;CAC3F,IAAM,EAAE,aAAU,gBAAa;CAiB/B,OAdsB,IAepB,kBAAC,GAAD;EAAyB,GAAI;EAAiB;EAAU,cAAc;EACnE;CACsB,CAAA,IAZvB,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EAAyB,GAAI;EAAO,cAAc;EAC/C;CACsB,CAAA,EACb,CAAA;AAUpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAdapterCloudApi.d.ts","sourceRoot":"","sources":["../../../src/adaptercloud/hooks/useAdapterCloudApi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,KAAK,EACV,UAAU,EACV,wBAAwB,EACxB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,SAAS,EACT,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,UAAU,CAAC;AAMlB,eAAO,MAAM,OAAO;;;iCAGW,MAAM;0BAEb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;uBAE1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;kBAC5B,MAAM;0BACE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAE5B,MAAM;wBACH,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;mBAC5B,MAAM;uBACF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;iBAC7B,MAAM;yBACE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;uBACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;kBAC5B,MAAM;uBACD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAC3C,CAAC;AAwFF,eAAO,MAAM,YAAY,qEAcxB,CAAC;AAMF,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW,GAAI,SAAQ,iBAAsB,6FAwBzD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,IAAI,MAAM,GAAG,SAAS,sFAoBhD,CAAC;AAEF,eAAO,MAAM,gBAAgB,4GAkB5B,CAAC;AAEF,eAAO,MAAM,gBAAgB;QAIe,MAAM;WAAS,qBAAqB;WAe/E,CAAC;AAEF,eAAO,MAAM,iBAAiB,0FAgB7B,CAAC;AAMF,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,eAAO,MAAM,cAAc,GAAI,SAAQ,oBAAyB,sFA2B/D,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,IAAI,MAAM,GAAG,SAAS,yFAqBnD,CAAC;AAEF,eAAO,MAAM,mBAAmB,kHAkB/B,CAAC;AAEF,eAAO,MAAM,mBAAmB;QAIY,MAAM;WAAS,wBAAwB;WAelF,CAAC;AAEF,eAAO,MAAM,sBAAsB;QAIU,MAAM;YAAU,mBAAmB;WAgB/E,CAAC;AAEF,eAAO,MAAM,oBAAoB,gGAoBhC,CAAC;AAMF,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,eAAO,MAAM,YAAY,GAAI,SAAQ,kBAAuB,oFA4B3D,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,IAAI,MAAM,GAAG,SAAS,uFAqBjD,CAAC;AAMF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW,GAAI,SAAQ,gBAAqB,kFAwBxD,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,IAAI,MAAM,GAAG,SAAS,qFAoB/C,CAAC;AAEF,eAAO,MAAM,eAAe,0GAkB3B,CAAC;AAEF,eAAO,MAAM,eAAe;QAIgB,MAAM;WAAS,oBAAoB;WAgB9E,CAAC;AAEF,eAAO,MAAM,gBAAgB,0FAgB5B,CAAC;AAMF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,eAAO,MAAM,aAAa,GAAI,SAAQ,mBAAwB,2FA4B7D,CAAC;AAEF,eAAO,MAAM,mBAAmB;QAStB,MAAM;YACF,kBAAkB;mBACX,MAAM;WAwB1B,CAAC;AAMF,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,eAAO,MAAM,eAAe,GAAI,SAAQ,eAAoB,qFAgB3D,CAAC;AAEF,eAAO,MAAM,iBAAiB,iGAoB7B,CAAC;AAMF,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,UAAU,CAAC,EAAE,eAAe,CAAC;CAC9B;AAED,eAAO,MAAM,WAAW,GAAI,SAAQ,iBAAsB,mFA2BzD,CAAC;AAEF,eAAO,MAAM,eAAe,2GAoB3B,CAAC;AAEF,eAAO,MAAM,gBAAgB,6FAmB5B,CAAC;AAMF,eAAO,MAAM,cAAc,GAAI,eAAe,MAAM,mFAmBnD,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,cAAc,GAAI,SAAQ,oBAAyB,oFAyB/D,CAAC;AAMF,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,SAAQ,cAAmB,sFAkBtD,CAAC"}
1
+ {"version":3,"file":"useAdapterCloudApi.d.ts","sourceRoot":"","sources":["../../../src/adaptercloud/hooks/useAdapterCloudApi.ts"],"names":[],"mappings":"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"}
@@ -377,12 +377,16 @@ var s = {
377
377
  let { apiGatewayUrl: n } = e();
378
378
  return r({
379
379
  queryKey: s.drift(t),
380
- queryFn: async () => (await c(`query AdaListDriftRecords($resourceId: ID, $status: AdaDriftStatus) {
381
- adaListDriftRecords(resourceId: $resourceId, status: $status) { ${h} }
380
+ queryFn: async () => (await c(`query AdaListDriftRecords($resourceId: ID, $status: AdaDriftStatus, $pagination: PaginationInput) {
381
+ adaListDriftRecords(resourceId: $resourceId, status: $status, pagination: $pagination) {
382
+ items { ${h} }
383
+ pageInfo { ${_} }
384
+ }
382
385
  }`, {
383
386
  resourceId: t.resourceId,
384
- status: t.status
385
- }, n)).adaListDriftRecords,
387
+ status: t.status,
388
+ pagination: { limit: 100 }
389
+ }, n)).adaListDriftRecords.items,
386
390
  staleTime: l
387
391
  });
388
392
  }, z = () => {