@burdenoff/microfe-adaptercloud 2026.629.1 → 2026.706.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.
- package/dist/adaptercloud/AdapterCloudRoot.js +39 -33
- package/dist/adaptercloud/AdapterCloudRoot.js.map +1 -1
- package/dist/adaptercloud/AdapterCloudRoutes.js +5 -1
- package/dist/adaptercloud/AdapterCloudRoutes.js.map +1 -1
- package/dist/adaptercloud/components/ConfirmDialog.js +27 -0
- package/dist/adaptercloud/components/ConfirmDialog.js.map +1 -0
- package/dist/adaptercloud/components/DataState.js +1 -1
- package/dist/adaptercloud/components/DataState.js.map +1 -1
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js +246 -220
- package/dist/adaptercloud/hooks/useAdapterCloudApi.js.map +1 -1
- package/dist/adaptercloud/lib/toast.js +36 -0
- package/dist/adaptercloud/lib/toast.js.map +1 -0
- package/dist/adaptercloud/pages/OverviewPage.js +159 -156
- package/dist/adaptercloud/pages/OverviewPage.js.map +1 -1
- package/dist/adaptercloud/pages/adapters/AdapterDetailPage.js +102 -89
- package/dist/adaptercloud/pages/adapters/AdapterDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/adapters/AdapterFormPage.js +2 -0
- package/dist/adaptercloud/pages/adapters/AdapterFormPage.js.map +1 -1
- package/dist/adaptercloud/pages/adapters/AdaptersListPage.js +2 -0
- package/dist/adaptercloud/pages/adapters/AdaptersListPage.js.map +1 -1
- package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js +141 -124
- package/dist/adaptercloud/pages/connections/ConnectionDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/connections/ConnectionFormPage.js +2 -0
- package/dist/adaptercloud/pages/connections/ConnectionFormPage.js.map +1 -1
- package/dist/adaptercloud/pages/connections/ConnectionsListPage.js +1 -0
- package/dist/adaptercloud/pages/connections/ConnectionsListPage.js.map +1 -1
- package/dist/adaptercloud/pages/costs/CostsPage.js +112 -87
- package/dist/adaptercloud/pages/costs/CostsPage.js.map +1 -1
- package/dist/adaptercloud/pages/drift/DriftListPage.js +81 -59
- package/dist/adaptercloud/pages/drift/DriftListPage.js.map +1 -1
- package/dist/adaptercloud/pages/policies/PoliciesListPage.js +2 -0
- package/dist/adaptercloud/pages/policies/PoliciesListPage.js.map +1 -1
- package/dist/adaptercloud/pages/policies/PolicyDetailPage.js +109 -91
- package/dist/adaptercloud/pages/policies/PolicyDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/policies/PolicyFormPage.js +211 -184
- package/dist/adaptercloud/pages/policies/PolicyFormPage.js.map +1 -1
- package/dist/adaptercloud/pages/resources/ResourceDetailPage.js +153 -111
- package/dist/adaptercloud/pages/resources/ResourceDetailPage.js.map +1 -1
- package/dist/adaptercloud/pages/resources/ResourcesListPage.js +111 -83
- package/dist/adaptercloud/pages/resources/ResourcesListPage.js.map +1 -1
- package/dist/adaptercloud/pages/sync-runs/SyncRunsListPage.js +108 -86
- package/dist/adaptercloud/pages/sync-runs/SyncRunsListPage.js.map +1 -1
- package/dist/adaptercloud/pages/violations/ViolationsListPage.js +11 -3
- package/dist/adaptercloud/pages/violations/ViolationsListPage.js.map +1 -1
- package/dist/adaptercloud/utils/domain.js +1 -0
- package/dist/adaptercloud/utils/domain.js.map +1 -1
- package/dist/adaptercloud/utils/formatters.js +3 -15
- package/dist/adaptercloud/utils/formatters.js.map +1 -1
- package/dist/index.js +4 -4
- package/package.json +2 -1
|
@@ -1,27 +1,33 @@
|
|
|
1
1
|
import { AdapterCloudProvider as e } from "./context/AdapterCloudContext.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
2
|
+
import { notify as t } from "./lib/toast.js";
|
|
3
|
+
import { AdapterCloudRoutes as n } from "./AdapterCloudRoutes.js";
|
|
4
|
+
import { useCallback as r, useEffect as i } from "react";
|
|
5
|
+
import { MutationCache as a, QueryClient as o, QueryClientProvider as s } from "@tanstack/react-query";
|
|
6
|
+
import { useI18n as c } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
7
|
+
import { Activity as l, Boxes as u, Cable as d, DollarSign as f, GitCompareArrows as p, LayoutDashboard as m, ScrollText as h, Server as g, ShieldAlert as _ } from "lucide-react";
|
|
8
|
+
import { jsx as v } from "react/jsx-runtime";
|
|
9
|
+
import { FeatureFlagProvider as y } from "@burdenoff/fe-libs/shared/feature-flags";
|
|
9
10
|
//#region src/adaptercloud/AdapterCloudRoot.tsx
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} }
|
|
14
|
-
|
|
11
|
+
var b = new o({
|
|
12
|
+
mutationCache: new a({ onError: (e) => {
|
|
13
|
+
t.error("Something went wrong", e instanceof Error ? e.message : "Please try again.");
|
|
14
|
+
} }),
|
|
15
|
+
defaultOptions: { queries: {
|
|
16
|
+
staleTime: 300 * 1e3,
|
|
17
|
+
retry: 1
|
|
18
|
+
} }
|
|
19
|
+
}), x = (t) => {
|
|
20
|
+
let { registerNavItems: a, registerFooterItems: o, basePath: x = "/" } = t, { t: S } = c(), C = r((e, t) => {
|
|
15
21
|
let n = S(e);
|
|
16
22
|
return n === e ? t : n;
|
|
17
23
|
}, [S]), w = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`);
|
|
18
|
-
return
|
|
19
|
-
if (
|
|
24
|
+
return i(() => {
|
|
25
|
+
if (a) return a([
|
|
20
26
|
{
|
|
21
27
|
id: "adaptercloud-overview",
|
|
22
28
|
label: C("adaptercloud.nav.overview", "Overview"),
|
|
23
29
|
path: w(x, ""),
|
|
24
|
-
icon: /* @__PURE__ */
|
|
30
|
+
icon: /* @__PURE__ */ v(m, { size: 20 }),
|
|
25
31
|
order: 1,
|
|
26
32
|
group: "main"
|
|
27
33
|
},
|
|
@@ -29,7 +35,7 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
29
35
|
id: "adaptercloud-adapters",
|
|
30
36
|
label: C("adaptercloud.nav.adapters", "Adapters"),
|
|
31
37
|
path: w(x, "adapters"),
|
|
32
|
-
icon: /* @__PURE__ */
|
|
38
|
+
icon: /* @__PURE__ */ v(u, { size: 20 }),
|
|
33
39
|
order: 10,
|
|
34
40
|
group: "fabric"
|
|
35
41
|
},
|
|
@@ -37,7 +43,7 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
37
43
|
id: "adaptercloud-connections",
|
|
38
44
|
label: C("adaptercloud.nav.connections", "Connections"),
|
|
39
45
|
path: w(x, "connections"),
|
|
40
|
-
icon: /* @__PURE__ */
|
|
46
|
+
icon: /* @__PURE__ */ v(d, { size: 20 }),
|
|
41
47
|
order: 11,
|
|
42
48
|
group: "fabric"
|
|
43
49
|
},
|
|
@@ -45,7 +51,7 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
45
51
|
id: "adaptercloud-resources",
|
|
46
52
|
label: C("adaptercloud.nav.resources", "Resources"),
|
|
47
53
|
path: w(x, "resources"),
|
|
48
|
-
icon: /* @__PURE__ */ g
|
|
54
|
+
icon: /* @__PURE__ */ v(g, { size: 20 }),
|
|
49
55
|
order: 12,
|
|
50
56
|
group: "fabric"
|
|
51
57
|
},
|
|
@@ -53,7 +59,7 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
53
59
|
id: "adaptercloud-policies",
|
|
54
60
|
label: C("adaptercloud.nav.policies", "Policies"),
|
|
55
61
|
path: w(x, "policies"),
|
|
56
|
-
icon: /* @__PURE__ */
|
|
62
|
+
icon: /* @__PURE__ */ v(h, { size: 20 }),
|
|
57
63
|
order: 20,
|
|
58
64
|
group: "governance"
|
|
59
65
|
},
|
|
@@ -61,7 +67,7 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
61
67
|
id: "adaptercloud-violations",
|
|
62
68
|
label: C("adaptercloud.nav.violations", "Violations"),
|
|
63
69
|
path: w(x, "violations"),
|
|
64
|
-
icon: /* @__PURE__ */
|
|
70
|
+
icon: /* @__PURE__ */ v(_, { size: 20 }),
|
|
65
71
|
order: 21,
|
|
66
72
|
group: "governance"
|
|
67
73
|
},
|
|
@@ -69,7 +75,7 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
69
75
|
id: "adaptercloud-drift",
|
|
70
76
|
label: C("adaptercloud.nav.drift", "Drift"),
|
|
71
77
|
path: w(x, "drift"),
|
|
72
|
-
icon: /* @__PURE__ */
|
|
78
|
+
icon: /* @__PURE__ */ v(p, { size: 20 }),
|
|
73
79
|
order: 22,
|
|
74
80
|
group: "governance"
|
|
75
81
|
},
|
|
@@ -77,7 +83,7 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
77
83
|
id: "adaptercloud-sync-runs",
|
|
78
84
|
label: C("adaptercloud.nav.syncRuns", "Sync Runs"),
|
|
79
85
|
path: w(x, "sync-runs"),
|
|
80
|
-
icon: /* @__PURE__ */
|
|
86
|
+
icon: /* @__PURE__ */ v(l, { size: 20 }),
|
|
81
87
|
order: 30,
|
|
82
88
|
group: "operations"
|
|
83
89
|
},
|
|
@@ -85,37 +91,37 @@ var v = new i({ defaultOptions: { queries: {
|
|
|
85
91
|
id: "adaptercloud-costs",
|
|
86
92
|
label: C("adaptercloud.nav.finops", "FinOps"),
|
|
87
93
|
path: w(x, "costs"),
|
|
88
|
-
icon: /* @__PURE__ */
|
|
94
|
+
icon: /* @__PURE__ */ v(f, { size: 20 }),
|
|
89
95
|
order: 31,
|
|
90
96
|
group: "operations"
|
|
91
97
|
}
|
|
92
98
|
]);
|
|
93
99
|
}, [
|
|
94
|
-
|
|
100
|
+
a,
|
|
95
101
|
x,
|
|
96
102
|
C
|
|
97
|
-
]),
|
|
98
|
-
if (
|
|
103
|
+
]), i(() => {
|
|
104
|
+
if (o) return o([{
|
|
99
105
|
id: "adaptercloud-status",
|
|
100
106
|
label: C("adaptercloud.footer.ready", "AdapterCloud Ready"),
|
|
101
107
|
type: "status",
|
|
102
108
|
order: 10,
|
|
103
109
|
section: "left"
|
|
104
110
|
}]);
|
|
105
|
-
}, [
|
|
106
|
-
client:
|
|
107
|
-
children: /* @__PURE__ */
|
|
111
|
+
}, [o, C]), /* @__PURE__ */ v(s, {
|
|
112
|
+
client: b,
|
|
113
|
+
children: /* @__PURE__ */ v(y, {
|
|
108
114
|
workspaceId: null,
|
|
109
115
|
gateway: "global",
|
|
110
116
|
defaultEnabled: !0,
|
|
111
|
-
children: /* @__PURE__ */
|
|
112
|
-
...
|
|
113
|
-
children: /* @__PURE__ */
|
|
117
|
+
children: /* @__PURE__ */ v(e, {
|
|
118
|
+
...t,
|
|
119
|
+
children: /* @__PURE__ */ v(n, {})
|
|
114
120
|
})
|
|
115
121
|
})
|
|
116
122
|
});
|
|
117
123
|
};
|
|
118
124
|
//#endregion
|
|
119
|
-
export {
|
|
125
|
+
export { x as AdapterCloudRoot };
|
|
120
126
|
|
|
121
127
|
//# sourceMappingURL=AdapterCloudRoot.js.map
|
|
@@ -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 { 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 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 type { AdapterCloudRootProps, NavItem } from './types';\n\n// Create a query client for this microfrontend\nconst queryClient = new QueryClient({\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 // 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":"
|
|
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 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 // 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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"}
|
|
@@ -6,7 +6,7 @@ import { jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
|
6
6
|
//#region src/adaptercloud/AdapterCloudRoutes.tsx
|
|
7
7
|
var u = r(() => import("./pages/adapters/AdaptersListPage.js").then((e) => ({ default: e.AdaptersListPage }))), d = r(() => import("./pages/adapters/AdapterDetailPage.js").then((e) => ({ default: e.AdapterDetailPage }))), f = r(() => import("./pages/adapters/AdapterFormPage.js").then((e) => ({ default: e.AdapterFormPage }))), p = r(() => import("./pages/connections/ConnectionsListPage.js").then((e) => ({ default: e.ConnectionsListPage }))), m = r(() => import("./pages/connections/ConnectionDetailPage.js").then((e) => ({ default: e.ConnectionDetailPage }))), h = r(() => import("./pages/connections/ConnectionFormPage.js").then((e) => ({ default: e.ConnectionFormPage }))), g = r(() => import("./pages/resources/ResourcesListPage.js").then((e) => ({ default: e.ResourcesListPage }))), _ = r(() => import("./pages/resources/ResourceDetailPage.js").then((e) => ({ default: e.ResourceDetailPage }))), v = r(() => import("./pages/policies/PoliciesListPage.js").then((e) => ({ default: e.PoliciesListPage }))), y = r(() => import("./pages/policies/PolicyDetailPage.js").then((e) => ({ default: e.PolicyDetailPage }))), b = r(() => import("./pages/policies/PolicyFormPage.js").then((e) => ({ default: e.PolicyFormPage }))), x = r(() => import("./pages/violations/ViolationsListPage.js").then((e) => ({ default: e.ViolationsListPage }))), S = r(() => import("./pages/drift/DriftListPage.js").then((e) => ({ default: e.DriftListPage }))), C = r(() => import("./pages/sync-runs/SyncRunsListPage.js").then((e) => ({ default: e.SyncRunsListPage }))), w = r(() => import("./pages/costs/CostsPage.js").then((e) => ({ default: e.CostsPage }))), T = () => /* @__PURE__ */ c("div", {
|
|
8
8
|
className: "flex min-h-[400px] items-center justify-center",
|
|
9
|
-
children: /* @__PURE__ */ c("div", { className: "h-8 w-8 animate-spin rounded-full border-b-2 border-
|
|
9
|
+
children: /* @__PURE__ */ c("div", { className: "h-8 w-8 animate-spin rounded-full border-b-2 border-accent-blue" })
|
|
10
10
|
}), E = () => {
|
|
11
11
|
let { basePath: r, isStandalone: E } = e(), D = s(), O = r === "/" ? "" : (r ?? "").replace(/\/$/, "");
|
|
12
12
|
return O && !E && !(D.pathname === O || D.pathname.startsWith(O + "/")) ? null : /* @__PURE__ */ c("div", {
|
|
@@ -70,6 +70,10 @@ var u = r(() => import("./pages/adapters/AdaptersListPage.js").then((e) => ({ de
|
|
|
70
70
|
path: "policies/:id",
|
|
71
71
|
element: /* @__PURE__ */ c(y, {})
|
|
72
72
|
}),
|
|
73
|
+
/* @__PURE__ */ c(a, {
|
|
74
|
+
path: "policies/:id/edit",
|
|
75
|
+
element: /* @__PURE__ */ c(b, {})
|
|
76
|
+
}),
|
|
73
77
|
/* @__PURE__ */ c(a, {
|
|
74
78
|
path: "violations",
|
|
75
79
|
element: /* @__PURE__ */ c(x, {})
|
|
@@ -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// 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-
|
|
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// 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 {/* 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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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Loader2 as e } from "lucide-react";
|
|
2
|
+
import { jsx as t, jsxs as n } from "react/jsx-runtime";
|
|
3
|
+
import { ResponsiveDialog as r, ResponsiveDialogContent as i, ResponsiveDialogDescription as a, ResponsiveDialogFooter as o, ResponsiveDialogHeader as s, ResponsiveDialogTitle as c } from "@burdenoff/fe-libs/ui";
|
|
4
|
+
//#region src/adaptercloud/components/ConfirmDialog.tsx
|
|
5
|
+
var l = ({ open: l, onOpenChange: u, title: d, description: f, confirmLabel: p, cancelLabel: m, onConfirm: h, isPending: g = !1, tone: _ = "danger" }) => /* @__PURE__ */ t(r, {
|
|
6
|
+
open: l,
|
|
7
|
+
onOpenChange: (e) => {
|
|
8
|
+
e || u(!1);
|
|
9
|
+
},
|
|
10
|
+
children: /* @__PURE__ */ n(i, { children: [/* @__PURE__ */ n(s, { children: [/* @__PURE__ */ t(c, { children: d }), f && /* @__PURE__ */ t(a, { children: f })] }), /* @__PURE__ */ n(o, { children: [/* @__PURE__ */ t("button", {
|
|
11
|
+
type: "button",
|
|
12
|
+
disabled: g,
|
|
13
|
+
onClick: () => u(!1),
|
|
14
|
+
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",
|
|
15
|
+
children: m
|
|
16
|
+
}), /* @__PURE__ */ n("button", {
|
|
17
|
+
type: "button",
|
|
18
|
+
disabled: g,
|
|
19
|
+
onClick: h,
|
|
20
|
+
className: _ === "danger" ? "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" : "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",
|
|
21
|
+
children: [g && /* @__PURE__ */ t(e, { className: "h-4 w-4 animate-spin" }), p]
|
|
22
|
+
})] })] })
|
|
23
|
+
});
|
|
24
|
+
//#endregion
|
|
25
|
+
export { l as ConfirmDialog };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=ConfirmDialog.js.map
|
|
@@ -0,0 +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 && (\n <ResponsiveDialogDescription>{description}</ResponsiveDialogDescription>\n )}\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,KACC,kBAAC,GAAD,EAAA,UAA8B,GAA0C,CAAA,CAEnD,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,WA3BrE,MAAS,WACL,6MACA;YAyBE,CACG,KAAa,kBAAC,GAAD,EAAS,WAAU,wBAAyB,CAAA,EACzD,EACM;IACc,EAAA,CAAA,CACD,EAAA,CAAA;CACT,CAAA"}
|
|
@@ -8,7 +8,7 @@ function s(e) {
|
|
|
8
8
|
}
|
|
9
9
|
var c = ({ isLoading: c, isError: l, isEmpty: u = !1, error: d, onRetry: f, emptyTitle: p = "Nothing here yet", emptyDescription: m, emptyIcon: h, emptyAction: g, emptyIllustration: _, className: v, children: y }) => c ? /* @__PURE__ */ a("div", {
|
|
10
10
|
className: e("flex min-h-[240px] items-center justify-center", v),
|
|
11
|
-
children: /* @__PURE__ */ a(r, { className: "h-8 w-8 animate-spin text-
|
|
11
|
+
children: /* @__PURE__ */ a(r, { className: "h-8 w-8 animate-spin text-accent-blue" })
|
|
12
12
|
}) : l ? /* @__PURE__ */ o("div", {
|
|
13
13
|
className: e("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", v),
|
|
14
14
|
children: [
|
|
@@ -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-
|
|
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"}
|