@openshift-assisted/ui-lib 2.47.0 → 2.47.2

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 (46) hide show
  1. package/build/@types/common/components/clusterConfiguration/utils.d.ts +1 -3
  2. package/build/@types/common/components/clusterConfiguration/utils.d.ts.map +1 -1
  3. package/build/@types/common/components/ui/formik/validationSchemas.d.ts.map +1 -1
  4. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.d.ts.map +1 -1
  5. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.d.ts.map +1 -1
  6. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.d.ts.map +1 -1
  7. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.d.ts.map +1 -1
  8. package/build/@types/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.d.ts.map +1 -1
  9. package/build/@types/ocm/components/clusterDetail/ClusterProperties.d.ts.map +1 -1
  10. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts.map +1 -1
  11. package/build/cjs/common/components/clusterConfiguration/utils.js.map +1 -1
  12. package/build/cjs/common/components/ui/formik/validationSchemas.js +110 -6
  13. package/build/cjs/common/components/ui/formik/validationSchemas.js.map +1 -1
  14. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.js +31 -0
  15. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.js.map +1 -1
  16. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js +23 -4
  17. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js.map +1 -1
  18. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js +9 -3
  19. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js.map +1 -1
  20. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js +22 -4
  21. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js.map +1 -1
  22. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js +1 -1
  23. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js.map +1 -1
  24. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js +27 -9
  25. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js.map +1 -1
  26. package/build/cjs/ocm/components/clusterDetail/ClusterProperties.js +2 -2
  27. package/build/cjs/ocm/components/clusterDetail/ClusterProperties.js.map +1 -1
  28. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js +3 -1
  29. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js.map +1 -1
  30. package/build/cjs/ocm/components/clusters/AssistedInstallerHeader.js +1 -1
  31. package/build/cjs/ocm/components/clusters/AssistedInstallerHeader.js.map +1 -1
  32. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js +0 -3
  33. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js.map +1 -1
  34. package/lib/common/components/clusterConfiguration/utils.ts +1 -3
  35. package/lib/common/components/ui/formik/validationSchemas.ts +132 -16
  36. package/lib/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.tsx +29 -0
  37. package/lib/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.tsx +25 -3
  38. package/lib/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.tsx +20 -4
  39. package/lib/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.tsx +66 -5
  40. package/lib/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.ts +1 -1
  41. package/lib/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.tsx +39 -14
  42. package/lib/ocm/components/clusterDetail/ClusterProperties.tsx +2 -2
  43. package/lib/ocm/components/clusterWizard/OperatorsBundle.tsx +3 -1
  44. package/lib/ocm/components/clusters/AssistedInstallerHeader.tsx +1 -1
  45. package/lib/ocm/components/featureSupportLevels/featureStateUtils.ts +1 -3
  46. package/package.json +3 -3
@@ -68,11 +68,12 @@ export const StackTypeControlGroup = ({
68
68
  const setSingleStack = React.useCallback(() => {
69
69
  setFieldValue('stackType', IPV4_STACK);
70
70
 
71
+ // Determine whether the first machine network is IPv4
72
+ const firstNetwork = values.machineNetworks?.[0];
73
+ const isFirstIPv4 = Boolean(firstNetwork?.cidr && Address4.isValid(firstNetwork.cidr));
74
+
71
75
  if (values.machineNetworks && values.machineNetworks?.length >= 2) {
72
76
  // For single-stack IPv4, prefer IPv4 machine network
73
- const firstNetwork = values.machineNetworks[0];
74
- const isFirstIPv4 = firstNetwork?.cidr && Address4.isValid(firstNetwork.cidr);
75
-
76
77
  if (isFirstIPv4) {
77
78
  // Keep the first network if it's IPv4
78
79
  setFieldValue('machineNetworks', [firstNetwork]);
@@ -123,6 +124,24 @@ export const StackTypeControlGroup = ({
123
124
  setFieldValue('serviceNetworks', [ipv4Service]);
124
125
  }
125
126
 
127
+ // Keep only IPv4 VIPs when switching to single-stack (unless DHCP allocation is used)
128
+ if (!values.vipDhcpAllocation) {
129
+ const pruneVips = (
130
+ vips?: { ip?: string; clusterId?: Cluster['id'] }[],
131
+ ): { ip: string; clusterId: Cluster['id'] }[] => {
132
+ if (!vips || vips.length === 0) return [];
133
+ // Choose which index to keep based on whether the first network is IPv4
134
+ const keepIndex = isFirstIPv4 ? 0 : 1;
135
+ const chosen = vips[keepIndex];
136
+ return chosen && chosen.ip
137
+ ? [{ ip: chosen.ip, clusterId: chosen.clusterId || clusterId }]
138
+ : [];
139
+ };
140
+
141
+ setFieldValue('apiVips', pruneVips(values.apiVips));
142
+ setFieldValue('ingressVips', pruneVips(values.ingressVips));
143
+ }
144
+
126
145
  void validateForm();
127
146
  }, [
128
147
  setFieldValue,
@@ -133,6 +152,9 @@ export const StackTypeControlGroup = ({
133
152
  values.clusterNetworks,
134
153
  values.machineNetworks,
135
154
  values.serviceNetworks,
155
+ values.apiVips,
156
+ values.ingressVips,
157
+ values.vipDhcpAllocation,
136
158
  ]);
137
159
 
138
160
  const setDualStack = () => {
@@ -6,9 +6,16 @@ import {
6
6
  MenuToggle,
7
7
  MenuToggleElement,
8
8
  MenuToggleProps,
9
+ Divider,
9
10
  } from '@patternfly/react-core';
10
11
  import { useField } from 'formik';
11
- import { getFieldId, HostSubnet, NO_SUBNET_SET } from '../../../../common';
12
+ import {
13
+ getFieldId,
14
+ HostSubnet,
15
+ NO_SUBNET_SET,
16
+ TechnologyPreview,
17
+ PreviewBadgePosition,
18
+ } from '../../../../common';
12
19
  import { Address4, Address6 } from 'ip-address';
13
20
 
14
21
  type SubnetsDropdownProps = {
@@ -62,7 +69,8 @@ export const SubnetsDropdown = ({
62
69
  const ipv4Subnets = machineSubnets.filter((subnet) => Address4.isValid(subnet.subnet));
63
70
  const ipv6Subnets = machineSubnets.filter((subnet) => Address6.isValid(subnet.subnet));
64
71
 
65
- let currentDisplayValue = itemsSubnets[0].label; // The placeholder is the fallback
72
+ let currentDisplayValue =
73
+ itemsSubnets.length > 1 ? itemsSubnets[1].label : itemsSubnets[0].label; // The placeholder is the fallback in some cases
66
74
  if (field.value) {
67
75
  const subnetItem = itemsSubnets.find((item) => item.value === field.value);
68
76
  if (subnetItem) {
@@ -100,7 +108,7 @@ export const SubnetsDropdown = ({
100
108
  {label}
101
109
  </DropdownItem>
102
110
  ));
103
-
111
+ ipv4Items.push(<Divider key="ipv4-divider" />);
104
112
  const ipv6Items = toFormSelectOptions(ipv6Subnets).map(({ value, label, isDisabled }) => (
105
113
  <DropdownItem key={value} id={value} isDisabled={isDisabled} value={value}>
106
114
  {label}
@@ -119,7 +127,7 @@ export const SubnetsDropdown = ({
119
127
  <DropdownGroup label="IPv4" key="ipv4-group">
120
128
  {ipv4Items}
121
129
  </DropdownGroup>,
122
- <DropdownGroup label="IPv6" key="ipv6-group">
130
+ <DropdownGroup label="IPv6 (Technology Preview)" key="ipv6-group">
123
131
  {ipv6Items}
124
132
  </DropdownGroup>,
125
133
  ];
@@ -138,6 +146,9 @@ export const SubnetsDropdown = ({
138
146
  setOpen(false);
139
147
  };
140
148
 
149
+ const currentItem = itemsSubnets.find((i) => i.label === currentDisplayValue);
150
+ const showBadge = Boolean(currentItem && Address6.isValid(currentItem.value));
151
+
141
152
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
142
153
  <MenuToggle
143
154
  ref={toggleRef}
@@ -150,6 +161,11 @@ export const SubnetsDropdown = ({
150
161
  {...props}
151
162
  >
152
163
  {currentDisplayValue}
164
+ {showBadge && (
165
+ <span onClick={(e) => e.stopPropagation()}>
166
+ <TechnologyPreview position={PreviewBadgePosition.inlineRight} />
167
+ </span>
168
+ )}
153
169
  </MenuToggle>
154
170
  );
155
171
 
@@ -14,6 +14,7 @@ import {
14
14
  NetworkConfigurationValues,
15
15
  FormikStaticField,
16
16
  NETWORK_TYPE_SDN,
17
+ DUAL_STACK,
17
18
  selectMachineNetworkCIDR,
18
19
  getVipValidationsById,
19
20
  PopoverIcon,
@@ -24,7 +25,12 @@ import { selectCurrentClusterPermissionsState } from '../../../store/slices/curr
24
25
  import { OcmCheckboxField, OcmInputField } from '../../ui/OcmFormFields';
25
26
  import { useTranslation } from '../../../../common/hooks/use-translation-wrapper';
26
27
  import NewFeatureSupportLevelBadge from '../../../../common/components/newFeatureSupportLevels/NewFeatureSupportLevelBadge';
27
- import { Cluster, Ip, SupportLevel } from '@openshift-assisted/types/assisted-installer-service';
28
+ import {
29
+ ApiVip,
30
+ Cluster,
31
+ Ip,
32
+ SupportLevel,
33
+ } from '@openshift-assisted/types/assisted-installer-service';
28
34
 
29
35
  interface VipStaticValueProps {
30
36
  id?: string;
@@ -96,6 +102,7 @@ export const VirtualIPControlGroup = ({
96
102
  );
97
103
 
98
104
  const enableAllocation = values.networkType === NETWORK_TYPE_SDN;
105
+ const isDualStack = values.stackType === DUAL_STACK;
99
106
 
100
107
  React.useEffect(() => {
101
108
  if (!isViewerMode && !enableAllocation) {
@@ -112,8 +119,20 @@ export const VirtualIPControlGroup = ({
112
119
  [cluster.apiVips, cluster.ingressVips, setFieldValue],
113
120
  );
114
121
 
115
- const setVipValue = (field: string, e: React.ChangeEvent<HTMLInputElement>) => {
116
- setFieldValue(field, [{ ip: e.target.value, clusterId: cluster.id }], true);
122
+ const setVipValueAtIndex = (
123
+ field: 'apiVips' | 'ingressVips',
124
+ index: number,
125
+ e: React.ChangeEvent<HTMLInputElement>,
126
+ ) => {
127
+ const fieldArray: ApiVip[] =
128
+ field === 'apiVips' ? values.apiVips || [] : values.ingressVips || [];
129
+ const next: ApiVip[] = Array.isArray(fieldArray) ? [...fieldArray] : [];
130
+ // Ensure array has the desired length
131
+ while (next.length <= index) {
132
+ next.push({ ip: '', clusterId: cluster.id });
133
+ }
134
+ next[index] = { ip: e.target.value, clusterId: cluster.id };
135
+ setFieldValue(field, next, true);
117
136
  };
118
137
 
119
138
  return (
@@ -194,11 +213,30 @@ export const VirtualIPControlGroup = ({
194
213
  name="apiVips.0.ip"
195
214
  helperText={ipHelperText}
196
215
  isRequired
216
+ labelInfo={isDualStack ? 'Primary' : undefined}
197
217
  onChange={(e) =>
198
- setVipValue('apiVips', e as React.ChangeEvent<HTMLInputElement>)
218
+ setVipValueAtIndex('apiVips', 0, e as React.ChangeEvent<HTMLInputElement>)
199
219
  }
200
220
  />
201
221
  </StackItem>
222
+ {isDualStack && (
223
+ <StackItem>
224
+ <OcmInputField
225
+ label={
226
+ <>
227
+ <span>API IP</span> <PopoverIcon bodyContent={ipPopoverContent} />
228
+ </>
229
+ }
230
+ name="apiVips.1.ip"
231
+ helperText={ipHelperText}
232
+ isRequired
233
+ labelInfo={'Secondary'}
234
+ onChange={(e) =>
235
+ setVipValueAtIndex('apiVips', 1, e as React.ChangeEvent<HTMLInputElement>)
236
+ }
237
+ />
238
+ </StackItem>
239
+ )}
202
240
  <StackItem>
203
241
  <OcmInputField
204
242
  name="ingressVips.0.ip"
@@ -209,11 +247,34 @@ export const VirtualIPControlGroup = ({
209
247
  }
210
248
  helperText={ipHelperText}
211
249
  isRequired
250
+ labelInfo={isDualStack ? 'Primary' : undefined}
212
251
  onChange={(e) =>
213
- setVipValue('ingressVips', e as React.ChangeEvent<HTMLInputElement>)
252
+ setVipValueAtIndex('ingressVips', 0, e as React.ChangeEvent<HTMLInputElement>)
214
253
  }
215
254
  />
216
255
  </StackItem>
256
+ {isDualStack && (
257
+ <StackItem>
258
+ <OcmInputField
259
+ name="ingressVips.1.ip"
260
+ label={
261
+ <>
262
+ <span>Ingress IP</span> <PopoverIcon bodyContent={ipPopoverContent} />
263
+ </>
264
+ }
265
+ helperText={ipHelperText}
266
+ isRequired
267
+ labelInfo={'Secondary'}
268
+ onChange={(e) =>
269
+ setVipValueAtIndex(
270
+ 'ingressVips',
271
+ 1,
272
+ e as React.ChangeEvent<HTMLInputElement>,
273
+ )
274
+ }
275
+ />
276
+ </StackItem>
277
+ )}
217
278
  </Stack>
218
279
  )}
219
280
  </FieldArray>
@@ -34,7 +34,7 @@ export const getNetworkInitialValues = (
34
34
  isClusterManagedNetworkingUnsupported: boolean,
35
35
  ): NetworkConfigurationValues => {
36
36
  const isSNOCluster = isSNO(cluster);
37
- const isDualStackType = isDualStack({ ...cluster, openshiftVersion: cluster.openshiftVersion });
37
+ const isDualStackType = isDualStack(cluster);
38
38
 
39
39
  return {
40
40
  apiVips: cluster.apiVips,
@@ -1,12 +1,7 @@
1
1
  import { Title } from '@patternfly/react-core';
2
2
  import { Table, TableVariant, Tbody, Td, Tr } from '@patternfly/react-table';
3
3
  import React from 'react';
4
- import {
5
- genericTableRowKey,
6
- isDualStack,
7
- selectApiVip,
8
- selectIngressVip,
9
- } from '../../../../common';
4
+ import { genericTableRowKey, isDualStack } from '../../../../common';
10
5
  import {
11
6
  getManagementType,
12
7
  getStackTypeLabel,
@@ -58,7 +53,7 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
58
53
  )),
59
54
  props: { 'data-testid': 'machine-networks' },
60
55
  },
61
- isDualStack({ ...cluster, openshiftVersion: cluster.openshiftVersion })
56
+ isDualStack(cluster)
62
57
  ? {
63
58
  title: cluster.machineNetworks?.map((network, index) => (
64
59
  <span key={network.cidr}>
@@ -78,9 +73,24 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
78
73
  cells: [
79
74
  { title: 'API IP' },
80
75
  {
81
- title: selectApiVip(cluster),
82
- props: { 'data-testid': 'api-vip', colSpan: 2 },
76
+ title: cluster.apiVips?.map((apiVip) => (
77
+ <span key={apiVip.ip}>
78
+ {apiVip.ip}
79
+ <br />
80
+ </span>
81
+ )),
82
+ props: { 'data-testid': 'api-vip' },
83
83
  },
84
+ isDualStack(cluster)
85
+ ? {
86
+ title: cluster.apiVips?.map((apiVip, index) => (
87
+ <span key={apiVip.ip}>
88
+ {index === 0 ? 'Primary' : 'Secondary'}
89
+ <br />
90
+ </span>
91
+ )),
92
+ }
93
+ : { title: '' },
84
94
  ],
85
95
  });
86
96
 
@@ -91,9 +101,24 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
91
101
  cells: [
92
102
  { title: 'Ingress IP' },
93
103
  {
94
- title: selectIngressVip(cluster),
95
- props: { 'data-testid': 'ingress-vip', colSpan: 2 },
104
+ title: cluster.ingressVips?.map((ingressVip) => (
105
+ <span key={ingressVip.ip}>
106
+ {ingressVip.ip}
107
+ <br />
108
+ </span>
109
+ )),
110
+ props: { 'data-testid': 'ingress-vip' },
96
111
  },
112
+ isDualStack(cluster)
113
+ ? {
114
+ title: cluster.ingressVips?.map((ingressVip, index) => (
115
+ <span key={ingressVip.ip}>
116
+ {index === 0 ? 'Primary' : 'Secondary'}
117
+ <br />
118
+ </span>
119
+ )),
120
+ }
121
+ : { title: '' },
97
122
  ],
98
123
  });
99
124
 
@@ -115,7 +140,7 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
115
140
  )),
116
141
  props: { 'data-testid': 'cluster-network-cidr' },
117
142
  },
118
- isDualStack({ ...cluster, openshiftVersion: cluster.openshiftVersion }) && {
143
+ isDualStack(cluster) && {
119
144
  title: cluster.clusterNetworks?.map((network, index) => (
120
145
  <span key={network.cidr}>
121
146
  {index === 0 ? 'Primary' : 'Secondary'}
@@ -138,7 +163,7 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
138
163
  )),
139
164
  props: { 'data-testid': 'cluster-network-prefix' },
140
165
  },
141
- isDualStack({ ...cluster, openshiftVersion: cluster.openshiftVersion }) && {
166
+ isDualStack(cluster) && {
142
167
  title: cluster.clusterNetworks?.map((network, index) => (
143
168
  <span key={network.hostPrefix}>
144
169
  {index === 0 ? 'Primary' : 'Secondary'}
@@ -161,7 +186,7 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
161
186
  )),
162
187
  props: { 'data-testid': 'service-network-cidr' },
163
188
  },
164
- isDualStack({ ...cluster, openshiftVersion: cluster.openshiftVersion }) && {
189
+ isDualStack(cluster) && {
165
190
  title: cluster.serviceNetworks?.map((network, index) => (
166
191
  <span key={network.cidr}>
167
192
  {index === 0 ? 'Primary' : 'Secondary'}
@@ -41,7 +41,7 @@ export const getManagementType = ({ userManagedNetworking }: Cluster): string =>
41
41
  };
42
42
 
43
43
  export const getStackTypeLabel = (cluster: Cluster): string =>
44
- isDualStack({ ...cluster, openshiftVersion: cluster.openshiftVersion }) ? 'Dual-stack' : 'IPv4';
44
+ isDualStack(cluster) ? 'Dual-stack' : 'IPv4';
45
45
 
46
46
  export const getDiskEncryptionEnabledOnStatus = (diskEncryption: DiskEncryption['enableOn']) => {
47
47
  let diskEncryptionType = null;
@@ -67,7 +67,7 @@ export const getDiskEncryptionEnabledOnStatus = (diskEncryption: DiskEncryption[
67
67
 
68
68
  const ClusterProperties = ({ cluster, externalMode = false }: ClusterPropertiesProps) => {
69
69
  const { t } = useTranslation();
70
- const isDualStackType = isDualStack({ ...cluster, openshiftVersion: cluster.openshiftVersion });
70
+ const isDualStackType = isDualStack(cluster);
71
71
  const featureSupportLevelContext = useNewFeatureSupportLevel();
72
72
 
73
73
  const activeFeatureConfiguration = featureSupportLevelContext.activeFeatureConfiguration;
@@ -106,7 +106,9 @@ const BundleCard = ({
106
106
  const disabledReason = hasUnsupportedOperators
107
107
  ? 'Some operators in this bundle are not supported with the current configuration.'
108
108
  : isSNO && bundleSpec?.noSNO
109
- ? 'This bundle is not available when deploying a Single Node OpenShift.'
109
+ ? bundle.id === 'openshift-ai'
110
+ ? 'This bundle is not available when deploying a Single Node OpenShift, but you can use the standalone operator instead.'
111
+ : 'This bundle is not available when deploying a Single Node OpenShift.'
110
112
  : incompatibleBundle
111
113
  ? `Bundle cannot be installed together with ${
112
114
  bundles.find(({ id }) => id === incompatibleBundle)?.title || incompatibleBundle
@@ -24,7 +24,7 @@ export const AssistedInstallerHeader = () => {
24
24
  </SplitItem>
25
25
  {isInOcm && (
26
26
  <SplitItem>
27
- <Content component="a" data-testid="whats-new-link">
27
+ <Content component="a" data-testid="whats-new-link" hidden={true}>
28
28
  What's new in Assisted Installer?
29
29
  </Content>
30
30
  </SplitItem>
@@ -294,9 +294,7 @@ const getOpenShiftAIDisabledReason = (
294
294
  if (isArm) {
295
295
  return `${operatorTitle} is not available when ARM CPU architecture is selected.`;
296
296
  }
297
- if (isSNO(cluster)) {
298
- return `${operatorTitle} is not available when deploying a Single Node OpenShift.`;
299
- }
297
+
300
298
  if (!isSupported) {
301
299
  return `The installer cannot currently enable ${operatorTitle} with the selected OpenShift version, but it can be enabled later through the OpenShift Console once the installation is complete.`;
302
300
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "dependencies": {
3
- "@openshift-assisted/locales": "2.47.0",
4
- "@openshift-assisted/types": "2.47.0",
3
+ "@openshift-assisted/locales": "2.47.2",
4
+ "@openshift-assisted/types": "2.47.2",
5
5
  "@openshift-console/dynamic-plugin-sdk": "0.0.3",
6
6
  "@patternfly/patternfly": "6.2.3",
7
7
  "@patternfly/react-code-editor": "6.2.2",
@@ -140,5 +140,5 @@
140
140
  ]
141
141
  }
142
142
  },
143
- "version": "2.47.0"
143
+ "version": "2.47.2"
144
144
  }