@backstage-community/plugin-tekton 3.16.5 → 3.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/components/Icons/CriticalRiskIcon.esm.js +2 -2
  3. package/dist/components/Icons/CriticalRiskIcon.esm.js.map +1 -1
  4. package/dist/components/Icons/EqualsIcon.esm.js +2 -2
  5. package/dist/components/Icons/EqualsIcon.esm.js.map +1 -1
  6. package/dist/components/Icons/LinkToSbomIcon.esm.js +1 -1
  7. package/dist/components/Icons/LinkToSbomIcon.esm.js.map +1 -1
  8. package/dist/components/Icons/OutputIcon.esm.js +1 -1
  9. package/dist/components/Icons/OutputIcon.esm.js.map +1 -1
  10. package/dist/components/Icons/ViewLogsIcon.esm.js +1 -1
  11. package/dist/components/Icons/ViewLogsIcon.esm.js.map +1 -1
  12. package/dist/components/PipelineRunList/PipelineRunRow.css.esm.js +1 -1
  13. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js +2 -2
  14. package/dist/components/PipelineRunList/PipelineRunRowActions.esm.js.map +1 -1
  15. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js +4 -4
  16. package/dist/components/PipelineRunList/PipelineRunVulnerabilities.esm.js.map +1 -1
  17. package/dist/components/PipelineRunList/PlrStatus.css.esm.js +1 -1
  18. package/dist/components/PipelineRunList/ResourceBadge.css.esm.js +2 -2
  19. package/dist/components/PipelineRunList/ResourceBadge.esm.js +1 -1
  20. package/dist/components/PipelineRunList/ResourceBadge.esm.js.map +1 -1
  21. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js +2 -2
  22. package/dist/components/PipelineRunLogs/PodLogsDownloadLink.esm.js.map +1 -1
  23. package/dist/components/Tekton/TektonCIComponent.esm.js +0 -2
  24. package/dist/components/Tekton/TektonCIComponent.esm.js.map +1 -1
  25. package/dist/components/common/ClusterSelector.css.esm.js +1 -1
  26. package/dist/components/common/ResourceStatus.css.esm.js +2 -2
  27. package/dist/components/common/StatusSelector.css.esm.js +1 -1
  28. package/dist/components/common/StatusSelector.esm.js.map +1 -1
  29. package/dist/components/pipeline-topology/PipelineTaskNode.css.esm.js +1 -1
  30. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js +2 -2
  31. package/dist/components/pipeline-topology/PipelineTaskNode.esm.js.map +1 -1
  32. package/dist/components/pipeline-topology/PipelineVisualization.css.esm.js +2 -2
  33. package/dist/components/pipeline-topology/PipelineVisualization.esm.js +1 -1
  34. package/dist/components/pipeline-topology/PipelineVisualization.esm.js.map +1 -1
  35. package/dist/components/pipeline-topology/PipelineVisualizationStepList.css.esm.js +2 -2
  36. package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js +3 -3
  37. package/dist/components/pipeline-topology/pipelineComponentFactory.esm.js.map +1 -1
  38. package/dist/hooks/useDarkTheme.esm.js +1 -1
  39. package/dist/hooks/useDarkTheme.esm.js.map +1 -1
  40. package/dist/hooks/useResourcesClusters.esm.js +1 -1
  41. package/dist/hooks/useResourcesClusters.esm.js.map +1 -1
  42. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +29 -0
  43. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -0
  44. package/dist/utils/pipeline-topology-utils.esm.js +2 -2
  45. package/dist/utils/pipeline-topology-utils.esm.js.map +1 -1
  46. package/dist/utils/taskRun-utils.esm.js.map +1 -1
  47. package/dist/utils/tekton-utils.esm.js.map +1 -1
  48. package/package.json +28 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 3.18.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 2f344ca: Backstage version bump to v1.35.0
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [2f344ca]
12
+ - @backstage-community/plugin-tekton-common@1.5.0
13
+
14
+ ## 3.17.0
15
+
16
+ ### Minor Changes
17
+
18
+ - e9600c4: Update Patternfly Dependencies to V6 and also use the latest version of aonic-ui/pipelines.
19
+
3
20
  ## 3.16.5
4
21
 
5
22
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { global_palette_red_200 } from '@patternfly/react-tokens/dist/js/global_palette_red_200';
2
+ import { t_color_red_60 } from '@patternfly/react-tokens/dist/js/t_color_red_60';
3
3
 
4
4
  const CriticalRiskIcon = ({
5
5
  className,
@@ -9,7 +9,7 @@ const CriticalRiskIcon = ({
9
9
  "svg",
10
10
  {
11
11
  viewBox: "0 0 925 1024",
12
- fill: global_palette_red_200.value,
12
+ fill: t_color_red_60.value,
13
13
  xmlns: "http://www.w3.org/2000/svg",
14
14
  className
15
15
  },
@@ -1 +1 @@
1
- {"version":3,"file":"CriticalRiskIcon.esm.js","sources":["../../../src/components/Icons/CriticalRiskIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { global_palette_red_200 as criticalColor } from '@patternfly/react-tokens/dist/js/global_palette_red_200';\n\nconst CriticalRiskIcon = ({\n className,\n title,\n}: {\n className: string;\n title?: string;\n}): React.ReactElement => {\n return (\n <svg\n viewBox=\"0 0 925 1024\"\n fill={criticalColor.value}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n {title && <title>{title}</title>}\n <path d=\"M897.86597,252.24865 L491.105712,7.96742801 C473.40731,-2.65897781 451.300057,-2.65597516 433.611654,7.97743687 L27.1213875,252.245648 C10.3059556,262.353595 0.0163032058,280.549701 0.0163032058,300.182078 L0.0163032058,967.971163 C-1.04266102,1010.81008 49.7156241,1038.89994 85.4314175,1015.41816 C85.4304175,1015.42016 432.807682,798.630273 432.807682,798.630273 C450.891071,787.348287 473.816296,787.342282 491.906685,798.624268 L839.584939,1015.4612 C875.297732,1039.03406 926.031018,1010.73602 924.984054,968.003192 C924.985054,968.005193 924.985054,300.192087 924.985054,300.192087 C924.985054,280.552703 914.688401,262.353595 897.86597,252.24865\" />\n </svg>\n );\n};\n\nexport default CriticalRiskIcon;\n"],"names":["criticalColor"],"mappings":";;;AAmBA,MAAM,mBAAmB,CAAC;AAAA,EACxB,SAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,cAAA;AAAA,MACR,MAAMA,sBAAc,CAAA,KAAA;AAAA,MACpB,KAAM,EAAA,4BAAA;AAAA,MACN;AAAA,KAAA;AAAA,IAEC,KAAA,oBAAU,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAO,KAAM,CAAA;AAAA,oBACxB,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,+oBAAgpB,EAAA;AAAA,GAC1pB;AAEJ;;;;"}
1
+ {"version":3,"file":"CriticalRiskIcon.esm.js","sources":["../../../src/components/Icons/CriticalRiskIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { t_color_red_60 as criticalColor } from '@patternfly/react-tokens/dist/js/t_color_red_60';\n\nconst CriticalRiskIcon = ({\n className,\n title,\n}: {\n className: string;\n title?: string;\n}): React.ReactElement => {\n return (\n <svg\n viewBox=\"0 0 925 1024\"\n fill={criticalColor.value}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n {title && <title>{title}</title>}\n <path d=\"M897.86597,252.24865 L491.105712,7.96742801 C473.40731,-2.65897781 451.300057,-2.65597516 433.611654,7.97743687 L27.1213875,252.245648 C10.3059556,262.353595 0.0163032058,280.549701 0.0163032058,300.182078 L0.0163032058,967.971163 C-1.04266102,1010.81008 49.7156241,1038.89994 85.4314175,1015.41816 C85.4304175,1015.42016 432.807682,798.630273 432.807682,798.630273 C450.891071,787.348287 473.816296,787.342282 491.906685,798.624268 L839.584939,1015.4612 C875.297732,1039.03406 926.031018,1010.73602 924.984054,968.003192 C924.985054,968.005193 924.985054,300.192087 924.985054,300.192087 C924.985054,280.552703 914.688401,262.353595 897.86597,252.24865\" />\n </svg>\n );\n};\n\nexport default CriticalRiskIcon;\n"],"names":["criticalColor"],"mappings":";;;AAmBA,MAAM,mBAAmB,CAAC;AAAA,EACxB,SAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,cAAA;AAAA,MACR,MAAMA,cAAc,CAAA,KAAA;AAAA,MACpB,KAAM,EAAA,4BAAA;AAAA,MACN;AAAA,KAAA;AAAA,IAEC,KAAA,oBAAU,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAO,KAAM,CAAA;AAAA,oBACxB,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,+oBAAgpB,EAAA;AAAA,GAC1pB;AAEJ;;;;"}
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { global_palette_gold_400 } from '@patternfly/react-tokens/dist/js/global_palette_gold_400';
2
+ import { t_color_yellow_40 } from '@patternfly/react-tokens/dist/js/t_color_yellow_40';
3
3
 
4
4
  const EqualsIcon = ({
5
5
  className,
@@ -9,7 +9,7 @@ const EqualsIcon = ({
9
9
  "svg",
10
10
  {
11
11
  viewBox: "0 -960 960 960",
12
- fill: global_palette_gold_400.value,
12
+ fill: t_color_yellow_40.value,
13
13
  xmlns: "http://www.w3.org/2000/svg",
14
14
  className
15
15
  },
@@ -1 +1 @@
1
- {"version":3,"file":"EqualsIcon.esm.js","sources":["../../../src/components/Icons/EqualsIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { global_palette_gold_400 as mediumColor } from '@patternfly/react-tokens/dist/js/global_palette_gold_400';\n\nconst EqualsIcon = ({\n className,\n title,\n}: {\n className: string;\n title?: string;\n}): React.ReactElement => {\n return (\n <svg\n viewBox=\"0 -960 960 960\"\n fill={mediumColor.value}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n {title && <title>{title}</title>}\n <path d=\"M160-280v-120h640v120H160Zm0-280v-120h640v120H160Z\" />\n </svg>\n );\n};\n\nexport default EqualsIcon;\n"],"names":["mediumColor"],"mappings":";;;AAmBA,MAAM,aAAa,CAAC;AAAA,EAClB,SAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,gBAAA;AAAA,MACR,MAAMA,uBAAY,CAAA,KAAA;AAAA,MAClB,KAAM,EAAA,4BAAA;AAAA,MACN;AAAA,KAAA;AAAA,IAEC,KAAA,oBAAU,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAO,KAAM,CAAA;AAAA,oBACxB,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,oDAAqD,EAAA;AAAA,GAC/D;AAEJ;;;;"}
1
+ {"version":3,"file":"EqualsIcon.esm.js","sources":["../../../src/components/Icons/EqualsIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { t_color_yellow_40 as mediumColor } from '@patternfly/react-tokens/dist/js/t_color_yellow_40';\n\nconst EqualsIcon = ({\n className,\n title,\n}: {\n className: string;\n title?: string;\n}): React.ReactElement => {\n return (\n <svg\n viewBox=\"0 -960 960 960\"\n fill={mediumColor.value}\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n {title && <title>{title}</title>}\n <path d=\"M160-280v-120h640v120H160Zm0-280v-120h640v120H160Z\" />\n </svg>\n );\n};\n\nexport default EqualsIcon;\n"],"names":["mediumColor"],"mappings":";;;AAmBA,MAAM,aAAa,CAAC;AAAA,EAClB,SAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,gBAAA;AAAA,MACR,MAAMA,iBAAY,CAAA,KAAA;AAAA,MAClB,KAAM,EAAA,4BAAA;AAAA,MACN;AAAA,KAAA;AAAA,IAEC,KAAA,oBAAU,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAO,KAAM,CAAA;AAAA,oBACxB,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,oDAAqD,EAAA;AAAA,GAC/D;AAEJ;;;;"}
@@ -5,7 +5,7 @@ import classNames from 'classnames';
5
5
  const useStyles = makeStyles(
6
6
  (theme) => createStyles({
7
7
  icon: {
8
- fill: "var(--pf-v5-global--Color--100)"
8
+ fill: "var(--pf-t--global--icon--color--100)"
9
9
  },
10
10
  disabledButton: {
11
11
  fill: theme.palette.grey[600]
@@ -1 +1 @@
1
- {"version":3,"file":"LinkToSbomIcon.esm.js","sources":["../../../src/components/Icons/LinkToSbomIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-v5-global--Color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst LinkToSBomIcon = ({\n disabled,\n dataTestId,\n}: {\n dataTestId: string;\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n data-testid={dataTestId}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M11 17H7C5.61667 17 4.4375 16.5125 3.4625 15.5375C2.4875 14.5625 2 13.3833 2 12C2 10.6167 2.4875 9.4375 3.4625 8.4625C4.4375 7.4875 5.61667 7 7 7H11V9H7C6.16667 9 5.45833 9.29167 4.875 9.875C4.29167 10.4583 4 11.1667 4 12C4 12.8333 4.29167 13.5417 4.875 14.125C5.45833 14.7083 6.16667 15 7 15H11V17ZM8 13V11H16V13H8ZM13 17V15H17C17.8333 15 18.5417 14.7083 19.125 14.125C19.7083 13.5417 20 12.8333 20 12C20 11.1667 19.7083 10.4583 19.125 9.875C18.5417 9.29167 17.8333 9 17 9H13V7H17C18.3833 7 19.5625 7.4875 20.5375 8.4625C21.5125 9.4375 22 10.6167 22 12C22 13.3833 21.5125 14.5625 20.5375 15.5375C19.5625 16.5125 18.3833 17 17 17H13Z\" />\n </svg>\n );\n};\n\nexport default LinkToSBomIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,iBAAiB,CAAC;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,UAAA;AAAA,MACb,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,2nBAA4nB,EAAA;AAAA,GACtoB;AAEJ;;;;"}
1
+ {"version":3,"file":"LinkToSbomIcon.esm.js","sources":["../../../src/components/Icons/LinkToSbomIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-t--global--icon--color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst LinkToSBomIcon = ({\n disabled,\n dataTestId,\n}: {\n dataTestId: string;\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n data-testid={dataTestId}\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M11 17H7C5.61667 17 4.4375 16.5125 3.4625 15.5375C2.4875 14.5625 2 13.3833 2 12C2 10.6167 2.4875 9.4375 3.4625 8.4625C4.4375 7.4875 5.61667 7 7 7H11V9H7C6.16667 9 5.45833 9.29167 4.875 9.875C4.29167 10.4583 4 11.1667 4 12C4 12.8333 4.29167 13.5417 4.875 14.125C5.45833 14.7083 6.16667 15 7 15H11V17ZM8 13V11H16V13H8ZM13 17V15H17C17.8333 15 18.5417 14.7083 19.125 14.125C19.7083 13.5417 20 12.8333 20 12C20 11.1667 19.7083 10.4583 19.125 9.875C18.5417 9.29167 17.8333 9 17 9H13V7H17C18.3833 7 19.5625 7.4875 20.5375 8.4625C21.5125 9.4375 22 10.6167 22 12C22 13.3833 21.5125 14.5625 20.5375 15.5375C19.5625 16.5125 18.3833 17 17 17H13Z\" />\n </svg>\n );\n};\n\nexport default LinkToSBomIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,iBAAiB,CAAC;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAG0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAa,EAAA,UAAA;AAAA,MACb,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,2nBAA4nB,EAAA;AAAA,GACtoB;AAEJ;;;;"}
@@ -5,7 +5,7 @@ import classNames from 'classnames';
5
5
  const useStyles = makeStyles(
6
6
  (theme) => createStyles({
7
7
  icon: {
8
- fill: "var(--pf-v5-global--Color--100)"
8
+ fill: "var(--pf-t--global--icon--color--100)"
9
9
  },
10
10
  disabledButton: {
11
11
  fill: theme.palette.grey[600]
@@ -1 +1 @@
1
- {"version":3,"file":"OutputIcon.esm.js","sources":["../../../src/components/Icons/OutputIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-v5-global--Color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst OutputIcon = ({\n disabled,\n}: {\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H19C19.55 3 20.0208 3.19583 20.4125 3.5875C20.8042 3.97917 21 4.45 21 5V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM5 19H19V7H5V19ZM7 12V10H17V12H7ZM7 16V14H13V16H7Z\" />\n </svg>\n );\n};\n\nexport default OutputIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,aAAa,CAAC;AAAA,EAClB;AACF,CAE0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,IAAK,EAAA,MAAA;AAAA,MACL,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,oVAAqV,EAAA;AAAA,GAC/V;AAEJ;;;;"}
1
+ {"version":3,"file":"OutputIcon.esm.js","sources":["../../../src/components/Icons/OutputIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-t--global--icon--color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst OutputIcon = ({\n disabled,\n}: {\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M5 21C4.45 21 3.97917 20.8042 3.5875 20.4125C3.19583 20.0208 3 19.55 3 19V5C3 4.45 3.19583 3.97917 3.5875 3.5875C3.97917 3.19583 4.45 3 5 3H19C19.55 3 20.0208 3.19583 20.4125 3.5875C20.8042 3.97917 21 4.45 21 5V19C21 19.55 20.8042 20.0208 20.4125 20.4125C20.0208 20.8042 19.55 21 19 21H5ZM5 19H19V7H5V19ZM7 12V10H17V12H7ZM7 16V14H13V16H7Z\" />\n </svg>\n );\n};\n\nexport default OutputIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,aAAa,CAAC;AAAA,EAClB;AACF,CAE0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,IAAK,EAAA,MAAA;AAAA,MACL,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,oVAAqV,EAAA;AAAA,GAC/V;AAEJ;;;;"}
@@ -5,7 +5,7 @@ import classNames from 'classnames';
5
5
  const useStyles = makeStyles(
6
6
  (theme) => createStyles({
7
7
  icon: {
8
- fill: "var(--pf-v5-global--Color--100)"
8
+ fill: "var(--pf-t--global--icon--color--100)"
9
9
  },
10
10
  disabledButton: {
11
11
  fill: theme.palette.grey[600]
@@ -1 +1 @@
1
- {"version":3,"file":"ViewLogsIcon.esm.js","sources":["../../../src/components/Icons/ViewLogsIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-v5-global--Color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst ViewLogsIcon = ({\n disabled,\n}: {\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M4.5 21C4.0875 21 3.73438 20.8531 3.44063 20.5594C3.14688 20.2656 3 19.9125 3 19.5V4.5C3 4.0875 3.14688 3.73438 3.44063 3.44063C3.73438 3.14688 4.0875 3 4.5 3H19.5C19.9125 3 20.2656 3.14688 20.5594 3.44063C20.8531 3.73438 21 4.0875 21 4.5V19.5C21 19.9125 20.8531 20.2656 20.5594 20.5594C20.2656 20.8531 19.9125 21 19.5 21H4.5ZM4.5 19.5H19.5V6.5H4.5V19.5ZM12.001 16.875C10.667 16.875 9.475 16.5154 8.425 15.7962C7.375 15.077 6.60833 14.1437 6.125 12.9962C6.60833 11.8487 7.37466 10.9167 8.42398 10.2C9.47329 9.48333 10.665 9.125 11.999 9.125C13.333 9.125 14.525 9.48459 15.575 10.2038C16.625 10.923 17.3917 11.8563 17.875 13.0038C17.3917 14.1513 16.6253 15.0833 15.576 15.8C14.5267 16.5167 13.335 16.875 12.001 16.875ZM11.9971 14.25C11.649 14.25 11.3542 14.1282 11.1125 13.8846C10.8708 13.6409 10.75 13.3451 10.75 12.9971C10.75 12.649 10.8718 12.3542 11.1155 12.1125C11.3591 11.8708 11.6549 11.75 12.003 11.75C12.351 11.75 12.6458 11.8718 12.8875 12.1155C13.1292 12.3591 13.25 12.6549 13.25 13.003C13.25 13.351 13.1282 13.6458 12.8846 13.8875C12.6409 14.1292 12.3451 14.25 11.9971 14.25ZM12 15C12.56 15 13.0333 14.8067 13.42 14.42C13.8067 14.0333 14 13.56 14 13C14 12.44 13.8067 11.9667 13.42 11.58C13.0333 11.1933 12.56 11 12 11C11.44 11 10.9667 11.1933 10.58 11.58C10.1933 11.9667 10 12.44 10 13C10 13.56 10.1933 14.0333 10.58 14.42C10.9667 14.8067 11.44 15 12 15Z\" />\n </svg>\n );\n};\n\nexport default ViewLogsIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,eAAe,CAAC;AAAA,EACpB;AACF,CAE0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,u1CAAw1C,EAAA;AAAA,GACl2C;AAEJ;;;;"}
1
+ {"version":3,"file":"ViewLogsIcon.esm.js","sources":["../../../src/components/Icons/ViewLogsIcon.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { createStyles, makeStyles, Theme } from '@material-ui/core';\nimport classNames from 'classnames';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n icon: {\n fill: 'var(--pf-t--global--icon--color--100)',\n },\n disabledButton: {\n fill: theme.palette.grey[600],\n },\n }),\n);\n\nconst ViewLogsIcon = ({\n disabled,\n}: {\n disabled?: boolean;\n}): React.ReactElement => {\n const classes = useStyles();\n return (\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={classNames(classes.icon, {\n [classes.disabledButton]: disabled,\n })}\n >\n <path d=\"M4.5 21C4.0875 21 3.73438 20.8531 3.44063 20.5594C3.14688 20.2656 3 19.9125 3 19.5V4.5C3 4.0875 3.14688 3.73438 3.44063 3.44063C3.73438 3.14688 4.0875 3 4.5 3H19.5C19.9125 3 20.2656 3.14688 20.5594 3.44063C20.8531 3.73438 21 4.0875 21 4.5V19.5C21 19.9125 20.8531 20.2656 20.5594 20.5594C20.2656 20.8531 19.9125 21 19.5 21H4.5ZM4.5 19.5H19.5V6.5H4.5V19.5ZM12.001 16.875C10.667 16.875 9.475 16.5154 8.425 15.7962C7.375 15.077 6.60833 14.1437 6.125 12.9962C6.60833 11.8487 7.37466 10.9167 8.42398 10.2C9.47329 9.48333 10.665 9.125 11.999 9.125C13.333 9.125 14.525 9.48459 15.575 10.2038C16.625 10.923 17.3917 11.8563 17.875 13.0038C17.3917 14.1513 16.6253 15.0833 15.576 15.8C14.5267 16.5167 13.335 16.875 12.001 16.875ZM11.9971 14.25C11.649 14.25 11.3542 14.1282 11.1125 13.8846C10.8708 13.6409 10.75 13.3451 10.75 12.9971C10.75 12.649 10.8718 12.3542 11.1155 12.1125C11.3591 11.8708 11.6549 11.75 12.003 11.75C12.351 11.75 12.6458 11.8718 12.8875 12.1155C13.1292 12.3591 13.25 12.6549 13.25 13.003C13.25 13.351 13.1282 13.6458 12.8846 13.8875C12.6409 14.1292 12.3451 14.25 11.9971 14.25ZM12 15C12.56 15 13.0333 14.8067 13.42 14.42C13.8067 14.0333 14 13.56 14 13C14 12.44 13.8067 11.9667 13.42 11.58C13.0333 11.1933 12.56 11 12 11C11.44 11 10.9667 11.1933 10.58 11.58C10.1933 11.9667 10 12.44 10 13C10 13.56 10.1933 14.0333 10.58 14.42C10.9667 14.8067 11.44 15 12 15Z\" />\n </svg>\n );\n};\n\nexport default ViewLogsIcon;\n"],"names":[],"mappings":";;;;AAoBA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA;AAAA,KACR;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,IAAM,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAC9B,GACD;AACH,CAAA;AAEA,MAAM,eAAe,CAAC;AAAA,EACpB;AACF,CAE0B,KAAA;AACxB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,IAAA;AAAA,MACN,MAAO,EAAA,IAAA;AAAA,MACP,OAAQ,EAAA,WAAA;AAAA,MACR,KAAM,EAAA,4BAAA;AAAA,MACN,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,IAAM,EAAA;AAAA,QAClC,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B;AAAA,KAAA;AAAA,oBAED,KAAA,CAAA,aAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,u1CAAw1C,EAAA;AAAA,GACl2C;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-timestamp {\n color: inherit;\n}\n";
4
4
  styleInject(css_248z);
@@ -69,7 +69,7 @@ const PipelineRunRowActions = ({
69
69
  closeDialog,
70
70
  pods,
71
71
  taskRuns,
72
- activeTask: noActiveTask ? void 0 : activeTaskName
72
+ activeTask: noActiveTask ? undefined : activeTaskName
73
73
  }
74
74
  ), /* @__PURE__ */ React.createElement(
75
75
  PipelineRunOutputDialog,
@@ -108,7 +108,7 @@ const PipelineRunRowActions = ({
108
108
  "data-testid": "view-sbom-icon",
109
109
  disabled: !sbomTaskRun || !isSbomTaskRun(sbomTaskRun),
110
110
  size: "small",
111
- onClick: !hasExternalLink(sbomTaskRun) ? () => openDialog() : void 0,
111
+ onClick: !hasExternalLink(sbomTaskRun) ? () => openDialog() : undefined,
112
112
  style: { pointerEvents: "auto", padding: 0 }
113
113
  },
114
114
  /* @__PURE__ */ React.createElement(PipelineRunSBOMLink, { sbomTaskRun })
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunRowActions.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRowActions.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { kubernetesProxyPermission } from '@backstage/plugin-kubernetes-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport { IconButton } from '@material-ui/core';\nimport { Flex, FlexItem } from '@patternfly/react-core';\nimport { Tooltip } from '@patternfly/react-core/dist/esm/components/Tooltip/Tooltip';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n getTaskrunsOutputGroup,\n hasExternalLink,\n isSbomTaskRun,\n} from '../../utils/taskRun-utils';\nimport OutputIcon from '../Icons/OutputIcon';\nimport ViewLogsIcon from '../Icons/ViewLogsIcon';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport PipelineRunOutputDialog from '../PipelineRunOutput/PipelineRunOutputDialog';\nimport PipelineRunSBOMLink from './PipelineRunSBOMLink';\n\nconst PipelineRunRowActions: React.FC<{ pipelineRun: PipelineRunKind }> = ({\n pipelineRun,\n}) => {\n const { watchResourcesData } = React.useContext(TektonResourcesContext);\n const [open, setOpen] = React.useState<boolean>(false);\n\n const [openOutput, setOpenOutput] = React.useState<boolean>(false);\n const [noActiveTask, setNoActiveTask] = React.useState(false);\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const { sbomTaskRun } = getTaskrunsOutputGroup(\n pipelineRun?.metadata?.name,\n taskRuns,\n );\n const activeTaskName = sbomTaskRun?.metadata?.name;\n\n const hasKubernetesProxyAccess = usePermission({\n permission: kubernetesProxyPermission,\n });\n\n const openDialog = (viewLogs?: boolean) => {\n if (viewLogs) setNoActiveTask(true);\n setOpen(true);\n };\n\n const openOutputDialog = () => {\n setOpenOutput(true);\n };\n\n const closeDialog = () => {\n setNoActiveTask(false);\n setOpen(false);\n };\n\n const {\n acsImageScanTaskRun,\n acsImageCheckTaskRun,\n acsDeploymentCheckTaskRun,\n ecTaskRun,\n } = getTaskrunsOutputGroup(pipelineRun?.metadata?.name, taskRuns);\n\n const finishedTaskruns = [\n ...(acsImageScanTaskRun ? [acsImageScanTaskRun] : []),\n ...(acsImageCheckTaskRun ? [acsImageCheckTaskRun] : []),\n ...(acsDeploymentCheckTaskRun ? [acsDeploymentCheckTaskRun] : []),\n ...(ecTaskRun ? [ecTaskRun] : []),\n ].filter((taskRun: TaskRunKind) =>\n [\n ComputedStatus.Succeeded,\n ComputedStatus.Failed,\n ComputedStatus.Skipped,\n ].includes(pipelineRunFilterReducer(taskRun)),\n );\n\n const results =\n pipelineRun?.status?.pipelineResults || pipelineRun?.status?.results || [];\n\n const disabled =\n results.length === 0 ? finishedTaskruns.length === 0 : results.length === 0;\n\n return (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={noActiveTask ? undefined : activeTaskName}\n />\n\n <PipelineRunOutputDialog\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n open={openOutput}\n closeDialog={() => {\n setOpenOutput(false);\n }}\n />\n <Flex gap={{ default: 'gapXs' }}>\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? 'View logs'\n : 'Unauthorized to view logs'\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-logs-icon\"\n onClick={() => openDialog(true)}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ViewLogsIcon disabled={!hasKubernetesProxyAccess.allowed} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n !sbomTaskRun\n ? 'View SBOM is not applicable for this PipelineRun'\n : 'View SBOM'\n }\n >\n <IconButton\n data-testid=\"view-sbom-icon\"\n disabled={!sbomTaskRun || !isSbomTaskRun(sbomTaskRun)}\n size=\"small\"\n onClick={\n !hasExternalLink(sbomTaskRun) ? () => openDialog() : undefined\n }\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <PipelineRunSBOMLink sbomTaskRun={sbomTaskRun} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n disabled\n ? 'View Output is not applicable for this PipelineRun'\n : 'View Output'\n }\n >\n <IconButton\n data-testid=\"view-output-icon\"\n disabled={disabled}\n size=\"small\"\n onClick={() => openOutputDialog()}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <OutputIcon disabled={disabled} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n </Flex>\n </>\n );\n};\nexport default React.memo(PipelineRunRowActions);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PipelineRunRowActions.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunRowActions.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { kubernetesProxyPermission } from '@backstage/plugin-kubernetes-common';\nimport { usePermission } from '@backstage/plugin-permission-react';\n\nimport { IconButton } from '@material-ui/core';\nimport { Flex, FlexItem } from '@patternfly/react-core';\nimport { Tooltip } from '@patternfly/react-core/dist/esm/components/Tooltip/Tooltip';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n PipelineRunKind,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport {\n getTaskrunsOutputGroup,\n hasExternalLink,\n isSbomTaskRun,\n} from '../../utils/taskRun-utils';\nimport OutputIcon from '../Icons/OutputIcon';\nimport ViewLogsIcon from '../Icons/ViewLogsIcon';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport PipelineRunOutputDialog from '../PipelineRunOutput/PipelineRunOutputDialog';\nimport PipelineRunSBOMLink from './PipelineRunSBOMLink';\n\nconst PipelineRunRowActions: React.FC<{ pipelineRun: PipelineRunKind }> = ({\n pipelineRun,\n}) => {\n const { watchResourcesData } = React.useContext(TektonResourcesContext);\n const [open, setOpen] = React.useState<boolean>(false);\n\n const [openOutput, setOpenOutput] = React.useState<boolean>(false);\n const [noActiveTask, setNoActiveTask] = React.useState(false);\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const { sbomTaskRun } = getTaskrunsOutputGroup(\n pipelineRun?.metadata?.name,\n taskRuns,\n );\n const activeTaskName = sbomTaskRun?.metadata?.name;\n\n const hasKubernetesProxyAccess = usePermission({\n permission: kubernetesProxyPermission,\n });\n\n const openDialog = (viewLogs?: boolean) => {\n if (viewLogs) setNoActiveTask(true);\n setOpen(true);\n };\n\n const openOutputDialog = () => {\n setOpenOutput(true);\n };\n\n const closeDialog = () => {\n setNoActiveTask(false);\n setOpen(false);\n };\n\n const {\n acsImageScanTaskRun,\n acsImageCheckTaskRun,\n acsDeploymentCheckTaskRun,\n ecTaskRun,\n } = getTaskrunsOutputGroup(pipelineRun?.metadata?.name, taskRuns);\n\n const finishedTaskruns = [\n ...(acsImageScanTaskRun ? [acsImageScanTaskRun] : []),\n ...(acsImageCheckTaskRun ? [acsImageCheckTaskRun] : []),\n ...(acsDeploymentCheckTaskRun ? [acsDeploymentCheckTaskRun] : []),\n ...(ecTaskRun ? [ecTaskRun] : []),\n ].filter((taskRun: TaskRunKind) =>\n [\n ComputedStatus.Succeeded,\n ComputedStatus.Failed,\n ComputedStatus.Skipped,\n ].includes(pipelineRunFilterReducer(taskRun)),\n );\n\n const results =\n pipelineRun?.status?.pipelineResults || pipelineRun?.status?.results || [];\n\n const disabled =\n results.length === 0 ? finishedTaskruns.length === 0 : results.length === 0;\n\n return (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={noActiveTask ? undefined : activeTaskName}\n />\n\n <PipelineRunOutputDialog\n pipelineRun={pipelineRun}\n taskRuns={taskRuns}\n open={openOutput}\n closeDialog={() => {\n setOpenOutput(false);\n }}\n />\n <Flex gap={{ default: 'gapXs' }}>\n <FlexItem>\n <Tooltip\n content={\n hasKubernetesProxyAccess.allowed\n ? 'View logs'\n : 'Unauthorized to view logs'\n }\n >\n <IconButton\n size=\"small\"\n data-testid=\"view-logs-icon\"\n onClick={() => openDialog(true)}\n disabled={!hasKubernetesProxyAccess.allowed}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <ViewLogsIcon disabled={!hasKubernetesProxyAccess.allowed} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n !sbomTaskRun\n ? 'View SBOM is not applicable for this PipelineRun'\n : 'View SBOM'\n }\n >\n <IconButton\n data-testid=\"view-sbom-icon\"\n disabled={!sbomTaskRun || !isSbomTaskRun(sbomTaskRun)}\n size=\"small\"\n onClick={\n !hasExternalLink(sbomTaskRun) ? () => openDialog() : undefined\n }\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <PipelineRunSBOMLink sbomTaskRun={sbomTaskRun} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n <FlexItem align={{ default: 'alignLeft' }}>\n <Tooltip\n content={\n disabled\n ? 'View Output is not applicable for this PipelineRun'\n : 'View Output'\n }\n >\n <IconButton\n data-testid=\"view-output-icon\"\n disabled={disabled}\n size=\"small\"\n onClick={() => openOutputDialog()}\n style={{ pointerEvents: 'auto', padding: 0 }}\n >\n <OutputIcon disabled={disabled} />\n </IconButton>\n </Tooltip>\n </FlexItem>\n </Flex>\n </>\n );\n};\nexport default React.memo(PipelineRunRowActions);\n"],"names":[],"mappings":"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"}
@@ -3,8 +3,8 @@ import { makeStyles } from '@material-ui/core';
3
3
  import AngleDoubleDownIcon from '@mui/icons-material/KeyboardDoubleArrowDownOutlined';
4
4
  import AngleDoubleUpIcon from '@mui/icons-material/KeyboardDoubleArrowUpOutlined';
5
5
  import { Tooltip } from '@patternfly/react-core';
6
- import { global_palette_gold_400 } from '@patternfly/react-tokens/dist/js/global_palette_gold_400';
7
- import { global_palette_orange_300 } from '@patternfly/react-tokens/dist/js/global_palette_orange_300';
6
+ import { t_color_yellow_40 } from '@patternfly/react-tokens/dist/js/t_color_yellow_40';
7
+ import { t_color_orange_40 } from '@patternfly/react-tokens/dist/js/t_color_orange_40';
8
8
  import classNames from 'classnames';
9
9
  import { usePipelineRunScanResults } from '../../hooks/usePipelineRunScanResults.esm.js';
10
10
  import CriticalRiskIcon from '../Icons/CriticalRiskIcon.esm.js';
@@ -36,12 +36,12 @@ const useVStyles = makeStyles((theme) => ({
36
36
  width: "1em"
37
37
  },
38
38
  highStatus: {
39
- color: global_palette_orange_300.value,
39
+ color: t_color_orange_40.value,
40
40
  height: "0.8em",
41
41
  width: "0.8em"
42
42
  },
43
43
  mediumStatus: {
44
- color: global_palette_gold_400.value,
44
+ color: t_color_yellow_40.value,
45
45
  height: "1.3em",
46
46
  width: "1.3em"
47
47
  },
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineRunVulnerabilities.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunVulnerabilities.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { makeStyles, Theme } from '@material-ui/core';\nimport AngleDoubleDownIcon from '@mui/icons-material/KeyboardDoubleArrowDownOutlined';\nimport AngleDoubleUpIcon from '@mui/icons-material/KeyboardDoubleArrowUpOutlined';\nimport { Tooltip } from '@patternfly/react-core';\nimport { global_palette_gold_400 as mediumColor } from '@patternfly/react-tokens/dist/js/global_palette_gold_400';\nimport { global_palette_orange_300 as highColor } from '@patternfly/react-tokens/dist/js/global_palette_orange_300';\nimport classNames from 'classnames';\n\nimport { PipelineRunKind } from '@janus-idp/shared-react';\n\nimport { usePipelineRunScanResults } from '../../hooks/usePipelineRunScanResults';\nimport CriticalRiskIcon from '../Icons/CriticalRiskIcon';\nimport EqualsIcon from '../Icons/EqualsIcon';\n\nconst useVStyles = makeStyles((theme: Theme) => ({\n pipelineVulnerabilities: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n },\n severityContainer: {\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'nowrap',\n gap: theme.spacing(0.5),\n },\n severityStatus: {\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'nowrap',\n gap: theme.spacing(0.5),\n },\n severityCount: {\n fontWeight: 'bold',\n },\n criticalStatus: {\n height: '1em',\n width: '1em',\n },\n highStatus: {\n color: highColor.value,\n height: '0.8em',\n width: '0.8em',\n },\n mediumStatus: {\n color: mediumColor.value,\n height: '1.3em',\n width: '1.3em',\n },\n lowStatus: {\n height: '0.8em',\n width: '0.8em',\n },\n}));\n\ntype PipelineRunVulnerabilitiesProps = {\n pipelineRun: PipelineRunKind;\n condensed?: boolean;\n};\n\nconst PipelineRunVulnerabilities: React.FC<PipelineRunVulnerabilitiesProps> = ({\n pipelineRun,\n condensed,\n}) => {\n const classes = useVStyles();\n const scanResults = usePipelineRunScanResults(pipelineRun);\n\n return (\n <div className={classes.pipelineVulnerabilities}>\n {scanResults?.vulnerabilities ? (\n <>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"Critical\">\n <CriticalRiskIcon\n className={classes.criticalStatus}\n title=\"Critical\"\n />\n </Tooltip>\n {!condensed ? 'Critical' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.critical || 0}\n </span>\n </div>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"High\">\n <AngleDoubleUpIcon\n className={classes.highStatus}\n titleAccess=\"High\"\n />\n </Tooltip>\n {!condensed ? 'High' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.high || 0}\n </span>\n </div>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"Medium\">\n <EqualsIcon className={classes.mediumStatus} title=\"Medium\" />\n </Tooltip>\n {!condensed ? 'Medium' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.medium || 0}\n </span>\n </div>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"Low\">\n <AngleDoubleDownIcon\n className={classes.lowStatus}\n titleAccess=\"Low\"\n />\n </Tooltip>\n {!condensed ? 'Low' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.low || 0}\n </span>\n </div>\n </>\n ) : (\n '-'\n )}\n </div>\n );\n};\n\nexport default PipelineRunVulnerabilities;\n"],"names":["highColor","mediumColor"],"mappings":"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"}
1
+ {"version":3,"file":"PipelineRunVulnerabilities.esm.js","sources":["../../../src/components/PipelineRunList/PipelineRunVulnerabilities.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { makeStyles, Theme } from '@material-ui/core';\nimport AngleDoubleDownIcon from '@mui/icons-material/KeyboardDoubleArrowDownOutlined';\nimport AngleDoubleUpIcon from '@mui/icons-material/KeyboardDoubleArrowUpOutlined';\nimport { Tooltip } from '@patternfly/react-core';\nimport { t_color_yellow_40 as mediumColor } from '@patternfly/react-tokens/dist/js/t_color_yellow_40';\nimport { t_color_orange_40 as highColor } from '@patternfly/react-tokens/dist/js/t_color_orange_40';\nimport classNames from 'classnames';\n\nimport { PipelineRunKind } from '@janus-idp/shared-react';\n\nimport { usePipelineRunScanResults } from '../../hooks/usePipelineRunScanResults';\nimport CriticalRiskIcon from '../Icons/CriticalRiskIcon';\nimport EqualsIcon from '../Icons/EqualsIcon';\n\nconst useVStyles = makeStyles((theme: Theme) => ({\n pipelineVulnerabilities: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: theme.spacing(1),\n },\n severityContainer: {\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'nowrap',\n gap: theme.spacing(0.5),\n },\n severityStatus: {\n alignItems: 'center',\n display: 'flex',\n flexWrap: 'nowrap',\n gap: theme.spacing(0.5),\n },\n severityCount: {\n fontWeight: 'bold',\n },\n criticalStatus: {\n height: '1em',\n width: '1em',\n },\n highStatus: {\n color: highColor.value,\n height: '0.8em',\n width: '0.8em',\n },\n mediumStatus: {\n color: mediumColor.value,\n height: '1.3em',\n width: '1.3em',\n },\n lowStatus: {\n height: '0.8em',\n width: '0.8em',\n },\n}));\n\ntype PipelineRunVulnerabilitiesProps = {\n pipelineRun: PipelineRunKind;\n condensed?: boolean;\n};\n\nconst PipelineRunVulnerabilities: React.FC<PipelineRunVulnerabilitiesProps> = ({\n pipelineRun,\n condensed,\n}) => {\n const classes = useVStyles();\n const scanResults = usePipelineRunScanResults(pipelineRun);\n\n return (\n <div className={classes.pipelineVulnerabilities}>\n {scanResults?.vulnerabilities ? (\n <>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"Critical\">\n <CriticalRiskIcon\n className={classes.criticalStatus}\n title=\"Critical\"\n />\n </Tooltip>\n {!condensed ? 'Critical' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.critical || 0}\n </span>\n </div>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"High\">\n <AngleDoubleUpIcon\n className={classes.highStatus}\n titleAccess=\"High\"\n />\n </Tooltip>\n {!condensed ? 'High' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.high || 0}\n </span>\n </div>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"Medium\">\n <EqualsIcon className={classes.mediumStatus} title=\"Medium\" />\n </Tooltip>\n {!condensed ? 'Medium' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.medium || 0}\n </span>\n </div>\n <div className={classNames(classes.severityContainer, 'severity')}>\n <span className={classes.severityStatus}>\n <Tooltip content=\"Low\">\n <AngleDoubleDownIcon\n className={classes.lowStatus}\n titleAccess=\"Low\"\n />\n </Tooltip>\n {!condensed ? 'Low' : null}\n </span>\n <span className={classes.severityCount}>\n {scanResults.vulnerabilities.low || 0}\n </span>\n </div>\n </>\n ) : (\n '-'\n )}\n </div>\n );\n};\n\nexport default PipelineRunVulnerabilities;\n"],"names":["highColor","mediumColor"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-plrstatus {\n display: flex;\n align-items: center;\n}\n\n.bs-tkn-plrstatus svg {\n top: 0;\n}\n";
4
4
  styleInject(css_248z);
@@ -1,6 +1,6 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
- var css_248z = ".bs-tkn-pipeline-visualization__label {\n align-items: baseline;\n}\n\n.bs-tkn-pipeline-visualization__label .badge {\n font-size: 12px;\n line-height: 20px;\n margin-right: 4px;\n min-width: 24px;\n padding: 0 7px;\n border-radius: 20px;\n color: var(--pf-v5-global--palette--white);\n display: inline-block;\n text-align: center;\n white-space: nowrap;\n width: 100%;\n}\n";
3
+ var css_248z = ".bs-tkn-pipeline-visualization__label {\n align-items: baseline;\n}\n\n.bs-tkn-pipeline-visualization__label .badge {\n font-size: 12px;\n line-height: 20px;\n margin-right: 4px;\n min-width: 24px;\n padding: 0 7px;\n border-radius: 20px;\n color: var(--pf-t--color--white);\n display: inline-block;\n text-align: center;\n white-space: nowrap;\n width: 100%;\n}\n";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
@@ -8,7 +8,7 @@ const ResourceBadge = ({
8
8
  name,
9
9
  suffix
10
10
  }) => {
11
- return /* @__PURE__ */ React__default.createElement(Split, { className: "bs-tkn-pipeline-visualization__label" }, /* @__PURE__ */ React__default.createElement(SplitItem, { style: { marginRight: "var(--pf-v5-global--spacer--sm)" } }, /* @__PURE__ */ React__default.createElement("span", { className: "badge", style: { backgroundColor: color } }, abbr)), /* @__PURE__ */ React__default.createElement(SplitItem, null, /* @__PURE__ */ React__default.createElement("span", null, name)), suffix ? /* @__PURE__ */ React__default.createElement(SplitItem, { style: { marginLeft: "var(--pf-v5-global--spacer--sm)" } }, suffix) : null);
11
+ return /* @__PURE__ */ React__default.createElement(Split, { className: "bs-tkn-pipeline-visualization__label" }, /* @__PURE__ */ React__default.createElement(SplitItem, { style: { marginRight: "var(--pf-t--global--spacer--sm)" } }, /* @__PURE__ */ React__default.createElement("span", { className: "badge", style: { backgroundColor: color } }, abbr)), /* @__PURE__ */ React__default.createElement(SplitItem, null, /* @__PURE__ */ React__default.createElement("span", null, name)), suffix ? /* @__PURE__ */ React__default.createElement(SplitItem, { style: { marginLeft: "var(--pf-t--global--spacer--sm)" } }, suffix) : null);
12
12
  };
13
13
 
14
14
  export { ResourceBadge as default };
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceBadge.esm.js","sources":["../../../src/components/PipelineRunList/ResourceBadge.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Split, SplitItem } from '@patternfly/react-core';\n\nimport './ResourceBadge.css';\n\nconst ResourceBadge = ({\n color,\n abbr,\n name,\n suffix,\n}: {\n color: string;\n abbr: string;\n name: string;\n suffix?: React.ReactNode;\n}) => {\n return (\n <Split className=\"bs-tkn-pipeline-visualization__label\">\n <SplitItem style={{ marginRight: 'var(--pf-v5-global--spacer--sm)' }}>\n <span className=\"badge\" style={{ backgroundColor: color }}>\n {abbr}\n </span>\n </SplitItem>\n <SplitItem>\n <span>{name}</span>\n </SplitItem>\n {suffix ? (\n <SplitItem style={{ marginLeft: 'var(--pf-v5-global--spacer--sm)' }}>\n {suffix}\n </SplitItem>\n ) : null}\n </Split>\n );\n};\n\nexport default ResourceBadge;\n"],"names":["React"],"mappings":";;;;AAqBA,MAAM,gBAAgB,CAAC;AAAA,EACrB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAKM,KAAA;AACJ,EAAA,oDACG,KAAM,EAAA,EAAA,SAAA,EAAU,0DACdA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,OAAO,EAAE,WAAA,EAAa,iCAAkC,EAAA,EAAA,+CAChE,MAAK,EAAA,EAAA,SAAA,EAAU,SAAQ,KAAO,EAAA,EAAE,iBAAiB,KAAM,EAAA,EAAA,EACrD,IACH,CACF,mBACCA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,IAAA,+CACE,MAAM,EAAA,IAAA,EAAA,IAAK,CACd,CACC,EAAA,MAAA,mBACEA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,OAAO,EAAE,UAAA,EAAY,mCAC7B,EAAA,EAAA,MACH,IACE,IACN,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ResourceBadge.esm.js","sources":["../../../src/components/PipelineRunList/ResourceBadge.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Split, SplitItem } from '@patternfly/react-core';\n\nimport './ResourceBadge.css';\n\nconst ResourceBadge = ({\n color,\n abbr,\n name,\n suffix,\n}: {\n color: string;\n abbr: string;\n name: string;\n suffix?: React.ReactNode;\n}) => {\n return (\n <Split className=\"bs-tkn-pipeline-visualization__label\">\n <SplitItem style={{ marginRight: 'var(--pf-t--global--spacer--sm)' }}>\n <span className=\"badge\" style={{ backgroundColor: color }}>\n {abbr}\n </span>\n </SplitItem>\n <SplitItem>\n <span>{name}</span>\n </SplitItem>\n {suffix ? (\n <SplitItem style={{ marginLeft: 'var(--pf-t--global--spacer--sm)' }}>\n {suffix}\n </SplitItem>\n ) : null}\n </Split>\n );\n};\n\nexport default ResourceBadge;\n"],"names":["React"],"mappings":";;;;AAqBA,MAAM,gBAAgB,CAAC;AAAA,EACrB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAKM,KAAA;AACJ,EAAA,oDACG,KAAM,EAAA,EAAA,SAAA,EAAU,0DACdA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,OAAO,EAAE,WAAA,EAAa,iCAAkC,EAAA,EAAA,+CAChE,MAAK,EAAA,EAAA,SAAA,EAAU,SAAQ,KAAO,EAAA,EAAE,iBAAiB,KAAM,EAAA,EAAA,EACrD,IACH,CACF,mBACCA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,IAAA,+CACE,MAAM,EAAA,IAAA,EAAA,IAAK,CACd,CACC,EAAA,MAAA,mBACEA,cAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,OAAO,EAAE,UAAA,EAAY,mCAC7B,EAAA,EAAA,MACH,IACE,IACN,CAAA;AAEJ;;;;"}
@@ -12,8 +12,8 @@ const useStyles = makeStyles(
12
12
  (theme) => createStyles({
13
13
  downloadAction: {
14
14
  position: "relative",
15
- marginBottom: "var(--pf-v5-global--spacer--sm)",
16
- color: "var(--pf-v5-global--color--100)",
15
+ marginBottom: "var(--pf-t--global--spacer--sm)",
16
+ color: "var(--pf-t--global--icon--color--100)",
17
17
  cursor: "pointer"
18
18
  },
19
19
  buttonDisabled: {
@@ -1 +1 @@
1
- {"version":3,"file":"PodLogsDownloadLink.esm.js","sources":["../../../src/components/PipelineRunLogs/PodLogsDownloadLink.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport { createStyles, Link, makeStyles, Theme } from '@material-ui/core';\nimport DownloadIcon from '@mui/icons-material/FileDownloadOutlined';\nimport classNames from 'classnames';\n\nimport { downloadLogFile } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { ContainerScope } from '../../hooks/usePodLogsOfPipelineRun';\nimport {\n kubernetesProxyApiRef,\n TektonResourcesContextData,\n} from '../../types/types';\nimport { getPodLogs } from '../../utils/log-downloader-utils';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n downloadAction: {\n position: 'relative',\n marginBottom: 'var(--pf-v5-global--spacer--sm)',\n color: 'var(--pf-v5-global--color--100)',\n cursor: 'pointer',\n },\n buttonDisabled: {\n color: theme.palette.grey[400],\n cursor: 'not-allowed',\n },\n }),\n);\n\nconst PodLogsDownloadLink: React.FC<{\n pods: V1Pod[];\n fileName: string;\n downloadTitle: string;\n}> = ({ pods, fileName, downloadTitle, ...props }): React.ReactElement => {\n const classes = useStyles();\n const [downloading, setDownloading] = React.useState<boolean>(false);\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n\n const { clusters, selectedCluster = 0 } =\n React.useContext<TektonResourcesContextData>(TektonResourcesContext);\n const currCluster = clusters.length > 0 ? clusters[selectedCluster] : '';\n\n const getLogs = (podScope: ContainerScope): Promise<{ text: string }> => {\n const { podName, podNamespace, containerName, clusterName } = podScope;\n return kubernetesProxyApi.getPodLogs({\n podName: podName,\n namespace: podNamespace,\n containerName: containerName,\n clusterName: clusterName,\n });\n };\n\n return (\n <Link\n component=\"button\"\n variant=\"body2\"\n underline=\"none\"\n disabled={downloading}\n title={downloading ? 'downloading logs' : downloadTitle}\n onClick={() => {\n setDownloading(true);\n getPodLogs(pods, getLogs, currCluster)\n .then((logs: string) => {\n setDownloading(false);\n downloadLogFile(logs || '', fileName);\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.warn('Download failed', err);\n setDownloading(false);\n });\n }}\n className={classNames(classes.downloadAction, {\n [classes.buttonDisabled]: downloading,\n })}\n {...props}\n >\n <DownloadIcon style={{ verticalAlign: '-0.180em' }} />\n {downloadTitle || 'Download '}\n </Link>\n );\n};\nexport default PodLogsDownloadLink;\n"],"names":["React"],"mappings":";;;;;;;;;;AAkCA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,cAAgB,EAAA;AAAA,MACd,QAAU,EAAA,UAAA;AAAA,MACV,YAAc,EAAA,iCAAA;AAAA,MACd,KAAO,EAAA,iCAAA;AAAA,MACP,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAC7B,MAAQ,EAAA;AAAA;AACV,GACD;AACH,CAAA;AAEM,MAAA,mBAAA,GAID,CAAC,EAAE,IAAA,EAAM,UAAU,aAAe,EAAA,GAAG,OAAgC,KAAA;AACxE,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAA,cAAA,CAAM,SAAkB,KAAK,CAAA;AACnE,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AAEvD,EAAA,MAAM,EAAE,QAAU,EAAA,eAAA,GAAkB,GAClC,GAAAA,cAAA,CAAM,WAAuC,sBAAsB,CAAA;AACrE,EAAA,MAAM,cAAc,QAAS,CAAA,MAAA,GAAS,CAAI,GAAA,QAAA,CAAS,eAAe,CAAI,GAAA,EAAA;AAEtE,EAAM,MAAA,OAAA,GAAU,CAAC,QAAwD,KAAA;AACvE,IAAA,MAAM,EAAE,OAAA,EAAS,YAAc,EAAA,aAAA,EAAe,aAAgB,GAAA,QAAA;AAC9D,IAAA,OAAO,mBAAmB,UAAW,CAAA;AAAA,MACnC,OAAA;AAAA,MACA,SAAW,EAAA,YAAA;AAAA,MACX,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,GACH;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,QAAA;AAAA,MACV,OAAQ,EAAA,OAAA;AAAA,MACR,SAAU,EAAA,MAAA;AAAA,MACV,QAAU,EAAA,WAAA;AAAA,MACV,KAAA,EAAO,cAAc,kBAAqB,GAAA,aAAA;AAAA,MAC1C,SAAS,MAAM;AACb,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAA,UAAA,CAAW,MAAM,OAAS,EAAA,WAAW,CAClC,CAAA,IAAA,CAAK,CAAC,IAAiB,KAAA;AACtB,UAAA,cAAA,CAAe,KAAK,CAAA;AACpB,UAAgB,eAAA,CAAA,IAAA,IAAQ,IAAI,QAAQ,CAAA;AAAA,SACrC,CACA,CAAA,KAAA,CAAM,CAAO,GAAA,KAAA;AAEZ,UAAQ,OAAA,CAAA,IAAA,CAAK,mBAAmB,GAAG,CAAA;AACnC,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,SACrB,CAAA;AAAA,OACL;AAAA,MACA,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,cAAgB,EAAA;AAAA,QAC5C,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B,CAAA;AAAA,MACA,GAAG;AAAA,KAAA;AAAA,iDAEH,YAAa,EAAA,EAAA,KAAA,EAAO,EAAE,aAAA,EAAe,YAAc,EAAA,CAAA;AAAA,IACnD,aAAiB,IAAA;AAAA,GACpB;AAEJ;;;;"}
1
+ {"version":3,"file":"PodLogsDownloadLink.esm.js","sources":["../../../src/components/PipelineRunLogs/PodLogsDownloadLink.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { useApi } from '@backstage/core-plugin-api';\n\nimport { V1Pod } from '@kubernetes/client-node';\nimport { createStyles, Link, makeStyles, Theme } from '@material-ui/core';\nimport DownloadIcon from '@mui/icons-material/FileDownloadOutlined';\nimport classNames from 'classnames';\n\nimport { downloadLogFile } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { ContainerScope } from '../../hooks/usePodLogsOfPipelineRun';\nimport {\n kubernetesProxyApiRef,\n TektonResourcesContextData,\n} from '../../types/types';\nimport { getPodLogs } from '../../utils/log-downloader-utils';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n downloadAction: {\n position: 'relative',\n marginBottom: 'var(--pf-t--global--spacer--sm)',\n color: 'var(--pf-t--global--icon--color--100)',\n cursor: 'pointer',\n },\n buttonDisabled: {\n color: theme.palette.grey[400],\n cursor: 'not-allowed',\n },\n }),\n);\n\nconst PodLogsDownloadLink: React.FC<{\n pods: V1Pod[];\n fileName: string;\n downloadTitle: string;\n}> = ({ pods, fileName, downloadTitle, ...props }): React.ReactElement => {\n const classes = useStyles();\n const [downloading, setDownloading] = React.useState<boolean>(false);\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n\n const { clusters, selectedCluster = 0 } =\n React.useContext<TektonResourcesContextData>(TektonResourcesContext);\n const currCluster = clusters.length > 0 ? clusters[selectedCluster] : '';\n\n const getLogs = (podScope: ContainerScope): Promise<{ text: string }> => {\n const { podName, podNamespace, containerName, clusterName } = podScope;\n return kubernetesProxyApi.getPodLogs({\n podName: podName,\n namespace: podNamespace,\n containerName: containerName,\n clusterName: clusterName,\n });\n };\n\n return (\n <Link\n component=\"button\"\n variant=\"body2\"\n underline=\"none\"\n disabled={downloading}\n title={downloading ? 'downloading logs' : downloadTitle}\n onClick={() => {\n setDownloading(true);\n getPodLogs(pods, getLogs, currCluster)\n .then((logs: string) => {\n setDownloading(false);\n downloadLogFile(logs || '', fileName);\n })\n .catch(err => {\n // eslint-disable-next-line no-console\n console.warn('Download failed', err);\n setDownloading(false);\n });\n }}\n className={classNames(classes.downloadAction, {\n [classes.buttonDisabled]: downloading,\n })}\n {...props}\n >\n <DownloadIcon style={{ verticalAlign: '-0.180em' }} />\n {downloadTitle || 'Download '}\n </Link>\n );\n};\nexport default PodLogsDownloadLink;\n"],"names":["React"],"mappings":";;;;;;;;;;AAkCA,MAAM,SAAY,GAAA,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAa,CAAA;AAAA,IACX,cAAgB,EAAA;AAAA,MACd,QAAU,EAAA,UAAA;AAAA,MACV,YAAc,EAAA,iCAAA;AAAA,MACd,KAAO,EAAA,uCAAA;AAAA,MACP,MAAQ,EAAA;AAAA,KACV;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,MAC7B,MAAQ,EAAA;AAAA;AACV,GACD;AACH,CAAA;AAEM,MAAA,mBAAA,GAID,CAAC,EAAE,IAAA,EAAM,UAAU,aAAe,EAAA,GAAG,OAAgC,KAAA;AACxE,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,CAAC,WAAa,EAAA,cAAc,CAAI,GAAAA,cAAA,CAAM,SAAkB,KAAK,CAAA;AACnE,EAAM,MAAA,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AAEvD,EAAA,MAAM,EAAE,QAAU,EAAA,eAAA,GAAkB,GAClC,GAAAA,cAAA,CAAM,WAAuC,sBAAsB,CAAA;AACrE,EAAA,MAAM,cAAc,QAAS,CAAA,MAAA,GAAS,CAAI,GAAA,QAAA,CAAS,eAAe,CAAI,GAAA,EAAA;AAEtE,EAAM,MAAA,OAAA,GAAU,CAAC,QAAwD,KAAA;AACvE,IAAA,MAAM,EAAE,OAAA,EAAS,YAAc,EAAA,aAAA,EAAe,aAAgB,GAAA,QAAA;AAC9D,IAAA,OAAO,mBAAmB,UAAW,CAAA;AAAA,MACnC,OAAA;AAAA,MACA,SAAW,EAAA,YAAA;AAAA,MACX,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,GACH;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,QAAA;AAAA,MACV,OAAQ,EAAA,OAAA;AAAA,MACR,SAAU,EAAA,MAAA;AAAA,MACV,QAAU,EAAA,WAAA;AAAA,MACV,KAAA,EAAO,cAAc,kBAAqB,GAAA,aAAA;AAAA,MAC1C,SAAS,MAAM;AACb,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAA,UAAA,CAAW,MAAM,OAAS,EAAA,WAAW,CAClC,CAAA,IAAA,CAAK,CAAC,IAAiB,KAAA;AACtB,UAAA,cAAA,CAAe,KAAK,CAAA;AACpB,UAAgB,eAAA,CAAA,IAAA,IAAQ,IAAI,QAAQ,CAAA;AAAA,SACrC,CACA,CAAA,KAAA,CAAM,CAAO,GAAA,KAAA;AAEZ,UAAQ,OAAA,CAAA,IAAA,CAAK,mBAAmB,GAAG,CAAA;AACnC,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA,SACrB,CAAA;AAAA,OACL;AAAA,MACA,SAAA,EAAW,UAAW,CAAA,OAAA,CAAQ,cAAgB,EAAA;AAAA,QAC5C,CAAC,OAAQ,CAAA,cAAc,GAAG;AAAA,OAC3B,CAAA;AAAA,MACA,GAAG;AAAA,KAAA;AAAA,iDAEH,YAAa,EAAA,EAAA,KAAA,EAAO,EAAE,aAAA,EAAe,YAAc,EAAA,CAAA;AAAA,IACnD,aAAiB,IAAA;AAAA,GACpB;AAEJ;;;;"}
@@ -7,8 +7,6 @@ import { ModelsPlural } from '../../models.esm.js';
7
7
  import PermissionAlert from '../common/PermissionAlert.esm.js';
8
8
  import PipelineRunList from '../PipelineRunList/PipelineRunList.esm.js';
9
9
  import '@patternfly/react-core/dist/styles/base.css';
10
- import '@patternfly/patternfly/patternfly-theme-dark.css';
11
- import '@patternfly/patternfly/patternfly-charts-theme-dark.css';
12
10
  import '@patternfly/patternfly/utilities/Accessibility/accessibility.css';
13
11
 
14
12
  const savedStylesheets = /* @__PURE__ */ new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"TektonCIComponent.esm.js","sources":["../../../src/components/Tekton/TektonCIComponent.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { useDarkTheme } from '../../hooks/useDarkTheme';\nimport { useTektonObjectsResponse } from '../../hooks/useTektonObjectsResponse';\nimport { useTektonViewPermission } from '../../hooks/useTektonViewPermission';\nimport { ModelsPlural } from '../../models';\nimport PermissionAlert from '../common/PermissionAlert';\nimport PipelineRunList from '../PipelineRunList/PipelineRunList';\n\nimport '@patternfly/react-core/dist/styles/base.css';\nimport '@patternfly/patternfly/patternfly-theme-dark.css';\nimport '@patternfly/patternfly/patternfly-charts-theme-dark.css';\nimport '@patternfly/patternfly/utilities/Accessibility/accessibility.css';\n\nconst savedStylesheets = new Set<HTMLLinkElement>();\n\nexport const TektonCIComponent = () => {\n useDarkTheme();\n\n React.useLayoutEffect(() => {\n const scalprumStyles = Array.from(\n document.querySelectorAll('link[rel=\"stylesheet\"]'),\n ).filter(link =>\n link.attributes\n .getNamedItem('href')\n ?.value?.includes('backstage-plugin-tekton'),\n );\n\n scalprumStyles.forEach(link =>\n savedStylesheets.add(link as HTMLLinkElement),\n );\n\n savedStylesheets.forEach(link => {\n if (!document.head.contains(link)) {\n document.head.appendChild(link);\n }\n });\n return () => {\n savedStylesheets.forEach(link => {\n if (document.head.contains(link)) {\n document.head.removeChild(link);\n }\n });\n };\n }, []);\n\n const watchedResources = [\n ModelsPlural.pipelineruns,\n ModelsPlural.taskruns,\n ModelsPlural.pods,\n ];\n const tektonResourcesContextData = useTektonObjectsResponse(watchedResources);\n const hasViewPermission = useTektonViewPermission();\n\n if (!hasViewPermission) {\n return <PermissionAlert />;\n }\n return (\n <TektonResourcesContext.Provider value={tektonResourcesContextData}>\n <PipelineRunList />\n </TektonResourcesContext.Provider>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;AA8BA,MAAM,gBAAA,uBAAuB,GAAqB,EAAA;AAE3C,MAAM,oBAAoB,MAAM;AACrC,EAAa,YAAA,EAAA;AAEb,EAAAA,cAAA,CAAM,gBAAgB,MAAM;AAC1B,IAAA,MAAM,iBAAiB,KAAM,CAAA,IAAA;AAAA,MAC3B,QAAA,CAAS,iBAAiB,wBAAwB;AAAA,KAClD,CAAA,MAAA;AAAA,MAAO,CAAA,IAAA,KACP,KAAK,UACF,CAAA,YAAA,CAAa,MAAM,CAClB,EAAA,KAAA,EAAO,SAAS,yBAAyB;AAAA,KAC/C;AAEA,IAAe,cAAA,CAAA,OAAA;AAAA,MAAQ,CAAA,IAAA,KACrB,gBAAiB,CAAA,GAAA,CAAI,IAAuB;AAAA,KAC9C;AAEA,IAAA,gBAAA,CAAiB,QAAQ,CAAQ,IAAA,KAAA;AAC/B,MAAA,IAAI,CAAC,QAAA,CAAS,IAAK,CAAA,QAAA,CAAS,IAAI,CAAG,EAAA;AACjC,QAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA;AAChC,KACD,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,gBAAA,CAAiB,QAAQ,CAAQ,IAAA,KAAA;AAC/B,QAAA,IAAI,QAAS,CAAA,IAAA,CAAK,QAAS,CAAA,IAAI,CAAG,EAAA;AAChC,UAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA;AAChC,OACD,CAAA;AAAA,KACH;AAAA,GACF,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAmB,GAAA;AAAA,IACvB,YAAa,CAAA,YAAA;AAAA,IACb,YAAa,CAAA,QAAA;AAAA,IACb,YAAa,CAAA;AAAA,GACf;AACA,EAAM,MAAA,0BAAA,GAA6B,yBAAyB,gBAAgB,CAAA;AAC5E,EAAA,MAAM,oBAAoB,uBAAwB,EAAA;AAElD,EAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,IAAA,oDAAQ,eAAgB,EAAA,IAAA,CAAA;AAAA;AAE1B,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,uBAAuB,QAAvB,EAAA,EAAgC,OAAO,0BACtC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,qBAAgB,CACnB,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TektonCIComponent.esm.js","sources":["../../../src/components/Tekton/TektonCIComponent.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { useDarkTheme } from '../../hooks/useDarkTheme';\nimport { useTektonObjectsResponse } from '../../hooks/useTektonObjectsResponse';\nimport { useTektonViewPermission } from '../../hooks/useTektonViewPermission';\nimport { ModelsPlural } from '../../models';\nimport PermissionAlert from '../common/PermissionAlert';\nimport PipelineRunList from '../PipelineRunList/PipelineRunList';\n\nimport '@patternfly/react-core/dist/styles/base.css';\nimport '@patternfly/patternfly/utilities/Accessibility/accessibility.css';\n\nconst savedStylesheets = new Set<HTMLLinkElement>();\n\nexport const TektonCIComponent = () => {\n useDarkTheme();\n\n React.useLayoutEffect(() => {\n const scalprumStyles = Array.from(\n document.querySelectorAll('link[rel=\"stylesheet\"]'),\n ).filter(link =>\n link.attributes\n .getNamedItem('href')\n ?.value?.includes('backstage-plugin-tekton'),\n );\n\n scalprumStyles.forEach(link =>\n savedStylesheets.add(link as HTMLLinkElement),\n );\n\n savedStylesheets.forEach(link => {\n if (!document.head.contains(link)) {\n document.head.appendChild(link);\n }\n });\n return () => {\n savedStylesheets.forEach(link => {\n if (document.head.contains(link)) {\n document.head.removeChild(link);\n }\n });\n };\n }, []);\n\n const watchedResources = [\n ModelsPlural.pipelineruns,\n ModelsPlural.taskruns,\n ModelsPlural.pods,\n ];\n const tektonResourcesContextData = useTektonObjectsResponse(watchedResources);\n const hasViewPermission = useTektonViewPermission();\n\n if (!hasViewPermission) {\n return <PermissionAlert />;\n }\n return (\n <TektonResourcesContext.Provider value={tektonResourcesContextData}>\n <PipelineRunList />\n </TektonResourcesContext.Provider>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;AA4BA,MAAM,gBAAA,uBAAuB,GAAqB,EAAA;AAE3C,MAAM,oBAAoB,MAAM;AACrC,EAAa,YAAA,EAAA;AAEb,EAAAA,cAAA,CAAM,gBAAgB,MAAM;AAC1B,IAAA,MAAM,iBAAiB,KAAM,CAAA,IAAA;AAAA,MAC3B,QAAA,CAAS,iBAAiB,wBAAwB;AAAA,KAClD,CAAA,MAAA;AAAA,MAAO,CAAA,IAAA,KACP,KAAK,UACF,CAAA,YAAA,CAAa,MAAM,CAClB,EAAA,KAAA,EAAO,SAAS,yBAAyB;AAAA,KAC/C;AAEA,IAAe,cAAA,CAAA,OAAA;AAAA,MAAQ,CAAA,IAAA,KACrB,gBAAiB,CAAA,GAAA,CAAI,IAAuB;AAAA,KAC9C;AAEA,IAAA,gBAAA,CAAiB,QAAQ,CAAQ,IAAA,KAAA;AAC/B,MAAA,IAAI,CAAC,QAAA,CAAS,IAAK,CAAA,QAAA,CAAS,IAAI,CAAG,EAAA;AACjC,QAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA;AAChC,KACD,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,gBAAA,CAAiB,QAAQ,CAAQ,IAAA,KAAA;AAC/B,QAAA,IAAI,QAAS,CAAA,IAAA,CAAK,QAAS,CAAA,IAAI,CAAG,EAAA;AAChC,UAAS,QAAA,CAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA;AAChC,OACD,CAAA;AAAA,KACH;AAAA,GACF,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAmB,GAAA;AAAA,IACvB,YAAa,CAAA,YAAA;AAAA,IACb,YAAa,CAAA,QAAA;AAAA,IACb,YAAa,CAAA;AAAA,GACf;AACA,EAAM,MAAA,0BAAA,GAA6B,yBAAyB,gBAAgB,CAAA;AAC5E,EAAA,MAAM,oBAAoB,uBAAwB,EAAA;AAElD,EAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,IAAA,oDAAQ,eAAgB,EAAA,IAAA,CAAA;AAAA;AAE1B,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,uBAAuB,QAAvB,EAAA,EAAgC,OAAO,0BACtC,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,qBAAgB,CACnB,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-cluster-selector {\n display: flex;\n align-items: center;\n}\n\n.bs-tkn-cluster-selector > div > div > div {\n margin-top: 0;\n}\n";
4
4
  styleInject(css_248z);
@@ -1,6 +1,6 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
- var css_248z = ".bs-tkn-resource-status {\n padding-left: var(--pf-v5-global--spacer--sm);\n white-space: nowrap;\n}\n\n.bs-tkn-resource-status__badge {\n vertical-align: middle;\n}\n\n.bs-tkn-resource-status__badge--alt {\n vertical-align: baseline;\n}\n";
3
+ var css_248z = ".bs-tkn-resource-status {\n padding-left: var(--pf-t--global--spacer--sm);\n white-space: nowrap;\n}\n\n.bs-tkn-resource-status__badge {\n vertical-align: middle;\n}\n\n.bs-tkn-resource-status__badge--alt {\n vertical-align: baseline;\n}\n";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-status-selector {\n display: flex;\n align-items: center;\n}\n\n.bs-tkn-status-selector > div > div > div {\n margin-top: 0;\n}\n";
4
4
  styleInject(css_248z);
@@ -1 +1 @@
1
- {"version":3,"file":"StatusSelector.esm.js","sources":["../../../src/components/common/StatusSelector.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Select, SelectedItems } from '@backstage/core-components';\n\nimport { makeStyles, Theme, Typography } from '@material-ui/core';\n\nimport './StatusSelector.css';\n\nimport { ComputedStatus } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\n\nconst useStyles = makeStyles<Theme>(theme => ({\n label: {\n color: theme.palette.text.primary,\n fontSize: '1rem',\n paddingRight: '10px',\n fontWeight: 'bold',\n },\n}));\n\nexport const statusOptions = Object.entries(ComputedStatus)\n .sort(([keyA], [keyB]) => {\n if (keyA === keyB) {\n return 0;\n } else if (keyA < keyB) {\n return -1;\n }\n return 1;\n })\n .map(([key, value]) => ({\n value: key,\n label: value,\n }));\n\nexport const StatusSelector = () => {\n const classes = useStyles();\n const { selectedStatus, setSelectedStatus } = React.useContext(\n TektonResourcesContext,\n );\n\n const onStatusChange = (status: SelectedItems) => {\n setSelectedStatus(status as ComputedStatus);\n };\n\n return (\n <div className=\"bs-tkn-status-selector\">\n <Typography className={classes.label}>Status</Typography>\n <Select\n onChange={onStatusChange}\n label=\"\"\n items={statusOptions}\n selected={selectedStatus}\n margin=\"dense\"\n />\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;AA2BA,MAAM,SAAA,GAAY,WAAkB,CAAU,KAAA,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,IAC1B,QAAU,EAAA,MAAA;AAAA,IACV,YAAc,EAAA,MAAA;AAAA,IACd,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAEK,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,cAAc,CACvD,CAAA,IAAA,CAAK,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,IAAI,CAAM,KAAA;AACxB,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,CAAA;AAAA,GACT,MAAA,IAAW,OAAO,IAAM,EAAA;AACtB,IAAO,OAAA,CAAA,CAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT,CAAC,EACA,GAAI,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAO,MAAA;AAAA,EACtB,KAAO,EAAA,GAAA;AAAA,EACP,KAAO,EAAA;AACT,CAAE,CAAA;AAEG,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,cAAA,EAAgB,iBAAkB,EAAA,GAAIA,cAAM,CAAA,UAAA;AAAA,IAClD;AAAA,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA0B,KAAA;AAChD,IAAA,iBAAA,CAAkB,MAAwB,CAAA;AAAA,GAC5C;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,wBACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,OAAA,CAAQ,KAAO,EAAA,EAAA,QAAM,CAC5C,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,cAAA;AAAA,MACV,KAAM,EAAA,EAAA;AAAA,MACN,KAAO,EAAA,aAAA;AAAA,MACP,QAAU,EAAA,cAAA;AAAA,MACV,MAAO,EAAA;AAAA;AAAA,GAEX,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"StatusSelector.esm.js","sources":["../../../src/components/common/StatusSelector.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Select, SelectedItems } from '@backstage/core-components';\n\nimport { makeStyles, Theme, Typography } from '@material-ui/core';\n\nimport './StatusSelector.css';\n\nimport { ComputedStatus } from '@janus-idp/shared-react';\n\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\n\nconst useStyles = makeStyles<Theme>(theme => ({\n label: {\n color: theme.palette.text.primary,\n fontSize: '1rem',\n paddingRight: '10px',\n fontWeight: 'bold',\n },\n}));\n\nexport const statusOptions = Object.entries(ComputedStatus)\n .sort(([keyA], [keyB]) => {\n if (keyA === keyB) {\n return 0;\n } else if (keyA < keyB) {\n return -1;\n }\n return 1;\n })\n .map(([key, value]) => ({\n value: key,\n label: value,\n }));\n\nexport const StatusSelector = () => {\n const classes = useStyles();\n const { selectedStatus, setSelectedStatus } = React.useContext(\n TektonResourcesContext,\n );\n\n const onStatusChange = (status: SelectedItems) => {\n setSelectedStatus(status as ComputedStatus);\n };\n\n return (\n <div className=\"bs-tkn-status-selector\">\n <Typography className={classes.label}>Status</Typography>\n <Select\n onChange={onStatusChange}\n label=\"\"\n items={statusOptions}\n selected={selectedStatus}\n margin=\"dense\"\n />\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;AA2BA,MAAM,SAAA,GAAY,WAAkB,CAAU,KAAA,MAAA;AAAA,EAC5C,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,IAC1B,QAAU,EAAA,MAAA;AAAA,IACV,YAAc,EAAA,MAAA;AAAA,IACd,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAEK,MAAM,aAAgB,GAAA,MAAA,CAAO,OAAQ,CAAA,cAAc,CACvD,CAAA,IAAA,CAAK,CAAC,CAAC,IAAI,CAAA,EAAG,CAAC,IAAI,CAAM,KAAA;AACxB,EAAA,IAAI,SAAS,IAAM,EAAA;AACjB,IAAO,OAAA,CAAA;AAAA,GACT,MAAA,IAAW,OAAO,IAAM,EAAA;AACtB,IAAO,OAAA,EAAA;AAAA;AAET,EAAO,OAAA,CAAA;AACT,CAAC,EACA,GAAI,CAAA,CAAC,CAAC,GAAA,EAAK,KAAK,CAAO,MAAA;AAAA,EACtB,KAAO,EAAA,GAAA;AAAA,EACP,KAAO,EAAA;AACT,CAAE,CAAA;AAEG,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,EAAE,cAAA,EAAgB,iBAAkB,EAAA,GAAIA,cAAM,CAAA,UAAA;AAAA,IAClD;AAAA,GACF;AAEA,EAAM,MAAA,cAAA,GAAiB,CAAC,MAA0B,KAAA;AAChD,IAAA,iBAAA,CAAkB,MAAwB,CAAA;AAAA,GAC5C;AAEA,EACE,uBAAAA,cAAA,CAAA,aAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,wBACb,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,OAAA,CAAQ,KAAO,EAAA,EAAA,QAAM,CAC5C,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,cAAA;AAAA,MACV,KAAM,EAAA,EAAA;AAAA,MACN,KAAO,EAAA,aAAA;AAAA,MACP,QAAU,EAAA,cAAA;AAAA,MACV,MAAO,EAAA;AAAA;AAAA,GAEX,CAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
3
  var css_248z = ".bs-tkn-pipeline-task-node:focus {\n outline: -webkit-focus-ring-color auto 5px;\n}\n";
4
4
  styleInject(css_248z);
@@ -48,7 +48,7 @@ const PipelineTaskNode = ({
48
48
  const passedData = React__default.useMemo(() => {
49
49
  const newData = { ...data };
50
50
  Object.keys(newData).forEach((key) => {
51
- if (newData[key] === void 0) {
51
+ if (newData[key] === undefined) {
52
52
  delete newData[key];
53
53
  }
54
54
  });
@@ -81,7 +81,7 @@ const PipelineTaskNode = ({
81
81
  {
82
82
  className: "bs-tkn-pipeline-task-node",
83
83
  element,
84
- onContextMenu: data.showContextMenu ? onContextMenu : void 0,
84
+ onContextMenu: data.showContextMenu ? onContextMenu : undefined,
85
85
  contextMenuOpen,
86
86
  scaleNode: (hover || contextMenuOpen) && detailsLevel !== ScaleDetailsLevel.high,
87
87
  hideDetailsAtMedium: true,
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineTaskNode.esm.js","sources":["../../../src/components/pipeline-topology/PipelineTaskNode.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Tooltip } from '@patternfly/react-core';\nimport {\n DEFAULT_LAYER,\n DEFAULT_WHEN_OFFSET,\n GraphElement,\n Layer,\n Node,\n RunStatus,\n ScaleDetailsLevel,\n TaskNode,\n TOP_LAYER,\n useDetailsLevel,\n useHover,\n WhenDecorator,\n WithContextMenuProps,\n WithSelectionProps,\n} from '@patternfly/react-topology';\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport { observer } from 'mobx-react';\n\nimport { PipelineTaskWithStatus, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { NodeType } from '../../consts/pipeline-topology-const';\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../../consts/tekton-const';\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { StepStatus } from '../../types/taskRun';\nimport { TektonResourcesContextData } from '../../types/types';\nimport { createStepStatus } from '../../utils/pipeline-step-utils';\nimport { getTaskStatus } from '../../utils/pipelineRun-utils';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport { PipelineVisualizationStepList } from './PipelineVisualizationStepList';\n\nimport './PipelineTaskNode.css';\n\ntype PipelineTaskNodeProps = {\n element: Node;\n} & WithContextMenuProps &\n WithSelectionProps &\n GraphElement;\n\nconst PipelineTaskNode = ({\n element,\n onContextMenu,\n contextMenuOpen,\n ...rest\n}: PipelineTaskNodeProps) => {\n const [open, setOpen] = React.useState<boolean>(false);\n const { watchResourcesData } = React.useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const data = element.getData();\n const triggerRef = React.useRef<SVGGElement | null>(null);\n\n const pipelineRun = data.pipelineRun;\n const [hover, hoverRef] = useHover();\n const detailsLevel = useDetailsLevel();\n const isFinallyTask = element.getType() === NodeType.FINALLY_NODE;\n\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const computedTask: PipelineTaskWithStatus = data.task;\n const stepList =\n computedTask?.status?.steps || computedTask?.taskSpec?.steps || [];\n\n const taskStatus = getTaskStatus(data.pipelineRun, data.task);\n\n const stepStatusList: StepStatus[] = stepList.map((step: { name: string }) =>\n createStepStatus(step, taskStatus),\n );\n const succeededStepsCount = stepStatusList.filter(\n ({ status }) => status === RunStatus.Succeeded,\n ).length;\n\n const badge =\n stepStatusList.length > 0 && data.status\n ? `${succeededStepsCount}/${stepStatusList.length}`\n : null;\n\n const passedData = React.useMemo(() => {\n const newData = { ...data };\n Object.keys(newData).forEach(key => {\n if (newData[key] === undefined) {\n delete newData[key];\n }\n });\n return newData;\n }, [data]);\n\n const hasTaskIcon = !!(data.taskIconClass || data.taskIcon);\n const whenDecorator = data.whenStatus ? (\n <WhenDecorator\n element={element}\n status={data.whenStatus}\n leftOffset={\n hasTaskIcon\n ? DEFAULT_WHEN_OFFSET + (element.getBounds().height - 4) * 0.75\n : DEFAULT_WHEN_OFFSET\n }\n />\n ) : null;\n const activeTaskId = taskRuns.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] ===\n pipelineRun?.metadata?.name &&\n tr?.metadata?.labels?.[TEKTON_PIPELINE_TASK] === data.task?.name,\n )?.metadata?.name;\n\n const taskNode = (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={activeTaskId}\n />\n <TaskNode\n className=\"bs-tkn-pipeline-task-node\"\n element={element}\n onContextMenu={data.showContextMenu ? onContextMenu : undefined}\n contextMenuOpen={contextMenuOpen}\n scaleNode={\n (hover || contextMenuOpen) && detailsLevel !== ScaleDetailsLevel.high\n }\n hideDetailsAtMedium\n {...passedData}\n {...rest}\n badge={badge}\n truncateLength={element.getData()?.label?.length}\n onSelect={activeTaskId && openDialog}\n >\n {whenDecorator}\n </TaskNode>\n </>\n );\n\n return (\n <Layer\n id={\n detailsLevel !== ScaleDetailsLevel.high && (hover || contextMenuOpen)\n ? TOP_LAYER\n : DEFAULT_LAYER\n }\n >\n <g\n data-test={`task ${element.getLabel()}`}\n className=\"bs-tkn-pipeline-task-node\"\n ref={hoverRef as React.LegacyRef<SVGGElement>}\n >\n <Tooltip\n position=\"bottom\"\n enableFlip={false}\n content={\n <PipelineVisualizationStepList\n isSpecOverview={!data.status}\n taskName={element.getLabel()}\n steps={stepStatusList}\n isFinallyTask={isFinallyTask}\n />\n }\n triggerRef={triggerRef}\n >\n <g ref={triggerRef}>{taskNode}</g>\n </Tooltip>\n </g>\n </Layer>\n );\n};\n\nexport default React.memo(observer(PipelineTaskNode));\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"PipelineTaskNode.esm.js","sources":["../../../src/components/pipeline-topology/PipelineTaskNode.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { Tooltip } from '@patternfly/react-core';\nimport {\n DEFAULT_LAYER,\n DEFAULT_WHEN_OFFSET,\n GraphElement,\n Layer,\n Node,\n RunStatus,\n ScaleDetailsLevel,\n TaskNode,\n TOP_LAYER,\n useDetailsLevel,\n useHover,\n WhenDecorator,\n WithContextMenuProps,\n WithSelectionProps,\n} from '@patternfly/react-topology';\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport { observer } from 'mobx-react';\n\nimport { PipelineTaskWithStatus, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { NodeType } from '../../consts/pipeline-topology-const';\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../../consts/tekton-const';\nimport { TektonResourcesContext } from '../../hooks/TektonResourcesContext';\nimport { StepStatus } from '../../types/taskRun';\nimport { TektonResourcesContextData } from '../../types/types';\nimport { createStepStatus } from '../../utils/pipeline-step-utils';\nimport { getTaskStatus } from '../../utils/pipelineRun-utils';\nimport PipelineRunLogDialog from '../PipelineRunLogs/PipelineRunLogDialog';\nimport { PipelineVisualizationStepList } from './PipelineVisualizationStepList';\n\nimport './PipelineTaskNode.css';\n\ntype PipelineTaskNodeProps = {\n element: Node;\n} & WithContextMenuProps &\n WithSelectionProps &\n GraphElement;\n\nconst PipelineTaskNode = ({\n element,\n onContextMenu,\n contextMenuOpen,\n ...rest\n}: PipelineTaskNodeProps) => {\n const [open, setOpen] = React.useState<boolean>(false);\n const { watchResourcesData } = React.useContext<TektonResourcesContextData>(\n TektonResourcesContext,\n );\n const data = element.getData();\n const triggerRef = React.useRef<SVGGElement | null>(null);\n\n const pipelineRun = data.pipelineRun;\n const [hover, hoverRef] = useHover();\n const detailsLevel = useDetailsLevel();\n const isFinallyTask = element.getType() === NodeType.FINALLY_NODE;\n\n const pods = watchResourcesData?.pods?.data || [];\n const taskRuns = watchResourcesData?.taskruns?.data || [];\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const computedTask: PipelineTaskWithStatus = data.task;\n const stepList =\n computedTask?.status?.steps || computedTask?.taskSpec?.steps || [];\n\n const taskStatus = getTaskStatus(data.pipelineRun, data.task);\n\n const stepStatusList: StepStatus[] = stepList.map((step: { name: string }) =>\n createStepStatus(step, taskStatus),\n );\n const succeededStepsCount = stepStatusList.filter(\n ({ status }) => status === RunStatus.Succeeded,\n ).length;\n\n const badge =\n stepStatusList.length > 0 && data.status\n ? `${succeededStepsCount}/${stepStatusList.length}`\n : null;\n\n const passedData = React.useMemo(() => {\n const newData = { ...data };\n Object.keys(newData).forEach(key => {\n if (newData[key] === undefined) {\n delete newData[key];\n }\n });\n return newData;\n }, [data]);\n\n const hasTaskIcon = !!(data.taskIconClass || data.taskIcon);\n const whenDecorator = data.whenStatus ? (\n <WhenDecorator\n element={element}\n status={data.whenStatus}\n leftOffset={\n hasTaskIcon\n ? DEFAULT_WHEN_OFFSET + (element.getBounds().height - 4) * 0.75\n : DEFAULT_WHEN_OFFSET\n }\n />\n ) : null;\n const activeTaskId = taskRuns.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] ===\n pipelineRun?.metadata?.name &&\n tr?.metadata?.labels?.[TEKTON_PIPELINE_TASK] === data.task?.name,\n )?.metadata?.name;\n\n const taskNode = (\n <>\n <PipelineRunLogDialog\n pipelineRun={pipelineRun}\n open={open}\n closeDialog={closeDialog}\n pods={pods}\n taskRuns={taskRuns}\n activeTask={activeTaskId}\n />\n <TaskNode\n className=\"bs-tkn-pipeline-task-node\"\n element={element}\n onContextMenu={data.showContextMenu ? onContextMenu : undefined}\n contextMenuOpen={contextMenuOpen}\n scaleNode={\n (hover || contextMenuOpen) && detailsLevel !== ScaleDetailsLevel.high\n }\n hideDetailsAtMedium\n {...passedData}\n {...rest}\n badge={badge}\n truncateLength={element.getData()?.label?.length}\n onSelect={activeTaskId && openDialog}\n >\n {whenDecorator}\n </TaskNode>\n </>\n );\n\n return (\n <Layer\n id={\n detailsLevel !== ScaleDetailsLevel.high && (hover || contextMenuOpen)\n ? TOP_LAYER\n : DEFAULT_LAYER\n }\n >\n <g\n data-test={`task ${element.getLabel()}`}\n className=\"bs-tkn-pipeline-task-node\"\n ref={hoverRef as React.LegacyRef<SVGGElement>}\n >\n <Tooltip\n position=\"bottom\"\n enableFlip={false}\n content={\n <PipelineVisualizationStepList\n isSpecOverview={!data.status}\n taskName={element.getLabel()}\n steps={stepStatusList}\n isFinallyTask={isFinallyTask}\n />\n }\n triggerRef={triggerRef}\n >\n <g ref={triggerRef}>{taskNode}</g>\n </Tooltip>\n </g>\n </Layer>\n );\n};\n\nexport default React.memo(observer(PipelineTaskNode));\n"],"names":["React"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
- var css_248z = ".bs-tkn-pipeline-visualization__label {\n align-items: baseline;\n padding-bottom: var(--pf-v5-global--spacer--xs);\n}\n\n.bs-tkn-pipeline-visualization__label .badge {\n font-size: 17px;\n line-height: 20px;\n margin-right: 4px;\n min-width: 24px;\n padding: 0 7px;\n border-radius: 20px;\n color: var(--pf-v5-global--palette--white);\n display: inline-block;\n text-align: center;\n white-space: nowrap;\n width: 100%;\n}\n\n.bs-tkn-pipeline-visualization__layout .pf-topology-content {\n border-radius: 20px;\n}\n\n.bs-tkn-pipeline-visualization__layout .pf-topology-visualization-surface {\n font-size: 1rem;\n border-radius: 1rem;\n}\n";
3
+ var css_248z = ".bs-tkn-pipeline-visualization__label {\n align-items: baseline;\n padding-bottom: var(--pf-t--global--spacer--xs);\n}\n\n.bs-tkn-pipeline-visualization__label .badge {\n font-size: 17px;\n line-height: 20px;\n margin-right: 4px;\n min-width: 24px;\n padding: 0 7px;\n border-radius: 20px;\n color: var(--pf-t--color--white);\n display: inline-block;\n text-align: center;\n white-space: nowrap;\n width: 100%;\n}\n\n.bs-tkn-pipeline-visualization__layout .pf-topology-content {\n border-radius: 20px;\n}\n\n.bs-tkn-pipeline-visualization__layout .pf-topology-visualization-surface {\n font-size: 1rem;\n border-radius: 1rem;\n}\n";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
@@ -9,7 +9,7 @@ const PipelineVisualization = ({
9
9
  taskRuns
10
10
  }) => {
11
11
  useDarkTheme();
12
- const model = getGraphDataModel(pipelineRun ?? void 0, taskRuns ?? []);
12
+ const model = getGraphDataModel(pipelineRun ?? undefined, taskRuns ?? []);
13
13
  return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, !model || model.nodes.length === 0 && model.edges.length === 0 ? /* @__PURE__ */ React__default.createElement("div", { "data-testid": "pipeline-no-tasks" }, "This Pipeline Run has no tasks to visualize") : /* @__PURE__ */ React__default.createElement(
14
14
  "div",
15
15
  {
@@ -1 +1 @@
1
- {"version":3,"file":"PipelineVisualization.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualization.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PipelineRunKind, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { useDarkTheme } from '../../hooks/useDarkTheme';\nimport { getGraphDataModel } from '../../utils/pipeline-topology-utils';\nimport { PipelineLayout } from './PipelineLayout';\n\nimport './PipelineVisualization.css';\n\ntype PipelineVisualizationProps = {\n pipelineRun: PipelineRunKind | null;\n taskRuns: TaskRunKind[];\n};\n\nexport const PipelineVisualization = ({\n pipelineRun,\n taskRuns,\n}: PipelineVisualizationProps) => {\n useDarkTheme();\n\n const model = getGraphDataModel(pipelineRun ?? undefined, taskRuns ?? []);\n\n return (\n <>\n {!model || (model.nodes.length === 0 && model.edges.length === 0) ? (\n <div data-testid=\"pipeline-no-tasks\">\n This Pipeline Run has no tasks to visualize\n </div>\n ) : (\n <div\n data-testid=\"pipelineRun-visualization\"\n className=\"bs-tkn-pipeline-visualization__layout\"\n >\n <PipelineLayout model={model} />\n </div>\n )}\n </>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AA8BO,MAAM,wBAAwB,CAAC;AAAA,EACpC,WAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAa,YAAA,EAAA;AAEb,EAAA,MAAM,QAAQ,iBAAkB,CAAA,WAAA,IAAe,KAAW,CAAA,EAAA,QAAA,IAAY,EAAE,CAAA;AAExE,EAAA,mFAEK,CAAC,KAAA,IAAU,KAAM,CAAA,KAAA,CAAM,WAAW,CAAK,IAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,oBAC5DA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,aAAY,EAAA,mBAAA,EAAA,EAAoB,6CAErC,CAEA,mBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,2BAAA;AAAA,MACZ,SAAU,EAAA;AAAA,KAAA;AAAA,oBAEVA,cAAA,CAAA,aAAA,CAAC,kBAAe,KAAc,EAAA;AAAA,GAGpC,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PipelineVisualization.esm.js","sources":["../../../src/components/pipeline-topology/PipelineVisualization.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { PipelineRunKind, TaskRunKind } from '@janus-idp/shared-react';\n\nimport { useDarkTheme } from '../../hooks/useDarkTheme';\nimport { getGraphDataModel } from '../../utils/pipeline-topology-utils';\nimport { PipelineLayout } from './PipelineLayout';\n\nimport './PipelineVisualization.css';\n\ntype PipelineVisualizationProps = {\n pipelineRun: PipelineRunKind | null;\n taskRuns: TaskRunKind[];\n};\n\nexport const PipelineVisualization = ({\n pipelineRun,\n taskRuns,\n}: PipelineVisualizationProps) => {\n useDarkTheme();\n\n const model = getGraphDataModel(pipelineRun ?? undefined, taskRuns ?? []);\n\n return (\n <>\n {!model || (model.nodes.length === 0 && model.edges.length === 0) ? (\n <div data-testid=\"pipeline-no-tasks\">\n This Pipeline Run has no tasks to visualize\n </div>\n ) : (\n <div\n data-testid=\"pipelineRun-visualization\"\n className=\"bs-tkn-pipeline-visualization__layout\"\n >\n <PipelineLayout model={model} />\n </div>\n )}\n </>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AA8BO,MAAM,wBAAwB,CAAC;AAAA,EACpC,WAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAa,YAAA,EAAA;AAEb,EAAA,MAAM,QAAQ,iBAAkB,CAAA,WAAA,IAAe,SAAW,EAAA,QAAA,IAAY,EAAE,CAAA;AAExE,EAAA,mFAEK,CAAC,KAAA,IAAU,KAAM,CAAA,KAAA,CAAM,WAAW,CAAK,IAAA,KAAA,CAAM,KAAM,CAAA,MAAA,KAAW,oBAC5DA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,aAAY,EAAA,mBAAA,EAAA,EAAoB,6CAErC,CAEA,mBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,2BAAA;AAAA,MACZ,SAAU,EAAA;AAAA,KAAA;AAAA,oBAEVA,cAAA,CAAA,aAAA,CAAC,kBAAe,KAAc,EAAA;AAAA,GAGpC,CAAA;AAEJ;;;;"}
@@ -1,6 +1,6 @@
1
- import styleInject from 'style-inject';
1
+ import styleInject from '../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
2
 
3
- var css_248z = ".bs-tkn-pipeline-visualization-step-list {\n min-width: 10em;\n}\n\n.bs-tkn-pipeline-visualization-step-list__task-name {\n font-weight: var(--pf-v5-global--FontWeight--bold);\n line-height: var(--pf-v5-global--spacer--lg);\n max-height: var(--pf-v5-global--spacer--2xl);\n max-width: 15em;\n margin: 0 auto 10px auto;\n\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n}\n\n.bs-tkn-pipeline-visualization-step-list__task-type {\n line-height: var(--pf-v5-global--spacer--xs);\n max-height: var(--pf-v5-global--spacer--2xl);\n margin: 0 auto 10px auto;\n}\n\n.bs-tkn-pipeline-visualization-step-list__step {\n display: flex;\n margin-bottom: var(--pf-v5-global--spacer--xs);\n}\n\n.bs-tkn-pipeline-visualization-step-list__step--task-run {\n margin-bottom: var(--pf-v5-global--spacer--sm);\n}\n\n.bs-tkn-pipeline-visualization-step-list__step:last-child {\n margin-bottom: 0;\n}\n\n.bs-tkn-pipeline-visualization-step-list__bullet {\n font-size: 1rem;\n}\n\n.bs-tkn-pipeline-visualization-step-list__icon {\n flex: 0 0 18px;\n}\n\n.bs-tkn-pipeline-visualization-step-list__icon-backdrop {\n fill: var(--pf-v5-global--Color--light-100);\n}\n\n.bs-tkn-pipeline-visualization-step-list__name {\n flex: 1 1 auto;\n overflow: hidden;\n padding-left: var(--pf-v5-global--spacer--sm);\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.bs-tkn-pipeline-visualization-step-list__name.is-main-focus {\n padding: 0 var(--pf-v5-global--spacer--sm);\n text-align: center;\n}\n\n.bs-tkn-pipeline-visualization-step-list__duration {\n flex: 0 0 auto;\n padding-left: var(--pf-v5-global--spacer--sm);\n text-align: right;\n}\n";
3
+ var css_248z = ".bs-tkn-pipeline-visualization-step-list {\n min-width: 10em;\n}\n\n.bs-tkn-pipeline-visualization-step-list__task-name {\n font-weight: var(--pf-t--global--font--weight--heading);\n line-height: var(--pf-t--global--spacer--lg);\n max-height: var(--pf-t--global--spacer--2xl);\n max-width: 15em;\n margin: 0 auto 10px auto;\n\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n}\n\n.bs-tkn-pipeline-visualization-step-list__task-type {\n line-height: var(--pf-t--global--spacer--xs);\n max-height: var(--pf-t--global--spacer--2xl);\n margin: 0 auto 10px auto;\n}\n\n.bs-tkn-pipeline-visualization-step-list__step {\n display: flex;\n margin-bottom: var(--pf-t--global--spacer--xs);\n}\n\n.bs-tkn-pipeline-visualization-step-list__step--task-run {\n margin-bottom: var(--pf-t--global--spacer--sm);\n}\n\n.bs-tkn-pipeline-visualization-step-list__step:last-child {\n margin-bottom: 0;\n}\n\n.bs-tkn-pipeline-visualization-step-list__bullet {\n font-size: 1rem;\n}\n\n.bs-tkn-pipeline-visualization-step-list__icon {\n flex: 0 0 18px;\n}\n\n.bs-tkn-pipeline-visualization-step-list__icon-backdrop {\n fill: var(--pf-t--color--white);\n}\n\n.bs-tkn-pipeline-visualization-step-list__name {\n flex: 1 1 auto;\n overflow: hidden;\n padding-left: var(--pf-t--global--spacer--sm);\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.bs-tkn-pipeline-visualization-step-list__name.is-main-focus {\n padding: 0 var(--pf-t--global--spacer--sm);\n text-align: center;\n}\n\n.bs-tkn-pipeline-visualization-step-list__duration {\n flex: 0 0 auto;\n padding-left: var(--pf-t--global--spacer--sm);\n text-align: right;\n}\n";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
@@ -24,7 +24,7 @@ const layoutFactory = (type, graph) => {
24
24
  case PipelineLayout.DAGRE_VIEWER:
25
25
  return new PipelineDagreLayout(graph, { nodesep: 25 });
26
26
  default:
27
- return void 0;
27
+ return undefined;
28
28
  }
29
29
  };
30
30
  const pipelineComponentFactory = (kind, type) => {
@@ -50,10 +50,10 @@ const pipelineComponentFactory = (kind, type) => {
50
50
  case GROUPED_EDGE_TYPE:
51
51
  return TaskGroupEdge;
52
52
  default:
53
- return void 0;
53
+ return undefined;
54
54
  }
55
55
  }
56
- return void 0;
56
+ return undefined;
57
57
  };
58
58
 
59
59
  export { pipelineComponentFactory as default, layoutFactory };
@@ -1 +1 @@
1
- {"version":3,"file":"pipelineComponentFactory.esm.js","sources":["../../../src/components/pipeline-topology/pipelineComponentFactory.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport {\n ComponentFactory,\n DagreLayout,\n DefaultTaskGroup,\n Graph,\n GraphComponent,\n GraphElement,\n LayoutFactory,\n ModelKind,\n PipelineDagreLayout,\n SpacerNode,\n TaskEdge,\n withPanZoom,\n} from '@patternfly/react-topology';\n\nimport { NodeType, PipelineLayout } from '../../consts/pipeline-topology-const';\nimport { getLayoutData } from '../../utils/pipeline-topology-utils';\nimport PipelineTaskNode from './PipelineTaskNode';\nimport TaskGroupEdge from './TaskGroupEdge';\n\nconst GROUPED_EDGE_TYPE = 'GROUPED_EDGE';\n\nexport const layoutFactory: LayoutFactory = (type: string, graph: Graph) => {\n switch (type) {\n case PipelineLayout.DAGRE_BUILDER:\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return new DagreLayout(graph, {\n // Hack to get around undesirable defaults\n linkDistance: 0,\n nodeDistance: 0,\n groupDistance: 0,\n collideDistance: 0,\n simulationSpeed: 0,\n chargeStrength: 0,\n allowDrag: false,\n layoutOnDrag: false,\n ...getLayoutData(type),\n });\n case PipelineLayout.DAGRE_VIEWER:\n return new PipelineDagreLayout(graph, { nodesep: 25 });\n default:\n return undefined;\n }\n};\n\nconst pipelineComponentFactory: ComponentFactory = (\n kind: ModelKind,\n type: string,\n): React.ComponentType<{ element: GraphElement }> | undefined => {\n if (kind === ModelKind.graph) {\n return withPanZoom()(GraphComponent) as React.ComponentType<{\n element: GraphElement;\n }>;\n }\n if (kind === ModelKind.edge) {\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n }\n if (kind === ModelKind.node) {\n switch (type) {\n case NodeType.TASK_NODE:\n case NodeType.FINALLY_NODE:\n return PipelineTaskNode as React.ComponentType<any>;\n case 'task-group':\n case NodeType.FINALLY_GROUP:\n return DefaultTaskGroup as React.ComponentType<{\n element: GraphElement;\n }>;\n case NodeType.SPACER_NODE:\n return SpacerNode as React.ComponentType<{ element: GraphElement }>;\n case 'finally-spacer-edge':\n case NodeType.EDGE:\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n case GROUPED_EDGE_TYPE:\n return TaskGroupEdge as React.ComponentType<{ element: GraphElement }>;\n default:\n return undefined;\n }\n }\n return undefined;\n};\n\nexport default pipelineComponentFactory;\n"],"names":[],"mappings":";;;;;;AAqCA,MAAM,iBAAoB,GAAA,cAAA;AAEb,MAAA,aAAA,GAA+B,CAAC,IAAA,EAAc,KAAiB,KAAA;AAC1E,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,cAAe,CAAA,aAAA;AAAA,IACpB,KAAK,cAAe,CAAA,oBAAA;AAClB,MAAO,OAAA,IAAI,YAAY,KAAO,EAAA;AAAA;AAAA,QAE5B,YAAc,EAAA,CAAA;AAAA,QACd,YAAc,EAAA,CAAA;AAAA,QACd,aAAe,EAAA,CAAA;AAAA,QACf,eAAiB,EAAA,CAAA;AAAA,QACjB,eAAiB,EAAA,CAAA;AAAA,QACjB,cAAgB,EAAA,CAAA;AAAA,QAChB,SAAW,EAAA,KAAA;AAAA,QACX,YAAc,EAAA,KAAA;AAAA,QACd,GAAG,cAAc,IAAI;AAAA,OACtB,CAAA;AAAA,IACH,KAAK,cAAe,CAAA,YAAA;AAClB,MAAA,OAAO,IAAI,mBAAoB,CAAA,KAAA,EAAO,EAAE,OAAA,EAAS,IAAI,CAAA;AAAA,IACvD;AACE,MAAO,OAAA,KAAA,CAAA;AAAA;AAEb;AAEM,MAAA,wBAAA,GAA6C,CACjD,IAAA,EACA,IAC+D,KAAA;AAC/D,EAAI,IAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AAC5B,IAAO,OAAA,WAAA,GAAc,cAAc,CAAA;AAAA;AAIrC,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAA,QAAQ,IAAM;AAAA,MACZ,KAAK,QAAS,CAAA,SAAA;AAAA,MACd,KAAK,QAAS,CAAA,YAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MACT,KAAK,YAAA;AAAA,MACL,KAAK,QAAS,CAAA,aAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MAGT,KAAK,QAAS,CAAA,WAAA;AACZ,QAAO,OAAA,UAAA;AAAA,MACT,KAAK,qBAAA;AAAA,MACL,KAAK,QAAS,CAAA,IAAA;AACZ,QAAO,OAAA,QAAA;AAAA,MACT,KAAK,iBAAA;AACH,QAAO,OAAA,aAAA;AAAA,MACT;AACE,QAAO,OAAA,KAAA,CAAA;AAAA;AACX;AAEF,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"pipelineComponentFactory.esm.js","sources":["../../../src/components/pipeline-topology/pipelineComponentFactory.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport {\n ComponentFactory,\n DagreLayout,\n DefaultTaskGroup,\n Graph,\n GraphComponent,\n GraphElement,\n LayoutFactory,\n ModelKind,\n PipelineDagreLayout,\n SpacerNode,\n TaskEdge,\n withPanZoom,\n} from '@patternfly/react-topology';\n\nimport { NodeType, PipelineLayout } from '../../consts/pipeline-topology-const';\nimport { getLayoutData } from '../../utils/pipeline-topology-utils';\nimport PipelineTaskNode from './PipelineTaskNode';\nimport TaskGroupEdge from './TaskGroupEdge';\n\nconst GROUPED_EDGE_TYPE = 'GROUPED_EDGE';\n\nexport const layoutFactory: LayoutFactory = (type: string, graph: Graph) => {\n switch (type) {\n case PipelineLayout.DAGRE_BUILDER:\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return new DagreLayout(graph, {\n // Hack to get around undesirable defaults\n linkDistance: 0,\n nodeDistance: 0,\n groupDistance: 0,\n collideDistance: 0,\n simulationSpeed: 0,\n chargeStrength: 0,\n allowDrag: false,\n layoutOnDrag: false,\n ...getLayoutData(type),\n });\n case PipelineLayout.DAGRE_VIEWER:\n return new PipelineDagreLayout(graph, { nodesep: 25 });\n default:\n return undefined;\n }\n};\n\nconst pipelineComponentFactory: ComponentFactory = (\n kind: ModelKind,\n type: string,\n): React.ComponentType<{ element: GraphElement }> | undefined => {\n if (kind === ModelKind.graph) {\n return withPanZoom()(GraphComponent) as React.ComponentType<{\n element: GraphElement;\n }>;\n }\n if (kind === ModelKind.edge) {\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n }\n if (kind === ModelKind.node) {\n switch (type) {\n case NodeType.TASK_NODE:\n case NodeType.FINALLY_NODE:\n return PipelineTaskNode as React.ComponentType<any>;\n case 'task-group':\n case NodeType.FINALLY_GROUP:\n return DefaultTaskGroup as React.ComponentType<{\n element: GraphElement;\n }>;\n case NodeType.SPACER_NODE:\n return SpacerNode as React.ComponentType<{ element: GraphElement }>;\n case 'finally-spacer-edge':\n case NodeType.EDGE:\n return TaskEdge as React.ComponentType<{ element: GraphElement }>;\n case GROUPED_EDGE_TYPE:\n return TaskGroupEdge as React.ComponentType<{ element: GraphElement }>;\n default:\n return undefined;\n }\n }\n return undefined;\n};\n\nexport default pipelineComponentFactory;\n"],"names":[],"mappings":";;;;;;AAqCA,MAAM,iBAAoB,GAAA,cAAA;AAEb,MAAA,aAAA,GAA+B,CAAC,IAAA,EAAc,KAAiB,KAAA;AAC1E,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,cAAe,CAAA,aAAA;AAAA,IACpB,KAAK,cAAe,CAAA,oBAAA;AAClB,MAAO,OAAA,IAAI,YAAY,KAAO,EAAA;AAAA;AAAA,QAE5B,YAAc,EAAA,CAAA;AAAA,QACd,YAAc,EAAA,CAAA;AAAA,QACd,aAAe,EAAA,CAAA;AAAA,QACf,eAAiB,EAAA,CAAA;AAAA,QACjB,eAAiB,EAAA,CAAA;AAAA,QACjB,cAAgB,EAAA,CAAA;AAAA,QAChB,SAAW,EAAA,KAAA;AAAA,QACX,YAAc,EAAA,KAAA;AAAA,QACd,GAAG,cAAc,IAAI;AAAA,OACtB,CAAA;AAAA,IACH,KAAK,cAAe,CAAA,YAAA;AAClB,MAAA,OAAO,IAAI,mBAAoB,CAAA,KAAA,EAAO,EAAE,OAAA,EAAS,IAAI,CAAA;AAAA,IACvD;AACE,MAAO,OAAA,SAAA;AAAA;AAEb;AAEM,MAAA,wBAAA,GAA6C,CACjD,IAAA,EACA,IAC+D,KAAA;AAC/D,EAAI,IAAA,IAAA,KAAS,UAAU,KAAO,EAAA;AAC5B,IAAO,OAAA,WAAA,GAAc,cAAc,CAAA;AAAA;AAIrC,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAO,OAAA,QAAA;AAAA;AAET,EAAI,IAAA,IAAA,KAAS,UAAU,IAAM,EAAA;AAC3B,IAAA,QAAQ,IAAM;AAAA,MACZ,KAAK,QAAS,CAAA,SAAA;AAAA,MACd,KAAK,QAAS,CAAA,YAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MACT,KAAK,YAAA;AAAA,MACL,KAAK,QAAS,CAAA,aAAA;AACZ,QAAO,OAAA,gBAAA;AAAA,MAGT,KAAK,QAAS,CAAA,WAAA;AACZ,QAAO,OAAA,UAAA;AAAA,MACT,KAAK,qBAAA;AAAA,MACL,KAAK,QAAS,CAAA,IAAA;AACZ,QAAO,OAAA,QAAA;AAAA,MACT,KAAK,iBAAA;AACH,QAAO,OAAA,aAAA;AAAA,MACT;AACE,QAAO,OAAA,SAAA;AAAA;AACX;AAEF,EAAO,OAAA,SAAA;AACT;;;;"}
@@ -2,7 +2,7 @@ import React__default from 'react';
2
2
  import { useTheme } from '@material-ui/core/styles';
3
3
 
4
4
  const THEME_DARK = "dark";
5
- const THEME_DARK_CLASS = "pf-v5-theme-dark";
5
+ const THEME_DARK_CLASS = "pf-v6-theme-dark";
6
6
  const useDarkTheme = () => {
7
7
  const {
8
8
  palette: { type }
@@ -1 +1 @@
1
- {"version":3,"file":"useDarkTheme.esm.js","sources":["../../src/hooks/useDarkTheme.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { useTheme } from '@material-ui/core/styles';\n\nconst THEME_DARK = 'dark';\nconst THEME_DARK_CLASS = 'pf-v5-theme-dark';\n\nexport const useDarkTheme = () => {\n const {\n palette: { type },\n } = useTheme();\n\n React.useEffect(() => {\n const htmlTagElement = document.documentElement;\n if (type === THEME_DARK) {\n htmlTagElement.classList.add(THEME_DARK_CLASS);\n } else {\n htmlTagElement.classList.remove(THEME_DARK_CLASS);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [type]);\n};\n"],"names":["React"],"mappings":";;;AAmBA,MAAM,UAAa,GAAA,MAAA;AACnB,MAAM,gBAAmB,GAAA,kBAAA;AAElB,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA;AAAA,IACJ,OAAA,EAAS,EAAE,IAAK;AAAA,MACd,QAAS,EAAA;AAEb,EAAAA,cAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,iBAAiB,QAAS,CAAA,eAAA;AAChC,IAAA,IAAI,SAAS,UAAY,EAAA;AACvB,MAAe,cAAA,CAAA,SAAA,CAAU,IAAI,gBAAgB,CAAA;AAAA,KACxC,MAAA;AACL,MAAe,cAAA,CAAA,SAAA,CAAU,OAAO,gBAAgB,CAAA;AAAA;AAClD,GAEF,EAAG,CAAC,IAAI,CAAC,CAAA;AACX;;;;"}
1
+ {"version":3,"file":"useDarkTheme.esm.js","sources":["../../src/hooks/useDarkTheme.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nimport { useTheme } from '@material-ui/core/styles';\n\nconst THEME_DARK = 'dark';\nconst THEME_DARK_CLASS = 'pf-v6-theme-dark';\n\nexport const useDarkTheme = () => {\n const {\n palette: { type },\n } = useTheme();\n\n React.useEffect(() => {\n const htmlTagElement = document.documentElement;\n if (type === THEME_DARK) {\n htmlTagElement.classList.add(THEME_DARK_CLASS);\n } else {\n htmlTagElement.classList.remove(THEME_DARK_CLASS);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [type]);\n};\n"],"names":["React"],"mappings":";;;AAmBA,MAAM,UAAa,GAAA,MAAA;AACnB,MAAM,gBAAmB,GAAA,kBAAA;AAElB,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA;AAAA,IACJ,OAAA,EAAS,EAAE,IAAK;AAAA,MACd,QAAS,EAAA;AAEb,EAAAA,cAAA,CAAM,UAAU,MAAM;AACpB,IAAA,MAAM,iBAAiB,QAAS,CAAA,eAAA;AAChC,IAAA,IAAI,SAAS,UAAY,EAAA;AACvB,MAAe,cAAA,CAAA,SAAA,CAAU,IAAI,gBAAgB,CAAA;AAAA,KACxC,MAAA;AACL,MAAe,cAAA,CAAA,SAAA,CAAU,OAAO,gBAAgB,CAAA;AAAA;AAClD,GAEF,EAAG,CAAC,IAAI,CAAC,CAAA;AACX;;;;"}
@@ -9,7 +9,7 @@ const useResourcesClusters = (k8sObjectsResponse) => {
9
9
  let isMounted = true;
10
10
  if (isMounted && !loading && kubernetesObjects && !error) {
11
11
  const k8sResourcesClusters = getClusters(kubernetesObjects);
12
- if (k8sResourcesClusters) {
12
+ {
13
13
  setClusters(k8sResourcesClusters);
14
14
  }
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useResourcesClusters.esm.js","sources":["../../src/hooks/useResourcesClusters.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useEffect, useState } from 'react';\n\nimport { KubernetesObjects } from '@backstage/plugin-kubernetes-react';\n\nimport { useDeepCompareMemoize } from '@janus-idp/shared-react';\n\nimport { ClusterErrors } from '../types/types';\nimport { getClusters } from '../utils/tekton-utils';\n\nexport const useResourcesClusters = (k8sObjectsResponse: KubernetesObjects) => {\n const { kubernetesObjects, loading, error } = k8sObjectsResponse;\n const [clusters, setClusters] = useState<{\n clusters: string[];\n errors: ClusterErrors[];\n }>({ clusters: [], errors: [] });\n\n useEffect(() => {\n let isMounted = true;\n if (isMounted && !loading && kubernetesObjects && !error) {\n const k8sResourcesClusters = getClusters(kubernetesObjects);\n if (k8sResourcesClusters) {\n setClusters(k8sResourcesClusters);\n }\n }\n return () => {\n isMounted = false;\n };\n }, [loading, kubernetesObjects, error]);\n\n return useDeepCompareMemoize(clusters);\n};\n"],"names":[],"mappings":";;;;AAwBa,MAAA,oBAAA,GAAuB,CAAC,kBAA0C,KAAA;AAC7E,EAAA,MAAM,EAAE,iBAAA,EAAmB,OAAS,EAAA,KAAA,EAAU,GAAA,kBAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAG7B,CAAA,EAAE,QAAU,EAAA,EAAI,EAAA,MAAA,EAAQ,EAAC,EAAG,CAAA;AAE/B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAY,GAAA,IAAA;AAChB,IAAA,IAAI,SAAa,IAAA,CAAC,OAAW,IAAA,iBAAA,IAAqB,CAAC,KAAO,EAAA;AACxD,MAAM,MAAA,oBAAA,GAAuB,YAAY,iBAAiB,CAAA;AAC1D,MAAA,IAAI,oBAAsB,EAAA;AACxB,QAAA,WAAA,CAAY,oBAAoB,CAAA;AAAA;AAClC;AAEF,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,KAAA;AAAA,KACd;AAAA,GACC,EAAA,CAAC,OAAS,EAAA,iBAAA,EAAmB,KAAK,CAAC,CAAA;AAEtC,EAAA,OAAO,sBAAsB,QAAQ,CAAA;AACvC;;;;"}
1
+ {"version":3,"file":"useResourcesClusters.esm.js","sources":["../../src/hooks/useResourcesClusters.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useEffect, useState } from 'react';\n\nimport { KubernetesObjects } from '@backstage/plugin-kubernetes-react';\n\nimport { useDeepCompareMemoize } from '@janus-idp/shared-react';\n\nimport { ClusterErrors } from '../types/types';\nimport { getClusters } from '../utils/tekton-utils';\n\nexport const useResourcesClusters = (k8sObjectsResponse: KubernetesObjects) => {\n const { kubernetesObjects, loading, error } = k8sObjectsResponse;\n const [clusters, setClusters] = useState<{\n clusters: string[];\n errors: ClusterErrors[];\n }>({ clusters: [], errors: [] });\n\n useEffect(() => {\n let isMounted = true;\n if (isMounted && !loading && kubernetesObjects && !error) {\n const k8sResourcesClusters = getClusters(kubernetesObjects);\n if (k8sResourcesClusters) {\n setClusters(k8sResourcesClusters);\n }\n }\n return () => {\n isMounted = false;\n };\n }, [loading, kubernetesObjects, error]);\n\n return useDeepCompareMemoize(clusters);\n};\n"],"names":[],"mappings":";;;;AAwBa,MAAA,oBAAA,GAAuB,CAAC,kBAA0C,KAAA;AAC7E,EAAA,MAAM,EAAE,iBAAA,EAAmB,OAAS,EAAA,KAAA,EAAU,GAAA,kBAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAG7B,CAAA,EAAE,QAAU,EAAA,EAAI,EAAA,MAAA,EAAQ,EAAC,EAAG,CAAA;AAE/B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAY,GAAA,IAAA;AAChB,IAAA,IAAI,SAAa,IAAA,CAAC,OAAW,IAAA,iBAAA,IAAqB,CAAC,KAAO,EAAA;AACxD,MAAM,MAAA,oBAAA,GAAuB,YAAY,iBAAiB,CAAA;AAC1D,MAA0B;AACxB,QAAA,WAAA,CAAY,oBAAoB,CAAA;AAAA;AAClC;AAEF,IAAA,OAAO,MAAM;AACX,MAAY,SAAA,GAAA,KAAA;AAAA,KACd;AAAA,GACC,EAAA,CAAC,OAAS,EAAA,iBAAA,EAAmB,KAAK,CAAC,CAAA;AAEtC,EAAA,OAAO,sBAAsB,QAAQ,CAAA;AACvC;;;;"}
@@ -0,0 +1,29 @@
1
+ function styleInject(css, ref) {
2
+ if ( ref === undefined ) ref = {};
3
+ var insertAt = ref.insertAt;
4
+
5
+ if (!css || typeof document === 'undefined') { return; }
6
+
7
+ var head = document.head || document.getElementsByTagName('head')[0];
8
+ var style = document.createElement('style');
9
+ style.type = 'text/css';
10
+
11
+ if (insertAt === 'top') {
12
+ if (head.firstChild) {
13
+ head.insertBefore(style, head.firstChild);
14
+ } else {
15
+ head.appendChild(style);
16
+ }
17
+ } else {
18
+ head.appendChild(style);
19
+ }
20
+
21
+ if (style.styleSheet) {
22
+ style.styleSheet.cssText = css;
23
+ } else {
24
+ style.appendChild(document.createTextNode(css));
25
+ }
26
+ }
27
+
28
+ export { styleInject as default };
29
+ //# sourceMappingURL=style-inject.es.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-inject.es.esm.js","sources":["../../../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,SAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO;;AAExD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B;AACA,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B;;AAEA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,GAAG,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD;AACA;;;;","x_google_ignoreList":[0]}
@@ -68,12 +68,12 @@ const getWhenStatus = (status) => {
68
68
  case ComputedStatus.Idle:
69
69
  return WhenStatus.Unmet;
70
70
  default:
71
- return void 0;
71
+ return undefined;
72
72
  }
73
73
  };
74
74
  const getTaskWhenStatus = (task) => {
75
75
  if (!task.when) {
76
- return void 0;
76
+ return undefined;
77
77
  }
78
78
  return getWhenStatus(task.status?.reason);
79
79
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline-topology-utils.esm.js","sources":["../../src/utils/pipeline-topology-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n EdgeModel,\n getEdgesFromNodes,\n getSpacerNodes,\n GraphModel,\n ModelKind,\n RunStatus,\n WhenStatus,\n} from '@patternfly/react-topology';\nimport * as dagre from 'dagre';\nimport { minBy, uniq } from 'lodash';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n PipelineTask,\n PipelineTaskParam,\n PipelineTaskWithStatus,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { DAG, Vertex } from '../components/pipeline-topology/dag';\nimport {\n DAGRE_BUILDER_PROPS,\n DAGRE_BUILDER_SPACED_PROPS,\n DAGRE_VIEWER_PROPS,\n DAGRE_VIEWER_SPACED_PROPS,\n DEFAULT_BADGE_WIDTH,\n DEFAULT_FINALLLY_GROUP_PADDING,\n DEFAULT_NODE_HEIGHT,\n DEFAULT_NODE_ICON_WIDTH,\n FINALLY_NODE_PADDING,\n NODE_HEIGHT,\n NODE_PADDING,\n NODE_WIDTH,\n NodeType,\n PipelineLayout,\n REGEX_EXTRACT_DEPS,\n WHEN_EXPRESSION_SPACING,\n} from '../consts/pipeline-topology-const';\nimport {\n FinallyNodeModel,\n LoadingNodeModel,\n NodeCreator,\n NodeCreatorSetup,\n PipelineEdgeModel,\n PipelineMixedNodeModel,\n PipelineRunAfterNodeModelData,\n} from '../types/pipeline-topology-types';\nimport { appendPipelineRunStatus, getPLRTaskRuns } from './pipelineRun-utils';\n\nconst createGenericNode: NodeCreatorSetup =\n (type, width?, height?) => (name, data) => ({\n id: name,\n label: data?.label || name,\n runAfterTasks: data?.runAfterTasks || [],\n ...(data && { data }),\n height: height ?? NODE_HEIGHT,\n width: width ?? NODE_WIDTH,\n type,\n });\n\nconst getMaxFinallyNode = (finallyTaskList: PipelineTaskWithStatus[]) => {\n const sortedFinallyTaskList = [...finallyTaskList].sort(\n (a, b) => b.name.length - a.name.length,\n );\n return sortedFinallyTaskList[0]?.name || '';\n};\n\nexport const createFinallyNode = (\n height: number,\n): NodeCreator<FinallyNodeModel> =>\n createGenericNode(\n NodeType.FINALLY_NODE,\n NODE_WIDTH + WHEN_EXPRESSION_SPACING + FINALLY_NODE_PADDING * 2,\n height,\n );\n\nexport const createLoadingNode: NodeCreator<LoadingNodeModel> =\n createGenericNode(NodeType.LOADING_NODE);\n\nconst createPipelineTaskNode = (\n type: NodeType,\n data: PipelineRunAfterNodeModelData,\n) => createGenericNode(type, data.width, data.height)(data.id ?? '', data);\n\nexport const getTextWidth = (\n text: string,\n font: string = '0.8rem RedHatText',\n): number => {\n if (!text || text.length === 0) {\n return 0;\n }\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n return text.length;\n }\n context.font = font;\n const { width } = context.measureText(text);\n return width;\n};\n\nexport const extractDepsFromContextVariables = (\n contextVariable: string | null | undefined,\n) => {\n let matches;\n const deps: string[] = [];\n if (!contextVariable) {\n return deps;\n }\n // eslint-disable-next-line no-cond-assign\n while ((matches = REGEX_EXTRACT_DEPS.exec(contextVariable)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (matches.index === REGEX_EXTRACT_DEPS.lastIndex) {\n REGEX_EXTRACT_DEPS.lastIndex++;\n }\n if (matches) {\n if (!deps.includes(matches[1])) {\n deps.push(matches[1]);\n }\n }\n }\n return deps;\n};\n\nexport const getSpacerNode = (\n node: PipelineMixedNodeModel,\n): PipelineMixedNodeModel => ({\n ...node,\n height: 1,\n width: 1,\n});\n\nexport const getWhenStatus = (\n status: ComputedStatus,\n): WhenStatus | undefined => {\n switch (status) {\n case ComputedStatus.Succeeded:\n case ComputedStatus.Failed:\n return WhenStatus.Met;\n case ComputedStatus.Skipped:\n case ComputedStatus['In Progress']:\n case ComputedStatus.Idle:\n return WhenStatus.Unmet;\n default:\n return undefined;\n }\n};\n\nexport const getTaskWhenStatus = (\n task: PipelineTaskWithStatus,\n): WhenStatus | undefined => {\n if (!task.when) {\n return undefined;\n }\n return getWhenStatus(task.status?.reason as ComputedStatus);\n};\n\nconst getDepsFromContextVariables = (task: PipelineTask) => {\n const depsFromContextVariables: string[] = [];\n if (task.params) {\n task.params.forEach((p: PipelineTaskParam) => {\n if (Array.isArray(p.value)) {\n p.value.forEach(paramValue => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(paramValue),\n );\n });\n } else {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(p.value),\n );\n }\n });\n }\n if (task?.when) {\n task.when.forEach(({ input, values }) => {\n depsFromContextVariables.push(...extractDepsFromContextVariables(input));\n values.forEach((whenValue: string) => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(whenValue),\n );\n });\n });\n }\n return depsFromContextVariables;\n};\n\nconst getRunAfterTasks = (task: PipelineTask, dag: DAG, vertex: Vertex) => {\n const runAfterTasks: string[] = [];\n const depsFromContextVariables = getDepsFromContextVariables(task);\n\n const dependancies = uniq([...vertex.dependancyNames]);\n if (dependancies) {\n dependancies.forEach(dep => {\n const depObj = dag.vertices.get(dep) as Vertex;\n if (\n depObj.level - vertex.level <= 1 ||\n vertex.data.runAfter?.includes(depObj.name)\n ) {\n runAfterTasks.push(dep);\n }\n });\n }\n if (depsFromContextVariables.length > 0) {\n const v = depsFromContextVariables.map(d => {\n return dag.vertices.get(d) as Vertex;\n });\n const minLevelDep = minBy(v, (d: Vertex) => d.level) as Vertex;\n const nearestDeps = v.filter(v1 => v1.level === minLevelDep.level);\n nearestDeps.forEach(nd => {\n if (nd.level - vertex.level <= 1 || vertex.dependancyNames.length === 0) {\n runAfterTasks.push(nd.name);\n }\n });\n }\n return runAfterTasks;\n};\n\nexport const getGraphDataModel = (\n pipelineRun: PipelineRunKind | undefined,\n taskRuns: TaskRunKind[],\n): {\n graph: GraphModel;\n nodes: PipelineMixedNodeModel[];\n edges: EdgeModel[];\n} | null => {\n if (!pipelineRun) {\n return null;\n }\n\n const plrTaskRuns = getPLRTaskRuns(taskRuns, pipelineRun?.metadata?.name);\n\n const taskList = appendPipelineRunStatus(pipelineRun, plrTaskRuns);\n\n const dag = new DAG();\n taskList?.forEach((task: PipelineTask) => {\n dag.addEdges(task.name, task, '', task.runAfter || []);\n });\n\n const nodes: PipelineMixedNodeModel[] = [];\n const maxWidthForLevel: { [key: string]: number } = {};\n dag.topologicalSort((v: Vertex) => {\n if (!maxWidthForLevel[v.level]) {\n maxWidthForLevel[v.level] = getTextWidth(v.name);\n } else {\n maxWidthForLevel[v.level] = Math.max(\n maxWidthForLevel[v.level],\n getTextWidth(v.name),\n );\n }\n });\n dag.topologicalSort((vertex: Vertex) => {\n const task = vertex.data as PipelineTask;\n const runAfterTasks = getRunAfterTasks(task, dag, vertex);\n const badgePadding =\n Object.keys(pipelineRun.spec)?.length > 0 ? DEFAULT_BADGE_WIDTH : 0;\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === task.name,\n );\n nodes.push(\n createPipelineTaskNode(NodeType.TASK_NODE, {\n id: vertex.name,\n label: vertex.name,\n width:\n maxWidthForLevel[vertex.level] +\n NODE_PADDING * 2 +\n DEFAULT_NODE_ICON_WIDTH +\n badgePadding,\n runAfterTasks,\n status: isTaskSkipped ? RunStatus.Skipped : vertex.data.status?.reason,\n whenStatus: getTaskWhenStatus(vertex.data),\n task: vertex.data,\n pipelineRun,\n }),\n );\n });\n\n const finallyTaskList = appendPipelineRunStatus(\n pipelineRun,\n plrTaskRuns,\n true,\n );\n\n const finallyNodes = finallyTaskList.map(fTask => {\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === fTask.name,\n );\n\n return createPipelineTaskNode(NodeType.FINALLY_NODE, {\n id: fTask.name,\n label: fTask.name,\n width:\n getTextWidth(getMaxFinallyNode(finallyTaskList)) +\n NODE_PADDING * 2 +\n DEFAULT_FINALLLY_GROUP_PADDING * 2,\n height: DEFAULT_NODE_HEIGHT,\n runAfterTasks: [],\n status: isTaskSkipped\n ? RunStatus.Skipped\n : (fTask.status?.reason as RunStatus),\n whenStatus: getTaskWhenStatus(fTask),\n task: fTask,\n pipelineRun,\n });\n });\n\n const finallyGroup = finallyNodes.length\n ? [\n {\n id: 'finally-group-id',\n type: NodeType.FINALLY_GROUP,\n children: finallyNodes.map(n => n.id),\n group: true,\n style: { padding: DEFAULT_FINALLLY_GROUP_PADDING },\n },\n ]\n : [];\n const spacerNodes: PipelineMixedNodeModel[] = (\n getSpacerNodes([...nodes, ...finallyNodes], NodeType.SPACER_NODE, [\n NodeType.FINALLY_NODE,\n ]) as PipelineMixedNodeModel[]\n ).map(getSpacerNode);\n\n const edges: PipelineEdgeModel[] = getEdgesFromNodes(\n [...nodes, ...spacerNodes, ...finallyNodes],\n NodeType.SPACER_NODE,\n NodeType.EDGE,\n NodeType.EDGE,\n [NodeType.FINALLY_NODE],\n NodeType.EDGE,\n );\n\n return {\n graph: {\n id: `${pipelineRun?.metadata?.name}-graph`,\n type: ModelKind.graph,\n layout: PipelineLayout.DAGRE_VIEWER,\n scaleExtent: [0.5, 1],\n },\n nodes: [\n ...nodes,\n ...spacerNodes,\n ...finallyNodes,\n ...finallyGroup,\n ] as PipelineMixedNodeModel[],\n edges,\n };\n};\n\nexport const getLayoutData = (\n layout: PipelineLayout,\n): dagre.GraphLabel | null => {\n switch (layout) {\n case PipelineLayout.DAGRE_BUILDER:\n return DAGRE_BUILDER_PROPS;\n case PipelineLayout.DAGRE_VIEWER:\n return DAGRE_VIEWER_PROPS;\n case PipelineLayout.DAGRE_VIEWER_SPACED:\n return DAGRE_VIEWER_SPACED_PROPS;\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return DAGRE_BUILDER_SPACED_PROPS;\n default:\n return null;\n }\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline-topology-utils.esm.js","sources":["../../src/utils/pipeline-topology-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n EdgeModel,\n getEdgesFromNodes,\n getSpacerNodes,\n GraphModel,\n ModelKind,\n RunStatus,\n WhenStatus,\n} from '@patternfly/react-topology';\nimport * as dagre from 'dagre';\nimport { minBy, uniq } from 'lodash';\n\nimport {\n ComputedStatus,\n PipelineRunKind,\n PipelineTask,\n PipelineTaskParam,\n PipelineTaskWithStatus,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport { DAG, Vertex } from '../components/pipeline-topology/dag';\nimport {\n DAGRE_BUILDER_PROPS,\n DAGRE_BUILDER_SPACED_PROPS,\n DAGRE_VIEWER_PROPS,\n DAGRE_VIEWER_SPACED_PROPS,\n DEFAULT_BADGE_WIDTH,\n DEFAULT_FINALLLY_GROUP_PADDING,\n DEFAULT_NODE_HEIGHT,\n DEFAULT_NODE_ICON_WIDTH,\n FINALLY_NODE_PADDING,\n NODE_HEIGHT,\n NODE_PADDING,\n NODE_WIDTH,\n NodeType,\n PipelineLayout,\n REGEX_EXTRACT_DEPS,\n WHEN_EXPRESSION_SPACING,\n} from '../consts/pipeline-topology-const';\nimport {\n FinallyNodeModel,\n LoadingNodeModel,\n NodeCreator,\n NodeCreatorSetup,\n PipelineEdgeModel,\n PipelineMixedNodeModel,\n PipelineRunAfterNodeModelData,\n} from '../types/pipeline-topology-types';\nimport { appendPipelineRunStatus, getPLRTaskRuns } from './pipelineRun-utils';\n\nconst createGenericNode: NodeCreatorSetup =\n (type, width?, height?) => (name, data) => ({\n id: name,\n label: data?.label || name,\n runAfterTasks: data?.runAfterTasks || [],\n ...(data && { data }),\n height: height ?? NODE_HEIGHT,\n width: width ?? NODE_WIDTH,\n type,\n });\n\nconst getMaxFinallyNode = (finallyTaskList: PipelineTaskWithStatus[]) => {\n const sortedFinallyTaskList = [...finallyTaskList].sort(\n (a, b) => b.name.length - a.name.length,\n );\n return sortedFinallyTaskList[0]?.name || '';\n};\n\nexport const createFinallyNode = (\n height: number,\n): NodeCreator<FinallyNodeModel> =>\n createGenericNode(\n NodeType.FINALLY_NODE,\n NODE_WIDTH + WHEN_EXPRESSION_SPACING + FINALLY_NODE_PADDING * 2,\n height,\n );\n\nexport const createLoadingNode: NodeCreator<LoadingNodeModel> =\n createGenericNode(NodeType.LOADING_NODE);\n\nconst createPipelineTaskNode = (\n type: NodeType,\n data: PipelineRunAfterNodeModelData,\n) => createGenericNode(type, data.width, data.height)(data.id ?? '', data);\n\nexport const getTextWidth = (\n text: string,\n font: string = '0.8rem RedHatText',\n): number => {\n if (!text || text.length === 0) {\n return 0;\n }\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if (!context) {\n return text.length;\n }\n context.font = font;\n const { width } = context.measureText(text);\n return width;\n};\n\nexport const extractDepsFromContextVariables = (\n contextVariable: string | null | undefined,\n) => {\n let matches;\n const deps: string[] = [];\n if (!contextVariable) {\n return deps;\n }\n // eslint-disable-next-line no-cond-assign\n while ((matches = REGEX_EXTRACT_DEPS.exec(contextVariable)) !== null) {\n // This is necessary to avoid infinite loops with zero-width matches\n if (matches.index === REGEX_EXTRACT_DEPS.lastIndex) {\n REGEX_EXTRACT_DEPS.lastIndex++;\n }\n if (matches) {\n if (!deps.includes(matches[1])) {\n deps.push(matches[1]);\n }\n }\n }\n return deps;\n};\n\nexport const getSpacerNode = (\n node: PipelineMixedNodeModel,\n): PipelineMixedNodeModel => ({\n ...node,\n height: 1,\n width: 1,\n});\n\nexport const getWhenStatus = (\n status: ComputedStatus,\n): WhenStatus | undefined => {\n switch (status) {\n case ComputedStatus.Succeeded:\n case ComputedStatus.Failed:\n return WhenStatus.Met;\n case ComputedStatus.Skipped:\n case ComputedStatus['In Progress']:\n case ComputedStatus.Idle:\n return WhenStatus.Unmet;\n default:\n return undefined;\n }\n};\n\nexport const getTaskWhenStatus = (\n task: PipelineTaskWithStatus,\n): WhenStatus | undefined => {\n if (!task.when) {\n return undefined;\n }\n return getWhenStatus(task.status?.reason as ComputedStatus);\n};\n\nconst getDepsFromContextVariables = (task: PipelineTask) => {\n const depsFromContextVariables: string[] = [];\n if (task.params) {\n task.params.forEach((p: PipelineTaskParam) => {\n if (Array.isArray(p.value)) {\n p.value.forEach(paramValue => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(paramValue),\n );\n });\n } else {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(p.value),\n );\n }\n });\n }\n if (task?.when) {\n task.when.forEach(({ input, values }) => {\n depsFromContextVariables.push(...extractDepsFromContextVariables(input));\n values.forEach((whenValue: string) => {\n depsFromContextVariables.push(\n ...extractDepsFromContextVariables(whenValue),\n );\n });\n });\n }\n return depsFromContextVariables;\n};\n\nconst getRunAfterTasks = (task: PipelineTask, dag: DAG, vertex: Vertex) => {\n const runAfterTasks: string[] = [];\n const depsFromContextVariables = getDepsFromContextVariables(task);\n\n const dependancies = uniq([...vertex.dependancyNames]);\n if (dependancies) {\n dependancies.forEach(dep => {\n const depObj = dag.vertices.get(dep) as Vertex;\n if (\n depObj.level - vertex.level <= 1 ||\n vertex.data.runAfter?.includes(depObj.name)\n ) {\n runAfterTasks.push(dep);\n }\n });\n }\n if (depsFromContextVariables.length > 0) {\n const v = depsFromContextVariables.map(d => {\n return dag.vertices.get(d) as Vertex;\n });\n const minLevelDep = minBy(v, (d: Vertex) => d.level) as Vertex;\n const nearestDeps = v.filter(v1 => v1.level === minLevelDep.level);\n nearestDeps.forEach(nd => {\n if (nd.level - vertex.level <= 1 || vertex.dependancyNames.length === 0) {\n runAfterTasks.push(nd.name);\n }\n });\n }\n return runAfterTasks;\n};\n\nexport const getGraphDataModel = (\n pipelineRun: PipelineRunKind | undefined,\n taskRuns: TaskRunKind[],\n): {\n graph: GraphModel;\n nodes: PipelineMixedNodeModel[];\n edges: EdgeModel[];\n} | null => {\n if (!pipelineRun) {\n return null;\n }\n\n const plrTaskRuns = getPLRTaskRuns(taskRuns, pipelineRun?.metadata?.name);\n\n const taskList = appendPipelineRunStatus(pipelineRun, plrTaskRuns);\n\n const dag = new DAG();\n taskList?.forEach((task: PipelineTask) => {\n dag.addEdges(task.name, task, '', task.runAfter || []);\n });\n\n const nodes: PipelineMixedNodeModel[] = [];\n const maxWidthForLevel: { [key: string]: number } = {};\n dag.topologicalSort((v: Vertex) => {\n if (!maxWidthForLevel[v.level]) {\n maxWidthForLevel[v.level] = getTextWidth(v.name);\n } else {\n maxWidthForLevel[v.level] = Math.max(\n maxWidthForLevel[v.level],\n getTextWidth(v.name),\n );\n }\n });\n dag.topologicalSort((vertex: Vertex) => {\n const task = vertex.data as PipelineTask;\n const runAfterTasks = getRunAfterTasks(task, dag, vertex);\n const badgePadding =\n Object.keys(pipelineRun.spec)?.length > 0 ? DEFAULT_BADGE_WIDTH : 0;\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === task.name,\n );\n nodes.push(\n createPipelineTaskNode(NodeType.TASK_NODE, {\n id: vertex.name,\n label: vertex.name,\n width:\n maxWidthForLevel[vertex.level] +\n NODE_PADDING * 2 +\n DEFAULT_NODE_ICON_WIDTH +\n badgePadding,\n runAfterTasks,\n status: isTaskSkipped ? RunStatus.Skipped : vertex.data.status?.reason,\n whenStatus: getTaskWhenStatus(vertex.data),\n task: vertex.data,\n pipelineRun,\n }),\n );\n });\n\n const finallyTaskList = appendPipelineRunStatus(\n pipelineRun,\n plrTaskRuns,\n true,\n );\n\n const finallyNodes = finallyTaskList.map(fTask => {\n const isTaskSkipped = pipelineRun?.status?.skippedTasks?.some(\n t => t.name === fTask.name,\n );\n\n return createPipelineTaskNode(NodeType.FINALLY_NODE, {\n id: fTask.name,\n label: fTask.name,\n width:\n getTextWidth(getMaxFinallyNode(finallyTaskList)) +\n NODE_PADDING * 2 +\n DEFAULT_FINALLLY_GROUP_PADDING * 2,\n height: DEFAULT_NODE_HEIGHT,\n runAfterTasks: [],\n status: isTaskSkipped\n ? RunStatus.Skipped\n : (fTask.status?.reason as RunStatus),\n whenStatus: getTaskWhenStatus(fTask),\n task: fTask,\n pipelineRun,\n });\n });\n\n const finallyGroup = finallyNodes.length\n ? [\n {\n id: 'finally-group-id',\n type: NodeType.FINALLY_GROUP,\n children: finallyNodes.map(n => n.id),\n group: true,\n style: { padding: DEFAULT_FINALLLY_GROUP_PADDING },\n },\n ]\n : [];\n const spacerNodes: PipelineMixedNodeModel[] = (\n getSpacerNodes([...nodes, ...finallyNodes], NodeType.SPACER_NODE, [\n NodeType.FINALLY_NODE,\n ]) as PipelineMixedNodeModel[]\n ).map(getSpacerNode);\n\n const edges: PipelineEdgeModel[] = getEdgesFromNodes(\n [...nodes, ...spacerNodes, ...finallyNodes],\n NodeType.SPACER_NODE,\n NodeType.EDGE,\n NodeType.EDGE,\n [NodeType.FINALLY_NODE],\n NodeType.EDGE,\n );\n\n return {\n graph: {\n id: `${pipelineRun?.metadata?.name}-graph`,\n type: ModelKind.graph,\n layout: PipelineLayout.DAGRE_VIEWER,\n scaleExtent: [0.5, 1],\n },\n nodes: [\n ...nodes,\n ...spacerNodes,\n ...finallyNodes,\n ...finallyGroup,\n ] as PipelineMixedNodeModel[],\n edges,\n };\n};\n\nexport const getLayoutData = (\n layout: PipelineLayout,\n): dagre.GraphLabel | null => {\n switch (layout) {\n case PipelineLayout.DAGRE_BUILDER:\n return DAGRE_BUILDER_PROPS;\n case PipelineLayout.DAGRE_VIEWER:\n return DAGRE_VIEWER_PROPS;\n case PipelineLayout.DAGRE_VIEWER_SPACED:\n return DAGRE_VIEWER_SPACED_PROPS;\n case PipelineLayout.DAGRE_BUILDER_SPACED:\n return DAGRE_BUILDER_SPACED_PROPS;\n default:\n return null;\n }\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"taskRun-utils.esm.js","sources":["../../src/utils/taskRun-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n TaskRunResultsAnnotations,\n TaskRunResultsKeyValue,\n TaskRunResultsTypeValue,\n} from '@aonic-ui/pipelines';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../consts/tekton-const';\nimport { OutputTaskRunGroup } from '../types/output';\n\nexport type TaskStep = {\n id: string;\n name: string;\n status: ComputedStatus;\n startedAt?: string;\n endedAt?: string;\n};\n\nexport const getSortedTaskRuns = (tRuns: TaskRunKind[]): TaskStep[] => {\n if (!tRuns || tRuns.length === 0) {\n return [];\n }\n const taskRuns = Array.from(tRuns).sort((a, b) => {\n if (a.status?.completionTime) {\n return b.status?.completionTime &&\n new Date(a.status?.completionTime ?? '') >\n new Date(b.status.completionTime)\n ? 1\n : -1;\n }\n return b.status?.completionTime ||\n new Date(a.status?.startTime ?? '') > new Date(b.status?.startTime ?? '')\n ? 1\n : -1;\n });\n return (taskRuns?.map(tr => {\n return {\n id: tr.metadata?.name,\n name: tr.metadata?.labels?.[TEKTON_PIPELINE_TASK],\n status: pipelineRunFilterReducer(tr),\n startedAt: tr.status?.startTime,\n endedAt: tr.status?.completionTime,\n };\n }) || []) as TaskStep[];\n};\n\nexport const getActiveTaskRun = (\n taskRuns: TaskStep[],\n activeTask: string | undefined,\n): string | undefined =>\n activeTask\n ? taskRuns.find(taskRun => taskRun?.id === activeTask)?.id\n : taskRuns[taskRuns.length - 1]?.id;\n\nconst checkTypeAnnotation = (\n tr: TaskRunKind | undefined,\n type: TaskRunResultsTypeValue,\n): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] === type;\n\nexport const isSbomTaskRun = (tr: TaskRunKind | undefined): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.KEY] ===\n TaskRunResultsKeyValue.SBOM;\n\nexport const isECTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.EC);\n\nexport const isACSImageScanTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_SCAN);\n\nexport const isACSImageCheckTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_CHECK);\n\nexport const isACSDeploymentCheckTaskRun = (\n tr: TaskRunKind | undefined,\n): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_DEPLOYMENT_CHECK);\n\nexport const getTaskrunsOutputGroup = (\n pipelineRunName: string | undefined,\n taskruns: TaskRunKind[],\n): OutputTaskRunGroup => {\n const getPLRTaskRunByType = (\n check: (tr: TaskRunKind | undefined) => boolean,\n ): TaskRunKind | undefined =>\n taskruns?.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] === pipelineRunName &&\n check(tr),\n );\n\n return {\n sbomTaskRun: getPLRTaskRunByType(isSbomTaskRun),\n ecTaskRun: getPLRTaskRunByType(isECTaskRun),\n acsImageScanTaskRun: getPLRTaskRunByType(isACSImageScanTaskRun),\n acsImageCheckTaskRun: getPLRTaskRunByType(isACSImageCheckTaskRun),\n acsDeploymentCheckTaskRun: getPLRTaskRunByType(isACSDeploymentCheckTaskRun),\n };\n};\n\nexport const hasExternalLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): boolean =>\n sbomTaskRun?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] ===\n TaskRunResultsTypeValue.EXTERNAL_LINK;\n\nexport const getSbomLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): string | undefined =>\n (sbomTaskRun?.status?.results || sbomTaskRun?.status?.taskResults)?.find(\n r => r.name === TaskRunResultsKeyValue.SBOM,\n )?.value;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taskRun-utils.esm.js","sources":["../../src/utils/taskRun-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n TaskRunResultsAnnotations,\n TaskRunResultsKeyValue,\n TaskRunResultsTypeValue,\n} from '@aonic-ui/pipelines';\n\nimport {\n ComputedStatus,\n pipelineRunFilterReducer,\n TaskRunKind,\n} from '@janus-idp/shared-react';\n\nimport {\n TEKTON_PIPELINE_RUN,\n TEKTON_PIPELINE_TASK,\n} from '../consts/tekton-const';\nimport { OutputTaskRunGroup } from '../types/output';\n\nexport type TaskStep = {\n id: string;\n name: string;\n status: ComputedStatus;\n startedAt?: string;\n endedAt?: string;\n};\n\nexport const getSortedTaskRuns = (tRuns: TaskRunKind[]): TaskStep[] => {\n if (!tRuns || tRuns.length === 0) {\n return [];\n }\n const taskRuns = Array.from(tRuns).sort((a, b) => {\n if (a.status?.completionTime) {\n return b.status?.completionTime &&\n new Date(a.status?.completionTime ?? '') >\n new Date(b.status.completionTime)\n ? 1\n : -1;\n }\n return b.status?.completionTime ||\n new Date(a.status?.startTime ?? '') > new Date(b.status?.startTime ?? '')\n ? 1\n : -1;\n });\n return (taskRuns?.map(tr => {\n return {\n id: tr.metadata?.name,\n name: tr.metadata?.labels?.[TEKTON_PIPELINE_TASK],\n status: pipelineRunFilterReducer(tr),\n startedAt: tr.status?.startTime,\n endedAt: tr.status?.completionTime,\n };\n }) || []) as TaskStep[];\n};\n\nexport const getActiveTaskRun = (\n taskRuns: TaskStep[],\n activeTask: string | undefined,\n): string | undefined =>\n activeTask\n ? taskRuns.find(taskRun => taskRun?.id === activeTask)?.id\n : taskRuns[taskRuns.length - 1]?.id;\n\nconst checkTypeAnnotation = (\n tr: TaskRunKind | undefined,\n type: TaskRunResultsTypeValue,\n): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] === type;\n\nexport const isSbomTaskRun = (tr: TaskRunKind | undefined): boolean =>\n tr?.metadata?.annotations?.[TaskRunResultsAnnotations.KEY] ===\n TaskRunResultsKeyValue.SBOM;\n\nexport const isECTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.EC);\n\nexport const isACSImageScanTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_SCAN);\n\nexport const isACSImageCheckTaskRun = (tr: TaskRunKind | undefined): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_IMAGE_CHECK);\n\nexport const isACSDeploymentCheckTaskRun = (\n tr: TaskRunKind | undefined,\n): boolean =>\n checkTypeAnnotation(tr, TaskRunResultsTypeValue.ROXCTL_DEPLOYMENT_CHECK);\n\nexport const getTaskrunsOutputGroup = (\n pipelineRunName: string | undefined,\n taskruns: TaskRunKind[],\n): OutputTaskRunGroup => {\n const getPLRTaskRunByType = (\n check: (tr: TaskRunKind | undefined) => boolean,\n ): TaskRunKind | undefined =>\n taskruns?.find(\n (tr: TaskRunKind) =>\n tr?.metadata?.labels?.[TEKTON_PIPELINE_RUN] === pipelineRunName &&\n check(tr),\n );\n\n return {\n sbomTaskRun: getPLRTaskRunByType(isSbomTaskRun),\n ecTaskRun: getPLRTaskRunByType(isECTaskRun),\n acsImageScanTaskRun: getPLRTaskRunByType(isACSImageScanTaskRun),\n acsImageCheckTaskRun: getPLRTaskRunByType(isACSImageCheckTaskRun),\n acsDeploymentCheckTaskRun: getPLRTaskRunByType(isACSDeploymentCheckTaskRun),\n };\n};\n\nexport const hasExternalLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): boolean =>\n sbomTaskRun?.metadata?.annotations?.[TaskRunResultsAnnotations.TYPE] ===\n TaskRunResultsTypeValue.EXTERNAL_LINK;\n\nexport const getSbomLink = (\n sbomTaskRun: TaskRunKind | undefined,\n): string | undefined =>\n (sbomTaskRun?.status?.results || sbomTaskRun?.status?.taskResults)?.find(\n r => r.name === TaskRunResultsKeyValue.SBOM,\n )?.value;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tekton-utils.esm.js","sources":["../../src/utils/tekton-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ClusterObjects,\n ObjectsByEntityResponse,\n} from '@backstage/plugin-kubernetes-common';\n\nimport { pluralize } from '@patternfly/react-core';\nimport { get } from 'lodash';\n\nimport {\n ComputedStatus,\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n pipelineRunStatus,\n SucceedConditionReason,\n TaskRunKind,\n TaskStatusTypes,\n updateTaskStatus,\n} from '@janus-idp/shared-react';\n\nimport { getPipelineRunScanResults } from '../hooks/usePipelineRunScanResults';\nimport { PipelineRunGVK, TaskRunGVK } from '../models';\nimport {\n ClusterErrors,\n Order,\n PipelineRunScanResults,\n TektonResponseData,\n} from '../types/types';\n\nexport const getClusters = (k8sObjects: ObjectsByEntityResponse) => {\n const clusters: string[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.cluster.name,\n );\n const errors: ClusterErrors[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.errors,\n );\n return { clusters, errors };\n};\n\nconst isTektonResource = (kind: string) =>\n [PipelineRunGVK.kind, TaskRunGVK.kind].includes(kind);\n\nconst getResourceType = (kind: string) => {\n switch (kind) {\n case PipelineRunGVK.kind:\n return 'pipelineruns';\n case TaskRunGVK.kind:\n return 'taskruns';\n default:\n return '';\n }\n};\n\nexport const getTektonResources = (\n cluster: number,\n k8sObjects: ObjectsByEntityResponse,\n) =>\n k8sObjects.items?.[cluster]?.resources?.reduce(\n (acc: TektonResponseData, res: any) => {\n if (res.type === 'pods') {\n return {\n ...acc,\n pods: { data: res.resources },\n };\n }\n if (\n res.type !== 'customresources' ||\n (res.type === 'customresources' && res.resources.length === 0)\n ) {\n return acc;\n }\n const customResKind = res.resources[0].kind;\n return {\n ...acc,\n ...(isTektonResource(customResKind) && {\n [getResourceType(customResKind)]: {\n data: res.resources,\n },\n }),\n };\n },\n {},\n );\n\nexport const totalPipelineRunTasks = (pipelinerun: PipelineRunKind): number => {\n if (!pipelinerun?.status?.pipelineSpec) {\n return 0;\n }\n const totalTasks = (pipelinerun.status.pipelineSpec?.tasks || []).length;\n const finallyTasks =\n (pipelinerun.status.pipelineSpec?.finally || []).length ?? 0;\n return totalTasks + finallyTasks;\n};\n\nexport const getTaskStatusOfPLR = (\n pipelinerun: PipelineRunKind,\n taskRuns: TaskRunKind[],\n) => {\n const totalTasks = totalPipelineRunTasks(pipelinerun);\n const plrTasks = getTaskRunsForPipelineRun(pipelinerun, taskRuns);\n const plrTaskLength = plrTasks?.length;\n const skippedTaskLength = pipelinerun?.status?.skippedTasks?.length || 0;\n\n const taskStatus: TaskStatusTypes = updateTaskStatus(pipelinerun, plrTasks);\n\n if (plrTasks?.length > 0) {\n const pipelineRunHasFailure = taskStatus[ComputedStatus.Failed] > 0;\n const pipelineRunIsCancelled =\n pipelineRunFilterReducer(pipelinerun) === ComputedStatus.Cancelled;\n const unhandledTasks =\n totalTasks >= plrTaskLength\n ? totalTasks - plrTaskLength - skippedTaskLength\n : totalTasks;\n\n if (pipelineRunHasFailure || pipelineRunIsCancelled) {\n taskStatus[ComputedStatus.Cancelled] += unhandledTasks;\n } else {\n taskStatus[ComputedStatus.Pending] += unhandledTasks;\n }\n } else if (\n pipelinerun?.status?.conditions?.[0]?.status === 'False' ||\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunCancelled\n ) {\n taskStatus[ComputedStatus.Cancelled] = totalTasks;\n } else if (\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunPending\n ) {\n taskStatus[ComputedStatus.Pending] += totalTasks;\n } else {\n taskStatus[ComputedStatus.PipelineNotStarted]++;\n }\n return taskStatus;\n};\n\nexport const getDuration = (seconds: number, long?: boolean): string => {\n if (seconds === 0) {\n return 'less than a sec';\n }\n let sec = Math.round(seconds);\n let min = 0;\n let hr = 0;\n let duration = '';\n if (sec >= 60) {\n min = Math.floor(sec / 60);\n sec %= 60;\n }\n if (min >= 60) {\n hr = Math.floor(min / 60);\n min %= 60;\n }\n if (hr > 0) {\n duration += long ? pluralize(hr, 'hour', 'hours') : `${hr}h`;\n duration += ' ';\n }\n if (min > 0) {\n duration += long ? pluralize(min, 'minute', 'minutes') : `${min}m`;\n duration += ' ';\n }\n if (sec > 0) {\n duration += long ? pluralize(sec, 'second', 'seconds') : `${sec}s`;\n }\n\n return duration.trim();\n};\n\nexport const descendingComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n orderBy: string,\n) => {\n if (get(b, orderBy) < get(a, orderBy)) {\n return -1;\n }\n if (get(b, orderBy) > get(a, orderBy)) {\n return 1;\n }\n return 0;\n};\n\nexport const calculateDurationInSeconds = (\n startTime: string,\n endTime?: string,\n) => {\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : new Date().getTime();\n const durationInSeconds = (end - start) / 1000;\n return durationInSeconds;\n};\n\nexport const durationComparator = (a: PipelineRunKind, b: PipelineRunKind) => {\n const durationA = a.status?.startTime\n ? calculateDurationInSeconds(a.status?.startTime, a.status?.completionTime)\n : 0;\n\n const durationB = b.status?.startTime\n ? calculateDurationInSeconds(b.status?.startTime, b.status?.completionTime)\n : 0;\n\n if (durationB < durationA) {\n return -1;\n }\n if (durationB > durationA) {\n return 1;\n }\n return 0;\n};\n\nconst vulnerabilitiesSortValue = (\n scanResults: PipelineRunScanResults,\n): number => {\n if (!scanResults?.vulnerabilities) {\n return -1;\n }\n // Expect no more than 999 of any one severity\n return (\n (scanResults.vulnerabilities.critical ?? 0) * 1000000000 +\n (scanResults.vulnerabilities.high ?? 0) * 1000000 +\n (scanResults.vulnerabilities.medium ?? 0) * 1000 +\n (scanResults.vulnerabilities.low ?? 0)\n );\n};\n\nexport const vulnerabilitiesComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n) => {\n const vulnerabilitiesSortValueA = vulnerabilitiesSortValue(\n getPipelineRunScanResults(a),\n );\n const vulnerabilitiesSortValueB = vulnerabilitiesSortValue(\n getPipelineRunScanResults(b),\n );\n\n if (vulnerabilitiesSortValueB < vulnerabilitiesSortValueA) {\n return -1;\n }\n if (vulnerabilitiesSortValueB > vulnerabilitiesSortValueA) {\n return 1;\n }\n return 0;\n};\n\nexport const getComparator = (\n order: Order,\n orderBy: string,\n orderById: string,\n) => {\n switch (orderById) {\n case 'duration':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? durationComparator(a, b)\n : -durationComparator(a, b);\n };\n case 'vulnerabilities':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? vulnerabilitiesComparator(a, b)\n : -vulnerabilitiesComparator(a, b);\n };\n default:\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? descendingComparator(a, b, orderBy)\n : -descendingComparator(a, b, orderBy);\n };\n }\n};\n\nexport const calculateDuration = (\n startTime: string,\n endTime?: string,\n long?: boolean,\n) => {\n const durationInSeconds = calculateDurationInSeconds(startTime, endTime);\n return getDuration(durationInSeconds, long);\n};\n\nexport const pipelineRunDuration = (run: PipelineRunKind): string => {\n if (!run || Object.keys(run).length === 0) {\n return '-';\n }\n const startTime = run.status?.startTime;\n const completionTime = run.status?.completionTime;\n\n // Duration cannot be computed if start time is missing or a completed/failed pipeline/task has no end time\n if (!startTime || (!completionTime && pipelineRunStatus(run) !== 'Running')) {\n return '-';\n }\n return calculateDuration(startTime, completionTime, true);\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekton-utils.esm.js","sources":["../../src/utils/tekton-utils.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ClusterObjects,\n ObjectsByEntityResponse,\n} from '@backstage/plugin-kubernetes-common';\n\nimport { pluralize } from '@patternfly/react-core';\nimport { get } from 'lodash';\n\nimport {\n ComputedStatus,\n getTaskRunsForPipelineRun,\n pipelineRunFilterReducer,\n PipelineRunKind,\n pipelineRunStatus,\n SucceedConditionReason,\n TaskRunKind,\n TaskStatusTypes,\n updateTaskStatus,\n} from '@janus-idp/shared-react';\n\nimport { getPipelineRunScanResults } from '../hooks/usePipelineRunScanResults';\nimport { PipelineRunGVK, TaskRunGVK } from '../models';\nimport {\n ClusterErrors,\n Order,\n PipelineRunScanResults,\n TektonResponseData,\n} from '../types/types';\n\nexport const getClusters = (k8sObjects: ObjectsByEntityResponse) => {\n const clusters: string[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.cluster.name,\n );\n const errors: ClusterErrors[] = k8sObjects.items.map(\n (item: ClusterObjects) => item.errors,\n );\n return { clusters, errors };\n};\n\nconst isTektonResource = (kind: string) =>\n [PipelineRunGVK.kind, TaskRunGVK.kind].includes(kind);\n\nconst getResourceType = (kind: string) => {\n switch (kind) {\n case PipelineRunGVK.kind:\n return 'pipelineruns';\n case TaskRunGVK.kind:\n return 'taskruns';\n default:\n return '';\n }\n};\n\nexport const getTektonResources = (\n cluster: number,\n k8sObjects: ObjectsByEntityResponse,\n) =>\n k8sObjects.items?.[cluster]?.resources?.reduce(\n (acc: TektonResponseData, res: any) => {\n if (res.type === 'pods') {\n return {\n ...acc,\n pods: { data: res.resources },\n };\n }\n if (\n res.type !== 'customresources' ||\n (res.type === 'customresources' && res.resources.length === 0)\n ) {\n return acc;\n }\n const customResKind = res.resources[0].kind;\n return {\n ...acc,\n ...(isTektonResource(customResKind) && {\n [getResourceType(customResKind)]: {\n data: res.resources,\n },\n }),\n };\n },\n {},\n );\n\nexport const totalPipelineRunTasks = (pipelinerun: PipelineRunKind): number => {\n if (!pipelinerun?.status?.pipelineSpec) {\n return 0;\n }\n const totalTasks = (pipelinerun.status.pipelineSpec?.tasks || []).length;\n const finallyTasks =\n (pipelinerun.status.pipelineSpec?.finally || []).length ?? 0;\n return totalTasks + finallyTasks;\n};\n\nexport const getTaskStatusOfPLR = (\n pipelinerun: PipelineRunKind,\n taskRuns: TaskRunKind[],\n) => {\n const totalTasks = totalPipelineRunTasks(pipelinerun);\n const plrTasks = getTaskRunsForPipelineRun(pipelinerun, taskRuns);\n const plrTaskLength = plrTasks?.length;\n const skippedTaskLength = pipelinerun?.status?.skippedTasks?.length || 0;\n\n const taskStatus: TaskStatusTypes = updateTaskStatus(pipelinerun, plrTasks);\n\n if (plrTasks?.length > 0) {\n const pipelineRunHasFailure = taskStatus[ComputedStatus.Failed] > 0;\n const pipelineRunIsCancelled =\n pipelineRunFilterReducer(pipelinerun) === ComputedStatus.Cancelled;\n const unhandledTasks =\n totalTasks >= plrTaskLength\n ? totalTasks - plrTaskLength - skippedTaskLength\n : totalTasks;\n\n if (pipelineRunHasFailure || pipelineRunIsCancelled) {\n taskStatus[ComputedStatus.Cancelled] += unhandledTasks;\n } else {\n taskStatus[ComputedStatus.Pending] += unhandledTasks;\n }\n } else if (\n pipelinerun?.status?.conditions?.[0]?.status === 'False' ||\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunCancelled\n ) {\n taskStatus[ComputedStatus.Cancelled] = totalTasks;\n } else if (\n pipelinerun?.spec?.status === SucceedConditionReason.PipelineRunPending\n ) {\n taskStatus[ComputedStatus.Pending] += totalTasks;\n } else {\n taskStatus[ComputedStatus.PipelineNotStarted]++;\n }\n return taskStatus;\n};\n\nexport const getDuration = (seconds: number, long?: boolean): string => {\n if (seconds === 0) {\n return 'less than a sec';\n }\n let sec = Math.round(seconds);\n let min = 0;\n let hr = 0;\n let duration = '';\n if (sec >= 60) {\n min = Math.floor(sec / 60);\n sec %= 60;\n }\n if (min >= 60) {\n hr = Math.floor(min / 60);\n min %= 60;\n }\n if (hr > 0) {\n duration += long ? pluralize(hr, 'hour', 'hours') : `${hr}h`;\n duration += ' ';\n }\n if (min > 0) {\n duration += long ? pluralize(min, 'minute', 'minutes') : `${min}m`;\n duration += ' ';\n }\n if (sec > 0) {\n duration += long ? pluralize(sec, 'second', 'seconds') : `${sec}s`;\n }\n\n return duration.trim();\n};\n\nexport const descendingComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n orderBy: string,\n) => {\n if (get(b, orderBy) < get(a, orderBy)) {\n return -1;\n }\n if (get(b, orderBy) > get(a, orderBy)) {\n return 1;\n }\n return 0;\n};\n\nexport const calculateDurationInSeconds = (\n startTime: string,\n endTime?: string,\n) => {\n const start = new Date(startTime).getTime();\n const end = endTime ? new Date(endTime).getTime() : new Date().getTime();\n const durationInSeconds = (end - start) / 1000;\n return durationInSeconds;\n};\n\nexport const durationComparator = (a: PipelineRunKind, b: PipelineRunKind) => {\n const durationA = a.status?.startTime\n ? calculateDurationInSeconds(a.status?.startTime, a.status?.completionTime)\n : 0;\n\n const durationB = b.status?.startTime\n ? calculateDurationInSeconds(b.status?.startTime, b.status?.completionTime)\n : 0;\n\n if (durationB < durationA) {\n return -1;\n }\n if (durationB > durationA) {\n return 1;\n }\n return 0;\n};\n\nconst vulnerabilitiesSortValue = (\n scanResults: PipelineRunScanResults,\n): number => {\n if (!scanResults?.vulnerabilities) {\n return -1;\n }\n // Expect no more than 999 of any one severity\n return (\n (scanResults.vulnerabilities.critical ?? 0) * 1000000000 +\n (scanResults.vulnerabilities.high ?? 0) * 1000000 +\n (scanResults.vulnerabilities.medium ?? 0) * 1000 +\n (scanResults.vulnerabilities.low ?? 0)\n );\n};\n\nexport const vulnerabilitiesComparator = (\n a: PipelineRunKind,\n b: PipelineRunKind,\n) => {\n const vulnerabilitiesSortValueA = vulnerabilitiesSortValue(\n getPipelineRunScanResults(a),\n );\n const vulnerabilitiesSortValueB = vulnerabilitiesSortValue(\n getPipelineRunScanResults(b),\n );\n\n if (vulnerabilitiesSortValueB < vulnerabilitiesSortValueA) {\n return -1;\n }\n if (vulnerabilitiesSortValueB > vulnerabilitiesSortValueA) {\n return 1;\n }\n return 0;\n};\n\nexport const getComparator = (\n order: Order,\n orderBy: string,\n orderById: string,\n) => {\n switch (orderById) {\n case 'duration':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? durationComparator(a, b)\n : -durationComparator(a, b);\n };\n case 'vulnerabilities':\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? vulnerabilitiesComparator(a, b)\n : -vulnerabilitiesComparator(a, b);\n };\n default:\n return (a: PipelineRunKind, b: PipelineRunKind) => {\n return order === 'desc'\n ? descendingComparator(a, b, orderBy)\n : -descendingComparator(a, b, orderBy);\n };\n }\n};\n\nexport const calculateDuration = (\n startTime: string,\n endTime?: string,\n long?: boolean,\n) => {\n const durationInSeconds = calculateDurationInSeconds(startTime, endTime);\n return getDuration(durationInSeconds, long);\n};\n\nexport const pipelineRunDuration = (run: PipelineRunKind): string => {\n if (!run || Object.keys(run).length === 0) {\n return '-';\n }\n const startTime = run.status?.startTime;\n const completionTime = run.status?.completionTime;\n\n // Duration cannot be computed if start time is missing or a completed/failed pipeline/task has no end time\n if (!startTime || (!completionTime && pipelineRunStatus(run) !== 'Running')) {\n return '-';\n }\n return calculateDuration(startTime, completionTime, true);\n};\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-tekton",
3
- "version": "3.16.5",
3
+ "version": "3.18.0",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "backstage": {
13
13
  "role": "frontend-plugin",
14
- "supported-versions": "^1.32.0",
14
+ "supported-versions": "1.35.0",
15
15
  "pluginId": "tekton",
16
16
  "pluginPackage": "@backstage-community/plugin-tekton",
17
17
  "pluginPackages": [
@@ -34,28 +34,28 @@
34
34
  "prepublish": "./fix-style-inject-imports.sh"
35
35
  },
36
36
  "dependencies": {
37
- "@aonic-ui/pipelines": "^1.1.1",
38
- "@backstage-community/plugin-tekton-common": "^1.4.0",
39
- "@backstage/catalog-model": "^1.7.0",
40
- "@backstage/core-components": "^0.15.1",
41
- "@backstage/core-plugin-api": "^1.10.0",
42
- "@backstage/plugin-catalog-react": "^1.14.0",
43
- "@backstage/plugin-kubernetes": "^0.11.16",
44
- "@backstage/plugin-kubernetes-common": "^0.8.3",
45
- "@backstage/plugin-kubernetes-react": "^0.4.4",
46
- "@backstage/plugin-permission-react": "^0.4.27",
47
- "@backstage/theme": "^0.6.0",
37
+ "@aonic-ui/pipelines": "^3.0.0",
38
+ "@backstage-community/plugin-tekton-common": "^1.5.0",
39
+ "@backstage/catalog-model": "^1.7.3",
40
+ "@backstage/core-components": "^0.16.3",
41
+ "@backstage/core-plugin-api": "^1.10.3",
42
+ "@backstage/plugin-catalog-react": "^1.15.1",
43
+ "@backstage/plugin-kubernetes": "^0.12.3",
44
+ "@backstage/plugin-kubernetes-common": "^0.9.2",
45
+ "@backstage/plugin-kubernetes-react": "^0.5.3",
46
+ "@backstage/plugin-permission-react": "^0.4.30",
47
+ "@backstage/theme": "^0.6.3",
48
48
  "@janus-idp/shared-react": "^2.13.1",
49
49
  "@kubernetes/client-node": "^0.22.1",
50
50
  "@material-ui/core": "^4.9.13",
51
51
  "@material-ui/icons": "^4.11.3",
52
52
  "@material-ui/lab": "^4.0.0-alpha.45",
53
53
  "@mui/icons-material": "5.15.17",
54
- "@patternfly/patternfly": "^5.1.0",
54
+ "@patternfly/patternfly": "^6.0.0",
55
55
  "@patternfly/react-charts": "^7.1.1",
56
- "@patternfly/react-core": "^5.1.2",
57
- "@patternfly/react-tokens": "^5.1.2",
58
- "@patternfly/react-topology": "^5.1.0",
56
+ "@patternfly/react-core": "^6.0.0",
57
+ "@patternfly/react-tokens": "^6.0.0",
58
+ "@patternfly/react-topology": "^6.0.0",
59
59
  "classnames": "^2.3.2",
60
60
  "dagre": "^0.8.5",
61
61
  "lodash": "^4.17.21",
@@ -68,10 +68,10 @@
68
68
  "react-router-dom": "^6.0.0"
69
69
  },
70
70
  "devDependencies": {
71
- "@backstage/cli": "0.28.2",
72
- "@backstage/core-app-api": "1.15.1",
73
- "@backstage/dev-utils": "1.1.2",
74
- "@backstage/test-utils": "1.7.0",
71
+ "@backstage/cli": "^0.29.5",
72
+ "@backstage/core-app-api": "^1.15.4",
73
+ "@backstage/dev-utils": "^1.1.6",
74
+ "@backstage/test-utils": "^1.7.4",
75
75
  "@playwright/test": "1.49.1",
76
76
  "@redhat-developer/red-hat-developer-hub-theme": "0.4.0",
77
77
  "@testing-library/jest-dom": "6.6.3",
@@ -111,5 +111,12 @@
111
111
  "@divyanshiGupta"
112
112
  ],
113
113
  "author": "Red Hat",
114
+ "typesVersions": {
115
+ "*": {
116
+ "index": [
117
+ "dist/index.d.ts"
118
+ ]
119
+ }
120
+ },
114
121
  "module": "./dist/index.esm.js"
115
122
  }