@kartverket/backstage-plugin-risk-scorecard 5.2.2 → 5.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/components/common/Markdown.esm.js +5 -16
  2. package/dist/components/common/Markdown.esm.js.map +1 -1
  3. package/dist/components/common/Markdown.module.css.esm.js +8 -0
  4. package/dist/components/common/Markdown.module.css.esm.js.map +1 -0
  5. package/dist/components/common/Spinner.esm.js +3 -23
  6. package/dist/components/common/Spinner.esm.js.map +1 -1
  7. package/dist/components/common/Spinner.module.css.esm.js +8 -0
  8. package/dist/components/common/Spinner.module.css.esm.js.map +1 -0
  9. package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js +2 -2
  10. package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js.map +1 -1
  11. package/dist/components/riScDialog/MatrixDialog.esm.js +3 -3
  12. package/dist/components/riScDialog/MatrixDialog.esm.js.map +1 -1
  13. package/dist/components/riScDialog/RiScDialog.esm.js +8 -8
  14. package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
  15. package/dist/components/riScDialog/RiScDialog.module.css.esm.js +2 -2
  16. package/dist/components/riScDialog/SupportDialog.esm.js +8 -8
  17. package/dist/components/riScDialog/SupportDialog.esm.js.map +1 -1
  18. package/dist/components/riScDialog/SupportDialog.module.css.esm.js +8 -0
  19. package/dist/components/riScDialog/SupportDialog.module.css.esm.js.map +1 -0
  20. package/dist/components/riScInfo/changeset/components/changeSetStyles.esm.js +1 -3
  21. package/dist/components/riScInfo/changeset/components/changeSetStyles.esm.js.map +1 -1
  22. package/dist/components/riScInfo/migrations/components/MigrationTitle.esm.js +10 -9
  23. package/dist/components/riScInfo/migrations/components/MigrationTitle.esm.js.map +1 -1
  24. package/dist/components/riScInfo/migrations/components/MigrationTitle.module.css.esm.js +8 -0
  25. package/dist/components/riScInfo/migrations/components/MigrationTitle.module.css.esm.js.map +1 -0
  26. package/dist/components/riskMatrix/AggregatedCost.esm.js +11 -4
  27. package/dist/components/riskMatrix/AggregatedCost.esm.js.map +1 -1
  28. package/dist/components/riskMatrix/AggregatedCost.module.css.esm.js +2 -2
  29. package/dist/components/riskMatrix/RiskMatrixSquare.esm.js +1 -2
  30. package/dist/components/riskMatrix/RiskMatrixSquare.esm.js.map +1 -1
  31. package/dist/components/scenarioDrawer/components/RiskOptionDisplay.esm.js +12 -35
  32. package/dist/components/scenarioDrawer/components/RiskOptionDisplay.esm.js.map +1 -1
  33. package/dist/components/scenarioDrawer/components/RiskOptionDisplay.module.css.esm.js +8 -0
  34. package/dist/components/scenarioDrawer/components/RiskOptionDisplay.module.css.esm.js.map +1 -0
  35. package/dist/utils/translations.esm.js +2 -2
  36. package/dist/utils/translations.esm.js.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/components/riScInfo/migrations/components/migrationStyles.esm.js +0 -19
  39. package/dist/components/riScInfo/migrations/components/migrationStyles.esm.js.map +0 -1
@@ -3,24 +3,13 @@ import ReactMarkdown from 'react-markdown';
3
3
  import 'github-markdown-css/github-markdown.css';
4
4
  import remarkBreaks from 'remark-breaks';
5
5
  import { Text } from '@backstage/ui';
6
- import { useTheme } from '@mui/material/styles';
6
+ import styles from './Markdown.module.css.esm.js';
7
7
 
8
8
  function Markdown({ description }) {
9
- const theme = useTheme();
10
- return /* @__PURE__ */ jsxs(
11
- Text,
12
- {
13
- variant: "body-large",
14
- className: "markdown-body",
15
- style: {
16
- color: theme.palette.mode === "dark" ? "var(--bui-white)" : "var(--bui-black)"
17
- },
18
- children: [
19
- " ",
20
- /* @__PURE__ */ jsx(ReactMarkdown, { remarkPlugins: [remarkBreaks], children: description })
21
- ]
22
- }
23
- );
9
+ return /* @__PURE__ */ jsxs(Text, { variant: "body-large", className: `markdown-body ${styles.markdown}`, children: [
10
+ " ",
11
+ /* @__PURE__ */ jsx(ReactMarkdown, { remarkPlugins: [remarkBreaks], children: description })
12
+ ] });
24
13
  }
25
14
 
26
15
  export { Markdown };
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.esm.js","sources":["../../../src/components/common/Markdown.tsx"],"sourcesContent":["import ReactMarkdown from 'react-markdown';\nimport 'github-markdown-css/github-markdown.css';\nimport remarkBreaks from 'remark-breaks';\nimport { Text } from '@backstage/ui';\nimport { useTheme } from '@mui/material/styles';\n\ntype Props = {\n description: string;\n};\n\nexport function Markdown({ description }: Props) {\n const theme = useTheme();\n return (\n <Text\n variant=\"body-large\"\n className=\"markdown-body\"\n style={{\n color:\n theme.palette.mode === 'dark'\n ? 'var(--bui-white)'\n : 'var(--bui-black)',\n }}\n >\n {' '}\n <ReactMarkdown remarkPlugins={[remarkBreaks]}>\n {description}\n </ReactMarkdown>\n </Text>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAUO,SAAS,QAAA,CAAS,EAAE,WAAA,EAAY,EAAU;AAC/C,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,YAAA;AAAA,MACR,SAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,KAAA,EACE,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,SACnB,kBAAA,GACA;AAAA,OACR;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,4BACA,aAAA,EAAA,EAAc,aAAA,EAAe,CAAC,YAAY,GACxC,QAAA,EAAA,WAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"Markdown.esm.js","sources":["../../../src/components/common/Markdown.tsx"],"sourcesContent":["import ReactMarkdown from 'react-markdown';\nimport 'github-markdown-css/github-markdown.css';\nimport remarkBreaks from 'remark-breaks';\nimport { Text } from '@backstage/ui';\nimport styles from './Markdown.module.css';\n\ntype Props = {\n description: string;\n};\n\nexport function Markdown({ description }: Props) {\n return (\n <Text variant=\"body-large\" className={`markdown-body ${styles.markdown}`}>\n {' '}\n <ReactMarkdown remarkPlugins={[remarkBreaks]}>\n {description}\n </ReactMarkdown>\n </Text>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAUO,SAAS,QAAA,CAAS,EAAE,WAAA,EAAY,EAAU;AAC/C,EAAA,uBACE,IAAA,CAAC,QAAK,OAAA,EAAQ,YAAA,EAAa,WAAW,CAAA,cAAA,EAAiB,MAAA,CAAO,QAAQ,CAAA,CAAA,EACnE,QAAA,EAAA;AAAA,IAAA,GAAA;AAAA,wBACA,aAAA,EAAA,EAAc,aAAA,EAAe,CAAC,YAAY,GACxC,QAAA,EAAA,WAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = ".Markdown_markdown__f23a3d8021 {\n color: var(--bui-fg-primary);\n}\n";
4
+ var styles = {"markdown":"Markdown_markdown__f23a3d8021"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=Markdown.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Markdown.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1,30 +1,10 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import Box from '@mui/material/Box';
2
+ import { Flex } from '@backstage/ui';
3
3
  import CircularProgress from '@mui/material/CircularProgress';
4
+ import styles from './Spinner.module.css.esm.js';
4
5
 
5
6
  function Spinner({ size }) {
6
- return /* @__PURE__ */ jsx(
7
- Box,
8
- {
9
- sx: {
10
- display: "flex",
11
- minWidth: "100wh",
12
- height: "100vh",
13
- justifyContent: "center",
14
- alignItems: "flex-start"
15
- },
16
- children: /* @__PURE__ */ jsx(
17
- CircularProgress,
18
- {
19
- size,
20
- sx: {
21
- display: "flex",
22
- marginTop: "200px"
23
- }
24
- }
25
- )
26
- }
27
- );
7
+ return /* @__PURE__ */ jsx(Flex, { align: "start", justify: "center", className: styles.container, children: /* @__PURE__ */ jsx(CircularProgress, { size, className: styles.progress }) });
28
8
  }
29
9
 
30
10
  export { Spinner };
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.esm.js","sources":["../../../src/components/common/Spinner.tsx"],"sourcesContent":["import Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\n\nexport function Spinner({ size }: { size?: string | number }) {\n return (\n <Box\n sx={{\n display: 'flex',\n minWidth: '100wh',\n height: '100vh',\n justifyContent: 'center',\n alignItems: 'flex-start',\n }}\n >\n <CircularProgress\n size={size}\n sx={{\n display: 'flex',\n marginTop: '200px',\n }}\n />\n </Box>\n );\n}\n"],"names":[],"mappings":";;;;AAGO,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAK,EAA+B;AAC5D,EAAA,uBACE,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,QAAA,EAAU,OAAA;AAAA,QACV,MAAA,EAAQ,OAAA;AAAA,QACR,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,IAAA;AAAA,UACA,EAAA,EAAI;AAAA,YACF,OAAA,EAAS,MAAA;AAAA,YACT,SAAA,EAAW;AAAA;AACb;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"Spinner.esm.js","sources":["../../../src/components/common/Spinner.tsx"],"sourcesContent":["import { Flex } from '@backstage/ui';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport styles from './Spinner.module.css';\n\nexport function Spinner({ size }: { size?: string | number }) {\n return (\n <Flex align=\"start\" justify=\"center\" className={styles.container}>\n <CircularProgress size={size} className={styles.progress} />\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;;AAIO,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAK,EAA+B;AAC5D,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,SAAQ,QAAA,EAAS,SAAA,EAAW,MAAA,CAAO,SAAA,EACrD,8BAAC,gBAAA,EAAA,EAAiB,IAAA,EAAY,SAAA,EAAW,MAAA,CAAO,UAAU,CAAA,EAC5D,CAAA;AAEJ;;;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = ".Spinner_container__28efa6c246 {\n height: 100vh;\n}\n\n.Spinner_progress__28efa6c246 {\n display: flex;\n margin-top: 200px;\n}\n";
4
+ var styles = {"container":"Spinner_container__28efa6c246","progress":"Spinner_progress__28efa6c246"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=Spinner.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Spinner.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -12,7 +12,7 @@ import { isPublicAgeKeyValid } from '../../utils/utilityfunctions.esm.js';
12
12
  import FormHelperText from '@mui/material/FormHelperText';
13
13
  import { URLS } from '../../urls/index.esm.js';
14
14
  import { Flex, Text, Box, Link, Button } from '@backstage/ui';
15
- import styles from './RiScDialog.module.css.esm.js';
15
+ import dialogStyles from './RiScDialog.module.css.esm.js';
16
16
 
17
17
  function ConfigEncryptionDialog({
18
18
  gcpCryptoKeys,
@@ -104,7 +104,7 @@ function ConfigEncryptionDialog({
104
104
  )
105
105
  ] }),
106
106
  errors.sopsConfig !== void 0 && /* @__PURE__ */ jsx(FormHelperText, { error: true, children: t("sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage") }),
107
- /* @__PURE__ */ jsx(Box, { className: styles.accordionContainer, children: /* @__PURE__ */ jsxs(Accordion, { elevation: 0, defaultExpanded: publicAgeKeys.length > 0, children: [
107
+ /* @__PURE__ */ jsx(Box, { className: dialogStyles.accordionContainer, children: /* @__PURE__ */ jsxs(Accordion, { elevation: 0, defaultExpanded: publicAgeKeys.length > 0, children: [
108
108
  /* @__PURE__ */ jsx(
109
109
  AccordionSummary,
110
110
  {
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigEncryptionDialog.esm.js","sources":["../../../src/components/riScDialog/ConfigEncryptionDialog.tsx"],"sourcesContent":["import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n FormLabel,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n TextField,\n} from '@mui/material';\nimport { GcpCryptoKeyRadioGroup } from '../sopsConfigDialog/GcpCryptoKeyRadioGroup';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { AddCircle, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport {\n CryptoKeyPermission,\n GcpCryptoKeyObject,\n SopsConfigDTO,\n} from '../../utils/DTOs';\nimport { useEffect, useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { UseFormRegister, UseFormSetValue } from 'react-hook-form';\nimport { RiScDialogStates } from './RiScDialog';\nimport { isPublicAgeKeyValid } from '../../utils/utilityfunctions';\nimport { FieldErrors } from 'react-hook-form';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { URLS } from '../../urls';\nimport { Text, Link, Button, Flex, Box } from '@backstage/ui';\nimport styles from '../riScDialog/RiScDialog.module.css';\n\ninterface ConfigEncryptionDialogProps {\n gcpCryptoKeys: GcpCryptoKeyObject[];\n sopsData?: SopsConfigDTO;\n setValue: UseFormSetValue<RiScWithMetadata>;\n register: UseFormRegister<RiScWithMetadata>;\n errors: FieldErrors<RiScWithMetadata>;\n state: RiScDialogStates;\n}\n\nfunction ConfigEncryptionDialog({\n gcpCryptoKeys,\n sopsData,\n setValue,\n register,\n errors,\n state,\n}: ConfigEncryptionDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [publicAgeKeyHelperText, setPublicKeyTextFieldHelperText] =\n useState('');\n const [publicAgeKeyError, setPublicKeyTextFieldError] = useState(false);\n const [newPublicAgeKey, setNewPublicAgeKey] = useState('');\n const [publicAgeKeys, setPublicAgeKeys] = useState<string[]>(() => {\n if (sopsData?.age) {\n return sopsData.age.map(age => age.recipient);\n }\n return [];\n });\n\n // The RiSc may have been encrypted with a key that\n // no longer matches the naming convention of keys\n // returned from the backend. But we still want to show\n // that key as an option in the radio group, so we\n // build a key object from the sops data of the RiSc if needed.\n const riscCryptoKey =\n state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms\n ? (gcpCryptoKeys.find(\n key => key.resourceId === sopsData.gcp_kms![0].resource_id,\n ) ?? buildKeyFromSopsData(sopsData))\n : undefined;\n\n const choosableCryptoKeys = riscCryptoKey\n ? [\n riscCryptoKey,\n ...gcpCryptoKeys.filter(\n key => key.resourceId !== riscCryptoKey.resourceId,\n ),\n ]\n : gcpCryptoKeys;\n\n const [chosenGcpCryptoKey, setChosenGcpCryptoKey] = useState<\n GcpCryptoKeyObject | undefined\n >(() => {\n if (state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms) {\n const gcpKms = sopsData.gcp_kms[0];\n return choosableCryptoKeys.find(\n key => key.resourceId === gcpKms?.resource_id,\n );\n }\n return gcpCryptoKeys[0];\n });\n\n const [isAddPublicAgeKeyVisible, setIsAddPublicAgeKeyVisible] =\n useState(false);\n\n function showAddPublicAgeKey() {\n setIsAddPublicAgeKeyVisible(true);\n }\n\n useEffect(() => {\n setValue('sopsConfig', {\n shamir_threshold: 2,\n gcp_kms: chosenGcpCryptoKey\n ? [\n {\n resource_id: chosenGcpCryptoKey.resourceId,\n created_at: chosenGcpCryptoKey.createdAt,\n },\n ]\n : [],\n age: publicAgeKeys.map(key => ({ recipient: key })),\n });\n }, [chosenGcpCryptoKey, publicAgeKeys, setValue]);\n\n // Require one key group to contain a GCP key\n register('sopsConfig.gcp_kms', {\n validate: gcpKeys => gcpKeys.length > 0,\n });\n\n function handleChangeGcpCryptoKey(newKey: GcpCryptoKeyObject) {\n setChosenGcpCryptoKey(newKey);\n }\n\n function handleAddPublicAgeKey() {\n if (isPublicAgeKeyValid(newPublicAgeKey)) {\n if (publicAgeKeys.includes(newPublicAgeKey)) {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyAlreadyExistInSopsConfig'),\n );\n setPublicKeyTextFieldError(true);\n } else {\n setPublicAgeKeys([...publicAgeKeys, newPublicAgeKey]);\n setNewPublicAgeKey('');\n }\n } else {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyNotValid'),\n );\n setPublicKeyTextFieldError(true);\n }\n }\n\n return (\n <Flex direction=\"column\">\n <Text>\n {state === RiScDialogStates.Create\n ? t('sopsConfigDialog.description.new')\n : t('sopsConfigDialog.description.edit')}\n </Text>\n <Flex direction=\"column\" gap=\"0px\">\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('sopsConfigDialog.selectKeysTitle')}\n </Text>\n <GcpCryptoKeyRadioGroup\n chosenGcpCryptoKey={chosenGcpCryptoKey}\n onChange={handleChangeGcpCryptoKey}\n gcpCryptoKeys={choosableCryptoKeys}\n />\n </Flex>\n {errors.sopsConfig !== undefined && (\n <FormHelperText error={true}>\n {t('sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage')}\n </FormHelperText>\n )}\n <Box className={styles.accordionContainer}>\n <Accordion elevation={0} defaultExpanded={publicAgeKeys.length > 0}>\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n {t('sopsConfigDialog.publicAgeKeyQuestion')}\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n {publicAgeKeys.length > 0 && (\n <FormLabel>\n {t('sopsConfigDialog.publicAgeKeysAlreadyPresent')}\n </FormLabel>\n )}\n {publicAgeKeys.length > 0 && (\n <Box\n style={{\n border: '1px solid',\n borderRadius: '4px',\n marginBottom: 2,\n }}\n >\n <List>\n {publicAgeKeys.map(key => (\n <ListItem key={key} dense>\n <ListItemText>{key}</ListItemText>\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n setPublicAgeKeys(\n publicAgeKeys.filter(k => k !== key),\n );\n }}\n >\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n )}\n <Text as=\"p\" variant=\"body-large\">\n {t('dictionary.click')}{' '}\n <Link\n href={\n URLS.external.kartverket_atlassian_net__write_ros_locally\n }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"primary\"\n >\n {t('dictionary.here')}\n </Link>{' '}\n {t('sopsConfigDialog.writeLocalRiscSuffix')}\n </Text>\n <Text as=\"p\" variant=\"body-large\">\n {`${t('sopsConfigDialog.publicAgeKeyDescription')} (${t(\n 'dictionary.optional',\n )})`}{' '}\n </Text>\n <Flex direction=\"column\" justify=\"between\" gap=\"2\" mt=\"2\">\n {!isAddPublicAgeKeyVisible && (\n <Button\n iconStart={<AddCircle />}\n type=\"button\"\n variant=\"secondary\"\n onClick={showAddPublicAgeKey}\n style={{\n width: 'fit-content',\n marginTop: '1rem',\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n )}\n {isAddPublicAgeKeyVisible && (\n <Flex align=\"center\" gap=\"1\">\n <TextField\n label={t('sopsConfigDialog.publicAgeKey')}\n helperText={publicAgeKeyHelperText}\n error={publicAgeKeyError}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleAddPublicAgeKey();\n }\n }}\n onFocus={() => {\n setPublicKeyTextFieldError(false);\n setPublicKeyTextFieldHelperText('');\n }}\n value={newPublicAgeKey}\n onChange={e => setNewPublicAgeKey(e.target.value)}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n onClick={handleAddPublicAgeKey}\n style={{\n maxWidth: 200,\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n </Flex>\n )}\n </Flex>\n </Box>\n </AccordionDetails>\n </Accordion>\n </Box>\n </Flex>\n );\n}\n\nexport default ConfigEncryptionDialog;\n\nfunction buildKeyFromSopsData(sopsData: SopsConfigDTO | undefined) {\n const gcpKms = sopsData?.gcp_kms?.[0];\n if (!gcpKms || !gcpKms.resource_id) {\n return undefined;\n }\n const resourceParts = gcpKms.resource_id.split('/');\n if (resourceParts.length === 8) {\n return {\n projectId: resourceParts[1],\n keyRing: resourceParts[5],\n name: resourceParts[7],\n locations: resourceParts[3],\n resourceId: gcpKms.resource_id,\n createdAt: gcpKms.created_at,\n userPermissions: [CryptoKeyPermission.UNKNOWN],\n };\n }\n\n return undefined;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfigEncryptionDialog.esm.js","sources":["../../../src/components/riScDialog/ConfigEncryptionDialog.tsx"],"sourcesContent":["import {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n FormLabel,\n IconButton,\n List,\n ListItem,\n ListItemSecondaryAction,\n ListItemText,\n TextField,\n} from '@mui/material';\nimport { GcpCryptoKeyRadioGroup } from '../sopsConfigDialog/GcpCryptoKeyRadioGroup';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { AddCircle, ExpandMore } from '@mui/icons-material';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport {\n CryptoKeyPermission,\n GcpCryptoKeyObject,\n SopsConfigDTO,\n} from '../../utils/DTOs';\nimport { useEffect, useState } from 'react';\nimport { RiScWithMetadata } from '../../utils/types';\nimport { UseFormRegister, UseFormSetValue } from 'react-hook-form';\nimport { RiScDialogStates } from './RiScDialog';\nimport { isPublicAgeKeyValid } from '../../utils/utilityfunctions';\nimport { FieldErrors } from 'react-hook-form';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport { URLS } from '../../urls';\nimport { Text, Link, Button, Flex, Box } from '@backstage/ui';\nimport styles from '../riScDialog/RiScDialog.module.css';\n\ninterface ConfigEncryptionDialogProps {\n gcpCryptoKeys: GcpCryptoKeyObject[];\n sopsData?: SopsConfigDTO;\n setValue: UseFormSetValue<RiScWithMetadata>;\n register: UseFormRegister<RiScWithMetadata>;\n errors: FieldErrors<RiScWithMetadata>;\n state: RiScDialogStates;\n}\n\nfunction ConfigEncryptionDialog({\n gcpCryptoKeys,\n sopsData,\n setValue,\n register,\n errors,\n state,\n}: ConfigEncryptionDialogProps) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const [publicAgeKeyHelperText, setPublicKeyTextFieldHelperText] =\n useState('');\n const [publicAgeKeyError, setPublicKeyTextFieldError] = useState(false);\n const [newPublicAgeKey, setNewPublicAgeKey] = useState('');\n const [publicAgeKeys, setPublicAgeKeys] = useState<string[]>(() => {\n if (sopsData?.age) {\n return sopsData.age.map(age => age.recipient);\n }\n return [];\n });\n\n // The RiSc may have been encrypted with a key that\n // no longer matches the naming convention of keys\n // returned from the backend. But we still want to show\n // that key as an option in the radio group, so we\n // build a key object from the sops data of the RiSc if needed.\n const riscCryptoKey =\n state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms\n ? (gcpCryptoKeys.find(\n key => key.resourceId === sopsData.gcp_kms![0].resource_id,\n ) ?? buildKeyFromSopsData(sopsData))\n : undefined;\n\n const choosableCryptoKeys = riscCryptoKey\n ? [\n riscCryptoKey,\n ...gcpCryptoKeys.filter(\n key => key.resourceId !== riscCryptoKey.resourceId,\n ),\n ]\n : gcpCryptoKeys;\n\n const [chosenGcpCryptoKey, setChosenGcpCryptoKey] = useState<\n GcpCryptoKeyObject | undefined\n >(() => {\n if (state === RiScDialogStates.EditEncryption && sopsData?.gcp_kms) {\n const gcpKms = sopsData.gcp_kms[0];\n return choosableCryptoKeys.find(\n key => key.resourceId === gcpKms?.resource_id,\n );\n }\n return gcpCryptoKeys[0];\n });\n\n const [isAddPublicAgeKeyVisible, setIsAddPublicAgeKeyVisible] =\n useState(false);\n\n function showAddPublicAgeKey() {\n setIsAddPublicAgeKeyVisible(true);\n }\n\n useEffect(() => {\n setValue('sopsConfig', {\n shamir_threshold: 2,\n gcp_kms: chosenGcpCryptoKey\n ? [\n {\n resource_id: chosenGcpCryptoKey.resourceId,\n created_at: chosenGcpCryptoKey.createdAt,\n },\n ]\n : [],\n age: publicAgeKeys.map(key => ({ recipient: key })),\n });\n }, [chosenGcpCryptoKey, publicAgeKeys, setValue]);\n\n // Require one key group to contain a GCP key\n register('sopsConfig.gcp_kms', {\n validate: gcpKeys => gcpKeys.length > 0,\n });\n\n function handleChangeGcpCryptoKey(newKey: GcpCryptoKeyObject) {\n setChosenGcpCryptoKey(newKey);\n }\n\n function handleAddPublicAgeKey() {\n if (isPublicAgeKeyValid(newPublicAgeKey)) {\n if (publicAgeKeys.includes(newPublicAgeKey)) {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyAlreadyExistInSopsConfig'),\n );\n setPublicKeyTextFieldError(true);\n } else {\n setPublicAgeKeys([...publicAgeKeys, newPublicAgeKey]);\n setNewPublicAgeKey('');\n }\n } else {\n setPublicKeyTextFieldHelperText(\n t('sopsConfigDialog.publicKeyHelperTextKeyNotValid'),\n );\n setPublicKeyTextFieldError(true);\n }\n }\n\n return (\n <Flex direction=\"column\">\n <Text>\n {state === RiScDialogStates.Create\n ? t('sopsConfigDialog.description.new')\n : t('sopsConfigDialog.description.edit')}\n </Text>\n <Flex direction=\"column\" gap=\"0px\">\n <Text variant=\"body-medium\" weight=\"bold\">\n {t('sopsConfigDialog.selectKeysTitle')}\n </Text>\n <GcpCryptoKeyRadioGroup\n chosenGcpCryptoKey={chosenGcpCryptoKey}\n onChange={handleChangeGcpCryptoKey}\n gcpCryptoKeys={choosableCryptoKeys}\n />\n </Flex>\n {errors.sopsConfig !== undefined && (\n <FormHelperText error={true}>\n {t('sopsConfigDialog.gcpCryptoKeyNonSelectedErrorMessage')}\n </FormHelperText>\n )}\n <Box className={styles.accordionContainer}>\n <Accordion elevation={0} defaultExpanded={publicAgeKeys.length > 0}>\n <AccordionSummary\n expandIcon={<ExpandMore />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n {t('sopsConfigDialog.publicAgeKeyQuestion')}\n </AccordionSummary>\n <AccordionDetails>\n <Box>\n {publicAgeKeys.length > 0 && (\n <FormLabel>\n {t('sopsConfigDialog.publicAgeKeysAlreadyPresent')}\n </FormLabel>\n )}\n {publicAgeKeys.length > 0 && (\n <Box\n style={{\n border: '1px solid',\n borderRadius: '4px',\n marginBottom: 2,\n }}\n >\n <List>\n {publicAgeKeys.map(key => (\n <ListItem key={key} dense>\n <ListItemText>{key}</ListItemText>\n <ListItemSecondaryAction>\n <IconButton\n onClick={() => {\n setPublicAgeKeys(\n publicAgeKeys.filter(k => k !== key),\n );\n }}\n >\n <DeleteIcon />\n </IconButton>\n </ListItemSecondaryAction>\n </ListItem>\n ))}\n </List>\n </Box>\n )}\n <Text as=\"p\" variant=\"body-large\">\n {t('dictionary.click')}{' '}\n <Link\n href={\n URLS.external.kartverket_atlassian_net__write_ros_locally\n }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n color=\"primary\"\n >\n {t('dictionary.here')}\n </Link>{' '}\n {t('sopsConfigDialog.writeLocalRiscSuffix')}\n </Text>\n <Text as=\"p\" variant=\"body-large\">\n {`${t('sopsConfigDialog.publicAgeKeyDescription')} (${t(\n 'dictionary.optional',\n )})`}{' '}\n </Text>\n <Flex direction=\"column\" justify=\"between\" gap=\"2\" mt=\"2\">\n {!isAddPublicAgeKeyVisible && (\n <Button\n iconStart={<AddCircle />}\n type=\"button\"\n variant=\"secondary\"\n onClick={showAddPublicAgeKey}\n style={{\n width: 'fit-content',\n marginTop: '1rem',\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n )}\n {isAddPublicAgeKeyVisible && (\n <Flex align=\"center\" gap=\"1\">\n <TextField\n label={t('sopsConfigDialog.publicAgeKey')}\n helperText={publicAgeKeyHelperText}\n error={publicAgeKeyError}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleAddPublicAgeKey();\n }\n }}\n onFocus={() => {\n setPublicKeyTextFieldError(false);\n setPublicKeyTextFieldHelperText('');\n }}\n value={newPublicAgeKey}\n onChange={e => setNewPublicAgeKey(e.target.value)}\n sx={{ flex: 1 }}\n />\n <Button\n variant=\"primary\"\n onClick={handleAddPublicAgeKey}\n style={{\n maxWidth: 200,\n }}\n >\n {t('sopsConfigDialog.addPublicAgeKey')}\n </Button>\n </Flex>\n )}\n </Flex>\n </Box>\n </AccordionDetails>\n </Accordion>\n </Box>\n </Flex>\n );\n}\n\nexport default ConfigEncryptionDialog;\n\nfunction buildKeyFromSopsData(sopsData: SopsConfigDTO | undefined) {\n const gcpKms = sopsData?.gcp_kms?.[0];\n if (!gcpKms || !gcpKms.resource_id) {\n return undefined;\n }\n const resourceParts = gcpKms.resource_id.split('/');\n if (resourceParts.length === 8) {\n return {\n projectId: resourceParts[1],\n keyRing: resourceParts[5],\n name: resourceParts[7],\n locations: resourceParts[3],\n resourceId: gcpKms.resource_id,\n createdAt: gcpKms.created_at,\n userPermissions: [CryptoKeyPermission.UNKNOWN],\n };\n }\n\n return undefined;\n}\n"],"names":["styles"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
5
5
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
6
6
  import Box from '@mui/material/Box';
7
7
  import { Text } from '@backstage/ui';
8
- import styles from './RiScDialog.module.css.esm.js';
8
+ import dialogStyles from './RiScDialog.module.css.esm.js';
9
9
  import DialogComponent from '../dialog/DialogComponent.esm.js';
10
10
 
11
11
  function MatrixDialog({
@@ -19,9 +19,9 @@ function MatrixDialog({
19
19
  isOpen: open,
20
20
  onClick: close,
21
21
  header: t("scenarioDrawer.riskMatrixModal.title"),
22
- className: styles.matrixDialog,
22
+ className: dialogStyles.matrixDialog,
23
23
  children: [
24
- /* @__PURE__ */ jsx(Text, { as: "p", variant: "body-large", className: styles.matrixDialogBody, children: t("scenarioStepper.initialRiskStep.subtitle") }),
24
+ /* @__PURE__ */ jsx(Text, { as: "p", variant: "body-large", className: dialogStyles.matrixDialogBody, children: t("scenarioStepper.initialRiskStep.subtitle") }),
25
25
  /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: t("dictionary.probability") }) }),
26
26
  /* @__PURE__ */ jsx(ProbabilityTableInfoWithHeaders, {}),
27
27
  /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { variant: "title-x-small", weight: "bold", children: t("dictionary.consequence") }) }),
@@ -1 +1 @@
1
- {"version":3,"file":"MatrixDialog.esm.js","sources":["../../../src/components/riScDialog/MatrixDialog.tsx"],"sourcesContent":["import { ConsequenceTableInfoWithHeaders } from '../scenarioWizard/components/ConsequenceTable';\nimport { ProbabilityTableInfoWithHeaders } from '../scenarioWizard/components/ProbabilityTable';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport Box from '@mui/material/Box';\nimport { Text } from '@backstage/ui';\nimport styles from './RiScDialog.module.css';\nimport DialogComponent from '../dialog/DialogComponent';\n\nexport function MatrixDialog({\n open,\n close,\n}: {\n open: boolean;\n close: () => void;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <DialogComponent\n isOpen={open}\n onClick={close}\n header={t('scenarioDrawer.riskMatrixModal.title')}\n className={styles.matrixDialog}\n >\n <Text as=\"p\" variant=\"body-large\" className={styles.matrixDialogBody}>\n {t('scenarioStepper.initialRiskStep.subtitle')}\n </Text>\n <Box>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.probability')}\n </Text>\n </Box>\n <ProbabilityTableInfoWithHeaders />\n <Box>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.consequence')}\n </Text>\n </Box>\n <ConsequenceTableInfoWithHeaders />\n </DialogComponent>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AASO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,EAAE,sCAAsC,CAAA;AAAA,MAChD,WAAW,MAAA,CAAO,YAAA;AAAA,MAElB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,YAAA,EAAa,WAAW,MAAA,CAAO,gBAAA,EACjD,QAAA,EAAA,CAAA,CAAE,0CAA0C,CAAA,EAC/C,CAAA;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,MAAA,EAAO,MAAA,EAClC,QAAA,EAAA,CAAA,CAAE,wBAAwB,CAAA,EAC7B,CAAA,EACF,CAAA;AAAA,4BACC,+BAAA,EAAA,EAAgC,CAAA;AAAA,wBACjC,GAAA,CAAC,GAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,MAAA,EAAO,MAAA,EAClC,QAAA,EAAA,CAAA,CAAE,wBAAwB,CAAA,EAC7B,CAAA,EACF,CAAA;AAAA,4BACC,+BAAA,EAAA,EAAgC;AAAA;AAAA;AAAA,GACnC;AAEJ;;;;"}
1
+ {"version":3,"file":"MatrixDialog.esm.js","sources":["../../../src/components/riScDialog/MatrixDialog.tsx"],"sourcesContent":["import { ConsequenceTableInfoWithHeaders } from '../scenarioWizard/components/ConsequenceTable';\nimport { ProbabilityTableInfoWithHeaders } from '../scenarioWizard/components/ProbabilityTable';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport Box from '@mui/material/Box';\nimport { Text } from '@backstage/ui';\nimport styles from './RiScDialog.module.css';\nimport DialogComponent from '../dialog/DialogComponent';\n\nexport function MatrixDialog({\n open,\n close,\n}: {\n open: boolean;\n close: () => void;\n}) {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <DialogComponent\n isOpen={open}\n onClick={close}\n header={t('scenarioDrawer.riskMatrixModal.title')}\n className={styles.matrixDialog}\n >\n <Text as=\"p\" variant=\"body-large\" className={styles.matrixDialogBody}>\n {t('scenarioStepper.initialRiskStep.subtitle')}\n </Text>\n <Box>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.probability')}\n </Text>\n </Box>\n <ProbabilityTableInfoWithHeaders />\n <Box>\n <Text variant=\"title-x-small\" weight=\"bold\">\n {t('dictionary.consequence')}\n </Text>\n </Box>\n <ConsequenceTableInfoWithHeaders />\n </DialogComponent>\n );\n}\n"],"names":["styles"],"mappings":";;;;;;;;;;AASO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA;AACF,CAAA,EAGG;AACD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,EAAE,sCAAsC,CAAA;AAAA,MAChD,WAAWA,YAAA,CAAO,YAAA;AAAA,MAElB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,OAAA,EAAQ,YAAA,EAAa,WAAWA,YAAA,CAAO,gBAAA,EACjD,QAAA,EAAA,CAAA,CAAE,0CAA0C,CAAA,EAC/C,CAAA;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,MAAA,EAAO,MAAA,EAClC,QAAA,EAAA,CAAA,CAAE,wBAAwB,CAAA,EAC7B,CAAA,EACF,CAAA;AAAA,4BACC,+BAAA,EAAA,EAAgC,CAAA;AAAA,wBACjC,GAAA,CAAC,GAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,eAAA,EAAgB,MAAA,EAAO,MAAA,EAClC,QAAA,EAAA,CAAA,CAAE,wBAAwB,CAAA,EAC7B,CAAA,EACF,CAAA;AAAA,4BACC,+BAAA,EAAA,EAAgC;AAAA;AAAA;AAAA,GACnC;AAEJ;;;;"}
@@ -10,7 +10,7 @@ import ConfigEncryptionDialog from './ConfigEncryptionDialog.esm.js';
10
10
  import ConfigRiscInfo from './ConfigRiscInfo.esm.js';
11
11
  import ConfigInitialRisc from './ConfigInitialRisc.esm.js';
12
12
  import { Text, Flex, Button } from '@backstage/ui';
13
- import styles from './RiScDialog.module.css.esm.js';
13
+ import dialogStyles from './RiScDialog.module.css.esm.js';
14
14
  import { useDefaultRiScTypeDescriptors } from '../../contexts/DefaultRiScTypesContext.esm.js';
15
15
  import DialogComponent from '../dialog/DialogComponent.esm.js';
16
16
 
@@ -134,7 +134,7 @@ function RiScDialog({
134
134
  isOpen: true,
135
135
  onClick: onClose,
136
136
  header: t("rosDialog.titleNew"),
137
- className: styles.createRiscDialog,
137
+ className: dialogStyles.createRiscDialog,
138
138
  children: [
139
139
  /* @__PURE__ */ jsx(RiScStepper, { activeStep }),
140
140
  /* @__PURE__ */ jsxs(
@@ -143,7 +143,7 @@ function RiScDialog({
143
143
  as: "h2",
144
144
  variant: "title-x-small",
145
145
  weight: "bold",
146
- className: styles.subtitle,
146
+ className: dialogStyles.subtitle,
147
147
  children: [
148
148
  activeStep === 0 && t("rosDialog.initialRiscTitle"),
149
149
  activeStep === 1 && t("rosDialog.titleAndScope"),
@@ -207,7 +207,7 @@ function RiScDialog({
207
207
  isOpen: true,
208
208
  onClick: onClose,
209
209
  header: t("deleteDialog.title"),
210
- className: styles.createRiscDialog,
210
+ className: dialogStyles.createRiscDialog,
211
211
  children: /* @__PURE__ */ jsxs(Flex, { direction: "column", children: [
212
212
  t("deleteDialog.confirmationMessage"),
213
213
  /* @__PURE__ */ jsxs(Flex, { justify: "between", pt: "16px", children: [
@@ -225,7 +225,7 @@ function RiScDialog({
225
225
  isOpen: true,
226
226
  onClick: onClose,
227
227
  header: t("rosDialog.titleEdit"),
228
- className: styles.createRiscDialog,
228
+ className: dialogStyles.createRiscDialog,
229
229
  children: [
230
230
  /* @__PURE__ */ jsx(
231
231
  ConfigRiscInfo,
@@ -243,9 +243,9 @@ function RiScDialog({
243
243
  size: "medium",
244
244
  variant: "tertiary",
245
245
  onClick: onDelete,
246
- className: styles.deleteButton,
246
+ className: dialogStyles.deleteButton,
247
247
  children: [
248
- /* @__PURE__ */ jsx("i", { className: `ri-delete-bin-line ${styles.deleteButtonIcon}` }),
248
+ /* @__PURE__ */ jsx("i", { className: `ri-delete-bin-line ${dialogStyles.deleteButtonIcon}` }),
249
249
  t("contentHeader.deleteButton")
250
250
  ]
251
251
  }
@@ -266,7 +266,7 @@ function RiScDialog({
266
266
  isOpen: true,
267
267
  onClick: onClose,
268
268
  header: t("rosDialog.editEncryption"),
269
- className: styles.createRiscDialog,
269
+ className: dialogStyles.createRiscDialog,
270
270
  children: [
271
271
  /* @__PURE__ */ jsx(
272
272
  ConfigEncryptionDialog,
@@ -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>\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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"}
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","styles"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".RiScDialog_subtitle__07347c1283 {\n padding-top: 24px;\n padding-bottom: 8px;\n}\n\n.RiScDialog_deleteButton__07347c1283 {\n color: #d32f2f;\n padding-left: 0;\n}\n\n.RiScDialog_deleteButtonIcon__07347c1283 {\n font-size: 16px;\n}\n\n.RiScDialog_matrixDialog__07347c1283 {\n width: 1050px;\n margin: 32px;\n padding: 24px;\n border-radius: 4px;\n}\n\n.RiScDialog_matrixDialogBody__07347c1283 {\n padding-bottom: 32px;\n}\n\n.RiScDialog_createRiscDialog__07347c1283 {\n padding: 16px 12px;\n gap: 16px;\n border-radius: 4px;\n width: 600px;\n}\n\n.RiScDialog_accordionContainer__07347c1283 {\n border: 1px solid var(--ros-gray-200);\n border-radius: 4px;\n}\n\n[data-theme-mode='dark'] .RiScDialog_accordionContainer__07347c1283 {\n border: 1px solid var(--bui-white);\n}\n";
4
- var styles = {"subtitle":"RiScDialog_subtitle__07347c1283","deleteButton":"RiScDialog_deleteButton__07347c1283","deleteButtonIcon":"RiScDialog_deleteButtonIcon__07347c1283","matrixDialog":"RiScDialog_matrixDialog__07347c1283","matrixDialogBody":"RiScDialog_matrixDialogBody__07347c1283","createRiscDialog":"RiScDialog_createRiscDialog__07347c1283","accordionContainer":"RiScDialog_accordionContainer__07347c1283"};
4
+ var dialogStyles = {"subtitle":"RiScDialog_subtitle__07347c1283","deleteButton":"RiScDialog_deleteButton__07347c1283","deleteButtonIcon":"RiScDialog_deleteButtonIcon__07347c1283","matrixDialog":"RiScDialog_matrixDialog__07347c1283","matrixDialogBody":"RiScDialog_matrixDialogBody__07347c1283","createRiscDialog":"RiScDialog_createRiscDialog__07347c1283","accordionContainer":"RiScDialog_accordionContainer__07347c1283"};
5
5
  styleInject(css_248z);
6
6
 
7
- export { styles as default };
7
+ export { dialogStyles as default };
8
8
  //# sourceMappingURL=RiScDialog.module.css.esm.js.map
@@ -1,11 +1,11 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import { useState } from 'react';
3
- import { Button, Flex, Card, CardHeader, Text } from '@backstage/ui';
3
+ import { Button, Flex, Card, CardHeader, Text, Link } from '@backstage/ui';
4
4
  import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
5
5
  import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
6
- import { Link } from '@mui/material';
7
6
  import { FeedbackDialog } from '../riScPlugin/FeedbackDialog.esm.js';
8
- import styles from './RiScDialog.module.css.esm.js';
7
+ import dialogStyles from './RiScDialog.module.css.esm.js';
8
+ import styles from './SupportDialog.module.css.esm.js';
9
9
  import DialogComponent from '../dialog/DialogComponent.esm.js';
10
10
 
11
11
  function SupportDialog() {
@@ -27,7 +27,7 @@ function SupportDialog() {
27
27
  isOpen: open,
28
28
  onClick: () => setOpen(false),
29
29
  header: t("supportDialog.title"),
30
- className: styles.createRiscDialog,
30
+ className: dialogStyles.createRiscDialog,
31
31
  children: [
32
32
  /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "8px", children: [
33
33
  /* @__PURE__ */ jsx(
@@ -35,7 +35,7 @@ function SupportDialog() {
35
35
  {
36
36
  label: t("supportDialog.entries.riscFeedbackChannel.title"),
37
37
  url: "https://kartverketgroup.slack.com/archives/C075KCPTURY",
38
- icon: /* @__PURE__ */ jsx("i", { className: "ri-slack-fill", style: { fontSize: "x-large" } }),
38
+ icon: /* @__PURE__ */ jsx("i", { className: `ri-slack-fill ${styles.supportIcon}` }),
39
39
  description: t(
40
40
  "supportDialog.entries.riscFeedbackChannel.description"
41
41
  )
@@ -46,21 +46,21 @@ function SupportDialog() {
46
46
  {
47
47
  label: t("supportDialog.entries.riscDocumentation.title"),
48
48
  url: "https://kartverket.atlassian.net/wiki/spaces/SIK/pages/1645608980/Koden+r+RoS",
49
- icon: /* @__PURE__ */ jsx("i", { className: "ri-article-line", style: { fontSize: "x-large" } }),
49
+ icon: /* @__PURE__ */ jsx("i", { className: `ri-article-line ${styles.supportIcon}` }),
50
50
  description: t(
51
51
  "supportDialog.entries.riscDocumentation.description"
52
52
  )
53
53
  }
54
54
  )
55
55
  ] }),
56
- /* @__PURE__ */ jsx("div", { style: { marginTop: "24px" }, children: /* @__PURE__ */ jsx(FeedbackDialog, { open, setOpen }) })
56
+ /* @__PURE__ */ jsx("div", { className: styles.feedbackWrapper, children: /* @__PURE__ */ jsx(FeedbackDialog, { open, setOpen }) })
57
57
  ]
58
58
  }
59
59
  )
60
60
  ] });
61
61
  }
62
62
  function SupportEntry(props) {
63
- return /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(Flex, { align: "center", children: [
63
+ return /* @__PURE__ */ jsx(Card, { className: styles.supportCard, children: /* @__PURE__ */ jsx(CardHeader, { children: /* @__PURE__ */ jsxs(Flex, { align: "center", children: [
64
64
  props.icon,
65
65
  /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "0", children: [
66
66
  /* @__PURE__ */ jsx(Text, { weight: "bold", children: props.label }),
@@ -1 +1 @@
1
- {"version":3,"file":"SupportDialog.esm.js","sources":["../../../src/components/riScDialog/SupportDialog.tsx"],"sourcesContent":["import { ReactElement, useState } from 'react';\nimport { Button, Card, CardHeader, Flex, Text } from '@backstage/ui';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { Link } from '@mui/material';\nimport { FeedbackDialog } from '../riScPlugin/FeedbackDialog.tsx';\nimport styles from './RiScDialog.module.css';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\n\nexport function SupportDialog() {\n const [open, setOpen] = useState(false);\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <>\n <Button\n onClick={() => setOpen(true)}\n variant=\"secondary\"\n iconStart={<i className=\"ri-question-line\" />}\n >\n {t('supportDialog.title')}\n </Button>\n <DialogComponent\n isOpen={open}\n onClick={() => setOpen(false)}\n header={t('supportDialog.title')}\n className={styles.createRiscDialog}\n >\n <Flex direction=\"column\" gap=\"8px\">\n <SupportEntry\n label={t('supportDialog.entries.riscFeedbackChannel.title')}\n url=\"https://kartverketgroup.slack.com/archives/C075KCPTURY\"\n icon={\n <i className=\"ri-slack-fill\" style={{ fontSize: 'x-large' }} />\n }\n description={t(\n 'supportDialog.entries.riscFeedbackChannel.description',\n )}\n />\n <SupportEntry\n label={t('supportDialog.entries.riscDocumentation.title')}\n url=\"https://kartverket.atlassian.net/wiki/spaces/SIK/pages/1645608980/Koden+r+RoS\"\n icon={\n <i className=\"ri-article-line\" style={{ fontSize: 'x-large' }} />\n }\n description={t(\n 'supportDialog.entries.riscDocumentation.description',\n )}\n />\n </Flex>\n <div style={{ marginTop: '24px' }}>\n <FeedbackDialog open={open} setOpen={setOpen} />\n </div>\n </DialogComponent>\n </>\n );\n}\n\ntype SupportEntryProps = {\n label: string;\n url: string;\n description: string;\n icon: ReactElement;\n};\n\nfunction SupportEntry(props: SupportEntryProps) {\n return (\n <Card>\n <CardHeader>\n <Flex align=\"center\">\n {props.icon}\n <Flex direction=\"column\" gap=\"0\">\n <Text weight=\"bold\">{props.label}</Text>\n <Link href={props.url} target=\"_blank\">\n {props.description}\n </Link>\n </Flex>\n </Flex>\n </CardHeader>\n </Card>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AASO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC3B,OAAA,EAAQ,WAAA;AAAA,QACR,SAAA,kBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,QAE1C,YAAE,qBAAqB;AAAA;AAAA,KAC1B;AAAA,oBACA,IAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,QAC5B,MAAA,EAAQ,EAAE,qBAAqB,CAAA;AAAA,QAC/B,WAAW,MAAA,CAAO,gBAAA;AAAA,QAElB,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,KAAA,EAC3B,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,EAAE,iDAAiD,CAAA;AAAA,gBAC1D,GAAA,EAAI,wDAAA;AAAA,gBACJ,IAAA,sBACG,GAAA,EAAA,EAAE,SAAA,EAAU,iBAAgB,KAAA,EAAO,EAAE,QAAA,EAAU,SAAA,EAAU,EAAG,CAAA;AAAA,gBAE/D,WAAA,EAAa,CAAA;AAAA,kBACX;AAAA;AACF;AAAA,aACF;AAAA,4BACA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,EAAE,+CAA+C,CAAA;AAAA,gBACxD,GAAA,EAAI,+EAAA;AAAA,gBACJ,IAAA,sBACG,GAAA,EAAA,EAAE,SAAA,EAAU,mBAAkB,KAAA,EAAO,EAAE,QAAA,EAAU,SAAA,EAAU,EAAG,CAAA;AAAA,gBAEjE,WAAA,EAAa,CAAA;AAAA,kBACX;AAAA;AACF;AAAA;AACF,WAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,MAAA,EAAO,EAC9B,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAY,OAAA,EAAkB,CAAA,EAChD;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AASA,SAAS,aAAa,KAAA,EAA0B;AAC9C,EAAA,2BACG,IAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,cACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,OAAM,QAAA,EACT,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,IAAA;AAAA,oBACP,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAC3B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,CAAA;AAAA,sBACjC,GAAA,CAAC,QAAK,IAAA,EAAM,KAAA,CAAM,KAAK,MAAA,EAAO,QAAA,EAC3B,gBAAM,WAAA,EACT;AAAA,KAAA,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"SupportDialog.esm.js","sources":["../../../src/components/riScDialog/SupportDialog.tsx"],"sourcesContent":["import { ReactElement, useState } from 'react';\nimport { Button, Card, CardHeader, Flex, Link, Text } from '@backstage/ui';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations.ts';\nimport { FeedbackDialog } from '../riScPlugin/FeedbackDialog.tsx';\nimport dialogStyles from './RiScDialog.module.css';\nimport styles from './SupportDialog.module.css';\nimport DialogComponent from '../dialog/DialogComponent.tsx';\n\nexport function SupportDialog() {\n const [open, setOpen] = useState(false);\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n\n return (\n <>\n <Button\n onClick={() => setOpen(true)}\n variant=\"secondary\"\n iconStart={<i className=\"ri-question-line\" />}\n >\n {t('supportDialog.title')}\n </Button>\n <DialogComponent\n isOpen={open}\n onClick={() => setOpen(false)}\n header={t('supportDialog.title')}\n className={dialogStyles.createRiscDialog}\n >\n <Flex direction=\"column\" gap=\"8px\">\n <SupportEntry\n label={t('supportDialog.entries.riscFeedbackChannel.title')}\n url=\"https://kartverketgroup.slack.com/archives/C075KCPTURY\"\n icon={<i className={`ri-slack-fill ${styles.supportIcon}`} />}\n description={t(\n 'supportDialog.entries.riscFeedbackChannel.description',\n )}\n />\n <SupportEntry\n label={t('supportDialog.entries.riscDocumentation.title')}\n url=\"https://kartverket.atlassian.net/wiki/spaces/SIK/pages/1645608980/Koden+r+RoS\"\n icon={<i className={`ri-article-line ${styles.supportIcon}`} />}\n description={t(\n 'supportDialog.entries.riscDocumentation.description',\n )}\n />\n </Flex>\n <div className={styles.feedbackWrapper}>\n <FeedbackDialog open={open} setOpen={setOpen} />\n </div>\n </DialogComponent>\n </>\n );\n}\n\ntype SupportEntryProps = {\n label: string;\n url: string;\n description: string;\n icon: ReactElement;\n};\n\nfunction SupportEntry(props: SupportEntryProps) {\n return (\n <Card className={styles.supportCard}>\n <CardHeader>\n <Flex align=\"center\">\n {props.icon}\n <Flex direction=\"column\" gap=\"0\">\n <Text weight=\"bold\">{props.label}</Text>\n <Link href={props.url} target=\"_blank\">\n {props.description}\n </Link>\n </Flex>\n </Flex>\n </CardHeader>\n </Card>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AASO,SAAS,aAAA,GAAgB;AAC9B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC3B,OAAA,EAAQ,WAAA;AAAA,QACR,SAAA,kBAAW,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,QAE1C,YAAE,qBAAqB;AAAA;AAAA,KAC1B;AAAA,oBACA,IAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA;AAAA,QAC5B,MAAA,EAAQ,EAAE,qBAAqB,CAAA;AAAA,QAC/B,WAAW,YAAA,CAAa,gBAAA;AAAA,QAExB,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,GAAA,EAAI,KAAA,EAC3B,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,EAAE,iDAAiD,CAAA;AAAA,gBAC1D,GAAA,EAAI,wDAAA;AAAA,gBACJ,sBAAM,GAAA,CAAC,GAAA,EAAA,EAAE,WAAW,CAAA,cAAA,EAAiB,MAAA,CAAO,WAAW,CAAA,CAAA,EAAI,CAAA;AAAA,gBAC3D,WAAA,EAAa,CAAA;AAAA,kBACX;AAAA;AACF;AAAA,aACF;AAAA,4BACA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,EAAE,+CAA+C,CAAA;AAAA,gBACxD,GAAA,EAAI,+EAAA;AAAA,gBACJ,sBAAM,GAAA,CAAC,GAAA,EAAA,EAAE,WAAW,CAAA,gBAAA,EAAmB,MAAA,CAAO,WAAW,CAAA,CAAA,EAAI,CAAA;AAAA,gBAC7D,WAAA,EAAa,CAAA;AAAA,kBACX;AAAA;AACF;AAAA;AACF,WAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,iBACrB,QAAA,kBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAY,OAAA,EAAkB,CAAA,EAChD;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AASA,SAAS,aAAa,KAAA,EAA0B;AAC9C,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,WAAA,EACtB,8BAAC,UAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAA,EACT,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,IAAA;AAAA,oBACP,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,KAAI,GAAA,EAC3B,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,CAAA;AAAA,sBACjC,GAAA,CAAC,QAAK,IAAA,EAAM,KAAA,CAAM,KAAK,MAAA,EAAO,QAAA,EAC3B,gBAAM,WAAA,EACT;AAAA,KAAA,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = ".SupportDialog_supportCard__ff4bff0a3e {\n border: 1px solid var(--bui-border-1);\n}\n\n.SupportDialog_supportIcon__ff4bff0a3e {\n font-size: x-large;\n}\n\n.SupportDialog_feedbackWrapper__ff4bff0a3e {\n margin-top: 24px;\n}\n";
4
+ var styles = {"supportCard":"SupportDialog_supportCard__ff4bff0a3e","supportIcon":"SupportDialog_supportIcon__ff4bff0a3e","feedbackWrapper":"SupportDialog_feedbackWrapper__ff4bff0a3e"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=SupportDialog.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SupportDialog.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -9,7 +9,6 @@ const red200 = "#EBB095";
9
9
  const red400 = "#D04A14";
10
10
  const red500 = "#A32F00";
11
11
  const green100 = "#D0ECD6";
12
- const green200 = "#9FD2AB";
13
12
  const green300 = "#66B077";
14
13
  const green500 = "#156630";
15
14
  const gray50 = "#F5F2F2";
@@ -18,7 +17,6 @@ const gray600 = "#4A4848";
18
17
  const gray900 = "#212121";
19
18
  const removedColor = (theme) => theme.palette.type === "dark" ? red100 : red500;
20
19
  const addedColor = (theme) => theme.palette.type === "dark" ? green100 : green500;
21
- const interactiveColor = (theme) => theme.palette.type === "dark" ? green200 : green500;
22
20
  const fontColorLight = gray50;
23
21
  const fontColorDark = gray900;
24
22
  const fontSizeTitle = "18px";
@@ -157,5 +155,5 @@ const useChangeSetStyles = makeStyles((theme) => ({
157
155
  }
158
156
  }));
159
157
 
160
- export { fontWeightBold, interactiveColor, useChangeSetStyles };
158
+ export { fontWeightBold, useChangeSetStyles };
161
159
  //# sourceMappingURL=changeSetStyles.esm.js.map