@burdenoff/microfe-assethandler 2026.703.2 → 2026.703.3
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/AssetHandlerRoot.js +18 -18
- package/dist/assethandler/hooks/useAssetHandlerNavigate.js +19 -0
- package/dist/assethandler/hooks/useAssetHandlerNavigate.js.map +1 -0
- package/dist/assethandler/pages/AiPredictionsPage.js +29 -29
- package/dist/assethandler/pages/AnalyticsPage.js +154 -154
- package/dist/assethandler/pages/AssetsAssetCategoriesPage.js +48 -48
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js +84 -84
- package/dist/assethandler/pages/AssetsAssetCheckInOutPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetCreatePage.js +82 -82
- package/dist/assethandler/pages/AssetsAssetCreatePage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetDetailPage.js +104 -103
- package/dist/assethandler/pages/AssetsAssetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetListPage.js +132 -132
- package/dist/assethandler/pages/AssetsAssetListPage.js.map +1 -1
- package/dist/assethandler/pages/AssetsAssetTrackingPage.js +52 -52
- package/dist/assethandler/pages/CmdbBrowserPage.js +27 -27
- package/dist/assethandler/pages/DashboardPage.js +119 -119
- package/dist/assethandler/pages/DashboardPage.js.map +1 -1
- package/dist/assethandler/pages/DigitalTwinPage.js +22 -22
- package/dist/assethandler/pages/DiscoveryJobsPage.js +35 -35
- package/dist/assethandler/pages/EsgDashboardPage.js +32 -32
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js +57 -56
- package/dist/assethandler/pages/FinanceBudgetDetailPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceFinanceHubPage.js +98 -98
- package/dist/assethandler/pages/FinanceFinanceHubPage.js.map +1 -1
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js +58 -57
- package/dist/assethandler/pages/FinanceInvoiceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/IotDevicesPage.js +29 -29
- package/dist/assethandler/pages/ItilChangeDetailPage.js +76 -75
- package/dist/assethandler/pages/ItilChangeDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilChangeManagementPage.js +49 -49
- package/dist/assethandler/pages/ItilIncidentDetailPage.js +63 -62
- package/dist/assethandler/pages/ItilIncidentDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilIncidentManagementPage.js +72 -72
- package/dist/assethandler/pages/ItilItilhubPage.js +112 -112
- package/dist/assethandler/pages/ItilItilhubPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemDetailPage.js +61 -60
- package/dist/assethandler/pages/ItilProblemDetailPage.js.map +1 -1
- package/dist/assethandler/pages/ItilProblemManagementPage.js +46 -46
- package/dist/assethandler/pages/KnowledgeBasePage.js +28 -28
- package/dist/assethandler/pages/MaintenanceMaintenanceCalendarPage.js +52 -52
- package/dist/assethandler/pages/MaintenanceMaintenanceSchedulerPage.js +29 -29
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js +58 -57
- package/dist/assethandler/pages/OperationsMaintenanceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsOperationsHubPage.js +80 -80
- package/dist/assethandler/pages/OperationsOperationsHubPage.js.map +1 -1
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js +49 -48
- package/dist/assethandler/pages/OperationsWorkOrderDetailPage.js.map +1 -1
- package/dist/assethandler/pages/PortfolioPortfolioOverviewPage.js +52 -52
- package/dist/assethandler/pages/ProvenancePage.js +36 -36
- package/dist/assethandler/pages/SamLicensesPage.js +27 -27
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js +39 -38
- package/dist/assethandler/pages/SecurityComplianceDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js +50 -49
- package/dist/assethandler/pages/SecurityPolicyDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js +47 -46
- package/dist/assethandler/pages/SecuritySecurityEventDetailPage.js.map +1 -1
- package/dist/assethandler/pages/SecuritySecurityHubPage.js +104 -104
- package/dist/assethandler/pages/SecuritySecurityHubPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js +74 -73
- package/dist/assethandler/pages/TransactionsTransactionDetailPage.js.map +1 -1
- package/dist/assethandler/pages/TransactionsTransactionListPage.js +77 -77
- package/dist/assethandler/providers/AssetHandlerProvider.js +12 -12
- package/package.json +1 -1
|
@@ -1,109 +1,110 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { jsx as
|
|
2
|
+
import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
|
|
3
|
+
import { ArrowLeft as n, Shield as r } from "lucide-react";
|
|
4
|
+
import { useParams as i } from "react-router-dom";
|
|
5
|
+
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
|
+
import { Badge as s, Button as c, Card as l, CardContent as u, CardHeader as d, CardTitle as f, EmphasisPanel as p, GradientText as m, IllustratedEmptyState as h, PagePurpose as g } from "@burdenoff/fe-libs/ui";
|
|
6
7
|
//#region src/assethandler/pages/SecurityComplianceDetailPage.tsx
|
|
7
8
|
function _() {
|
|
8
|
-
let _ =
|
|
9
|
-
return b ? /* @__PURE__ */
|
|
9
|
+
let _ = t(), { frameworkId: v } = i(), { complianceFrameworks: y } = e(), b = y.find((e) => e.id === v) ?? y[0];
|
|
10
|
+
return b ? /* @__PURE__ */ o("div", {
|
|
10
11
|
className: "space-y-6 p-6",
|
|
11
12
|
children: [
|
|
12
|
-
/* @__PURE__ */
|
|
13
|
+
/* @__PURE__ */ o("div", {
|
|
13
14
|
className: "flex items-center justify-between",
|
|
14
|
-
children: [/* @__PURE__ */
|
|
15
|
+
children: [/* @__PURE__ */ o("div", {
|
|
15
16
|
className: "flex items-center gap-4",
|
|
16
|
-
children: [/* @__PURE__ */
|
|
17
|
+
children: [/* @__PURE__ */ a(c, {
|
|
17
18
|
variant: "ghost",
|
|
18
19
|
size: "icon",
|
|
19
20
|
onClick: () => _("/security/security-hub"),
|
|
20
|
-
children: /* @__PURE__ */
|
|
21
|
-
}), /* @__PURE__ */
|
|
21
|
+
children: /* @__PURE__ */ a(n, { className: "h-4 w-4" })
|
|
22
|
+
}), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ o("div", {
|
|
22
23
|
className: "flex items-center gap-3",
|
|
23
|
-
children: [/* @__PURE__ */
|
|
24
|
+
children: [/* @__PURE__ */ a("h1", {
|
|
24
25
|
className: "text-2xl font-bold",
|
|
25
|
-
children: /* @__PURE__ */
|
|
26
|
+
children: /* @__PURE__ */ o(m, { children: [
|
|
26
27
|
b.name,
|
|
27
28
|
" ",
|
|
28
29
|
b.version
|
|
29
30
|
] })
|
|
30
|
-
}), /* @__PURE__ */
|
|
31
|
+
}), /* @__PURE__ */ a(s, {
|
|
31
32
|
variant: b.status === "compliant" ? "default" : b.status === "non_compliant" ? "destructive" : "secondary",
|
|
32
33
|
children: b.status.replace("_", " ")
|
|
33
34
|
})]
|
|
34
|
-
}), /* @__PURE__ */
|
|
35
|
+
}), /* @__PURE__ */ a("p", {
|
|
35
36
|
className: "text-sm text-text-secondary mt-1",
|
|
36
37
|
children: "Compliance framework assessment details"
|
|
37
38
|
})] })]
|
|
38
|
-
}), /* @__PURE__ */
|
|
39
|
+
}), /* @__PURE__ */ o(c, {
|
|
39
40
|
size: "sm",
|
|
40
|
-
children: [/* @__PURE__ */
|
|
41
|
+
children: [/* @__PURE__ */ a(r, { className: "mr-2 h-4 w-4" }), "Run Assessment"]
|
|
41
42
|
})]
|
|
42
43
|
}),
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
-
/* @__PURE__ */
|
|
44
|
+
/* @__PURE__ */ a(g, { 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." }),
|
|
45
|
+
/* @__PURE__ */ o("div", {
|
|
45
46
|
className: "grid gap-4 md:grid-cols-4",
|
|
46
47
|
children: [
|
|
47
|
-
/* @__PURE__ */
|
|
48
|
+
/* @__PURE__ */ o(p, {
|
|
48
49
|
className: "text-center",
|
|
49
|
-
children: [/* @__PURE__ */
|
|
50
|
+
children: [/* @__PURE__ */ o("p", {
|
|
50
51
|
className: "text-4xl font-bold tabular-nums",
|
|
51
52
|
children: [b.score, "%"]
|
|
52
|
-
}), /* @__PURE__ */
|
|
53
|
+
}), /* @__PURE__ */ a("p", {
|
|
53
54
|
className: "text-xs text-text-secondary",
|
|
54
55
|
children: "Overall Score"
|
|
55
56
|
})]
|
|
56
57
|
}),
|
|
57
|
-
/* @__PURE__ */
|
|
58
|
+
/* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
|
|
58
59
|
className: "pt-4 text-center",
|
|
59
|
-
children: [/* @__PURE__ */
|
|
60
|
+
children: [/* @__PURE__ */ a("p", {
|
|
60
61
|
className: "text-4xl font-bold text-status-success-text",
|
|
61
62
|
children: b.passedControls
|
|
62
|
-
}), /* @__PURE__ */
|
|
63
|
+
}), /* @__PURE__ */ a("p", {
|
|
63
64
|
className: "text-xs text-text-secondary",
|
|
64
65
|
children: "Passed"
|
|
65
66
|
})]
|
|
66
67
|
}) }),
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
+
/* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
|
|
68
69
|
className: "pt-4 text-center",
|
|
69
|
-
children: [/* @__PURE__ */
|
|
70
|
+
children: [/* @__PURE__ */ a("p", {
|
|
70
71
|
className: "text-4xl font-bold text-status-error-text",
|
|
71
72
|
children: b.failedControls
|
|
72
|
-
}), /* @__PURE__ */
|
|
73
|
+
}), /* @__PURE__ */ a("p", {
|
|
73
74
|
className: "text-xs text-text-secondary",
|
|
74
75
|
children: "Failed"
|
|
75
76
|
})]
|
|
76
77
|
}) }),
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
+
/* @__PURE__ */ a(l, { children: /* @__PURE__ */ o(u, {
|
|
78
79
|
className: "pt-4 text-center",
|
|
79
|
-
children: [/* @__PURE__ */
|
|
80
|
+
children: [/* @__PURE__ */ a("p", {
|
|
80
81
|
className: "text-4xl font-bold",
|
|
81
82
|
children: b.totalControls
|
|
82
|
-
}), /* @__PURE__ */
|
|
83
|
+
}), /* @__PURE__ */ a("p", {
|
|
83
84
|
className: "text-xs text-text-secondary",
|
|
84
85
|
children: "Total Controls"
|
|
85
86
|
})]
|
|
86
87
|
}) })
|
|
87
88
|
]
|
|
88
89
|
}),
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
+
/* @__PURE__ */ o(l, { children: [/* @__PURE__ */ a(d, { children: /* @__PURE__ */ a(f, { children: "Compliance Progress" }) }), /* @__PURE__ */ o(u, { children: [/* @__PURE__ */ a("div", {
|
|
90
91
|
className: "h-4 rounded-full bg-bg-sunken overflow-hidden",
|
|
91
|
-
children: /* @__PURE__ */
|
|
92
|
+
children: /* @__PURE__ */ a("div", {
|
|
92
93
|
className: `h-full rounded-full ${b.score >= 90 ? "bg-status-success-bg" : b.score >= 70 ? "bg-status-warning-bg" : "bg-status-error-bg"}`,
|
|
93
94
|
style: { width: `${b.score}%` }
|
|
94
95
|
})
|
|
95
|
-
}), /* @__PURE__ */
|
|
96
|
+
}), /* @__PURE__ */ o("div", {
|
|
96
97
|
className: "flex justify-between mt-2 text-xs text-text-secondary",
|
|
97
|
-
children: [/* @__PURE__ */
|
|
98
|
+
children: [/* @__PURE__ */ o("span", { children: ["Last Assessment: ", b.lastAssessment] }), /* @__PURE__ */ o("span", { children: ["Next Assessment: ", b.nextAssessment] })]
|
|
98
99
|
})] })] })
|
|
99
100
|
]
|
|
100
|
-
}) : /* @__PURE__ */
|
|
101
|
+
}) : /* @__PURE__ */ a("div", {
|
|
101
102
|
className: "p-6",
|
|
102
|
-
children: /* @__PURE__ */ h
|
|
103
|
+
children: /* @__PURE__ */ a(h, {
|
|
103
104
|
illustration: "empty-search",
|
|
104
105
|
title: "Framework not found",
|
|
105
106
|
description: "This compliance framework may have been removed. Return to the security hub to find it.",
|
|
106
|
-
action: /* @__PURE__ */
|
|
107
|
+
action: /* @__PURE__ */ a(c, {
|
|
107
108
|
size: "sm",
|
|
108
109
|
onClick: () => _("/security/security-hub"),
|
|
109
110
|
children: "Back to security"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityComplianceDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/SecurityComplianceDetailPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Shield } from 'lucide-react';\nimport {
|
|
1
|
+
{"version":3,"file":"SecurityComplianceDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/SecurityComplianceDetailPage.tsx"],"sourcesContent":["import { useAssetHandlerNavigate } from '../hooks/useAssetHandlerNavigate';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Shield } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function SecurityComplianceDetailPage() {\n const navigate = useAssetHandlerNavigate();\n const { frameworkId } = useParams<{ frameworkId: string }>();\n const { complianceFrameworks } = useAssetHandlerStore();\n const framework =\n complianceFrameworks.find((item) => item.id === frameworkId) ?? complianceFrameworks[0];\n\n if (!framework)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Framework not found\"\n description=\"This compliance framework may have been removed. Return to the security hub to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/security/security-hub')}>\n Back to security\n </Button>\n }\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/security/security-hub')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold\">\n <GradientText>\n {framework.name} {framework.version}\n </GradientText>\n </h1>\n <Badge\n variant={\n framework.status === 'compliant'\n ? 'default'\n : framework.status === 'non_compliant'\n ? 'destructive'\n : 'secondary'\n }\n >\n {framework.status.replace('_', ' ')}\n </Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">\n Compliance framework assessment details\n </p>\n </div>\n </div>\n <Button size=\"sm\">\n <Shield className=\"mr-2 h-4 w-4\" />\n Run Assessment\n </Button>\n </div>\n\n <PagePurpose>\n See exactly how you measure up against a single compliance framework — your overall score,\n which controls pass or fail, and when the next assessment is due. Use it to close control\n gaps and stay audit-ready for standards like ISO 27001 or SOC 2.\n </PagePurpose>\n\n <div className=\"grid gap-4 md:grid-cols-4\">\n <EmphasisPanel className=\"text-center\">\n <p className=\"text-4xl font-bold tabular-nums\">{framework.score}%</p>\n <p className=\"text-xs text-text-secondary\">Overall Score</p>\n </EmphasisPanel>\n <Card>\n <CardContent className=\"pt-4 text-center\">\n <p className=\"text-4xl font-bold text-status-success-text\">\n {framework.passedControls}\n </p>\n <p className=\"text-xs text-text-secondary\">Passed</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4 text-center\">\n <p className=\"text-4xl font-bold text-status-error-text\">{framework.failedControls}</p>\n <p className=\"text-xs text-text-secondary\">Failed</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4 text-center\">\n <p className=\"text-4xl font-bold\">{framework.totalControls}</p>\n <p className=\"text-xs text-text-secondary\">Total Controls</p>\n </CardContent>\n </Card>\n </div>\n\n <Card>\n <CardHeader>\n <CardTitle>Compliance Progress</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"h-4 rounded-full bg-bg-sunken overflow-hidden\">\n <div\n className={`h-full rounded-full ${framework.score >= 90 ? 'bg-status-success-bg' : framework.score >= 70 ? 'bg-status-warning-bg' : 'bg-status-error-bg'}`}\n style={{ width: `${framework.score}%` }}\n />\n </div>\n <div className=\"flex justify-between mt-2 text-xs text-text-secondary\">\n <span>Last Assessment: {framework.lastAssessment}</span>\n <span>Next Assessment: {framework.nextAssessment}</span>\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,116 +1,117 @@
|
|
|
1
1
|
import { useAssetHandlerStore as e } from "../store/assethandlerStore.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { jsx as
|
|
2
|
+
import { useAssetHandlerNavigate as t } from "../hooks/useAssetHandlerNavigate.js";
|
|
3
|
+
import { ArrowLeft as n, Edit as r, FileText as i } from "lucide-react";
|
|
4
|
+
import { useParams as a } from "react-router-dom";
|
|
5
|
+
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
6
|
+
import { Badge as c, Button as l, Card as u, CardContent as d, CardHeader as f, CardTitle as p, EmphasisPanel as m, GradientText as h, IllustratedEmptyState as g, PagePurpose as _, Separator as v } from "@burdenoff/fe-libs/ui";
|
|
6
7
|
//#region src/assethandler/pages/SecurityPolicyDetailPage.tsx
|
|
7
8
|
function y() {
|
|
8
|
-
let y =
|
|
9
|
-
return S ? /* @__PURE__ */
|
|
9
|
+
let y = t(), { policyId: b } = a(), { securityPolicies: x } = e(), S = x.find((e) => e.id === b) ?? x[0];
|
|
10
|
+
return S ? /* @__PURE__ */ s("div", {
|
|
10
11
|
className: "space-y-6 p-6",
|
|
11
12
|
children: [
|
|
12
|
-
/* @__PURE__ */
|
|
13
|
+
/* @__PURE__ */ s("div", {
|
|
13
14
|
className: "flex items-center justify-between",
|
|
14
|
-
children: [/* @__PURE__ */
|
|
15
|
+
children: [/* @__PURE__ */ s("div", {
|
|
15
16
|
className: "flex items-center gap-4",
|
|
16
|
-
children: [/* @__PURE__ */
|
|
17
|
+
children: [/* @__PURE__ */ o(l, {
|
|
17
18
|
variant: "ghost",
|
|
18
19
|
size: "icon",
|
|
19
20
|
onClick: () => y("/security/security-hub"),
|
|
20
|
-
children: /* @__PURE__ */
|
|
21
|
-
}), /* @__PURE__ */
|
|
21
|
+
children: /* @__PURE__ */ o(n, { className: "h-4 w-4" })
|
|
22
|
+
}), /* @__PURE__ */ s("div", { children: [/* @__PURE__ */ s("div", {
|
|
22
23
|
className: "flex items-center gap-3",
|
|
23
24
|
children: [
|
|
24
|
-
/* @__PURE__ */
|
|
25
|
+
/* @__PURE__ */ o("h1", {
|
|
25
26
|
className: "text-2xl font-bold",
|
|
26
|
-
children: /* @__PURE__ */
|
|
27
|
+
children: /* @__PURE__ */ o(h, { children: S.name })
|
|
27
28
|
}),
|
|
28
|
-
/* @__PURE__ */
|
|
29
|
+
/* @__PURE__ */ o(c, {
|
|
29
30
|
variant: S.status === "active" ? "default" : S.status === "deprecated" ? "destructive" : "outline",
|
|
30
31
|
children: S.status.replace("_", " ")
|
|
31
32
|
}),
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
+
/* @__PURE__ */ s(c, {
|
|
33
34
|
variant: "secondary",
|
|
34
35
|
children: ["v", S.version]
|
|
35
36
|
})
|
|
36
37
|
]
|
|
37
|
-
}), /* @__PURE__ */
|
|
38
|
+
}), /* @__PURE__ */ o("p", {
|
|
38
39
|
className: "text-sm text-text-secondary mt-1",
|
|
39
40
|
children: S.description
|
|
40
41
|
})] })]
|
|
41
|
-
}), /* @__PURE__ */
|
|
42
|
+
}), /* @__PURE__ */ s(l, {
|
|
42
43
|
size: "sm",
|
|
43
|
-
children: [/* @__PURE__ */
|
|
44
|
+
children: [/* @__PURE__ */ o(r, { className: "mr-2 h-4 w-4" }), "Edit Policy"]
|
|
44
45
|
})]
|
|
45
46
|
}),
|
|
46
|
-
/* @__PURE__ */ _
|
|
47
|
-
/* @__PURE__ */
|
|
47
|
+
/* @__PURE__ */ o(_, { children: "The authoritative record of a single security policy — what it covers, who owns it, who it applies to, and when it is next due for review. Use this page to confirm the policy is current and that the right teams are bound by it." }),
|
|
48
|
+
/* @__PURE__ */ s("div", {
|
|
48
49
|
className: "grid gap-6 lg:grid-cols-3",
|
|
49
|
-
children: [/* @__PURE__ */
|
|
50
|
+
children: [/* @__PURE__ */ s(m, {
|
|
50
51
|
className: "lg:col-span-2",
|
|
51
|
-
children: [/* @__PURE__ */
|
|
52
|
+
children: [/* @__PURE__ */ o(f, {
|
|
52
53
|
className: "px-0 pt-0",
|
|
53
|
-
children: /* @__PURE__ */
|
|
54
|
-
}), /* @__PURE__ */
|
|
54
|
+
children: /* @__PURE__ */ o(p, { children: "Policy Details" })
|
|
55
|
+
}), /* @__PURE__ */ o(d, {
|
|
55
56
|
className: "px-0 pb-0",
|
|
56
|
-
children: /* @__PURE__ */
|
|
57
|
+
children: /* @__PURE__ */ s("dl", {
|
|
57
58
|
className: "space-y-4 text-sm",
|
|
58
59
|
children: [
|
|
59
|
-
/* @__PURE__ */
|
|
60
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("dt", {
|
|
60
61
|
className: "text-text-secondary",
|
|
61
62
|
children: "Description"
|
|
62
|
-
}), /* @__PURE__ */
|
|
63
|
+
}), /* @__PURE__ */ o("dd", {
|
|
63
64
|
className: "mt-1",
|
|
64
65
|
children: S.description
|
|
65
66
|
})] }),
|
|
66
|
-
/* @__PURE__ */
|
|
67
|
-
/* @__PURE__ */
|
|
67
|
+
/* @__PURE__ */ o(v, {}),
|
|
68
|
+
/* @__PURE__ */ s("div", {
|
|
68
69
|
className: "grid grid-cols-2 gap-4",
|
|
69
70
|
children: [
|
|
70
|
-
/* @__PURE__ */
|
|
71
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("dt", {
|
|
71
72
|
className: "text-text-secondary",
|
|
72
73
|
children: "Category"
|
|
73
|
-
}), /* @__PURE__ */
|
|
74
|
+
}), /* @__PURE__ */ o("dd", {
|
|
74
75
|
className: "font-medium",
|
|
75
76
|
children: S.category
|
|
76
77
|
})] }),
|
|
77
|
-
/* @__PURE__ */
|
|
78
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("dt", {
|
|
78
79
|
className: "text-text-secondary",
|
|
79
80
|
children: "Version"
|
|
80
|
-
}), /* @__PURE__ */
|
|
81
|
+
}), /* @__PURE__ */ o("dd", {
|
|
81
82
|
className: "font-medium",
|
|
82
83
|
children: S.version
|
|
83
84
|
})] }),
|
|
84
|
-
/* @__PURE__ */
|
|
85
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("dt", {
|
|
85
86
|
className: "text-text-secondary",
|
|
86
87
|
children: "Effective Date"
|
|
87
|
-
}), /* @__PURE__ */
|
|
88
|
+
}), /* @__PURE__ */ o("dd", {
|
|
88
89
|
className: "font-medium",
|
|
89
90
|
children: S.effectiveDate
|
|
90
91
|
})] }),
|
|
91
|
-
/* @__PURE__ */
|
|
92
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("dt", {
|
|
92
93
|
className: "text-text-secondary",
|
|
93
94
|
children: "Review Date"
|
|
94
|
-
}), /* @__PURE__ */
|
|
95
|
+
}), /* @__PURE__ */ o("dd", {
|
|
95
96
|
className: "font-medium",
|
|
96
97
|
children: S.reviewDate
|
|
97
98
|
})] }),
|
|
98
|
-
/* @__PURE__ */
|
|
99
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("dt", {
|
|
99
100
|
className: "text-text-secondary",
|
|
100
101
|
children: "Owner"
|
|
101
|
-
}), /* @__PURE__ */
|
|
102
|
+
}), /* @__PURE__ */ o("dd", {
|
|
102
103
|
className: "font-medium",
|
|
103
104
|
children: S.owner
|
|
104
105
|
})] })
|
|
105
106
|
]
|
|
106
107
|
}),
|
|
107
|
-
/* @__PURE__ */
|
|
108
|
-
/* @__PURE__ */
|
|
108
|
+
/* @__PURE__ */ o(v, {}),
|
|
109
|
+
/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("dt", {
|
|
109
110
|
className: "text-text-secondary mb-2",
|
|
110
111
|
children: "Applicable To"
|
|
111
|
-
}), /* @__PURE__ */
|
|
112
|
+
}), /* @__PURE__ */ o("dd", {
|
|
112
113
|
className: "flex flex-wrap gap-1.5",
|
|
113
|
-
children: S.applicableTo.map((e) => /* @__PURE__ */
|
|
114
|
+
children: S.applicableTo.map((e) => /* @__PURE__ */ o(c, {
|
|
114
115
|
variant: "secondary",
|
|
115
116
|
children: e
|
|
116
117
|
}, e))
|
|
@@ -118,25 +119,25 @@ function y() {
|
|
|
118
119
|
]
|
|
119
120
|
})
|
|
120
121
|
})]
|
|
121
|
-
}), /* @__PURE__ */
|
|
122
|
+
}), /* @__PURE__ */ s(u, { children: [/* @__PURE__ */ o(f, { children: /* @__PURE__ */ o(p, {
|
|
122
123
|
className: "text-base",
|
|
123
124
|
children: "Status"
|
|
124
|
-
}) }), /* @__PURE__ */
|
|
125
|
+
}) }), /* @__PURE__ */ o(d, { children: /* @__PURE__ */ s("div", {
|
|
125
126
|
className: `p-4 rounded-lg text-center ${S.status === "active" ? "bg-status-success-bg-subtle text-status-success-text" : S.status === "deprecated" ? "bg-status-error-bg-subtle text-status-error-text" : "bg-status-warning-bg-subtle text-status-warning-text"}`,
|
|
126
|
-
children: [/* @__PURE__ */
|
|
127
|
+
children: [/* @__PURE__ */ o(i, { className: "h-8 w-8 mx-auto mb-2" }), /* @__PURE__ */ o("p", {
|
|
127
128
|
className: "text-lg font-bold uppercase",
|
|
128
129
|
children: S.status.replace("_", " ")
|
|
129
130
|
})]
|
|
130
131
|
}) })] })]
|
|
131
132
|
})
|
|
132
133
|
]
|
|
133
|
-
}) : /* @__PURE__ */
|
|
134
|
+
}) : /* @__PURE__ */ o("div", {
|
|
134
135
|
className: "p-6",
|
|
135
|
-
children: /* @__PURE__ */
|
|
136
|
+
children: /* @__PURE__ */ o(g, {
|
|
136
137
|
illustration: "empty-files",
|
|
137
138
|
title: "Policy not found",
|
|
138
139
|
description: "This security policy may have been retired. Return to the security hub to find it.",
|
|
139
|
-
action: /* @__PURE__ */
|
|
140
|
+
action: /* @__PURE__ */ o(l, {
|
|
140
141
|
size: "sm",
|
|
141
142
|
onClick: () => y("/security/security-hub"),
|
|
142
143
|
children: "Back to security"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityPolicyDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/SecurityPolicyDetailPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Separator,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Edit, FileText } from 'lucide-react';\nimport {
|
|
1
|
+
{"version":3,"file":"SecurityPolicyDetailPage.js","names":[],"sources":["../../../src/assethandler/pages/SecurityPolicyDetailPage.tsx"],"sourcesContent":["import { useAssetHandlerNavigate } from '../hooks/useAssetHandlerNavigate';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Separator,\n GradientText,\n EmphasisPanel,\n PagePurpose,\n IllustratedEmptyState,\n} from '@burdenoff/fe-libs/ui';\nimport { ArrowLeft, Edit, FileText } from 'lucide-react';\nimport { useParams } from 'react-router-dom';\nimport { useAssetHandlerStore } from '../store/assethandlerStore';\n\nexport function SecurityPolicyDetailPage() {\n const navigate = useAssetHandlerNavigate();\n const { policyId } = useParams<{ policyId: string }>();\n const { securityPolicies } = useAssetHandlerStore();\n const policy = securityPolicies.find((item) => item.id === policyId) ?? securityPolicies[0];\n\n if (!policy)\n return (\n <div className=\"p-6\">\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"Policy not found\"\n description=\"This security policy may have been retired. Return to the security hub to find it.\"\n action={\n <Button size=\"sm\" onClick={() => navigate('/security/security-hub')}>\n Back to security\n </Button>\n }\n />\n </div>\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-4\">\n <Button variant=\"ghost\" size=\"icon\" onClick={() => navigate('/security/security-hub')}>\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <div className=\"flex items-center gap-3\">\n <h1 className=\"text-2xl font-bold\">\n <GradientText>{policy.name}</GradientText>\n </h1>\n <Badge\n variant={\n policy.status === 'active'\n ? 'default'\n : policy.status === 'deprecated'\n ? 'destructive'\n : 'outline'\n }\n >\n {policy.status.replace('_', ' ')}\n </Badge>\n <Badge variant=\"secondary\">v{policy.version}</Badge>\n </div>\n <p className=\"text-sm text-text-secondary mt-1\">{policy.description}</p>\n </div>\n </div>\n <Button size=\"sm\">\n <Edit className=\"mr-2 h-4 w-4\" />\n Edit Policy\n </Button>\n </div>\n\n <PagePurpose>\n The authoritative record of a single security policy — what it covers, who owns it, who it\n applies to, and when it is next due for review. Use this page to confirm the policy is\n current and that the right teams are bound by it.\n </PagePurpose>\n\n <div className=\"grid gap-6 lg:grid-cols-3\">\n <EmphasisPanel className=\"lg:col-span-2\">\n <CardHeader className=\"px-0 pt-0\">\n <CardTitle>Policy Details</CardTitle>\n </CardHeader>\n <CardContent className=\"px-0 pb-0\">\n <dl className=\"space-y-4 text-sm\">\n <div>\n <dt className=\"text-text-secondary\">Description</dt>\n <dd className=\"mt-1\">{policy.description}</dd>\n </div>\n <Separator />\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <dt className=\"text-text-secondary\">Category</dt>\n <dd className=\"font-medium\">{policy.category}</dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">Version</dt>\n <dd className=\"font-medium\">{policy.version}</dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">Effective Date</dt>\n <dd className=\"font-medium\">{policy.effectiveDate}</dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">Review Date</dt>\n <dd className=\"font-medium\">{policy.reviewDate}</dd>\n </div>\n <div>\n <dt className=\"text-text-secondary\">Owner</dt>\n <dd className=\"font-medium\">{policy.owner}</dd>\n </div>\n </div>\n <Separator />\n <div>\n <dt className=\"text-text-secondary mb-2\">Applicable To</dt>\n <dd className=\"flex flex-wrap gap-1.5\">\n {policy.applicableTo.map((dept) => (\n <Badge key={dept} variant=\"secondary\">\n {dept}\n </Badge>\n ))}\n </dd>\n </div>\n </dl>\n </CardContent>\n </EmphasisPanel>\n\n <Card>\n <CardHeader>\n <CardTitle className=\"text-base\">Status</CardTitle>\n </CardHeader>\n <CardContent>\n <div\n className={`p-4 rounded-lg text-center ${policy.status === 'active' ? 'bg-status-success-bg-subtle text-status-success-text' : policy.status === 'deprecated' ? 'bg-status-error-bg-subtle text-status-error-text' : 'bg-status-warning-bg-subtle text-status-warning-text'}`}\n >\n <FileText className=\"h-8 w-8 mx-auto mb-2\" />\n <p className=\"text-lg font-bold uppercase\">{policy.status.replace('_', ' ')}</p>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|