@gnome-ui/react 1.50.0 → 1.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/dist/components/AffectedPackage/AffectedPackage.cjs +2 -0
  2. package/dist/components/AffectedPackage/AffectedPackage.cjs.map +1 -0
  3. package/dist/components/AffectedPackage/AffectedPackage.d.ts +20 -0
  4. package/dist/components/AffectedPackage/AffectedPackage.js +61 -0
  5. package/dist/components/AffectedPackage/AffectedPackage.js.map +1 -0
  6. package/dist/components/AffectedPackage/AffectedPackage.module.css.cjs +2 -0
  7. package/dist/components/AffectedPackage/AffectedPackage.module.css.cjs.map +1 -0
  8. package/dist/components/AffectedPackage/AffectedPackage.module.css.js +14 -0
  9. package/dist/components/AffectedPackage/AffectedPackage.module.css.js.map +1 -0
  10. package/dist/components/AffectedPackage/index.d.ts +4 -0
  11. package/dist/components/AffectedPackage/package.cjs +2 -0
  12. package/dist/components/AffectedPackage/package.cjs.map +1 -0
  13. package/dist/components/AffectedPackage/package.d.ts +8 -0
  14. package/dist/components/AffectedPackage/package.js +12 -0
  15. package/dist/components/AffectedPackage/package.js.map +1 -0
  16. package/dist/components/AffectedPackage.cjs +1 -0
  17. package/dist/components/AffectedPackage.d.ts +2 -0
  18. package/dist/components/AffectedPackage.js +3 -0
  19. package/dist/components/CveIdentifier/CveIdentifier.cjs +2 -0
  20. package/dist/components/CveIdentifier/CveIdentifier.cjs.map +1 -0
  21. package/dist/components/CveIdentifier/CveIdentifier.d.ts +22 -0
  22. package/dist/components/CveIdentifier/CveIdentifier.js +33 -0
  23. package/dist/components/CveIdentifier/CveIdentifier.js.map +1 -0
  24. package/dist/components/CveIdentifier/CveIdentifier.module.css.cjs +2 -0
  25. package/dist/components/CveIdentifier/CveIdentifier.module.css.cjs.map +1 -0
  26. package/dist/components/CveIdentifier/CveIdentifier.module.css.js +8 -0
  27. package/dist/components/CveIdentifier/CveIdentifier.module.css.js.map +1 -0
  28. package/dist/components/CveIdentifier/cve.cjs +2 -0
  29. package/dist/components/CveIdentifier/cve.cjs.map +1 -0
  30. package/dist/components/CveIdentifier/cve.d.ts +6 -0
  31. package/dist/components/CveIdentifier/cve.js +20 -0
  32. package/dist/components/CveIdentifier/cve.js.map +1 -0
  33. package/dist/components/CveIdentifier/index.d.ts +4 -0
  34. package/dist/components/CveIdentifier.cjs +1 -0
  35. package/dist/components/CveIdentifier.d.ts +2 -0
  36. package/dist/components/CveIdentifier.js +3 -0
  37. package/dist/components/CvssScore/CvssScore.cjs +2 -0
  38. package/dist/components/CvssScore/CvssScore.cjs.map +1 -0
  39. package/dist/components/CvssScore/CvssScore.d.ts +20 -0
  40. package/dist/components/CvssScore/CvssScore.js +33 -0
  41. package/dist/components/CvssScore/CvssScore.js.map +1 -0
  42. package/dist/components/CvssScore/CvssScore.module.css.cjs +2 -0
  43. package/dist/components/CvssScore/CvssScore.module.css.cjs.map +1 -0
  44. package/dist/components/CvssScore/CvssScore.module.css.js +15 -0
  45. package/dist/components/CvssScore/CvssScore.module.css.js.map +1 -0
  46. package/dist/components/CvssScore/cvss.cjs +2 -0
  47. package/dist/components/CvssScore/cvss.cjs.map +1 -0
  48. package/dist/components/CvssScore/cvss.d.ts +7 -0
  49. package/dist/components/CvssScore/cvss.js +16 -0
  50. package/dist/components/CvssScore/cvss.js.map +1 -0
  51. package/dist/components/CvssScore/index.d.ts +4 -0
  52. package/dist/components/CvssScore.cjs +1 -0
  53. package/dist/components/CvssScore.d.ts +2 -0
  54. package/dist/components/CvssScore.js +3 -0
  55. package/dist/components/CvssVector/CvssVector.cjs +2 -0
  56. package/dist/components/CvssVector/CvssVector.cjs.map +1 -0
  57. package/dist/components/CvssVector/CvssVector.d.ts +13 -0
  58. package/dist/components/CvssVector/CvssVector.js +44 -0
  59. package/dist/components/CvssVector/CvssVector.js.map +1 -0
  60. package/dist/components/CvssVector/CvssVector.module.css.cjs +2 -0
  61. package/dist/components/CvssVector/CvssVector.module.css.cjs.map +1 -0
  62. package/dist/components/CvssVector/CvssVector.module.css.js +13 -0
  63. package/dist/components/CvssVector/CvssVector.module.css.js.map +1 -0
  64. package/dist/components/CvssVector/index.d.ts +4 -0
  65. package/dist/components/CvssVector/vector.cjs +2 -0
  66. package/dist/components/CvssVector/vector.cjs.map +1 -0
  67. package/dist/components/CvssVector/vector.d.ts +21 -0
  68. package/dist/components/CvssVector/vector.js +71 -0
  69. package/dist/components/CvssVector/vector.js.map +1 -0
  70. package/dist/components/CvssVector.cjs +1 -0
  71. package/dist/components/CvssVector.d.ts +2 -0
  72. package/dist/components/CvssVector.js +3 -0
  73. package/dist/components/CweIdentifier/CweIdentifier.cjs +2 -0
  74. package/dist/components/CweIdentifier/CweIdentifier.cjs.map +1 -0
  75. package/dist/components/CweIdentifier/CweIdentifier.d.ts +22 -0
  76. package/dist/components/CweIdentifier/CweIdentifier.js +33 -0
  77. package/dist/components/CweIdentifier/CweIdentifier.js.map +1 -0
  78. package/dist/components/CweIdentifier/CweIdentifier.module.css.cjs +2 -0
  79. package/dist/components/CweIdentifier/CweIdentifier.module.css.cjs.map +1 -0
  80. package/dist/components/CweIdentifier/CweIdentifier.module.css.js +8 -0
  81. package/dist/components/CweIdentifier/CweIdentifier.module.css.js.map +1 -0
  82. package/dist/components/CweIdentifier/cwe.cjs +2 -0
  83. package/dist/components/CweIdentifier/cwe.cjs.map +1 -0
  84. package/dist/components/CweIdentifier/cwe.d.ts +6 -0
  85. package/dist/components/CweIdentifier/cwe.js +21 -0
  86. package/dist/components/CweIdentifier/cwe.js.map +1 -0
  87. package/dist/components/CweIdentifier/index.d.ts +4 -0
  88. package/dist/components/CweIdentifier.cjs +1 -0
  89. package/dist/components/CweIdentifier.d.ts +2 -0
  90. package/dist/components/CweIdentifier.js +3 -0
  91. package/dist/components/SecurityMetric/SecurityMetric.cjs +2 -0
  92. package/dist/components/SecurityMetric/SecurityMetric.cjs.map +1 -0
  93. package/dist/components/SecurityMetric/SecurityMetric.d.ts +21 -0
  94. package/dist/components/SecurityMetric/SecurityMetric.js +43 -0
  95. package/dist/components/SecurityMetric/SecurityMetric.js.map +1 -0
  96. package/dist/components/SecurityMetric/SecurityMetric.module.css.cjs +2 -0
  97. package/dist/components/SecurityMetric/SecurityMetric.module.css.cjs.map +1 -0
  98. package/dist/components/SecurityMetric/SecurityMetric.module.css.js +22 -0
  99. package/dist/components/SecurityMetric/SecurityMetric.module.css.js.map +1 -0
  100. package/dist/components/SecurityMetric/index.d.ts +2 -0
  101. package/dist/components/SecurityMetric.cjs +1 -0
  102. package/dist/components/SecurityMetric.d.ts +2 -0
  103. package/dist/components/SecurityMetric.js +2 -0
  104. package/dist/components/SeverityBadge/SeverityBadge.cjs +2 -0
  105. package/dist/components/SeverityBadge/SeverityBadge.cjs.map +1 -0
  106. package/dist/components/SeverityBadge/SeverityBadge.d.ts +18 -0
  107. package/dist/components/SeverityBadge/SeverityBadge.js +22 -0
  108. package/dist/components/SeverityBadge/SeverityBadge.js.map +1 -0
  109. package/dist/components/SeverityBadge/SeverityBadge.module.css.cjs +2 -0
  110. package/dist/components/SeverityBadge/SeverityBadge.module.css.cjs.map +1 -0
  111. package/dist/components/SeverityBadge/SeverityBadge.module.css.js +13 -0
  112. package/dist/components/SeverityBadge/SeverityBadge.module.css.js.map +1 -0
  113. package/dist/components/SeverityBadge/index.d.ts +4 -0
  114. package/dist/components/SeverityBadge/severity.cjs +2 -0
  115. package/dist/components/SeverityBadge/severity.cjs.map +1 -0
  116. package/dist/components/SeverityBadge/severity.d.ts +4 -0
  117. package/dist/components/SeverityBadge/severity.js +27 -0
  118. package/dist/components/SeverityBadge/severity.js.map +1 -0
  119. package/dist/components/SeverityBadge.cjs +1 -0
  120. package/dist/components/SeverityBadge.d.ts +2 -0
  121. package/dist/components/SeverityBadge.js +3 -0
  122. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.cjs +2 -0
  123. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.cjs.map +1 -0
  124. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.d.ts +30 -0
  125. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.js +76 -0
  126. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.js.map +1 -0
  127. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.module.css.cjs +2 -0
  128. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.module.css.cjs.map +1 -0
  129. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.module.css.js +21 -0
  130. package/dist/components/VulnerabilityFinding/VulnerabilityFinding.module.css.js.map +1 -0
  131. package/dist/components/VulnerabilityFinding/finding.cjs +2 -0
  132. package/dist/components/VulnerabilityFinding/finding.cjs.map +1 -0
  133. package/dist/components/VulnerabilityFinding/finding.d.ts +4 -0
  134. package/dist/components/VulnerabilityFinding/finding.js +20 -0
  135. package/dist/components/VulnerabilityFinding/finding.js.map +1 -0
  136. package/dist/components/VulnerabilityFinding/index.d.ts +4 -0
  137. package/dist/components/VulnerabilityFinding.cjs +1 -0
  138. package/dist/components/VulnerabilityFinding.d.ts +2 -0
  139. package/dist/components/VulnerabilityFinding.js +3 -0
  140. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.cjs +2 -0
  141. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.cjs.map +1 -0
  142. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.d.ts +18 -0
  143. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.js +57 -0
  144. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.js.map +1 -0
  145. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.module.css.cjs +2 -0
  146. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.module.css.cjs.map +1 -0
  147. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.module.css.js +19 -0
  148. package/dist/components/VulnerabilitySummary/VulnerabilitySummary.module.css.js.map +1 -0
  149. package/dist/components/VulnerabilitySummary/index.d.ts +4 -0
  150. package/dist/components/VulnerabilitySummary/summary.cjs +2 -0
  151. package/dist/components/VulnerabilitySummary/summary.cjs.map +1 -0
  152. package/dist/components/VulnerabilitySummary/summary.d.ts +8 -0
  153. package/dist/components/VulnerabilitySummary/summary.js +15 -0
  154. package/dist/components/VulnerabilitySummary/summary.js.map +1 -0
  155. package/dist/components/VulnerabilitySummary.cjs +1 -0
  156. package/dist/components/VulnerabilitySummary.d.ts +2 -0
  157. package/dist/components/VulnerabilitySummary.js +3 -0
  158. package/dist/index.cjs +1 -1
  159. package/dist/index.d.ts +18 -0
  160. package/dist/index.js +113 -96
  161. package/dist/style.css +1 -1
  162. package/package.json +51 -1
@@ -0,0 +1,18 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { VulnerabilitySeverity } from './severity';
3
+ export interface SeverityBadgeProps extends HTMLAttributes<HTMLSpanElement> {
4
+ /**
5
+ * Vulnerability severity to display.
6
+ *
7
+ * `minimal` is included for external scanner compatibility, such as
8
+ * Google Artifact Registry / Grafeas. CVSS qualitative ratings still map
9
+ * to the official `none`, `low`, `medium`, `high`, and `critical` levels.
10
+ */
11
+ severity: VulnerabilitySeverity;
12
+ /** Overrides the default human-readable label. */
13
+ label?: string;
14
+ }
15
+ /**
16
+ * Pill-shaped severity label for vulnerability and security report surfaces.
17
+ */
18
+ export declare const SeverityBadge: ({ severity, label, className, "aria-label": ariaLabel, ...props }: SeverityBadgeProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,22 @@
1
+ import e from "./SeverityBadge.module.css.js";
2
+ import { VULNERABILITY_SEVERITY_LABELS as t } from "./severity.js";
3
+ import { jsx as n } from "react/jsx-runtime";
4
+ //#region src/components/SeverityBadge/SeverityBadge.tsx
5
+ var r = ({ severity: r, label: i, className: a, "aria-label": o, ...s }) => {
6
+ let c = i ?? t[r];
7
+ return /* @__PURE__ */ n("span", {
8
+ "aria-label": o ?? `Severity: ${c}`,
9
+ className: [
10
+ e.badge,
11
+ e[r],
12
+ a
13
+ ].filter(Boolean).join(" "),
14
+ "data-severity": r,
15
+ ...s,
16
+ children: c
17
+ });
18
+ };
19
+ //#endregion
20
+ export { r as SeverityBadge };
21
+
22
+ //# sourceMappingURL=SeverityBadge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeverityBadge.js","names":[],"sources":["../../../src/components/SeverityBadge/SeverityBadge.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\n\nimport styles from './SeverityBadge.module.css';\nimport { VULNERABILITY_SEVERITY_LABELS, type VulnerabilitySeverity } from './severity';\n\nexport interface SeverityBadgeProps extends HTMLAttributes<HTMLSpanElement> {\n /**\n * Vulnerability severity to display.\n *\n * `minimal` is included for external scanner compatibility, such as\n * Google Artifact Registry / Grafeas. CVSS qualitative ratings still map\n * to the official `none`, `low`, `medium`, `high`, and `critical` levels.\n */\n severity: VulnerabilitySeverity;\n /** Overrides the default human-readable label. */\n label?: string;\n}\n\n/**\n * Pill-shaped severity label for vulnerability and security report surfaces.\n */\nexport const SeverityBadge = ({\n severity,\n label,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: SeverityBadgeProps) => {\n const displayLabel = label ?? VULNERABILITY_SEVERITY_LABELS[severity];\n\n return (\n <span\n aria-label={ariaLabel ?? `Severity: ${displayLabel}`}\n className={[styles.badge, styles[severity], className].filter(Boolean).join(' ')}\n data-severity={severity}\n {...props}\n >\n {displayLabel}\n </span>\n );\n};\n"],"mappings":";;;;AAqBA,IAAa,KAAiB,EAC5B,aACA,UACA,cACA,cAAc,GACd,GAAG,QACqB;CACxB,IAAM,IAAe,KAAS,EAA8B;CAE5D,OACE,kBAAC,QAAD;EACE,cAAY,KAAa,aAAa;EACtC,WAAW;GAAC,EAAO;GAAO,EAAO;GAAW;EAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;EAC/E,iBAAe;EACf,GAAI;YAEH;CACG,CAAA;AAEV"}
@@ -0,0 +1,2 @@
1
+ var e={badge:`_badge_1wo0e_3`,none:`_none_1wo0e_18`,minimal:`_minimal_1wo0e_23`,low:`_low_1wo0e_28`,medium:`_medium_1wo0e_33`,high:`_high_1wo0e_38`,critical:`_critical_1wo0e_43`};exports.default=e;
2
+ //# sourceMappingURL=SeverityBadge.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeverityBadge.module.css.cjs","names":[],"sources":["../../../src/components/SeverityBadge/SeverityBadge.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.badge {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n padding: 2px 8px;\n border-radius: var(--gnome-radius-pill, 9999px);\n font-family: var(--gnome-font-family);\n font-size: 0.6875rem;\n font-weight: 600;\n line-height: 1.4;\n white-space: nowrap;\n}\n\n/* ─── Severity levels ─────────────────────────────────────────────────────── */\n\n.none {\n background-color: var(--gnome-hover-overlay, rgb(0 0 0 / 0.08));\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n}\n\n.minimal {\n background-color: var(--gnome-blue-1, #99c1f1);\n color: rgb(0 0 0 / 0.8);\n}\n\n.low {\n background-color: var(--gnome-blue-3, #3584e4);\n color: #fff;\n}\n\n.medium {\n background-color: var(--gnome-warning-bg-color, #f6d32d);\n color: var(--gnome-warning-fg-color, rgb(0 0 0 / 0.8));\n}\n\n.high {\n background-color: var(--gnome-orange-3, #ff7800);\n color: rgb(0 0 0 / 0.8);\n}\n\n.critical {\n background-color: var(--gnome-error-bg-color, #e01b24);\n color: var(--gnome-error-fg-color, #fff);\n}\n\n@media (prefers-color-scheme: dark) {\n .none {\n background-color: var(--gnome-dark-2, #5e5c64);\n color: rgb(255 255 255 / 0.87);\n }\n\n .minimal {\n background-color: var(--gnome-blue-5, #1a5fb4);\n color: #fff;\n }\n\n .high {\n color: #fff;\n }\n}\n"],"mappings":""}
@@ -0,0 +1,13 @@
1
+ var e = {
2
+ badge: "_badge_1wo0e_3",
3
+ none: "_none_1wo0e_18",
4
+ minimal: "_minimal_1wo0e_23",
5
+ low: "_low_1wo0e_28",
6
+ medium: "_medium_1wo0e_33",
7
+ high: "_high_1wo0e_38",
8
+ critical: "_critical_1wo0e_43"
9
+ };
10
+ //#endregion
11
+ export { e as default };
12
+
13
+ //# sourceMappingURL=SeverityBadge.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SeverityBadge.module.css.js","names":[],"sources":["../../../src/components/SeverityBadge/SeverityBadge.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.badge {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n padding: 2px 8px;\n border-radius: var(--gnome-radius-pill, 9999px);\n font-family: var(--gnome-font-family);\n font-size: 0.6875rem;\n font-weight: 600;\n line-height: 1.4;\n white-space: nowrap;\n}\n\n/* ─── Severity levels ─────────────────────────────────────────────────────── */\n\n.none {\n background-color: var(--gnome-hover-overlay, rgb(0 0 0 / 0.08));\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n}\n\n.minimal {\n background-color: var(--gnome-blue-1, #99c1f1);\n color: rgb(0 0 0 / 0.8);\n}\n\n.low {\n background-color: var(--gnome-blue-3, #3584e4);\n color: #fff;\n}\n\n.medium {\n background-color: var(--gnome-warning-bg-color, #f6d32d);\n color: var(--gnome-warning-fg-color, rgb(0 0 0 / 0.8));\n}\n\n.high {\n background-color: var(--gnome-orange-3, #ff7800);\n color: rgb(0 0 0 / 0.8);\n}\n\n.critical {\n background-color: var(--gnome-error-bg-color, #e01b24);\n color: var(--gnome-error-fg-color, #fff);\n}\n\n@media (prefers-color-scheme: dark) {\n .none {\n background-color: var(--gnome-dark-2, #5e5c64);\n color: rgb(255 255 255 / 0.87);\n }\n\n .minimal {\n background-color: var(--gnome-blue-5, #1a5fb4);\n color: #fff;\n }\n\n .high {\n color: #fff;\n }\n}\n"],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type { SeverityBadgeProps } from './SeverityBadge';
2
+ export { SeverityBadge } from './SeverityBadge';
3
+ export type { VulnerabilitySeverity } from './severity';
4
+ export { VULNERABILITY_SEVERITIES, VULNERABILITY_SEVERITY_LABELS, VULNERABILITY_SEVERITY_RANK, } from './severity';
@@ -0,0 +1,2 @@
1
+ var e=[`none`,`minimal`,`low`,`medium`,`high`,`critical`],t={none:`None`,minimal:`Minimal`,low:`Low`,medium:`Medium`,high:`High`,critical:`Critical`},n={none:0,minimal:1,low:2,medium:3,high:4,critical:5};exports.VULNERABILITY_SEVERITIES=e,exports.VULNERABILITY_SEVERITY_LABELS=t,exports.VULNERABILITY_SEVERITY_RANK=n;
2
+ //# sourceMappingURL=severity.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"severity.cjs","names":[],"sources":["../../../src/components/SeverityBadge/severity.ts"],"sourcesContent":["export type VulnerabilitySeverity = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'critical';\n\nexport const VULNERABILITY_SEVERITIES: readonly VulnerabilitySeverity[] = [\n 'none',\n 'minimal',\n 'low',\n 'medium',\n 'high',\n 'critical',\n];\n\nexport const VULNERABILITY_SEVERITY_LABELS: Record<VulnerabilitySeverity, string> = {\n none: 'None',\n minimal: 'Minimal',\n low: 'Low',\n medium: 'Medium',\n high: 'High',\n critical: 'Critical',\n};\n\nexport const VULNERABILITY_SEVERITY_RANK: Record<VulnerabilitySeverity, number> = {\n none: 0,\n minimal: 1,\n low: 2,\n medium: 3,\n high: 4,\n critical: 5,\n};\n"],"mappings":"AAEA,IAAa,EAA6D,CACxE,OACA,UACA,MACA,SACA,OACA,UACF,EAEa,EAAuE,CAClF,KAAM,OACN,QAAS,UACT,IAAK,MACL,OAAQ,SACR,KAAM,OACN,SAAU,UACZ,EAEa,EAAqE,CAChF,KAAM,EACN,QAAS,EACT,IAAK,EACL,OAAQ,EACR,KAAM,EACN,SAAU,CACZ"}
@@ -0,0 +1,4 @@
1
+ export type VulnerabilitySeverity = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'critical';
2
+ export declare const VULNERABILITY_SEVERITIES: readonly VulnerabilitySeverity[];
3
+ export declare const VULNERABILITY_SEVERITY_LABELS: Record<VulnerabilitySeverity, string>;
4
+ export declare const VULNERABILITY_SEVERITY_RANK: Record<VulnerabilitySeverity, number>;
@@ -0,0 +1,27 @@
1
+ //#region src/components/SeverityBadge/severity.ts
2
+ var e = [
3
+ "none",
4
+ "minimal",
5
+ "low",
6
+ "medium",
7
+ "high",
8
+ "critical"
9
+ ], t = {
10
+ none: "None",
11
+ minimal: "Minimal",
12
+ low: "Low",
13
+ medium: "Medium",
14
+ high: "High",
15
+ critical: "Critical"
16
+ }, n = {
17
+ none: 0,
18
+ minimal: 1,
19
+ low: 2,
20
+ medium: 3,
21
+ high: 4,
22
+ critical: 5
23
+ };
24
+ //#endregion
25
+ export { e as VULNERABILITY_SEVERITIES, t as VULNERABILITY_SEVERITY_LABELS, n as VULNERABILITY_SEVERITY_RANK };
26
+
27
+ //# sourceMappingURL=severity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"severity.js","names":[],"sources":["../../../src/components/SeverityBadge/severity.ts"],"sourcesContent":["export type VulnerabilitySeverity = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'critical';\n\nexport const VULNERABILITY_SEVERITIES: readonly VulnerabilitySeverity[] = [\n 'none',\n 'minimal',\n 'low',\n 'medium',\n 'high',\n 'critical',\n];\n\nexport const VULNERABILITY_SEVERITY_LABELS: Record<VulnerabilitySeverity, string> = {\n none: 'None',\n minimal: 'Minimal',\n low: 'Low',\n medium: 'Medium',\n high: 'High',\n critical: 'Critical',\n};\n\nexport const VULNERABILITY_SEVERITY_RANK: Record<VulnerabilitySeverity, number> = {\n none: 0,\n minimal: 1,\n low: 2,\n medium: 3,\n high: 4,\n critical: 5,\n};\n"],"mappings":";AAEA,IAAa,IAA6D;CACxE;CACA;CACA;CACA;CACA;CACA;AACF,GAEa,IAAuE;CAClF,MAAM;CACN,SAAS;CACT,KAAK;CACL,QAAQ;CACR,MAAM;CACN,UAAU;AACZ,GAEa,IAAqE;CAChF,MAAM;CACN,SAAS;CACT,KAAK;CACL,QAAQ;CACR,MAAM;CACN,UAAU;AACZ"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./SeverityBadge/severity.cjs"),t=require("./SeverityBadge/SeverityBadge.cjs");exports.SeverityBadge=t.SeverityBadge,exports.VULNERABILITY_SEVERITIES=e.VULNERABILITY_SEVERITIES,exports.VULNERABILITY_SEVERITY_LABELS=e.VULNERABILITY_SEVERITY_LABELS,exports.VULNERABILITY_SEVERITY_RANK=e.VULNERABILITY_SEVERITY_RANK;
@@ -0,0 +1,2 @@
1
+ export * from './SeverityBadge/index'
2
+ export {}
@@ -0,0 +1,3 @@
1
+ import { VULNERABILITY_SEVERITIES as e, VULNERABILITY_SEVERITY_LABELS as t, VULNERABILITY_SEVERITY_RANK as n } from "./SeverityBadge/severity.js";
2
+ import { SeverityBadge as r } from "./SeverityBadge/SeverityBadge.js";
3
+ export { r as SeverityBadge, e as VULNERABILITY_SEVERITIES, t as VULNERABILITY_SEVERITY_LABELS, n as VULNERABILITY_SEVERITY_RANK };
@@ -0,0 +1,2 @@
1
+ const e=require("../CveIdentifier/CveIdentifier.cjs"),t=require("../SeverityBadge/SeverityBadge.cjs"),n=require("../CvssScore/CvssScore.cjs"),r=require("../StatusBadge/StatusBadge.cjs"),i=require("./finding.cjs"),a=require("./VulnerabilityFinding.module.css.cjs");let o=require("react/jsx-runtime");var s=e=>typeof e==`string`||typeof e==`number`,c=({heading:c,severity:l,cveId:u,cveSource:d,cvssScore:f,status:p=`open`,affected:m,fixedVersion:h,description:g,actions:_,className:v,"aria-label":y,...b})=>{let x=i.VULNERABILITY_FINDING_STATUS_LABELS[p],S=y??(s(c)?`${c}, ${l} severity, ${x}`:void 0);return(0,o.jsxs)(`article`,{...b,"aria-label":S,className:[a.default.finding,a.default[l],v].filter(Boolean).join(` `),"data-severity":l,"data-status":p,children:[(0,o.jsxs)(`div`,{className:a.default.header,children:[(0,o.jsxs)(`div`,{className:a.default.headingGroup,children:[(0,o.jsx)(`h3`,{className:a.default.heading,children:c}),(0,o.jsxs)(`div`,{className:a.default.badges,children:[(0,o.jsx)(t.SeverityBadge,{severity:l}),(0,o.jsx)(r.StatusBadge,{variant:i.VULNERABILITY_FINDING_STATUS_VARIANTS[p],children:x})]})]}),f===void 0?null:(0,o.jsx)(n.CvssScore,{score:f,severity:l,showSeverity:!1})]}),g?(0,o.jsx)(`p`,{className:a.default.description,children:g}):null,(0,o.jsxs)(`dl`,{className:a.default.meta,children:[u?(0,o.jsxs)(`div`,{className:a.default.metaItem,children:[(0,o.jsx)(`dt`,{children:`CVE`}),(0,o.jsx)(`dd`,{children:(0,o.jsx)(e.CveIdentifier,{cveId:u,source:d})})]}):null,m?(0,o.jsxs)(`div`,{className:a.default.metaItem,children:[(0,o.jsx)(`dt`,{children:`Affected`}),(0,o.jsx)(`dd`,{children:m})]}):null,h?(0,o.jsxs)(`div`,{className:a.default.metaItem,children:[(0,o.jsx)(`dt`,{children:`Fixed in`}),(0,o.jsx)(`dd`,{children:h})]}):null]}),_?(0,o.jsx)(`div`,{className:a.default.actions,children:_}):null]})};exports.VulnerabilityFinding=c;
2
+ //# sourceMappingURL=VulnerabilityFinding.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilityFinding.cjs","names":[],"sources":["../../../src/components/VulnerabilityFinding/VulnerabilityFinding.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { CveIdentifier, type CveLinkSource } from '../CveIdentifier';\nimport { CvssScore } from '../CvssScore';\nimport { SeverityBadge, type VulnerabilitySeverity } from '../SeverityBadge';\nimport { StatusBadge } from '../StatusBadge';\n\nimport {\n VULNERABILITY_FINDING_STATUS_LABELS,\n VULNERABILITY_FINDING_STATUS_VARIANTS,\n type VulnerabilityFindingStatus,\n} from './finding';\nimport styles from './VulnerabilityFinding.module.css';\n\nexport interface VulnerabilityFindingProps extends HTMLAttributes<HTMLElement> {\n /** Human-readable finding title. */\n heading: ReactNode;\n /** Severity from CVSS or an external scanner. */\n severity: VulnerabilitySeverity;\n /** Optional CVE identifier associated with the finding. */\n cveId?: string;\n /** Vulnerability database used when rendering the CVE link. Defaults to CVE.org. */\n cveSource?: CveLinkSource;\n /** Optional CVSS score displayed with the finding. */\n cvssScore?: number;\n /** Remediation workflow state. */\n status?: VulnerabilityFindingStatus;\n /** Optional scanner, dependency, image, host, or asset affected by the finding. */\n affected?: ReactNode;\n /** Optional fixed version or remediation target. */\n fixedVersion?: ReactNode;\n /** Short explanatory text. */\n description?: ReactNode;\n /** Optional trailing actions such as “View details” or “Create ticket”. */\n actions?: ReactNode;\n}\n\nconst isAccessibleText = (value: ReactNode): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\n/**\n * Report-friendly vulnerability finding summary.\n */\nexport const VulnerabilityFinding = ({\n heading,\n severity,\n cveId,\n cveSource,\n cvssScore,\n status = 'open',\n affected,\n fixedVersion,\n description,\n actions,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: VulnerabilityFindingProps) => {\n const statusLabel = VULNERABILITY_FINDING_STATUS_LABELS[status];\n const accessibleLabel =\n ariaLabel ??\n (isAccessibleText(heading) ? `${heading}, ${severity} severity, ${statusLabel}` : undefined);\n\n return (\n <article\n {...props}\n aria-label={accessibleLabel}\n className={[styles.finding, styles[severity], className].filter(Boolean).join(' ')}\n data-severity={severity}\n data-status={status}\n >\n <div className={styles.header}>\n <div className={styles.headingGroup}>\n <h3 className={styles.heading}>{heading}</h3>\n <div className={styles.badges}>\n <SeverityBadge severity={severity} />\n <StatusBadge variant={VULNERABILITY_FINDING_STATUS_VARIANTS[status]}>\n {statusLabel}\n </StatusBadge>\n </div>\n </div>\n {cvssScore !== undefined ? (\n <CvssScore score={cvssScore} severity={severity} showSeverity={false} />\n ) : null}\n </div>\n\n {description ? <p className={styles.description}>{description}</p> : null}\n\n <dl className={styles.meta}>\n {cveId ? (\n <div className={styles.metaItem}>\n <dt>CVE</dt>\n <dd>\n <CveIdentifier cveId={cveId} source={cveSource} />\n </dd>\n </div>\n ) : null}\n {affected ? (\n <div className={styles.metaItem}>\n <dt>Affected</dt>\n <dd>{affected}</dd>\n </div>\n ) : null}\n {fixedVersion ? (\n <div className={styles.metaItem}>\n <dt>Fixed in</dt>\n <dd>{fixedVersion}</dd>\n </div>\n ) : null}\n </dl>\n\n {actions ? <div className={styles.actions}>{actions}</div> : null}\n </article>\n );\n};\n"],"mappings":"2SAqCA,IAAM,EAAoB,GACxB,OAAO,GAAU,UAAY,OAAO,GAAU,SAKnC,GAAwB,CACnC,UACA,WACA,QACA,YACA,YACA,SAAS,OACT,WACA,eACA,cACA,UACA,YACA,aAAc,EACd,GAAG,KAC4B,CAC/B,IAAM,EAAc,EAAA,oCAAoC,GAClD,EACJ,IACC,EAAiB,CAAO,EAAI,GAAG,EAAQ,IAAI,EAAS,aAAa,IAAgB,IAAA,IAEpF,OACE,EAAA,EAAA,MAAC,UAAD,CACE,GAAI,EACJ,aAAY,EACZ,UAAW,CAAC,EAAA,QAAO,QAAS,EAAA,QAAO,GAAW,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EACjF,gBAAe,EACf,cAAa,WALf,EAOE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,gBAAvB,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,sBAAvB,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,QAAO,iBAAU,CAAY,CAAA,GAC5C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,gBAAvB,EACE,EAAA,EAAA,KAAC,EAAA,cAAD,CAAyB,UAAW,CAAA,GACpC,EAAA,EAAA,KAAC,EAAA,YAAD,CAAa,QAAS,EAAA,sCAAsC,YACzD,CACU,CAAA,CACV,GACF,IACJ,IAAc,IAAA,GAEX,MADF,EAAA,EAAA,KAAC,EAAA,UAAD,CAAW,MAAO,EAAqB,WAAU,aAAc,EAAQ,CAAA,CAEtE,IAEJ,GAAc,EAAA,EAAA,KAAC,IAAD,CAAG,UAAW,EAAA,QAAO,qBAAc,CAAe,CAAA,EAAI,MAErE,EAAA,EAAA,MAAC,KAAD,CAAI,UAAW,EAAA,QAAO,cAAtB,CACG,GACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,kBAAvB,EACE,EAAA,EAAA,KAAC,KAAD,CAAA,SAAI,KAAO,CAAA,GACX,EAAA,EAAA,KAAC,KAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAA,cAAD,CAAsB,QAAO,OAAQ,CAAY,CAAA,CAC/C,CAAA,CACD,IACH,KACH,GACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,kBAAvB,EACE,EAAA,EAAA,KAAC,KAAD,CAAA,SAAI,UAAY,CAAA,GAChB,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,CAAa,CAAA,CACf,IACH,KACH,GACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,kBAAvB,EACE,EAAA,EAAA,KAAC,KAAD,CAAA,SAAI,UAAY,CAAA,GAChB,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,CAAiB,CAAA,CACnB,IACH,IACF,IAEH,GAAU,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,QAAO,iBAAU,CAAa,CAAA,EAAI,IACtD,GAEb"}
@@ -0,0 +1,30 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ import { CveLinkSource } from '../CveIdentifier';
3
+ import { VulnerabilitySeverity } from '../SeverityBadge';
4
+ import { VulnerabilityFindingStatus } from './finding';
5
+ export interface VulnerabilityFindingProps extends HTMLAttributes<HTMLElement> {
6
+ /** Human-readable finding title. */
7
+ heading: ReactNode;
8
+ /** Severity from CVSS or an external scanner. */
9
+ severity: VulnerabilitySeverity;
10
+ /** Optional CVE identifier associated with the finding. */
11
+ cveId?: string;
12
+ /** Vulnerability database used when rendering the CVE link. Defaults to CVE.org. */
13
+ cveSource?: CveLinkSource;
14
+ /** Optional CVSS score displayed with the finding. */
15
+ cvssScore?: number;
16
+ /** Remediation workflow state. */
17
+ status?: VulnerabilityFindingStatus;
18
+ /** Optional scanner, dependency, image, host, or asset affected by the finding. */
19
+ affected?: ReactNode;
20
+ /** Optional fixed version or remediation target. */
21
+ fixedVersion?: ReactNode;
22
+ /** Short explanatory text. */
23
+ description?: ReactNode;
24
+ /** Optional trailing actions such as “View details” or “Create ticket”. */
25
+ actions?: ReactNode;
26
+ }
27
+ /**
28
+ * Report-friendly vulnerability finding summary.
29
+ */
30
+ export declare const VulnerabilityFinding: ({ heading, severity, cveId, cveSource, cvssScore, status, affected, fixedVersion, description, actions, className, "aria-label": ariaLabel, ...props }: VulnerabilityFindingProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,76 @@
1
+ import { CveIdentifier as e } from "../CveIdentifier/CveIdentifier.js";
2
+ import { SeverityBadge as t } from "../SeverityBadge/SeverityBadge.js";
3
+ import { CvssScore as n } from "../CvssScore/CvssScore.js";
4
+ import { StatusBadge as r } from "../StatusBadge/StatusBadge.js";
5
+ import { VULNERABILITY_FINDING_STATUS_LABELS as i, VULNERABILITY_FINDING_STATUS_VARIANTS as a } from "./finding.js";
6
+ import o from "./VulnerabilityFinding.module.css.js";
7
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
8
+ //#region src/components/VulnerabilityFinding/VulnerabilityFinding.tsx
9
+ var l = (e) => typeof e == "string" || typeof e == "number", u = ({ heading: u, severity: d, cveId: f, cveSource: p, cvssScore: m, status: h = "open", affected: g, fixedVersion: _, description: v, actions: y, className: b, "aria-label": x, ...S }) => {
10
+ let C = i[h], w = x ?? (l(u) ? `${u}, ${d} severity, ${C}` : void 0);
11
+ return /* @__PURE__ */ c("article", {
12
+ ...S,
13
+ "aria-label": w,
14
+ className: [
15
+ o.finding,
16
+ o[d],
17
+ b
18
+ ].filter(Boolean).join(" "),
19
+ "data-severity": d,
20
+ "data-status": h,
21
+ children: [
22
+ /* @__PURE__ */ c("div", {
23
+ className: o.header,
24
+ children: [/* @__PURE__ */ c("div", {
25
+ className: o.headingGroup,
26
+ children: [/* @__PURE__ */ s("h3", {
27
+ className: o.heading,
28
+ children: u
29
+ }), /* @__PURE__ */ c("div", {
30
+ className: o.badges,
31
+ children: [/* @__PURE__ */ s(t, { severity: d }), /* @__PURE__ */ s(r, {
32
+ variant: a[h],
33
+ children: C
34
+ })]
35
+ })]
36
+ }), m === void 0 ? null : /* @__PURE__ */ s(n, {
37
+ score: m,
38
+ severity: d,
39
+ showSeverity: !1
40
+ })]
41
+ }),
42
+ v ? /* @__PURE__ */ s("p", {
43
+ className: o.description,
44
+ children: v
45
+ }) : null,
46
+ /* @__PURE__ */ c("dl", {
47
+ className: o.meta,
48
+ children: [
49
+ f ? /* @__PURE__ */ c("div", {
50
+ className: o.metaItem,
51
+ children: [/* @__PURE__ */ s("dt", { children: "CVE" }), /* @__PURE__ */ s("dd", { children: /* @__PURE__ */ s(e, {
52
+ cveId: f,
53
+ source: p
54
+ }) })]
55
+ }) : null,
56
+ g ? /* @__PURE__ */ c("div", {
57
+ className: o.metaItem,
58
+ children: [/* @__PURE__ */ s("dt", { children: "Affected" }), /* @__PURE__ */ s("dd", { children: g })]
59
+ }) : null,
60
+ _ ? /* @__PURE__ */ c("div", {
61
+ className: o.metaItem,
62
+ children: [/* @__PURE__ */ s("dt", { children: "Fixed in" }), /* @__PURE__ */ s("dd", { children: _ })]
63
+ }) : null
64
+ ]
65
+ }),
66
+ y ? /* @__PURE__ */ s("div", {
67
+ className: o.actions,
68
+ children: y
69
+ }) : null
70
+ ]
71
+ });
72
+ };
73
+ //#endregion
74
+ export { u as VulnerabilityFinding };
75
+
76
+ //# sourceMappingURL=VulnerabilityFinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilityFinding.js","names":[],"sources":["../../../src/components/VulnerabilityFinding/VulnerabilityFinding.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { CveIdentifier, type CveLinkSource } from '../CveIdentifier';\nimport { CvssScore } from '../CvssScore';\nimport { SeverityBadge, type VulnerabilitySeverity } from '../SeverityBadge';\nimport { StatusBadge } from '../StatusBadge';\n\nimport {\n VULNERABILITY_FINDING_STATUS_LABELS,\n VULNERABILITY_FINDING_STATUS_VARIANTS,\n type VulnerabilityFindingStatus,\n} from './finding';\nimport styles from './VulnerabilityFinding.module.css';\n\nexport interface VulnerabilityFindingProps extends HTMLAttributes<HTMLElement> {\n /** Human-readable finding title. */\n heading: ReactNode;\n /** Severity from CVSS or an external scanner. */\n severity: VulnerabilitySeverity;\n /** Optional CVE identifier associated with the finding. */\n cveId?: string;\n /** Vulnerability database used when rendering the CVE link. Defaults to CVE.org. */\n cveSource?: CveLinkSource;\n /** Optional CVSS score displayed with the finding. */\n cvssScore?: number;\n /** Remediation workflow state. */\n status?: VulnerabilityFindingStatus;\n /** Optional scanner, dependency, image, host, or asset affected by the finding. */\n affected?: ReactNode;\n /** Optional fixed version or remediation target. */\n fixedVersion?: ReactNode;\n /** Short explanatory text. */\n description?: ReactNode;\n /** Optional trailing actions such as “View details” or “Create ticket”. */\n actions?: ReactNode;\n}\n\nconst isAccessibleText = (value: ReactNode): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\n/**\n * Report-friendly vulnerability finding summary.\n */\nexport const VulnerabilityFinding = ({\n heading,\n severity,\n cveId,\n cveSource,\n cvssScore,\n status = 'open',\n affected,\n fixedVersion,\n description,\n actions,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: VulnerabilityFindingProps) => {\n const statusLabel = VULNERABILITY_FINDING_STATUS_LABELS[status];\n const accessibleLabel =\n ariaLabel ??\n (isAccessibleText(heading) ? `${heading}, ${severity} severity, ${statusLabel}` : undefined);\n\n return (\n <article\n {...props}\n aria-label={accessibleLabel}\n className={[styles.finding, styles[severity], className].filter(Boolean).join(' ')}\n data-severity={severity}\n data-status={status}\n >\n <div className={styles.header}>\n <div className={styles.headingGroup}>\n <h3 className={styles.heading}>{heading}</h3>\n <div className={styles.badges}>\n <SeverityBadge severity={severity} />\n <StatusBadge variant={VULNERABILITY_FINDING_STATUS_VARIANTS[status]}>\n {statusLabel}\n </StatusBadge>\n </div>\n </div>\n {cvssScore !== undefined ? (\n <CvssScore score={cvssScore} severity={severity} showSeverity={false} />\n ) : null}\n </div>\n\n {description ? <p className={styles.description}>{description}</p> : null}\n\n <dl className={styles.meta}>\n {cveId ? (\n <div className={styles.metaItem}>\n <dt>CVE</dt>\n <dd>\n <CveIdentifier cveId={cveId} source={cveSource} />\n </dd>\n </div>\n ) : null}\n {affected ? (\n <div className={styles.metaItem}>\n <dt>Affected</dt>\n <dd>{affected}</dd>\n </div>\n ) : null}\n {fixedVersion ? (\n <div className={styles.metaItem}>\n <dt>Fixed in</dt>\n <dd>{fixedVersion}</dd>\n </div>\n ) : null}\n </dl>\n\n {actions ? <div className={styles.actions}>{actions}</div> : null}\n </article>\n );\n};\n"],"mappings":";;;;;;;;AAqCA,IAAM,KAAoB,MACxB,OAAO,KAAU,YAAY,OAAO,KAAU,UAKnC,KAAwB,EACnC,YACA,aACA,UACA,cACA,cACA,YAAS,QACT,aACA,iBACA,gBACA,YACA,cACA,cAAc,GACd,GAAG,QAC4B;CAC/B,IAAM,IAAc,EAAoC,IAClD,IACJ,MACC,EAAiB,CAAO,IAAI,GAAG,EAAQ,IAAI,EAAS,aAAa,MAAgB,KAAA;CAEpF,OACE,kBAAC,WAAD;EACE,GAAI;EACJ,cAAY;EACZ,WAAW;GAAC,EAAO;GAAS,EAAO;GAAW;EAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;EACjF,iBAAe;EACf,eAAa;YALf;GAOE,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,OAAD;KAAK,WAAW,EAAO;eAAvB,CACE,kBAAC,MAAD;MAAI,WAAW,EAAO;gBAAU;KAAY,CAAA,GAC5C,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,GAAD,EAAyB,YAAW,CAAA,GACpC,kBAAC,GAAD;OAAa,SAAS,EAAsC;iBACzD;MACU,CAAA,CACV;OACF;QACJ,MAAc,KAAA,IAEX,OADF,kBAAC,GAAD;KAAW,OAAO;KAAqB;KAAU,cAAc;IAAQ,CAAA,CAEtE;;GAEJ,IAAc,kBAAC,KAAD;IAAG,WAAW,EAAO;cAAc;GAAe,CAAA,IAAI;GAErE,kBAAC,MAAD;IAAI,WAAW,EAAO;cAAtB;KACG,IACC,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,MAAD,EAAA,UAAI,MAAO,CAAA,GACX,kBAAC,MAAD,EAAA,UACE,kBAAC,GAAD;OAAsB;OAAO,QAAQ;MAAY,CAAA,EAC/C,CAAA,CACD;UACH;KACH,IACC,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,MAAD,EAAA,UAAI,WAAY,CAAA,GAChB,kBAAC,MAAD,EAAA,UAAK,EAAa,CAAA,CACf;UACH;KACH,IACC,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,MAAD,EAAA,UAAI,WAAY,CAAA,GAChB,kBAAC,MAAD,EAAA,UAAK,EAAiB,CAAA,CACnB;UACH;IACF;;GAEH,IAAU,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAU;GAAa,CAAA,IAAI;EACtD;;AAEb"}
@@ -0,0 +1,2 @@
1
+ var e={finding:`_finding_aheyt_3`,header:`_header_aheyt_14`,headingGroup:`_headingGroup_aheyt_21`,heading:`_heading_aheyt_21`,badges:`_badges_aheyt_35`,description:`_description_aheyt_42`,meta:`_meta_aheyt_49`,metaItem:`_metaItem_aheyt_56`,actions:`_actions_aheyt_77`,none:`_none_aheyt_86`,minimal:`_minimal_aheyt_90`,low:`_low_aheyt_94`,medium:`_medium_aheyt_98`,high:`_high_aheyt_102`,critical:`_critical_aheyt_106`};exports.default=e;
2
+ //# sourceMappingURL=VulnerabilityFinding.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilityFinding.module.css.cjs","names":[],"sources":["../../../src/components/VulnerabilityFinding/VulnerabilityFinding.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.finding {\n display: grid;\n gap: var(--gnome-space-3, 12px);\n padding: var(--gnome-space-4, 16px);\n border: 1px solid var(--gnome-card-shade-color, rgb(0 0 0 / 0.07));\n border-left-width: 3px;\n border-radius: var(--gnome-radius-lg, 12px);\n background-color: var(--gnome-card-bg-color, #fff);\n color: var(--gnome-card-fg-color, rgb(0 0 0 / 0.8));\n}\n\n.header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--gnome-space-3, 12px);\n}\n\n.headingGroup {\n display: grid;\n gap: var(--gnome-space-2, 8px);\n min-width: 0;\n}\n\n.heading {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.3;\n}\n\n.badges {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--gnome-space-2, 8px);\n}\n\n.description {\n margin: 0;\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.6));\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.meta {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gnome-space-2, 8px) var(--gnome-space-4, 16px);\n margin: 0;\n}\n\n.metaItem {\n display: grid;\n gap: 2px;\n}\n\n.metaItem dt {\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.55));\n font-size: 0.6875rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n line-height: 1.2;\n text-transform: uppercase;\n}\n\n.metaItem dd {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n font-size: 0.875rem;\n line-height: 1.35;\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--gnome-space-2, 8px);\n}\n\n/* ─── Severity accents ────────────────────────────────────────────────────── */\n\n.none {\n border-left-color: var(--gnome-success-bg-color, #33d17a);\n}\n\n.minimal {\n border-left-color: var(--gnome-info-bg-color, #62a0ea);\n}\n\n.low {\n border-left-color: var(--gnome-success-bg-color, #57e389);\n}\n\n.medium {\n border-left-color: var(--gnome-warning-bg-color, #f6d32d);\n}\n\n.high {\n border-left-color: var(--gnome-orange-bg-color, #ff7800);\n}\n\n.critical {\n border-left-color: var(--gnome-error-bg-color, #e01b24);\n}\n\n@media (prefers-color-scheme: dark) {\n .finding {\n border-color: var(--gnome-card-shade-color, rgb(255 255 255 / 0.12));\n background-color: var(--gnome-card-bg-color, rgb(255 255 255 / 0.08));\n color: var(--gnome-card-fg-color, rgb(255 255 255 / 0.87));\n }\n\n .heading,\n .metaItem dd {\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.92));\n }\n\n .description,\n .metaItem dt {\n color: var(--gnome-secondary-fg-color, rgb(255 255 255 / 0.62));\n }\n}\n"],"mappings":""}
@@ -0,0 +1,21 @@
1
+ var e = {
2
+ finding: "_finding_aheyt_3",
3
+ header: "_header_aheyt_14",
4
+ headingGroup: "_headingGroup_aheyt_21",
5
+ heading: "_heading_aheyt_21",
6
+ badges: "_badges_aheyt_35",
7
+ description: "_description_aheyt_42",
8
+ meta: "_meta_aheyt_49",
9
+ metaItem: "_metaItem_aheyt_56",
10
+ actions: "_actions_aheyt_77",
11
+ none: "_none_aheyt_86",
12
+ minimal: "_minimal_aheyt_90",
13
+ low: "_low_aheyt_94",
14
+ medium: "_medium_aheyt_98",
15
+ high: "_high_aheyt_102",
16
+ critical: "_critical_aheyt_106"
17
+ };
18
+ //#endregion
19
+ export { e as default };
20
+
21
+ //# sourceMappingURL=VulnerabilityFinding.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilityFinding.module.css.js","names":[],"sources":["../../../src/components/VulnerabilityFinding/VulnerabilityFinding.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.finding {\n display: grid;\n gap: var(--gnome-space-3, 12px);\n padding: var(--gnome-space-4, 16px);\n border: 1px solid var(--gnome-card-shade-color, rgb(0 0 0 / 0.07));\n border-left-width: 3px;\n border-radius: var(--gnome-radius-lg, 12px);\n background-color: var(--gnome-card-bg-color, #fff);\n color: var(--gnome-card-fg-color, rgb(0 0 0 / 0.8));\n}\n\n.header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--gnome-space-3, 12px);\n}\n\n.headingGroup {\n display: grid;\n gap: var(--gnome-space-2, 8px);\n min-width: 0;\n}\n\n.heading {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.3;\n}\n\n.badges {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--gnome-space-2, 8px);\n}\n\n.description {\n margin: 0;\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.6));\n font-size: 0.875rem;\n line-height: 1.5;\n}\n\n.meta {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gnome-space-2, 8px) var(--gnome-space-4, 16px);\n margin: 0;\n}\n\n.metaItem {\n display: grid;\n gap: 2px;\n}\n\n.metaItem dt {\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.55));\n font-size: 0.6875rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n line-height: 1.2;\n text-transform: uppercase;\n}\n\n.metaItem dd {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n font-size: 0.875rem;\n line-height: 1.35;\n}\n\n.actions {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-end;\n gap: var(--gnome-space-2, 8px);\n}\n\n/* ─── Severity accents ────────────────────────────────────────────────────── */\n\n.none {\n border-left-color: var(--gnome-success-bg-color, #33d17a);\n}\n\n.minimal {\n border-left-color: var(--gnome-info-bg-color, #62a0ea);\n}\n\n.low {\n border-left-color: var(--gnome-success-bg-color, #57e389);\n}\n\n.medium {\n border-left-color: var(--gnome-warning-bg-color, #f6d32d);\n}\n\n.high {\n border-left-color: var(--gnome-orange-bg-color, #ff7800);\n}\n\n.critical {\n border-left-color: var(--gnome-error-bg-color, #e01b24);\n}\n\n@media (prefers-color-scheme: dark) {\n .finding {\n border-color: var(--gnome-card-shade-color, rgb(255 255 255 / 0.12));\n background-color: var(--gnome-card-bg-color, rgb(255 255 255 / 0.08));\n color: var(--gnome-card-fg-color, rgb(255 255 255 / 0.87));\n }\n\n .heading,\n .metaItem dd {\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.92));\n }\n\n .description,\n .metaItem dt {\n color: var(--gnome-secondary-fg-color, rgb(255 255 255 / 0.62));\n }\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ var e={open:`Open`,triaged:`Triaged`,"in-progress":`In progress`,fixed:`Fixed`,"accepted-risk":`Accepted risk`,"false-positive":`False positive`},t={open:`error`,triaged:`warning`,"in-progress":`accent`,fixed:`success`,"accepted-risk":`neutral`,"false-positive":`neutral`};exports.VULNERABILITY_FINDING_STATUS_LABELS=e,exports.VULNERABILITY_FINDING_STATUS_VARIANTS=t;
2
+ //# sourceMappingURL=finding.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.cjs","names":[],"sources":["../../../src/components/VulnerabilityFinding/finding.ts"],"sourcesContent":["import type { StatusBadgeVariant } from '../StatusBadge';\n\nexport type VulnerabilityFindingStatus =\n | 'open'\n | 'triaged'\n | 'in-progress'\n | 'fixed'\n | 'accepted-risk'\n | 'false-positive';\n\nexport const VULNERABILITY_FINDING_STATUS_LABELS: Record<VulnerabilityFindingStatus, string> = {\n open: 'Open',\n triaged: 'Triaged',\n 'in-progress': 'In progress',\n fixed: 'Fixed',\n 'accepted-risk': 'Accepted risk',\n 'false-positive': 'False positive',\n};\n\nexport const VULNERABILITY_FINDING_STATUS_VARIANTS: Record<\n VulnerabilityFindingStatus,\n StatusBadgeVariant\n> = {\n open: 'error',\n triaged: 'warning',\n 'in-progress': 'accent',\n fixed: 'success',\n 'accepted-risk': 'neutral',\n 'false-positive': 'neutral',\n};\n"],"mappings":"AAUA,IAAa,EAAkF,CAC7F,KAAM,OACN,QAAS,UACT,cAAe,cACf,MAAO,QACP,gBAAiB,gBACjB,iBAAkB,gBACpB,EAEa,EAGT,CACF,KAAM,QACN,QAAS,UACT,cAAe,SACf,MAAO,UACP,gBAAiB,UACjB,iBAAkB,SACpB"}
@@ -0,0 +1,4 @@
1
+ import { StatusBadgeVariant } from '../StatusBadge';
2
+ export type VulnerabilityFindingStatus = 'open' | 'triaged' | 'in-progress' | 'fixed' | 'accepted-risk' | 'false-positive';
3
+ export declare const VULNERABILITY_FINDING_STATUS_LABELS: Record<VulnerabilityFindingStatus, string>;
4
+ export declare const VULNERABILITY_FINDING_STATUS_VARIANTS: Record<VulnerabilityFindingStatus, StatusBadgeVariant>;
@@ -0,0 +1,20 @@
1
+ //#region src/components/VulnerabilityFinding/finding.ts
2
+ var e = {
3
+ open: "Open",
4
+ triaged: "Triaged",
5
+ "in-progress": "In progress",
6
+ fixed: "Fixed",
7
+ "accepted-risk": "Accepted risk",
8
+ "false-positive": "False positive"
9
+ }, t = {
10
+ open: "error",
11
+ triaged: "warning",
12
+ "in-progress": "accent",
13
+ fixed: "success",
14
+ "accepted-risk": "neutral",
15
+ "false-positive": "neutral"
16
+ };
17
+ //#endregion
18
+ export { e as VULNERABILITY_FINDING_STATUS_LABELS, t as VULNERABILITY_FINDING_STATUS_VARIANTS };
19
+
20
+ //# sourceMappingURL=finding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.js","names":[],"sources":["../../../src/components/VulnerabilityFinding/finding.ts"],"sourcesContent":["import type { StatusBadgeVariant } from '../StatusBadge';\n\nexport type VulnerabilityFindingStatus =\n | 'open'\n | 'triaged'\n | 'in-progress'\n | 'fixed'\n | 'accepted-risk'\n | 'false-positive';\n\nexport const VULNERABILITY_FINDING_STATUS_LABELS: Record<VulnerabilityFindingStatus, string> = {\n open: 'Open',\n triaged: 'Triaged',\n 'in-progress': 'In progress',\n fixed: 'Fixed',\n 'accepted-risk': 'Accepted risk',\n 'false-positive': 'False positive',\n};\n\nexport const VULNERABILITY_FINDING_STATUS_VARIANTS: Record<\n VulnerabilityFindingStatus,\n StatusBadgeVariant\n> = {\n open: 'error',\n triaged: 'warning',\n 'in-progress': 'accent',\n fixed: 'success',\n 'accepted-risk': 'neutral',\n 'false-positive': 'neutral',\n};\n"],"mappings":";AAUA,IAAa,IAAkF;CAC7F,MAAM;CACN,SAAS;CACT,eAAe;CACf,OAAO;CACP,iBAAiB;CACjB,kBAAkB;AACpB,GAEa,IAGT;CACF,MAAM;CACN,SAAS;CACT,eAAe;CACf,OAAO;CACP,iBAAiB;CACjB,kBAAkB;AACpB"}
@@ -0,0 +1,4 @@
1
+ export type { VulnerabilityFindingStatus } from './finding';
2
+ export { VULNERABILITY_FINDING_STATUS_LABELS } from './finding';
3
+ export type { VulnerabilityFindingProps } from './VulnerabilityFinding';
4
+ export { VulnerabilityFinding } from './VulnerabilityFinding';
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./VulnerabilityFinding/finding.cjs"),t=require("./VulnerabilityFinding/VulnerabilityFinding.cjs");exports.VULNERABILITY_FINDING_STATUS_LABELS=e.VULNERABILITY_FINDING_STATUS_LABELS,exports.VulnerabilityFinding=t.VulnerabilityFinding;
@@ -0,0 +1,2 @@
1
+ export * from './VulnerabilityFinding/index'
2
+ export {}
@@ -0,0 +1,3 @@
1
+ import { VULNERABILITY_FINDING_STATUS_LABELS as e } from "./VulnerabilityFinding/finding.js";
2
+ import { VulnerabilityFinding as t } from "./VulnerabilityFinding/VulnerabilityFinding.js";
3
+ export { e as VULNERABILITY_FINDING_STATUS_LABELS, t as VulnerabilityFinding };
@@ -0,0 +1,2 @@
1
+ const e=require("../SeverityBadge/severity.cjs"),t=require("../SeverityBadge/SeverityBadge.cjs"),n=require("./summary.cjs"),r=require("./VulnerabilitySummary.module.css.cjs");let i=require("react/jsx-runtime");var a=({counts:a,heading:o=`Vulnerability summary`,description:s,showZeroCounts:c=!1,showTotal:l=!0,className:u,"aria-label":d,...f})=>{let p=n.getVulnerabilitySummaryItems(a,c),m=n.getVulnerabilitySummaryTotal(a);return(0,i.jsxs)(`section`,{"aria-label":d??`Vulnerability summary: ${m} total findings${p.length>0?`, ${p.map(t=>`${t.count} ${e.VULNERABILITY_SEVERITY_LABELS[t.severity]}`).join(`, `)}`:``}`,className:[r.default.summary,u].filter(Boolean).join(` `),"data-total":m,...f,children:[(0,i.jsxs)(`div`,{className:r.default.header,children:[(0,i.jsxs)(`div`,{className:r.default.headingGroup,children:[(0,i.jsx)(`h3`,{className:r.default.heading,children:o}),s?(0,i.jsx)(`p`,{className:r.default.description,children:s}):null]}),l?(0,i.jsxs)(`div`,{className:r.default.total,children:[(0,i.jsx)(`span`,{className:r.default.totalValue,children:m}),(0,i.jsx)(`span`,{className:r.default.totalLabel,children:`Total`})]}):null]}),p.length>0?(0,i.jsx)(`dl`,{className:r.default.grid,children:p.map(e=>(0,i.jsxs)(`div`,{className:r.default.item,"data-severity":e.severity,children:[(0,i.jsx)(`dt`,{className:r.default.itemLabel,children:(0,i.jsx)(t.SeverityBadge,{severity:e.severity})}),(0,i.jsx)(`dd`,{className:r.default.itemValue,children:e.count})]},e.severity))}):(0,i.jsx)(`p`,{className:r.default.empty,children:`No vulnerability findings`})]})};exports.VulnerabilitySummary=a;
2
+ //# sourceMappingURL=VulnerabilitySummary.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilitySummary.cjs","names":[],"sources":["../../../src/components/VulnerabilitySummary/VulnerabilitySummary.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { SeverityBadge, VULNERABILITY_SEVERITY_LABELS } from '../SeverityBadge';\nimport {\n getVulnerabilitySummaryItems,\n getVulnerabilitySummaryTotal,\n type VulnerabilitySummaryCounts,\n} from './summary';\nimport styles from './VulnerabilitySummary.module.css';\n\nexport interface VulnerabilitySummaryProps extends HTMLAttributes<HTMLElement> {\n /** Severity counts for the report or current scan result. */\n counts: VulnerabilitySummaryCounts;\n /** Summary heading. Defaults to `Vulnerability summary`. */\n heading?: ReactNode;\n /** Optional supporting text below the heading. */\n description?: ReactNode;\n /** Whether to render severities with zero findings. */\n showZeroCounts?: boolean;\n /** Whether to render the total finding count. */\n showTotal?: boolean;\n}\n\n/**\n * Executive severity-count summary for vulnerability reports and dashboards.\n */\nexport const VulnerabilitySummary = ({\n counts,\n heading = 'Vulnerability summary',\n description,\n showZeroCounts = false,\n showTotal = true,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: VulnerabilitySummaryProps) => {\n const items = getVulnerabilitySummaryItems(counts, showZeroCounts);\n const total = getVulnerabilitySummaryTotal(counts);\n const accessibleLabel =\n ariaLabel ??\n `Vulnerability summary: ${total} total findings${\n items.length > 0\n ? `, ${items\n .map((item) => `${item.count} ${VULNERABILITY_SEVERITY_LABELS[item.severity]}`)\n .join(', ')}`\n : ''\n }`;\n\n return (\n <section\n aria-label={accessibleLabel}\n className={[styles.summary, className].filter(Boolean).join(' ')}\n data-total={total}\n {...props}\n >\n <div className={styles.header}>\n <div className={styles.headingGroup}>\n <h3 className={styles.heading}>{heading}</h3>\n {description ? <p className={styles.description}>{description}</p> : null}\n </div>\n {showTotal ? (\n <div className={styles.total}>\n <span className={styles.totalValue}>{total}</span>\n <span className={styles.totalLabel}>Total</span>\n </div>\n ) : null}\n </div>\n {items.length > 0 ? (\n <dl className={styles.grid}>\n {items.map((item) => (\n <div className={styles.item} data-severity={item.severity} key={item.severity}>\n <dt className={styles.itemLabel}>\n <SeverityBadge severity={item.severity} />\n </dt>\n <dd className={styles.itemValue}>{item.count}</dd>\n </div>\n ))}\n </dl>\n ) : (\n <p className={styles.empty}>No vulnerability findings</p>\n )}\n </section>\n );\n};\n"],"mappings":"kNA0BA,IAAa,GAAwB,CACnC,SACA,UAAU,wBACV,cACA,iBAAiB,GACjB,YAAY,GACZ,YACA,aAAc,EACd,GAAG,KAC4B,CAC/B,IAAM,EAAQ,EAAA,6BAA6B,EAAQ,CAAc,EAC3D,EAAQ,EAAA,6BAA6B,CAAM,EAWjD,OACE,EAAA,EAAA,MAAC,UAAD,CACE,aAXF,GACA,0BAA0B,EAAM,iBAC9B,EAAM,OAAS,EACX,KAAK,EACF,IAAK,GAAS,GAAG,EAAK,MAAM,GAAG,EAAA,8BAA8B,EAAK,WAAW,EAC7E,KAAK,IAAI,IACZ,KAMJ,UAAW,CAAC,EAAA,QAAO,QAAS,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC/D,aAAY,EACZ,GAAI,WAJN,EAME,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,gBAAvB,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,sBAAvB,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,QAAO,iBAAU,CAAY,CAAA,EAC3C,GAAc,EAAA,EAAA,KAAC,IAAD,CAAG,UAAW,EAAA,QAAO,qBAAc,CAAe,CAAA,EAAI,IAClE,IACJ,GACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,eAAvB,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,oBAAa,CAAY,CAAA,GACjD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,oBAAY,OAAW,CAAA,CAC5C,IACH,IACD,IACJ,EAAM,OAAS,GACd,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,QAAO,cACnB,EAAM,IAAK,IACV,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,KAAM,gBAAe,EAAK,kBAAjD,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,QAAO,oBACpB,EAAA,EAAA,KAAC,EAAA,cAAD,CAAe,SAAU,EAAK,QAAW,CAAA,CACvC,CAAA,GACJ,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,QAAO,mBAAY,EAAK,KAAU,CAAA,CAC9C,GAL2D,EAAK,QAKhE,CACN,CACC,CAAA,GAEJ,EAAA,EAAA,KAAC,IAAD,CAAG,UAAW,EAAA,QAAO,eAAO,2BAA4B,CAAA,CAEnD,GAEb"}
@@ -0,0 +1,18 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ import { VulnerabilitySummaryCounts } from './summary';
3
+ export interface VulnerabilitySummaryProps extends HTMLAttributes<HTMLElement> {
4
+ /** Severity counts for the report or current scan result. */
5
+ counts: VulnerabilitySummaryCounts;
6
+ /** Summary heading. Defaults to `Vulnerability summary`. */
7
+ heading?: ReactNode;
8
+ /** Optional supporting text below the heading. */
9
+ description?: ReactNode;
10
+ /** Whether to render severities with zero findings. */
11
+ showZeroCounts?: boolean;
12
+ /** Whether to render the total finding count. */
13
+ showTotal?: boolean;
14
+ }
15
+ /**
16
+ * Executive severity-count summary for vulnerability reports and dashboards.
17
+ */
18
+ export declare const VulnerabilitySummary: ({ counts, heading, description, showZeroCounts, showTotal, className, "aria-label": ariaLabel, ...props }: VulnerabilitySummaryProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,57 @@
1
+ import { VULNERABILITY_SEVERITY_LABELS as e } from "../SeverityBadge/severity.js";
2
+ import { SeverityBadge as t } from "../SeverityBadge/SeverityBadge.js";
3
+ import { getVulnerabilitySummaryItems as n, getVulnerabilitySummaryTotal as r } from "./summary.js";
4
+ import i from "./VulnerabilitySummary.module.css.js";
5
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
6
+ //#region src/components/VulnerabilitySummary/VulnerabilitySummary.tsx
7
+ var s = ({ counts: s, heading: c = "Vulnerability summary", description: l, showZeroCounts: u = !1, showTotal: d = !0, className: f, "aria-label": p, ...m }) => {
8
+ let h = n(s, u), g = r(s);
9
+ return /* @__PURE__ */ o("section", {
10
+ "aria-label": p ?? `Vulnerability summary: ${g} total findings${h.length > 0 ? `, ${h.map((t) => `${t.count} ${e[t.severity]}`).join(", ")}` : ""}`,
11
+ className: [i.summary, f].filter(Boolean).join(" "),
12
+ "data-total": g,
13
+ ...m,
14
+ children: [/* @__PURE__ */ o("div", {
15
+ className: i.header,
16
+ children: [/* @__PURE__ */ o("div", {
17
+ className: i.headingGroup,
18
+ children: [/* @__PURE__ */ a("h3", {
19
+ className: i.heading,
20
+ children: c
21
+ }), l ? /* @__PURE__ */ a("p", {
22
+ className: i.description,
23
+ children: l
24
+ }) : null]
25
+ }), d ? /* @__PURE__ */ o("div", {
26
+ className: i.total,
27
+ children: [/* @__PURE__ */ a("span", {
28
+ className: i.totalValue,
29
+ children: g
30
+ }), /* @__PURE__ */ a("span", {
31
+ className: i.totalLabel,
32
+ children: "Total"
33
+ })]
34
+ }) : null]
35
+ }), h.length > 0 ? /* @__PURE__ */ a("dl", {
36
+ className: i.grid,
37
+ children: h.map((e) => /* @__PURE__ */ o("div", {
38
+ className: i.item,
39
+ "data-severity": e.severity,
40
+ children: [/* @__PURE__ */ a("dt", {
41
+ className: i.itemLabel,
42
+ children: /* @__PURE__ */ a(t, { severity: e.severity })
43
+ }), /* @__PURE__ */ a("dd", {
44
+ className: i.itemValue,
45
+ children: e.count
46
+ })]
47
+ }, e.severity))
48
+ }) : /* @__PURE__ */ a("p", {
49
+ className: i.empty,
50
+ children: "No vulnerability findings"
51
+ })]
52
+ });
53
+ };
54
+ //#endregion
55
+ export { s as VulnerabilitySummary };
56
+
57
+ //# sourceMappingURL=VulnerabilitySummary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilitySummary.js","names":[],"sources":["../../../src/components/VulnerabilitySummary/VulnerabilitySummary.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\n\nimport { SeverityBadge, VULNERABILITY_SEVERITY_LABELS } from '../SeverityBadge';\nimport {\n getVulnerabilitySummaryItems,\n getVulnerabilitySummaryTotal,\n type VulnerabilitySummaryCounts,\n} from './summary';\nimport styles from './VulnerabilitySummary.module.css';\n\nexport interface VulnerabilitySummaryProps extends HTMLAttributes<HTMLElement> {\n /** Severity counts for the report or current scan result. */\n counts: VulnerabilitySummaryCounts;\n /** Summary heading. Defaults to `Vulnerability summary`. */\n heading?: ReactNode;\n /** Optional supporting text below the heading. */\n description?: ReactNode;\n /** Whether to render severities with zero findings. */\n showZeroCounts?: boolean;\n /** Whether to render the total finding count. */\n showTotal?: boolean;\n}\n\n/**\n * Executive severity-count summary for vulnerability reports and dashboards.\n */\nexport const VulnerabilitySummary = ({\n counts,\n heading = 'Vulnerability summary',\n description,\n showZeroCounts = false,\n showTotal = true,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: VulnerabilitySummaryProps) => {\n const items = getVulnerabilitySummaryItems(counts, showZeroCounts);\n const total = getVulnerabilitySummaryTotal(counts);\n const accessibleLabel =\n ariaLabel ??\n `Vulnerability summary: ${total} total findings${\n items.length > 0\n ? `, ${items\n .map((item) => `${item.count} ${VULNERABILITY_SEVERITY_LABELS[item.severity]}`)\n .join(', ')}`\n : ''\n }`;\n\n return (\n <section\n aria-label={accessibleLabel}\n className={[styles.summary, className].filter(Boolean).join(' ')}\n data-total={total}\n {...props}\n >\n <div className={styles.header}>\n <div className={styles.headingGroup}>\n <h3 className={styles.heading}>{heading}</h3>\n {description ? <p className={styles.description}>{description}</p> : null}\n </div>\n {showTotal ? (\n <div className={styles.total}>\n <span className={styles.totalValue}>{total}</span>\n <span className={styles.totalLabel}>Total</span>\n </div>\n ) : null}\n </div>\n {items.length > 0 ? (\n <dl className={styles.grid}>\n {items.map((item) => (\n <div className={styles.item} data-severity={item.severity} key={item.severity}>\n <dt className={styles.itemLabel}>\n <SeverityBadge severity={item.severity} />\n </dt>\n <dd className={styles.itemValue}>{item.count}</dd>\n </div>\n ))}\n </dl>\n ) : (\n <p className={styles.empty}>No vulnerability findings</p>\n )}\n </section>\n );\n};\n"],"mappings":";;;;;;AA0BA,IAAa,KAAwB,EACnC,WACA,aAAU,yBACV,gBACA,oBAAiB,IACjB,eAAY,IACZ,cACA,cAAc,GACd,GAAG,QAC4B;CAC/B,IAAM,IAAQ,EAA6B,GAAQ,CAAc,GAC3D,IAAQ,EAA6B,CAAM;CAWjD,OACE,kBAAC,WAAD;EACE,cAXF,KACA,0BAA0B,EAAM,iBAC9B,EAAM,SAAS,IACX,KAAK,EACF,KAAK,MAAS,GAAG,EAAK,MAAM,GAAG,EAA8B,EAAK,WAAW,EAC7E,KAAK,IAAI,MACZ;EAMJ,WAAW,CAAC,EAAO,SAAS,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;EAC/D,cAAY;EACZ,GAAI;YAJN,CAME,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB,CACE,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,MAAD;KAAI,WAAW,EAAO;eAAU;IAAY,CAAA,GAC3C,IAAc,kBAAC,KAAD;KAAG,WAAW,EAAO;eAAc;IAAe,CAAA,IAAI,IAClE;OACJ,IACC,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAa;IAAY,CAAA,GACjD,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAY;IAAW,CAAA,CAC5C;QACH,IACD;MACJ,EAAM,SAAS,IACd,kBAAC,MAAD;GAAI,WAAW,EAAO;aACnB,EAAM,KAAK,MACV,kBAAC,OAAD;IAAK,WAAW,EAAO;IAAM,iBAAe,EAAK;cAAjD,CACE,kBAAC,MAAD;KAAI,WAAW,EAAO;eACpB,kBAAC,GAAD,EAAe,UAAU,EAAK,SAAW,CAAA;IACvC,CAAA,GACJ,kBAAC,MAAD;KAAI,WAAW,EAAO;eAAY,EAAK;IAAU,CAAA,CAC9C;MAL2D,EAAK,QAKhE,CACN;EACC,CAAA,IAEJ,kBAAC,KAAD;GAAG,WAAW,EAAO;aAAO;EAA4B,CAAA,CAEnD;;AAEb"}
@@ -0,0 +1,2 @@
1
+ var e={summary:`_summary_mybzg_3`,header:`_header_mybzg_14`,headingGroup:`_headingGroup_mybzg_21`,heading:`_heading_mybzg_21`,description:`_description_mybzg_35`,empty:`_empty_mybzg_36`,total:`_total_mybzg_43`,totalValue:`_totalValue_mybzg_49`,totalLabel:`_totalLabel_mybzg_57`,grid:`_grid_mybzg_67`,item:`_item_mybzg_74`,itemLabel:`_itemLabel_mybzg_83`,itemValue:`_itemValue_mybzg_87`};exports.default=e;
2
+ //# sourceMappingURL=VulnerabilitySummary.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilitySummary.module.css.cjs","names":[],"sources":["../../../src/components/VulnerabilitySummary/VulnerabilitySummary.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.summary {\n display: grid;\n gap: var(--gnome-space-4, 16px);\n padding: var(--gnome-space-4, 16px);\n border: 1px solid var(--gnome-card-shade-color, rgb(0 0 0 / 0.08));\n border-radius: var(--gnome-radius-lg, 12px);\n background-color: var(--gnome-card-bg-color, #fff);\n color: var(--gnome-card-fg-color, rgb(0 0 0 / 0.82));\n font-family: var(--gnome-font-family);\n}\n\n.header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--gnome-space-4, 16px);\n}\n\n.headingGroup {\n display: grid;\n gap: 4px;\n min-width: 0;\n}\n\n.heading {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1rem;\n font-weight: 750;\n line-height: 1.25;\n}\n\n.description,\n.empty {\n margin: 0;\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.58));\n font-size: 0.8125rem;\n line-height: 1.35;\n}\n\n.total {\n display: grid;\n justify-items: end;\n gap: 2px;\n}\n\n.totalValue {\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1.75rem;\n font-weight: 800;\n letter-spacing: -0.035em;\n line-height: 1;\n}\n\n.totalLabel {\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.58));\n font-size: 0.75rem;\n font-weight: 650;\n line-height: 1.2;\n text-transform: uppercase;\n}\n\n/* ─── Severity grid ───────────────────────────────────────────────────────── */\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(112px, 1fr));\n gap: var(--gnome-space-2, 8px);\n margin: 0;\n}\n\n.item {\n display: grid;\n gap: 8px;\n padding: 10px;\n border: 1px solid var(--gnome-border-color, rgb(0 0 0 / 0.1));\n border-radius: var(--gnome-radius-md, 9px);\n background-color: var(--gnome-hover-overlay, rgb(0 0 0 / 0.035));\n}\n\n.itemLabel {\n display: flex;\n}\n\n.itemValue {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1.5rem;\n font-variant-numeric: tabular-nums;\n font-weight: 800;\n letter-spacing: -0.03em;\n line-height: 1;\n}\n\n@media (prefers-color-scheme: dark) {\n .summary {\n border-color: var(--gnome-card-shade-color, rgb(255 255 255 / 0.12));\n background-color: var(--gnome-card-bg-color, rgb(255 255 255 / 0.08));\n color: var(--gnome-card-fg-color, rgb(255 255 255 / 0.88));\n }\n\n .heading,\n .totalValue,\n .itemValue {\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.92));\n }\n\n .description,\n .empty,\n .totalLabel {\n color: var(--gnome-secondary-fg-color, rgb(255 255 255 / 0.62));\n }\n\n .item {\n border-color: var(--gnome-border-color, rgb(255 255 255 / 0.12));\n background-color: var(--gnome-hover-overlay, rgb(255 255 255 / 0.06));\n }\n}\n"],"mappings":""}
@@ -0,0 +1,19 @@
1
+ var e = {
2
+ summary: "_summary_mybzg_3",
3
+ header: "_header_mybzg_14",
4
+ headingGroup: "_headingGroup_mybzg_21",
5
+ heading: "_heading_mybzg_21",
6
+ description: "_description_mybzg_35",
7
+ empty: "_empty_mybzg_36",
8
+ total: "_total_mybzg_43",
9
+ totalValue: "_totalValue_mybzg_49",
10
+ totalLabel: "_totalLabel_mybzg_57",
11
+ grid: "_grid_mybzg_67",
12
+ item: "_item_mybzg_74",
13
+ itemLabel: "_itemLabel_mybzg_83",
14
+ itemValue: "_itemValue_mybzg_87"
15
+ };
16
+ //#endregion
17
+ export { e as default };
18
+
19
+ //# sourceMappingURL=VulnerabilitySummary.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VulnerabilitySummary.module.css.js","names":[],"sources":["../../../src/components/VulnerabilitySummary/VulnerabilitySummary.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.summary {\n display: grid;\n gap: var(--gnome-space-4, 16px);\n padding: var(--gnome-space-4, 16px);\n border: 1px solid var(--gnome-card-shade-color, rgb(0 0 0 / 0.08));\n border-radius: var(--gnome-radius-lg, 12px);\n background-color: var(--gnome-card-bg-color, #fff);\n color: var(--gnome-card-fg-color, rgb(0 0 0 / 0.82));\n font-family: var(--gnome-font-family);\n}\n\n.header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--gnome-space-4, 16px);\n}\n\n.headingGroup {\n display: grid;\n gap: 4px;\n min-width: 0;\n}\n\n.heading {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1rem;\n font-weight: 750;\n line-height: 1.25;\n}\n\n.description,\n.empty {\n margin: 0;\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.58));\n font-size: 0.8125rem;\n line-height: 1.35;\n}\n\n.total {\n display: grid;\n justify-items: end;\n gap: 2px;\n}\n\n.totalValue {\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1.75rem;\n font-weight: 800;\n letter-spacing: -0.035em;\n line-height: 1;\n}\n\n.totalLabel {\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.58));\n font-size: 0.75rem;\n font-weight: 650;\n line-height: 1.2;\n text-transform: uppercase;\n}\n\n/* ─── Severity grid ───────────────────────────────────────────────────────── */\n\n.grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(112px, 1fr));\n gap: var(--gnome-space-2, 8px);\n margin: 0;\n}\n\n.item {\n display: grid;\n gap: 8px;\n padding: 10px;\n border: 1px solid var(--gnome-border-color, rgb(0 0 0 / 0.1));\n border-radius: var(--gnome-radius-md, 9px);\n background-color: var(--gnome-hover-overlay, rgb(0 0 0 / 0.035));\n}\n\n.itemLabel {\n display: flex;\n}\n\n.itemValue {\n margin: 0;\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.87));\n font-size: 1.5rem;\n font-variant-numeric: tabular-nums;\n font-weight: 800;\n letter-spacing: -0.03em;\n line-height: 1;\n}\n\n@media (prefers-color-scheme: dark) {\n .summary {\n border-color: var(--gnome-card-shade-color, rgb(255 255 255 / 0.12));\n background-color: var(--gnome-card-bg-color, rgb(255 255 255 / 0.08));\n color: var(--gnome-card-fg-color, rgb(255 255 255 / 0.88));\n }\n\n .heading,\n .totalValue,\n .itemValue {\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.92));\n }\n\n .description,\n .empty,\n .totalLabel {\n color: var(--gnome-secondary-fg-color, rgb(255 255 255 / 0.62));\n }\n\n .item {\n border-color: var(--gnome-border-color, rgb(255 255 255 / 0.12));\n background-color: var(--gnome-hover-overlay, rgb(255 255 255 / 0.06));\n }\n}\n"],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type { VulnerabilitySummaryCounts, VulnerabilitySummaryItem } from './summary';
2
+ export { getVulnerabilitySummaryItems, getVulnerabilitySummaryTotal } from './summary';
3
+ export type { VulnerabilitySummaryProps } from './VulnerabilitySummary';
4
+ export { VulnerabilitySummary } from './VulnerabilitySummary';
@@ -0,0 +1,2 @@
1
+ const e=require("../SeverityBadge/severity.cjs");function t(t,n=!1){return e.VULNERABILITY_SEVERITIES.map(e=>({severity:e,count:Math.max(0,t[e]??0)})).filter(e=>n||e.count>0)}function n(t){return e.VULNERABILITY_SEVERITIES.reduce((e,n)=>e+Math.max(0,t[n]??0),0)}exports.getVulnerabilitySummaryItems=t,exports.getVulnerabilitySummaryTotal=n;
2
+ //# sourceMappingURL=summary.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.cjs","names":[],"sources":["../../../src/components/VulnerabilitySummary/summary.ts"],"sourcesContent":["import { VULNERABILITY_SEVERITIES, type VulnerabilitySeverity } from '../SeverityBadge';\n\nexport type VulnerabilitySummaryCounts = Partial<Record<VulnerabilitySeverity, number>>;\n\nexport interface VulnerabilitySummaryItem {\n severity: VulnerabilitySeverity;\n count: number;\n}\n\nexport function getVulnerabilitySummaryItems(\n counts: VulnerabilitySummaryCounts,\n showZeroCounts = false,\n): VulnerabilitySummaryItem[] {\n return VULNERABILITY_SEVERITIES.map((severity) => ({\n severity,\n count: Math.max(0, counts[severity] ?? 0),\n })).filter((item) => showZeroCounts || item.count > 0);\n}\n\nexport function getVulnerabilitySummaryTotal(counts: VulnerabilitySummaryCounts) {\n return VULNERABILITY_SEVERITIES.reduce(\n (total, severity) => total + Math.max(0, counts[severity] ?? 0),\n 0,\n );\n}\n"],"mappings":"iDASA,SAAgB,EACd,EACA,EAAiB,GACW,CAC5B,OAAO,EAAA,yBAAyB,IAAK,IAAc,CACjD,WACA,MAAO,KAAK,IAAI,EAAG,EAAO,IAAa,CAAC,CAC1C,EAAE,EAAE,OAAQ,GAAS,GAAkB,EAAK,MAAQ,CAAC,CACvD,CAEA,SAAgB,EAA6B,EAAoC,CAC/E,OAAO,EAAA,yBAAyB,QAC7B,EAAO,IAAa,EAAQ,KAAK,IAAI,EAAG,EAAO,IAAa,CAAC,EAC9D,CACF,CACF"}
@@ -0,0 +1,8 @@
1
+ import { VulnerabilitySeverity } from '../SeverityBadge';
2
+ export type VulnerabilitySummaryCounts = Partial<Record<VulnerabilitySeverity, number>>;
3
+ export interface VulnerabilitySummaryItem {
4
+ severity: VulnerabilitySeverity;
5
+ count: number;
6
+ }
7
+ export declare function getVulnerabilitySummaryItems(counts: VulnerabilitySummaryCounts, showZeroCounts?: boolean): VulnerabilitySummaryItem[];
8
+ export declare function getVulnerabilitySummaryTotal(counts: VulnerabilitySummaryCounts): number;