@gnome-ui/react 1.50.1 → 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 +46 -1
@@ -0,0 +1,2 @@
1
+ const e=require("./AffectedPackage.module.css.cjs"),t=require("./package.cjs");let n=require("react/jsx-runtime");var r=e=>typeof e==`string`||typeof e==`number`,i=({ecosystem:i,name:a,version:o,fixedVersion:s,digest:c,purl:l,className:u,"aria-label":d,...f})=>{let p=l??(r(a)&&(o===void 0||r(o))?t.getPackageUrl({ecosystem:i,name:String(a),version:o===void 0?void 0:String(o)}):void 0),m=d??(r(a)?`Affected package ${t.formatPackageCoordinate({ecosystem:i,name:String(a),version:r(o)?String(o):void 0})}`:void 0);return(0,n.jsx)(`article`,{...f,"aria-label":m,className:[e.default.package,u].filter(Boolean).join(` `),"data-ecosystem":i,children:(0,n.jsxs)(`div`,{className:e.default.surface,children:[(0,n.jsxs)(`div`,{className:e.default.header,children:[(0,n.jsx)(`span`,{className:e.default.ecosystem,children:i}),(0,n.jsx)(`span`,{className:e.default.name,children:a})]}),(0,n.jsxs)(`dl`,{className:e.default.meta,children:[o?(0,n.jsxs)(`div`,{className:e.default.metaItem,children:[(0,n.jsx)(`dt`,{children:`Version`}),(0,n.jsx)(`dd`,{children:o})]}):null,s?(0,n.jsxs)(`div`,{className:e.default.metaItem,children:[(0,n.jsx)(`dt`,{children:`Fixed in`}),(0,n.jsx)(`dd`,{children:s})]}):null,c?(0,n.jsxs)(`div`,{className:e.default.metaItem,children:[(0,n.jsx)(`dt`,{children:`Digest`}),(0,n.jsx)(`dd`,{children:c})]}):null,p?(0,n.jsxs)(`div`,{className:e.default.metaItem,children:[(0,n.jsx)(`dt`,{children:`PURL`}),(0,n.jsx)(`dd`,{children:(0,n.jsx)(`code`,{className:e.default.purl,children:p})})]}):null]})]})})};exports.AffectedPackage=i;
2
+ //# sourceMappingURL=AffectedPackage.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AffectedPackage.cjs","names":[],"sources":["../../../src/components/AffectedPackage/AffectedPackage.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\n\nimport styles from './AffectedPackage.module.css';\nimport { formatPackageCoordinate, getPackageUrl, type PackageEcosystem } from './package';\n\nexport interface AffectedPackageProps extends HTMLAttributes<HTMLElement> {\n /** Package ecosystem, for example `npm`, `pypi`, `deb`, or `maven`. */\n ecosystem: PackageEcosystem | string;\n /** Package, image, library, or module name. */\n name: ReactNode;\n /** Vulnerable version or version range. */\n version?: ReactNode;\n /** Fixed version or remediation target. */\n fixedVersion?: ReactNode;\n /** Optional package digest, image digest, or lockfile hash. */\n digest?: ReactNode;\n /** Optional Package URL. Generated automatically when omitted and name/version are strings. */\n purl?: string;\n}\n\nconst isText = (value: ReactNode): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\n/**\n * Package coordinate summary for vulnerability findings, SBOMs, and scan reports.\n */\nexport const AffectedPackage = ({\n ecosystem,\n name,\n version,\n fixedVersion,\n digest,\n purl,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: AffectedPackageProps) => {\n const generatedPurl =\n purl ??\n (isText(name) && (version === undefined || isText(version))\n ? getPackageUrl({\n ecosystem,\n name: String(name),\n version: version === undefined ? undefined : String(version),\n })\n : undefined);\n const accessibleLabel =\n ariaLabel ??\n (isText(name)\n ? `Affected package ${formatPackageCoordinate({\n ecosystem,\n name: String(name),\n version: isText(version) ? String(version) : undefined,\n })}`\n : undefined);\n\n return (\n <article\n {...props}\n aria-label={accessibleLabel}\n className={[styles.package, className].filter(Boolean).join(' ')}\n data-ecosystem={ecosystem}\n >\n <div className={styles.surface}>\n <div className={styles.header}>\n <span className={styles.ecosystem}>{ecosystem}</span>\n <span className={styles.name}>{name}</span>\n </div>\n\n <dl className={styles.meta}>\n {version ? (\n <div className={styles.metaItem}>\n <dt>Version</dt>\n <dd>{version}</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 {digest ? (\n <div className={styles.metaItem}>\n <dt>Digest</dt>\n <dd>{digest}</dd>\n </div>\n ) : null}\n {generatedPurl ? (\n <div className={styles.metaItem}>\n <dt>PURL</dt>\n <dd>\n <code className={styles.purl}>{generatedPurl}</code>\n </dd>\n </div>\n ) : null}\n </dl>\n </div>\n </article>\n );\n};\n"],"mappings":"kHAoBA,IAAM,EAAU,GACd,OAAO,GAAU,UAAY,OAAO,GAAU,SAKnC,GAAmB,CAC9B,YACA,OACA,UACA,eACA,SACA,OACA,YACA,aAAc,EACd,GAAG,KACuB,CAC1B,IAAM,EACJ,IACC,EAAO,CAAI,IAAM,IAAY,IAAA,IAAa,EAAO,CAAO,GACrD,EAAA,cAAc,CACZ,YACA,KAAM,OAAO,CAAI,EACjB,QAAS,IAAY,IAAA,GAAY,IAAA,GAAY,OAAO,CAAO,CAC7D,CAAC,EACD,IAAA,IACA,EACJ,IACC,EAAO,CAAI,EACR,oBAAoB,EAAA,wBAAwB,CAC1C,YACA,KAAM,OAAO,CAAI,EACjB,QAAS,EAAO,CAAO,EAAI,OAAO,CAAO,EAAI,IAAA,EAC/C,CAAC,IACD,IAAA,IAEN,OACE,EAAA,EAAA,KAAC,UAAD,CACE,GAAI,EACJ,aAAY,EACZ,UAAW,CAAC,EAAA,QAAO,QAAS,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC/D,iBAAgB,YAEhB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,iBAAvB,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,gBAAvB,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,mBAAY,CAAgB,CAAA,GACpD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,cAAO,CAAW,CAAA,CACvC,KAEL,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,SAAW,CAAA,GACf,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,CAAY,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,CAAiB,CAAA,CACnB,IACH,KACH,GACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,kBAAvB,EACE,EAAA,EAAA,KAAC,KAAD,CAAA,SAAI,QAAU,CAAA,GACd,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,CAAW,CAAA,CACb,IACH,KACH,GACC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAA,QAAO,kBAAvB,EACE,EAAA,EAAA,KAAC,KAAD,CAAA,SAAI,MAAQ,CAAA,GACZ,EAAA,EAAA,KAAC,KAAD,CAAA,UACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,cAAO,CAAoB,CAAA,CACjD,CAAA,CACD,IACH,IACF,GACD,GACE,CAAA,CAEb"}
@@ -0,0 +1,20 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ import { PackageEcosystem } from './package';
3
+ export interface AffectedPackageProps extends HTMLAttributes<HTMLElement> {
4
+ /** Package ecosystem, for example `npm`, `pypi`, `deb`, or `maven`. */
5
+ ecosystem: PackageEcosystem | string;
6
+ /** Package, image, library, or module name. */
7
+ name: ReactNode;
8
+ /** Vulnerable version or version range. */
9
+ version?: ReactNode;
10
+ /** Fixed version or remediation target. */
11
+ fixedVersion?: ReactNode;
12
+ /** Optional package digest, image digest, or lockfile hash. */
13
+ digest?: ReactNode;
14
+ /** Optional Package URL. Generated automatically when omitted and name/version are strings. */
15
+ purl?: string;
16
+ }
17
+ /**
18
+ * Package coordinate summary for vulnerability findings, SBOMs, and scan reports.
19
+ */
20
+ export declare const AffectedPackage: ({ ecosystem, name, version, fixedVersion, digest, purl, className, "aria-label": ariaLabel, ...props }: AffectedPackageProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,61 @@
1
+ import e from "./AffectedPackage.module.css.js";
2
+ import { formatPackageCoordinate as t, getPackageUrl as n } from "./package.js";
3
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ //#region src/components/AffectedPackage/AffectedPackage.tsx
5
+ var a = (e) => typeof e == "string" || typeof e == "number", o = ({ ecosystem: o, name: s, version: c, fixedVersion: l, digest: u, purl: d, className: f, "aria-label": p, ...m }) => {
6
+ let h = d ?? (a(s) && (c === void 0 || a(c)) ? n({
7
+ ecosystem: o,
8
+ name: String(s),
9
+ version: c === void 0 ? void 0 : String(c)
10
+ }) : void 0), g = p ?? (a(s) ? `Affected package ${t({
11
+ ecosystem: o,
12
+ name: String(s),
13
+ version: a(c) ? String(c) : void 0
14
+ })}` : void 0);
15
+ return /* @__PURE__ */ r("article", {
16
+ ...m,
17
+ "aria-label": g,
18
+ className: [e.package, f].filter(Boolean).join(" "),
19
+ "data-ecosystem": o,
20
+ children: /* @__PURE__ */ i("div", {
21
+ className: e.surface,
22
+ children: [/* @__PURE__ */ i("div", {
23
+ className: e.header,
24
+ children: [/* @__PURE__ */ r("span", {
25
+ className: e.ecosystem,
26
+ children: o
27
+ }), /* @__PURE__ */ r("span", {
28
+ className: e.name,
29
+ children: s
30
+ })]
31
+ }), /* @__PURE__ */ i("dl", {
32
+ className: e.meta,
33
+ children: [
34
+ c ? /* @__PURE__ */ i("div", {
35
+ className: e.metaItem,
36
+ children: [/* @__PURE__ */ r("dt", { children: "Version" }), /* @__PURE__ */ r("dd", { children: c })]
37
+ }) : null,
38
+ l ? /* @__PURE__ */ i("div", {
39
+ className: e.metaItem,
40
+ children: [/* @__PURE__ */ r("dt", { children: "Fixed in" }), /* @__PURE__ */ r("dd", { children: l })]
41
+ }) : null,
42
+ u ? /* @__PURE__ */ i("div", {
43
+ className: e.metaItem,
44
+ children: [/* @__PURE__ */ r("dt", { children: "Digest" }), /* @__PURE__ */ r("dd", { children: u })]
45
+ }) : null,
46
+ h ? /* @__PURE__ */ i("div", {
47
+ className: e.metaItem,
48
+ children: [/* @__PURE__ */ r("dt", { children: "PURL" }), /* @__PURE__ */ r("dd", { children: /* @__PURE__ */ r("code", {
49
+ className: e.purl,
50
+ children: h
51
+ }) })]
52
+ }) : null
53
+ ]
54
+ })]
55
+ })
56
+ });
57
+ };
58
+ //#endregion
59
+ export { o as AffectedPackage };
60
+
61
+ //# sourceMappingURL=AffectedPackage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AffectedPackage.js","names":[],"sources":["../../../src/components/AffectedPackage/AffectedPackage.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\n\nimport styles from './AffectedPackage.module.css';\nimport { formatPackageCoordinate, getPackageUrl, type PackageEcosystem } from './package';\n\nexport interface AffectedPackageProps extends HTMLAttributes<HTMLElement> {\n /** Package ecosystem, for example `npm`, `pypi`, `deb`, or `maven`. */\n ecosystem: PackageEcosystem | string;\n /** Package, image, library, or module name. */\n name: ReactNode;\n /** Vulnerable version or version range. */\n version?: ReactNode;\n /** Fixed version or remediation target. */\n fixedVersion?: ReactNode;\n /** Optional package digest, image digest, or lockfile hash. */\n digest?: ReactNode;\n /** Optional Package URL. Generated automatically when omitted and name/version are strings. */\n purl?: string;\n}\n\nconst isText = (value: ReactNode): value is string | number =>\n typeof value === 'string' || typeof value === 'number';\n\n/**\n * Package coordinate summary for vulnerability findings, SBOMs, and scan reports.\n */\nexport const AffectedPackage = ({\n ecosystem,\n name,\n version,\n fixedVersion,\n digest,\n purl,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: AffectedPackageProps) => {\n const generatedPurl =\n purl ??\n (isText(name) && (version === undefined || isText(version))\n ? getPackageUrl({\n ecosystem,\n name: String(name),\n version: version === undefined ? undefined : String(version),\n })\n : undefined);\n const accessibleLabel =\n ariaLabel ??\n (isText(name)\n ? `Affected package ${formatPackageCoordinate({\n ecosystem,\n name: String(name),\n version: isText(version) ? String(version) : undefined,\n })}`\n : undefined);\n\n return (\n <article\n {...props}\n aria-label={accessibleLabel}\n className={[styles.package, className].filter(Boolean).join(' ')}\n data-ecosystem={ecosystem}\n >\n <div className={styles.surface}>\n <div className={styles.header}>\n <span className={styles.ecosystem}>{ecosystem}</span>\n <span className={styles.name}>{name}</span>\n </div>\n\n <dl className={styles.meta}>\n {version ? (\n <div className={styles.metaItem}>\n <dt>Version</dt>\n <dd>{version}</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 {digest ? (\n <div className={styles.metaItem}>\n <dt>Digest</dt>\n <dd>{digest}</dd>\n </div>\n ) : null}\n {generatedPurl ? (\n <div className={styles.metaItem}>\n <dt>PURL</dt>\n <dd>\n <code className={styles.purl}>{generatedPurl}</code>\n </dd>\n </div>\n ) : null}\n </dl>\n </div>\n </article>\n );\n};\n"],"mappings":";;;;AAoBA,IAAM,KAAU,MACd,OAAO,KAAU,YAAY,OAAO,KAAU,UAKnC,KAAmB,EAC9B,cACA,SACA,YACA,iBACA,WACA,SACA,cACA,cAAc,GACd,GAAG,QACuB;CAC1B,IAAM,IACJ,MACC,EAAO,CAAI,MAAM,MAAY,KAAA,KAAa,EAAO,CAAO,KACrD,EAAc;EACZ;EACA,MAAM,OAAO,CAAI;EACjB,SAAS,MAAY,KAAA,IAAY,KAAA,IAAY,OAAO,CAAO;CAC7D,CAAC,IACD,KAAA,IACA,IACJ,MACC,EAAO,CAAI,IACR,oBAAoB,EAAwB;EAC1C;EACA,MAAM,OAAO,CAAI;EACjB,SAAS,EAAO,CAAO,IAAI,OAAO,CAAO,IAAI,KAAA;CAC/C,CAAC,MACD,KAAA;CAEN,OACE,kBAAC,WAAD;EACE,GAAI;EACJ,cAAY;EACZ,WAAW,CAAC,EAAO,SAAS,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;EAC/D,kBAAgB;YAEhB,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB,CACE,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB,CACE,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAY;IAAgB,CAAA,GACpD,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAO;IAAW,CAAA,CACvC;OAEL,kBAAC,MAAD;IAAI,WAAW,EAAO;cAAtB;KACG,IACC,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,MAAD,EAAA,UAAI,UAAW,CAAA,GACf,kBAAC,MAAD,EAAA,UAAK,EAAY,CAAA,CACd;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;KACH,IACC,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,MAAD,EAAA,UAAI,SAAU,CAAA,GACd,kBAAC,MAAD,EAAA,UAAK,EAAW,CAAA,CACb;UACH;KACH,IACC,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB,CACE,kBAAC,MAAD,EAAA,UAAI,OAAQ,CAAA,GACZ,kBAAC,MAAD,EAAA,UACE,kBAAC,QAAD;OAAM,WAAW,EAAO;iBAAO;MAAoB,CAAA,EACjD,CAAA,CACD;UACH;IACF;KACD;;CACE,CAAA;AAEb"}
@@ -0,0 +1,2 @@
1
+ var e={package:`_package_1dcan_3`,surface:`_surface_1dcan_8`,header:`_header_1dcan_37`,ecosystem:`_ecosystem_1dcan_45`,name:`_name_1dcan_64`,meta:`_meta_1dcan_75`,metaItem:`_metaItem_1dcan_83`,purl:`_purl_1dcan_110`};exports.default=e;
2
+ //# sourceMappingURL=AffectedPackage.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AffectedPackage.module.css.cjs","names":[],"sources":["../../../src/components/AffectedPackage/AffectedPackage.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.package {\n display: block;\n font-family: var(--gnome-font-family);\n}\n\n.surface {\n --affected-package-bg: #fff;\n --affected-package-fg: #241f31;\n --affected-package-muted-fg: #5e5c64;\n --affected-package-subtle-fg: #77767b;\n --affected-package-pill-bg: #deddda;\n --affected-package-pill-fg: #241f31;\n --affected-package-border: rgb(0 0 0 / 0.14);\n\n display: grid;\n box-sizing: border-box;\n gap: var(--gnome-space-4, 16px);\n min-width: min(100%, 320px);\n padding: var(--gnome-space-4, 16px);\n border: 1px solid var(--gnome-card-shade-color, var(--affected-package-border));\n border-radius: var(--gnome-radius-lg, 12px);\n background: var(--gnome-card-bg-color, var(--affected-package-bg));\n color: var(--affected-package-fg);\n font-family: var(--gnome-font-family);\n color-scheme: light;\n -webkit-text-fill-color: var(--affected-package-fg);\n}\n\n.surface *,\n.surface *::before,\n.surface *::after {\n box-sizing: border-box;\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--gnome-space-3, 12px);\n min-width: 0;\n}\n\n.ecosystem {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n min-height: 24px;\n padding: 2px 10px;\n border: 1px solid rgb(0 0 0 / 0.08);\n border-radius: 999px;\n background: var(--affected-package-pill-bg);\n color: var(--affected-package-pill-fg);\n font-size: 0.75rem;\n font-weight: 800;\n letter-spacing: 0.02em;\n line-height: 1.2;\n text-transform: uppercase;\n -webkit-text-fill-color: var(--affected-package-pill-fg);\n}\n\n.name {\n min-width: 0;\n color: var(--affected-package-fg);\n font-family: var(--gnome-monospace-font-family, monospace);\n font-size: 1rem;\n font-weight: 750;\n line-height: 1.25;\n overflow-wrap: anywhere;\n -webkit-text-fill-color: var(--affected-package-fg);\n}\n\n.meta {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gnome-space-3, 12px) var(--gnome-space-5, 20px);\n min-width: 0;\n margin: 0;\n}\n\n.metaItem {\n display: grid;\n gap: 3px;\n min-width: 0;\n}\n\n.metaItem dt {\n color: var(--affected-package-subtle-fg);\n font-size: 0.6875rem;\n font-weight: 750;\n letter-spacing: 0.05em;\n line-height: 1.2;\n text-transform: uppercase;\n -webkit-text-fill-color: var(--affected-package-subtle-fg);\n}\n\n.metaItem dd {\n min-width: 0;\n margin: 0;\n color: var(--affected-package-fg);\n font-family: var(--gnome-monospace-font-family, monospace);\n font-size: 0.875rem;\n line-height: 1.35;\n overflow-wrap: anywhere;\n -webkit-text-fill-color: var(--affected-package-fg);\n}\n\n.purl {\n color: inherit;\n font: inherit;\n -webkit-text-fill-color: currentcolor;\n}\n\n@media (prefers-color-scheme: dark) {\n .surface {\n --affected-package-bg: rgb(36 36 36 / 0.88);\n --affected-package-fg: rgb(255 255 255 / 0.92);\n --affected-package-muted-fg: rgb(255 255 255 / 0.72);\n --affected-package-subtle-fg: rgb(255 255 255 / 0.62);\n --affected-package-pill-bg: rgb(255 255 255 / 0.1);\n --affected-package-pill-fg: rgb(255 255 255 / 0.92);\n --affected-package-border: rgb(255 255 255 / 0.14);\n\n border-color: var(--gnome-card-shade-color, var(--affected-package-border));\n background: var(--gnome-card-bg-color, var(--affected-package-bg));\n color-scheme: dark;\n }\n\n .ecosystem {\n border-color: rgb(255 255 255 / 0.12);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ var e = {
2
+ package: "_package_1dcan_3",
3
+ surface: "_surface_1dcan_8",
4
+ header: "_header_1dcan_37",
5
+ ecosystem: "_ecosystem_1dcan_45",
6
+ name: "_name_1dcan_64",
7
+ meta: "_meta_1dcan_75",
8
+ metaItem: "_metaItem_1dcan_83",
9
+ purl: "_purl_1dcan_110"
10
+ };
11
+ //#endregion
12
+ export { e as default };
13
+
14
+ //# sourceMappingURL=AffectedPackage.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AffectedPackage.module.css.js","names":[],"sources":["../../../src/components/AffectedPackage/AffectedPackage.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.package {\n display: block;\n font-family: var(--gnome-font-family);\n}\n\n.surface {\n --affected-package-bg: #fff;\n --affected-package-fg: #241f31;\n --affected-package-muted-fg: #5e5c64;\n --affected-package-subtle-fg: #77767b;\n --affected-package-pill-bg: #deddda;\n --affected-package-pill-fg: #241f31;\n --affected-package-border: rgb(0 0 0 / 0.14);\n\n display: grid;\n box-sizing: border-box;\n gap: var(--gnome-space-4, 16px);\n min-width: min(100%, 320px);\n padding: var(--gnome-space-4, 16px);\n border: 1px solid var(--gnome-card-shade-color, var(--affected-package-border));\n border-radius: var(--gnome-radius-lg, 12px);\n background: var(--gnome-card-bg-color, var(--affected-package-bg));\n color: var(--affected-package-fg);\n font-family: var(--gnome-font-family);\n color-scheme: light;\n -webkit-text-fill-color: var(--affected-package-fg);\n}\n\n.surface *,\n.surface *::before,\n.surface *::after {\n box-sizing: border-box;\n}\n\n.header {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--gnome-space-3, 12px);\n min-width: 0;\n}\n\n.ecosystem {\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n min-height: 24px;\n padding: 2px 10px;\n border: 1px solid rgb(0 0 0 / 0.08);\n border-radius: 999px;\n background: var(--affected-package-pill-bg);\n color: var(--affected-package-pill-fg);\n font-size: 0.75rem;\n font-weight: 800;\n letter-spacing: 0.02em;\n line-height: 1.2;\n text-transform: uppercase;\n -webkit-text-fill-color: var(--affected-package-pill-fg);\n}\n\n.name {\n min-width: 0;\n color: var(--affected-package-fg);\n font-family: var(--gnome-monospace-font-family, monospace);\n font-size: 1rem;\n font-weight: 750;\n line-height: 1.25;\n overflow-wrap: anywhere;\n -webkit-text-fill-color: var(--affected-package-fg);\n}\n\n.meta {\n display: flex;\n flex-wrap: wrap;\n gap: var(--gnome-space-3, 12px) var(--gnome-space-5, 20px);\n min-width: 0;\n margin: 0;\n}\n\n.metaItem {\n display: grid;\n gap: 3px;\n min-width: 0;\n}\n\n.metaItem dt {\n color: var(--affected-package-subtle-fg);\n font-size: 0.6875rem;\n font-weight: 750;\n letter-spacing: 0.05em;\n line-height: 1.2;\n text-transform: uppercase;\n -webkit-text-fill-color: var(--affected-package-subtle-fg);\n}\n\n.metaItem dd {\n min-width: 0;\n margin: 0;\n color: var(--affected-package-fg);\n font-family: var(--gnome-monospace-font-family, monospace);\n font-size: 0.875rem;\n line-height: 1.35;\n overflow-wrap: anywhere;\n -webkit-text-fill-color: var(--affected-package-fg);\n}\n\n.purl {\n color: inherit;\n font: inherit;\n -webkit-text-fill-color: currentcolor;\n}\n\n@media (prefers-color-scheme: dark) {\n .surface {\n --affected-package-bg: rgb(36 36 36 / 0.88);\n --affected-package-fg: rgb(255 255 255 / 0.92);\n --affected-package-muted-fg: rgb(255 255 255 / 0.72);\n --affected-package-subtle-fg: rgb(255 255 255 / 0.62);\n --affected-package-pill-bg: rgb(255 255 255 / 0.1);\n --affected-package-pill-fg: rgb(255 255 255 / 0.92);\n --affected-package-border: rgb(255 255 255 / 0.14);\n\n border-color: var(--gnome-card-shade-color, var(--affected-package-border));\n background: var(--gnome-card-bg-color, var(--affected-package-bg));\n color-scheme: dark;\n }\n\n .ecosystem {\n border-color: rgb(255 255 255 / 0.12);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export type { AffectedPackageProps } from './AffectedPackage';
2
+ export { AffectedPackage } from './AffectedPackage';
3
+ export type { PackageCoordinate, PackageEcosystem } from './package';
4
+ export { formatPackageCoordinate, getPackageUrl } from './package';
@@ -0,0 +1,2 @@
1
+ function e({ecosystem:e,name:t,version:n}){return`${e}:${t}${n?`@${n}`:``}`}function t({ecosystem:e,name:t,version:n}){let r=encodeURIComponent(t),i=n?`@${encodeURIComponent(n)}`:``;return`pkg:${encodeURIComponent(e)}/${r}${i}`}exports.formatPackageCoordinate=e,exports.getPackageUrl=t;
2
+ //# sourceMappingURL=package.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.cjs","names":[],"sources":["../../../src/components/AffectedPackage/package.ts"],"sourcesContent":["export type PackageEcosystem =\n | 'alpine'\n | 'cargo'\n | 'composer'\n | 'deb'\n | 'generic'\n | 'gem'\n | 'go'\n | 'maven'\n | 'npm'\n | 'nuget'\n | 'pypi'\n | 'rpm';\n\nexport interface PackageCoordinate {\n ecosystem: PackageEcosystem | string;\n name: string;\n version?: string;\n}\n\nexport function formatPackageCoordinate({ ecosystem, name, version }: PackageCoordinate) {\n return `${ecosystem}:${name}${version ? `@${version}` : ''}`;\n}\n\nexport function getPackageUrl({ ecosystem, name, version }: PackageCoordinate) {\n const encodedName = encodeURIComponent(name);\n const encodedVersion = version ? `@${encodeURIComponent(version)}` : '';\n\n return `pkg:${encodeURIComponent(ecosystem)}/${encodedName}${encodedVersion}`;\n}\n"],"mappings":"AAoBA,SAAgB,EAAwB,CAAE,YAAW,OAAM,WAA8B,CACvF,MAAO,GAAG,EAAU,GAAG,IAAO,EAAU,IAAI,IAAY,IAC1D,CAEA,SAAgB,EAAc,CAAE,YAAW,OAAM,WAA8B,CAC7E,IAAM,EAAc,mBAAmB,CAAI,EACrC,EAAiB,EAAU,IAAI,mBAAmB,CAAO,IAAM,GAErE,MAAO,OAAO,mBAAmB,CAAS,EAAE,GAAG,IAAc,GAC/D"}
@@ -0,0 +1,8 @@
1
+ export type PackageEcosystem = 'alpine' | 'cargo' | 'composer' | 'deb' | 'generic' | 'gem' | 'go' | 'maven' | 'npm' | 'nuget' | 'pypi' | 'rpm';
2
+ export interface PackageCoordinate {
3
+ ecosystem: PackageEcosystem | string;
4
+ name: string;
5
+ version?: string;
6
+ }
7
+ export declare function formatPackageCoordinate({ ecosystem, name, version }: PackageCoordinate): string;
8
+ export declare function getPackageUrl({ ecosystem, name, version }: PackageCoordinate): string;
@@ -0,0 +1,12 @@
1
+ //#region src/components/AffectedPackage/package.ts
2
+ function e({ ecosystem: e, name: t, version: n }) {
3
+ return `${e}:${t}${n ? `@${n}` : ""}`;
4
+ }
5
+ function t({ ecosystem: e, name: t, version: n }) {
6
+ let r = encodeURIComponent(t), i = n ? `@${encodeURIComponent(n)}` : "";
7
+ return `pkg:${encodeURIComponent(e)}/${r}${i}`;
8
+ }
9
+ //#endregion
10
+ export { e as formatPackageCoordinate, t as getPackageUrl };
11
+
12
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","names":[],"sources":["../../../src/components/AffectedPackage/package.ts"],"sourcesContent":["export type PackageEcosystem =\n | 'alpine'\n | 'cargo'\n | 'composer'\n | 'deb'\n | 'generic'\n | 'gem'\n | 'go'\n | 'maven'\n | 'npm'\n | 'nuget'\n | 'pypi'\n | 'rpm';\n\nexport interface PackageCoordinate {\n ecosystem: PackageEcosystem | string;\n name: string;\n version?: string;\n}\n\nexport function formatPackageCoordinate({ ecosystem, name, version }: PackageCoordinate) {\n return `${ecosystem}:${name}${version ? `@${version}` : ''}`;\n}\n\nexport function getPackageUrl({ ecosystem, name, version }: PackageCoordinate) {\n const encodedName = encodeURIComponent(name);\n const encodedVersion = version ? `@${encodeURIComponent(version)}` : '';\n\n return `pkg:${encodeURIComponent(ecosystem)}/${encodedName}${encodedVersion}`;\n}\n"],"mappings":";AAoBA,SAAgB,EAAwB,EAAE,cAAW,SAAM,cAA8B;CACvF,OAAO,GAAG,EAAU,GAAG,IAAO,IAAU,IAAI,MAAY;AAC1D;AAEA,SAAgB,EAAc,EAAE,cAAW,SAAM,cAA8B;CAC7E,IAAM,IAAc,mBAAmB,CAAI,GACrC,IAAiB,IAAU,IAAI,mBAAmB,CAAO,MAAM;CAErE,OAAO,OAAO,mBAAmB,CAAS,EAAE,GAAG,IAAc;AAC/D"}
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./AffectedPackage/package.cjs"),t=require("./AffectedPackage/AffectedPackage.cjs");exports.AffectedPackage=t.AffectedPackage,exports.formatPackageCoordinate=e.formatPackageCoordinate,exports.getPackageUrl=e.getPackageUrl;
@@ -0,0 +1,2 @@
1
+ export * from './AffectedPackage/index'
2
+ export {}
@@ -0,0 +1,3 @@
1
+ import { formatPackageCoordinate as e, getPackageUrl as t } from "./AffectedPackage/package.js";
2
+ import { AffectedPackage as n } from "./AffectedPackage/AffectedPackage.js";
3
+ export { n as AffectedPackage, e as formatPackageCoordinate, t as getPackageUrl };
@@ -0,0 +1,2 @@
1
+ const e=require("./CveIdentifier.module.css.cjs"),t=require("./cve.cjs");let n=require("react/jsx-runtime");var r=({cveId:r,link:i=!0,source:a=`cve`,className:o,"aria-label":s,...c})=>{let l=t.normalizeCveId(r),u=t.isCveId(l),d=[e.default.identifier,u?null:e.default.invalid,o].filter(Boolean).join(` `);if(!i)return(0,n.jsx)(`span`,{...c,"aria-label":s??`${l} vulnerability identifier`,className:d,"data-valid":u?`true`:`false`,children:l});let{href:f,rel:p,target:m,...h}=c,g=f??t.getCveUrl(l,a);return(0,n.jsx)(`a`,{...h,"aria-label":s??`${l} vulnerability identifier`,className:d,"data-valid":u?`true`:`false`,href:g,rel:m===`_blank`?`noopener noreferrer`:p,target:m,children:l})};exports.CveIdentifier=r;
2
+ //# sourceMappingURL=CveIdentifier.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CveIdentifier.cjs","names":[],"sources":["../../../src/components/CveIdentifier/CveIdentifier.tsx"],"sourcesContent":["import type { AnchorHTMLAttributes, HTMLAttributes } from 'react';\n\nimport styles from './CveIdentifier.module.css';\nimport { type CveLinkSource, getCveUrl, isCveId, normalizeCveId } from './cve';\n\ntype CveIdentifierBaseProps = {\n /** CVE identifier, for example `CVE-2024-3094`. */\n cveId: string;\n};\n\nexport type CveIdentifierProps =\n | (CveIdentifierBaseProps &\n AnchorHTMLAttributes<HTMLAnchorElement> & {\n /** Whether to render as a link. Defaults to `true`. */\n link?: true;\n /** Vulnerability database used when `href` is omitted. */\n source?: CveLinkSource;\n })\n | (CveIdentifierBaseProps &\n HTMLAttributes<HTMLSpanElement> & {\n /** Render as static text instead of a link. */\n link: false;\n href?: never;\n source?: never;\n });\n\n/**\n * Monospace CVE identifier with optional link to CVE.org or NVD.\n */\nexport const CveIdentifier = ({\n cveId,\n link = true,\n source = 'cve',\n className,\n 'aria-label': ariaLabel,\n ...props\n}: CveIdentifierProps) => {\n const normalized = normalizeCveId(cveId);\n const valid = isCveId(normalized);\n const classes = [styles.identifier, valid ? null : styles.invalid, className]\n .filter(Boolean)\n .join(' ');\n\n if (!link) {\n return (\n <span\n {...props}\n aria-label={ariaLabel ?? `${normalized} vulnerability identifier`}\n className={classes}\n data-valid={valid ? 'true' : 'false'}\n >\n {normalized}\n </span>\n );\n }\n\n const {\n href: customHref,\n rel,\n target,\n ...anchorProps\n } = props as AnchorHTMLAttributes<HTMLAnchorElement>;\n const href = customHref ?? getCveUrl(normalized, source);\n\n return (\n <a\n {...anchorProps}\n aria-label={ariaLabel ?? `${normalized} vulnerability identifier`}\n className={classes}\n data-valid={valid ? 'true' : 'false'}\n href={href}\n rel={target === '_blank' ? 'noopener noreferrer' : rel}\n target={target}\n >\n {normalized}\n </a>\n );\n};\n"],"mappings":"4GA6BA,IAAa,GAAiB,CAC5B,QACA,OAAO,GACP,SAAS,MACT,YACA,aAAc,EACd,GAAG,KACqB,CACxB,IAAM,EAAa,EAAA,eAAe,CAAK,EACjC,EAAQ,EAAA,QAAQ,CAAU,EAC1B,EAAU,CAAC,EAAA,QAAO,WAAY,EAAQ,KAAO,EAAA,QAAO,QAAS,CAAS,EACzE,OAAO,OAAO,EACd,KAAK,GAAG,EAEX,GAAI,CAAC,EACH,OACE,EAAA,EAAA,KAAC,OAAD,CACE,GAAI,EACJ,aAAY,GAAa,GAAG,EAAW,2BACvC,UAAW,EACX,aAAY,EAAQ,OAAS,iBAE5B,CACG,CAAA,EAIV,GAAM,CACJ,KAAM,EACN,MACA,SACA,GAAG,GACD,EACE,EAAO,GAAc,EAAA,UAAU,EAAY,CAAM,EAEvD,OACE,EAAA,EAAA,KAAC,IAAD,CACE,GAAI,EACJ,aAAY,GAAa,GAAG,EAAW,2BACvC,UAAW,EACX,aAAY,EAAQ,OAAS,QACvB,OACN,IAAK,IAAW,SAAW,sBAAwB,EAC3C,kBAEP,CACA,CAAA,CAEP"}
@@ -0,0 +1,22 @@
1
+ import { AnchorHTMLAttributes, HTMLAttributes } from 'react';
2
+ import { CveLinkSource } from './cve';
3
+ type CveIdentifierBaseProps = {
4
+ /** CVE identifier, for example `CVE-2024-3094`. */
5
+ cveId: string;
6
+ };
7
+ export type CveIdentifierProps = (CveIdentifierBaseProps & AnchorHTMLAttributes<HTMLAnchorElement> & {
8
+ /** Whether to render as a link. Defaults to `true`. */
9
+ link?: true;
10
+ /** Vulnerability database used when `href` is omitted. */
11
+ source?: CveLinkSource;
12
+ }) | (CveIdentifierBaseProps & HTMLAttributes<HTMLSpanElement> & {
13
+ /** Render as static text instead of a link. */
14
+ link: false;
15
+ href?: never;
16
+ source?: never;
17
+ });
18
+ /**
19
+ * Monospace CVE identifier with optional link to CVE.org or NVD.
20
+ */
21
+ export declare const CveIdentifier: ({ cveId, link, source, className, "aria-label": ariaLabel, ...props }: CveIdentifierProps) => import("react/jsx-runtime").JSX.Element;
22
+ export {};
@@ -0,0 +1,33 @@
1
+ import e from "./CveIdentifier.module.css.js";
2
+ import { getCveUrl as t, isCveId as n, normalizeCveId as r } from "./cve.js";
3
+ import { jsx as i } from "react/jsx-runtime";
4
+ //#region src/components/CveIdentifier/CveIdentifier.tsx
5
+ var a = ({ cveId: a, link: o = !0, source: s = "cve", className: c, "aria-label": l, ...u }) => {
6
+ let d = r(a), f = n(d), p = [
7
+ e.identifier,
8
+ f ? null : e.invalid,
9
+ c
10
+ ].filter(Boolean).join(" ");
11
+ if (!o) return /* @__PURE__ */ i("span", {
12
+ ...u,
13
+ "aria-label": l ?? `${d} vulnerability identifier`,
14
+ className: p,
15
+ "data-valid": f ? "true" : "false",
16
+ children: d
17
+ });
18
+ let { href: m, rel: h, target: g, ..._ } = u, v = m ?? t(d, s);
19
+ return /* @__PURE__ */ i("a", {
20
+ ..._,
21
+ "aria-label": l ?? `${d} vulnerability identifier`,
22
+ className: p,
23
+ "data-valid": f ? "true" : "false",
24
+ href: v,
25
+ rel: g === "_blank" ? "noopener noreferrer" : h,
26
+ target: g,
27
+ children: d
28
+ });
29
+ };
30
+ //#endregion
31
+ export { a as CveIdentifier };
32
+
33
+ //# sourceMappingURL=CveIdentifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CveIdentifier.js","names":[],"sources":["../../../src/components/CveIdentifier/CveIdentifier.tsx"],"sourcesContent":["import type { AnchorHTMLAttributes, HTMLAttributes } from 'react';\n\nimport styles from './CveIdentifier.module.css';\nimport { type CveLinkSource, getCveUrl, isCveId, normalizeCveId } from './cve';\n\ntype CveIdentifierBaseProps = {\n /** CVE identifier, for example `CVE-2024-3094`. */\n cveId: string;\n};\n\nexport type CveIdentifierProps =\n | (CveIdentifierBaseProps &\n AnchorHTMLAttributes<HTMLAnchorElement> & {\n /** Whether to render as a link. Defaults to `true`. */\n link?: true;\n /** Vulnerability database used when `href` is omitted. */\n source?: CveLinkSource;\n })\n | (CveIdentifierBaseProps &\n HTMLAttributes<HTMLSpanElement> & {\n /** Render as static text instead of a link. */\n link: false;\n href?: never;\n source?: never;\n });\n\n/**\n * Monospace CVE identifier with optional link to CVE.org or NVD.\n */\nexport const CveIdentifier = ({\n cveId,\n link = true,\n source = 'cve',\n className,\n 'aria-label': ariaLabel,\n ...props\n}: CveIdentifierProps) => {\n const normalized = normalizeCveId(cveId);\n const valid = isCveId(normalized);\n const classes = [styles.identifier, valid ? null : styles.invalid, className]\n .filter(Boolean)\n .join(' ');\n\n if (!link) {\n return (\n <span\n {...props}\n aria-label={ariaLabel ?? `${normalized} vulnerability identifier`}\n className={classes}\n data-valid={valid ? 'true' : 'false'}\n >\n {normalized}\n </span>\n );\n }\n\n const {\n href: customHref,\n rel,\n target,\n ...anchorProps\n } = props as AnchorHTMLAttributes<HTMLAnchorElement>;\n const href = customHref ?? getCveUrl(normalized, source);\n\n return (\n <a\n {...anchorProps}\n aria-label={ariaLabel ?? `${normalized} vulnerability identifier`}\n className={classes}\n data-valid={valid ? 'true' : 'false'}\n href={href}\n rel={target === '_blank' ? 'noopener noreferrer' : rel}\n target={target}\n >\n {normalized}\n </a>\n );\n};\n"],"mappings":";;;;AA6BA,IAAa,KAAiB,EAC5B,UACA,UAAO,IACP,YAAS,OACT,cACA,cAAc,GACd,GAAG,QACqB;CACxB,IAAM,IAAa,EAAe,CAAK,GACjC,IAAQ,EAAQ,CAAU,GAC1B,IAAU;EAAC,EAAO;EAAY,IAAQ,OAAO,EAAO;EAAS;CAAS,EACzE,OAAO,OAAO,EACd,KAAK,GAAG;CAEX,IAAI,CAAC,GACH,OACE,kBAAC,QAAD;EACE,GAAI;EACJ,cAAY,KAAa,GAAG,EAAW;EACvC,WAAW;EACX,cAAY,IAAQ,SAAS;YAE5B;CACG,CAAA;CAIV,IAAM,EACJ,MAAM,GACN,QACA,WACA,GAAG,MACD,GACE,IAAO,KAAc,EAAU,GAAY,CAAM;CAEvD,OACE,kBAAC,KAAD;EACE,GAAI;EACJ,cAAY,KAAa,GAAG,EAAW;EACvC,WAAW;EACX,cAAY,IAAQ,SAAS;EACvB;EACN,KAAK,MAAW,WAAW,wBAAwB;EAC3C;YAEP;CACA,CAAA;AAEP"}
@@ -0,0 +1,2 @@
1
+ var e={identifier:`_identifier_u0824_3`,invalid:`_invalid_u0824_42`};exports.default=e;
2
+ //# sourceMappingURL=CveIdentifier.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CveIdentifier.module.css.cjs","names":[],"sources":["../../../src/components/CveIdentifier/CveIdentifier.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.identifier {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n padding: 2px 7px;\n border-radius: 6px;\n border: 1px solid var(--gnome-border-color, rgb(0 0 0 / 0.12));\n background-color: var(--gnome-hover-overlay, rgb(0 0 0 / 0.06));\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n font-family: SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 0.75rem;\n font-weight: 650;\n line-height: 1.35;\n text-decoration: none;\n white-space: nowrap;\n}\n\na.identifier {\n cursor: pointer;\n transition:\n background-color var(--gnome-duration-fast, 150ms) var(--gnome-easing-default, ease),\n border-color var(--gnome-duration-fast, 150ms) var(--gnome-easing-default, ease);\n}\n\na.identifier:hover {\n border-color: var(--gnome-accent-bg-color, #3584e4);\n background-color: var(--gnome-selected-overlay, rgb(53 132 228 / 0.14));\n}\n\n.identifier:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--gnome-focus-ring-offset, 2px) var(--gnome-window-bg-color, #fff),\n 0 0 0 calc(var(--gnome-focus-ring-offset, 2px) + var(--gnome-focus-ring-width, 2px))\n var(--gnome-focus-ring-color, #3584e4);\n}\n\n/* ─── Invalid identifier ──────────────────────────────────────────────────── */\n\n.invalid {\n border-color: var(--gnome-warning-bg-color, #f6d32d);\n background-color: rgb(246 211 45 / 0.2);\n}\n\n@media (prefers-color-scheme: dark) {\n .identifier {\n border-color: var(--gnome-border-color, rgb(255 255 255 / 0.14));\n background-color: var(--gnome-hover-overlay, rgb(255 255 255 / 0.08));\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.87));\n }\n\n .invalid {\n background-color: rgb(248 228 92 / 0.16);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n a.identifier {\n transition: none;\n }\n}\n"],"mappings":""}
@@ -0,0 +1,8 @@
1
+ var e = {
2
+ identifier: "_identifier_u0824_3",
3
+ invalid: "_invalid_u0824_42"
4
+ };
5
+ //#endregion
6
+ export { e as default };
7
+
8
+ //# sourceMappingURL=CveIdentifier.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CveIdentifier.module.css.js","names":[],"sources":["../../../src/components/CveIdentifier/CveIdentifier.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.identifier {\n display: inline-flex;\n align-items: center;\n vertical-align: middle;\n padding: 2px 7px;\n border-radius: 6px;\n border: 1px solid var(--gnome-border-color, rgb(0 0 0 / 0.12));\n background-color: var(--gnome-hover-overlay, rgb(0 0 0 / 0.06));\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n font-family: SFMono-Regular, Consolas, \"Liberation Mono\", Menlo, monospace;\n font-size: 0.75rem;\n font-weight: 650;\n line-height: 1.35;\n text-decoration: none;\n white-space: nowrap;\n}\n\na.identifier {\n cursor: pointer;\n transition:\n background-color var(--gnome-duration-fast, 150ms) var(--gnome-easing-default, ease),\n border-color var(--gnome-duration-fast, 150ms) var(--gnome-easing-default, ease);\n}\n\na.identifier:hover {\n border-color: var(--gnome-accent-bg-color, #3584e4);\n background-color: var(--gnome-selected-overlay, rgb(53 132 228 / 0.14));\n}\n\n.identifier:focus-visible {\n outline: none;\n box-shadow:\n 0 0 0 var(--gnome-focus-ring-offset, 2px) var(--gnome-window-bg-color, #fff),\n 0 0 0 calc(var(--gnome-focus-ring-offset, 2px) + var(--gnome-focus-ring-width, 2px))\n var(--gnome-focus-ring-color, #3584e4);\n}\n\n/* ─── Invalid identifier ──────────────────────────────────────────────────── */\n\n.invalid {\n border-color: var(--gnome-warning-bg-color, #f6d32d);\n background-color: rgb(246 211 45 / 0.2);\n}\n\n@media (prefers-color-scheme: dark) {\n .identifier {\n border-color: var(--gnome-border-color, rgb(255 255 255 / 0.14));\n background-color: var(--gnome-hover-overlay, rgb(255 255 255 / 0.08));\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.87));\n }\n\n .invalid {\n background-color: rgb(248 228 92 / 0.16);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n a.identifier {\n transition: none;\n }\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ var e=/^CVE-(\d{4})-(\d{4,})$/i;function t(e){return e.trim().toUpperCase()}function n(n){return e.test(t(n))}function r(n){let r=t(n).match(e);return r?Number(r[1]):null}function i(e,n=`cve`){let r=t(e);return n===`nvd`?`https://nvd.nist.gov/vuln/detail/${encodeURIComponent(r)}`:`https://www.cve.org/CVERecord?id=${encodeURIComponent(r)}`}exports.CVE_ID_PATTERN=e,exports.getCveUrl=i,exports.getCveYear=r,exports.isCveId=n,exports.normalizeCveId=t;
2
+ //# sourceMappingURL=cve.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cve.cjs","names":[],"sources":["../../../src/components/CveIdentifier/cve.ts"],"sourcesContent":["export type CveLinkSource = 'cve' | 'nvd';\n\nexport const CVE_ID_PATTERN = /^CVE-(\\d{4})-(\\d{4,})$/i;\n\nexport function normalizeCveId(cveId: string) {\n return cveId.trim().toUpperCase();\n}\n\nexport function isCveId(cveId: string) {\n return CVE_ID_PATTERN.test(normalizeCveId(cveId));\n}\n\nexport function getCveYear(cveId: string) {\n const match = normalizeCveId(cveId).match(CVE_ID_PATTERN);\n\n return match ? Number(match[1]) : null;\n}\n\nexport function getCveUrl(cveId: string, source: CveLinkSource = 'cve') {\n const normalized = normalizeCveId(cveId);\n\n if (source === 'nvd') {\n return `https://nvd.nist.gov/vuln/detail/${encodeURIComponent(normalized)}`;\n }\n\n return `https://www.cve.org/CVERecord?id=${encodeURIComponent(normalized)}`;\n}\n"],"mappings":"AAEA,IAAa,EAAiB,0BAE9B,SAAgB,EAAe,EAAe,CAC5C,OAAO,EAAM,KAAK,EAAE,YAAY,CAClC,CAEA,SAAgB,EAAQ,EAAe,CACrC,OAAO,EAAe,KAAK,EAAe,CAAK,CAAC,CAClD,CAEA,SAAgB,EAAW,EAAe,CACxC,IAAM,EAAQ,EAAe,CAAK,EAAE,MAAM,CAAc,EAExD,OAAO,EAAQ,OAAO,EAAM,EAAE,EAAI,IACpC,CAEA,SAAgB,EAAU,EAAe,EAAwB,MAAO,CACtE,IAAM,EAAa,EAAe,CAAK,EAMvC,OAJI,IAAW,MACN,oCAAoC,mBAAmB,CAAU,IAGnE,oCAAoC,mBAAmB,CAAU,GAC1E"}
@@ -0,0 +1,6 @@
1
+ export type CveLinkSource = 'cve' | 'nvd';
2
+ export declare const CVE_ID_PATTERN: RegExp;
3
+ export declare function normalizeCveId(cveId: string): string;
4
+ export declare function isCveId(cveId: string): boolean;
5
+ export declare function getCveYear(cveId: string): number | null;
6
+ export declare function getCveUrl(cveId: string, source?: CveLinkSource): string;
@@ -0,0 +1,20 @@
1
+ //#region src/components/CveIdentifier/cve.ts
2
+ var e = /^CVE-(\d{4})-(\d{4,})$/i;
3
+ function t(e) {
4
+ return e.trim().toUpperCase();
5
+ }
6
+ function n(n) {
7
+ return e.test(t(n));
8
+ }
9
+ function r(n) {
10
+ let r = t(n).match(e);
11
+ return r ? Number(r[1]) : null;
12
+ }
13
+ function i(e, n = "cve") {
14
+ let r = t(e);
15
+ return n === "nvd" ? `https://nvd.nist.gov/vuln/detail/${encodeURIComponent(r)}` : `https://www.cve.org/CVERecord?id=${encodeURIComponent(r)}`;
16
+ }
17
+ //#endregion
18
+ export { e as CVE_ID_PATTERN, i as getCveUrl, r as getCveYear, n as isCveId, t as normalizeCveId };
19
+
20
+ //# sourceMappingURL=cve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cve.js","names":[],"sources":["../../../src/components/CveIdentifier/cve.ts"],"sourcesContent":["export type CveLinkSource = 'cve' | 'nvd';\n\nexport const CVE_ID_PATTERN = /^CVE-(\\d{4})-(\\d{4,})$/i;\n\nexport function normalizeCveId(cveId: string) {\n return cveId.trim().toUpperCase();\n}\n\nexport function isCveId(cveId: string) {\n return CVE_ID_PATTERN.test(normalizeCveId(cveId));\n}\n\nexport function getCveYear(cveId: string) {\n const match = normalizeCveId(cveId).match(CVE_ID_PATTERN);\n\n return match ? Number(match[1]) : null;\n}\n\nexport function getCveUrl(cveId: string, source: CveLinkSource = 'cve') {\n const normalized = normalizeCveId(cveId);\n\n if (source === 'nvd') {\n return `https://nvd.nist.gov/vuln/detail/${encodeURIComponent(normalized)}`;\n }\n\n return `https://www.cve.org/CVERecord?id=${encodeURIComponent(normalized)}`;\n}\n"],"mappings":";AAEA,IAAa,IAAiB;AAE9B,SAAgB,EAAe,GAAe;CAC5C,OAAO,EAAM,KAAK,EAAE,YAAY;AAClC;AAEA,SAAgB,EAAQ,GAAe;CACrC,OAAO,EAAe,KAAK,EAAe,CAAK,CAAC;AAClD;AAEA,SAAgB,EAAW,GAAe;CACxC,IAAM,IAAQ,EAAe,CAAK,EAAE,MAAM,CAAc;CAExD,OAAO,IAAQ,OAAO,EAAM,EAAE,IAAI;AACpC;AAEA,SAAgB,EAAU,GAAe,IAAwB,OAAO;CACtE,IAAM,IAAa,EAAe,CAAK;CAMvC,OAJI,MAAW,QACN,oCAAoC,mBAAmB,CAAU,MAGnE,oCAAoC,mBAAmB,CAAU;AAC1E"}
@@ -0,0 +1,4 @@
1
+ export type { CveIdentifierProps } from './CveIdentifier';
2
+ export { CveIdentifier } from './CveIdentifier';
3
+ export type { CveLinkSource } from './cve';
4
+ export { CVE_ID_PATTERN, getCveUrl, getCveYear, isCveId, normalizeCveId } from './cve';
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./CveIdentifier/cve.cjs"),t=require("./CveIdentifier/CveIdentifier.cjs");exports.CVE_ID_PATTERN=e.CVE_ID_PATTERN,exports.CveIdentifier=t.CveIdentifier,exports.getCveUrl=e.getCveUrl,exports.getCveYear=e.getCveYear,exports.isCveId=e.isCveId,exports.normalizeCveId=e.normalizeCveId;
@@ -0,0 +1,2 @@
1
+ export * from './CveIdentifier/index'
2
+ export {}
@@ -0,0 +1,3 @@
1
+ import { CVE_ID_PATTERN as e, getCveUrl as t, getCveYear as n, isCveId as r, normalizeCveId as i } from "./CveIdentifier/cve.js";
2
+ import { CveIdentifier as a } from "./CveIdentifier/CveIdentifier.js";
3
+ export { e as CVE_ID_PATTERN, a as CveIdentifier, t as getCveUrl, n as getCveYear, r as isCveId, i as normalizeCveId };
@@ -0,0 +1,2 @@
1
+ const e=require("../SeverityBadge/SeverityBadge.cjs"),t=require("./CvssScore.module.css.cjs"),n=require("./cvss.cjs");let r=require("react/jsx-runtime");var i=({score:i,severity:a,showSeverity:o=!0,className:s,"aria-label":c,...l})=>{let u=n.formatCvssScore(i),d=a??n.getCvssSeverity(i);return(0,r.jsxs)(`div`,{"aria-label":c??`CVSS score ${u}, ${d} severity`,className:[t.default.root,t.default[d],s].filter(Boolean).join(` `),"data-severity":d,...l,children:[(0,r.jsx)(`span`,{className:t.default.score,children:u}),(0,r.jsx)(`span`,{className:t.default.max,children:`/10`}),o?(0,r.jsx)(e.SeverityBadge,{severity:d}):null]})};exports.CvssScore=i;
2
+ //# sourceMappingURL=CvssScore.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CvssScore.cjs","names":[],"sources":["../../../src/components/CvssScore/CvssScore.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\n\nimport { SeverityBadge, type VulnerabilitySeverity } from '../SeverityBadge';\n\nimport styles from './CvssScore.module.css';\nimport { formatCvssScore, getCvssSeverity } from './cvss';\n\nexport interface CvssScoreProps extends HTMLAttributes<HTMLDivElement> {\n /** CVSS base score. Values outside 0–10 are clamped for display. */\n score: number;\n /**\n * Overrides the derived severity.\n *\n * CVSS-derived severities use `none`, `low`, `medium`, `high`, and\n * `critical`. Pass `minimal` only when showing a scanner-provided severity\n * that is not derived from the CVSS qualitative rating.\n */\n severity?: VulnerabilitySeverity;\n /** Whether to show the textual severity badge next to the score. */\n showSeverity?: boolean;\n}\n\n/**\n * Compact CVSS score display for vulnerability tables, findings, and summaries.\n */\nexport const CvssScore = ({\n score,\n severity,\n showSeverity = true,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: CvssScoreProps) => {\n const displayedScore = formatCvssScore(score);\n const resolvedSeverity = severity ?? getCvssSeverity(score);\n\n return (\n <div\n aria-label={ariaLabel ?? `CVSS score ${displayedScore}, ${resolvedSeverity} severity`}\n className={[styles.root, styles[resolvedSeverity], className].filter(Boolean).join(' ')}\n data-severity={resolvedSeverity}\n {...props}\n >\n <span className={styles.score}>{displayedScore}</span>\n <span className={styles.max}>/10</span>\n {showSeverity ? <SeverityBadge severity={resolvedSeverity} /> : null}\n </div>\n );\n};\n"],"mappings":"yJAyBA,IAAa,GAAa,CACxB,QACA,WACA,eAAe,GACf,YACA,aAAc,EACd,GAAG,KACiB,CACpB,IAAM,EAAiB,EAAA,gBAAgB,CAAK,EACtC,EAAmB,GAAY,EAAA,gBAAgB,CAAK,EAE1D,OACE,EAAA,EAAA,MAAC,MAAD,CACE,aAAY,GAAa,cAAc,EAAe,IAAI,EAAiB,WAC3E,UAAW,CAAC,EAAA,QAAO,KAAM,EAAA,QAAO,GAAmB,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EACtF,gBAAe,EACf,GAAI,WAJN,EAME,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,eAAQ,CAAqB,CAAA,GACrD,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,aAAK,KAAS,CAAA,EACrC,GAAe,EAAA,EAAA,KAAC,EAAA,cAAD,CAAe,SAAU,CAAmB,CAAA,EAAI,IAC7D,GAET"}
@@ -0,0 +1,20 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { VulnerabilitySeverity } from '../SeverityBadge';
3
+ export interface CvssScoreProps extends HTMLAttributes<HTMLDivElement> {
4
+ /** CVSS base score. Values outside 0–10 are clamped for display. */
5
+ score: number;
6
+ /**
7
+ * Overrides the derived severity.
8
+ *
9
+ * CVSS-derived severities use `none`, `low`, `medium`, `high`, and
10
+ * `critical`. Pass `minimal` only when showing a scanner-provided severity
11
+ * that is not derived from the CVSS qualitative rating.
12
+ */
13
+ severity?: VulnerabilitySeverity;
14
+ /** Whether to show the textual severity badge next to the score. */
15
+ showSeverity?: boolean;
16
+ }
17
+ /**
18
+ * Compact CVSS score display for vulnerability tables, findings, and summaries.
19
+ */
20
+ export declare const CvssScore: ({ score, severity, showSeverity, className, "aria-label": ariaLabel, ...props }: CvssScoreProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,33 @@
1
+ import { SeverityBadge as e } from "../SeverityBadge/SeverityBadge.js";
2
+ import t from "./CvssScore.module.css.js";
3
+ import { formatCvssScore as n, getCvssSeverity as r } from "./cvss.js";
4
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ //#region src/components/CvssScore/CvssScore.tsx
6
+ var o = ({ score: o, severity: s, showSeverity: c = !0, className: l, "aria-label": u, ...d }) => {
7
+ let f = n(o), p = s ?? r(o);
8
+ return /* @__PURE__ */ a("div", {
9
+ "aria-label": u ?? `CVSS score ${f}, ${p} severity`,
10
+ className: [
11
+ t.root,
12
+ t[p],
13
+ l
14
+ ].filter(Boolean).join(" "),
15
+ "data-severity": p,
16
+ ...d,
17
+ children: [
18
+ /* @__PURE__ */ i("span", {
19
+ className: t.score,
20
+ children: f
21
+ }),
22
+ /* @__PURE__ */ i("span", {
23
+ className: t.max,
24
+ children: "/10"
25
+ }),
26
+ c ? /* @__PURE__ */ i(e, { severity: p }) : null
27
+ ]
28
+ });
29
+ };
30
+ //#endregion
31
+ export { o as CvssScore };
32
+
33
+ //# sourceMappingURL=CvssScore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CvssScore.js","names":[],"sources":["../../../src/components/CvssScore/CvssScore.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\n\nimport { SeverityBadge, type VulnerabilitySeverity } from '../SeverityBadge';\n\nimport styles from './CvssScore.module.css';\nimport { formatCvssScore, getCvssSeverity } from './cvss';\n\nexport interface CvssScoreProps extends HTMLAttributes<HTMLDivElement> {\n /** CVSS base score. Values outside 0–10 are clamped for display. */\n score: number;\n /**\n * Overrides the derived severity.\n *\n * CVSS-derived severities use `none`, `low`, `medium`, `high`, and\n * `critical`. Pass `minimal` only when showing a scanner-provided severity\n * that is not derived from the CVSS qualitative rating.\n */\n severity?: VulnerabilitySeverity;\n /** Whether to show the textual severity badge next to the score. */\n showSeverity?: boolean;\n}\n\n/**\n * Compact CVSS score display for vulnerability tables, findings, and summaries.\n */\nexport const CvssScore = ({\n score,\n severity,\n showSeverity = true,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: CvssScoreProps) => {\n const displayedScore = formatCvssScore(score);\n const resolvedSeverity = severity ?? getCvssSeverity(score);\n\n return (\n <div\n aria-label={ariaLabel ?? `CVSS score ${displayedScore}, ${resolvedSeverity} severity`}\n className={[styles.root, styles[resolvedSeverity], className].filter(Boolean).join(' ')}\n data-severity={resolvedSeverity}\n {...props}\n >\n <span className={styles.score}>{displayedScore}</span>\n <span className={styles.max}>/10</span>\n {showSeverity ? <SeverityBadge severity={resolvedSeverity} /> : null}\n </div>\n );\n};\n"],"mappings":";;;;;AAyBA,IAAa,KAAa,EACxB,UACA,aACA,kBAAe,IACf,cACA,cAAc,GACd,GAAG,QACiB;CACpB,IAAM,IAAiB,EAAgB,CAAK,GACtC,IAAmB,KAAY,EAAgB,CAAK;CAE1D,OACE,kBAAC,OAAD;EACE,cAAY,KAAa,cAAc,EAAe,IAAI,EAAiB;EAC3E,WAAW;GAAC,EAAO;GAAM,EAAO;GAAmB;EAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;EACtF,iBAAe;EACf,GAAI;YAJN;GAME,kBAAC,QAAD;IAAM,WAAW,EAAO;cAAQ;GAAqB,CAAA;GACrD,kBAAC,QAAD;IAAM,WAAW,EAAO;cAAK;GAAS,CAAA;GACrC,IAAe,kBAAC,GAAD,EAAe,UAAU,EAAmB,CAAA,IAAI;EAC7D;;AAET"}
@@ -0,0 +1,2 @@
1
+ var e={root:`_root_1gcqg_3`,score:`_score_1gcqg_13`,max:`_max_1gcqg_20`,none:`_none_1gcqg_30`,minimal:`_minimal_1gcqg_34`,low:`_low_1gcqg_35`,medium:`_medium_1gcqg_39`,high:`_high_1gcqg_43`,critical:`_critical_1gcqg_47`};exports.default=e;
2
+ //# sourceMappingURL=CvssScore.module.css.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CvssScore.module.css.cjs","names":[],"sources":["../../../src/components/CvssScore/CvssScore.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.root {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n vertical-align: middle;\n font-family: var(--gnome-font-family);\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n white-space: nowrap;\n}\n\n.score {\n font-variant-numeric: tabular-nums;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1;\n}\n\n.max {\n margin-inline-start: -4px;\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.55));\n font-size: 0.75rem;\n font-weight: 600;\n line-height: 1;\n}\n\n/* ─── Severity accent ─────────────────────────────────────────────────────── */\n\n.none .score {\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.55));\n}\n\n.minimal .score,\n.low .score {\n color: var(--gnome-blue-4, #1c71d8);\n}\n\n.medium .score {\n color: var(--gnome-yellow-5, #9c6e03);\n}\n\n.high .score {\n color: var(--gnome-orange-4, #e66100);\n}\n\n.critical .score {\n color: var(--gnome-error-bg-color, #e01b24);\n}\n\n@media (prefers-color-scheme: dark) {\n .root {\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.87));\n }\n\n .max,\n .none .score {\n color: var(--gnome-secondary-fg-color, rgb(255 255 255 / 0.55));\n }\n\n .medium .score {\n color: var(--gnome-yellow-2, #f8e45c);\n }\n\n .high .score {\n color: var(--gnome-orange-2, #ffbe6f);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,15 @@
1
+ var e = {
2
+ root: "_root_1gcqg_3",
3
+ score: "_score_1gcqg_13",
4
+ max: "_max_1gcqg_20",
5
+ none: "_none_1gcqg_30",
6
+ minimal: "_minimal_1gcqg_34",
7
+ low: "_low_1gcqg_35",
8
+ medium: "_medium_1gcqg_39",
9
+ high: "_high_1gcqg_43",
10
+ critical: "_critical_1gcqg_47"
11
+ };
12
+ //#endregion
13
+ export { e as default };
14
+
15
+ //# sourceMappingURL=CvssScore.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CvssScore.module.css.js","names":[],"sources":["../../../src/components/CvssScore/CvssScore.module.css"],"sourcesContent":["/* ─── Base ────────────────────────────────────────────────────────────────── */\n\n.root {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n vertical-align: middle;\n font-family: var(--gnome-font-family);\n color: var(--gnome-window-fg-color, rgb(0 0 0 / 0.8));\n white-space: nowrap;\n}\n\n.score {\n font-variant-numeric: tabular-nums;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1;\n}\n\n.max {\n margin-inline-start: -4px;\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.55));\n font-size: 0.75rem;\n font-weight: 600;\n line-height: 1;\n}\n\n/* ─── Severity accent ─────────────────────────────────────────────────────── */\n\n.none .score {\n color: var(--gnome-secondary-fg-color, rgb(0 0 0 / 0.55));\n}\n\n.minimal .score,\n.low .score {\n color: var(--gnome-blue-4, #1c71d8);\n}\n\n.medium .score {\n color: var(--gnome-yellow-5, #9c6e03);\n}\n\n.high .score {\n color: var(--gnome-orange-4, #e66100);\n}\n\n.critical .score {\n color: var(--gnome-error-bg-color, #e01b24);\n}\n\n@media (prefers-color-scheme: dark) {\n .root {\n color: var(--gnome-window-fg-color, rgb(255 255 255 / 0.87));\n }\n\n .max,\n .none .score {\n color: var(--gnome-secondary-fg-color, rgb(255 255 255 / 0.55));\n }\n\n .medium .score {\n color: var(--gnome-yellow-2, #f8e45c);\n }\n\n .high .score {\n color: var(--gnome-orange-2, #ffbe6f);\n }\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+ var e=0,t=10;function n(e){return Number.isNaN(e)?0:Math.min(10,Math.max(0,e))}function r(e){let t=n(e);return t===0?`none`:t<4?`low`:t<7?`medium`:t<9?`high`:`critical`}function i(e){return n(e).toFixed(1)}exports.CVSS_SCORE_MAX=t,exports.CVSS_SCORE_MIN=e,exports.clampCvssScore=n,exports.formatCvssScore=i,exports.getCvssSeverity=r;
2
+ //# sourceMappingURL=cvss.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cvss.cjs","names":[],"sources":["../../../src/components/CvssScore/cvss.ts"],"sourcesContent":["import type { VulnerabilitySeverity } from '../SeverityBadge';\n\nexport type CvssSeverity = Exclude<VulnerabilitySeverity, 'minimal'>;\n\nexport const CVSS_SCORE_MIN = 0;\nexport const CVSS_SCORE_MAX = 10;\n\nexport function clampCvssScore(score: number) {\n if (Number.isNaN(score)) {\n return CVSS_SCORE_MIN;\n }\n\n return Math.min(CVSS_SCORE_MAX, Math.max(CVSS_SCORE_MIN, score));\n}\n\nexport function getCvssSeverity(score: number): CvssSeverity {\n const clamped = clampCvssScore(score);\n\n if (clamped === 0) {\n return 'none';\n }\n\n if (clamped < 4) {\n return 'low';\n }\n\n if (clamped < 7) {\n return 'medium';\n }\n\n if (clamped < 9) {\n return 'high';\n }\n\n return 'critical';\n}\n\nexport function formatCvssScore(score: number) {\n return clampCvssScore(score).toFixed(1);\n}\n"],"mappings":"AAIA,IAAa,EAAiB,EACjB,EAAiB,GAE9B,SAAgB,EAAe,EAAe,CAK5C,OAJI,OAAO,MAAM,CAAK,EACpB,EAGK,KAAK,IAAA,GAAoB,KAAK,IAAA,EAAoB,CAAK,CAAC,CACjE,CAEA,SAAgB,EAAgB,EAA6B,CAC3D,IAAM,EAAU,EAAe,CAAK,EAkBpC,OAhBI,IAAY,EACP,OAGL,EAAU,EACL,MAGL,EAAU,EACL,SAGL,EAAU,EACL,OAGF,UACT,CAEA,SAAgB,EAAgB,EAAe,CAC7C,OAAO,EAAe,CAAK,EAAE,QAAQ,CAAC,CACxC"}
@@ -0,0 +1,7 @@
1
+ import { VulnerabilitySeverity } from '../SeverityBadge';
2
+ export type CvssSeverity = Exclude<VulnerabilitySeverity, 'minimal'>;
3
+ export declare const CVSS_SCORE_MIN = 0;
4
+ export declare const CVSS_SCORE_MAX = 10;
5
+ export declare function clampCvssScore(score: number): number;
6
+ export declare function getCvssSeverity(score: number): CvssSeverity;
7
+ export declare function formatCvssScore(score: number): string;
@@ -0,0 +1,16 @@
1
+ //#region src/components/CvssScore/cvss.ts
2
+ var e = 0, t = 10;
3
+ function n(e) {
4
+ return Number.isNaN(e) ? 0 : Math.min(10, Math.max(0, e));
5
+ }
6
+ function r(e) {
7
+ let t = n(e);
8
+ return t === 0 ? "none" : t < 4 ? "low" : t < 7 ? "medium" : t < 9 ? "high" : "critical";
9
+ }
10
+ function i(e) {
11
+ return n(e).toFixed(1);
12
+ }
13
+ //#endregion
14
+ export { t as CVSS_SCORE_MAX, e as CVSS_SCORE_MIN, n as clampCvssScore, i as formatCvssScore, r as getCvssSeverity };
15
+
16
+ //# sourceMappingURL=cvss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cvss.js","names":[],"sources":["../../../src/components/CvssScore/cvss.ts"],"sourcesContent":["import type { VulnerabilitySeverity } from '../SeverityBadge';\n\nexport type CvssSeverity = Exclude<VulnerabilitySeverity, 'minimal'>;\n\nexport const CVSS_SCORE_MIN = 0;\nexport const CVSS_SCORE_MAX = 10;\n\nexport function clampCvssScore(score: number) {\n if (Number.isNaN(score)) {\n return CVSS_SCORE_MIN;\n }\n\n return Math.min(CVSS_SCORE_MAX, Math.max(CVSS_SCORE_MIN, score));\n}\n\nexport function getCvssSeverity(score: number): CvssSeverity {\n const clamped = clampCvssScore(score);\n\n if (clamped === 0) {\n return 'none';\n }\n\n if (clamped < 4) {\n return 'low';\n }\n\n if (clamped < 7) {\n return 'medium';\n }\n\n if (clamped < 9) {\n return 'high';\n }\n\n return 'critical';\n}\n\nexport function formatCvssScore(score: number) {\n return clampCvssScore(score).toFixed(1);\n}\n"],"mappings":";AAIA,IAAa,IAAiB,GACjB,IAAiB;AAE9B,SAAgB,EAAe,GAAe;CAK5C,OAJI,OAAO,MAAM,CAAK,IACpB,IAGK,KAAK,IAAA,IAAoB,KAAK,IAAA,GAAoB,CAAK,CAAC;AACjE;AAEA,SAAgB,EAAgB,GAA6B;CAC3D,IAAM,IAAU,EAAe,CAAK;CAkBpC,OAhBI,MAAY,IACP,SAGL,IAAU,IACL,QAGL,IAAU,IACL,WAGL,IAAU,IACL,SAGF;AACT;AAEA,SAAgB,EAAgB,GAAe;CAC7C,OAAO,EAAe,CAAK,EAAE,QAAQ,CAAC;AACxC"}
@@ -0,0 +1,4 @@
1
+ export type { CvssScoreProps } from './CvssScore';
2
+ export { CvssScore } from './CvssScore';
3
+ export type { CvssSeverity } from './cvss';
4
+ export { CVSS_SCORE_MAX, CVSS_SCORE_MIN, clampCvssScore, formatCvssScore, getCvssSeverity, } from './cvss';
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./CvssScore/cvss.cjs"),t=require("./CvssScore/CvssScore.cjs");exports.CVSS_SCORE_MAX=e.CVSS_SCORE_MAX,exports.CVSS_SCORE_MIN=e.CVSS_SCORE_MIN,exports.CvssScore=t.CvssScore,exports.clampCvssScore=e.clampCvssScore,exports.formatCvssScore=e.formatCvssScore,exports.getCvssSeverity=e.getCvssSeverity;
@@ -0,0 +1,2 @@
1
+ export * from './CvssScore/index'
2
+ export {}
@@ -0,0 +1,3 @@
1
+ import { CVSS_SCORE_MAX as e, CVSS_SCORE_MIN as t, clampCvssScore as n, formatCvssScore as r, getCvssSeverity as i } from "./CvssScore/cvss.js";
2
+ import { CvssScore as a } from "./CvssScore/CvssScore.js";
3
+ export { e as CVSS_SCORE_MAX, t as CVSS_SCORE_MIN, a as CvssScore, n as clampCvssScore, r as formatCvssScore, i as getCvssSeverity };
@@ -0,0 +1,2 @@
1
+ const e=require("./CvssVector.module.css.cjs"),t=require("./vector.cjs");let n=require("react/jsx-runtime");var r=({vector:r,showVector:i=!0,showMetrics:a=!0,className:o,"aria-label":s,...c})=>{let l=t.parseCvssVector(r),u=l.metrics.map(e=>`${e.label} ${e.valueLabel}`).join(`, `);return(0,n.jsxs)(`div`,{"aria-label":s??`CVSS vector${l.version?` ${l.version}`:``}`,className:[e.default.root,o].filter(Boolean).join(` `),"data-valid":l.valid?`true`:`false`,"data-version":l.version,...c,children:[i?(0,n.jsx)(`code`,{className:e.default.vector,children:r}):null,a&&l.metrics.length>0?(0,n.jsx)(`dl`,{"aria-label":u,className:e.default.metrics,children:l.metrics.map(t=>(0,n.jsxs)(`div`,{className:e.default.metric,"data-known":t.known?`true`:`false`,children:[(0,n.jsx)(`dt`,{className:e.default.metricLabel,children:t.label}),(0,n.jsxs)(`dd`,{className:e.default.metricValue,children:[(0,n.jsxs)(`span`,{"aria-hidden":`true`,className:e.default.metricCode,children:[t.key,`:`,t.value]}),(0,n.jsx)(`span`,{children:t.valueLabel})]})]},`${t.key}:${t.value}`))}):null]})};exports.CvssVector=r;
2
+ //# sourceMappingURL=CvssVector.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CvssVector.cjs","names":[],"sources":["../../../src/components/CvssVector/CvssVector.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\n\nimport styles from './CvssVector.module.css';\nimport { parseCvssVector } from './vector';\n\nexport interface CvssVectorProps extends HTMLAttributes<HTMLDivElement> {\n /** CVSS vector string, for example `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H`. */\n vector: string;\n /** Whether to render the raw vector string. */\n showVector?: boolean;\n /** Whether to render expanded metric labels. */\n showMetrics?: boolean;\n}\n\n/**\n * Readable CVSS vector display for vulnerability reports and scan details.\n */\nexport const CvssVector = ({\n vector,\n showVector = true,\n showMetrics = true,\n className,\n 'aria-label': ariaLabel,\n ...props\n}: CvssVectorProps) => {\n const parsed = parseCvssVector(vector);\n const metricsLabel = parsed.metrics\n .map((metric) => `${metric.label} ${metric.valueLabel}`)\n .join(', ');\n\n return (\n <div\n aria-label={ariaLabel ?? `CVSS vector${parsed.version ? ` ${parsed.version}` : ''}`}\n className={[styles.root, className].filter(Boolean).join(' ')}\n data-valid={parsed.valid ? 'true' : 'false'}\n data-version={parsed.version}\n {...props}\n >\n {showVector ? <code className={styles.vector}>{vector}</code> : null}\n {showMetrics && parsed.metrics.length > 0 ? (\n <dl aria-label={metricsLabel} className={styles.metrics}>\n {parsed.metrics.map((metric) => (\n <div\n className={styles.metric}\n data-known={metric.known ? 'true' : 'false'}\n key={`${metric.key}:${metric.value}`}\n >\n <dt className={styles.metricLabel}>{metric.label}</dt>\n <dd className={styles.metricValue}>\n <span aria-hidden=\"true\" className={styles.metricCode}>\n {metric.key}:{metric.value}\n </span>\n <span>{metric.valueLabel}</span>\n </dd>\n </div>\n ))}\n </dl>\n ) : null}\n </div>\n );\n};\n"],"mappings":"4GAiBA,IAAa,GAAc,CACzB,SACA,aAAa,GACb,cAAc,GACd,YACA,aAAc,EACd,GAAG,KACkB,CACrB,IAAM,EAAS,EAAA,gBAAgB,CAAM,EAC/B,EAAe,EAAO,QACzB,IAAK,GAAW,GAAG,EAAO,MAAM,GAAG,EAAO,YAAY,EACtD,KAAK,IAAI,EAEZ,OACE,EAAA,EAAA,MAAC,MAAD,CACE,aAAY,GAAa,cAAc,EAAO,QAAU,IAAI,EAAO,UAAY,KAC/E,UAAW,CAAC,EAAA,QAAO,KAAM,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAC5D,aAAY,EAAO,MAAQ,OAAS,QACpC,eAAc,EAAO,QACrB,GAAI,WALN,CAOG,GAAa,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,QAAO,gBAAS,CAAa,CAAA,EAAI,KAC/D,GAAe,EAAO,QAAQ,OAAS,GACtC,EAAA,EAAA,KAAC,KAAD,CAAI,aAAY,EAAc,UAAW,EAAA,QAAO,iBAC7C,EAAO,QAAQ,IAAK,IACnB,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAA,QAAO,OAClB,aAAY,EAAO,MAAQ,OAAS,iBAFtC,EAKE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAW,EAAA,QAAO,qBAAc,EAAO,KAAU,CAAA,GACrD,EAAA,EAAA,MAAC,KAAD,CAAI,UAAW,EAAA,QAAO,qBAAtB,EACE,EAAA,EAAA,MAAC,OAAD,CAAM,cAAY,OAAO,UAAW,EAAA,QAAO,oBAA3C,CACG,EAAO,IAAI,IAAE,EAAO,KACjB,KACN,EAAA,EAAA,KAAC,OAAD,CAAA,SAAO,EAAO,UAAiB,CAAA,CAC7B,GACD,GATE,GAAG,EAAO,IAAI,GAAG,EAAO,OAS1B,CACN,CACC,CAAA,EACF,IACD,GAET"}