@kartverket/backstage-plugin-risk-scorecard 3.10.9 → 3.11.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 (26) hide show
  1. package/dist/components/action/ActionURL.esm.js +2 -7
  2. package/dist/components/action/ActionURL.esm.js.map +1 -1
  3. package/dist/components/common/typography.esm.js +1 -12
  4. package/dist/components/common/typography.esm.js.map +1 -1
  5. package/dist/components/riScDialog/RiScDialog.esm.js +1 -1
  6. package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
  7. package/dist/components/riskMatrix/AggregatedCost.esm.js +14 -5
  8. package/dist/components/riskMatrix/AggregatedCost.esm.js.map +1 -1
  9. package/dist/components/riskMatrix/CurrentRisk.esm.js +124 -0
  10. package/dist/components/riskMatrix/CurrentRisk.esm.js.map +1 -0
  11. package/dist/components/riskMatrix/CurrentRisk.module.css.esm.js +8 -0
  12. package/dist/components/riskMatrix/CurrentRisk.module.css.esm.js.map +1 -0
  13. package/dist/components/riskMatrix/RiskMatrix.esm.js +9 -6
  14. package/dist/components/riskMatrix/RiskMatrix.esm.js.map +1 -1
  15. package/dist/components/riskMatrix/RiskMatrix.module.css.esm.js +1 -1
  16. package/dist/components/riskMatrix/Tabs.esm.js +19 -0
  17. package/dist/components/riskMatrix/Tabs.esm.js.map +1 -1
  18. package/dist/components/riskMatrix/utils.esm.js +1 -0
  19. package/dist/components/riskMatrix/utils.esm.js.map +1 -1
  20. package/dist/components/scenarioWizard/ScenarioWizard.esm.js +1 -2
  21. package/dist/components/scenarioWizard/ScenarioWizard.esm.js.map +1 -1
  22. package/dist/utils/risk.esm.js +39 -0
  23. package/dist/utils/risk.esm.js.map +1 -0
  24. package/dist/utils/translations.esm.js +8 -0
  25. package/dist/utils/translations.esm.js.map +1 -1
  26. package/package.json +1 -1
@@ -1,7 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Box, Text } from '@backstage/ui';
3
- import Link from '@mui/material/Link';
4
- import { body2 } from '../common/typography.esm.js';
2
+ import { Box, Text, Link } from '@backstage/ui';
5
3
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
6
4
  import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
7
5
 
@@ -15,11 +13,8 @@ function ActionURL(props) {
15
13
  props.url ? /* @__PURE__ */ jsx(
16
14
  Link,
17
15
  {
18
- sx: {
19
- ...body2,
20
- wordBreak: "break-all"
21
- },
22
16
  target: "_blank",
17
+ variant: "body-large",
23
18
  rel: "noreferrer",
24
19
  href: props.url.startsWith("http") ? props.url : `//${props.url}`,
25
20
  children: props.url
@@ -1 +1 @@
1
- {"version":3,"file":"ActionURL.esm.js","sources":["../../../src/components/action/ActionURL.tsx"],"sourcesContent":["import { Box, Text } from '@backstage/ui';\nimport Link from '@mui/material/Link';\nimport { body2 } from '../common/typography.ts';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\n\ntype ActionURLProps = {\n url: string;\n};\n\nexport function ActionURL(props: ActionURLProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <Box mt=\"16px\">\n <Text as=\"p\" variant=\"body-large\" weight=\"bold\">\n {' '}\n {t('dictionary.url')}\n </Text>\n {props.url ? (\n <Link\n sx={{\n ...body2,\n wordBreak: 'break-all',\n }}\n target=\"_blank\"\n rel=\"noreferrer\"\n href={props.url.startsWith('http') ? props.url : `//${props.url}`}\n >\n {props.url}\n </Link>\n ) : (\n <Text as=\"p\" variant=\"body-large\" style={{ fontStyle: 'italic' }}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAUO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EACN,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,YAAA,EAAa,QAAO,MAAA,EACtC,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,MACA,EAAE,gBAAgB;AAAA,KAAA,EACrB,CAAA;AAAA,IACC,MAAM,GAAA,mBACL,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,GAAG,KAAA;AAAA,UACH,SAAA,EAAW;AAAA,SACb;AAAA,QACA,MAAA,EAAO,QAAA;AAAA,QACP,GAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,MAAM,IAAI,KAAA,CAAM,GAAA,GAAM,CAAA,EAAA,EAAK,KAAA,CAAM,GAAG,CAAA,CAAA;AAAA,QAE9D,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,KACT,mBAEA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,YAAA,EAAa,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,EAAS,EAC5D,YAAE,uBAAA,EAAyB;AAAA,MAC1B,KAAA,EAAO,CAAA,CAAE,gBAAgB,CAAA,CAAE,WAAA;AAAY,KACxC,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ActionURL.esm.js","sources":["../../../src/components/action/ActionURL.tsx"],"sourcesContent":["import { Box, Link, Text } from '@backstage/ui';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\n\ntype ActionURLProps = {\n url: string;\n};\n\nexport function ActionURL(props: ActionURLProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n return (\n <Box mt=\"16px\">\n <Text as=\"p\" variant=\"body-large\" weight=\"bold\">\n {' '}\n {t('dictionary.url')}\n </Text>\n {props.url ? (\n <Link\n target=\"_blank\"\n variant=\"body-large\"\n rel=\"noreferrer\"\n href={props.url.startsWith('http') ? props.url : `//${props.url}`}\n >\n {props.url}\n </Link>\n ) : (\n <Text as=\"p\" variant=\"body-large\" style={{ fontStyle: 'italic' }}>\n {t('dictionary.emptyField', {\n field: t('dictionary.url').toLowerCase(),\n })}\n </Text>\n )}\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;AAQO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EACN,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,QAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,YAAA,EAAa,QAAO,MAAA,EACtC,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,MACA,EAAE,gBAAgB;AAAA,KAAA,EACrB,CAAA;AAAA,IACC,MAAM,GAAA,mBACL,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAO,QAAA;AAAA,QACP,OAAA,EAAQ,YAAA;AAAA,QACR,GAAA,EAAI,YAAA;AAAA,QACJ,IAAA,EAAM,KAAA,CAAM,GAAA,CAAI,UAAA,CAAW,MAAM,IAAI,KAAA,CAAM,GAAA,GAAM,CAAA,EAAA,EAAK,KAAA,CAAM,GAAG,CAAA,CAAA;AAAA,QAE9D,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,KACT,mBAEA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,YAAA,EAAa,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,EAAS,EAC5D,YAAE,uBAAA,EAAyB;AAAA,MAC1B,KAAA,EAAO,CAAA,CAAE,gBAAgB,CAAA,CAAE,WAAA;AAAY,KACxC,CAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
@@ -1,14 +1,3 @@
1
- const body2 = {
2
- fontSize: "1rem",
3
- fontWeight: 400,
4
- whiteSpace: "pre-line"
5
- };
6
- const label = {
7
- fontSize: "0.875rem",
8
- fontWeight: 700,
9
- textTransform: "uppercase",
10
- paddingBottom: "0.4rem"
11
- };
12
1
  const formLabel = {
13
2
  fontSize: "0.875rem",
14
3
  fontWeight: 700,
@@ -22,5 +11,5 @@ const formHelperText = {
22
11
  margin: 0
23
12
  };
24
13
 
25
- export { body2, formHelperText, formLabel, label };
14
+ export { formHelperText, formLabel };
26
15
  //# sourceMappingURL=typography.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typography.esm.js","sources":["../../../src/components/common/typography.ts"],"sourcesContent":["import { SxProps, Theme } from '@mui/material/styles';\n\nexport const body2: SxProps<Theme> = {\n fontSize: '1rem',\n fontWeight: 400,\n whiteSpace: 'pre-line',\n};\n\nexport const label: SxProps<Theme> = {\n fontSize: '0.875rem',\n fontWeight: 700,\n textTransform: 'uppercase',\n paddingBottom: '0.4rem',\n};\n\nexport const formLabel: SxProps<Theme> = {\n fontSize: '0.875rem',\n fontWeight: 700,\n textTransform: 'uppercase',\n color: 'inherit',\n};\n\nexport const formHelperText: SxProps<Theme> = {\n fontSize: '0.875rem',\n fontWeight: 400,\n color: 'inherit',\n margin: 0,\n};\n"],"names":[],"mappings":"AAEO,MAAM,KAAA,GAAwB;AAAA,EACnC,QAAA,EAAU,MAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,UAAA,EAAY;AACd;AAEO,MAAM,KAAA,GAAwB;AAAA,EACnC,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,aAAA,EAAe,WAAA;AAAA,EACf,aAAA,EAAe;AACjB;AAEO,MAAM,SAAA,GAA4B;AAAA,EACvC,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,aAAA,EAAe,WAAA;AAAA,EACf,KAAA,EAAO;AACT;AAEO,MAAM,cAAA,GAAiC;AAAA,EAC5C,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AACV;;;;"}
1
+ {"version":3,"file":"typography.esm.js","sources":["../../../src/components/common/typography.ts"],"sourcesContent":["import { SxProps, Theme } from '@mui/material/styles';\n\nexport const formLabel: SxProps<Theme> = {\n fontSize: '0.875rem',\n fontWeight: 700,\n textTransform: 'uppercase',\n color: 'inherit',\n};\n\nexport const formHelperText: SxProps<Theme> = {\n fontSize: '0.875rem',\n fontWeight: 400,\n color: 'inherit',\n margin: 0,\n};\n"],"names":[],"mappings":"AAEO,MAAM,SAAA,GAA4B;AAAA,EACvC,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,aAAA,EAAe,WAAA;AAAA,EACf,KAAA,EAAO;AACT;AAEO,MAAM,cAAA,GAAiC;AAAA,EAC5C,QAAA,EAAU,UAAA;AAAA,EACV,UAAA,EAAY,GAAA;AAAA,EACZ,KAAA,EAAO,SAAA;AAAA,EACP,MAAA,EAAQ;AACV;;;;"}
@@ -30,7 +30,7 @@ function RiScStepper({ activeStep }) {
30
30
  t("rosDialog.stepRiscDetails"),
31
31
  t("rosDialog.stepEncryption")
32
32
  ];
33
- return /* @__PURE__ */ jsx(Stepper, { activeStep, alternativeLabel: true, children: steps.map((label) => /* @__PURE__ */ jsx(Step, { children: /* @__PURE__ */ jsx(StepLabel, { children: label }) }, label)) });
33
+ return /* @__PURE__ */ jsx(Stepper, { activeStep, alternativeLabel: true, children: steps.map((label) => /* @__PURE__ */ jsx(Step, { children: /* @__PURE__ */ jsx(StepLabel, { children: /* @__PURE__ */ jsx(Text, { children: label }) }) }, label)) });
34
34
  }
35
35
  function RiScDialog({
36
36
  onClose,
@@ -1 +1 @@
1
- {"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\nimport ConfigInitialRisc from './ConfigInitialRisc';\nimport { Flex, Button, Text } from '@backstage/ui';\nimport styles from './RiScDialog.module.css';\nimport { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.tsx';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n SelectInitialRisc = 3,\n EditEncryption = 4,\n Delete = 5,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n onDelete: () => void;\n}\n\nfunction RiScStepper({ activeStep }: { activeStep: number }) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [\n t('rosDialog.initialRiscTitle'),\n t('rosDialog.stepRiscDetails'),\n t('rosDialog.stepEncryption'),\n ];\n return (\n <Stepper activeStep={activeStep} alternativeLabel>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n );\n}\n\nexport function RiScDialog({\n onClose,\n dialogState,\n onDelete,\n}: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const {\n selectedRiSc,\n riScs,\n selectRiSc,\n createNewRiSc,\n deleteRiSc,\n updateRiSc,\n gcpCryptoKeys,\n } = useRiScs();\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [switchOn, setSwitchOn] = useState(false);\n\n const { riScSelectedByDefault } = useDefaultRiScTypeDescriptors();\n const [selectedRiScId, setSelectedRiScId] = useState<string | undefined>(\n riScSelectedByDefault?.id,\n );\n useEffect(() => {\n setSelectedRiScId(riScSelectedByDefault?.id);\n }, [riScSelectedByDefault]);\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n if (activeStep === 1) {\n setActiveStep(2);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n if (activeStep === 2) {\n setActiveStep(1);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, switchOn, selectedRiScId);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc(() =>\n selectRiSc(riScs && riScs.length > 0 ? riScs[0].id : ''),\n );\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('rosDialog.titleNew')}\n className={styles.createRiscDialog}\n >\n <RiScStepper activeStep={activeStep} />\n <Text\n as=\"h2\"\n variant=\"title-x-small\"\n weight=\"bold\"\n className={styles.subtitle}\n >\n {activeStep === 0 && t('rosDialog.initialRiscTitle')}\n {activeStep === 1 && t('rosDialog.titleAndScope')}\n {activeStep === 2 && t('rosDialog.stepEncryption')}\n </Text>\n {activeStep === 0 && (\n <ConfigInitialRisc\n switchOn={switchOn}\n setSwitchOn={setSwitchOn}\n setValue={setValue}\n selectedRiScId={selectedRiScId}\n setSelectedRiScId={setSelectedRiScId}\n />\n )}\n {activeStep === 1 && (\n <ConfigRiscInfo\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 2 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n <Flex pt=\"16px\" justify=\"between\">\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Flex>\n <Button\n size=\"medium\"\n variant=\"secondary\"\n isDisabled={activeStep === 0}\n onClick={handleBack}\n >\n {t('dictionary.previous')}\n </Button>\n {activeStep < 2 ? (\n <Button size=\"medium\" variant=\"primary\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </Flex>\n </Flex>\n </DialogComponent>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('deleteDialog.title')}\n className={styles.createRiscDialog}\n >\n <Flex direction=\"column\">\n {t('deleteDialog.confirmationMessage')}\n <Flex justify=\"between\" pt=\"16px\">\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </Flex>\n </Flex>\n </DialogComponent>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('rosDialog.titleEdit')}\n className={styles.createRiscDialog}\n >\n <ConfigRiscInfo\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n <Flex justify=\"between\" pt=\"16px\">\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={onDelete}\n className={styles.deleteButton}\n >\n <i className={`ri-delete-bin-line ${styles.deleteButtonIcon}`} />\n {t('contentHeader.deleteButton')}\n </Button>\n <Flex>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </Flex>\n </DialogComponent>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('rosDialog.editEncryption')}\n className={styles.createRiscDialog}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n <Flex justify=\"between\" pt=\"16px\">\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </DialogComponent>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates"],"mappings":"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"}
1
+ {"version":3,"file":"RiScDialog.esm.js","sources":["../../../src/components/riScDialog/RiScDialog.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { emptyRiSc, isDeeplyEqual } from '../../utils/utilityfunctions';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useRiScs } from '../../contexts/RiScContext';\nimport { useForm } from 'react-hook-form';\nimport { Step, StepLabel, Stepper } from '@mui/material';\nimport ConfigEncryptionDialog from './ConfigEncryptionDialog';\nimport ConfigRiscInfo from './ConfigRiscInfo';\nimport ConfigInitialRisc from './ConfigInitialRisc';\nimport { Flex, Button, Text } from '@backstage/ui';\nimport styles from './RiScDialog.module.css';\nimport { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.tsx';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\n\nexport enum RiScDialogStates {\n Closed = 0,\n Create = 1,\n EditRiscInfo = 2,\n SelectInitialRisc = 3,\n EditEncryption = 4,\n Delete = 5,\n}\n\ninterface RiScDialogProps {\n onClose: () => void;\n dialogState: RiScDialogStates;\n onDelete: () => void;\n}\n\nfunction RiScStepper({ activeStep }: { activeStep: number }) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const steps = [\n t('rosDialog.initialRiscTitle'),\n t('rosDialog.stepRiscDetails'),\n t('rosDialog.stepEncryption'),\n ];\n return (\n <Stepper activeStep={activeStep} alternativeLabel>\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>\n <Text>{label}</Text>\n </StepLabel>\n </Step>\n ))}\n </Stepper>\n );\n}\n\nexport function RiScDialog({\n onClose,\n dialogState,\n onDelete,\n}: RiScDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const {\n selectedRiSc,\n riScs,\n selectRiSc,\n createNewRiSc,\n deleteRiSc,\n updateRiSc,\n gcpCryptoKeys,\n } = useRiScs();\n const {\n register,\n handleSubmit,\n watch,\n formState: { errors },\n setValue,\n } = useForm<RiScWithMetadata>({\n defaultValues:\n dialogState === RiScDialogStates.EditRiscInfo ||\n dialogState === RiScDialogStates.EditEncryption\n ? selectedRiSc!\n : {\n content: emptyRiSc(),\n sopsConfig: {\n shamir_threshold: 2,\n },\n },\n mode: 'onBlur',\n });\n\n const [activeStep, setActiveStep] = useState(0);\n\n const [switchOn, setSwitchOn] = useState(false);\n\n const { riScSelectedByDefault } = useDefaultRiScTypeDescriptors();\n const [selectedRiScId, setSelectedRiScId] = useState<string | undefined>(\n riScSelectedByDefault?.id,\n );\n useEffect(() => {\n setSelectedRiScId(riScSelectedByDefault?.id);\n }, [riScSelectedByDefault]);\n\n const handleNext = handleSubmit(\n () => {\n if (activeStep === 0) {\n setActiveStep(1);\n }\n if (activeStep === 1) {\n setActiveStep(2);\n }\n },\n // Continue to step 1 even if there are errors, as long as there are no errors in step 0 (the content)\n validationErrors => {\n if (activeStep === 0 && validationErrors.content === undefined) {\n setActiveStep(1);\n }\n },\n );\n\n function handleBack() {\n if (activeStep === 1) {\n setActiveStep(0);\n }\n if (activeStep === 2) {\n setActiveStep(1);\n }\n }\n\n const handleFinish = handleSubmit((data: RiScWithMetadata) => {\n if (dialogState === RiScDialogStates.Create) {\n createNewRiSc(data, switchOn, selectedRiScId);\n } else if (dialogState === RiScDialogStates.Delete) {\n deleteRiSc(() =>\n selectRiSc(riScs && riScs.length > 0 ? riScs[0].id : ''),\n );\n } else {\n // Do manual comparison of contents, as the sopsConfig field contains many values from the backend that are not\n // used or set by the frontend.\n // Check if the additional Age keys are equal, using the single important field, `recipient`\n const areAgeKeysEqual = isDeeplyEqual(\n data.sopsConfig.age?.map(age => age.recipient).sort(),\n selectedRiSc?.sopsConfig.age?.map(age => age.recipient).sort(),\n );\n\n // Check if the GCP keys are equal, using the two important fields, `resource_id` and `created_at`.\n // Comparison uses dictionaries, where resource ids are keys and created at dates are values\n const areGCPKeysEqual = isDeeplyEqual(\n Object.fromEntries(\n data.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n Object.fromEntries(\n selectedRiSc?.sopsConfig.gcp_kms?.map(key => [\n key.resource_id,\n key.created_at,\n ]) ?? [],\n ),\n );\n\n // Only update the risc if it has changed\n if (\n !isDeeplyEqual(data, selectedRiSc, ['sopsConfig']) ||\n !areGCPKeysEqual ||\n !areAgeKeysEqual\n ) {\n updateRiSc(data);\n }\n }\n onClose();\n });\n\n if (dialogState === RiScDialogStates.Create) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('rosDialog.titleNew')}\n className={styles.createRiscDialog}\n >\n <RiScStepper activeStep={activeStep} />\n <Text\n as=\"h2\"\n variant=\"title-x-small\"\n weight=\"bold\"\n className={styles.subtitle}\n >\n {activeStep === 0 && t('rosDialog.initialRiscTitle')}\n {activeStep === 1 && t('rosDialog.titleAndScope')}\n {activeStep === 2 && t('rosDialog.stepEncryption')}\n </Text>\n {activeStep === 0 && (\n <ConfigInitialRisc\n switchOn={switchOn}\n setSwitchOn={setSwitchOn}\n setValue={setValue}\n selectedRiScId={selectedRiScId}\n setSelectedRiScId={setSelectedRiScId}\n />\n )}\n {activeStep === 1 && (\n <ConfigRiscInfo\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n )}\n {activeStep === 2 && (\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n )}\n <Flex pt=\"16px\" justify=\"between\">\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Flex>\n <Button\n size=\"medium\"\n variant=\"secondary\"\n isDisabled={activeStep === 0}\n onClick={handleBack}\n >\n {t('dictionary.previous')}\n </Button>\n {activeStep < 2 ? (\n <Button size=\"medium\" variant=\"primary\" onClick={handleNext}>\n {t('dictionary.next')}\n </Button>\n ) : (\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n )}\n </Flex>\n </Flex>\n </DialogComponent>\n );\n }\n\n if (dialogState === RiScDialogStates.Delete) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('deleteDialog.title')}\n className={styles.createRiscDialog}\n >\n <Flex direction=\"column\">\n {t('deleteDialog.confirmationMessage')}\n <Flex justify=\"between\" pt=\"16px\">\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.delete')}\n </Button>\n </Flex>\n </Flex>\n </DialogComponent>\n );\n }\n\n if (dialogState === RiScDialogStates.EditRiscInfo) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('rosDialog.titleEdit')}\n className={styles.createRiscDialog}\n >\n <ConfigRiscInfo\n register={register}\n errors={errors}\n setValue={setValue}\n watch={watch}\n />\n <Flex justify=\"between\" pt=\"16px\">\n <Button\n size=\"medium\"\n variant=\"tertiary\"\n onClick={onDelete}\n className={styles.deleteButton}\n >\n <i className={`ri-delete-bin-line ${styles.deleteButtonIcon}`} />\n {t('contentHeader.deleteButton')}\n </Button>\n <Flex>\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </Flex>\n </DialogComponent>\n );\n }\n\n if (dialogState === RiScDialogStates.EditEncryption) {\n return (\n <DialogComponent\n isOpen={true}\n onClick={onClose}\n header={t('rosDialog.editEncryption')}\n className={styles.createRiscDialog}\n >\n <ConfigEncryptionDialog\n gcpCryptoKeys={gcpCryptoKeys}\n sopsData={selectedRiSc?.sopsConfig}\n setValue={setValue}\n state={dialogState}\n register={register}\n errors={errors}\n />\n <Flex justify=\"between\" pt=\"16px\">\n <Button size=\"medium\" variant=\"secondary\" onClick={onClose}>\n {t('dictionary.cancel')}\n </Button>\n <Button size=\"medium\" variant=\"primary\" onClick={handleFinish}>\n {t('dictionary.save')}\n </Button>\n </Flex>\n </DialogComponent>\n );\n }\n\n return null;\n}\n"],"names":["RiScDialogStates"],"mappings":"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"}
@@ -8,15 +8,24 @@ import { formatNumber } from '../../utils/utilityfunctions.esm.js';
8
8
  import { EstimatedRiskInfoDialog } from './EstimatedRiskInfoDialog.esm.js';
9
9
  import { Box, Text, Flex } from '@backstage/ui';
10
10
  import styles from './AggregatedCost.module.css.esm.js';
11
+ import { calcRiskCostOfRiSc } from '../../utils/risk.esm.js';
12
+ import { RiskMatrixTabs } from './utils.esm.js';
11
13
 
12
- function AggregatedCost({ riSc, initialRisk }) {
14
+ function AggregatedCost({ riSc, riskType }) {
13
15
  const { t } = useTranslationRef(pluginRiScTranslationRef);
14
16
  const [showDialog, setShowDialog] = useState(false);
15
- const cost = riSc.scenarios.map((scenario) => {
16
- return initialRisk ? scenario.risk.probability * scenario.risk.consequence : scenario.remainingRisk.probability * scenario.remainingRisk.consequence;
17
- }).reduce((a, b) => a + b, 0);
17
+ const cost = calcRiskCostOfRiSc(riSc, riskType);
18
+ const riskLabel = {
19
+ [RiskMatrixTabs.initialRisk]: t("dictionary.initialRisk"),
20
+ [RiskMatrixTabs.remainingRisk]: t("dictionary.restRisk"),
21
+ [RiskMatrixTabs.currentRisk]: t("dictionary.currentRisk")
22
+ };
18
23
  return /* @__PURE__ */ jsxs(Box, { className: styles.boxStyle, children: [
19
- /* @__PURE__ */ jsx(Text, { as: "h3", variant: "body-large", weight: "bold", children: t("riskMatrix.estimatedRisk.title") }),
24
+ /* @__PURE__ */ jsxs(Text, { as: "h3", variant: "body-large", weight: "bold", children: [
25
+ t("riskMatrix.estimatedRisk.title"),
26
+ " ",
27
+ riskType && `(${riskLabel[riskType]})`
28
+ ] }),
20
29
  /* @__PURE__ */ jsxs(Flex, { align: "center", gap: "0", children: [
21
30
  /* @__PURE__ */ jsxs(Text, { variant: "body-large", children: [
22
31
  formatNumber(cost, t),
@@ -1 +1 @@
1
- {"version":3,"file":"AggregatedCost.esm.js","sources":["../../../src/components/riskMatrix/AggregatedCost.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { IconButton } from '@material-ui/core';\nimport InfoIcon from '@mui/icons-material/Info';\nimport { useState } from 'react';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiSc } from '../../utils/types';\nimport { formatNumber } from '../../utils/utilityfunctions';\nimport { EstimatedRiskInfoDialog } from './EstimatedRiskInfoDialog';\nimport { Box, Flex, Text } from '@backstage/ui';\nimport styles from './AggregatedCost.module.css';\n\ninterface AggregatedCostProps {\n riSc: RiSc;\n initialRisk: boolean;\n}\n\nexport function AggregatedCost({ riSc, initialRisk }: AggregatedCostProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [showDialog, setShowDialog] = useState(false);\n\n const cost = riSc.scenarios\n .map(scenario => {\n return initialRisk\n ? scenario.risk.probability * scenario.risk.consequence\n : scenario.remainingRisk.probability *\n scenario.remainingRisk.consequence;\n })\n .reduce((a, b) => a + b, 0);\n\n return (\n <Box className={styles.boxStyle}>\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('riskMatrix.estimatedRisk.title')}\n </Text>\n <Flex align=\"center\" gap=\"0\">\n <Text variant=\"body-large\">\n {formatNumber(cost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <IconButton size=\"small\" onClick={() => setShowDialog(true)}>\n <InfoIcon />\n </IconButton>\n </Flex>\n <EstimatedRiskInfoDialog\n isOpen={showDialog}\n onClose={() => setShowDialog(false)}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAgBO,SAAS,cAAA,CAAe,EAAE,IAAA,EAAM,WAAA,EAAY,EAAwB;AACzE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CACf,GAAA,CAAI,CAAA,QAAA,KAAY;AACf,IAAA,OAAO,WAAA,GACH,QAAA,CAAS,IAAA,CAAK,WAAA,GAAc,QAAA,CAAS,IAAA,CAAK,WAAA,GAC1C,QAAA,CAAS,aAAA,CAAc,WAAA,GACrB,QAAA,CAAS,aAAA,CAAc,WAAA;AAAA,EAC/B,CAAC,EACA,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,GAAG,CAAC,CAAA;AAE5B,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,QAAA,EACrB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAG,IAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EACvC,QAAA,EAAA,CAAA,CAAE,gCAAgC,CAAA,EACrC,CAAA;AAAA,oBACA,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,GAAA,EACvB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAQ,YAAA,EACX,QAAA,EAAA;AAAA,QAAA,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,QAAG,GAAA;AAAA,QACvB,EAAE,0CAA0C;AAAA,OAAA,EAC/C,CAAA;AAAA,sBACA,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA,EACxD,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA,EACZ;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACpC,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AggregatedCost.esm.js","sources":["../../../src/components/riskMatrix/AggregatedCost.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { IconButton } from '@material-ui/core';\nimport InfoIcon from '@mui/icons-material/Info';\nimport { useState } from 'react';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiSc } from '../../utils/types';\nimport { formatNumber } from '../../utils/utilityfunctions';\nimport { EstimatedRiskInfoDialog } from './EstimatedRiskInfoDialog';\nimport { Box, Flex, Text } from '@backstage/ui';\nimport styles from './AggregatedCost.module.css';\nimport { calcRiskCostOfRiSc } from '../../utils/risk';\nimport { RiskMatrixTabs } from './utils';\n\ninterface AggregatedCostProps {\n riSc: RiSc;\n riskType?: RiskMatrixTabs;\n}\n\nexport function AggregatedCost({ riSc, riskType }: AggregatedCostProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const [showDialog, setShowDialog] = useState(false);\n\n const cost = calcRiskCostOfRiSc(riSc, riskType);\n\n const riskLabel = {\n [RiskMatrixTabs.initialRisk]: t('dictionary.initialRisk'),\n [RiskMatrixTabs.remainingRisk]: t('dictionary.restRisk'),\n [RiskMatrixTabs.currentRisk]: t('dictionary.currentRisk'),\n };\n\n return (\n <Box className={styles.boxStyle}>\n <Text as=\"h3\" variant=\"body-large\" weight=\"bold\">\n {t('riskMatrix.estimatedRisk.title')}{' '}\n {riskType && `(${riskLabel[riskType]})`}\n </Text>\n <Flex align=\"center\" gap=\"0\">\n <Text variant=\"body-large\">\n {formatNumber(cost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <IconButton size=\"small\" onClick={() => setShowDialog(true)}>\n <InfoIcon />\n </IconButton>\n </Flex>\n <EstimatedRiskInfoDialog\n isOpen={showDialog}\n onClose={() => setShowDialog(false)}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAkBO,SAAS,cAAA,CAAe,EAAE,IAAA,EAAM,QAAA,EAAS,EAAwB;AACtE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,IAAA,EAAM,QAAQ,CAAA;AAE9C,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,CAAC,cAAA,CAAe,WAAW,GAAG,EAAE,wBAAwB,CAAA;AAAA,IACxD,CAAC,cAAA,CAAe,aAAa,GAAG,EAAE,qBAAqB,CAAA;AAAA,IACvD,CAAC,cAAA,CAAe,WAAW,GAAG,EAAE,wBAAwB;AAAA,GAC1D;AAEA,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,QAAA,EACrB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,QAAK,EAAA,EAAG,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAa,QAAO,MAAA,EACvC,QAAA,EAAA;AAAA,MAAA,CAAA,CAAE,gCAAgC,CAAA;AAAA,MAAG,GAAA;AAAA,MACrC,QAAA,IAAY,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA;AAAA,KAAA,EACtC,CAAA;AAAA,oBACA,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EAAS,KAAI,GAAA,EACvB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAQ,YAAA,EACX,QAAA,EAAA;AAAA,QAAA,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,QAAG,GAAA;AAAA,QACvB,EAAE,0CAA0C;AAAA,OAAA,EAC/C,CAAA;AAAA,sBACA,GAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA,EACxD,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA,EACZ;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACpC,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,124 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
3
+ import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
4
+ import { Flex, Text, Box } from '@backstage/ui';
5
+ import { ActionStatusOptions } from '../../utils/constants.esm.js';
6
+ import { calcRiskCostOfRiSc, getRiskGradient } from '../../utils/risk.esm.js';
7
+ import { RiskMatrixTabs } from './utils.esm.js';
8
+ import styles from './CurrentRisk.module.css.esm.js';
9
+ import { formatNumber } from '../../utils/utilityfunctions.esm.js';
10
+
11
+ function CurrentRisk({ risc }) {
12
+ const { t } = useTranslationRef(pluginRiScTranslationRef);
13
+ const actionsOk = risc.content.scenarios.reduce(
14
+ (total, scenario) => total + scenario.actions.filter(
15
+ (action) => action.status === ActionStatusOptions.OK
16
+ ).length,
17
+ 0
18
+ );
19
+ const initialRiskCost = calcRiskCostOfRiSc(
20
+ risc.content,
21
+ RiskMatrixTabs.initialRisk
22
+ );
23
+ const remainingRiskCost = calcRiskCostOfRiSc(
24
+ risc.content,
25
+ RiskMatrixTabs.remainingRisk
26
+ );
27
+ const estimatedCurrentCost = calcRiskCostOfRiSc(
28
+ risc.content,
29
+ RiskMatrixTabs.currentRisk
30
+ );
31
+ const costReduction = initialRiskCost - remainingRiskCost;
32
+ const costReductionPercentage = costReduction > 0 ? (initialRiskCost - estimatedCurrentCost) / costReduction * 100 : 0;
33
+ const clampedPercentage = Math.max(
34
+ 0,
35
+ Math.min(100, Number(costReductionPercentage.toFixed(2)))
36
+ );
37
+ let labelTransform = "translateX(-50%)";
38
+ if (clampedPercentage <= 5) {
39
+ labelTransform = "translateX(0%)";
40
+ } else if (clampedPercentage >= 95) {
41
+ labelTransform = "translateX(-100%)";
42
+ }
43
+ const reduction = formatNumber(initialRiskCost - estimatedCurrentCost, t);
44
+ const description = t("riskMatrix.currentRisk.description", {
45
+ actionsOk: String(actionsOk),
46
+ reduction
47
+ });
48
+ return /* @__PURE__ */ jsxs(Flex, { direction: "column", pt: "30px", children: [
49
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", pb: "16px", children: [
50
+ /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: t("riskMatrix.currentRisk.title") }),
51
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "0", children: [
52
+ /* @__PURE__ */ jsxs(Flex, { justify: "between", px: "4px", align: "end", pb: "4px", children: [
53
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", align: "start", gap: "0", children: [
54
+ /* @__PURE__ */ jsxs(Text, { variant: "body-small", weight: "bold", children: [
55
+ formatNumber(initialRiskCost, t),
56
+ " ",
57
+ t("riskMatrix.estimatedRisk.unit.nokPerYear")
58
+ ] }),
59
+ /* @__PURE__ */ jsxs(Text, { variant: "body-medium", children: [
60
+ "\u2190 ",
61
+ t("dictionary.initialRisk")
62
+ ] })
63
+ ] }),
64
+ /* @__PURE__ */ jsxs(Flex, { direction: "column", align: "end", gap: "0", children: [
65
+ /* @__PURE__ */ jsxs(Text, { variant: "body-small", weight: "bold", children: [
66
+ formatNumber(remainingRiskCost, t),
67
+ " ",
68
+ t("riskMatrix.estimatedRisk.unit.nokPerYear")
69
+ ] }),
70
+ /* @__PURE__ */ jsxs(Text, { variant: "body-medium", children: [
71
+ t("dictionary.restRisk"),
72
+ " \u2192"
73
+ ] })
74
+ ] })
75
+ ] }),
76
+ /* @__PURE__ */ jsxs(Box, { className: styles.currentRiskBarWrapper, children: [
77
+ /* @__PURE__ */ jsx(Box, { className: styles.currentRiskBarContainer, children: initialRiskCost > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
78
+ /* @__PURE__ */ jsx(
79
+ Flex,
80
+ {
81
+ align: "center",
82
+ justify: "end",
83
+ className: styles.currentRiskBarFill,
84
+ style: {
85
+ background: getRiskGradient()
86
+ }
87
+ }
88
+ ),
89
+ /* @__PURE__ */ jsx(
90
+ Box,
91
+ {
92
+ className: styles.currentRiskMarker,
93
+ style: {
94
+ left: `${clampedPercentage}%`
95
+ }
96
+ }
97
+ )
98
+ ] }) }),
99
+ /* @__PURE__ */ jsx(
100
+ Flex,
101
+ {
102
+ className: styles.currentRiskPercentageLabel,
103
+ style: {
104
+ left: `${clampedPercentage}%`,
105
+ transform: labelTransform
106
+ },
107
+ children: /* @__PURE__ */ jsx(Text, { variant: "body-medium", weight: "bold", children: t("dictionary.currentRisk") })
108
+ }
109
+ )
110
+ ] })
111
+ ] })
112
+ ] }),
113
+ /* @__PURE__ */ jsx(Flex, { children: /* @__PURE__ */ jsx(
114
+ Text,
115
+ {
116
+ variant: "body-large",
117
+ dangerouslySetInnerHTML: { __html: description }
118
+ }
119
+ ) })
120
+ ] });
121
+ }
122
+
123
+ export { CurrentRisk };
124
+ //# sourceMappingURL=CurrentRisk.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurrentRisk.esm.js","sources":["../../../src/components/riskMatrix/CurrentRisk.tsx"],"sourcesContent":["import { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { Box, Text, Flex } from '@backstage/ui';\nimport { ActionStatusOptions } from '../../utils/constants';\nimport { calcRiskCostOfRiSc, getRiskGradient } from '../../utils/risk';\nimport { RiskMatrixTabs } from './utils';\nimport styles from './CurrentRisk.module.css';\nimport { formatNumber } from '../../utils/utilityfunctions';\n\ntype CurrentRiskProps = {\n risc: RiScWithMetadata;\n};\n\nexport function CurrentRisk({ risc }: CurrentRiskProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n const actionsOk = risc.content.scenarios.reduce(\n (total, scenario) =>\n total +\n scenario.actions.filter(\n action => action.status === ActionStatusOptions.OK,\n ).length,\n 0,\n );\n\n const initialRiskCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.initialRisk,\n );\n const remainingRiskCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.remainingRisk,\n );\n const estimatedCurrentCost = calcRiskCostOfRiSc(\n risc.content,\n RiskMatrixTabs.currentRisk,\n );\n\n const costReduction = initialRiskCost - remainingRiskCost;\n\n const costReductionPercentage =\n costReduction > 0\n ? ((initialRiskCost - estimatedCurrentCost) / costReduction) * 100\n : 0;\n\n const clampedPercentage = Math.max(\n 0,\n Math.min(100, Number(costReductionPercentage.toFixed(2))),\n );\n\n let labelTransform = 'translateX(-50%)';\n if (clampedPercentage <= 5) {\n labelTransform = 'translateX(0%)';\n } else if (clampedPercentage >= 95) {\n labelTransform = 'translateX(-100%)';\n }\n\n const reduction = formatNumber(initialRiskCost - estimatedCurrentCost, t);\n\n const description = t('riskMatrix.currentRisk.description', {\n actionsOk: String(actionsOk),\n reduction,\n });\n\n return (\n <Flex direction=\"column\" pt=\"30px\">\n <Flex direction=\"column\" pb=\"16px\">\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('riskMatrix.currentRisk.title')}\n </Text>\n <Flex direction=\"column\" gap=\"0\">\n <Flex justify=\"between\" px=\"4px\" align=\"end\" pb=\"4px\">\n <Flex direction=\"column\" align=\"start\" gap=\"0\">\n <Text variant=\"body-small\" weight=\"bold\">\n {formatNumber(initialRiskCost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <Text variant=\"body-medium\">← {t('dictionary.initialRisk')}</Text>\n </Flex>\n <Flex direction=\"column\" align=\"end\" gap=\"0\">\n <Text variant=\"body-small\" weight=\"bold\">\n {formatNumber(remainingRiskCost, t)}{' '}\n {t('riskMatrix.estimatedRisk.unit.nokPerYear')}\n </Text>\n <Text variant=\"body-medium\">{t('dictionary.restRisk')} →</Text>\n </Flex>\n </Flex>\n <Box className={styles.currentRiskBarWrapper}>\n <Box className={styles.currentRiskBarContainer}>\n {initialRiskCost > 0 && (\n <>\n <Flex\n align=\"center\"\n justify=\"end\"\n className={styles.currentRiskBarFill}\n style={{\n background: getRiskGradient(),\n }}\n />\n <Box\n className={styles.currentRiskMarker}\n style={{\n left: `${clampedPercentage}%`,\n }}\n />\n </>\n )}\n </Box>\n <Flex\n className={styles.currentRiskPercentageLabel}\n style={{\n left: `${clampedPercentage}%`,\n transform: labelTransform,\n }}\n >\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('dictionary.currentRisk')}\n </Text>\n </Flex>\n </Box>\n </Flex>\n </Flex>\n\n <Flex>\n <Text\n variant=\"body-large\"\n dangerouslySetInnerHTML={{ __html: description }}\n />\n </Flex>\n </Flex>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = ".CurrentRisk-module_currentRiskBarWrapper__ceTOm {\n position: relative;\n}\n\n.CurrentRisk-module_currentRiskBarContainer__i7eQY {\n width: 100%;\n height: 50px;\n border-radius: 8px;\n overflow: hidden;\n position: relative;\n border: 2px solid black;\n}\n\n.CurrentRisk-module_currentRiskBarFill__cr5qc {\n position: absolute;\n width: 100%;\n left: 0;\n top: 0;\n bottom: 0;\n}\n\n.CurrentRisk-module_currentRiskMarker__cJmvA {\n position: absolute;\n top: 0;\n bottom: 0;\n width: 2px;\n background-color: var(--bui-black);\n transform: translateX(-50%);\n transition: left 0.3s ease;\n}\n\n.CurrentRisk-module_currentRiskPercentageLabel__WAr-Q {\n position: absolute;\n top: calc(100% + 6px);\n transform: translateX(-50%);\n white-space: nowrap;\n pointer-events: none;\n transition: left 0.3s ease;\n}\n";
4
+ var styles = {"currentRiskBarWrapper":"CurrentRisk-module_currentRiskBarWrapper__ceTOm","currentRiskBarContainer":"CurrentRisk-module_currentRiskBarContainer__i7eQY","currentRiskBarFill":"CurrentRisk-module_currentRiskBarFill__cr5qc","currentRiskMarker":"CurrentRisk-module_currentRiskMarker__cJmvA","currentRiskPercentageLabel":"CurrentRisk-module_currentRiskPercentageLabel__WAr-Q"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=CurrentRisk.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CurrentRisk.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -8,6 +8,7 @@ import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
8
8
  import { RiskMatrixTabs } from './utils.esm.js';
9
9
  import { Card, CardHeader, Text, CardBody, Box } from '@backstage/ui';
10
10
  import { RiskMatrixSquare } from './RiskMatrixSquare.esm.js';
11
+ import { CurrentRisk } from './CurrentRisk.esm.js';
11
12
  import styles from './RiskMatrix.module.css.esm.js';
12
13
 
13
14
  function RiskMatrix({
@@ -19,14 +20,16 @@ function RiskMatrix({
19
20
  /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsx(Text, { variant: "title-small", weight: "bold", children: t("riskMatrix.title") }) }),
20
21
  /* @__PURE__ */ jsxs(CardBody, { children: [
21
22
  /* @__PURE__ */ jsx(MatrixTabs, { setTab, currentTab: tab }),
22
- riScWithMetadata.content.scenarios.length > 0 && /* @__PURE__ */ jsx(Box, { className: styles.estimatedCostContainer, children: /* @__PURE__ */ jsx(
23
- AggregatedCost,
23
+ riScWithMetadata.content.scenarios.length > 0 && /* @__PURE__ */ jsx(
24
+ Box,
24
25
  {
25
- riSc: riScWithMetadata.content,
26
- initialRisk: tab === RiskMatrixTabs.initialRisk
26
+ style: {
27
+ marginTop: "18px"
28
+ },
29
+ children: /* @__PURE__ */ jsx(AggregatedCost, { riSc: riScWithMetadata.content, riskType: tab })
27
30
  }
28
- ) }),
29
- /* @__PURE__ */ jsx(Box, { className: styles.gridWrapper, children: /* @__PURE__ */ jsxs(Box, { className: styles.grid, children: [
31
+ ),
32
+ tab === RiskMatrixTabs.currentRisk ? /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(CurrentRisk, { risc: riScWithMetadata }) }) : /* @__PURE__ */ jsx(Box, { className: styles.gridWrapper, children: /* @__PURE__ */ jsxs(Box, { className: styles.grid, children: [
30
33
  /* @__PURE__ */ jsx(Box, { className: styles.konsekvens, children: /* @__PURE__ */ jsx(
31
34
  Text,
32
35
  {
@@ -1 +1 @@
1
- {"version":3,"file":"RiskMatrix.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrix.tsx"],"sourcesContent":["import { Fragment, useState } from 'react';\nimport { AggregatedCost } from './AggregatedCost';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { MatrixTabs } from './Tabs';\nimport { riskMatrix } from '../../utils/constants';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiskMatrixTabs } from './utils';\nimport { Card, CardBody, CardHeader, Text, Box } from '@backstage/ui';\nimport { RiskMatrixSquare } from './RiskMatrixSquare.tsx';\nimport styles from './RiskMatrix.module.css';\nexport function RiskMatrix({\n riScWithMetadata,\n}: {\n riScWithMetadata: RiScWithMetadata;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [tab, setTab] = useState<RiskMatrixTabs>(RiskMatrixTabs.initialRisk);\n\n return (\n <Card>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\">\n {t('riskMatrix.title')}\n </Text>\n </CardHeader>\n <CardBody>\n <MatrixTabs setTab={setTab} currentTab={tab} />\n {riScWithMetadata.content.scenarios.length > 0 && (\n <Box className={styles.estimatedCostContainer}>\n <AggregatedCost\n riSc={riScWithMetadata.content}\n initialRisk={tab === RiskMatrixTabs.initialRisk}\n />\n </Box>\n )}\n <Box className={styles.gridWrapper}>\n <Box className={styles.grid}>\n <Box className={styles.konsekvens}>\n <Text\n variant=\"title-x-small\"\n weight=\"bold\"\n className={styles.centered}\n >\n {t('dictionary.consequence')}\n </Text>\n </Box>\n {riskMatrix.map((row, rowIndex) => (\n <Fragment key={rowIndex}>\n <Box className={styles.centered}>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {5 - rowIndex}\n </Text>\n </Box>\n {row.map((_, colIndex) => (\n <RiskMatrixSquare\n size=\"grid\"\n consequence={4 - rowIndex}\n probability={colIndex}\n riScCountObject={{\n isInitialRisk: tab === RiskMatrixTabs.initialRisk,\n riSc: riScWithMetadata,\n }}\n />\n ))}\n </Fragment>\n ))}\n <Box className={styles.centered} />\n <Box className={styles.centered} />\n {riskMatrix.map((_, col) => (\n <Box className={styles.centered} key={col}>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {col + 1}\n </Text>\n </Box>\n ))}\n <Box className={styles.sannsynlighet}>\n <Text\n weight=\"bold\"\n variant=\"title-x-small\"\n className={styles.centered}\n >\n {t('dictionary.probability')}\n </Text>\n </Box>\n </Box>\n </Box>\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RiskMatrix.esm.js","sources":["../../../src/components/riskMatrix/RiskMatrix.tsx"],"sourcesContent":["import { Fragment, useState } from 'react';\nimport { AggregatedCost } from './AggregatedCost';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { MatrixTabs } from './Tabs';\nimport { riskMatrix } from '../../utils/constants';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { RiskMatrixTabs } from './utils';\nimport { Card, CardBody, CardHeader, Text, Box } from '@backstage/ui';\nimport { RiskMatrixSquare } from './RiskMatrixSquare.tsx';\nimport { CurrentRisk } from './CurrentRisk.tsx';\n\nimport styles from './RiskMatrix.module.css';\nexport function RiskMatrix({\n riScWithMetadata,\n}: {\n riScWithMetadata: RiScWithMetadata;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [tab, setTab] = useState<RiskMatrixTabs>(RiskMatrixTabs.initialRisk);\n\n return (\n <Card>\n <CardHeader>\n <Text variant=\"title-small\" weight=\"bold\">\n {t('riskMatrix.title')}\n </Text>\n </CardHeader>\n <CardBody>\n <MatrixTabs setTab={setTab} currentTab={tab} />\n {riScWithMetadata.content.scenarios.length > 0 && (\n <Box\n style={{\n marginTop: '18px',\n }}\n >\n <AggregatedCost riSc={riScWithMetadata.content} riskType={tab} />\n </Box>\n )}\n\n {tab === RiskMatrixTabs.currentRisk ? (\n <Box>\n <CurrentRisk risc={riScWithMetadata} />\n </Box>\n ) : (\n <Box className={styles.gridWrapper}>\n <Box className={styles.grid}>\n <Box className={styles.konsekvens}>\n <Text\n variant=\"title-x-small\"\n weight=\"bold\"\n className={styles.centered}\n >\n {t('dictionary.consequence')}\n </Text>\n </Box>\n {riskMatrix.map((row, rowIndex) => (\n <Fragment key={rowIndex}>\n <Box className={styles.centered}>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {5 - rowIndex}\n </Text>\n </Box>\n {row.map((_, colIndex) => (\n <RiskMatrixSquare\n size=\"grid\"\n consequence={4 - rowIndex}\n probability={colIndex}\n riScCountObject={{\n isInitialRisk: tab === RiskMatrixTabs.initialRisk,\n riSc: riScWithMetadata,\n }}\n />\n ))}\n </Fragment>\n ))}\n <Box className={styles.centered} />\n <Box className={styles.centered} />\n {riskMatrix.map((_, col) => (\n <Box className={styles.centered} key={col}>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {col + 1}\n </Text>\n </Box>\n ))}\n <Box className={styles.sannsynlighet}>\n <Text\n weight=\"bold\"\n variant=\"title-x-small\"\n className={styles.centered}\n >\n {t('dictionary.probability')}\n </Text>\n </Box>\n </Box>\n </Box>\n )}\n </CardBody>\n </Card>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAaO,SAAS,UAAA,CAAW;AAAA,EACzB;AACF,CAAA,EAEG;AACD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,QAAA,CAAyB,eAAe,WAAW,CAAA;AAEzE,EAAA,4BACG,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,aAAA,EAAc,QAAO,MAAA,EAChC,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EACvB,CAAA,EACF,CAAA;AAAA,yBACC,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,UAAA,EAAY,GAAA,EAAK,CAAA;AAAA,MAC5C,gBAAA,CAAiB,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,CAAA,oBAC3C,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,SAAA,EAAW;AAAA,WACb;AAAA,UAEA,8BAAC,cAAA,EAAA,EAAe,IAAA,EAAM,gBAAA,CAAiB,OAAA,EAAS,UAAU,GAAA,EAAK;AAAA;AAAA,OACjE;AAAA,MAGD,GAAA,KAAQ,eAAe,WAAA,mBACtB,GAAA,CAAC,OACC,QAAA,kBAAA,GAAA,CAAC,WAAA,EAAA,EAAY,MAAM,gBAAA,EAAkB,CAAA,EACvC,oBAEA,GAAA,CAAC,GAAA,EAAA,EAAI,WAAW,MAAA,CAAO,WAAA,EACrB,+BAAC,GAAA,EAAA,EAAI,SAAA,EAAW,OAAO,IAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,UAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAO,MAAA;AAAA,YACP,WAAW,MAAA,CAAO,QAAA;AAAA,YAEjB,YAAE,wBAAwB;AAAA;AAAA,SAC7B,EACF,CAAA;AAAA,QACC,WAAW,GAAA,CAAI,CAAC,GAAA,EAAK,QAAA,0BACnB,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,QAAA,EACrB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,MAAA,EAAO,MAAA,EAClC,QAAA,EAAA,CAAA,GAAI,QAAA,EACP,CAAA,EACF,CAAA;AAAA,UACC,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,EAAG,QAAA,qBACX,GAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,aAAa,CAAA,GAAI,QAAA;AAAA,cACjB,WAAA,EAAa,QAAA;AAAA,cACb,eAAA,EAAiB;AAAA,gBACf,aAAA,EAAe,QAAQ,cAAA,CAAe,WAAA;AAAA,gBACtC,IAAA,EAAM;AAAA;AACR;AAAA,WAEH;AAAA,SAAA,EAAA,EAhBY,QAiBf,CACD,CAAA;AAAA,wBACD,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,QAAA,EAAU,CAAA;AAAA,wBACjC,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,QAAA,EAAU,CAAA;AAAA,QAChC,UAAA,CAAW,IAAI,CAAC,CAAA,EAAG,wBAClB,GAAA,CAAC,GAAA,EAAA,EAAI,WAAW,MAAA,CAAO,QAAA,EACrB,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,iBAAgB,MAAA,EAAO,MAAA,EAClC,gBAAM,CAAA,EACT,CAAA,EAAA,EAHoC,GAItC,CACD,CAAA;AAAA,wBACD,GAAA,CAAC,GAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,aAAA,EACrB,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAO,MAAA;AAAA,YACP,OAAA,EAAQ,eAAA;AAAA,YACR,WAAW,MAAA,CAAO,QAAA;AAAA,YAEjB,YAAE,wBAAwB;AAAA;AAAA,SAC7B,EACF;AAAA,OAAA,EACF,CAAA,EACF;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1,7 +1,7 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".RiskMatrix-module_gridWrapper__5N7CV {\n display: flex;\n justify-content: center;\n padding-top: 32px;\n}\n\n.RiskMatrix-module_grid__cmMlX {\n width: 100%;\n max-width: 400px;\n display: grid;\n grid-template-rows: repeat(5, 1fr) auto auto;\n grid-template-columns: 30px 30px repeat(5, 1fr);\n gap: 4px;\n}\n\n.RiskMatrix-module_centered__6kMDb {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.RiskMatrix-module_konsekvens__aBOtR {\n grid-row: 1 / span 5;\n writing-mode: vertical-lr;\n transform: rotate(180deg);\n}\n\n.RiskMatrix-module_sannsynlighet__HG2gz {\n grid-row: 7;\n grid-column: 3 / span 5;\n}\n\n.RiskMatrix-module_estimatedCostContainer__BGrXX {\n margin-top: 18px;\n}\n";
4
- var styles = {"gridWrapper":"RiskMatrix-module_gridWrapper__5N7CV","grid":"RiskMatrix-module_grid__cmMlX","centered":"RiskMatrix-module_centered__6kMDb","konsekvens":"RiskMatrix-module_konsekvens__aBOtR","sannsynlighet":"RiskMatrix-module_sannsynlighet__HG2gz","estimatedCostContainer":"RiskMatrix-module_estimatedCostContainer__BGrXX"};
4
+ var styles = {"gridWrapper":"RiskMatrix-module_gridWrapper__5N7CV","grid":"RiskMatrix-module_grid__cmMlX","centered":"RiskMatrix-module_centered__6kMDb","konsekvens":"RiskMatrix-module_konsekvens__aBOtR","sannsynlighet":"RiskMatrix-module_sannsynlighet__HG2gz"};
5
5
  styleInject(css_248z);
6
6
 
7
7
  export { styles as default };
@@ -27,6 +27,25 @@ function MatrixTabs({ setTab, currentTab }) {
27
27
  )
28
28
  }
29
29
  ),
30
+ /* @__PURE__ */ jsx(
31
+ Button,
32
+ {
33
+ variant: currentTab === RiskMatrixTabs.currentRisk ? "primary" : "secondary",
34
+ onClick: () => setTab(RiskMatrixTabs.currentRisk),
35
+ "aria-label": "current risk",
36
+ className: styles.riskMatrixButton,
37
+ children: /* @__PURE__ */ jsx(
38
+ Text,
39
+ {
40
+ variant: "body-large",
41
+ weight: "bold",
42
+ className: styles.tabButtonTextBase,
43
+ "data-selected": currentTab === RiskMatrixTabs.currentRisk,
44
+ children: t("dictionary.currentRisk")
45
+ }
46
+ )
47
+ }
48
+ ),
30
49
  /* @__PURE__ */ jsx(
31
50
  Button,
32
51
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.esm.js","sources":["../../../src/components/riskMatrix/Tabs.tsx"],"sourcesContent":["import { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { RiskMatrixTabs } from './utils';\nimport { Text, Button, Flex } from '@backstage/ui';\nimport styles from './Tabs.module.css';\n\ninterface MatrixTabsProps {\n setTab: (tab: RiskMatrixTabs) => void;\n currentTab: RiskMatrixTabs;\n}\n\nexport function MatrixTabs({ setTab, currentTab }: MatrixTabsProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex pt=\"12px\">\n <Button\n variant={\n currentTab === RiskMatrixTabs.initialRisk ? 'primary' : 'secondary'\n }\n onClick={() => setTab(RiskMatrixTabs.initialRisk)}\n aria-label=\"Initial risk\"\n className={styles.riskMatrixButton}\n >\n <Text\n variant=\"body-large\"\n weight=\"bold\"\n className={styles.tabButtonTextBase}\n data-selected={currentTab === RiskMatrixTabs.initialRisk}\n >\n {t('dictionary.initialRisk')}\n </Text>\n </Button>\n <Button\n variant={\n currentTab === RiskMatrixTabs.remainingRisk ? 'primary' : 'secondary'\n }\n onClick={() => setTab(RiskMatrixTabs.remainingRisk)}\n aria-label=\"Remaining risk\"\n className={styles.riskMatrixButton}\n >\n <Text\n variant=\"body-large\"\n weight=\"bold\"\n className={styles.tabButtonTextBase}\n data-selected={currentTab === RiskMatrixTabs.remainingRisk}\n >\n {t('dictionary.restRisk')}\n </Text>\n </Button>\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,UAAA,EAAW,EAAoB;AAClE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EACP,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EACE,UAAA,KAAe,cAAA,CAAe,WAAA,GAAc,SAAA,GAAY,WAAA;AAAA,QAE1D,OAAA,EAAS,MAAM,MAAA,CAAO,cAAA,CAAe,WAAW,CAAA;AAAA,QAChD,YAAA,EAAW,cAAA;AAAA,QACX,WAAW,MAAA,CAAO,gBAAA;AAAA,QAElB,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAO,MAAA;AAAA,YACP,WAAW,MAAA,CAAO,iBAAA;AAAA,YAClB,eAAA,EAAe,eAAe,cAAA,CAAe,WAAA;AAAA,YAE5C,YAAE,wBAAwB;AAAA;AAAA;AAC7B;AAAA,KACF;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EACE,UAAA,KAAe,cAAA,CAAe,aAAA,GAAgB,SAAA,GAAY,WAAA;AAAA,QAE5D,OAAA,EAAS,MAAM,MAAA,CAAO,cAAA,CAAe,aAAa,CAAA;AAAA,QAClD,YAAA,EAAW,gBAAA;AAAA,QACX,WAAW,MAAA,CAAO,gBAAA;AAAA,QAElB,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAO,MAAA;AAAA,YACP,WAAW,MAAA,CAAO,iBAAA;AAAA,YAClB,eAAA,EAAe,eAAe,cAAA,CAAe,aAAA;AAAA,YAE5C,YAAE,qBAAqB;AAAA;AAAA;AAC1B;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"Tabs.esm.js","sources":["../../../src/components/riskMatrix/Tabs.tsx"],"sourcesContent":["import { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { RiskMatrixTabs } from './utils';\nimport { Text, Button, Flex } from '@backstage/ui';\nimport styles from './Tabs.module.css';\n\ninterface MatrixTabsProps {\n setTab: (tab: RiskMatrixTabs) => void;\n currentTab: RiskMatrixTabs;\n}\n\nexport function MatrixTabs({ setTab, currentTab }: MatrixTabsProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <Flex pt=\"12px\">\n <Button\n variant={\n currentTab === RiskMatrixTabs.initialRisk ? 'primary' : 'secondary'\n }\n onClick={() => setTab(RiskMatrixTabs.initialRisk)}\n aria-label=\"Initial risk\"\n className={styles.riskMatrixButton}\n >\n <Text\n variant=\"body-large\"\n weight=\"bold\"\n className={styles.tabButtonTextBase}\n data-selected={currentTab === RiskMatrixTabs.initialRisk}\n >\n {t('dictionary.initialRisk')}\n </Text>\n </Button>\n\n <Button\n variant={\n currentTab === RiskMatrixTabs.currentRisk ? 'primary' : 'secondary'\n }\n onClick={() => setTab(RiskMatrixTabs.currentRisk)}\n aria-label=\"current risk\"\n className={styles.riskMatrixButton}\n >\n <Text\n variant=\"body-large\"\n weight=\"bold\"\n className={styles.tabButtonTextBase}\n data-selected={currentTab === RiskMatrixTabs.currentRisk}\n >\n {t('dictionary.currentRisk')}\n </Text>\n </Button>\n\n <Button\n variant={\n currentTab === RiskMatrixTabs.remainingRisk ? 'primary' : 'secondary'\n }\n onClick={() => setTab(RiskMatrixTabs.remainingRisk)}\n aria-label=\"Remaining risk\"\n className={styles.riskMatrixButton}\n >\n <Text\n variant=\"body-large\"\n weight=\"bold\"\n className={styles.tabButtonTextBase}\n data-selected={currentTab === RiskMatrixTabs.remainingRisk}\n >\n {t('dictionary.restRisk')}\n </Text>\n </Button>\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,UAAA,EAAW,EAAoB;AAClE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,MAAA,EACP,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EACE,UAAA,KAAe,cAAA,CAAe,WAAA,GAAc,SAAA,GAAY,WAAA;AAAA,QAE1D,OAAA,EAAS,MAAM,MAAA,CAAO,cAAA,CAAe,WAAW,CAAA;AAAA,QAChD,YAAA,EAAW,cAAA;AAAA,QACX,WAAW,MAAA,CAAO,gBAAA;AAAA,QAElB,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAO,MAAA;AAAA,YACP,WAAW,MAAA,CAAO,iBAAA;AAAA,YAClB,eAAA,EAAe,eAAe,cAAA,CAAe,WAAA;AAAA,YAE5C,YAAE,wBAAwB;AAAA;AAAA;AAC7B;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EACE,UAAA,KAAe,cAAA,CAAe,WAAA,GAAc,SAAA,GAAY,WAAA;AAAA,QAE1D,OAAA,EAAS,MAAM,MAAA,CAAO,cAAA,CAAe,WAAW,CAAA;AAAA,QAChD,YAAA,EAAW,cAAA;AAAA,QACX,WAAW,MAAA,CAAO,gBAAA;AAAA,QAElB,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAO,MAAA;AAAA,YACP,WAAW,MAAA,CAAO,iBAAA;AAAA,YAClB,eAAA,EAAe,eAAe,cAAA,CAAe,WAAA;AAAA,YAE5C,YAAE,wBAAwB;AAAA;AAAA;AAC7B;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EACE,UAAA,KAAe,cAAA,CAAe,aAAA,GAAgB,SAAA,GAAY,WAAA;AAAA,QAE5D,OAAA,EAAS,MAAM,MAAA,CAAO,cAAA,CAAe,aAAa,CAAA;AAAA,QAClD,YAAA,EAAW,gBAAA;AAAA,QACX,WAAW,MAAA,CAAO,gBAAA;AAAA,QAElB,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAO,MAAA;AAAA,YACP,WAAW,MAAA,CAAO,iBAAA;AAAA,YAClB,eAAA,EAAe,eAAe,cAAA,CAAe,aAAA;AAAA,YAE5C,YAAE,qBAAqB;AAAA;AAAA;AAC1B;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1,6 +1,7 @@
1
1
  var RiskMatrixTabs = /* @__PURE__ */ ((RiskMatrixTabs2) => {
2
2
  RiskMatrixTabs2["initialRisk"] = "initialRisk";
3
3
  RiskMatrixTabs2["remainingRisk"] = "remainingRisk";
4
+ RiskMatrixTabs2["currentRisk"] = "currentRisk";
4
5
  return RiskMatrixTabs2;
5
6
  })(RiskMatrixTabs || {});
6
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"utils.esm.js","sources":["../../../src/components/riskMatrix/utils.tsx"],"sourcesContent":["export enum RiskMatrixTabs {\n initialRisk = 'initialRisk',\n remainingRisk = 'remainingRisk',\n}\n"],"names":["RiskMatrixTabs"],"mappings":"AAAO,IAAK,cAAA,qBAAAA,eAAAA,KAAL;AACL,EAAAA,gBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAFN,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;;;"}
1
+ {"version":3,"file":"utils.esm.js","sources":["../../../src/components/riskMatrix/utils.tsx"],"sourcesContent":["export enum RiskMatrixTabs {\n initialRisk = 'initialRisk',\n remainingRisk = 'remainingRisk',\n currentRisk = 'currentRisk',\n}\n"],"names":["RiskMatrixTabs"],"mappings":"AAAO,IAAK,cAAA,qBAAAA,eAAAA,KAAL;AACL,EAAAA,gBAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,gBAAA,aAAA,CAAA,GAAc,aAAA;AAHJ,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;;;;"}
@@ -17,7 +17,6 @@ import { CloseConfirmation } from './components/CloseConfirmation.esm.js';
17
17
  import { useScenario, scenarioWizardSteps } from '../../contexts/ScenarioContext.esm.js';
18
18
  import { useRiScs } from '../../contexts/RiScContext.esm.js';
19
19
  import Container from '@mui/material/Container';
20
- import { label } from '../common/typography.esm.js';
21
20
  import { useForm } from 'react-hook-form';
22
21
  import { useSearchParams } from 'react-router-dom';
23
22
  import { getAlertSeverity } from '../../utils/utilityfunctions.esm.js';
@@ -115,7 +114,7 @@ function ScenarioWizard({ step }) {
115
114
  activeStep: scenarioWizardSteps.indexOf(step),
116
115
  alternativeLabel: true,
117
116
  nonLinear: true,
118
- children: scenarioWizardSteps.map((wizardStep) => /* @__PURE__ */ jsx(Step, { completed: false, children: /* @__PURE__ */ jsx(StepButton, { sx: label, onClick: () => selectStep(wizardStep), children: t(`dictionary.${wizardStep}`) }) }, wizardStep))
117
+ children: scenarioWizardSteps.map((wizardStep) => /* @__PURE__ */ jsx(Step, { completed: false, children: /* @__PURE__ */ jsx(StepButton, { onClick: () => selectStep(wizardStep), children: /* @__PURE__ */ jsx(Text, { children: t(`dictionary.${wizardStep}`) }) }) }, wizardStep))
119
118
  }
120
119
  ),
121
120
  /* @__PURE__ */ jsx(Divider, {}),