@burdenoff/microfe-assethandler 2026.625.1 → 2026.625.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/assethandler/pages/AiPredictionsPage.js +42 -41
- package/dist/assethandler/pages/AiPredictionsPage.js.map +1 -1
- package/dist/assethandler/pages/AnalyticsPage.js +538 -534
- package/dist/assethandler/pages/AnalyticsPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +135 -125
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +90 -92
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCreatePage.js +131 -124
- package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.js +214 -185
- package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetEditPage.js +168 -156
- package/dist/assethandler/pages/AssetsAssetEditPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.js +207 -187
- package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js +82 -71
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js.map +1 -1
- package/dist/assethandler/pages/AuditTrailPage.js +93 -91
- package/dist/assethandler/pages/AuditTrailPage.js.map +1 -1
- package/dist/assethandler/pages/CmdbBrowserPage.js +32 -33
- package/dist/assethandler/pages/CmdbBrowserPage.js.map +1 -1
- package/dist/assethandler/pages/DashboardPage.js +157 -126
- package/dist/assethandler/pages/DashboardPage.js.map +1 -1
- package/dist/assethandler/pages/DigitalTwinPage.js +25 -26
- package/dist/assethandler/pages/DigitalTwinPage.js.map +1 -1
- package/dist/assethandler/pages/DiscoveryJobsPage.js +50 -50
- package/dist/assethandler/pages/DiscoveryJobsPage.js.map +1 -1
- package/dist/assethandler/pages/EsgDashboardPage.js +43 -42
- package/dist/assethandler/pages/EsgDashboardPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js +96 -82
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceFinanceHubPage.js +137 -103
- package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +77 -66
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/IotDevicesPage.js +34 -35
- package/dist/assethandler/pages/IotDevicesPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeDetailPage.js +236 -199
- package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeManagementPage.js +66 -64
- package/dist/assethandler/pages/ItilChangeManagementPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentDetailPage.js +237 -200
- package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentManagementPage.js +99 -97
- package/dist/assethandler/pages/ItilIncidentManagementPage.js.map +1 -1
- package/dist/assethandler/pages/ItilItilhubPage.js +166 -122
- package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemDetailPage.js +193 -156
- package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemManagementPage.js +63 -61
- package/dist/assethandler/pages/ItilProblemManagementPage.js.map +1 -1
- package/dist/assethandler/pages/KnowledgeBasePage.js +45 -43
- package/dist/assethandler/pages/KnowledgeBasePage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +70 -68
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js.map +1 -1
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +77 -62
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js +162 -151
- package/dist/assethandler/pages/MarketplaceMarketplaceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js +64 -57
- package/dist/assethandler/pages/MarketplaceMarketplaceListPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js +125 -108
- package/dist/assethandler/pages/MarketplaceMarketplaceOrdersPage.js.map +1 -1
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js +67 -61
- package/dist/assethandler/pages/MarketplaceMarketplaceSellPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +203 -166
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsOperationsHubPage.js +125 -95
- package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +165 -151
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +83 -81
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js.map +1 -1
- package/dist/assethandler/pages/ProvenancePage.js +56 -53
- package/dist/assethandler/pages/ProvenancePage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportBuilderPage.js +80 -73
- package/dist/assethandler/pages/ReportsReportBuilderPage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js +112 -77
- package/dist/assethandler/pages/ReportsReportsDashboardPage.js.map +1 -1
- package/dist/assethandler/pages/ReportsReportsListPage.js +119 -103
- package/dist/assethandler/pages/ReportsReportsListPage.js.map +1 -1
- package/dist/assethandler/pages/SamLicensesPage.js +32 -33
- package/dist/assethandler/pages/SamLicensesPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js +60 -52
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js +134 -117
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js +63 -57
- package/dist/assethandler/pages/SecurityScheduleBackupPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +131 -117
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityHubPage.js +147 -113
- package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +235 -218
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionListPage.js +118 -116
- package/dist/assethandler/pages/TransactionsTransactionListPage.js.map +1 -1
- package/dist/assethandler/pages/UsersPage.js +108 -99
- package/dist/assethandler/pages/UsersPage.js.map +1 -1
- package/dist/assethandler/pages/UsersUserCreatePage.js +74 -67
- package/dist/assethandler/pages/UsersUserCreatePage.js.map +1 -1
- package/dist/assethandler/pages/UsersUserManagementHubPage.js +128 -93
- package/dist/assethandler/pages/UsersUserManagementHubPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js +211 -193
- package/dist/assethandler/pages/WorkflowsWorkflowBuilderPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js +88 -86
- package/dist/assethandler/pages/WorkflowsWorkflowExecutionsPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js +68 -60
- package/dist/assethandler/pages/WorkflowsWorkflowListPage.js.map +1 -1
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js +71 -68
- package/dist/assethandler/pages/WorkflowsWorkflowTemplatesPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,128 +1,144 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { Play as t, Plus as n, Search as r } from "lucide-react";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { useNavigate as i } from "react-router-dom";
|
|
4
|
+
import { Badge as a, Button as o, CardContent as s, GlassCard as c, GradientText as l, IllustratedEmptyState as u, Input as d, PagePurpose as f } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
5
6
|
//#region src/assethandler/pages/ReportsReportsListPage.tsx
|
|
6
|
-
function
|
|
7
|
-
let { reports:
|
|
8
|
-
return /* @__PURE__ */
|
|
7
|
+
function h() {
|
|
8
|
+
let h = i(), { reports: g } = e();
|
|
9
|
+
return /* @__PURE__ */ m("div", {
|
|
9
10
|
className: "space-y-6 p-6",
|
|
10
11
|
children: [
|
|
11
|
-
/* @__PURE__ */
|
|
12
|
+
/* @__PURE__ */ m("div", {
|
|
12
13
|
className: "flex items-center justify-between",
|
|
13
|
-
children: [/* @__PURE__ */
|
|
14
|
+
children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
|
|
14
15
|
className: "text-2xl font-bold",
|
|
15
|
-
children: /* @__PURE__ */
|
|
16
|
-
}), /* @__PURE__ */
|
|
16
|
+
children: /* @__PURE__ */ p(l, { children: "Reports List" })
|
|
17
|
+
}), /* @__PURE__ */ m("p", {
|
|
17
18
|
className: "text-sm text-text-secondary",
|
|
18
|
-
children: [
|
|
19
|
-
})] }), /* @__PURE__ */
|
|
19
|
+
children: [g.length, " configured reports"]
|
|
20
|
+
})] }), /* @__PURE__ */ m(o, {
|
|
20
21
|
size: "sm",
|
|
21
|
-
children: [/* @__PURE__ */
|
|
22
|
+
children: [/* @__PURE__ */ p(n, { className: "mr-2 h-4 w-4" }), "Create Report"]
|
|
22
23
|
})]
|
|
23
24
|
}),
|
|
24
|
-
/* @__PURE__ */
|
|
25
|
+
/* @__PURE__ */ p(f, { children: "Every report your team has saved, in one searchable list. Run a report on demand, see when it last ran and how it is scheduled, and jump in to refine it — so the insight you need is always a click away." }),
|
|
26
|
+
/* @__PURE__ */ m("div", {
|
|
25
27
|
className: "relative max-w-md",
|
|
26
|
-
children: [/* @__PURE__ */
|
|
28
|
+
children: [/* @__PURE__ */ p(r, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary" }), /* @__PURE__ */ p(d, {
|
|
27
29
|
placeholder: "Search reports...",
|
|
28
30
|
className: "pl-9"
|
|
29
31
|
})]
|
|
30
32
|
}),
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
33
|
+
g.length === 0 ? /* @__PURE__ */ p(u, {
|
|
34
|
+
illustration: "empty-files",
|
|
35
|
+
title: "No reports yet",
|
|
36
|
+
description: "Create your first report to run and schedule it from here.",
|
|
37
|
+
action: /* @__PURE__ */ m(o, {
|
|
38
|
+
size: "sm",
|
|
39
|
+
onClick: () => h("/reports/report-builder"),
|
|
40
|
+
children: [/* @__PURE__ */ p(n, { className: "mr-2 h-4 w-4" }), "Create Report"]
|
|
41
|
+
})
|
|
42
|
+
}) : /* @__PURE__ */ p(c, {
|
|
43
|
+
treatment: "glass",
|
|
44
|
+
glow: !0,
|
|
45
|
+
className: "overflow-hidden border-border-seam",
|
|
46
|
+
children: /* @__PURE__ */ p(s, {
|
|
47
|
+
className: "p-0",
|
|
48
|
+
children: /* @__PURE__ */ p("div", {
|
|
49
|
+
className: "overflow-x-auto",
|
|
50
|
+
children: /* @__PURE__ */ m("table", {
|
|
51
|
+
className: "w-full text-sm",
|
|
52
|
+
children: [/* @__PURE__ */ p("thead", { children: /* @__PURE__ */ m("tr", {
|
|
53
|
+
className: "border-b bg-bg-sunken/50",
|
|
54
|
+
children: [
|
|
55
|
+
/* @__PURE__ */ p("th", {
|
|
56
|
+
className: "text-left p-3 font-medium",
|
|
57
|
+
children: "Name"
|
|
58
|
+
}),
|
|
59
|
+
/* @__PURE__ */ p("th", {
|
|
60
|
+
className: "text-left p-3 font-medium",
|
|
61
|
+
children: "Category"
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ p("th", {
|
|
64
|
+
className: "text-left p-3 font-medium",
|
|
65
|
+
children: "Type"
|
|
66
|
+
}),
|
|
67
|
+
/* @__PURE__ */ p("th", {
|
|
68
|
+
className: "text-left p-3 font-medium",
|
|
69
|
+
children: "Schedule"
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ p("th", {
|
|
72
|
+
className: "text-left p-3 font-medium",
|
|
73
|
+
children: "Last Run"
|
|
74
|
+
}),
|
|
75
|
+
/* @__PURE__ */ p("th", {
|
|
76
|
+
className: "text-left p-3 font-medium",
|
|
77
|
+
children: "Tags"
|
|
78
|
+
}),
|
|
79
|
+
/* @__PURE__ */ p("th", { className: "p-3" })
|
|
80
|
+
]
|
|
81
|
+
}) }), /* @__PURE__ */ p("tbody", { children: g.map((e) => /* @__PURE__ */ m("tr", {
|
|
82
|
+
className: "border-b hover:bg-bg-sunken/50 cursor-pointer",
|
|
83
|
+
children: [
|
|
84
|
+
/* @__PURE__ */ m("td", {
|
|
85
|
+
className: "p-3",
|
|
86
|
+
children: [/* @__PURE__ */ p("p", {
|
|
87
|
+
className: "font-medium",
|
|
88
|
+
children: e.name
|
|
89
|
+
}), /* @__PURE__ */ p("p", {
|
|
90
|
+
className: "text-xs text-text-secondary",
|
|
91
|
+
children: e.description
|
|
92
|
+
})]
|
|
93
|
+
}),
|
|
94
|
+
/* @__PURE__ */ p("td", {
|
|
95
|
+
className: "p-3",
|
|
96
|
+
children: /* @__PURE__ */ p(a, {
|
|
97
|
+
variant: "outline",
|
|
98
|
+
children: e.category
|
|
99
|
+
})
|
|
100
|
+
}),
|
|
101
|
+
/* @__PURE__ */ p("td", {
|
|
102
|
+
className: "p-3 capitalize text-xs",
|
|
103
|
+
children: e.type
|
|
104
|
+
}),
|
|
105
|
+
/* @__PURE__ */ p("td", {
|
|
106
|
+
className: "p-3 text-xs",
|
|
107
|
+
children: e.schedule || "Manual"
|
|
108
|
+
}),
|
|
109
|
+
/* @__PURE__ */ p("td", {
|
|
110
|
+
className: "p-3 text-xs",
|
|
111
|
+
children: e.lastRun ? new Date(e.lastRun).toLocaleDateString() : "Never"
|
|
112
|
+
}),
|
|
113
|
+
/* @__PURE__ */ p("td", {
|
|
114
|
+
className: "p-3",
|
|
115
|
+
children: /* @__PURE__ */ p("div", {
|
|
116
|
+
className: "flex flex-wrap gap-1",
|
|
117
|
+
children: e.tags.map((e) => /* @__PURE__ */ p(a, {
|
|
118
|
+
variant: "secondary",
|
|
119
|
+
className: "text-[10px]",
|
|
120
|
+
children: e
|
|
121
|
+
}, e))
|
|
122
|
+
})
|
|
123
|
+
}),
|
|
124
|
+
/* @__PURE__ */ p("td", {
|
|
125
|
+
className: "p-3",
|
|
126
|
+
children: /* @__PURE__ */ p(o, {
|
|
127
|
+
variant: "ghost",
|
|
128
|
+
size: "sm",
|
|
129
|
+
children: /* @__PURE__ */ p(t, { className: "h-3 w-3" })
|
|
130
|
+
})
|
|
115
131
|
})
|
|
116
|
-
|
|
117
|
-
]
|
|
118
|
-
}
|
|
132
|
+
]
|
|
133
|
+
}, e.id)) })]
|
|
134
|
+
})
|
|
119
135
|
})
|
|
120
136
|
})
|
|
121
|
-
})
|
|
137
|
+
})
|
|
122
138
|
]
|
|
123
139
|
});
|
|
124
140
|
}
|
|
125
141
|
//#endregion
|
|
126
|
-
export {
|
|
142
|
+
export { h as ReportsReportsListPage };
|
|
127
143
|
|
|
128
144
|
//# sourceMappingURL=ReportsReportsListPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReportsReportsListPage.js","names":[],"sources":["../../../src/assethandler/pages/ReportsReportsListPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n
|
|
1
|
+
{"version":3,"file":"ReportsReportsListPage.js","names":[],"sources":["../../../src/assethandler/pages/ReportsReportsListPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n CardContent,\n Input,\n GradientText,\n GlassCard,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { Plus, Search, Play } from 'lucide-react';\nimport { useNavigate } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function ReportsReportsListPage() {\n const navigate = useNavigate();\n const { reports } = useAssetHandlerStore();\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold\">\n <GradientText>Reports List</GradientText>\n </h1>\n <p className=\"text-sm text-text-secondary\">{reports.length} configured reports</p>\n </div>\n <Button size=\"sm\">\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Report\n </Button>\n </div>\n\n <PagePurpose>\n Every report your team has saved, in one searchable list. Run a report on demand, see when\n it last ran and how it is scheduled, and jump in to refine it — so the insight you need is\n always a click away.\n </PagePurpose>\n\n <div className=\"relative max-w-md\">\n <Search className=\"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-text-secondary\" />\n <Input placeholder=\"Search reports...\" className=\"pl-9\" />\n </div>\n\n {reports.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No reports yet\"\n description=\"Create your first report to run and schedule it from here.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/reports/report-builder')}>\n <Plus className=\"mr-2 h-4 w-4\" />\n Create Report\n </Button>\n }\n />\n ) : (\n <GlassCard treatment=\"glass\" glow className=\"overflow-hidden border-border-seam\">\n <CardContent className=\"p-0\">\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"border-b bg-bg-sunken/50\">\n <th className=\"text-left p-3 font-medium\">Name</th>\n <th className=\"text-left p-3 font-medium\">Category</th>\n <th className=\"text-left p-3 font-medium\">Type</th>\n <th className=\"text-left p-3 font-medium\">Schedule</th>\n <th className=\"text-left p-3 font-medium\">Last Run</th>\n <th className=\"text-left p-3 font-medium\">Tags</th>\n <th className=\"p-3\"></th>\n </tr>\n </thead>\n <tbody>\n {reports.map((report) => (\n <tr key={report.id} className=\"border-b hover:bg-bg-sunken/50 cursor-pointer\">\n <td className=\"p-3\">\n <p className=\"font-medium\">{report.name}</p>\n <p className=\"text-xs text-text-secondary\">{report.description}</p>\n </td>\n <td className=\"p-3\">\n <Badge variant=\"outline\">{report.category}</Badge>\n </td>\n <td className=\"p-3 capitalize text-xs\">{report.type}</td>\n <td className=\"p-3 text-xs\">{report.schedule || 'Manual'}</td>\n <td className=\"p-3 text-xs\">\n {report.lastRun ? new Date(report.lastRun).toLocaleDateString() : 'Never'}\n </td>\n <td className=\"p-3\">\n <div className=\"flex flex-wrap gap-1\">\n {report.tags.map((t) => (\n <Badge key={t} variant=\"secondary\" className=\"text-[10px]\">\n {t}\n </Badge>\n ))}\n </div>\n </td>\n <td className=\"p-3\">\n <Button variant=\"ghost\" size=\"sm\">\n <Play className=\"h-3 w-3\" />\n </Button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </CardContent>\n </GlassCard>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { KeyRound as e } from "lucide-react";
|
|
2
|
-
import {
|
|
3
|
-
import { jsx as
|
|
4
|
-
import { gql as
|
|
5
|
-
import { useQuery as
|
|
2
|
+
import { GlassCard as t, GradientText as n, IllustratedEmptyState as r, PagePurpose as i } from "@burdenoff/fe-libs/ui";
|
|
3
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
4
|
+
import { gql as s } from "@apollo/client";
|
|
5
|
+
import { useQuery as c } from "@apollo/client/react";
|
|
6
6
|
//#region src/assethandler/pages/SamLicensesPage.tsx
|
|
7
|
-
var
|
|
7
|
+
var l = s`
|
|
8
8
|
query AssetHandlerSoftwareAssets {
|
|
9
9
|
softwareAssets {
|
|
10
10
|
id
|
|
@@ -18,60 +18,59 @@ var s = a`
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
`;
|
|
21
|
-
function
|
|
22
|
-
let { data:
|
|
23
|
-
return /* @__PURE__ */
|
|
21
|
+
function u() {
|
|
22
|
+
let { data: s, loading: u } = c(l, { fetchPolicy: "cache-and-network" }), d = s?.softwareAssets ?? [];
|
|
23
|
+
return /* @__PURE__ */ o("div", {
|
|
24
24
|
className: "space-y-4 p-4",
|
|
25
25
|
children: [
|
|
26
|
-
/* @__PURE__ */
|
|
26
|
+
/* @__PURE__ */ o("h1", {
|
|
27
27
|
className: "flex items-center gap-2 text-2xl font-semibold",
|
|
28
28
|
children: [
|
|
29
|
-
/* @__PURE__ */
|
|
29
|
+
/* @__PURE__ */ a(e, { className: "h-6 w-6" }),
|
|
30
30
|
" ",
|
|
31
|
-
/* @__PURE__ */
|
|
31
|
+
/* @__PURE__ */ a(n, { children: "SAM Licenses" })
|
|
32
32
|
]
|
|
33
33
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
className: "rounded-lg border",
|
|
34
|
+
/* @__PURE__ */ a(i, { children: "Software Asset Management (SAM): track every software entitlement against actual usage so you stay license-compliant and stop paying for seats nobody uses. Spot over- and under-licensing here to avoid audit penalties and reclaim wasted spend." }),
|
|
35
|
+
/* @__PURE__ */ o(t, {
|
|
36
|
+
treatment: "glass",
|
|
37
|
+
glow: !0,
|
|
38
|
+
className: "overflow-hidden border-border-seam",
|
|
40
39
|
children: [
|
|
41
|
-
/* @__PURE__ */
|
|
40
|
+
/* @__PURE__ */ o("div", {
|
|
42
41
|
className: "grid grid-cols-5 gap-3 border-b px-4 py-3 text-xs font-semibold uppercase tracking-wide text-text-secondary",
|
|
43
42
|
children: [
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
-
/* @__PURE__ */
|
|
46
|
-
/* @__PURE__ */
|
|
47
|
-
/* @__PURE__ */
|
|
48
|
-
/* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ a("span", { children: "Software" }),
|
|
44
|
+
/* @__PURE__ */ a("span", { children: "Vendor" }),
|
|
45
|
+
/* @__PURE__ */ a("span", { children: "Version" }),
|
|
46
|
+
/* @__PURE__ */ a("span", { children: "Seats Used" }),
|
|
47
|
+
/* @__PURE__ */ a("span", { children: "Compliance" })
|
|
49
48
|
]
|
|
50
49
|
}),
|
|
51
|
-
|
|
50
|
+
u && d.length === 0 ? /* @__PURE__ */ a("div", {
|
|
52
51
|
className: "space-y-2 px-4 py-4",
|
|
53
|
-
children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */
|
|
52
|
+
children: Array.from({ length: 4 }).map((e, t) => /* @__PURE__ */ a("div", { className: "h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer" }, t))
|
|
54
53
|
}) : null,
|
|
55
|
-
!
|
|
54
|
+
!u && d.length === 0 ? /* @__PURE__ */ a(r, {
|
|
56
55
|
illustration: "empty-data",
|
|
57
56
|
title: "No software assets found",
|
|
58
57
|
description: "Discovered software assets and licenses will appear here."
|
|
59
58
|
}) : null,
|
|
60
|
-
|
|
59
|
+
d.map((e) => /* @__PURE__ */ o("div", {
|
|
61
60
|
className: "grid grid-cols-5 gap-3 border-b px-4 py-3 text-sm last:border-b-0",
|
|
62
61
|
children: [
|
|
63
|
-
/* @__PURE__ */
|
|
62
|
+
/* @__PURE__ */ a("span", {
|
|
64
63
|
className: "font-medium",
|
|
65
64
|
children: e.name
|
|
66
65
|
}),
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
-
/* @__PURE__ */
|
|
66
|
+
/* @__PURE__ */ a("span", { children: e.vendor }),
|
|
67
|
+
/* @__PURE__ */ a("span", { children: e.version }),
|
|
68
|
+
/* @__PURE__ */ o("span", { children: [
|
|
70
69
|
e.seatsUsed ?? 0,
|
|
71
70
|
"/",
|
|
72
71
|
e.seatsPurchased ?? "-"
|
|
73
72
|
] }),
|
|
74
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ o("span", { children: [e.compliancePercent.toFixed(1), "%"] })
|
|
75
74
|
]
|
|
76
75
|
}, e.id))
|
|
77
76
|
]
|
|
@@ -80,6 +79,6 @@ function c() {
|
|
|
80
79
|
});
|
|
81
80
|
}
|
|
82
81
|
//#endregion
|
|
83
|
-
export {
|
|
82
|
+
export { u as SamLicensesPage };
|
|
84
83
|
|
|
85
84
|
//# sourceMappingURL=SamLicensesPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SamLicensesPage.js","names":[],"sources":["../../../src/assethandler/pages/SamLicensesPage.tsx"],"sourcesContent":["import { KeyRound } from 'lucide-react';\nimport { GradientText, IllustratedEmptyState } from '@burdenoff/fe-libs/ui';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\n\nconst SOFTWARE_ASSETS_QUERY = gql`\n query AssetHandlerSoftwareAssets {\n softwareAssets {\n id\n name\n vendor\n version\n licenseType\n seatsPurchased\n seatsUsed\n compliancePercent\n }\n }\n`;\n\nexport function SamLicensesPage() {\n const { data, loading } = useQuery<{\n softwareAssets: Array<{\n id: string;\n name: string;\n vendor: string;\n version: string;\n licenseType: string;\n seatsPurchased: number | null;\n seatsUsed: number | null;\n compliancePercent: number;\n }>;\n }>(SOFTWARE_ASSETS_QUERY, { fetchPolicy: 'cache-and-network' });\n\n const softwareAssets = data?.softwareAssets ?? [];\n\n return (\n <div className=\"space-y-4 p-4\">\n <h1 className=\"flex items-center gap-2 text-2xl font-semibold\">\n <KeyRound className=\"h-6 w-6\" /> <GradientText>SAM Licenses</GradientText>\n </h1>\n <
|
|
1
|
+
{"version":3,"file":"SamLicensesPage.js","names":[],"sources":["../../../src/assethandler/pages/SamLicensesPage.tsx"],"sourcesContent":["import { KeyRound } from 'lucide-react';\nimport { GradientText, IllustratedEmptyState, GlassCard, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\n\nconst SOFTWARE_ASSETS_QUERY = gql`\n query AssetHandlerSoftwareAssets {\n softwareAssets {\n id\n name\n vendor\n version\n licenseType\n seatsPurchased\n seatsUsed\n compliancePercent\n }\n }\n`;\n\nexport function SamLicensesPage() {\n const { data, loading } = useQuery<{\n softwareAssets: Array<{\n id: string;\n name: string;\n vendor: string;\n version: string;\n licenseType: string;\n seatsPurchased: number | null;\n seatsUsed: number | null;\n compliancePercent: number;\n }>;\n }>(SOFTWARE_ASSETS_QUERY, { fetchPolicy: 'cache-and-network' });\n\n const softwareAssets = data?.softwareAssets ?? [];\n\n return (\n <div className=\"space-y-4 p-4\">\n <h1 className=\"flex items-center gap-2 text-2xl font-semibold\">\n <KeyRound className=\"h-6 w-6\" /> <GradientText>SAM Licenses</GradientText>\n </h1>\n <PagePurpose>\n Software Asset Management (SAM): track every software entitlement against actual usage so\n you stay license-compliant and stop paying for seats nobody uses. Spot over- and\n under-licensing here to avoid audit penalties and reclaim wasted spend.\n </PagePurpose>\n <GlassCard treatment=\"glass\" glow className=\"overflow-hidden border-border-seam\">\n <div className=\"grid grid-cols-5 gap-3 border-b px-4 py-3 text-xs font-semibold uppercase tracking-wide text-text-secondary\">\n <span>Software</span>\n <span>Vendor</span>\n <span>Version</span>\n <span>Seats Used</span>\n <span>Compliance</span>\n </div>\n {loading && softwareAssets.length === 0 ? (\n <div className=\"space-y-2 px-4 py-4\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"h-8 rounded-md bg-bg-sunken motion-safe:animate-vc-shimmer\" />\n ))}\n </div>\n ) : null}\n {!loading && softwareAssets.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No software assets found\"\n description=\"Discovered software assets and licenses will appear here.\"\n />\n ) : null}\n {softwareAssets.map((asset) => (\n <div\n key={asset.id}\n className=\"grid grid-cols-5 gap-3 border-b px-4 py-3 text-sm last:border-b-0\"\n >\n <span className=\"font-medium\">{asset.name}</span>\n <span>{asset.vendor}</span>\n <span>{asset.version}</span>\n <span>\n {asset.seatsUsed ?? 0}/{asset.seatsPurchased ?? '-'}\n </span>\n <span>{asset.compliancePercent.toFixed(1)}%</span>\n </div>\n ))}\n </GlassCard>\n </div>\n );\n}\n"],"mappings":";;;;;;AAKA,IAAM,IAAwB,CAAG;;;;;;;;;;;;;;AAejC,SAAgB,IAAkB;CAChC,IAAM,EAAE,SAAM,eAAY,EAWvB,GAAuB,EAAE,aAAa,qBAAqB,CAAC,EAEzD,IAAiB,GAAM,kBAAkB,EAAE;AAEjD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,MAAD;IAAI,WAAU;cAAd;KACE,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;;KAAC,kBAAC,GAAD,EAAA,UAAc,gBAA2B,CAAA;KACvE;;GACL,kBAAC,GAAD,EAAA,UAAa,sPAIC,CAAA;GACd,kBAAC,GAAD;IAAW,WAAU;IAAQ,MAAA;IAAK,WAAU;cAA5C;KACE,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,QAAD,EAAA,UAAM,YAAe,CAAA;OACrB,kBAAC,QAAD,EAAA,UAAM,UAAa,CAAA;OACnB,kBAAC,QAAD,EAAA,UAAM,WAAc,CAAA;OACpB,kBAAC,QAAD,EAAA,UAAM,cAAiB,CAAA;OACvB,kBAAC,QAAD,EAAA,UAAM,cAAiB,CAAA;OACnB;;KACL,KAAW,EAAe,WAAW,IACpC,kBAAC,OAAD;MAAK,WAAU;gBACZ,MAAM,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,MACjC,kBAAC,OAAD,EAAa,WAAU,8DAA+D,EAA5E,EAA4E,CACtF;MACE,CAAA,GACJ;KACH,CAAC,KAAW,EAAe,WAAW,IACrC,kBAAC,GAAD;MACE,cAAa;MACb,OAAM;MACN,aAAY;MACZ,CAAA,GACA;KACH,EAAe,KAAK,MACnB,kBAAC,OAAD;MAEE,WAAU;gBAFZ;OAIE,kBAAC,QAAD;QAAM,WAAU;kBAAe,EAAM;QAAY,CAAA;OACjD,kBAAC,QAAD,EAAA,UAAO,EAAM,QAAc,CAAA;OAC3B,kBAAC,QAAD,EAAA,UAAO,EAAM,SAAe,CAAA;OAC5B,kBAAC,QAAD,EAAA,UAAA;QACG,EAAM,aAAa;QAAE;QAAE,EAAM,kBAAkB;QAC3C,EAAA,CAAA;OACP,kBAAC,QAAD,EAAA,UAAA,CAAO,EAAM,kBAAkB,QAAQ,EAAE,EAAC,IAAQ,EAAA,CAAA;OAC9C;QAVC,EAAM,GAUP,CACN;KACQ;;GACR"}
|
|
@@ -1,109 +1,117 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
2
|
import { ArrowLeft as t, Shield as n } from "lucide-react";
|
|
3
|
-
import {
|
|
4
|
-
import { Badge as
|
|
5
|
-
import { jsx as
|
|
3
|
+
import { useNavigate as r, useParams as i } from "react-router-dom";
|
|
4
|
+
import { Badge as a, Button as o, Card as s, CardContent as c, CardHeader as l, CardTitle as u, EmphasisPanel as d, GradientText as f, IllustratedEmptyState as p, PagePurpose as m } from "@burdenoff/fe-libs/ui";
|
|
5
|
+
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
6
6
|
//#region src/assethandler/pages/SecurityComplianceDetailPage.tsx
|
|
7
|
-
function
|
|
8
|
-
let { frameworkId:
|
|
9
|
-
return
|
|
7
|
+
function _() {
|
|
8
|
+
let _ = r(), { frameworkId: v } = i(), { complianceFrameworks: y } = e(), b = y.find((e) => e.id === v) ?? y[0];
|
|
9
|
+
return b ? /* @__PURE__ */ g("div", {
|
|
10
10
|
className: "space-y-6 p-6",
|
|
11
11
|
children: [
|
|
12
|
-
/* @__PURE__ */
|
|
12
|
+
/* @__PURE__ */ g("div", {
|
|
13
13
|
className: "flex items-center justify-between",
|
|
14
|
-
children: [/* @__PURE__ */
|
|
14
|
+
children: [/* @__PURE__ */ g("div", {
|
|
15
15
|
className: "flex items-center gap-4",
|
|
16
|
-
children: [/* @__PURE__ */
|
|
16
|
+
children: [/* @__PURE__ */ h(o, {
|
|
17
17
|
variant: "ghost",
|
|
18
18
|
size: "icon",
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
onClick: () => _("/security/security-hub"),
|
|
20
|
+
children: /* @__PURE__ */ h(t, { className: "h-4 w-4" })
|
|
21
|
+
}), /* @__PURE__ */ g("div", { children: [/* @__PURE__ */ g("div", {
|
|
21
22
|
className: "flex items-center gap-3",
|
|
22
|
-
children: [/* @__PURE__ */
|
|
23
|
+
children: [/* @__PURE__ */ h("h1", {
|
|
23
24
|
className: "text-2xl font-bold",
|
|
24
|
-
children: /* @__PURE__ */ f
|
|
25
|
-
|
|
25
|
+
children: /* @__PURE__ */ g(f, { children: [
|
|
26
|
+
b.name,
|
|
26
27
|
" ",
|
|
27
|
-
|
|
28
|
+
b.version
|
|
28
29
|
] })
|
|
29
|
-
}), /* @__PURE__ */
|
|
30
|
-
variant:
|
|
31
|
-
children:
|
|
30
|
+
}), /* @__PURE__ */ h(a, {
|
|
31
|
+
variant: b.status === "compliant" ? "default" : b.status === "non_compliant" ? "destructive" : "secondary",
|
|
32
|
+
children: b.status.replace("_", " ")
|
|
32
33
|
})]
|
|
33
|
-
}), /* @__PURE__ */
|
|
34
|
+
}), /* @__PURE__ */ h("p", {
|
|
34
35
|
className: "text-sm text-text-secondary mt-1",
|
|
35
36
|
children: "Compliance framework assessment details"
|
|
36
37
|
})] })]
|
|
37
|
-
}), /* @__PURE__ */
|
|
38
|
+
}), /* @__PURE__ */ g(o, {
|
|
38
39
|
size: "sm",
|
|
39
|
-
children: [/* @__PURE__ */
|
|
40
|
+
children: [/* @__PURE__ */ h(n, { className: "mr-2 h-4 w-4" }), "Run Assessment"]
|
|
40
41
|
})]
|
|
41
42
|
}),
|
|
42
|
-
/* @__PURE__ */
|
|
43
|
+
/* @__PURE__ */ h(m, { children: "See exactly how you measure up against a single compliance framework — your overall score, which controls pass or fail, and when the next assessment is due. Use it to close control gaps and stay audit-ready for standards like ISO 27001 or SOC 2." }),
|
|
44
|
+
/* @__PURE__ */ g("div", {
|
|
43
45
|
className: "grid gap-4 md:grid-cols-4",
|
|
44
46
|
children: [
|
|
45
|
-
/* @__PURE__ */ d
|
|
46
|
-
className: "
|
|
47
|
-
children: [/* @__PURE__ */
|
|
48
|
-
className: "text-4xl font-bold",
|
|
49
|
-
children: [
|
|
50
|
-
}), /* @__PURE__ */
|
|
47
|
+
/* @__PURE__ */ g(d, {
|
|
48
|
+
className: "text-center",
|
|
49
|
+
children: [/* @__PURE__ */ g("p", {
|
|
50
|
+
className: "text-4xl font-bold tabular-nums",
|
|
51
|
+
children: [b.score, "%"]
|
|
52
|
+
}), /* @__PURE__ */ h("p", {
|
|
51
53
|
className: "text-xs text-text-secondary",
|
|
52
54
|
children: "Overall Score"
|
|
53
55
|
})]
|
|
54
|
-
})
|
|
55
|
-
/* @__PURE__ */
|
|
56
|
+
}),
|
|
57
|
+
/* @__PURE__ */ h(s, { children: /* @__PURE__ */ g(c, {
|
|
56
58
|
className: "pt-4 text-center",
|
|
57
|
-
children: [/* @__PURE__ */
|
|
59
|
+
children: [/* @__PURE__ */ h("p", {
|
|
58
60
|
className: "text-4xl font-bold text-status-success-text",
|
|
59
|
-
children:
|
|
60
|
-
}), /* @__PURE__ */
|
|
61
|
+
children: b.passedControls
|
|
62
|
+
}), /* @__PURE__ */ h("p", {
|
|
61
63
|
className: "text-xs text-text-secondary",
|
|
62
64
|
children: "Passed"
|
|
63
65
|
})]
|
|
64
66
|
}) }),
|
|
65
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ h(s, { children: /* @__PURE__ */ g(c, {
|
|
66
68
|
className: "pt-4 text-center",
|
|
67
|
-
children: [/* @__PURE__ */
|
|
69
|
+
children: [/* @__PURE__ */ h("p", {
|
|
68
70
|
className: "text-4xl font-bold text-status-error-text",
|
|
69
|
-
children:
|
|
70
|
-
}), /* @__PURE__ */
|
|
71
|
+
children: b.failedControls
|
|
72
|
+
}), /* @__PURE__ */ h("p", {
|
|
71
73
|
className: "text-xs text-text-secondary",
|
|
72
74
|
children: "Failed"
|
|
73
75
|
})]
|
|
74
76
|
}) }),
|
|
75
|
-
/* @__PURE__ */
|
|
77
|
+
/* @__PURE__ */ h(s, { children: /* @__PURE__ */ g(c, {
|
|
76
78
|
className: "pt-4 text-center",
|
|
77
|
-
children: [/* @__PURE__ */
|
|
79
|
+
children: [/* @__PURE__ */ h("p", {
|
|
78
80
|
className: "text-4xl font-bold",
|
|
79
|
-
children:
|
|
80
|
-
}), /* @__PURE__ */
|
|
81
|
+
children: b.totalControls
|
|
82
|
+
}), /* @__PURE__ */ h("p", {
|
|
81
83
|
className: "text-xs text-text-secondary",
|
|
82
84
|
children: "Total Controls"
|
|
83
85
|
})]
|
|
84
86
|
}) })
|
|
85
87
|
]
|
|
86
88
|
}),
|
|
87
|
-
/* @__PURE__ */
|
|
89
|
+
/* @__PURE__ */ g(s, { children: [/* @__PURE__ */ h(l, { children: /* @__PURE__ */ h(u, { children: "Compliance Progress" }) }), /* @__PURE__ */ g(c, { children: [/* @__PURE__ */ h("div", {
|
|
88
90
|
className: "h-4 rounded-full bg-bg-sunken overflow-hidden",
|
|
89
|
-
children: /* @__PURE__ */
|
|
90
|
-
className: `h-full rounded-full ${
|
|
91
|
-
style: { width: `${
|
|
91
|
+
children: /* @__PURE__ */ h("div", {
|
|
92
|
+
className: `h-full rounded-full ${b.score >= 90 ? "bg-status-success-bg" : b.score >= 70 ? "bg-status-warning-bg" : "bg-status-error-bg"}`,
|
|
93
|
+
style: { width: `${b.score}%` }
|
|
92
94
|
})
|
|
93
|
-
}), /* @__PURE__ */
|
|
95
|
+
}), /* @__PURE__ */ g("div", {
|
|
94
96
|
className: "flex justify-between mt-2 text-xs text-text-secondary",
|
|
95
|
-
children: [/* @__PURE__ */
|
|
97
|
+
children: [/* @__PURE__ */ g("span", { children: ["Last Assessment: ", b.lastAssessment] }), /* @__PURE__ */ g("span", { children: ["Next Assessment: ", b.nextAssessment] })]
|
|
96
98
|
})] })] })
|
|
97
99
|
]
|
|
98
|
-
}) : /* @__PURE__ */
|
|
100
|
+
}) : /* @__PURE__ */ h("div", {
|
|
99
101
|
className: "p-6",
|
|
100
|
-
children: /* @__PURE__ */
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
children: /* @__PURE__ */ h(p, {
|
|
103
|
+
illustration: "empty-search",
|
|
104
|
+
title: "Framework not found",
|
|
105
|
+
description: "This compliance framework may have been removed. Return to the security hub to find it.",
|
|
106
|
+
action: /* @__PURE__ */ h(o, {
|
|
107
|
+
size: "sm",
|
|
108
|
+
onClick: () => _("/security/security-hub"),
|
|
109
|
+
children: "Back to security"
|
|
110
|
+
})
|
|
103
111
|
})
|
|
104
112
|
});
|
|
105
113
|
}
|
|
106
114
|
//#endregion
|
|
107
|
-
export {
|
|
115
|
+
export { _ as SecurityComplianceDetailPage };
|
|
108
116
|
|
|
109
117
|
//# sourceMappingURL=SecurityComplianceDetailPage.js.map
|