@threatcaptain/tc-reports 0.2.8 → 0.2.10
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/index.cjs +122 -704
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +123 -705
- package/dist/index.js.map +1 -1
- package/package.json +3 -4
package/dist/index.cjs
CHANGED
|
@@ -5,8 +5,6 @@ const React = require("react");
|
|
|
5
5
|
const ReactDOM = require("react-dom");
|
|
6
6
|
const lucideReact = require("lucide-react");
|
|
7
7
|
const reactRouterDom = require("react-router-dom");
|
|
8
|
-
const freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
|
|
9
|
-
const reactFontawesome = require("@fortawesome/react-fontawesome");
|
|
10
8
|
function _interopNamespaceDefault(e) {
|
|
11
9
|
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
12
10
|
if (e) {
|
|
@@ -28659,43 +28657,55 @@ const ToggleGroupItem = React__namespace.forwardRef(({ className, children, vari
|
|
|
28659
28657
|
);
|
|
28660
28658
|
});
|
|
28661
28659
|
ToggleGroupItem.displayName = Item2.displayName;
|
|
28662
|
-
const
|
|
28663
|
-
|
|
28664
|
-
|
|
28665
|
-
|
|
28666
|
-
|
|
28667
|
-
category: "Financial Analysis",
|
|
28668
|
-
preview: "bg-gradient-to-br from-red-50 to-orange-50"
|
|
28669
|
-
},
|
|
28670
|
-
{
|
|
28671
|
-
id: "insurance-health-score",
|
|
28672
|
-
name: "Cyber Insurance Health Score",
|
|
28673
|
-
description: "Assess readiness for cyber insurance coverage and identify gaps",
|
|
28674
|
-
category: "Insurance Assessment",
|
|
28675
|
-
preview: "bg-gradient-to-br from-green-50 to-emerald-50"
|
|
28676
|
-
},
|
|
28677
|
-
{
|
|
28678
|
-
id: "breach-likelihood",
|
|
28679
|
-
name: "Breach Likelihood Assessment",
|
|
28680
|
-
description: "Evaluate the probability and impact of security incidents",
|
|
28681
|
-
category: "Risk Assessment",
|
|
28682
|
-
preview: "bg-gradient-to-br from-orange-50 to-red-50"
|
|
28683
|
-
}
|
|
28684
|
-
];
|
|
28685
|
-
const Dashboard = () => {
|
|
28660
|
+
const Dashboard = ({
|
|
28661
|
+
clientId,
|
|
28662
|
+
assessmentData,
|
|
28663
|
+
simulationData
|
|
28664
|
+
}) => {
|
|
28686
28665
|
const navigate = reactRouterDom.useNavigate();
|
|
28687
28666
|
const [templateIds, setTemplateId] = React.useState([]);
|
|
28688
|
-
const handleTemplateClick = (templateId) => {
|
|
28667
|
+
const handleTemplateClick = (templateId, available) => {
|
|
28668
|
+
if (!available) return;
|
|
28689
28669
|
let updatedTemplateIds = [...templateIds];
|
|
28690
28670
|
updatedTemplateIds = updatedTemplateIds.includes(templateId) ? updatedTemplateIds.filter((id) => id !== templateId) : [...updatedTemplateIds, templateId];
|
|
28691
28671
|
setTemplateId(updatedTemplateIds);
|
|
28692
28672
|
};
|
|
28693
28673
|
const handleNavigation = () => {
|
|
28694
28674
|
const templateParam = templateIds.join(",");
|
|
28695
|
-
navigate(
|
|
28675
|
+
navigate(`/clients/${clientId}/view-report?template=${templateParam}`);
|
|
28696
28676
|
};
|
|
28677
|
+
const hasFinancialData = simulationData && Object.keys(simulationData).length > 0;
|
|
28678
|
+
const hasInsuranceData = assessmentData && assessmentData.insuranceAssessment && Object.keys(assessmentData.insuranceAssessment).length > 0;
|
|
28679
|
+
const hasSecurityData = assessmentData && assessmentData.securityAssessments && Object.keys(assessmentData.securityAssessments).length > 0;
|
|
28680
|
+
const templates = [
|
|
28681
|
+
{
|
|
28682
|
+
id: "financial-impact",
|
|
28683
|
+
name: "Financial Impact Analysis",
|
|
28684
|
+
description: "Quantify the financial impact of potential cyber threats and breaches",
|
|
28685
|
+
category: "Financial Analysis",
|
|
28686
|
+
preview: "bg-gradient-to-br from-red-50 to-orange-50",
|
|
28687
|
+
available: hasFinancialData
|
|
28688
|
+
},
|
|
28689
|
+
{
|
|
28690
|
+
id: "insurance-health-score",
|
|
28691
|
+
name: "Cyber Insurance Health Score",
|
|
28692
|
+
description: "Assess readiness for cyber insurance coverage and identify gaps",
|
|
28693
|
+
category: "Insurance Assessment",
|
|
28694
|
+
preview: "bg-gradient-to-br from-green-50 to-emerald-50",
|
|
28695
|
+
available: hasInsuranceData
|
|
28696
|
+
},
|
|
28697
|
+
{
|
|
28698
|
+
id: "breach-likelihood",
|
|
28699
|
+
name: "Breach Likelihood Assessment",
|
|
28700
|
+
description: "Evaluate the probability and impact of security incidents",
|
|
28701
|
+
category: "Risk Assessment",
|
|
28702
|
+
preview: "bg-gradient-to-br from-orange-50 to-red-50",
|
|
28703
|
+
available: hasSecurityData
|
|
28704
|
+
}
|
|
28705
|
+
];
|
|
28697
28706
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-white rounded-xl border border-slate-200 shadow-sm p-6 mb-8", children: [
|
|
28698
28707
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl font-semibold text-slate-900 mb-6", children: "Choose Your Report Template" }),
|
|
28708
|
+
false,
|
|
28699
28709
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 ", children: templates.map((template) => {
|
|
28700
28710
|
const getTemplateIcon = (id) => {
|
|
28701
28711
|
switch (id) {
|
|
@@ -28714,8 +28724,8 @@ const Dashboard = () => {
|
|
|
28714
28724
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
28715
28725
|
Card,
|
|
28716
28726
|
{
|
|
28717
|
-
className: `transition-all border-2
|
|
28718
|
-
onClick: () => handleTemplateClick(template.id),
|
|
28727
|
+
className: `transition-all border-2 hover:shadow-lg ${templateIds.includes(template.id) ? "border-blue-500 bg-blue-50" : "border-slate-200 hover:border-slate-300"} ${template.available ? "cursor-pointer" : "opacity-50 cursor-not-allowed"}`,
|
|
28728
|
+
onClick: () => handleTemplateClick(template.id, template.available),
|
|
28719
28729
|
children: [
|
|
28720
28730
|
/* @__PURE__ */ jsxRuntime.jsxs(CardHeader, { className: "pb-3", children: [
|
|
28721
28731
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -28729,6 +28739,7 @@ const Dashboard = () => {
|
|
|
28729
28739
|
] }),
|
|
28730
28740
|
/* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "pt-0", children: [
|
|
28731
28741
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm mb-3 text-slate-600", children: template.description }),
|
|
28742
|
+
!template.available && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "destructive", className: "text-xs", children: "No Assessment Data" }),
|
|
28732
28743
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "secondary", className: "text-xs", children: template.category })
|
|
28733
28744
|
] })
|
|
28734
28745
|
]
|
|
@@ -28743,7 +28754,7 @@ const Dashboard = () => {
|
|
|
28743
28754
|
variant: "default",
|
|
28744
28755
|
className: "mx-auto w-full max-w-80",
|
|
28745
28756
|
onClick: () => handleNavigation(),
|
|
28746
|
-
disabled: templateIds.length === 0,
|
|
28757
|
+
disabled: templateIds.length === 0 || !clientId,
|
|
28747
28758
|
children: "Create Report"
|
|
28748
28759
|
}
|
|
28749
28760
|
) })
|
|
@@ -28751,7 +28762,7 @@ const Dashboard = () => {
|
|
|
28751
28762
|
};
|
|
28752
28763
|
const BreachLikelihood = ({ reportData }) => {
|
|
28753
28764
|
var _a;
|
|
28754
|
-
const { clientData, securityAssessment
|
|
28765
|
+
const { clientData, securityAssessment } = reportData;
|
|
28755
28766
|
const calculateBreachLikelihood = (protectionLevel) => {
|
|
28756
28767
|
if ((securityAssessment == null ? void 0 : securityAssessment.overall_breach_likelihood) !== null && (securityAssessment == null ? void 0 : securityAssessment.overall_breach_likelihood) !== void 0) {
|
|
28757
28768
|
return Math.round(securityAssessment.overall_breach_likelihood);
|
|
@@ -28794,24 +28805,14 @@ const BreachLikelihood = ({ reportData }) => {
|
|
|
28794
28805
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-base font-semibold text-slate-900", children: "Why This Breach Likelihood Assessment Matters" }),
|
|
28795
28806
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-slate-700 leading-relaxed whitespace-pre-line text-sm", children: clientData.executiveSummary ? clientData.executiveSummary : "" })
|
|
28796
28807
|
] }),
|
|
28797
|
-
/* @__PURE__ */ jsxRuntime.
|
|
28798
|
-
/* @__PURE__ */ jsxRuntime.
|
|
28799
|
-
|
|
28800
|
-
|
|
28801
|
-
|
|
28802
|
-
baseCost ? baseCost.toLocaleString() : "510,000"
|
|
28803
|
-
] }),
|
|
28804
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs opacity-90", children: "What an attack could cost your business" })
|
|
28808
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 mb-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-orange-600 text-white p-6 rounded-lg text-center", children: [
|
|
28809
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Target, { className: "w-8 h-8 mx-auto mb-3" }),
|
|
28810
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-3xl font-bold mb-2", children: [
|
|
28811
|
+
attackLikelihood,
|
|
28812
|
+
"%"
|
|
28805
28813
|
] }),
|
|
28806
|
-
/* @__PURE__ */ jsxRuntime.
|
|
28807
|
-
|
|
28808
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-3xl font-bold mb-2", children: [
|
|
28809
|
-
attackLikelihood,
|
|
28810
|
-
"%"
|
|
28811
|
-
] }),
|
|
28812
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs opacity-90", children: "Chance criminals would succeed today" })
|
|
28813
|
-
] })
|
|
28814
|
-
] }),
|
|
28814
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs opacity-90", children: "Chance criminals would succeed today" })
|
|
28815
|
+
] }) }),
|
|
28815
28816
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-slate-50 rounded-lg p-4 space-y-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-2 text-xs text-center", children: [
|
|
28816
28817
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center space-x-1", children: [
|
|
28817
28818
|
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CheckCircle, { className: "w-4 h-4 text-green-600" }),
|
|
@@ -28849,451 +28850,6 @@ const BreachLikelihood = ({ reportData }) => {
|
|
|
28849
28850
|
] })
|
|
28850
28851
|
] })
|
|
28851
28852
|
] }),
|
|
28852
|
-
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
28853
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
28854
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-slate-900 mb-2", children: "Protection Analysis" }),
|
|
28855
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600", children: "Understanding Your Business Protection Shield" })
|
|
28856
|
-
] }),
|
|
28857
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-slate-50 rounded-lg p-8 text-center", children: [
|
|
28858
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Shield, { className: "w-20 h-20 mx-auto mb-4 text-slate-600" }),
|
|
28859
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-bold mb-4", children: "Your Business Protection Shield" }),
|
|
28860
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xl font-bold text-red-600 mb-4", children: [
|
|
28861
|
-
"Shield Strength: ",
|
|
28862
|
-
100 - attackLikelihood,
|
|
28863
|
-
"%"
|
|
28864
|
-
] }),
|
|
28865
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center items-center space-x-1 mb-4", children: Array.from(
|
|
28866
|
-
{
|
|
28867
|
-
length: 10
|
|
28868
|
-
},
|
|
28869
|
-
(_, index2) => {
|
|
28870
|
-
const shieldPercentage = 100 - attackLikelihood;
|
|
28871
|
-
const threshold = (index2 + 1) * 10;
|
|
28872
|
-
const isProtected = shieldPercentage >= threshold;
|
|
28873
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
28874
|
-
"span",
|
|
28875
|
-
{
|
|
28876
|
-
className: `text-2xl font-bold ${isProtected ? "text-blue-600" : "text-slate-300"}`,
|
|
28877
|
-
style: {
|
|
28878
|
-
fontFamily: "Arial, sans-serif"
|
|
28879
|
-
},
|
|
28880
|
-
children: "●"
|
|
28881
|
-
},
|
|
28882
|
-
index2
|
|
28883
|
-
);
|
|
28884
|
-
}
|
|
28885
|
-
) }),
|
|
28886
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center mb-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center space-x-1 bg-slate-100 rounded-lg px-4 py-2", children: [
|
|
28887
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-slate-600", children: "Protection Level:" }),
|
|
28888
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-lg font-bold text-blue-600", children: [
|
|
28889
|
-
100 - attackLikelihood,
|
|
28890
|
-
"%"
|
|
28891
|
-
] }),
|
|
28892
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm text-slate-500", children: [
|
|
28893
|
-
"(",
|
|
28894
|
-
attackLikelihood,
|
|
28895
|
-
"% vulnerable)"
|
|
28896
|
-
] })
|
|
28897
|
-
] }) }),
|
|
28898
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg font-bold", children: [
|
|
28899
|
-
100 - attackLikelihood,
|
|
28900
|
-
"% Protected | ",
|
|
28901
|
-
attackLikelihood,
|
|
28902
|
-
"% Vulnerable"
|
|
28903
|
-
] }),
|
|
28904
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600 mt-4", children: "Your business has basic protection in a few areas, but most of your shield has serious gaps that criminals could easily exploit." })
|
|
28905
|
-
] }),
|
|
28906
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
28907
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl font-bold text-center", children: "How Criminals Attack Your Business" }),
|
|
28908
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-4 gap-4", children: [
|
|
28909
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center border-2 border-slate-200 rounded-lg p-4", children: [
|
|
28910
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
28911
|
-
reactFontawesome.FontAwesomeIcon,
|
|
28912
|
-
{
|
|
28913
|
-
icon: freeSolidSvgIcons.faDoorOpen,
|
|
28914
|
-
className: "text-2xl mb-2 text-slate-600"
|
|
28915
|
-
}
|
|
28916
|
-
),
|
|
28917
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-bold mb-2", children: "Step 1: Get In" }),
|
|
28918
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600 mb-2", children: "Find any weakness like emails, websites, or mistakes" }),
|
|
28919
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-bold text-red-600", children: "Protection: Minimal" })
|
|
28920
|
-
] }),
|
|
28921
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center border-2 border-slate-200 rounded-lg p-4", children: [
|
|
28922
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Eye, { className: "w-8 h-8 mx-auto mb-2 text-slate-600" }),
|
|
28923
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-bold mb-2", children: "Step 2: Sneak Around" }),
|
|
28924
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600 mb-2", children: "Move through systems quietly and find valuable information" }),
|
|
28925
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-bold text-red-600", children: "Protection: None" })
|
|
28926
|
-
] }),
|
|
28927
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center border-2 border-slate-200 rounded-lg p-4", children: [
|
|
28928
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
28929
|
-
reactFontawesome.FontAwesomeIcon,
|
|
28930
|
-
{
|
|
28931
|
-
icon: freeSolidSvgIcons.faCrown,
|
|
28932
|
-
className: "text-2xl mb-2 text-slate-600"
|
|
28933
|
-
}
|
|
28934
|
-
),
|
|
28935
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-bold mb-2", children: "Step 3: Take Control" }),
|
|
28936
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600 mb-2", children: "Steal data, encrypt files, or take over your systems" }),
|
|
28937
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-bold text-red-600", children: "Protection: None" })
|
|
28938
|
-
] }),
|
|
28939
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center border-2 border-slate-200 rounded-lg p-4", children: [
|
|
28940
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
28941
|
-
reactFontawesome.FontAwesomeIcon,
|
|
28942
|
-
{
|
|
28943
|
-
icon: freeSolidSvgIcons.faEyeSlash,
|
|
28944
|
-
className: "text-2xl mb-2 text-slate-600"
|
|
28945
|
-
}
|
|
28946
|
-
),
|
|
28947
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-bold mb-2", children: "Step 4: Stay Hidden" }),
|
|
28948
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600 mb-2", children: "Cover tracks so you don't notice for weeks/months" }),
|
|
28949
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs font-bold text-red-600", children: "Protection: None" })
|
|
28950
|
-
] })
|
|
28951
|
-
] }),
|
|
28952
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-bold text-red-600", children: "Result: Criminals have a clear path to hurt your business with very little stopping them." }) })
|
|
28953
|
-
] })
|
|
28954
|
-
] }),
|
|
28955
|
-
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
28956
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
28957
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-slate-900 mb-2", children: "Control-Specific Financial Impact" }),
|
|
28958
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600", children: "Multiple value streams for each control" })
|
|
28959
|
-
] }),
|
|
28960
|
-
(() => {
|
|
28961
|
-
var _a2;
|
|
28962
|
-
const controlMappings = ((_a2 = clientData.securityAssessment) == null ? void 0 : _a2.control_mappings) || [];
|
|
28963
|
-
const implementedControls = Array.isArray(controlMappings) ? controlMappings.filter((c2) => c2.implemented === true) : [];
|
|
28964
|
-
const potentialControls = Array.isArray(controlMappings) ? controlMappings.filter((c2) => c2.implemented !== true) : [];
|
|
28965
|
-
const renderControlRow = (control) => {
|
|
28966
|
-
var _a3, _b, _c, _d;
|
|
28967
|
-
const mitrePhases = Array.isArray(control.mitrePhases) ? control.mitrePhases.join(", ") : control.mitrePhases || "";
|
|
28968
|
-
const breachValue = ((_a3 = control.financialValues) == null ? void 0 : _a3.proportionalBreachValue) || control.breach_protection || 0;
|
|
28969
|
-
const complianceValue = ((_b = control.financialValues) == null ? void 0 : _b.complianceValue) || control.compliance_value || 0;
|
|
28970
|
-
const operationalValue = ((_c = control.financialValues) == null ? void 0 : _c.operationalSavings) || control.operational_savings || 0;
|
|
28971
|
-
const totalValue = ((_d = control.financialValues) == null ? void 0 : _d.totalValue) || breachValue + complianceValue + operationalValue || 0;
|
|
28972
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
28973
|
-
"tr",
|
|
28974
|
-
{
|
|
28975
|
-
className: "border-b transition-colors hover:bg-slate-50",
|
|
28976
|
-
children: [
|
|
28977
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-4 align-top border border-slate-300", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1", children: [
|
|
28978
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "font-semibold text-slate-900", children: [
|
|
28979
|
-
"CIS ",
|
|
28980
|
-
control.controlNumber || control.cis_control_number
|
|
28981
|
-
] }),
|
|
28982
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-medium text-slate-700", children: control.controlName || control.cis_control_name || control.name }),
|
|
28983
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-slate-600 leading-tight", children: [
|
|
28984
|
-
"MITRE: ",
|
|
28985
|
-
mitrePhases
|
|
28986
|
-
] })
|
|
28987
|
-
] }) }),
|
|
28988
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-4 align-middle border border-slate-300 text-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-blue-600 font-semibold", children: [
|
|
28989
|
-
"$",
|
|
28990
|
-
breachValue.toLocaleString()
|
|
28991
|
-
] }) }),
|
|
28992
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-4 align-middle border border-slate-300 text-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-green-600 font-semibold", children: [
|
|
28993
|
-
"$",
|
|
28994
|
-
complianceValue.toLocaleString()
|
|
28995
|
-
] }) }),
|
|
28996
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-4 align-middle border border-slate-300 text-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-purple-600 font-semibold", children: [
|
|
28997
|
-
"$",
|
|
28998
|
-
operationalValue.toLocaleString()
|
|
28999
|
-
] }) }),
|
|
29000
|
-
/* @__PURE__ */ jsxRuntime.jsx("td", { className: "p-4 align-middle border border-slate-300 text-center", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-slate-900 font-bold", children: [
|
|
29001
|
-
"$",
|
|
29002
|
-
totalValue.toLocaleString()
|
|
29003
|
-
] }) })
|
|
29004
|
-
]
|
|
29005
|
-
},
|
|
29006
|
-
control.controlNumber
|
|
29007
|
-
);
|
|
29008
|
-
};
|
|
29009
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-6", children: (() => {
|
|
29010
|
-
const renderControlTable = (controls, title, color, isPotential = false) => {
|
|
29011
|
-
if (isPotential) {
|
|
29012
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
29013
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 mb-3", children: [
|
|
29014
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
29015
|
-
"div",
|
|
29016
|
-
{
|
|
29017
|
-
className: `w-5 h-5 ${color === "green" ? "bg-green-600" : "bg-red-600"} rounded-full flex items-center justify-center`,
|
|
29018
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
29019
|
-
"svg",
|
|
29020
|
-
{
|
|
29021
|
-
className: "w-3 h-3 text-white",
|
|
29022
|
-
fill: "currentColor",
|
|
29023
|
-
viewBox: "0 0 20 20",
|
|
29024
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
29025
|
-
"path",
|
|
29026
|
-
{
|
|
29027
|
-
fillRule: "evenodd",
|
|
29028
|
-
d: color === "green" ? "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" : "M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z",
|
|
29029
|
-
clipRule: "evenodd"
|
|
29030
|
-
}
|
|
29031
|
-
)
|
|
29032
|
-
}
|
|
29033
|
-
)
|
|
29034
|
-
}
|
|
29035
|
-
),
|
|
29036
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
29037
|
-
"h3",
|
|
29038
|
-
{
|
|
29039
|
-
className: `text-lg font-semibold ${color === "green" ? "text-green-600" : "text-red-600"}`,
|
|
29040
|
-
children: title
|
|
29041
|
-
}
|
|
29042
|
-
)
|
|
29043
|
-
] }),
|
|
29044
|
-
/* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full caption-bottom text-sm border-collapse border border-slate-300", children: [
|
|
29045
|
-
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
29046
|
-
"tr",
|
|
29047
|
-
{
|
|
29048
|
-
className: color === "green" ? "bg-green-50" : "bg-red-50",
|
|
29049
|
-
children: [
|
|
29050
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Control" }),
|
|
29051
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Breach Protection" }),
|
|
29052
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Compliance Value" }),
|
|
29053
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Operational Savings" }),
|
|
29054
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Total Value" })
|
|
29055
|
-
]
|
|
29056
|
-
}
|
|
29057
|
-
) }),
|
|
29058
|
-
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: controls.length > 0 ? controls.map(
|
|
29059
|
-
(control) => renderControlRow(control)
|
|
29060
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
29061
|
-
"td",
|
|
29062
|
-
{
|
|
29063
|
-
colSpan: 5,
|
|
29064
|
-
className: "p-8 text-center text-slate-500 border border-slate-300",
|
|
29065
|
-
children: isPotential ? "No additional controls recommended" : "No controls currently implemented"
|
|
29066
|
-
}
|
|
29067
|
-
) }) })
|
|
29068
|
-
] })
|
|
29069
|
-
] });
|
|
29070
|
-
}
|
|
29071
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
29072
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 mb-3", children: [
|
|
29073
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
29074
|
-
"div",
|
|
29075
|
-
{
|
|
29076
|
-
className: `w-5 h-5 ${color === "green" ? "bg-green-600" : "bg-red-600"} rounded-full flex items-center justify-center`,
|
|
29077
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
29078
|
-
"svg",
|
|
29079
|
-
{
|
|
29080
|
-
className: "w-3 h-3 text-white",
|
|
29081
|
-
fill: "currentColor",
|
|
29082
|
-
viewBox: "0 0 20 20",
|
|
29083
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
29084
|
-
"path",
|
|
29085
|
-
{
|
|
29086
|
-
fillRule: "evenodd",
|
|
29087
|
-
d: color === "green" ? "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" : "M10 3a1 1 0 011 1v5h5a1 1 0 110 2h-5v5a1 1 0 11-2 0v-5H4a1 1 0 110-2h5V4a1 1 0 011-1z",
|
|
29088
|
-
clipRule: "evenodd"
|
|
29089
|
-
}
|
|
29090
|
-
)
|
|
29091
|
-
}
|
|
29092
|
-
)
|
|
29093
|
-
}
|
|
29094
|
-
),
|
|
29095
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
29096
|
-
"h3",
|
|
29097
|
-
{
|
|
29098
|
-
className: `text-lg font-semibold ${color === "green" ? "text-green-600" : "text-red-600"}`,
|
|
29099
|
-
children: title
|
|
29100
|
-
}
|
|
29101
|
-
)
|
|
29102
|
-
] }),
|
|
29103
|
-
/* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full caption-bottom text-sm border-collapse border border-slate-300", children: [
|
|
29104
|
-
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
29105
|
-
"tr",
|
|
29106
|
-
{
|
|
29107
|
-
className: color === "green" ? "bg-green-50" : "bg-red-50",
|
|
29108
|
-
children: [
|
|
29109
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Control" }),
|
|
29110
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Breach Protection" }),
|
|
29111
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Compliance Value" }),
|
|
29112
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Operational Savings" }),
|
|
29113
|
-
/* @__PURE__ */ jsxRuntime.jsx("th", { className: "h-12 px-4 text-left align-middle font-medium text-slate-900 border border-slate-300", children: "Total Value" })
|
|
29114
|
-
]
|
|
29115
|
-
}
|
|
29116
|
-
) }),
|
|
29117
|
-
/* @__PURE__ */ jsxRuntime.jsx("tbody", { children: controls.length > 0 ? controls.map(
|
|
29118
|
-
(control) => renderControlRow(control)
|
|
29119
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
29120
|
-
"td",
|
|
29121
|
-
{
|
|
29122
|
-
colSpan: 5,
|
|
29123
|
-
className: "p-8 text-center text-slate-500 border border-slate-300",
|
|
29124
|
-
children: isPotential ? "No additional controls recommended" : "No controls currently implemented"
|
|
29125
|
-
}
|
|
29126
|
-
) }) })
|
|
29127
|
-
] })
|
|
29128
|
-
] });
|
|
29129
|
-
};
|
|
29130
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
29131
|
-
renderControlTable(
|
|
29132
|
-
implementedControls,
|
|
29133
|
-
"Controls Currently in Place",
|
|
29134
|
-
"green"
|
|
29135
|
-
),
|
|
29136
|
-
renderControlTable(
|
|
29137
|
-
potentialControls,
|
|
29138
|
-
"Recommended Additional Controls",
|
|
29139
|
-
"red",
|
|
29140
|
-
true
|
|
29141
|
-
)
|
|
29142
|
-
] });
|
|
29143
|
-
})() });
|
|
29144
|
-
})(),
|
|
29145
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-slate-50 rounded-lg p-6", children: [
|
|
29146
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-slate-900 mb-4", children: "Control Implementation Impact" }),
|
|
29147
|
-
(() => {
|
|
29148
|
-
var _a2;
|
|
29149
|
-
const controlMappings = ((_a2 = clientData.securityAssessment) == null ? void 0 : _a2.control_mappings) || [];
|
|
29150
|
-
const implementedControls = Array.isArray(controlMappings) ? controlMappings.filter(
|
|
29151
|
-
(control) => control.implemented === true
|
|
29152
|
-
) : [];
|
|
29153
|
-
const potentialControls = Array.isArray(controlMappings) ? controlMappings.filter(
|
|
29154
|
-
(control) => control.implemented === false
|
|
29155
|
-
) : [];
|
|
29156
|
-
const implementedTotals = implementedControls.reduce(
|
|
29157
|
-
(acc, control) => {
|
|
29158
|
-
var _a3, _b, _c;
|
|
29159
|
-
acc.breachProtection += ((_a3 = control.financialValues) == null ? void 0 : _a3.proportionalBreachValue) || control.breach_protection || 0;
|
|
29160
|
-
acc.complianceValue += ((_b = control.financialValues) == null ? void 0 : _b.complianceValue) || control.compliance_value || 0;
|
|
29161
|
-
acc.operationalSavings += ((_c = control.financialValues) == null ? void 0 : _c.operationalSavings) || control.operational_savings || 0;
|
|
29162
|
-
return acc;
|
|
29163
|
-
},
|
|
29164
|
-
{
|
|
29165
|
-
breachProtection: 0,
|
|
29166
|
-
complianceValue: 0,
|
|
29167
|
-
operationalSavings: 0
|
|
29168
|
-
}
|
|
29169
|
-
);
|
|
29170
|
-
const potentialTotals = potentialControls.reduce(
|
|
29171
|
-
(acc, control) => {
|
|
29172
|
-
var _a3, _b, _c;
|
|
29173
|
-
acc.breachProtection += ((_a3 = control.financialValues) == null ? void 0 : _a3.proportionalBreachValue) || control.breach_protection || 0;
|
|
29174
|
-
acc.complianceValue += ((_b = control.financialValues) == null ? void 0 : _b.complianceValue) || control.compliance_value || 0;
|
|
29175
|
-
acc.operationalSavings += ((_c = control.financialValues) == null ? void 0 : _c.operationalSavings) || control.operational_savings || 0;
|
|
29176
|
-
acc.implementationCost += control.implementationCost || control.implementation_cost || 0;
|
|
29177
|
-
return acc;
|
|
29178
|
-
},
|
|
29179
|
-
{
|
|
29180
|
-
breachProtection: 0,
|
|
29181
|
-
complianceValue: 0,
|
|
29182
|
-
operationalSavings: 0,
|
|
29183
|
-
implementationCost: 0
|
|
29184
|
-
}
|
|
29185
|
-
);
|
|
29186
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6 text-sm", children: [
|
|
29187
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
29188
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-3xl font-bold text-green-600", children: [
|
|
29189
|
-
"$",
|
|
29190
|
-
implementedTotals.breachProtection.toLocaleString()
|
|
29191
|
-
] }),
|
|
29192
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-slate-600 mt-2", children: "Current Breach Protection" })
|
|
29193
|
-
] }),
|
|
29194
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
29195
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-3xl font-bold text-red-600", children: [
|
|
29196
|
-
"$",
|
|
29197
|
-
potentialTotals.breachProtection.toLocaleString()
|
|
29198
|
-
] }),
|
|
29199
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-slate-600 mt-2", children: "Additional Protection Available" })
|
|
29200
|
-
] })
|
|
29201
|
-
] });
|
|
29202
|
-
})()
|
|
29203
|
-
] })
|
|
29204
|
-
] }),
|
|
29205
|
-
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
29206
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
29207
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-slate-900 mb-2", children: "Next Steps & Action Options" }),
|
|
29208
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600", children: "Choose Your Path Forward" })
|
|
29209
|
-
] }),
|
|
29210
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-slate-50 rounded-lg p-6 space-y-4", children: [
|
|
29211
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl font-bold text-center", children: "Your Complete Business Risk Assessment" }),
|
|
29212
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-4 text-sm text-center", children: [
|
|
29213
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
29214
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-600", children: "✓" }),
|
|
29215
|
-
" ",
|
|
29216
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Financial Impact:" }),
|
|
29217
|
-
" $",
|
|
29218
|
-
baseCost.toLocaleString(),
|
|
29219
|
-
" ",
|
|
29220
|
-
"potential cost"
|
|
29221
|
-
] }),
|
|
29222
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
29223
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-600", children: "✓" }),
|
|
29224
|
-
" ",
|
|
29225
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Insurance Readiness:" }),
|
|
29226
|
-
" ",
|
|
29227
|
-
clientData.insuranceHealthScore || 490,
|
|
29228
|
-
"/850 (",
|
|
29229
|
-
clientData.insuranceScoreCategory || "Poor",
|
|
29230
|
-
")"
|
|
29231
|
-
] }),
|
|
29232
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
29233
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-600", children: "✓" }),
|
|
29234
|
-
" ",
|
|
29235
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Attack Likelihood:" }),
|
|
29236
|
-
" ",
|
|
29237
|
-
attackLikelihood,
|
|
29238
|
-
"% chance of success"
|
|
29239
|
-
] })
|
|
29240
|
-
] }),
|
|
29241
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center text-lg font-bold text-red-600", children: [
|
|
29242
|
-
"Your Bottom Line: $",
|
|
29243
|
-
realRiskExposure.toLocaleString(),
|
|
29244
|
-
" at risk"
|
|
29245
|
-
] })
|
|
29246
|
-
] }),
|
|
29247
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-6", children: [
|
|
29248
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-2 border-green-500 bg-green-50 rounded-lg p-6 text-center", children: [
|
|
29249
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-bold mb-2", children: "Option 1: Start With Essentials" }),
|
|
29250
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-green-600 text-white px-3 py-1 rounded-full text-sm font-bold mb-4 inline-block", children: "Recommended" }),
|
|
29251
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm mb-4", children: [
|
|
29252
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Benefit:" }),
|
|
29253
|
-
" Reduces risk by 73%"
|
|
29254
|
-
] }),
|
|
29255
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600", children: "Get the most critical protections in place first. Covers the most common attack methods." })
|
|
29256
|
-
] }),
|
|
29257
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-2 border-blue-500 rounded-lg p-6 text-center", children: [
|
|
29258
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-bold mb-4", children: "Option 2: Complete Protection Plan" }),
|
|
29259
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm mb-4", children: [
|
|
29260
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Benefit:" }),
|
|
29261
|
-
" Reduces risk by 87%"
|
|
29262
|
-
] }),
|
|
29263
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600", children: "Full comprehensive security. Positions you well for insurance discounts and client requirements." })
|
|
29264
|
-
] }),
|
|
29265
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border-2 border-red-500 bg-red-50 rounded-lg p-6 text-center", children: [
|
|
29266
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg font-bold mb-4", children: "Option 3: Do Nothing" }),
|
|
29267
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm mb-2", children: [
|
|
29268
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Investment:" }),
|
|
29269
|
-
" $0"
|
|
29270
|
-
] }),
|
|
29271
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-sm mb-4 text-red-600", children: [
|
|
29272
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Risk:" }),
|
|
29273
|
-
" 97% chance of losing $",
|
|
29274
|
-
realRiskExposure.toLocaleString()
|
|
29275
|
-
] }),
|
|
29276
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600", children: "Keep current protection and hope criminals don't target you." })
|
|
29277
|
-
] })
|
|
29278
|
-
] }),
|
|
29279
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-gradient-to-r from-blue-600 to-blue-800 text-white rounded-lg p-8 text-center", children: [
|
|
29280
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-bold mb-4", children: "Ready to Protect Your Business?" }),
|
|
29281
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg mb-6 opacity-90", children: "You know what you're facing and what it costs to fix. The question isn't whether you can afford protection - it's whether you can afford to go without it." }),
|
|
29282
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg mb-4", children: [
|
|
29283
|
-
/* @__PURE__ */ jsxRuntime.jsx("strong", { children: "Contact:" }),
|
|
29284
|
-
" ",
|
|
29285
|
-
(mspInfo == null ? void 0 : mspInfo.contact_email) ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
29286
|
-
"a",
|
|
29287
|
-
{
|
|
29288
|
-
href: `mailto:${mspInfo == null ? void 0 : mspInfo.contact_email}`,
|
|
29289
|
-
className: "underline",
|
|
29290
|
-
children: mspInfo == null ? void 0 : mspInfo.contact_email
|
|
29291
|
-
}
|
|
29292
|
-
) : "contact@company.com"
|
|
29293
|
-
] }),
|
|
29294
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm opacity-80", children: "Every day you wait is another day criminals could strike. Every protection you add makes your business safer." })
|
|
29295
|
-
] })
|
|
29296
|
-
] }),
|
|
29297
28853
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
29298
28854
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
29299
28855
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-slate-900 mb-2", children: "Understanding Your Numbers" }),
|
|
@@ -29618,7 +29174,7 @@ const UnifiedCostBreakdownChart = ({
|
|
|
29618
29174
|
};
|
|
29619
29175
|
const FinancialImpact = ({ reportData }) => {
|
|
29620
29176
|
var _a;
|
|
29621
|
-
const { clientData, simulationData
|
|
29177
|
+
const { clientData, simulationData } = reportData;
|
|
29622
29178
|
const { industry } = clientData;
|
|
29623
29179
|
const displayExecutiveSummary = () => {
|
|
29624
29180
|
if (clientData.executiveSummary) return clientData.executiveSummary;
|
|
@@ -29996,10 +29552,6 @@ const FinancialImpact = ({ reportData }) => {
|
|
|
29996
29552
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-white border border-slate-200 rounded-lg p-6", children: [
|
|
29997
29553
|
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900 mb-4", children: "Business Impact" }),
|
|
29998
29554
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-3 text-sm", children: [
|
|
29999
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
30000
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-600", children: "Records Affected:" }),
|
|
30001
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-right", children: parseInt(simulationData.record_count) * (simulationData.percentage_breached / 100) || "" })
|
|
30002
|
-
] }),
|
|
30003
29555
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between", children: [
|
|
30004
29556
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-600", children: "Downtime Duration:" }),
|
|
30005
29557
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium text-right", children: [
|
|
@@ -30021,30 +29573,6 @@ const FinancialImpact = ({ reportData }) => {
|
|
|
30021
29573
|
] })
|
|
30022
29574
|
] })
|
|
30023
29575
|
] }),
|
|
30024
|
-
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
30025
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30026
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-slate-900 mb-2", children: "Proposed Next Steps" }),
|
|
30027
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600", children: "Taking action on these findings is critical to reducing your organization's cyber risk exposure and potential financial impact." })
|
|
30028
|
-
] }),
|
|
30029
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [
|
|
30030
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border border-slate-200 rounded-lg p-6 space-y-3", children: [
|
|
30031
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900", children: "Breach Likelihood Assessment" }),
|
|
30032
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600", children: "Evaluate your current security posture and identify the most probable attack vectors targeting your organization." })
|
|
30033
|
-
] }),
|
|
30034
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "border border-slate-200 rounded-lg p-6 space-y-3", children: [
|
|
30035
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900", children: "Cyber Insurance Health Score" }),
|
|
30036
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600", children: "Assess your readiness for cyber insurance coverage and identify gaps that could affect your policy." })
|
|
30037
|
-
] })
|
|
30038
|
-
] }),
|
|
30039
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-6 text-center", children: [
|
|
30040
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900 mb-2", children: "Schedule Your Strategy Session" }),
|
|
30041
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600 mb-4", children: "Let's discuss these findings and develop a customized cybersecurity roadmap for your organization." }),
|
|
30042
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-slate-600", children: [
|
|
30043
|
-
"Contact us at: ",
|
|
30044
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-slate-900", children: (mspInfo == null ? void 0 : mspInfo.contact_email) ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: `mailto:${mspInfo == null ? void 0 : mspInfo.contact_email}`, className: "underline", children: mspInfo == null ? void 0 : mspInfo.contact_email }) : "contact@company.com" })
|
|
30045
|
-
] })
|
|
30046
|
-
] })
|
|
30047
|
-
] }),
|
|
30048
29576
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
30049
29577
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center space-x-3", children: [
|
|
30050
29578
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-blue-600 rounded-lg flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white text-lg", children: "?" }) }),
|
|
@@ -30366,11 +29894,9 @@ const InsuranceHealthGauge = ({
|
|
|
30366
29894
|
] });
|
|
30367
29895
|
};
|
|
30368
29896
|
const InsuranceHealthScore = ({ reportData }) => {
|
|
30369
|
-
var _a;
|
|
30370
29897
|
const { clientData, insuranceHealthData } = reportData;
|
|
30371
|
-
const
|
|
30372
|
-
const
|
|
30373
|
-
const scoreCategory = score ? getScoreCategory(score) : null;
|
|
29898
|
+
const score = insuranceHealthData.score || 650;
|
|
29899
|
+
const scoreCategory = getScoreCategory(score);
|
|
30374
29900
|
const scoreCategoryData = typeof scoreCategory === "string" ? {
|
|
30375
29901
|
category: scoreCategory,
|
|
30376
29902
|
description: "Insurance readiness assessment",
|
|
@@ -30400,15 +29926,15 @@ const InsuranceHealthScore = ({ reportData }) => {
|
|
|
30400
29926
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
30401
29927
|
"div",
|
|
30402
29928
|
{
|
|
30403
|
-
className: `rounded-lg p-6 text-white text-center ${
|
|
29929
|
+
className: `rounded-lg p-6 text-white text-center ${scoreCategoryData.bgColor}`,
|
|
30404
29930
|
children: [
|
|
30405
29931
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center space-x-2 mb-2", children: [
|
|
30406
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 rounded-full bg-white/20 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-bold", children:
|
|
29932
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 rounded-full bg-white/20 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg font-bold", children: score }) }),
|
|
30407
29933
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-2xl font-bold", children: "INSURANCE HEALTH SCORE" })
|
|
30408
29934
|
] }),
|
|
30409
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-4xl font-bold", children:
|
|
30410
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-semibold mt-2", children:
|
|
30411
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm opacity-75 mt-1", children:
|
|
29935
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-4xl font-bold", children: `${score}/850` }),
|
|
29936
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-lg font-semibold mt-2", children: scoreCategoryData.category }),
|
|
29937
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm opacity-75 mt-1", children: scoreCategoryData.description })
|
|
30412
29938
|
]
|
|
30413
29939
|
}
|
|
30414
29940
|
),
|
|
@@ -30455,21 +29981,7 @@ const InsuranceHealthScore = ({ reportData }) => {
|
|
|
30455
29981
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600", children: "Assessment results and category breakdown" })
|
|
30456
29982
|
] }),
|
|
30457
29983
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-6 gap-8", children: [
|
|
30458
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30459
|
-
hasAssessmentData ? /* @__PURE__ */ jsxRuntime.jsx(InsuranceHealthGauge, { score, size: 320 }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
30460
|
-
"div",
|
|
30461
|
-
{
|
|
30462
|
-
className: "flex flex-col items-center justify-center space-y-4",
|
|
30463
|
-
style: { height: "320px" },
|
|
30464
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center space-y-2", children: [
|
|
30465
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-6xl font-bold text-slate-400", children: "N/A" }),
|
|
30466
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-lg font-semibold text-slate-600", children: "Not Available" }),
|
|
30467
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-slate-500 max-w-xs", children: "Complete the insurance health assessment to view your score gauge" })
|
|
30468
|
-
] })
|
|
30469
|
-
}
|
|
30470
|
-
),
|
|
30471
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center" })
|
|
30472
|
-
] }),
|
|
29984
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "md:col-span-3 flex flex-col items-center space-y-4", children: /* @__PURE__ */ jsxRuntime.jsx(InsuranceHealthGauge, { score, size: 320 }) }),
|
|
30473
29985
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "md:col-span-3 space-y-4", children: [
|
|
30474
29986
|
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900", children: "Security Category Scores" }),
|
|
30475
29987
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-3", children: (() => {
|
|
@@ -30516,102 +30028,6 @@ const InsuranceHealthScore = ({ reportData }) => {
|
|
|
30516
30028
|
] })
|
|
30517
30029
|
] })
|
|
30518
30030
|
] }),
|
|
30519
|
-
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
30520
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30521
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-slate-900 mb-2", children: "Recommendations for Improvement" }),
|
|
30522
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600", children: "Priority actions to enhance your insurance health score" })
|
|
30523
|
-
] }),
|
|
30524
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-6", children: ((_a = clientData.recommendations) == null ? void 0 : _a.map((rec, index2) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
30525
|
-
"div",
|
|
30526
|
-
{
|
|
30527
|
-
className: "bg-white border border-slate-200 rounded-lg p-6",
|
|
30528
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start space-x-4", children: [
|
|
30529
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-blue-100 rounded-full p-2 flex-shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-blue-600 font-bold text-sm", children: index2 + 1 }) }),
|
|
30530
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-grow", children: [
|
|
30531
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900 mb-2", children: rec.title }),
|
|
30532
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4", children: [
|
|
30533
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30534
|
-
/* @__PURE__ */ jsxRuntime.jsx("h5", { className: "font-medium text-red-600 mb-1", children: "Current Risk:" }),
|
|
30535
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600", children: rec.problem })
|
|
30536
|
-
] }),
|
|
30537
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30538
|
-
/* @__PURE__ */ jsxRuntime.jsx("h5", { className: "font-medium text-green-600 mb-1", children: "Recommended Action:" }),
|
|
30539
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-slate-600", children: rec.solution })
|
|
30540
|
-
] })
|
|
30541
|
-
] }),
|
|
30542
|
-
rec.analogy && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 p-3 bg-blue-50 rounded border-l-4 border-blue-400", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-blue-800 italic", children: rec.analogy }) })
|
|
30543
|
-
] })
|
|
30544
|
-
] })
|
|
30545
|
-
},
|
|
30546
|
-
rec.id
|
|
30547
|
-
))) || /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-center py-8", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-500", children: "No specific recommendations available. Your current security posture shows good practices." }) }) })
|
|
30548
|
-
] }),
|
|
30549
|
-
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
30550
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center space-x-3", children: [
|
|
30551
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-green-600 rounded-lg flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white text-lg", children: "✓" }) }),
|
|
30552
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30553
|
-
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-2xl font-bold text-slate-900", children: "Proposed Next Steps" }),
|
|
30554
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-600", children: "How to leverage these insights for your organization" })
|
|
30555
|
-
] })
|
|
30556
|
-
] }),
|
|
30557
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
30558
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-6", children: [
|
|
30559
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900 mb-4", children: "Immediate Actions" }),
|
|
30560
|
-
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "space-y-3 text-slate-700", children: [
|
|
30561
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30562
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-blue-600 mt-1.5 w-1.5 h-1.5 rounded-full bg-blue-600 flex-shrink-0" }),
|
|
30563
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Implement the highest priority recommendations identified in this assessment" })
|
|
30564
|
-
] }),
|
|
30565
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30566
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-blue-600 mt-1.5 w-1.5 h-1.5 rounded-full bg-blue-600 flex-shrink-0" }),
|
|
30567
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Schedule a cybersecurity strategy session to discuss these findings in detail" })
|
|
30568
|
-
] }),
|
|
30569
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30570
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-blue-600 mt-1.5 w-1.5 h-1.5 rounded-full bg-blue-600 flex-shrink-0" }),
|
|
30571
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Begin conversations with insurance providers about current coverage needs" })
|
|
30572
|
-
] })
|
|
30573
|
-
] })
|
|
30574
|
-
] }),
|
|
30575
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [
|
|
30576
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-slate-50 border border-slate-200 rounded-lg p-6", children: [
|
|
30577
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900 mb-4", children: "Insurance Planning" }),
|
|
30578
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-700 mb-4", children: "Use this score to have informed conversations with insurance providers and understand your options in the marketplace." }),
|
|
30579
|
-
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "space-y-2 text-slate-700", children: [
|
|
30580
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30581
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-500 mt-1.5 w-1.5 h-1.5 rounded-full bg-slate-500 flex-shrink-0" }),
|
|
30582
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Shop for competitive quotes" })
|
|
30583
|
-
] }),
|
|
30584
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30585
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-500 mt-1.5 w-1.5 h-1.5 rounded-full bg-slate-500 flex-shrink-0" }),
|
|
30586
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Understand coverage requirements" })
|
|
30587
|
-
] }),
|
|
30588
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30589
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-500 mt-1.5 w-1.5 h-1.5 rounded-full bg-slate-500 flex-shrink-0" }),
|
|
30590
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Review existing policy terms" })
|
|
30591
|
-
] })
|
|
30592
|
-
] })
|
|
30593
|
-
] }),
|
|
30594
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-slate-50 border border-slate-200 rounded-lg p-6", children: [
|
|
30595
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900 mb-4", children: "Security Improvement" }),
|
|
30596
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-700 mb-4", children: "Focus on the security areas that will have the most positive impact on your insurance posture and overall risk." }),
|
|
30597
|
-
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "space-y-2 text-slate-700", children: [
|
|
30598
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30599
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-500 mt-1.5 w-1.5 h-1.5 rounded-full bg-slate-500 flex-shrink-0" }),
|
|
30600
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Prioritize high-impact improvements" })
|
|
30601
|
-
] }),
|
|
30602
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30603
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-500 mt-1.5 w-1.5 h-1.5 rounded-full bg-slate-500 flex-shrink-0" }),
|
|
30604
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Document security controls" })
|
|
30605
|
-
] }),
|
|
30606
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-3", children: [
|
|
30607
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-500 mt-1.5 w-1.5 h-1.5 rounded-full bg-slate-500 flex-shrink-0" }),
|
|
30608
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Monitor progress regularly" })
|
|
30609
|
-
] })
|
|
30610
|
-
] })
|
|
30611
|
-
] })
|
|
30612
|
-
] })
|
|
30613
|
-
] })
|
|
30614
|
-
] }),
|
|
30615
30031
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: [
|
|
30616
30032
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center space-x-3", children: [
|
|
30617
30033
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-blue-600 rounded-lg flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-white text-lg", children: "?" }) }),
|
|
@@ -30660,7 +30076,7 @@ const InsuranceHealthScore = ({ reportData }) => {
|
|
|
30660
30076
|
] }),
|
|
30661
30077
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-yellow-50 border border-yellow-200 rounded-lg p-6", children: [
|
|
30662
30078
|
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-slate-900 mb-2", children: "Important Notes" }),
|
|
30663
|
-
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "text-slate-700
|
|
30079
|
+
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "text-slate-700", children: [
|
|
30664
30080
|
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30665
30081
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-yellow-600 mt-1", children: "•" }),
|
|
30666
30082
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "This assessment is based on industry standards and general insurance requirements" })
|
|
@@ -30677,61 +30093,53 @@ const InsuranceHealthScore = ({ reportData }) => {
|
|
|
30677
30093
|
] })
|
|
30678
30094
|
] })
|
|
30679
30095
|
] }),
|
|
30680
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30681
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
30682
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
30683
|
-
/* @__PURE__ */ jsxRuntime.jsxs("
|
|
30684
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30685
|
-
|
|
30096
|
+
/* @__PURE__ */ jsxRuntime.jsx("section", { className: "report-page space-y-6 border-t border-slate-200 pt-8", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6", children: [
|
|
30097
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30098
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-green-600 mb-3", children: "What This Report IS:" }),
|
|
30099
|
+
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "text-slate-700 space-y-2 text-sm", children: [
|
|
30100
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30101
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-600 mt-1", children: "✓" }),
|
|
30102
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A cybersecurity assessment tool based on industry standards" })
|
|
30103
|
+
] }),
|
|
30104
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30105
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-600 mt-1", children: "✓" }),
|
|
30106
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Educational guidance on insurance readiness factors" })
|
|
30107
|
+
] }),
|
|
30108
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30109
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-600 mt-1", children: "✓" }),
|
|
30110
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A starting point for security improvement discussions" })
|
|
30111
|
+
] }),
|
|
30112
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30113
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-green-600 mt-1", children: "✓" }),
|
|
30114
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Based on current cybersecurity best practices" })
|
|
30115
|
+
] })
|
|
30686
30116
|
] })
|
|
30687
30117
|
] }),
|
|
30688
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", {
|
|
30689
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30690
|
-
|
|
30691
|
-
/* @__PURE__ */ jsxRuntime.jsxs("
|
|
30692
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30693
|
-
|
|
30694
|
-
|
|
30695
|
-
|
|
30696
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30697
|
-
|
|
30698
|
-
|
|
30699
|
-
|
|
30700
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30701
|
-
|
|
30702
|
-
|
|
30703
|
-
|
|
30704
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30705
|
-
|
|
30706
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Based on current cybersecurity best practices" })
|
|
30707
|
-
] })
|
|
30708
|
-
] })
|
|
30709
|
-
] }),
|
|
30710
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30711
|
-
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-red-600 mb-3", children: "What This Report IS NOT:" }),
|
|
30712
|
-
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "text-slate-700 space-y-2 text-sm", children: [
|
|
30713
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30714
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30715
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A guarantee of insurance coverage or pricing" })
|
|
30716
|
-
] }),
|
|
30717
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30718
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30719
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A comprehensive security audit or penetration test" })
|
|
30720
|
-
] }),
|
|
30721
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30722
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30723
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Legal or financial advice" })
|
|
30724
|
-
] }),
|
|
30725
|
-
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30726
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30727
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A replacement for professional cybersecurity consultation" })
|
|
30728
|
-
] })
|
|
30118
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
30119
|
+
/* @__PURE__ */ jsxRuntime.jsx("h4", { className: "font-semibold text-red-600 mb-3", children: "What This Report IS NOT:" }),
|
|
30120
|
+
/* @__PURE__ */ jsxRuntime.jsxs("ul", { className: "text-slate-700 space-y-2 text-sm", children: [
|
|
30121
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30122
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30123
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A guarantee of insurance coverage or pricing" })
|
|
30124
|
+
] }),
|
|
30125
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30126
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30127
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A comprehensive security audit or penetration test" })
|
|
30128
|
+
] }),
|
|
30129
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30130
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30131
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "Legal or financial advice" })
|
|
30132
|
+
] }),
|
|
30133
|
+
/* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-start space-x-2", children: [
|
|
30134
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-red-600 mt-1", children: "✗" }),
|
|
30135
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: "A replacement for professional cybersecurity consultation" })
|
|
30729
30136
|
] })
|
|
30730
30137
|
] })
|
|
30731
30138
|
] })
|
|
30732
|
-
] })
|
|
30139
|
+
] }) })
|
|
30733
30140
|
] });
|
|
30734
30141
|
};
|
|
30142
|
+
const Warning = ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-center text-orange-600 text-lg", children });
|
|
30735
30143
|
const ReportBuilder = ({
|
|
30736
30144
|
clientData,
|
|
30737
30145
|
assessmentData,
|
|
@@ -30749,12 +30157,18 @@ const ReportBuilder = ({
|
|
|
30749
30157
|
const securityAssessment = assessmentData.securityAssessments;
|
|
30750
30158
|
const insuranceHealthData = assessmentData.insuranceAssessment;
|
|
30751
30159
|
const financialSimulationData = simulationData;
|
|
30160
|
+
const recommendationResponse = () => {
|
|
30161
|
+
const items = [
|
|
30162
|
+
showFinancialImpact && "financial impact modeling",
|
|
30163
|
+
showInsuranceHealthScore && "insurance readiness evaluations",
|
|
30164
|
+
showBreachLikelihood && "breach likelihood analysis"
|
|
30165
|
+
].filter(Boolean);
|
|
30166
|
+
if (items.length === 0) return "";
|
|
30167
|
+
if (items.length === 1) return items[0];
|
|
30168
|
+
if (items.length === 2) return `${items[0]} and ${items[1]}`;
|
|
30169
|
+
return `${items.slice(0, -1).join(", ")}, and ${items[items.length - 1]}`;
|
|
30170
|
+
};
|
|
30752
30171
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
30753
|
-
!clientData.id && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-4xl mx-auto bg-white p-8 flex items-center justify-center min-h-[600px]", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [
|
|
30754
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-16 h-16 bg-slate-100 rounded-full flex items-center justify-center mx-auto", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.FileText, { className: "w-8 h-8 text-slate-400" }) }),
|
|
30755
|
-
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-xl font-semibold text-slate-700", children: "Please Select a Client" }),
|
|
30756
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-slate-500 max-w-md", children: "Choose a client from the dropdown above to generate and preview their cyber financial impact analysis report." })
|
|
30757
|
-
] }) }),
|
|
30758
30172
|
/* @__PURE__ */ jsxRuntime.jsx("nav", { children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "report-toc max-w-4xl mx-auto bg-white p-4 flex space-x-4 overflow-x-auto", children: !!(templateArray.length > 1) && templateArray.map((item) => {
|
|
30759
30173
|
return /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
30760
30174
|
"a",
|
|
@@ -30799,7 +30213,7 @@ const ReportBuilder = ({
|
|
|
30799
30213
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-slate-900", children: (/* @__PURE__ */ new Date()).toLocaleDateString() })
|
|
30800
30214
|
] })
|
|
30801
30215
|
] }),
|
|
30802
|
-
showFinancialImpact && /* @__PURE__ */ jsxRuntime.jsx(
|
|
30216
|
+
showFinancialImpact && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: financialSimulationData && Object.keys(financialSimulationData).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
30803
30217
|
FinancialImpact,
|
|
30804
30218
|
{
|
|
30805
30219
|
reportData: {
|
|
@@ -30808,22 +30222,26 @@ const ReportBuilder = ({
|
|
|
30808
30222
|
mspInfo
|
|
30809
30223
|
}
|
|
30810
30224
|
}
|
|
30811
|
-
),
|
|
30812
|
-
showBreachLikelihood && /* @__PURE__ */ jsxRuntime.jsx(
|
|
30225
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(Warning, { children: "We can't find any financial impact data, did you run an assessment?" }) }),
|
|
30226
|
+
showBreachLikelihood && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: securityAssessment && Object.keys(securityAssessment).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
30813
30227
|
BreachLikelihood,
|
|
30814
30228
|
{
|
|
30815
30229
|
reportData: { clientData, securityAssessment, mspInfo }
|
|
30816
30230
|
}
|
|
30817
|
-
),
|
|
30818
|
-
showInsuranceHealthScore && /* @__PURE__ */ jsxRuntime.jsx(
|
|
30231
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(Warning, { children: "We can't find breach likelihood assessment data, did you run one??" }) }),
|
|
30232
|
+
showInsuranceHealthScore && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: insuranceHealthData && Object.keys(insuranceHealthData).length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
30819
30233
|
InsuranceHealthScore,
|
|
30820
30234
|
{
|
|
30821
30235
|
reportData: { clientData, insuranceHealthData, mspInfo }
|
|
30822
30236
|
}
|
|
30823
|
-
),
|
|
30237
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(Warning, { children: "We can't find an insurance assessment. Are you sure you ran this assessment?" }) }),
|
|
30824
30238
|
/* @__PURE__ */ jsxRuntime.jsxs("footer", { className: "report-page text-center pt-8 border-t border-slate-200", children: [
|
|
30825
30239
|
/* @__PURE__ */ jsxRuntime.jsx("h4", { children: "Professional Recommendation" }),
|
|
30826
|
-
/* @__PURE__ */ jsxRuntime.
|
|
30240
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-slate-500", children: [
|
|
30241
|
+
"This assessment uses ",
|
|
30242
|
+
recommendationResponse(),
|
|
30243
|
+
" to provide a complete view of your organization's cybersecurity risk profile."
|
|
30244
|
+
] }),
|
|
30827
30245
|
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-slate-400 mt-2", children: [
|
|
30828
30246
|
"Generated by",
|
|
30829
30247
|
" ",
|