@kartverket/backstage-plugin-risk-scorecard 3.0.1 → 3.1.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.
- package/dist/PluginRoot.esm.js +7 -3
- package/dist/PluginRoot.esm.js.map +1 -1
- package/dist/components/common/EditButton.esm.js +2 -2
- package/dist/components/common/EditButton.esm.js.map +1 -1
- package/dist/components/common/Input.esm.js +29 -26
- package/dist/components/common/Input.esm.js.map +1 -1
- package/dist/components/common/MarkdownInput.esm.js +57 -0
- package/dist/components/common/MarkdownInput.esm.js.map +1 -0
- package/dist/components/common/Select.esm.js +44 -36
- package/dist/components/common/Select.esm.js.map +1 -1
- package/dist/components/common/Spinner.esm.js +13 -13
- package/dist/components/common/Spinner.esm.js.map +1 -1
- package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js +121 -84
- package/dist/components/riScDialog/ConfigEncryptionDialog.esm.js.map +1 -1
- package/dist/components/riScDialog/ConfigRiscInfo.esm.js +63 -47
- package/dist/components/riScDialog/ConfigRiscInfo.esm.js.map +1 -1
- package/dist/components/riScDialog/MatrixDialog.esm.js +39 -28
- package/dist/components/riScDialog/MatrixDialog.esm.js.map +1 -1
- package/dist/components/riScDialog/RiScDialog.esm.js +120 -84
- package/dist/components/riScDialog/RiScDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/MigrationDialog.esm.js +50 -27
- package/dist/components/riScInfo/MigrationDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/PublishDialog.esm.js +31 -20
- package/dist/components/riScInfo/PublishDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/RiScInfo.esm.js +39 -29
- package/dist/components/riScInfo/RiScInfo.esm.js.map +1 -1
- package/dist/components/riScInfo/riScStatus/DifferenceText.esm.js +112 -98
- package/dist/components/riScInfo/riScStatus/DifferenceText.esm.js.map +1 -1
- package/dist/components/riScInfo/riScStatus/Progress.esm.js +3 -3
- package/dist/components/riScInfo/riScStatus/Progress.esm.js.map +1 -1
- package/dist/components/riScInfo/riScStatus/RiScDifferenceDialog.esm.js +92 -77
- package/dist/components/riScInfo/riScStatus/RiScDifferenceDialog.esm.js.map +1 -1
- package/dist/components/riScInfo/riScStatus/RiScStatusComponent.esm.js +182 -91
- package/dist/components/riScInfo/riScStatus/RiScStatusComponent.esm.js.map +1 -1
- package/dist/components/riScInfo/riScStatus/icons/little_outdated.svg +6 -0
- package/dist/components/riScInfo/riScStatus/icons/outdated.svg +6 -0
- package/dist/components/riScInfo/riScStatus/icons/updated.svg +7 -0
- package/dist/components/riScInfo/riScStatus/icons/very_outdated.svg +6 -0
- package/dist/components/riScInfo/riScStatus/utils.esm.js +9 -0
- package/dist/components/riScInfo/riScStatus/utils.esm.js.map +1 -0
- package/dist/components/riScPlugin/RiScPlugin.esm.js +83 -61
- package/dist/components/riScPlugin/RiScPlugin.esm.js.map +1 -1
- package/dist/components/riskMatrix/AggregatedCost.esm.js +20 -8
- package/dist/components/riskMatrix/AggregatedCost.esm.js.map +1 -1
- package/dist/components/riskMatrix/EstimatedRiskInfoDialog.esm.js +27 -2
- package/dist/components/riskMatrix/EstimatedRiskInfoDialog.esm.js.map +1 -1
- package/dist/components/riskMatrix/RiskMatrix.esm.js +42 -27
- package/dist/components/riskMatrix/RiskMatrix.esm.js.map +1 -1
- package/dist/components/riskMatrix/RiskMatrixScenarioCount.esm.js +38 -32
- package/dist/components/riskMatrix/RiskMatrixScenarioCount.esm.js.map +1 -1
- package/dist/components/riskMatrix/Tabs.esm.js +23 -21
- package/dist/components/riskMatrix/Tabs.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js +119 -104
- package/dist/components/scenarioDrawer/ScenarioDrawer.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js +159 -131
- package/dist/components/scenarioDrawer/components/ActionBox.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionFormItem.esm.js +90 -75
- package/dist/components/scenarioDrawer/components/ActionFormItem.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ActionsSection.esm.js +46 -31
- package/dist/components/scenarioDrawer/components/ActionsSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/DeleteConfirmation.esm.js +19 -13
- package/dist/components/scenarioDrawer/components/DeleteConfirmation.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/RiskFormSection.esm.js +75 -52
- package/dist/components/scenarioDrawer/components/RiskFormSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/RiskSection.esm.js +59 -32
- package/dist/components/scenarioDrawer/components/RiskSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ScopeFormSection.esm.js +50 -38
- package/dist/components/scenarioDrawer/components/ScopeFormSection.esm.js.map +1 -1
- package/dist/components/scenarioDrawer/components/ScopeSection.esm.js +35 -16
- package/dist/components/scenarioDrawer/components/ScopeSection.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTable.esm.js +115 -97
- package/dist/components/scenarioTable/ScenarioTable.esm.js.map +1 -1
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js +73 -48
- package/dist/components/scenarioTable/ScenarioTableRow.esm.js.map +1 -1
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js +76 -65
- package/dist/components/scenarioWizard/ScenarioWizard.esm.js.map +1 -1
- package/dist/components/scenarioWizard/components/CloseConfirmation.esm.js +8 -2
- package/dist/components/scenarioWizard/components/CloseConfirmation.esm.js.map +1 -1
- package/dist/components/scenarioWizard/components/ConsequenceTable.esm.js +72 -48
- package/dist/components/scenarioWizard/components/ConsequenceTable.esm.js.map +1 -1
- package/dist/components/scenarioWizard/components/ProbabilityTable.esm.js +43 -23
- package/dist/components/scenarioWizard/components/ProbabilityTable.esm.js.map +1 -1
- package/dist/components/scenarioWizard/components/RiskRadioButton.esm.js +4 -3
- package/dist/components/scenarioWizard/components/RiskRadioButton.esm.js.map +1 -1
- package/dist/components/scenarioWizard/steps/ActionsStep.esm.js +110 -79
- package/dist/components/scenarioWizard/steps/ActionsStep.esm.js.map +1 -1
- package/dist/components/scenarioWizard/steps/RiskStep.esm.js +17 -2
- package/dist/components/scenarioWizard/steps/RiskStep.esm.js.map +1 -1
- package/dist/components/scenarioWizard/steps/ScenarioStep.esm.js +57 -40
- package/dist/components/scenarioWizard/steps/ScenarioStep.esm.js.map +1 -1
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenu.esm.js +72 -50
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenu.esm.js.map +1 -1
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenuItem.esm.js +25 -17
- package/dist/components/sopsConfigDialog/GcpCryptoKeyMenuItem.esm.js.map +1 -1
- package/dist/contexts/RiScContext.esm.js +16 -14
- package/dist/contexts/RiScContext.esm.js.map +1 -1
- package/dist/contexts/ScenarioContext.esm.js +12 -8
- package/dist/contexts/ScenarioContext.esm.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/urls/backend.esm.js +8 -0
- package/dist/urls/backend.esm.js.map +1 -0
- package/dist/urls/external.esm.js +10 -0
- package/dist/urls/external.esm.js.map +1 -0
- package/dist/urls/index.esm.js +10 -0
- package/dist/urls/index.esm.js.map +1 -0
- package/dist/utils/DTOs.esm.js.map +1 -1
- package/dist/utils/hooks.esm.js +12 -9
- package/dist/utils/hooks.esm.js.map +1 -1
- package/dist/utils/translations.esm.js +11 -1
- package/dist/utils/translations.esm.js.map +1 -1
- package/dist/utils/types.esm.js.map +1 -1
- package/dist/utils/utilityfunctions.esm.js +51 -1
- package/dist/utils/utilityfunctions.esm.js.map +1 -1
- package/package.json +32 -38
package/dist/PluginRoot.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Routes, Route } from 'react-router-dom';
|
|
3
3
|
import { CacheProvider } from '@emotion/react';
|
|
4
4
|
import createCache from '@emotion/cache';
|
|
@@ -14,8 +14,12 @@ const cache = createCache({
|
|
|
14
14
|
key: "css",
|
|
15
15
|
insertionPoint: emotionInsertionPoint
|
|
16
16
|
});
|
|
17
|
-
const ProvidedPlugin = () => /* @__PURE__ */
|
|
18
|
-
const PluginRoot = () => /* @__PURE__ */
|
|
17
|
+
const ProvidedPlugin = () => /* @__PURE__ */ jsx(CacheProvider, { value: cache, children: /* @__PURE__ */ jsx(RiScProvider, { children: /* @__PURE__ */ jsx(ScenarioProvider, { children: /* @__PURE__ */ jsx(RiScPlugin, {}) }) }) });
|
|
18
|
+
const PluginRoot = () => /* @__PURE__ */ jsxs(Routes, { children: [
|
|
19
|
+
/* @__PURE__ */ jsx(Route, { path: "/", element: /* @__PURE__ */ jsx(ProvidedPlugin, {}) }),
|
|
20
|
+
/* @__PURE__ */ jsx(Route, { path: riScRouteRef.path, element: /* @__PURE__ */ jsx(ProvidedPlugin, {}) }),
|
|
21
|
+
/* @__PURE__ */ jsx(Route, { path: scenarioRouteRef.path, element: /* @__PURE__ */ jsx(ProvidedPlugin, {}) })
|
|
22
|
+
] });
|
|
19
23
|
|
|
20
24
|
export { PluginRoot };
|
|
21
25
|
//# sourceMappingURL=PluginRoot.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"PluginRoot.esm.js","sources":["../src/PluginRoot.tsx"],"sourcesContent":["import { Route, Routes } from 'react-router-dom';\nimport { CacheProvider } from '@emotion/react';\nimport createCache from '@emotion/cache';\nimport { RiScPlugin } from './components/riScPlugin/RiScPlugin';\nimport { ScenarioProvider } from './contexts/ScenarioContext';\nimport { riScRouteRef, scenarioRouteRef } from './routes';\nimport { RiScProvider } from './contexts/RiScContext';\n\nconst emotionInsertionPoint = document.createElement('meta');\nemotionInsertionPoint.setAttribute('name', 'emotion-insertion-point');\ndocument.querySelector('head')?.appendChild(emotionInsertionPoint);\n\nconst cache = createCache({\n key: 'css',\n insertionPoint: emotionInsertionPoint,\n});\n\nconst ProvidedPlugin = () => (\n <CacheProvider value={cache}>\n <RiScProvider>\n <ScenarioProvider>\n <RiScPlugin />\n </ScenarioProvider>\n </RiScProvider>\n </CacheProvider>\n);\n\nexport const PluginRoot = () => (\n <Routes>\n <Route path=\"/\" element={<ProvidedPlugin />} />\n <Route path={riScRouteRef.path} element={<ProvidedPlugin />} />\n <Route path={scenarioRouteRef.path} element={<ProvidedPlugin />} />\n </Routes>\n);\n"],"names":[],"mappings":";;;;;;;;;AAQA,MAAM,qBAAA,GAAwB,QAAS,CAAA,aAAA,CAAc,MAAM,CAAA;AAC3D,qBAAsB,CAAA,YAAA,CAAa,QAAQ,yBAAyB,CAAA;AACpE,QAAA,CAAS,aAAc,CAAA,MAAM,CAAG,EAAA,WAAA,CAAY,qBAAqB,CAAA;AAEjE,MAAM,QAAQ,WAAY,CAAA;AAAA,EACxB,GAAK,EAAA,KAAA;AAAA,EACL,cAAgB,EAAA;AAClB,CAAC,CAAA;AAED,MAAM,cAAiB,GAAA,sBACpB,GAAA,CAAA,aAAA,EAAA,EAAc,OAAO,KACpB,EAAA,QAAA,kBAAA,GAAA,CAAC,YACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,gBACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,CAAA,EACd,GACF,CACF,EAAA,CAAA;AAGW,MAAA,UAAA,GAAa,sBACxB,IAAA,CAAC,MACC,EAAA,EAAA,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,SAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,GAAA,CAAC,kBAAe,CAAI,EAAA,CAAA;AAAA,kBAC7C,GAAA,CAAC,SAAM,IAAM,EAAA,YAAA,CAAa,MAAM,OAAS,kBAAA,GAAA,CAAC,kBAAe,CAAI,EAAA,CAAA;AAAA,kBAC7D,GAAA,CAAC,SAAM,IAAM,EAAA,gBAAA,CAAiB,MAAM,OAAS,kBAAA,GAAA,CAAC,kBAAe,CAAI,EAAA;AAAA,CACnE,EAAA;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { makeStyles, IconButton } from '@material-ui/core';
|
|
3
3
|
import EditIcon from '@mui/icons-material/Edit';
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ const useEditButtonStyle = makeStyles((theme) => ({
|
|
|
9
9
|
}));
|
|
10
10
|
const EditButton = (props) => {
|
|
11
11
|
const { icon } = useEditButtonStyle();
|
|
12
|
-
return /* @__PURE__ */
|
|
12
|
+
return /* @__PURE__ */ jsx(IconButton, { size: "small", ...props, children: /* @__PURE__ */ jsx(EditIcon, { className: icon, "aria-label": "Edit" }) });
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
export { EditButton as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditButton.esm.js","sources":["../../../src/components/common/EditButton.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"EditButton.esm.js","sources":["../../../src/components/common/EditButton.tsx"],"sourcesContent":["import {\n IconButton,\n IconButtonProps,\n makeStyles,\n Theme,\n} from '@material-ui/core';\nimport EditIcon from '@mui/icons-material/Edit';\n\nconst useEditButtonStyle = makeStyles((theme: Theme) => ({\n icon: {\n color: theme.palette.type === 'dark' ? '#fff' : 'rgba(0, 0, 0, 0.54)',\n },\n}));\n\nconst EditButton = (props: IconButtonProps) => {\n const { icon } = useEditButtonStyle();\n\n return (\n <IconButton size=\"small\" {...props}>\n <EditIcon className={icon} aria-label=\"Edit\" />\n </IconButton>\n );\n};\n\nexport default EditButton;\n"],"names":[],"mappings":";;;;AAQA,MAAM,kBAAA,GAAqB,UAAW,CAAA,CAAC,KAAkB,MAAA;AAAA,EACvD,IAAM,EAAA;AAAA,IACJ,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,SAAS,MAAS,GAAA;AAAA;AAEpD,CAAE,CAAA,CAAA;AAEI,MAAA,UAAA,GAAa,CAAC,KAA2B,KAAA;AAC7C,EAAM,MAAA,EAAE,IAAK,EAAA,GAAI,kBAAmB,EAAA;AAEpC,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA,EAAW,IAAK,EAAA,OAAA,EAAS,GAAG,KAAA,EAC3B,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,SAAW,EAAA,IAAA,EAAM,YAAW,EAAA,MAAA,EAAO,CAC/C,EAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,41 +1,44 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
1
2
|
import FormControl from '@mui/material/FormControl';
|
|
2
3
|
import FormHelperText from '@mui/material/FormHelperText';
|
|
3
4
|
import FormLabel from '@mui/material/FormLabel';
|
|
4
5
|
import TextField from '@mui/material/TextField';
|
|
5
|
-
import
|
|
6
|
+
import { forwardRef } from 'react';
|
|
6
7
|
import { formLabel, formHelperText } from './typography.esm.js';
|
|
7
8
|
|
|
8
9
|
const Input = forwardRef(
|
|
9
10
|
({ label, sublabel, error, helperText, required, ...props }, ref) => {
|
|
10
|
-
return /* @__PURE__ */
|
|
11
|
+
return /* @__PURE__ */ jsxs(
|
|
11
12
|
FormControl,
|
|
12
13
|
{
|
|
13
14
|
sx: { width: "100%", gap: "4px" },
|
|
14
15
|
error,
|
|
15
|
-
required
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
16
|
+
required,
|
|
17
|
+
children: [
|
|
18
|
+
label && /* @__PURE__ */ jsx(FormLabel, { required, sx: formLabel, children: label }),
|
|
19
|
+
sublabel && /* @__PURE__ */ jsx(FormHelperText, { sx: formHelperText, children: sublabel }),
|
|
20
|
+
/* @__PURE__ */ jsx(
|
|
21
|
+
TextField,
|
|
22
|
+
{
|
|
23
|
+
id: "filled-multiline-static",
|
|
24
|
+
error,
|
|
25
|
+
multiline: true,
|
|
26
|
+
fullWidth: true,
|
|
27
|
+
variant: "outlined",
|
|
28
|
+
inputRef: ref,
|
|
29
|
+
InputProps: {
|
|
30
|
+
sx: (theme) => ({
|
|
31
|
+
"&.Mui-disabled": {
|
|
32
|
+
color: theme.palette.mode === "dark" ? "#FFFFFF80" : "#757575"
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
},
|
|
36
|
+
...props
|
|
37
|
+
}
|
|
38
|
+
),
|
|
39
|
+
helperText && /* @__PURE__ */ jsx(FormHelperText, { children: helperText })
|
|
40
|
+
]
|
|
41
|
+
}
|
|
39
42
|
);
|
|
40
43
|
}
|
|
41
44
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.esm.js","sources":["../../../src/components/common/Input.tsx"],"sourcesContent":["import FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport TextField, { TextFieldProps } from '@mui/material/TextField';\nimport
|
|
1
|
+
{"version":3,"file":"Input.esm.js","sources":["../../../src/components/common/Input.tsx"],"sourcesContent":["import FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport TextField, { TextFieldProps } from '@mui/material/TextField';\nimport { forwardRef } from 'react';\nimport { formHelperText, formLabel } from './typography';\n\ntype Props = TextFieldProps & {\n sublabel?: string;\n};\n\nexport const Input = forwardRef<HTMLInputElement, Props>(\n ({ label, sublabel, error, helperText, required, ...props }, ref) => {\n return (\n <FormControl\n sx={{ width: '100%', gap: '4px' }}\n error={error}\n required={required}\n >\n {label && (\n <FormLabel required={required} sx={formLabel}>\n {label}\n </FormLabel>\n )}\n {sublabel && (\n <FormHelperText sx={formHelperText}>{sublabel}</FormHelperText>\n )}\n <TextField\n id=\"filled-multiline-static\"\n error={error}\n multiline\n fullWidth\n variant=\"outlined\"\n inputRef={ref}\n InputProps={{\n sx: theme => ({\n '&.Mui-disabled': {\n color: theme.palette.mode === 'dark' ? '#FFFFFF80' : '#757575',\n },\n }),\n }}\n {...props}\n />\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;AAWO,MAAM,KAAQ,GAAA,UAAA;AAAA,EACnB,CAAC,EAAE,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,YAAY,QAAU,EAAA,GAAG,KAAM,EAAA,EAAG,GAAQ,KAAA;AACnE,IACE,uBAAA,IAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,KAAK,KAAM,EAAA;AAAA,QAChC,KAAA;AAAA,QACA,QAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,KAAA,oBACE,GAAA,CAAA,SAAA,EAAA,EAAU,QAAoB,EAAA,EAAA,EAAI,WAChC,QACH,EAAA,KAAA,EAAA,CAAA;AAAA,UAED,QACC,oBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,EAAA,EAAI,gBAAiB,QAAS,EAAA,QAAA,EAAA,CAAA;AAAA,0BAEhD,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,EAAG,EAAA,yBAAA;AAAA,cACH,KAAA;AAAA,cACA,SAAS,EAAA,IAAA;AAAA,cACT,SAAS,EAAA,IAAA;AAAA,cACT,OAAQ,EAAA,UAAA;AAAA,cACR,QAAU,EAAA,GAAA;AAAA,cACV,UAAY,EAAA;AAAA,gBACV,IAAI,CAAU,KAAA,MAAA;AAAA,kBACZ,gBAAkB,EAAA;AAAA,oBAChB,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,KAAS,SAAS,WAAc,GAAA;AAAA;AACvD,iBACF;AAAA,eACF;AAAA,cACC,GAAG;AAAA;AAAA,WACN;AAAA,UACC,UAAA,oBAAe,GAAA,CAAA,cAAA,EAAA,EAAgB,QAAW,EAAA,UAAA,EAAA;AAAA;AAAA;AAAA,KAC7C;AAAA;AAGN;;;;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef, useState, useEffect } from 'react';
|
|
3
|
+
import FormControl from '@mui/material/FormControl';
|
|
4
|
+
import FormHelperText from '@mui/material/FormHelperText';
|
|
5
|
+
import FormLabel from '@mui/material/FormLabel';
|
|
6
|
+
import MDEditor from '@uiw/react-md-editor';
|
|
7
|
+
import { formLabel, formHelperText } from './typography.esm.js';
|
|
8
|
+
|
|
9
|
+
const MarkdownInput = forwardRef(
|
|
10
|
+
({
|
|
11
|
+
label,
|
|
12
|
+
sublabel,
|
|
13
|
+
error,
|
|
14
|
+
helperText,
|
|
15
|
+
required,
|
|
16
|
+
minRows,
|
|
17
|
+
value,
|
|
18
|
+
onMarkdownChange
|
|
19
|
+
}, ref) => {
|
|
20
|
+
const [markdownContent, setMarkdownContent] = useState(
|
|
21
|
+
value
|
|
22
|
+
);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
setMarkdownContent(value);
|
|
25
|
+
}, [value]);
|
|
26
|
+
const handleMarkdownChange = (newValue) => {
|
|
27
|
+
setMarkdownContent(newValue || "");
|
|
28
|
+
onMarkdownChange?.(newValue || "");
|
|
29
|
+
};
|
|
30
|
+
return /* @__PURE__ */ jsxs(
|
|
31
|
+
FormControl,
|
|
32
|
+
{
|
|
33
|
+
sx: { width: "100%", gap: "4px" },
|
|
34
|
+
error,
|
|
35
|
+
required,
|
|
36
|
+
children: [
|
|
37
|
+
label && /* @__PURE__ */ jsx(FormLabel, { required, sx: formLabel, children: label }),
|
|
38
|
+
sublabel && /* @__PURE__ */ jsx(FormHelperText, { sx: formHelperText, children: sublabel }),
|
|
39
|
+
/* @__PURE__ */ jsx(
|
|
40
|
+
MDEditor,
|
|
41
|
+
{
|
|
42
|
+
ref,
|
|
43
|
+
value: markdownContent,
|
|
44
|
+
onChange: handleMarkdownChange,
|
|
45
|
+
preview: "edit",
|
|
46
|
+
height: minRows ? minRows * 24 : 64
|
|
47
|
+
}
|
|
48
|
+
),
|
|
49
|
+
helperText && /* @__PURE__ */ jsx(FormHelperText, { children: helperText })
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
export { MarkdownInput };
|
|
57
|
+
//# sourceMappingURL=MarkdownInput.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownInput.esm.js","sources":["../../../src/components/common/MarkdownInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect } from 'react';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport MDEditor from '@uiw/react-md-editor';\nimport { formHelperText, formLabel } from './typography';\nimport { TextFieldProps } from '@material-ui/core';\n\ntype Props = TextFieldProps & {\n sublabel?: string;\n value?: string;\n onMarkdownChange?: (markdown: string) => void;\n minRows?: number;\n};\n\nexport const MarkdownInput = forwardRef<HTMLDivElement, Props>(\n (\n {\n label,\n sublabel,\n error,\n helperText,\n required,\n minRows,\n value,\n onMarkdownChange,\n },\n ref,\n ) => {\n const [markdownContent, setMarkdownContent] = useState<string | undefined>(\n value,\n );\n\n useEffect(() => {\n setMarkdownContent(value);\n }, [value]);\n\n const handleMarkdownChange = (newValue: string | undefined) => {\n setMarkdownContent(newValue || '');\n onMarkdownChange?.(newValue || '');\n };\n\n return (\n <FormControl\n sx={{ width: '100%', gap: '4px' }}\n error={error}\n required={required}\n >\n {label && (\n <FormLabel required={required} sx={formLabel}>\n {label}\n </FormLabel>\n )}\n {sublabel && (\n <FormHelperText sx={formHelperText}>{sublabel}</FormHelperText>\n )}\n <MDEditor\n ref={ref}\n value={markdownContent}\n onChange={handleMarkdownChange}\n preview=\"edit\"\n height={minRows ? minRows * 24 : 64}\n />\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;AAeO,MAAM,aAAgB,GAAA,UAAA;AAAA,EAC3B,CACE;AAAA,IACE,KAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,KAEF,GACG,KAAA;AACH,IAAM,MAAA,CAAC,eAAiB,EAAA,kBAAkB,CAAI,GAAA,QAAA;AAAA,MAC5C;AAAA,KACF;AAEA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,KAC1B,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,IAAM,MAAA,oBAAA,GAAuB,CAAC,QAAiC,KAAA;AAC7D,MAAA,kBAAA,CAAmB,YAAY,EAAE,CAAA;AACjC,MAAA,gBAAA,GAAmB,YAAY,EAAE,CAAA;AAAA,KACnC;AAEA,IACE,uBAAA,IAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA,EAAE,KAAO,EAAA,MAAA,EAAQ,KAAK,KAAM,EAAA;AAAA,QAChC,KAAA;AAAA,QACA,QAAA;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,KAAA,oBACE,GAAA,CAAA,SAAA,EAAA,EAAU,QAAoB,EAAA,EAAA,EAAI,WAChC,QACH,EAAA,KAAA,EAAA,CAAA;AAAA,UAED,QACC,oBAAA,GAAA,CAAC,cAAe,EAAA,EAAA,EAAA,EAAI,gBAAiB,QAAS,EAAA,QAAA,EAAA,CAAA;AAAA,0BAEhD,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,KAAO,EAAA,eAAA;AAAA,cACP,QAAU,EAAA,oBAAA;AAAA,cACV,OAAQ,EAAA,MAAA;AAAA,cACR,MAAA,EAAQ,OAAU,GAAA,OAAA,GAAU,EAAK,GAAA;AAAA;AAAA,WACnC;AAAA,UACC,UAAA,oBAAe,GAAA,CAAA,cAAA,EAAA,EAAgB,QAAW,EAAA,UAAA,EAAA;AAAA;AAAA;AAAA,KAC7C;AAAA;AAGN;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useController } from 'react-hook-form';
|
|
3
3
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
4
4
|
import { pluginRiScTranslationRef } from '../../utils/translations.esm.js';
|
|
@@ -32,7 +32,7 @@ const Select = ({
|
|
|
32
32
|
control,
|
|
33
33
|
rules: { required }
|
|
34
34
|
});
|
|
35
|
-
const renderValue = (values) => multiple ? /* @__PURE__ */
|
|
35
|
+
const renderValue = (values) => multiple ? /* @__PURE__ */ jsx(
|
|
36
36
|
Box,
|
|
37
37
|
{
|
|
38
38
|
sx: {
|
|
@@ -40,45 +40,53 @@ const Select = ({
|
|
|
40
40
|
flexWrap: "wrap",
|
|
41
41
|
marginBottom: 0,
|
|
42
42
|
paddingBottom: 0
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
43
|
+
},
|
|
44
|
+
children: values.map((value) => /* @__PURE__ */ jsx(
|
|
45
|
+
Chip,
|
|
46
|
+
{
|
|
47
|
+
label: (
|
|
48
|
+
/* @ts-ignore Because ts can't typecheck strings against our keys */
|
|
49
|
+
labelTranslationKey ? t(`${labelTranslationKey}.${value}`) : value
|
|
50
|
+
)
|
|
51
|
+
},
|
|
52
|
+
value
|
|
53
|
+
))
|
|
54
|
+
}
|
|
55
55
|
) : options.find((option) => option.value === values)?.renderedValue;
|
|
56
56
|
const handleChecked = (fieldValue, optionValue) => {
|
|
57
57
|
if (Array.isArray(fieldValue)) return fieldValue.includes(optionValue);
|
|
58
58
|
return fieldValue === optionValue;
|
|
59
59
|
};
|
|
60
|
-
return /* @__PURE__ */
|
|
61
|
-
|
|
62
|
-
{
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
60
|
+
return /* @__PURE__ */ jsxs(FormControl, { sx: { width: "100%", gap: "4px" }, children: [
|
|
61
|
+
label && /* @__PURE__ */ jsx(FormLabel, { sx: formLabel, required, children: label }),
|
|
62
|
+
sublabel && /* @__PURE__ */ jsx(FormHelperText, { sx: formHelperText, children: sublabel }),
|
|
63
|
+
/* @__PURE__ */ jsx(
|
|
64
|
+
MUISelect,
|
|
65
|
+
{
|
|
66
|
+
MenuProps: {
|
|
67
|
+
disablePortal: true
|
|
68
|
+
},
|
|
69
|
+
variant: "outlined",
|
|
70
|
+
renderValue,
|
|
71
|
+
multiple,
|
|
72
|
+
SelectDisplayProps: multiple ? {
|
|
73
|
+
style: {
|
|
74
|
+
paddingBottom: 8,
|
|
75
|
+
paddingTop: 16,
|
|
76
|
+
minHeight: 40
|
|
77
|
+
}
|
|
78
|
+
} : {},
|
|
79
|
+
inputRef: field.ref,
|
|
80
|
+
...field,
|
|
81
|
+
...props,
|
|
82
|
+
children: options.map((option) => /* @__PURE__ */ jsxs(MenuItem, { value: option.value, children: [
|
|
83
|
+
multiple && /* @__PURE__ */ jsx(Checkbox, { checked: handleChecked(field.value, option.value) }),
|
|
84
|
+
/* @__PURE__ */ jsx(ListItemText, { primary: option.renderedValue })
|
|
85
|
+
] }, option.value))
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
error && /* @__PURE__ */ jsx(FormHelperText, { error: true, children: helperText })
|
|
89
|
+
] });
|
|
82
90
|
};
|
|
83
91
|
|
|
84
92
|
export { Select };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.esm.js","sources":["../../../src/components/common/Select.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Select.esm.js","sources":["../../../src/components/common/Select.tsx"],"sourcesContent":["import {\n Control,\n FieldValues,\n Path,\n useController,\n type UseControllerReturn,\n} from 'react-hook-form';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { pluginRiScTranslationRef } from '../../utils/translations';\nimport Box from '@mui/material/Box';\nimport Chip from '@mui/material/Chip';\nimport FormControl from '@mui/material/FormControl';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport MUISelect, { SelectProps } from '@mui/material/Select';\nimport Checkbox from '@mui/material/Checkbox';\nimport MenuItem from '@mui/material/MenuItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport { formHelperText, formLabel } from './typography';\n\ntype Props<T extends FieldValues> = SelectProps & {\n sublabel?: string;\n helperText?: string;\n control?: Control<T, any>;\n name: Path<T>;\n labelTranslationKey?: string;\n options: { value: string | number; renderedValue: string | number }[];\n};\n\nexport const Select = <T extends FieldValues>({\n label,\n sublabel,\n error,\n helperText,\n required,\n control,\n name,\n multiple,\n labelTranslationKey,\n options,\n ...props\n}: Props<T>) => {\n const { t } = useTranslationRef(pluginRiScTranslationRef);\n const { field } = useController({\n name,\n control,\n rules: { required },\n });\n\n // values er strengt tatt unknown, men da må vi bruke mye ts-ignore for å komme i mål\n const renderValue = (values: any) =>\n multiple ? (\n <Box\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n marginBottom: 0,\n paddingBottom: 0,\n }}\n >\n {values.map((value: string) => (\n <Chip\n key={value}\n label={\n /* @ts-ignore Because ts can't typecheck strings against our keys */\n labelTranslationKey ? t(`${labelTranslationKey}.${value}`) : value\n }\n />\n ))}\n </Box>\n ) : (\n options.find(option => option.value === values)?.renderedValue\n );\n\n const handleChecked = (\n fieldValue: UseControllerReturn['field']['value'],\n optionValue: Props<T>['options'][number]['value'],\n ) => {\n if (Array.isArray(fieldValue)) return fieldValue.includes(optionValue);\n return fieldValue === optionValue;\n };\n\n return (\n <FormControl sx={{ width: '100%', gap: '4px' }}>\n {label && (\n <FormLabel sx={formLabel} required={required}>\n {label}\n </FormLabel>\n )}\n {sublabel && (\n <FormHelperText sx={formHelperText}>{sublabel}</FormHelperText>\n )}\n\n <MUISelect\n MenuProps={{\n disablePortal: true,\n }}\n variant=\"outlined\"\n renderValue={renderValue}\n multiple={multiple}\n SelectDisplayProps={\n multiple\n ? {\n style: {\n paddingBottom: 8,\n paddingTop: 16,\n minHeight: 40,\n },\n }\n : {}\n }\n inputRef={field.ref}\n {...field}\n {...props}\n >\n {options.map(option => (\n <MenuItem key={option.value} value={option.value}>\n {multiple && (\n <Checkbox checked={handleChecked(field.value, option.value)} />\n )}\n <ListItemText primary={option.renderedValue} />\n </MenuItem>\n ))}\n </MUISelect>\n {error && <FormHelperText error>{helperText}</FormHelperText>}\n </FormControl>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import Box from '@mui/material/Box';
|
|
3
3
|
import CircularProgress from '@mui/material/CircularProgress';
|
|
4
4
|
|
|
5
|
-
const Spinner = ({ size }) => /* @__PURE__ */
|
|
5
|
+
const Spinner = ({ size }) => /* @__PURE__ */ jsx(
|
|
6
6
|
Box,
|
|
7
7
|
{
|
|
8
8
|
sx: {
|
|
@@ -11,18 +11,18 @@ const Spinner = ({ size }) => /* @__PURE__ */ React__default.createElement(
|
|
|
11
11
|
height: "100vh",
|
|
12
12
|
justifyContent: "center",
|
|
13
13
|
alignItems: "flex-start"
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
},
|
|
15
|
+
children: /* @__PURE__ */ jsx(
|
|
16
|
+
CircularProgress,
|
|
17
|
+
{
|
|
18
|
+
size,
|
|
19
|
+
sx: {
|
|
20
|
+
display: "flex",
|
|
21
|
+
marginTop: "200px"
|
|
22
|
+
}
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
)
|
|
25
|
+
}
|
|
26
26
|
);
|
|
27
27
|
|
|
28
28
|
export { Spinner };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.esm.js","sources":["../../../src/components/common/Spinner.tsx"],"sourcesContent":["import
|
|
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 const Spinner = ({ size }: { size?: string | number }) => (\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"],"names":[],"mappings":";;;;AAGO,MAAM,OAAU,GAAA,CAAC,EAAE,IAAA,EACxB,qBAAA,GAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IACC,EAAI,EAAA;AAAA,MACF,OAAS,EAAA,MAAA;AAAA,MACT,QAAU,EAAA,OAAA;AAAA,MACV,MAAQ,EAAA,OAAA;AAAA,MACR,cAAgB,EAAA,QAAA;AAAA,MAChB,UAAY,EAAA;AAAA,KACd;AAAA,IAEA,QAAA,kBAAA,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,EAAI,EAAA;AAAA,UACF,OAAS,EAAA,MAAA;AAAA,UACT,SAAW,EAAA;AAAA;AACb;AAAA;AACF;AACF;;;;"}
|