@openshift-migration-advisor/shared-components 0.22.0-aaabd4569e38 → 0.23.0-54185b7f1be8

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 (68) hide show
  1. package/README.md +6 -0
  2. package/dist/charts/index.d.ts +1 -1
  3. package/dist/charts/index.d.ts.map +1 -1
  4. package/dist/forms/RadioButtonFormGroup.d.ts.map +1 -1
  5. package/dist/forms/RadioButtonFormGroup.js +2 -2
  6. package/dist/index.d.ts +3 -3
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -3
  9. package/dist/report/FeatureStatusBadge.d.ts +7 -0
  10. package/dist/report/FeatureStatusBadge.d.ts.map +1 -0
  11. package/dist/report/FeatureStatusBadge.js +13 -0
  12. package/dist/report/HostPowerStates.d.ts +9 -0
  13. package/dist/report/HostPowerStates.d.ts.map +1 -0
  14. package/dist/report/HostPowerStates.js +11 -0
  15. package/dist/report/InfrastructureSummary.d.ts +7 -0
  16. package/dist/report/InfrastructureSummary.d.ts.map +1 -0
  17. package/dist/report/InfrastructureSummary.js +5 -0
  18. package/dist/report/OSDistribution.d.ts.map +1 -1
  19. package/dist/report/OSDistribution.js +5 -13
  20. package/dist/report/OsSupportTiersHelpPopover.d.ts.map +1 -1
  21. package/dist/report/OsSupportTiersHelpPopover.js +2 -31
  22. package/dist/report/OsUpgradeNotice.d.ts.map +1 -1
  23. package/dist/report/OsUpgradeNotice.js +1 -5
  24. package/dist/report/PowerStateCard.d.ts +17 -0
  25. package/dist/report/PowerStateCard.d.ts.map +1 -0
  26. package/dist/report/PowerStateCard.js +7 -0
  27. package/dist/report/SupportTierBadge.d.ts.map +1 -1
  28. package/dist/report/SupportTierBadge.js +4 -2
  29. package/dist/report/VCenterClusterDetails.d.ts +10 -0
  30. package/dist/report/VCenterClusterDetails.d.ts.map +1 -0
  31. package/dist/report/VCenterClusterDetails.js +26 -0
  32. package/dist/report/VmPowerStates.d.ts +9 -0
  33. package/dist/report/VmPowerStates.d.ts.map +1 -0
  34. package/dist/report/VmPowerStates.js +11 -0
  35. package/dist/report/constants.d.ts +2 -0
  36. package/dist/report/constants.d.ts.map +1 -1
  37. package/dist/report/constants.js +2 -0
  38. package/dist/report/index.d.ts +10 -0
  39. package/dist/report/index.d.ts.map +1 -1
  40. package/dist/report/index.js +8 -0
  41. package/dist/report/infrastructureSummary.d.ts +82 -0
  42. package/dist/report/infrastructureSummary.d.ts.map +1 -0
  43. package/dist/report/infrastructureSummary.js +139 -0
  44. package/dist/report/powerStates.d.ts +11 -0
  45. package/dist/report/powerStates.d.ts.map +1 -0
  46. package/dist/report/powerStates.js +113 -0
  47. package/package.json +1 -1
  48. package/src/charts/index.ts +1 -0
  49. package/src/forms/RadioButtonFormGroup.tsx +10 -3
  50. package/src/index.ts +3 -3
  51. package/src/report/FeatureStatusBadge.tsx +30 -0
  52. package/src/report/HostPowerStates.tsx +41 -0
  53. package/src/report/InfrastructureSummary.tsx +56 -0
  54. package/src/report/OSDistribution.tsx +60 -67
  55. package/src/report/OsSupportTiersHelpPopover.tsx +32 -61
  56. package/src/report/OsUpgradeNotice.tsx +1 -7
  57. package/src/report/PowerStateCard.tsx +73 -0
  58. package/src/report/SupportTierBadge.tsx +4 -2
  59. package/src/report/VCenterClusterDetails.tsx +211 -0
  60. package/src/report/VmPowerStates.tsx +41 -0
  61. package/src/report/__tests__/HostPowerStates.test.tsx +47 -0
  62. package/src/report/__tests__/InfrastructureSummary.test.tsx +148 -0
  63. package/src/report/__tests__/infrastructureSummary.test.ts +224 -0
  64. package/src/report/__tests__/powerStates.test.ts +70 -0
  65. package/src/report/constants.ts +2 -0
  66. package/src/report/index.ts +56 -0
  67. package/src/report/infrastructureSummary.ts +281 -0
  68. package/src/report/powerStates.ts +169 -0
package/README.md CHANGED
@@ -8,6 +8,7 @@ Includes:
8
8
  - Guest OS support-tier helpers and badges
9
9
  - Report chart primitives (`MigrationDonutChart`)
10
10
  - Operating Systems distribution card
11
+ - Infrastructure summary, vCenter cluster details, and host/VM power-state cards
11
12
 
12
13
  ## Installation
13
14
 
@@ -23,10 +24,15 @@ npm install @openshift-migration-advisor/shared-components
23
24
 
24
25
  ```tsx
25
26
  import {
27
+ buildInfrastructureSummary,
28
+ HostPowerStates,
29
+ InfrastructureSummary,
26
30
  MigrationDonutChart,
27
31
  OSDistribution,
28
32
  SupportTierBadge,
29
33
  TextInputFormGroup,
34
+ VCenterClusterDetails,
35
+ VmPowerStates,
30
36
  } from "@openshift-migration-advisor/shared-components";
31
37
  ```
32
38
 
@@ -1,2 +1,2 @@
1
- export { MigrationDonutChart, type MigrationDonutChartDatum, type MigrationDonutChartProps, } from "./MigrationDonutChart.js";
1
+ export { MigrationDonutChart, type MigrationDonutChartDatum, type MigrationDonutChartLegendVariant, type MigrationDonutChartProps, } from "./MigrationDonutChart.js";
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,GAC9B,MAAM,0BAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RadioButtonFormGroup.d.ts","sourceRoot":"","sources":["../../src/forms/RadioButtonFormGroup.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,yBACR,SAAQ,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;IAC3C,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,EAAE,EACF,KAAK,EACL,IAAI,EACJ,UAAkB,EAClB,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,yBAAyB,+BAoC3B"}
1
+ {"version":3,"file":"RadioButtonFormGroup.d.ts","sourceRoot":"","sources":["../../src/forms/RadioButtonFormGroup.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,yBACR,SAAQ,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;IAC3C,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,EAAE,EACF,KAAK,EACL,IAAI,EACJ,UAAkB,EAClB,OAAO,EACP,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,yBAAyB,+BA2C3B"}
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { FormGroup, Radio } from "@patternfly/react-core";
3
3
  import { Controller, useFormContext } from "react-hook-form";
4
4
  import FormFieldHelperText from "./FormFieldHelperText.js";
@@ -8,5 +8,5 @@ export default function RadioButtonFormGroup({ id, label, name, isRequired = fal
8
8
  const isTouched = methods.formState.touchedFields[name];
9
9
  const isSubmitted = methods.formState.isSubmitted;
10
10
  const showError = error && (isTouched || isSubmitted);
11
- return (_jsxs(FormGroup, { label: label, isRequired: isRequired, fieldId: id, ...props, children: [_jsx(Controller, { name: name, control: methods.control, render: ({ field }) => (_jsx("div", { style: { display: "flex", gap: "16px" }, role: "radiogroup", children: options.map((option) => (_jsx(Radio, { id: option.id, name: name, label: option.label, isChecked: field.value === option.value, onChange: () => field.onChange(option.value), onBlur: field.onBlur }, option.value))) })) }), _jsx(FormFieldHelperText, { helpText: helpText, errorMessage: showError ? error?.message : undefined })] }));
11
+ return (_jsxs(FormGroup, { label: label, isRequired: isRequired, fieldId: id, role: "radiogroup", isInline: true, ...props, children: [_jsx(Controller, { name: name, control: methods.control, render: ({ field }) => (_jsx(_Fragment, { children: options.map((option) => (_jsx(Radio, { id: option.id, name: name, label: option.label, isChecked: field.value === option.value, onChange: () => field.onChange(option.value), onBlur: field.onBlur }, option.value))) })) }), _jsx(FormFieldHelperText, { helpText: helpText, errorMessage: showError ? error?.message : undefined })] }));
12
12
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export * from "./charts";
2
- export * from "./forms";
3
- export * from "./report";
1
+ export * from "./charts/index.js";
2
+ export * from "./forms/index.js";
3
+ export * from "./report/index.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./charts";
2
- export * from "./forms";
3
- export * from "./report";
1
+ export * from "./charts/index.js";
2
+ export * from "./forms/index.js";
3
+ export * from "./report/index.js";
@@ -0,0 +1,7 @@
1
+ import type { FC } from "react";
2
+ import type { FeatureStatus } from "./infrastructureSummary.js";
3
+ export interface FeatureStatusBadgeProps {
4
+ status: FeatureStatus;
5
+ }
6
+ export declare const FeatureStatusBadge: FC<FeatureStatusBadgeProps>;
7
+ //# sourceMappingURL=FeatureStatusBadge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureStatusBadge.d.ts","sourceRoot":"","sources":["../../src/report/FeatureStatusBadge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAkB1D,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Label } from "@patternfly/react-core";
3
+ import { CheckCircleIcon, TimesCircleIcon } from "@patternfly/react-icons";
4
+ export const FeatureStatusBadge = ({ status }) => {
5
+ if (status === "unknown") {
6
+ return _jsx("span", { children: "\u2014" });
7
+ }
8
+ if (status === "enabled") {
9
+ return (_jsx(Label, { color: "green", isCompact: true, icon: _jsx(CheckCircleIcon, {}), children: "Enabled" }));
10
+ }
11
+ return (_jsx(Label, { color: "grey", isCompact: true, icon: _jsx(TimesCircleIcon, {}), children: "Disabled" }));
12
+ };
13
+ FeatureStatusBadge.displayName = "FeatureStatusBadge";
@@ -0,0 +1,9 @@
1
+ import type { FC } from "react";
2
+ import type { MigrationDonutChartLegendVariant } from "../charts/MigrationDonutChart.js";
3
+ export interface HostPowerStatesProps {
4
+ hostPowerStates?: Record<string, number>;
5
+ isExportMode?: boolean;
6
+ legendVariant?: MigrationDonutChartLegendVariant;
7
+ }
8
+ export declare const HostPowerStates: FC<HostPowerStatesProps>;
9
+ //# sourceMappingURL=HostPowerStates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostPowerStates.d.ts","sourceRoot":"","sources":["../../src/report/HostPowerStates.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAKzF,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,gCAAgC,CAAC;CAClD;AAED,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAwBpD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ServerIcon } from "@patternfly/react-icons";
3
+ import { useMemo } from "react";
4
+ import { REPORT_CARD_EMPTY_STATE_TITLES } from "./constants.js";
5
+ import { PowerStateCard } from "./PowerStateCard.js";
6
+ import { buildHostPowerStateChart } from "./powerStates.js";
7
+ export const HostPowerStates = ({ hostPowerStates, isExportMode = false, legendVariant, }) => {
8
+ const chart = useMemo(() => buildHostPowerStateChart(hostPowerStates), [hostPowerStates]);
9
+ return (_jsx(PowerStateCard, { id: "esxi-host-power-states", title: "ESXi host power states", icon: _jsx(ServerIcon, {}), emptyTitle: REPORT_CARD_EMPTY_STATE_TITLES.hostPowerStates, slices: chart.slices, legend: chart.legend, total: chart.total, subTitle: "Hosts", isExportMode: isExportMode, legendVariant: legendVariant }));
10
+ };
11
+ HostPowerStates.displayName = "HostPowerStates";
@@ -0,0 +1,7 @@
1
+ import type { FC } from "react";
2
+ import type { InfrastructureSummaryModel } from "./infrastructureSummary.js";
3
+ export interface InfrastructureSummaryProps {
4
+ summary: InfrastructureSummaryModel;
5
+ }
6
+ export declare const InfrastructureSummary: FC<InfrastructureSummaryProps>;
7
+ //# sourceMappingURL=InfrastructureSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InfrastructureSummary.d.ts","sourceRoot":"","sources":["../../src/report/InfrastructureSummary.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,0BAA0B,CAAC;CACrC;AAKD,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAkChE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Card, CardBody, CardTitle, DescriptionList, DescriptionListDescription, DescriptionListGroup, DescriptionListTerm, } from "@patternfly/react-core";
3
+ const formatCount = (value) => typeof value === "number" ? String(value) : "—";
4
+ export const InfrastructureSummary = ({ summary, }) => (_jsxs(Card, { isFullHeight: true, id: "infrastructure-summary", children: [_jsx(CardTitle, { children: "Infrastructure summary" }), _jsx(CardBody, { children: _jsxs(DescriptionList, { isAutoFit: true, displaySize: "lg", children: [_jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "VMware version" }), _jsx(DescriptionListDescription, { children: summary.vmwareVersion })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Datacenters" }), _jsx(DescriptionListDescription, { children: formatCount(summary.datacenters) })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "vCenters" }), _jsx(DescriptionListDescription, { children: formatCount(summary.vCenters) })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "ESXi hosts" }), _jsx(DescriptionListDescription, { children: formatCount(summary.esxiHosts) })] })] }) })] }));
5
+ InfrastructureSummary.displayName = "InfrastructureSummary";
@@ -1 +1 @@
1
- {"version":3,"file":"OSDistribution.d.ts","sourceRoot":"","sources":["../../src/report/OSDistribution.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,EAAE,EAAO,MAAM,OAAO,CAAC;AAQrC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAyB5B,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAyBlD,CAAC;AAEF,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAgH1C,CAAC"}
1
+ {"version":3,"file":"OSDistribution.d.ts","sourceRoot":"","sources":["../../src/report/OSDistribution.tsx"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,EAAE,EAAO,MAAM,OAAO,CAAC;AAQrC,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAY5B,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CAyBlD,CAAC;AAEF,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAoH1C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { css } from "@emotion/css";
3
- import { Card, CardBody, CardTitle, Flex, FlexItem, MenuToggle, SearchInput, Select, SelectList, SelectOption, Toolbar, ToolbarContent, ToolbarItem, } from "@patternfly/react-core";
3
+ import { Card, CardBody, CardTitle, Flex, FlexItem, MenuToggle, SearchInput, Select, SelectList, SelectOption, Stack, StackItem, Toolbar, ToolbarContent, ToolbarItem, } from "@patternfly/react-core";
4
4
  import { DesktopIcon } from "@patternfly/react-icons";
5
5
  import { Table, Tbody, Td, Th, Thead, Tr } from "@patternfly/react-table";
6
6
  import { CardEmptyState } from "./CardEmptyState.js";
@@ -13,19 +13,9 @@ import { OsNameCell } from "./OsUpgradeRecommendationPopover.js";
13
13
  import { getSupportTierLegendLabel, ORDERED_SUPPORT_TIERS, } from "./osSupportTier.js";
14
14
  import { SupportTierBadge } from "./SupportTierBadge.js";
15
15
  import { ALL_TIERS_FILTER, useOsBarChartViewModel, } from "./useOsBarChartViewModel.js";
16
- const filterToolbarStyle = css `
17
- padding-left: 0;
18
- padding-right: 0;
19
- `;
20
- const filterItemStyle = css `
21
- flex: 1 1 0;
22
- min-width: 0;
23
- `;
24
- const vmsColumnStyle = css `
25
- text-align: right;
26
- `;
27
16
  const tableScrollStyle = css `
28
17
  overflow: auto;
18
+ max-height: 350px;
29
19
  `;
30
20
  export const OSDistribution = ({ osData, isExportMode = false, }) => (_jsxs(Card, { className: isExportMode ? dashboardStyles.cardPrint : dashboardStyles.card, id: "os-distribution", children: [_jsx(CardTitle, { children: _jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, spaceItems: { default: "spaceItemsSm" }, children: [_jsxs(FlexItem, { children: [_jsx(DesktopIcon, {}), " Operating Systems"] }), _jsx(FlexItem, { children: _jsx(OsSupportTiersHelpPopover, {}) })] }) }), _jsx(CardBody, { children: _jsx(OSBarChart, { osData: osData, isExportMode: isExportMode }) })] }));
31
21
  export const OSBarChart = ({ osData, isExportMode = false, }) => {
@@ -33,5 +23,7 @@ export const OSBarChart = ({ osData, isExportMode = false, }) => {
33
23
  if (vm.tableRows.length === 0) {
34
24
  return (_jsx(CardEmptyState, { title: REPORT_CARD_EMPTY_STATE_TITLES.operatingSystems }));
35
25
  }
36
- return (_jsxs(_Fragment, { children: [!isExportMode ? (_jsx(Toolbar, { className: filterToolbarStyle, children: _jsxs(ToolbarContent, { children: [_jsx(ToolbarItem, { className: filterItemStyle, children: _jsx(SearchInput, { placeholder: "Filter by OS", value: vm.osFilter, onChange: (_event, value) => vm.setOsFilter(value), onClear: vm.clearOsFilter, "aria-label": "Filter operating systems by name" }) }), _jsx(ToolbarItem, { className: filterItemStyle, children: _jsx(Select, { isOpen: vm.isTierSelectOpen, selected: vm.tierFilter, onSelect: vm.handleTierSelect, onOpenChange: vm.setIsTierSelectOpen, toggle: (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, isExpanded: vm.isTierSelectOpen, onClick: vm.toggleTierSelectOpen, style: { width: "100%" }, children: vm.tierFilterLabel })), "aria-label": "Filter operating systems by support tier", children: _jsxs(SelectList, { children: [_jsx(SelectOption, { value: ALL_TIERS_FILTER, children: "All tiers" }), ORDERED_SUPPORT_TIERS.map((tier) => (_jsx(SelectOption, { value: tier, children: getSupportTierLegendLabel(tier) }, tier)))] }) }) })] }) })) : null, vm.showUpgradeNotice ? _jsx(OsUpgradeNotice, {}) : null, _jsx("div", { className: isExportMode ? undefined : tableScrollStyle, style: isExportMode ? undefined : { maxHeight: "350px" }, children: _jsxs(Table, { "aria-label": "Operating systems", variant: "compact", className: tableFullWidthStyle, children: [_jsx(Thead, { children: _jsxs(Tr, { children: [_jsx(Th, { children: "OS" }), _jsx(Th, { children: "Tier" }), _jsx(Th, { className: vmsColumnStyle, children: "VMs" })] }) }), _jsx(Tbody, { children: vm.showNoResults ? (_jsx(Tr, { children: _jsx(Td, { colSpan: 3, children: _jsx(EmptySearchResults, { title: "No matching operating system found" }) }) })) : (vm.filteredRows.map((row) => (_jsxs(Tr, { children: [_jsx(Td, { dataLabel: "OS", children: _jsx(OsNameCell, { osName: row.osName, upgradeRecommendation: row.upgradeRecommendation, isExportMode: isExportMode }) }), _jsx(Td, { dataLabel: "Tier", children: _jsx(SupportTierBadge, { tier: row.tier, isExportMode: isExportMode }) }), _jsx(Td, { dataLabel: "VMs", className: vmsColumnStyle, children: row.count })] }, row.osName)))) })] }) })] }));
26
+ return (_jsxs(_Fragment, { children: [!isExportMode ? (_jsx(Toolbar, { hasNoPadding: true, children: _jsxs(ToolbarContent, { children: [_jsx(ToolbarItem, { children: _jsx(SearchInput, { placeholder: "Filter by OS", value: vm.osFilter, onChange: (_event, value) => vm.setOsFilter(value), onClear: vm.clearOsFilter, "aria-label": "Filter operating systems by name" }) }), _jsx(ToolbarItem, { children: _jsx(Select, { isOpen: vm.isTierSelectOpen, selected: vm.tierFilter, onSelect: vm.handleTierSelect, onOpenChange: vm.setIsTierSelectOpen, toggle: (toggleRef) => (_jsx(MenuToggle, { ref: toggleRef, isExpanded: vm.isTierSelectOpen, onClick: vm.toggleTierSelectOpen, isFullWidth: true, children: vm.tierFilterLabel })), "aria-label": "Filter operating systems by support tier", children: _jsxs(SelectList, { children: [_jsx(SelectOption, { value: ALL_TIERS_FILTER, children: "All tiers" }), ORDERED_SUPPORT_TIERS.map((tier) => (_jsx(SelectOption, { value: tier, children: getSupportTierLegendLabel(tier) }, tier)))] }) }) })] }) })) : null, _jsxs(Stack, { hasGutter: true, children: [vm.showUpgradeNotice ? (_jsx(StackItem, { children: _jsx(OsUpgradeNotice, {}) })) : null, _jsx(StackItem, { children: _jsx("div", { className: isExportMode
27
+ ? tableFullWidthStyle
28
+ : `${tableScrollStyle} ${tableFullWidthStyle}`, children: _jsxs(Table, { "aria-label": "Operating systems", variant: "compact", children: [_jsx(Thead, { children: _jsxs(Tr, { children: [_jsx(Th, { children: "OS" }), _jsx(Th, { children: "Tier" }), _jsx(Th, { children: "VMs" })] }) }), _jsx(Tbody, { children: vm.showNoResults ? (_jsx(Tr, { children: _jsx(Td, { colSpan: 3, children: _jsx(EmptySearchResults, { title: "No matching operating system found" }) }) })) : (vm.filteredRows.map((row) => (_jsxs(Tr, { children: [_jsx(Td, { dataLabel: "OS", children: _jsx(OsNameCell, { osName: row.osName, upgradeRecommendation: row.upgradeRecommendation, isExportMode: isExportMode }) }), _jsx(Td, { dataLabel: "Tier", children: _jsx(SupportTierBadge, { tier: row.tier, isExportMode: isExportMode }) }), _jsx(Td, { dataLabel: "VMs", children: row.count })] }, row.osName)))) })] }) }) })] })] }));
37
29
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OsSupportTiersHelpPopover.d.ts","sourceRoot":"","sources":["../../src/report/OsSupportTiersHelpPopover.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAwEhC,eAAO,MAAM,yBAAyB,EAAE,EASvC,CAAC"}
1
+ {"version":3,"file":"OsSupportTiersHelpPopover.d.ts","sourceRoot":"","sources":["../../src/report/OsSupportTiersHelpPopover.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAsChC,eAAO,MAAM,yBAAyB,EAAE,EASvC,CAAC"}
@@ -1,37 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { css } from "@emotion/css";
3
- import { Label } from "@patternfly/react-core";
2
+ import { Button, Content, Label, Stack, StackItem, } from "@patternfly/react-core";
4
3
  import { ExternalLinkAltIcon } from "@patternfly/react-icons";
5
4
  import { getSupportTierBadgeColor, getSupportTierDefinition, getSupportTierLegendLabel, ORDERED_SUPPORT_TIERS, SUPPORT_TIER_LEARN_MORE_URL, } from "./osSupportTier.js";
6
5
  import PopoverIcon from "./PopoverIcon.js";
7
- const tierListStyle = css `
8
- list-style: none;
9
- padding: 0;
10
- margin: 0;
11
- display: flex;
12
- flex-direction: column;
13
- gap: var(--pf-t--global--spacer--400);
14
- `;
15
- const tierItemStyle = css `
16
- display: flex;
17
- flex-direction: column;
18
- gap: var(--pf-t--global--spacer--100);
19
- `;
20
- const tierBadgeStyle = css `
21
- width: fit-content;
22
- max-width: 100%;
23
- align-self: flex-start;
24
- `;
25
- const tierDescriptionStyle = css `
26
- margin: 0;
27
- color: var(--pf-t--global--text--color--regular);
28
- `;
29
- const learnMoreLinkStyle = css `
30
- display: inline-flex;
31
- align-items: center;
32
- gap: var(--pf-t--global--spacer--xs);
33
- margin-top: var(--pf-t--global--spacer--400);
34
- `;
35
- const OsSupportTiersHelpBody = () => (_jsxs("div", { children: [_jsx("ul", { className: tierListStyle, children: ORDERED_SUPPORT_TIERS.map((tier) => (_jsxs("li", { className: tierItemStyle, children: [_jsx(Label, { className: tierBadgeStyle, color: getSupportTierBadgeColor(tier), isCompact: true, children: getSupportTierLegendLabel(tier) }), _jsx("p", { className: tierDescriptionStyle, children: getSupportTierDefinition(tier) })] }, tier))) }), _jsxs("a", { className: learnMoreLinkStyle, href: SUPPORT_TIER_LEARN_MORE_URL, target: "_blank", rel: "noopener noreferrer", children: ["Learn more ", _jsx(ExternalLinkAltIcon, {})] })] }));
6
+ const OsSupportTiersHelpBody = () => (_jsxs(Stack, { hasGutter: true, children: [ORDERED_SUPPORT_TIERS.map((tier) => (_jsxs(StackItem, { children: [_jsx(Label, { color: getSupportTierBadgeColor(tier), isCompact: true, children: getSupportTierLegendLabel(tier) }), _jsx(Content, { component: "p", children: getSupportTierDefinition(tier) })] }, tier))), _jsx(StackItem, { children: _jsx(Button, { variant: "link", isInline: true, component: "a", href: SUPPORT_TIER_LEARN_MORE_URL, target: "_blank", rel: "noopener noreferrer", icon: _jsx(ExternalLinkAltIcon, {}), iconPosition: "end", "aria-label": "Learn more about operating system support tiers", children: "Learn more" }) })] }));
36
7
  export const OsSupportTiersHelpPopover = () => (_jsx(PopoverIcon, { noVerticalAlign: true, maxWidth: "40rem", headerContent: "Guest OS support tiers", bodyContent: _jsx(OsSupportTiersHelpBody, {}), buttonOuiaId: "guest-os-support-tiers-help", "aria-label": "Guest OS support tiers help" }));
37
8
  OsSupportTiersHelpPopover.displayName = "OsSupportTiersHelpPopover";
@@ -1 +1 @@
1
- {"version":3,"file":"OsUpgradeNotice.d.ts","sourceRoot":"","sources":["../../src/report/OsUpgradeNotice.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAMhC,eAAO,MAAM,eAAe,EAAE,EAiB7B,CAAC"}
1
+ {"version":3,"file":"OsUpgradeNotice.d.ts","sourceRoot":"","sources":["../../src/report/OsUpgradeNotice.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,eAAO,MAAM,eAAe,EAAE,EAgB7B,CAAC"}
@@ -1,9 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { css } from "@emotion/css";
3
2
  import { Content, Flex, FlexItem, Icon } from "@patternfly/react-core";
4
3
  import { InfoCircleIcon } from "@patternfly/react-icons";
5
- const noticeStyle = css `
6
- margin-bottom: var(--pf-t--global--spacer--200);
7
- `;
8
- export const OsUpgradeNotice = () => (_jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, spaceItems: { default: "spaceItemsSm" }, className: noticeStyle, children: [_jsx(FlexItem, { children: _jsx(Icon, { status: "info", children: _jsx(InfoCircleIcon, {}) }) }), _jsx(FlexItem, { children: _jsx(Content, { component: "p", style: { fontWeight: 500 }, children: "Some operating systems may need upgrades before migration" }) })] }));
4
+ export const OsUpgradeNotice = () => (_jsxs(Flex, { alignItems: { default: "alignItemsCenter" }, spaceItems: { default: "spaceItemsSm" }, children: [_jsx(FlexItem, { children: _jsx(Icon, { status: "info", children: _jsx(InfoCircleIcon, {}) }) }), _jsx(FlexItem, { children: _jsx(Content, { component: "p", children: "Some operating systems may need upgrades before migration" }) })] }));
9
5
  OsUpgradeNotice.displayName = "OsUpgradeNotice";
@@ -0,0 +1,17 @@
1
+ import type { FC, ReactNode } from "react";
2
+ import { type MigrationDonutChartDatum, type MigrationDonutChartLegendVariant } from "../charts/MigrationDonutChart.js";
3
+ export interface PowerStateCardProps {
4
+ id: string;
5
+ title: string;
6
+ icon: ReactNode;
7
+ emptyTitle: string;
8
+ slices: MigrationDonutChartDatum[];
9
+ legend: Record<string, string>;
10
+ total: number;
11
+ subTitle: string;
12
+ isExportMode?: boolean;
13
+ itemsPerRow?: number;
14
+ legendVariant?: MigrationDonutChartLegendVariant;
15
+ }
16
+ export declare const PowerStateCard: FC<PowerStateCardProps>;
17
+ //# sourceMappingURL=PowerStateCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PowerStateCard.d.ts","sourceRoot":"","sources":["../../src/report/PowerStateCard.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,gCAAgC,EACtC,MAAM,kCAAkC,CAAC;AAI1C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,wBAAwB,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,gCAAgC,CAAC;CAClD;AAED,eAAO,MAAM,cAAc,EAAE,EAAE,CAAC,mBAAmB,CA8ClD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Card, CardBody, CardTitle } from "@patternfly/react-core";
3
+ import { MigrationDonutChart, } from "../charts/MigrationDonutChart.js";
4
+ import { CardEmptyState } from "./CardEmptyState.js";
5
+ import { dashboardStyles } from "./dashboardStyles.js";
6
+ export const PowerStateCard = ({ id, title, icon, emptyTitle, slices, legend, total, subTitle, isExportMode = false, itemsPerRow = 2, legendVariant = "html", }) => (_jsxs(Card, { className: isExportMode ? dashboardStyles.cardPrint : dashboardStyles.card, id: id, children: [_jsxs(CardTitle, { children: [icon, " ", title] }), _jsx(CardBody, { children: total === 0 ? (_jsx(CardEmptyState, { title: emptyTitle })) : (_jsx(MigrationDonutChart, { legendVariant: legendVariant, data: slices, legend: legend, height: 300, width: 420, donutThickness: 18, padAngle: 1, title: `${total}`, subTitle: subTitle, subTitleColor: "var(--pf-t--global--text--color--subtle)", titleFontSize: 34, labelFontSize: 16, itemsPerRow: itemsPerRow, marginLeft: "0%", tooltipLabelFormatter: ({ datum, percent }) => `${datum.countDisplay}\n${percent.toFixed(1)}%` })) })] }));
7
+ PowerStateCard.displayName = "PowerStateCard";
@@ -1 +1 @@
1
- {"version":3,"file":"SupportTierBadge.d.ts","sourceRoot":"","sources":["../../src/report/SupportTierBadge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAW5B,UAAU,qBAAqB;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAYD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAiBtD,CAAC"}
1
+ {"version":3,"file":"SupportTierBadge.d.ts","sourceRoot":"","sources":["../../src/report/SupportTierBadge.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAa5B,UAAU,qBAAqB;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAYD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAiBtD,CAAC"}
@@ -2,17 +2,19 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { css } from "@emotion/css";
3
3
  import { Label, Tooltip } from "@patternfly/react-core";
4
4
  import { getSupportTierBadgeColor, getSupportTierBadgeInlineStyle, getSupportTierDefinition, getSupportTierLegendLabel, } from "./osSupportTier.js";
5
- const exportBadgeStyle = css `
5
+ const exportBadgeStyle = (backgroundColor, color) => css `
6
6
  display: inline-block;
7
7
  padding: var(--pf-t--global--spacer--xs) var(--pf-t--global--spacer--sm);
8
8
  border-radius: var(--pf-t--global--border--radius--pill);
9
9
  font-size: var(--pf-t--global--font--size--body--sm);
10
10
  line-height: var(--pf-t--global--font--line-height--body);
11
11
  white-space: nowrap;
12
+ background-color: ${backgroundColor};
13
+ color: ${color};
12
14
  `;
13
15
  const ExportSupportTierBadge = ({ tier }) => {
14
16
  const { backgroundColor, color } = getSupportTierBadgeInlineStyle(tier);
15
- return (_jsx("span", { className: exportBadgeStyle, style: { backgroundColor, color }, children: getSupportTierLegendLabel(tier) }));
17
+ return (_jsx("span", { className: exportBadgeStyle(backgroundColor, color), children: getSupportTierLegendLabel(tier) }));
16
18
  };
17
19
  export const SupportTierBadge = ({ tier, isExportMode = false, }) => {
18
20
  if (isExportMode) {
@@ -0,0 +1,10 @@
1
+ import type { FC } from "react";
2
+ import type { ClusterDetailRow, ClusterDetailsModel } from "./infrastructureSummary.js";
3
+ export interface VCenterClusterDetailsProps {
4
+ isAggregateView: boolean;
5
+ rows: ClusterDetailRow[];
6
+ details?: ClusterDetailsModel;
7
+ isExportMode?: boolean;
8
+ }
9
+ export declare const VCenterClusterDetails: FC<VCenterClusterDetailsProps>;
10
+ //# sourceMappingURL=VCenterClusterDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VCenterClusterDetails.d.ts","sourceRoot":"","sources":["../../src/report/VCenterClusterDetails.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EAEpB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAmKD,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAgBhE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { css } from "@emotion/css";
3
+ import { Card, CardBody, CardTitle, Content, DescriptionList, DescriptionListDescription, DescriptionListGroup, DescriptionListTerm, Grid, GridItem, Label, LabelGroup, } from "@patternfly/react-core";
4
+ import { Table, Tbody, Td, Th, Thead, Tr } from "@patternfly/react-table";
5
+ import { FeatureStatusBadge } from "./FeatureStatusBadge.js";
6
+ const clusterDetailsTableScrollStyle = css `
7
+ max-height: 320px;
8
+ overflow: auto;
9
+ `;
10
+ const FeatureList = ({ items }) => (_jsx(DescriptionList, { isHorizontal: true, isCompact: true, children: items.map((item) => (_jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: item.label }), _jsx(DescriptionListDescription, { children: _jsx(FeatureStatusBadge, { status: item.status }) })] }, item.label))) }));
11
+ const AggregateClusterTable = ({ rows }) => (_jsxs(Table, { variant: "compact", borders: false, isStickyHeader: true, "data-testid": "vcenter-cluster-details-table", children: [_jsx(Thead, { children: _jsxs(Tr, { children: [_jsx(Th, { children: "Cluster name" }), _jsx(Th, { children: "Hosts" }), _jsx(Th, { children: "VMs" }), _jsx(Th, { children: "vMotion" }), _jsx(Th, { children: "DRS" }), _jsx(Th, { children: "vSAN" })] }) }), _jsx(Tbody, { children: rows.map((row) => (_jsxs(Tr, { children: [_jsx(Td, { dataLabel: "Cluster name", children: row.name }), _jsx(Td, { dataLabel: "Hosts", children: row.hosts }), _jsx(Td, { dataLabel: "VMs", children: row.vms }), _jsx(Td, { dataLabel: "vMotion", children: _jsx(FeatureStatusBadge, { status: row.vmotion }) }), _jsx(Td, { dataLabel: "DRS", children: _jsx(FeatureStatusBadge, { status: row.drs }) }), _jsx(Td, { dataLabel: "vSAN", children: _jsx(FeatureStatusBadge, { status: row.vsan }) })] }, row.id))) })] }));
12
+ const AggregateCluster = ({ rows, isExportMode }) => {
13
+ if (rows.length === 0) {
14
+ return _jsx(Content, { component: "p", children: "No vSphere clusters detected" });
15
+ }
16
+ return (_jsx("div", { className: isExportMode ? undefined : clusterDetailsTableScrollStyle, "data-scroll-constrained": isExportMode ? undefined : "true", children: _jsx(AggregateClusterTable, { rows: rows }) }));
17
+ };
18
+ const DetailedClusterView = ({ details, }) => (_jsxs(Grid, { hasGutter: true, children: [_jsx(GridItem, { span: 12, children: _jsxs(DescriptionList, { isAutoFit: true, displaySize: "lg", children: [_jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Hosts" }), _jsx(DescriptionListDescription, { children: details.hosts })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "VMs" }), _jsx(DescriptionListDescription, { children: details.vms })] }), _jsxs(DescriptionListGroup, { children: [_jsx(DescriptionListTerm, { children: "Networks detected" }), _jsx(DescriptionListDescription, { children: details.networksDetected })] })] }) }), _jsx(GridItem, { md: 4, span: 12, children: _jsxs(Card, { isFullHeight: true, children: [_jsx(CardTitle, { children: "Core infrastructure" }), _jsx(CardBody, { children: _jsx(FeatureList, { items: [
19
+ { label: "vMotion", status: details.vmotion },
20
+ { label: "DRS", status: details.drs },
21
+ { label: "HA", status: details.ha },
22
+ ] }) })] }) }), _jsx(GridItem, { md: 4, span: 12, children: _jsxs(Card, { isFullHeight: true, children: [_jsx(CardTitle, { children: "vSAN capabilities" }), _jsx(CardBody, { children: _jsx(FeatureList, { items: [{ label: "vSAN", status: details.vsan }] }) })] }) }), _jsx(GridItem, { md: 4, span: 12, children: _jsxs(Card, { isFullHeight: true, children: [_jsx(CardTitle, { children: "Network topology" }), _jsx(CardBody, { children: details.networks.length === 0 ? (_jsx(Content, { component: "p", children: "No networks detected" })) : (_jsxs(_Fragment, { children: [_jsxs(Content, { component: "p", children: [details.networksDetected, " ", details.networksDetected === 1
23
+ ? "network detected"
24
+ : "networks detected"] }), _jsx(LabelGroup, { isCompact: true, numLabels: details.networks.length, "aria-label": "Detected networks", children: details.networks.map((network, index) => (_jsx(Label, { color: "blue", isCompact: true, children: network.displayName }, `${network.name}-${network.vlanId ?? index}`))) })] })) })] }) })] }));
25
+ export const VCenterClusterDetails = ({ isAggregateView, rows, details, isExportMode = false, }) => (_jsxs(Card, { isFullHeight: true, id: "vcenter-cluster-details", children: [_jsx(CardTitle, { children: "vCenter cluster details" }), _jsx(CardBody, { children: isAggregateView || !details ? (_jsx(AggregateCluster, { rows: rows, isExportMode: isExportMode })) : (_jsx(DetailedClusterView, { details: details })) })] }));
26
+ VCenterClusterDetails.displayName = "VCenterClusterDetails";
@@ -0,0 +1,9 @@
1
+ import type { FC } from "react";
2
+ import type { MigrationDonutChartLegendVariant } from "../charts/MigrationDonutChart.js";
3
+ export interface VmPowerStatesProps {
4
+ powerStates?: Record<string, number>;
5
+ isExportMode?: boolean;
6
+ legendVariant?: MigrationDonutChartLegendVariant;
7
+ }
8
+ export declare const VmPowerStates: FC<VmPowerStatesProps>;
9
+ //# sourceMappingURL=VmPowerStates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VmPowerStates.d.ts","sourceRoot":"","sources":["../../src/report/VmPowerStates.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAKzF,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,gCAAgC,CAAC;CAClD;AAED,eAAO,MAAM,aAAa,EAAE,EAAE,CAAC,kBAAkB,CAwBhD,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { VirtualMachineIcon } from "@patternfly/react-icons";
3
+ import { useMemo } from "react";
4
+ import { REPORT_CARD_EMPTY_STATE_TITLES } from "./constants.js";
5
+ import { PowerStateCard } from "./PowerStateCard.js";
6
+ import { buildVmPowerStateChart } from "./powerStates.js";
7
+ export const VmPowerStates = ({ powerStates, isExportMode = false, legendVariant, }) => {
8
+ const chart = useMemo(() => buildVmPowerStateChart(powerStates), [powerStates]);
9
+ return (_jsx(PowerStateCard, { id: "vm-power-states", title: "VM power states", icon: _jsx(VirtualMachineIcon, {}), emptyTitle: REPORT_CARD_EMPTY_STATE_TITLES.vmPowerStates, slices: chart.slices, legend: chart.legend, total: chart.total, subTitle: "VMs", isExportMode: isExportMode, legendVariant: legendVariant }));
10
+ };
11
+ VmPowerStates.displayName = "VmPowerStates";
@@ -19,5 +19,7 @@ export declare const REPORT_CARD_EMPTY_STATE_TITLES: {
19
19
  readonly operatingSystems: "Operating system data not collected";
20
20
  readonly migrationStatus: "Migration status data not collected";
21
21
  readonly issuesBreakdown: "Issues breakdown data not collected";
22
+ readonly hostPowerStates: "Host power state data not collected";
23
+ readonly vmPowerStates: "VM power state data not collected";
22
24
  };
23
25
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/report/constants.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,WAA6B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,WAA+B,CAAC;AAE9D,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;CAcjC,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/report/constants.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,WAA6B,CAAC;AAC5D,eAAO,MAAM,iBAAiB,WAA+B,CAAC;AAE9D,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;CAgBjC,CAAC"}
@@ -20,4 +20,6 @@ export const REPORT_CARD_EMPTY_STATE_TITLES = {
20
20
  operatingSystems: "Operating system data not collected",
21
21
  migrationStatus: "Migration status data not collected",
22
22
  issuesBreakdown: "Issues breakdown data not collected",
23
+ hostPowerStates: "Host power state data not collected",
24
+ vmPowerStates: "VM power state data not collected",
23
25
  };
@@ -3,6 +3,11 @@ export { chartColorFailure, chartColorSuccess, REPORT_CARD_EMPTY_STATE_TITLES, }
3
3
  export { DashboardEmptyStateBase, type DashboardEmptyStateBaseProps, } from "./DashboardEmptyStateBase.js";
4
4
  export { dashboardStyles, tableFullWidthStyle } from "./dashboardStyles.js";
5
5
  export { EmptySearchResults, type EmptySearchResultsProps, } from "./EmptySearchResults.js";
6
+ export { FeatureStatusBadge, type FeatureStatusBadgeProps, } from "./FeatureStatusBadge.js";
7
+ export { HostPowerStates, type HostPowerStatesProps, } from "./HostPowerStates.js";
8
+ export { InfrastructureSummary, type InfrastructureSummaryProps, } from "./InfrastructureSummary.js";
9
+ export type { ClusterDetailRow, ClusterDetailsModel, FeatureStatus, HostCapability, InfrastructureSummaryModel, InventoryCluster, InventoryDatastore, InventoryHost, InventoryInfra, InventoryNetwork, InventoryVms, NetworkLabel, } from "./infrastructureSummary.js";
10
+ export { booleanToFeatureStatus, buildClusterDetailRows, buildClusterDetails, buildInfrastructureSummary, countVCenters, formatVSphereVersion, hostCapabilityStatus, visibleNetworks, vsanStatus, } from "./infrastructureSummary.js";
6
11
  export { OSBarChart, OSDistribution } from "./OSDistribution.js";
7
12
  export { OsSupportTiersHelpPopover } from "./OsSupportTiersHelpPopover.js";
8
13
  export { OsUpgradeNotice } from "./OsUpgradeNotice.js";
@@ -10,6 +15,11 @@ export { OsNameCell, OsUpgradeRecommendationPopover, } from "./OsUpgradeRecommen
10
15
  export type { OSDistributionEntry, SupportTierBadgeStyle, } from "./osSupportTier.js";
11
16
  export { getSupportTierBadgeColor, getSupportTierBadgeInlineStyle, getSupportTierDefinition, getSupportTierLegendLabel, getSupportTierSortOrder, hasOsUpgradeNotice, ORDERED_SUPPORT_TIERS, resolveSupportTier, SUPPORT_TIER_BADGE_COLORS, SUPPORT_TIER_BADGE_INLINE_STYLES, SUPPORT_TIER_DEFINITIONS, SUPPORT_TIER_LABELS, SUPPORT_TIER_LEARN_MORE_URL, SupportTier, } from "./osSupportTier.js";
12
17
  export { default as PopoverIcon } from "./PopoverIcon.js";
18
+ export { PowerStateCard, type PowerStateCardProps, } from "./PowerStateCard.js";
19
+ export type { PowerStateChartModel } from "./powerStates.js";
20
+ export { buildHostPowerStateChart, buildVmPowerStateChart, HOST_POWER_COLORS, VM_POWER_COLORS, } from "./powerStates.js";
13
21
  export { SupportTierBadge } from "./SupportTierBadge.js";
14
22
  export { ALL_TIERS_FILTER, type OsBarChartViewModel, type OsTableRow, useOsBarChartViewModel, } from "./useOsBarChartViewModel.js";
23
+ export { VCenterClusterDetails, type VCenterClusterDetailsProps, } from "./VCenterClusterDetails.js";
24
+ export { VmPowerStates, type VmPowerStatesProps, } from "./VmPowerStates.js";
15
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,UAAU,EACV,8BAA8B,GAC/B,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,EAChC,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,sBAAsB,GACvB,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,4BAA4B,GAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,GAC7B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,0BAA0B,EAC1B,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,0BAA0B,EAC1B,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,UAAU,GACX,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,UAAU,EACV,8BAA8B,GAC/B,MAAM,qCAAqC,CAAC;AAC7C,YAAY,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC9B,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,EAChC,wBAAwB,EACxB,mBAAmB,EACnB,2BAA2B,EAC3B,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,aAAa,EACb,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC"}
@@ -3,11 +3,19 @@ export { chartColorFailure, chartColorSuccess, REPORT_CARD_EMPTY_STATE_TITLES, }
3
3
  export { DashboardEmptyStateBase, } from "./DashboardEmptyStateBase.js";
4
4
  export { dashboardStyles, tableFullWidthStyle } from "./dashboardStyles.js";
5
5
  export { EmptySearchResults, } from "./EmptySearchResults.js";
6
+ export { FeatureStatusBadge, } from "./FeatureStatusBadge.js";
7
+ export { HostPowerStates, } from "./HostPowerStates.js";
8
+ export { InfrastructureSummary, } from "./InfrastructureSummary.js";
9
+ export { booleanToFeatureStatus, buildClusterDetailRows, buildClusterDetails, buildInfrastructureSummary, countVCenters, formatVSphereVersion, hostCapabilityStatus, visibleNetworks, vsanStatus, } from "./infrastructureSummary.js";
6
10
  export { OSBarChart, OSDistribution } from "./OSDistribution.js";
7
11
  export { OsSupportTiersHelpPopover } from "./OsSupportTiersHelpPopover.js";
8
12
  export { OsUpgradeNotice } from "./OsUpgradeNotice.js";
9
13
  export { OsNameCell, OsUpgradeRecommendationPopover, } from "./OsUpgradeRecommendationPopover.js";
10
14
  export { getSupportTierBadgeColor, getSupportTierBadgeInlineStyle, getSupportTierDefinition, getSupportTierLegendLabel, getSupportTierSortOrder, hasOsUpgradeNotice, ORDERED_SUPPORT_TIERS, resolveSupportTier, SUPPORT_TIER_BADGE_COLORS, SUPPORT_TIER_BADGE_INLINE_STYLES, SUPPORT_TIER_DEFINITIONS, SUPPORT_TIER_LABELS, SUPPORT_TIER_LEARN_MORE_URL, SupportTier, } from "./osSupportTier.js";
11
15
  export { default as PopoverIcon } from "./PopoverIcon.js";
16
+ export { PowerStateCard, } from "./PowerStateCard.js";
17
+ export { buildHostPowerStateChart, buildVmPowerStateChart, HOST_POWER_COLORS, VM_POWER_COLORS, } from "./powerStates.js";
12
18
  export { SupportTierBadge } from "./SupportTierBadge.js";
13
19
  export { ALL_TIERS_FILTER, useOsBarChartViewModel, } from "./useOsBarChartViewModel.js";
20
+ export { VCenterClusterDetails, } from "./VCenterClusterDetails.js";
21
+ export { VmPowerStates, } from "./VmPowerStates.js";
@@ -0,0 +1,82 @@
1
+ export type FeatureStatus = "enabled" | "disabled" | "unknown";
2
+ export type HostCapability = "vmotionSupported" | "storageVmotionSupported";
3
+ export type InventoryHost = {
4
+ vmotionSupported?: boolean;
5
+ storageVmotionSupported?: boolean;
6
+ };
7
+ export type InventoryDatastore = {
8
+ type?: string;
9
+ };
10
+ export type InventoryNetwork = {
11
+ name: string;
12
+ type?: string;
13
+ vlanId?: string;
14
+ };
15
+ export type InventoryInfra = {
16
+ totalHosts?: number;
17
+ totalDatacenters?: number;
18
+ hosts?: InventoryHost[];
19
+ clustersPerDatacenter?: number[];
20
+ networks?: InventoryNetwork[];
21
+ datastores?: InventoryDatastore[];
22
+ };
23
+ export type InventoryVms = {
24
+ total?: number;
25
+ diskTypes?: Record<string, unknown>;
26
+ };
27
+ export type InventoryCluster = {
28
+ infra?: InventoryInfra;
29
+ vms?: InventoryVms;
30
+ vcenter?: {
31
+ id?: string;
32
+ };
33
+ clusterFeatures?: {
34
+ drsEnabled?: boolean;
35
+ haEnabled?: boolean;
36
+ };
37
+ };
38
+ export type InfrastructureSummaryModel = {
39
+ vmwareVersion: string;
40
+ datacenters: number | undefined;
41
+ vCenters: number | undefined;
42
+ esxiHosts: number | undefined;
43
+ };
44
+ export type NetworkLabel = {
45
+ name: string;
46
+ vlanId?: string;
47
+ displayName: string;
48
+ };
49
+ export type ClusterDetailRow = {
50
+ id: string;
51
+ name: string;
52
+ hosts: number;
53
+ vms: number;
54
+ vmotion: FeatureStatus;
55
+ drs: FeatureStatus;
56
+ vsan: FeatureStatus;
57
+ };
58
+ export type ClusterDetailsModel = {
59
+ hosts: number;
60
+ vms: number;
61
+ networksDetected: number;
62
+ vmotion: FeatureStatus;
63
+ drs: FeatureStatus;
64
+ ha: FeatureStatus;
65
+ vsan: FeatureStatus;
66
+ networks: NetworkLabel[];
67
+ };
68
+ export declare const formatVSphereVersion: (version?: string) => string;
69
+ export declare const booleanToFeatureStatus: (value: boolean | undefined) => FeatureStatus;
70
+ export declare const hostCapabilityStatus: (hosts: InventoryHost[] | undefined, capability: HostCapability) => FeatureStatus;
71
+ export declare const vsanStatus: (infra?: InventoryInfra, vms?: InventoryVms) => FeatureStatus;
72
+ export declare const countVCenters: (clusters?: Record<string, InventoryCluster>, vcenterId?: string) => number | undefined;
73
+ export declare const visibleNetworks: (infra?: InventoryInfra) => NetworkLabel[];
74
+ export declare const buildInfrastructureSummary: ({ infra, vcenterVersion, vcenterId, clusters, }: {
75
+ infra?: InventoryInfra;
76
+ vcenterVersion?: string;
77
+ vcenterId?: string;
78
+ clusters?: Record<string, InventoryCluster>;
79
+ }) => InfrastructureSummaryModel;
80
+ export declare const buildClusterDetailRows: (clusters?: Record<string, InventoryCluster>) => ClusterDetailRow[];
81
+ export declare const buildClusterDetails: (cluster?: InventoryCluster) => ClusterDetailsModel | undefined;
82
+ //# sourceMappingURL=infrastructureSummary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infrastructureSummary.d.ts","sourceRoot":"","sources":["../../src/report/infrastructureSummary.ts"],"names":[],"mappings":"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"}