@64mb/freelens-power 1.2.2 → 1.4.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 (63) hide show
  1. package/README.md +3 -1
  2. package/out/main/common/store/monitoring-preferences-store.js +10 -0
  3. package/out/main/common/store/monitoring-preferences-store.js.map +1 -1
  4. package/out/renderer/ai-diagnostic-handoff.js +52 -0
  5. package/out/renderer/ai-diagnostic-handoff.js.map +1 -0
  6. package/out/renderer/ai-extras.js +40 -4
  7. package/out/renderer/ai-extras.js.map +1 -1
  8. package/out/renderer/ai.js +48 -56
  9. package/out/renderer/ai.js.map +1 -1
  10. package/out/renderer/details/hpa-diagnostics-details.js +46 -0
  11. package/out/renderer/details/hpa-diagnostics-details.js.map +1 -0
  12. package/out/renderer/details/namespace-health-details.js +91 -0
  13. package/out/renderer/details/namespace-health-details.js.map +1 -0
  14. package/out/renderer/details/resource-health-details.js +135 -0
  15. package/out/renderer/details/resource-health-details.js.map +1 -0
  16. package/out/renderer/details/service-diagnostics-details.js +163 -0
  17. package/out/renderer/details/service-diagnostics-details.js.map +1 -0
  18. package/out/renderer/diagnostic-explain-button.js +16 -0
  19. package/out/renderer/diagnostic-explain-button.js.map +1 -0
  20. package/out/renderer/diagnostics-state.js +53 -0
  21. package/out/renderer/diagnostics-state.js.map +1 -0
  22. package/out/renderer/diagnostics.css.js +10 -1
  23. package/out/renderer/diagnostics.css.js.map +1 -1
  24. package/out/renderer/diagnostics.js +486 -114
  25. package/out/renderer/diagnostics.js.map +1 -1
  26. package/out/renderer/incident-copy-button.js +50 -0
  27. package/out/renderer/incident-copy-button.js.map +1 -0
  28. package/out/renderer/index.js +91 -19
  29. package/out/renderer/index.js.map +1 -1
  30. package/out/renderer/monitoring-history-collection.js +1 -1
  31. package/out/renderer/monitoring.js +15 -0
  32. package/out/renderer/monitoring.js.map +1 -1
  33. package/out/renderer/preferences/monitoring-preferences.js +10 -0
  34. package/out/renderer/preferences/monitoring-preferences.js.map +1 -1
  35. package/out/renderer/preferences/preferences.js +98 -0
  36. package/out/renderer/preferences/preferences.js.map +1 -1
  37. package/out/renderer/resource-relationships.css.js +7 -0
  38. package/out/renderer/resource-relationships.css.js.map +1 -0
  39. package/out/renderer/resource-relationships.js +571 -0
  40. package/out/renderer/resource-relationships.js.map +1 -0
  41. package/out/renderer/resource-search-distance.js +24 -0
  42. package/out/renderer/resource-search-distance.js.map +1 -0
  43. package/out/renderer/resource-search-fields.js +55 -0
  44. package/out/renderer/resource-search-fields.js.map +1 -0
  45. package/out/renderer/resource-search-model.js +193 -0
  46. package/out/renderer/resource-search-model.js.map +1 -0
  47. package/out/renderer/resource-search.js +365 -0
  48. package/out/renderer/resource-search.js.map +1 -0
  49. package/out/renderer/src/common/hpa-diagnostics.js +24 -0
  50. package/out/renderer/src/common/hpa-diagnostics.js.map +1 -0
  51. package/out/renderer/src/common/incident-summary.js +73 -0
  52. package/out/renderer/src/common/incident-summary.js.map +1 -0
  53. package/out/renderer/src/common/resource-health.js +92 -0
  54. package/out/renderer/src/common/resource-health.js.map +1 -0
  55. package/out/renderer/src/common/resource-relationships.js +155 -0
  56. package/out/renderer/src/common/resource-relationships.js.map +1 -0
  57. package/out/renderer/src/common/service-diagnostics.js +50 -0
  58. package/out/renderer/src/common/service-diagnostics.js.map +1 -0
  59. package/out/renderer/src/common/store/monitoring-preferences-store.js +10 -0
  60. package/out/renderer/src/common/store/monitoring-preferences-store.js.map +1 -1
  61. package/out/renderer/src/common/timeline-groups.js +36 -0
  62. package/out/renderer/src/common/timeline-groups.js.map +1 -0
  63. package/package.json +1 -1
@@ -0,0 +1,135 @@
1
+ const require_extensions = require("../_virtual/_global-external_@freelensapp/extensions.js");
2
+ const require__global_external_mobx_react = require("../_virtual/_global-external_mobx-react.js");
3
+ const require_ai_preferences_store = require("../src/common/store/ai-preferences-store.js");
4
+ const require_jsx_runtime = require("../_virtual/_global-external_react/jsx-runtime.js");
5
+ const require_ai_diagnostic_handoff = require("../ai-diagnostic-handoff.js");
6
+ const require_resource_health = require("../src/common/resource-health.js");
7
+ //#region src/renderer/details/resource-health-details.tsx
8
+ var { Button, DrawerItem, DrawerTitle, Icon } = require_extensions.Renderer.Component;
9
+ var actionStyle = {
10
+ display: "inline-flex",
11
+ alignItems: "center",
12
+ justifyContent: "center",
13
+ gap: 6,
14
+ minHeight: 28,
15
+ padding: "4px 8px"
16
+ };
17
+ var ResourceHealthDetails = require__global_external_mobx_react.observer(({ object, onOpenDiagnostics }) => {
18
+ const health = require_resource_health.summarizeObjectHealth(object);
19
+ const namespace = object.getNs();
20
+ const clusterId = require_extensions.Renderer.Catalog.activeCluster.get()?.metadata.uid;
21
+ const aiEnabled = require_ai_preferences_store.AiPreferencesStore.getInstanceOrCreate().enabled;
22
+ const askAi = () => {
23
+ if (!clusterId || !require_ai_preferences_store.AiPreferencesStore.getInstanceOrCreate().enabled) return;
24
+ const name = object.getName();
25
+ require_ai_diagnostic_handoff.explainDiagnosticFinding({
26
+ clusterId,
27
+ title: `${object.kind} ${name}: operational summary`.slice(0, 160),
28
+ summary: [...health.rows.map((row) => `${row.name}: ${row.value}`), ...health.issue ? [`Key issue: ${health.issue}`] : []].join("\n").slice(0, 6e3),
29
+ resource: {
30
+ kind: object.kind,
31
+ name,
32
+ ...namespace ? { namespace } : {}
33
+ }
34
+ });
35
+ };
36
+ const node = object.spec?.nodeName;
37
+ const open = (path) => {
38
+ Promise.resolve(require_extensions.Renderer.Navigation.showDetails(path)).catch(() => {});
39
+ };
40
+ return /* @__PURE__ */ require_jsx_runtime.jsxs("section", {
41
+ className: "power-operational-summary",
42
+ style: { marginBottom: 16 },
43
+ children: [
44
+ /* @__PURE__ */ require_jsx_runtime.jsx("style", { children: `
45
+ .power-operational-summary > .DrawerTitle.power-operational-title { margin-bottom: 10px; }
46
+ .power-operational-summary .power-resource-action::before { content: none; }
47
+ .power-operational-summary .power-resource-action { border: 1px solid var(--borderFaintColor); background: var(--buttonDefaultBackground); transition: background-color 140ms, border-color 140ms; }
48
+ .power-operational-summary .power-resource-action:not(:disabled):hover { background: color-mix(in srgb, var(--buttonDefaultBackground) 85%, var(--textColorPrimary)); border-color: var(--borderColor); }
49
+ .power-operational-summary .power-resource-action:active { filter: brightness(1.12); }
50
+ .power-operational-summary .power-resource-action:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
51
+ ` }),
52
+ /* @__PURE__ */ require_jsx_runtime.jsx(DrawerTitle, {
53
+ className: "power-operational-title",
54
+ children: "Operational summary"
55
+ }),
56
+ /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
57
+ name: "Health",
58
+ children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
59
+ style: {
60
+ color: health.state === "healthy" ? "var(--colorOk)" : health.state === "warning" ? "var(--colorWarning)" : "var(--textColorSecondary)",
61
+ display: "inline-flex",
62
+ alignItems: "center",
63
+ gap: 6
64
+ },
65
+ children: [/* @__PURE__ */ require_jsx_runtime.jsx(Icon, { material: health.state === "healthy" ? "check_circle" : health.state === "warning" ? "warning" : "help_outline" }), health.state === "healthy" ? "Healthy" : health.state === "warning" ? "Needs attention" : "Unknown"]
66
+ })
67
+ }),
68
+ health.rows.map((row) => /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
69
+ name: row.name,
70
+ children: row.value
71
+ }, row.name)),
72
+ health.issue && /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
73
+ name: "Key issue",
74
+ children: health.issue
75
+ }),
76
+ namespace && object.kind !== "Namespace" && /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
77
+ name: "Namespace",
78
+ children: /* @__PURE__ */ require_jsx_runtime.jsx("button", {
79
+ type: "button",
80
+ className: "link",
81
+ onClick: () => open(require_extensions.Renderer.K8sApi.namespacesApi.getUrl({ name: namespace })),
82
+ children: namespace
83
+ })
84
+ }),
85
+ /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
86
+ name: "Investigate",
87
+ children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
88
+ style: {
89
+ display: "flex",
90
+ flexWrap: "wrap",
91
+ gap: 12
92
+ },
93
+ children: [onOpenDiagnostics && /* @__PURE__ */ require_jsx_runtime.jsxs(Button, {
94
+ className: "power-resource-action",
95
+ onClick: () => onOpenDiagnostics(namespace, {
96
+ kind: object.kind,
97
+ name: object.metadata.name ?? object.getName(),
98
+ uid: object.metadata.uid
99
+ }),
100
+ style: actionStyle,
101
+ children: [/* @__PURE__ */ require_jsx_runtime.jsx(Icon, {
102
+ material: "insights",
103
+ size: 14,
104
+ "aria-hidden": "true"
105
+ }), " Open Diagnostics"]
106
+ }), /* @__PURE__ */ require_jsx_runtime.jsxs(Button, {
107
+ className: "power-resource-action",
108
+ onClick: askAi,
109
+ disabled: !aiEnabled || !clusterId,
110
+ title: !aiEnabled ? "Enable the AI assistant in settings" : !clusterId ? "Select a connected cluster" : "Attach this summary to the AI chat",
111
+ style: actionStyle,
112
+ children: [/* @__PURE__ */ require_jsx_runtime.jsx(Icon, {
113
+ material: "auto_awesome",
114
+ size: 14,
115
+ "aria-hidden": "true"
116
+ }), " Ask AI"]
117
+ })]
118
+ })
119
+ }),
120
+ node && /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
121
+ name: "Node",
122
+ children: /* @__PURE__ */ require_jsx_runtime.jsx("button", {
123
+ type: "button",
124
+ className: "link",
125
+ onClick: () => open(require_extensions.Renderer.K8sApi.nodesApi.getUrl({ name: node })),
126
+ children: node
127
+ })
128
+ })
129
+ ]
130
+ });
131
+ });
132
+ //#endregion
133
+ exports.ResourceHealthDetails = ResourceHealthDetails;
134
+
135
+ //# sourceMappingURL=resource-health-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-health-details.js","names":[],"sources":["../../../src/renderer/details/resource-health-details.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { observer } from \"mobx-react\";\nimport { type HealthObject, summarizeObjectHealth } from \"../../common/resource-health\";\nimport { AiPreferencesStore } from \"../../common/store/ai-preferences-store\";\nimport { explainDiagnosticFinding } from \"../ai-diagnostic-handoff\";\n\nconst { Button, DrawerItem, DrawerTitle, Icon } = Renderer.Component;\nconst actionStyle = {\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n minHeight: 28,\n padding: \"4px 8px\",\n} as const;\n\nexport type ResourceHealthDetailsProps = Renderer.Component.KubeObjectDetailsProps & {\n onOpenDiagnostics?: (namespace?: string, resource?: { kind: string; name: string; uid?: string }) => void;\n};\n\nexport const ResourceHealthDetails = observer(({ object, onOpenDiagnostics }: ResourceHealthDetailsProps) => {\n const health = summarizeObjectHealth(object as HealthObject);\n const namespace = object.getNs();\n const clusterId = Renderer.Catalog.activeCluster.get()?.metadata.uid;\n const aiEnabled = AiPreferencesStore.getInstanceOrCreate<AiPreferencesStore>().enabled;\n const askAi = () => {\n if (!clusterId || !AiPreferencesStore.getInstanceOrCreate<AiPreferencesStore>().enabled) return;\n const name = object.getName();\n explainDiagnosticFinding({\n clusterId,\n title: `${object.kind} ${name}: operational summary`.slice(0, 160),\n summary: [\n ...health.rows.map((row) => `${row.name}: ${row.value}`),\n ...(health.issue ? [`Key issue: ${health.issue}`] : []),\n ]\n .join(\"\\n\")\n .slice(0, 6000),\n resource: { kind: object.kind, name, ...(namespace ? { namespace } : {}) },\n });\n };\n const node = (object as HealthObject).spec?.nodeName;\n const open = (path: string) => {\n void Promise.resolve(Renderer.Navigation.showDetails(path)).catch(() => {});\n };\n return (\n <section className=\"power-operational-summary\" style={{ marginBottom: 16 }}>\n <style>{`\n .power-operational-summary > .DrawerTitle.power-operational-title { margin-bottom: 10px; }\n .power-operational-summary .power-resource-action::before { content: none; }\n .power-operational-summary .power-resource-action { border: 1px solid var(--borderFaintColor); background: var(--buttonDefaultBackground); transition: background-color 140ms, border-color 140ms; }\n .power-operational-summary .power-resource-action:not(:disabled):hover { background: color-mix(in srgb, var(--buttonDefaultBackground) 85%, var(--textColorPrimary)); border-color: var(--borderColor); }\n .power-operational-summary .power-resource-action:active { filter: brightness(1.12); }\n .power-operational-summary .power-resource-action:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }\n `}</style>\n <DrawerTitle className=\"power-operational-title\">Operational summary</DrawerTitle>\n <DrawerItem name=\"Health\">\n <span\n style={{\n color:\n health.state === \"healthy\"\n ? \"var(--colorOk)\"\n : health.state === \"warning\"\n ? \"var(--colorWarning)\"\n : \"var(--textColorSecondary)\",\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: 6,\n }}\n >\n <Icon\n material={\n health.state === \"healthy\" ? \"check_circle\" : health.state === \"warning\" ? \"warning\" : \"help_outline\"\n }\n />\n {health.state === \"healthy\" ? \"Healthy\" : health.state === \"warning\" ? \"Needs attention\" : \"Unknown\"}\n </span>\n </DrawerItem>\n {health.rows.map((row) => (\n <DrawerItem key={row.name} name={row.name}>\n {row.value}\n </DrawerItem>\n ))}\n {health.issue && <DrawerItem name=\"Key issue\">{health.issue}</DrawerItem>}\n {namespace && object.kind !== \"Namespace\" && (\n <DrawerItem name=\"Namespace\">\n <button\n type=\"button\"\n className=\"link\"\n onClick={() => open(Renderer.K8sApi.namespacesApi.getUrl({ name: namespace }))}\n >\n {namespace}\n </button>\n </DrawerItem>\n )}\n <DrawerItem name=\"Investigate\">\n <span style={{ display: \"flex\", flexWrap: \"wrap\", gap: 12 }}>\n {onOpenDiagnostics && (\n <Button\n className=\"power-resource-action\"\n onClick={() =>\n onOpenDiagnostics(namespace, {\n kind: object.kind,\n name: object.metadata.name ?? object.getName(),\n uid: object.metadata.uid,\n })\n }\n style={actionStyle}\n >\n <Icon material=\"insights\" size={14} aria-hidden=\"true\" /> Open Diagnostics\n </Button>\n )}\n <Button\n className=\"power-resource-action\"\n onClick={askAi}\n disabled={!aiEnabled || !clusterId}\n title={\n !aiEnabled\n ? \"Enable the AI assistant in settings\"\n : !clusterId\n ? \"Select a connected cluster\"\n : \"Attach this summary to the AI chat\"\n }\n style={actionStyle}\n >\n <Icon material=\"auto_awesome\" size={14} aria-hidden=\"true\" /> Ask AI\n </Button>\n </span>\n </DrawerItem>\n {node && (\n <DrawerItem name=\"Node\">\n <button type=\"button\" className=\"link\" onClick={() => open(Renderer.K8sApi.nodesApi.getUrl({ name: node }))}>\n {node}\n </button>\n </DrawerItem>\n )}\n </section>\n );\n});\n"],"mappings":";;;;;;;AAMA,IAAM,EAAE,QAAQ,YAAY,aAAa,SAAS,mBAAA,SAAS;AAC3D,IAAM,cAAc;CAClB,SAAS;CACT,YAAY;CACZ,gBAAgB;CAChB,KAAK;CACL,WAAW;CACX,SAAS;AACX;AAMA,IAAa,wBAAwB,oCAAA,UAAU,EAAE,QAAQ,wBAAoD;CAC3G,MAAM,SAAS,wBAAA,sBAAsB,MAAsB;CAC3D,MAAM,YAAY,OAAO,MAAM;CAC/B,MAAM,YAAY,mBAAA,SAAS,QAAQ,cAAc,IAAI,CAAC,EAAE,SAAS;CACjE,MAAM,YAAY,6BAAA,mBAAmB,oBAAwC,CAAC,CAAC;CAC/E,MAAM,cAAc;EAClB,IAAI,CAAC,aAAa,CAAC,6BAAA,mBAAmB,oBAAwC,CAAC,CAAC,SAAS;EACzF,MAAM,OAAO,OAAO,QAAQ;EAC5B,8BAAA,yBAAyB;GACvB;GACA,OAAO,GAAG,OAAO,KAAK,GAAG,KAAK,uBAAuB,MAAM,GAAG,GAAG;GACjE,SAAS,CACP,GAAG,OAAO,KAAK,KAAK,QAAQ,GAAG,IAAI,KAAK,IAAI,IAAI,OAAO,GACvD,GAAI,OAAO,QAAQ,CAAC,cAAc,OAAO,OAAO,IAAI,CAAC,CACvD,CAAC,CACE,KAAK,IAAI,CAAC,CACV,MAAM,GAAG,GAAI;GAChB,UAAU;IAAE,MAAM,OAAO;IAAM;IAAM,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;GAAG;EAC3E,CAAC;CACH;CACA,MAAM,OAAQ,OAAwB,MAAM;CAC5C,MAAM,QAAQ,SAAiB;EAC7B,QAAa,QAAQ,mBAAA,SAAS,WAAW,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;CAC5E;CACA,OACE,oCAAA,KAAC,WAAD;EAAS,WAAU;EAA4B,OAAO,EAAE,cAAc,GAAG;YAAzE;GACE,oCAAA,IAAC,SAAD,EAAA,UAAQ;;;;;;;QAOC,CAAA;GACT,oCAAA,IAAC,aAAD;IAAa,WAAU;cAA0B;GAAgC,CAAA;GACjF,oCAAA,IAAC,YAAD;IAAY,MAAK;cACf,oCAAA,KAAC,QAAD;KACE,OAAO;MACL,OACE,OAAO,UAAU,YACb,mBACA,OAAO,UAAU,YACf,wBACA;MACR,SAAS;MACT,YAAY;MACZ,KAAK;KACP;eAXF,CAaE,oCAAA,IAAC,MAAD,EACE,UACE,OAAO,UAAU,YAAY,iBAAiB,OAAO,UAAU,YAAY,YAAY,eAE1F,CAAA,GACA,OAAO,UAAU,YAAY,YAAY,OAAO,UAAU,YAAY,oBAAoB,SACvF;;GACI,CAAA;GACX,OAAO,KAAK,KAAK,QAChB,oCAAA,IAAC,YAAD;IAA2B,MAAM,IAAI;cAClC,IAAI;GACK,GAFK,IAAI,IAET,CACb;GACA,OAAO,SAAS,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAa,OAAO;GAAkB,CAAA;GACvE,aAAa,OAAO,SAAS,eAC5B,oCAAA,IAAC,YAAD;IAAY,MAAK;cACf,oCAAA,IAAC,UAAD;KACE,MAAK;KACL,WAAU;KACV,eAAe,KAAK,mBAAA,SAAS,OAAO,cAAc,OAAO,EAAE,MAAM,UAAU,CAAC,CAAC;eAE5E;IACK,CAAA;GACE,CAAA;GAEd,oCAAA,IAAC,YAAD;IAAY,MAAK;cACf,oCAAA,KAAC,QAAD;KAAM,OAAO;MAAE,SAAS;MAAQ,UAAU;MAAQ,KAAK;KAAG;eAA1D,CACG,qBACC,oCAAA,KAAC,QAAD;MACE,WAAU;MACV,eACE,kBAAkB,WAAW;OAC3B,MAAM,OAAO;OACb,MAAM,OAAO,SAAS,QAAQ,OAAO,QAAQ;OAC7C,KAAK,OAAO,SAAS;MACvB,CAAC;MAEH,OAAO;gBATT,CAWE,oCAAA,IAAC,MAAD;OAAM,UAAS;OAAW,MAAM;OAAI,eAAY;MAAQ,CAAA,GAAC,mBACnD;SAEV,oCAAA,KAAC,QAAD;MACE,WAAU;MACV,SAAS;MACT,UAAU,CAAC,aAAa,CAAC;MACzB,OACE,CAAC,YACG,wCACA,CAAC,YACC,+BACA;MAER,OAAO;gBAXT,CAaE,oCAAA,IAAC,MAAD;OAAM,UAAS;OAAe,MAAM;OAAI,eAAY;MAAQ,CAAA,GAAC,SACvD;OACJ;;GACI,CAAA;GACX,QACC,oCAAA,IAAC,YAAD;IAAY,MAAK;cACf,oCAAA,IAAC,UAAD;KAAQ,MAAK;KAAS,WAAU;KAAO,eAAe,KAAK,mBAAA,SAAS,OAAO,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC;eACvG;IACK,CAAA;GACE,CAAA;EAEP;;AAEb,CAAC"}
@@ -0,0 +1,163 @@
1
+ const require_extensions = require("../_virtual/_global-external_@freelensapp/extensions.js");
2
+ const require__global_external_mobx_react = require("../_virtual/_global-external_mobx-react.js");
3
+ const require__global_external_react = require("../_virtual/_global-external_react.js");
4
+ const require_jsx_runtime = require("../_virtual/_global-external_react/jsx-runtime.js");
5
+ const require_service_diagnostics = require("../src/common/service-diagnostics.js");
6
+ //#region src/renderer/details/service-diagnostics-details.tsx
7
+ var { DrawerTitle, DrawerItem, Icon } = require_extensions.Renderer.Component;
8
+ var ServiceDiagnosticsDetails = require__global_external_mobx_react.observer(({ object }) => {
9
+ const [expanded, setExpanded] = require__global_external_react.useState(false);
10
+ const [refresh, setRefresh] = require__global_external_react.useState(0);
11
+ const [evidence, setEvidence] = require__global_external_react.useState({ loaded: false });
12
+ const namespace = object.getNs();
13
+ const name = object.getName();
14
+ const external = object.spec.type === "ExternalName";
15
+ require__global_external_react.useEffect(() => {
16
+ let active = true;
17
+ setEvidence({ loaded: false });
18
+ setExpanded(false);
19
+ if (external) {
20
+ setEvidence({ loaded: true });
21
+ return;
22
+ }
23
+ const load = async () => {
24
+ const [pods, slices] = await Promise.allSettled([require_extensions.Renderer.K8sApi.podsApi.list({ namespace }), require_extensions.Renderer.K8sApi.endpointSliceApi.list({ namespace }, { labelSelector: `kubernetes.io/service-name=${name}` })]);
25
+ if (active) setEvidence({
26
+ loaded: true,
27
+ pods: pods.status === "fulfilled" ? pods.value ?? void 0 : void 0,
28
+ slices: slices.status === "fulfilled" ? slices.value ?? void 0 : void 0
29
+ });
30
+ };
31
+ load();
32
+ return () => {
33
+ active = false;
34
+ };
35
+ }, [
36
+ namespace,
37
+ name,
38
+ external,
39
+ refresh
40
+ ]);
41
+ const result = require_service_diagnostics.diagnoseService(object, evidence.pods, evidence.slices);
42
+ const partial = !evidence.loaded || evidence.pods === void 0 || evidence.slices === void 0 || !!result.readyEndpoints && result.missingEndpointPorts;
43
+ const warning = !partial && !external && !!result.matchingPods && (!result.matchingPods.length || !result.readyEndpoints || result.readyPods?.length !== result.matchingPods.length || result.ports.some((port) => port.unresolved || port.numericMismatch));
44
+ const healthy = !partial && !external && !!result.matchingPods?.length && !warning;
45
+ const summaryColor = warning ? "var(--colorWarning)" : healthy ? "var(--colorOk)" : "var(--textColorSecondary)";
46
+ const listLimit = expanded ? Infinity : 5;
47
+ const hidden = Math.max(0, (result.matchingPods?.length ?? 0) - 5) + Math.max(0, (result.matchingSlices?.length ?? 0) - 5);
48
+ return /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
49
+ /* @__PURE__ */ require_jsx_runtime.jsx(DrawerTitle, { children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
50
+ style: {
51
+ display: "flex",
52
+ alignItems: "center",
53
+ justifyContent: "space-between",
54
+ gap: 8,
55
+ width: "100%"
56
+ },
57
+ children: [/* @__PURE__ */ require_jsx_runtime.jsx("span", {
58
+ style: {
59
+ flex: 1,
60
+ minWidth: 0
61
+ },
62
+ children: "Service backend diagnostics"
63
+ }), !external && /* @__PURE__ */ require_jsx_runtime.jsx("button", {
64
+ type: "button",
65
+ title: "Refresh backend evidence",
66
+ "aria-label": "Refresh evidence",
67
+ disabled: !evidence.loaded,
68
+ style: {
69
+ display: "inline-flex",
70
+ alignItems: "center",
71
+ justifyContent: "center",
72
+ width: 32,
73
+ height: 32,
74
+ flexShrink: 0,
75
+ padding: 0,
76
+ background: "transparent",
77
+ border: 0,
78
+ color: "var(--textColorSecondary)",
79
+ cursor: evidence.loaded ? "pointer" : "default",
80
+ opacity: evidence.loaded ? 1 : .4
81
+ },
82
+ onClick: () => setRefresh((value) => value + 1),
83
+ children: /* @__PURE__ */ require_jsx_runtime.jsx(Icon, {
84
+ material: "refresh",
85
+ tooltip: "Refresh backend evidence",
86
+ size: 18
87
+ })
88
+ })]
89
+ }) }),
90
+ /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
91
+ name: "Summary",
92
+ children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
93
+ style: { color: summaryColor },
94
+ children: [
95
+ /* @__PURE__ */ require_jsx_runtime.jsx(Icon, { material: warning ? "warning" : healthy ? "check_circle" : "info" }),
96
+ " ",
97
+ evidence.loaded ? result.summary : "Loading backend evidence…"
98
+ ]
99
+ })
100
+ }),
101
+ evidence.loaded && /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
102
+ /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
103
+ name: "Selector",
104
+ children: Object.entries(object.spec.selector ?? {}).map(([k, v]) => `${k}=${v}`).join(", ") || "None"
105
+ }),
106
+ result.ports.map((p) => /* @__PURE__ */ require_jsx_runtime.jsxs(DrawerItem, {
107
+ name: `Port ${p.name}`,
108
+ children: [
109
+ p.protocol,
110
+ " → ",
111
+ p.target,
112
+ " · EndpointSlice ports: ",
113
+ p.endpointPorts.join(", ") || "unavailable",
114
+ p.unresolved ? ` · named target unresolved in ${p.unresolved} selected pods` : "",
115
+ p.numericMismatch ? " · EndpointSlice port differs from numeric target" : ""
116
+ ]
117
+ }, p.name)),
118
+ result.matchingPods?.slice(0, listLimit).map((pod) => /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
119
+ name: "Selected pod",
120
+ children: /* @__PURE__ */ require_jsx_runtime.jsx("button", {
121
+ type: "button",
122
+ onClick: () => require_extensions.Renderer.Navigation.showDetails(pod.selfLink),
123
+ style: {
124
+ background: "transparent",
125
+ border: 0,
126
+ padding: 0,
127
+ color: "var(--primary)",
128
+ cursor: "pointer"
129
+ },
130
+ children: pod.getName()
131
+ })
132
+ }, pod.metadata.uid)),
133
+ result.matchingSlices?.slice(0, listLimit).map((slice) => /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
134
+ name: `EndpointSlice (${slice.addressType})`,
135
+ children: /* @__PURE__ */ require_jsx_runtime.jsx("button", {
136
+ type: "button",
137
+ onClick: () => require_extensions.Renderer.Navigation.showDetails(slice.selfLink),
138
+ style: {
139
+ background: "transparent",
140
+ border: 0,
141
+ padding: 0,
142
+ color: "var(--primary)",
143
+ cursor: "pointer"
144
+ },
145
+ children: slice.getName()
146
+ })
147
+ }, slice.metadata.uid)),
148
+ hidden > 0 && /* @__PURE__ */ require_jsx_runtime.jsx("button", {
149
+ type: "button",
150
+ onClick: () => setExpanded((value) => !value),
151
+ children: expanded ? "Show fewer resources" : `Show ${hidden} more resources`
152
+ }),
153
+ result.limitations.map((item) => /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
154
+ name: "Scope",
155
+ children: item
156
+ }, item))
157
+ ] })
158
+ ] });
159
+ });
160
+ //#endregion
161
+ exports.ServiceDiagnosticsDetails = ServiceDiagnosticsDetails;
162
+
163
+ //# sourceMappingURL=service-diagnostics-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-diagnostics-details.js","names":[],"sources":["../../../src/renderer/details/service-diagnostics-details.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { observer } from \"mobx-react\";\nimport { useEffect, useState } from \"react\";\nimport { diagnoseService } from \"../../common/service-diagnostics\";\n\nconst { DrawerTitle, DrawerItem, Icon } = Renderer.Component;\ntype Evidence = { pods?: Renderer.K8sApi.Pod[]; slices?: Renderer.K8sApi.EndpointSlice[]; loaded: boolean };\nexport const ServiceDiagnosticsDetails = observer(\n ({ object }: Renderer.Component.KubeObjectDetailsProps<Renderer.K8sApi.Service>) => {\n const [expanded, setExpanded] = useState(false);\n const [refresh, setRefresh] = useState(0);\n const [evidence, setEvidence] = useState<Evidence>({ loaded: false });\n const namespace = object.getNs();\n const name = object.getName();\n const external = object.spec.type === \"ExternalName\";\n useEffect(() => {\n let active = true;\n setEvidence({ loaded: false });\n setExpanded(false);\n if (external) {\n setEvidence({ loaded: true });\n return;\n }\n const load = async () => {\n const [pods, slices] = await Promise.allSettled([\n Renderer.K8sApi.podsApi.list({ namespace }),\n Renderer.K8sApi.endpointSliceApi.list({ namespace }, { labelSelector: `kubernetes.io/service-name=${name}` }),\n ]);\n if (active)\n setEvidence({\n loaded: true,\n pods: pods.status === \"fulfilled\" ? (pods.value ?? undefined) : undefined,\n slices: slices.status === \"fulfilled\" ? (slices.value ?? undefined) : undefined,\n });\n };\n void load();\n return () => {\n active = false;\n };\n }, [namespace, name, external, refresh]);\n const result = diagnoseService(object, evidence.pods, evidence.slices);\n const partial =\n !evidence.loaded ||\n evidence.pods === undefined ||\n evidence.slices === undefined ||\n (!!result.readyEndpoints && result.missingEndpointPorts);\n const warning =\n !partial &&\n !external &&\n !!result.matchingPods &&\n (!result.matchingPods.length ||\n !result.readyEndpoints ||\n result.readyPods?.length !== result.matchingPods.length ||\n result.ports.some((port) => port.unresolved || port.numericMismatch));\n const healthy = !partial && !external && !!result.matchingPods?.length && !warning;\n const summaryColor = warning ? \"var(--colorWarning)\" : healthy ? \"var(--colorOk)\" : \"var(--textColorSecondary)\";\n const listLimit = expanded ? Infinity : 5;\n const hidden =\n Math.max(0, (result.matchingPods?.length ?? 0) - 5) + Math.max(0, (result.matchingSlices?.length ?? 0) - 5);\n return (\n <>\n <DrawerTitle>\n <span\n style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 8, width: \"100%\" }}\n >\n <span style={{ flex: 1, minWidth: 0 }}>Service backend diagnostics</span>\n {!external && (\n <button\n type=\"button\"\n title=\"Refresh backend evidence\"\n aria-label=\"Refresh evidence\"\n disabled={!evidence.loaded}\n style={{\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 32,\n height: 32,\n flexShrink: 0,\n padding: 0,\n background: \"transparent\",\n border: 0,\n color: \"var(--textColorSecondary)\",\n cursor: evidence.loaded ? \"pointer\" : \"default\",\n opacity: evidence.loaded ? 1 : 0.4,\n }}\n onClick={() => setRefresh((value) => value + 1)}\n >\n <Icon material=\"refresh\" tooltip=\"Refresh backend evidence\" size={18} />\n </button>\n )}\n </span>\n </DrawerTitle>\n <DrawerItem name=\"Summary\">\n <span style={{ color: summaryColor }}>\n <Icon material={warning ? \"warning\" : healthy ? \"check_circle\" : \"info\"} />{\" \"}\n {evidence.loaded ? result.summary : \"Loading backend evidence…\"}\n </span>\n </DrawerItem>\n {evidence.loaded && (\n <>\n <DrawerItem name=\"Selector\">\n {Object.entries(object.spec.selector ?? {})\n .map(([k, v]) => `${k}=${v}`)\n .join(\", \") || \"None\"}\n </DrawerItem>\n {result.ports.map((p) => (\n <DrawerItem key={p.name} name={`Port ${p.name}`}>\n {p.protocol} → {p.target} · EndpointSlice ports: {p.endpointPorts.join(\", \") || \"unavailable\"}\n {p.unresolved ? ` · named target unresolved in ${p.unresolved} selected pods` : \"\"}\n {p.numericMismatch ? \" · EndpointSlice port differs from numeric target\" : \"\"}\n </DrawerItem>\n ))}\n {result.matchingPods?.slice(0, listLimit).map((pod) => (\n <DrawerItem key={pod.metadata.uid} name=\"Selected pod\">\n <button\n type=\"button\"\n onClick={() => Renderer.Navigation.showDetails(pod.selfLink)}\n style={{\n background: \"transparent\",\n border: 0,\n padding: 0,\n color: \"var(--primary)\",\n cursor: \"pointer\",\n }}\n >\n {pod.getName()}\n </button>\n </DrawerItem>\n ))}\n {result.matchingSlices?.slice(0, listLimit).map((slice) => (\n <DrawerItem key={slice.metadata.uid} name={`EndpointSlice (${slice.addressType})`}>\n <button\n type=\"button\"\n onClick={() => Renderer.Navigation.showDetails(slice.selfLink)}\n style={{\n background: \"transparent\",\n border: 0,\n padding: 0,\n color: \"var(--primary)\",\n cursor: \"pointer\",\n }}\n >\n {slice.getName()}\n </button>\n </DrawerItem>\n ))}\n {hidden > 0 && (\n <button type=\"button\" onClick={() => setExpanded((value) => !value)}>\n {expanded ? \"Show fewer resources\" : `Show ${hidden} more resources`}\n </button>\n )}\n {result.limitations.map((item) => (\n <DrawerItem key={item} name=\"Scope\">\n {item}\n </DrawerItem>\n ))}\n </>\n )}\n </>\n );\n },\n);\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ const require__global_external_mobx_react = require("./_virtual/_global-external_mobx-react.js");
2
+ const require_ai_preferences_store = require("./src/common/store/ai-preferences-store.js");
3
+ const require_jsx_runtime = require("./_virtual/_global-external_react/jsx-runtime.js");
4
+ //#region src/renderer/diagnostic-explain-button.tsx
5
+ var DiagnosticExplainButton = require__global_external_mobx_react.observer(function DiagnosticExplainButton(props) {
6
+ const enabled = require_ai_preferences_store.AiPreferencesStore.getInstanceOrCreate().enabled;
7
+ return /* @__PURE__ */ require_jsx_runtime.jsx("button", {
8
+ ...props,
9
+ disabled: !enabled || props.disabled,
10
+ title: enabled ? props.title : "Enable AI in Power settings to explain this finding"
11
+ });
12
+ });
13
+ //#endregion
14
+ exports.DiagnosticExplainButton = DiagnosticExplainButton;
15
+
16
+ //# sourceMappingURL=diagnostic-explain-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic-explain-button.js","names":[],"sources":["../../src/renderer/diagnostic-explain-button.tsx"],"sourcesContent":["import { observer } from \"mobx-react\";\nimport { AiPreferencesStore } from \"../common/store/ai-preferences-store\";\n\nimport type { ButtonHTMLAttributes } from \"react\";\n\nexport const DiagnosticExplainButton = observer(function DiagnosticExplainButton(\n props: ButtonHTMLAttributes<HTMLButtonElement>,\n) {\n const enabled = AiPreferencesStore.getInstanceOrCreate<AiPreferencesStore>().enabled;\n return (\n <button\n {...props}\n disabled={!enabled || props.disabled}\n title={enabled ? props.title : \"Enable AI in Power settings to explain this finding\"}\n />\n );\n});\n"],"mappings":";;;;AAKA,IAAa,0BAA0B,oCAAA,SAAS,SAAS,wBACvD,OACA;CACA,MAAM,UAAU,6BAAA,mBAAmB,oBAAwC,CAAC,CAAC;CAC7E,OACE,oCAAA,IAAC,UAAD;EACE,GAAI;EACJ,UAAU,CAAC,WAAW,MAAM;EAC5B,OAAO,UAAU,MAAM,QAAQ;CAChC,CAAA;AAEL,CAAC"}
@@ -0,0 +1,53 @@
1
+ //#region src/renderer/diagnostics-state.ts
2
+ var states = /* @__PURE__ */ new Map();
3
+ function readDiagnosticsState(clusterId) {
4
+ return states.get(clusterId) ?? {
5
+ tab: "Consumers",
6
+ filter: "",
7
+ needsAttention: true,
8
+ groupMode: "workload",
9
+ namespacesOpen: [],
10
+ sort: "cpu",
11
+ expanded: [],
12
+ selected: "",
13
+ pendingUid: "",
14
+ reason: "",
15
+ warningOnly: true,
16
+ groupedTimeline: true,
17
+ openTimeline: [],
18
+ scrollTop: 0
19
+ };
20
+ }
21
+ function saveDiagnosticsState(clusterId, state) {
22
+ if (!clusterId) return;
23
+ states.delete(clusterId);
24
+ states.set(clusterId, state);
25
+ if (states.size > 30) states.delete(states.keys().next().value);
26
+ }
27
+ var DIAGNOSTICS_NAMESPACE_EVENT = "power-diagnostics-namespace";
28
+ function focusDiagnosticsNamespace(clusterId, namespace, resourceScope) {
29
+ if (!clusterId || !namespace && !resourceScope) return;
30
+ saveDiagnosticsState(clusterId, {
31
+ ...readDiagnosticsState(clusterId),
32
+ tab: "Consumers",
33
+ namespaceScope: namespace,
34
+ resourceScope,
35
+ filter: "",
36
+ needsAttention: false,
37
+ groupMode: namespace ? "namespace" : "workload",
38
+ namespacesOpen: namespace ? [namespace] : [],
39
+ scrollTop: 0
40
+ });
41
+ window.dispatchEvent(new CustomEvent(DIAGNOSTICS_NAMESPACE_EVENT, { detail: {
42
+ clusterId,
43
+ namespace,
44
+ resourceScope
45
+ } }));
46
+ }
47
+ //#endregion
48
+ exports.DIAGNOSTICS_NAMESPACE_EVENT = DIAGNOSTICS_NAMESPACE_EVENT;
49
+ exports.focusDiagnosticsNamespace = focusDiagnosticsNamespace;
50
+ exports.readDiagnosticsState = readDiagnosticsState;
51
+ exports.saveDiagnosticsState = saveDiagnosticsState;
52
+
53
+ //# sourceMappingURL=diagnostics-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics-state.js","names":[],"sources":["../../src/renderer/diagnostics-state.ts"],"sourcesContent":["export interface DiagnosticsResourceScope {\n kind: string;\n name: string;\n uid?: string;\n}\n\nexport interface DiagnosticsViewState {\n tab: \"Consumers\" | \"Timeline\" | \"Pending\" | \"Not ready\";\n filter: string;\n namespaceScope?: string;\n resourceScope?: DiagnosticsResourceScope;\n needsAttention: boolean;\n groupMode: string;\n namespacesOpen: string[];\n sort: string;\n expanded: string[];\n selected: string;\n pendingUid: string;\n notReadyUid?: string;\n reason: string;\n warningOnly: boolean;\n groupedTimeline: boolean;\n openTimeline: string[];\n scrollTop: number;\n}\n// renderer memory stores view preferences only, never snapshots or resource contents\nconst states = new Map<string, DiagnosticsViewState>();\nexport function readDiagnosticsState(clusterId: string): DiagnosticsViewState {\n return (\n states.get(clusterId) ?? {\n tab: \"Consumers\",\n filter: \"\",\n needsAttention: true,\n groupMode: \"workload\",\n namespacesOpen: [],\n sort: \"cpu\",\n expanded: [],\n selected: \"\",\n pendingUid: \"\",\n reason: \"\",\n warningOnly: true,\n groupedTimeline: true,\n openTimeline: [],\n scrollTop: 0,\n }\n );\n}\nexport function saveDiagnosticsState(clusterId: string, state: DiagnosticsViewState): void {\n if (!clusterId) return;\n states.delete(clusterId);\n states.set(clusterId, state);\n if (states.size > 30) states.delete(states.keys().next().value!);\n}\nexport function clearDiagnosticsStates(): void {\n states.clear();\n}\n\nexport const DIAGNOSTICS_NAMESPACE_EVENT = \"power-diagnostics-namespace\";\nexport function focusDiagnosticsNamespace(\n clusterId: string,\n namespace?: string,\n resourceScope?: DiagnosticsResourceScope,\n): void {\n if (!clusterId || (!namespace && !resourceScope)) return;\n saveDiagnosticsState(clusterId, {\n ...readDiagnosticsState(clusterId),\n tab: \"Consumers\",\n namespaceScope: namespace,\n resourceScope,\n filter: \"\",\n needsAttention: false,\n groupMode: namespace ? \"namespace\" : \"workload\",\n namespacesOpen: namespace ? [namespace] : [],\n scrollTop: 0,\n });\n window.dispatchEvent(\n new CustomEvent(DIAGNOSTICS_NAMESPACE_EVENT, { detail: { clusterId, namespace, resourceScope } }),\n );\n}\n"],"mappings":";AA0BA,IAAM,yBAAS,IAAI,IAAkC;AACrD,SAAgB,qBAAqB,WAAyC;CAC5E,OACE,OAAO,IAAI,SAAS,KAAK;EACvB,KAAK;EACL,QAAQ;EACR,gBAAgB;EAChB,WAAW;EACX,gBAAgB,CAAC;EACjB,MAAM;EACN,UAAU,CAAC;EACX,UAAU;EACV,YAAY;EACZ,QAAQ;EACR,aAAa;EACb,iBAAiB;EACjB,cAAc,CAAC;EACf,WAAW;CACb;AAEJ;AACA,SAAgB,qBAAqB,WAAmB,OAAmC;CACzF,IAAI,CAAC,WAAW;CAChB,OAAO,OAAO,SAAS;CACvB,OAAO,IAAI,WAAW,KAAK;CAC3B,IAAI,OAAO,OAAO,IAAI,OAAO,OAAO,OAAO,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAM;AACjE;AAKA,IAAa,8BAA8B;AAC3C,SAAgB,0BACd,WACA,WACA,eACM;CACN,IAAI,CAAC,aAAc,CAAC,aAAa,CAAC,eAAgB;CAClD,qBAAqB,WAAW;EAC9B,GAAG,qBAAqB,SAAS;EACjC,KAAK;EACL,gBAAgB;EAChB;EACA,QAAQ;EACR,gBAAgB;EAChB,WAAW,YAAY,cAAc;EACrC,gBAAgB,YAAY,CAAC,SAAS,IAAI,CAAC;EAC3C,WAAW;CACb,CAAC;CACD,OAAO,cACL,IAAI,YAAY,6BAA6B,EAAE,QAAQ;EAAE;EAAW;EAAW;CAAc,EAAE,CAAC,CAClG;AACF"}
@@ -12,7 +12,7 @@ var diagnosticsStyles = `
12
12
  .power-diagnostics .diagnostics-summary>button.summary-card{margin:0;width:100%;text-align:left;line-height:inherit;font:inherit}.power-diagnostics .diagnostics-summary>button.summary-card:hover{border-color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 5%,var(--contentColor))}
13
13
  @container diagnostics (min-width:701px) and (max-width:900px){.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px}.power-diagnostics .consumers-toolbar>.warning-filter{grid-column:1/-1}}
14
14
  .power-diagnostics .consumer-identity-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;margin-bottom:4px}.power-diagnostics .consumer-identity-label{min-width:0;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-identity-row .consumer-resource-link{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0;margin:0;padding:0;border:0;background:transparent;text-align:left;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-resource-link:hover{color:var(--primary)}.power-diagnostics .consumer-resource-link>.Icon{flex-shrink:0;opacity:.65}.power-diagnostics .consumer-expand-slot{display:flex;justify-content:flex-end;flex-shrink:0;padding-left:10px;border-left:1px solid var(--borderColor)}.power-diagnostics .consumer-identity-row .consumer-expand{display:flex;align-items:center;justify-content:center;width:28px;height:28px;min-width:28px;margin:0;padding:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary)}.power-diagnostics .consumer-identity-row .consumer-expand:hover{color:var(--primary);border-color:var(--primary)}
15
- .power-diagnostics .consumer-depth-1>td:first-child{padding-left:32px;position:relative}.power-diagnostics .consumer-depth-2>td:first-child{padding-left:48px;position:relative}.power-diagnostics .consumer-depth-1>td:first-child:before,.power-diagnostics .consumer-depth-2>td:first-child:before{content:"";position:absolute;top:0;bottom:0;left:16px;width:1px;background:var(--borderColor)}.power-diagnostics .consumer-depth-2>td:first-child:before{left:32px}.power-diagnostics .consumer-pod-row>td{background:color-mix(in srgb,var(--textColorSecondary) 3%,transparent)}.power-diagnostics .consumer-namespace-row>td:first-child{font-weight:500}.power-diagnostics .namespace-identity{display:inline-flex;align-items:center;gap:7px;font-size:14px}.power-diagnostics .namespace-identity>.Icon{color:var(--primary)}
15
+ .power-diagnostics .consumer-depth-1>td:first-child{padding-left:32px;position:relative}.power-diagnostics .consumer-depth-2>td:first-child{padding-left:48px;position:relative}.power-diagnostics .consumer-depth-1>td:first-child:before,.power-diagnostics .consumer-depth-2>td:first-child:before{content:"";position:absolute;top:0;bottom:0;left:16px;width:1px;background:var(--borderColor)}.power-diagnostics .consumer-depth-2>td:first-child:before{left:32px}.power-diagnostics .consumer-pod-row>td{background:color-mix(in srgb,var(--textColorSecondary) 3%,transparent)}.power-diagnostics .consumer-namespace-row>td:first-child{font-weight:500}.power-diagnostics .namespace-identity{min-width:0;max-width:100%;display:inline-flex;align-items:center;gap:7px;font-size:14px}.power-diagnostics .namespace-identity>.Icon{color:var(--primary)}
16
16
  .power-diagnostics .consumers-table{table-layout:fixed;min-width:900px}.power-diagnostics .consumers-table .metric-column{width:205px}.power-diagnostics .consumers-table .unscheduled-column{width:165px}.power-diagnostics .consumers-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .consumers-table th:last-child{white-space:normal;word-break:normal;overflow-wrap:normal}.power-diagnostics .consumers-table td{padding-top:12px;padding-bottom:12px}.power-diagnostics .consumer-identity-main{flex:1;min-width:0}.power-diagnostics .consumer-title-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.power-diagnostics .consumer-title-line .consumer-status{margin-left:0}.power-diagnostics .consumer-subtitle{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:5px;line-height:1.4}.power-diagnostics .consumer-subtitle>.Icon{flex-shrink:0}.power-diagnostics .consumer-row-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.power-diagnostics .consumer-identity-row{align-items:flex-start;margin-bottom:0}.power-diagnostics .consumer-identity-row .consumer-resource-link{font-size:14px;color:var(--textColorPrimary)}.power-diagnostics .resource-value,.power-diagnostics .resource-request{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.power-diagnostics .resource-value small,.power-diagnostics .resource-request small{font-size:11px;white-space:nowrap}.power-diagnostics .resource-cell .resource-value strong{font-size:15px;font-weight:600}.power-diagnostics .resource-request{margin-top:3px}.power-diagnostics .resource-request>span{font-size:12px}.power-diagnostics .resource-cell .resource-coverage{margin-top:4px;font-size:10px;line-height:1.4}.power-diagnostics .unscheduled-cell>div{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.power-diagnostics .unscheduled-cell>div+div{margin-top:5px}.power-diagnostics .unscheduled-cell small{font-size:11px}.power-diagnostics .unscheduled-cell span{font-size:12px}.power-diagnostics .unscheduled-cell.has-requests span{color:var(--colorWarning,#e0a134)}.power-diagnostics .unscheduled-empty{color:var(--textColorSecondary);font-size:12px}.power-diagnostics .timeline-entry{color:var(--textColorPrimary)}.power-diagnostics .timeline-entry.warning .timeline-content h4{color:var(--colorWarning,#e0a134)}.power-diagnostics .pending-heading{padding:14px}.power-diagnostics .pending-heading>p{color:var(--textColorSecondary);margin-bottom:0}.power-diagnostics .diagnostics-summary{gap:10px;margin-bottom:16px}.power-diagnostics .diagnostics-summary>.summary-card{padding:10px 14px}.power-diagnostics .diagnostics-summary strong{font-size:22px}.power-diagnostics .diagnostics-summary .summary-icon{width:36px;height:36px;border-radius:8px}.power-diagnostics .diagnostics-summary .summary-card>div>span{font-size:12px}.power-diagnostics .diagnostics-explainer{padding:9px 12px}.power-diagnostics .view-intro{margin:12px 0}.power-diagnostics .view-intro p{font-size:12px}
17
17
  .power-diagnostics .pending-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.power-diagnostics .pending-title-row>div{min-width:0}.power-diagnostics .pending-title-row strong{font-size:12px;color:var(--textColorSecondary);overflow-wrap:anywhere}.power-diagnostics .pending-state-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px}.power-diagnostics .pending-state-row h3{margin:0}.power-diagnostics .pending-title-row .pending-open-action{margin:0;flex-shrink:0;min-height:28px;padding:3px 8px;font-size:12px;white-space:nowrap}.power-diagnostics .pending-request-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.power-diagnostics .pending-request-badges>span{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary);font-size:12px}.power-diagnostics .pending-request-badges strong{color:var(--textColorPrimary);font-weight:500;font-variant-numeric:tabular-nums}
18
18
  .power-diagnostics .attention-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px}.power-diagnostics .attention-empty strong{font-size:15px;color:var(--textColorPrimary)}.power-diagnostics .attention-empty small{max-width:520px;line-height:1.5}.power-diagnostics .attention-empty>.Icon{color:var(--textColorSecondary)}.power-diagnostics .attention-empty.all-ready>.Icon,.power-diagnostics .attention-empty.all-ready strong{color:var(--colorSuccess,#67b58b)}.power-diagnostics .attention-empty.all-ready{border-color:color-mix(in srgb,var(--colorSuccess,#67b58b) 35%,var(--borderColor));background:color-mix(in srgb,var(--colorSuccess,#67b58b) 3%,transparent)}.power-diagnostics .consumer-tone-error>td{background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}.power-diagnostics .consumer-tone-warning>td{background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}.power-diagnostics .consumer-tone-error>td:first-child{box-shadow:inset 3px 0 var(--colorError,#e56d79)}.power-diagnostics .consumer-tone-warning>td:first-child{box-shadow:inset 3px 0 var(--colorWarning,#e0a134)}
@@ -32,6 +32,15 @@ var diagnosticsStyles = `
32
32
  .power-diagnostics .pending-heading.error{border-left:3px solid var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}
33
33
  .power-diagnostics .pending-heading.warning{border-left:3px solid var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}
34
34
  .power-diagnostics .pending-heading>.consumer-status{margin:0 0 10px}
35
+ .power-diagnostics .consumers-table .consumer-column{width:380px}.power-diagnostics .consumer-title-line{flex-wrap:wrap;white-space:normal}.power-diagnostics .consumer-identity-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.power-diagnostics .consumer-title-line .consumer-resource-link{display:inline-flex;max-width:100%;transition:color 160ms ease}.power-diagnostics .consumer-link-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.power-diagnostics .consumer-identity-row .consumer-resource-link:hover,.power-diagnostics .consumer-identity-row .consumer-resource-link:focus-visible{color:var(--primary)}.power-diagnostics .consumer-resource-link:focus-visible{outline:2px solid var(--primary);outline-offset:3px}.power-diagnostics .consumer-pod-row .consumer-resource-link,.power-diagnostics .consumer-pod-row .consumer-subtitle{padding-left:8px}@media(prefers-reduced-motion:reduce){.power-diagnostics .consumer-title-line .consumer-resource-link{transition:none}}.power-diagnostics .consumer-subtitle{flex-wrap:nowrap;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.power-diagnostics .consumer-status{flex-shrink:1;min-width:0;white-space:normal;overflow-wrap:anywhere}.power-diagnostics .consumers-table td{padding-top:8px;padding-bottom:8px}.power-diagnostics .resource-cell .request-burst{display:inline-flex;margin-top:3px;font-size:10px;white-space:nowrap}.power-diagnostics .explain-finding{font-size:11px;padding:3px 6px}.power-diagnostics .consumer-row-actions .explain-finding{width:26px;height:26px;padding:3px;margin:0}.power-diagnostics .timeline-content details{margin-top:6px}.power-diagnostics .timeline-content details li{margin:8px 0}
36
+ .power-diagnostics .incident-copy{display:inline-flex;align-items:center;gap:8px;margin-right:8px}.power-diagnostics .incident-copy button{min-width:28px;min-height:28px;padding:4px;margin:0}.power-diagnostics .incident-copy [role=status]{font-size:11px;max-width:150px}.power-diagnostics .consumer-row-actions .incident-copy{margin-right:0}.power-diagnostics .consumer-row-actions .explain-finding{min-width:28px;min-height:28px}
37
+ .power-diagnostics .explain-finding{min-width:28px;min-height:28px}.power-diagnostics .consumer-row-actions .incident-copy{position:relative}.power-diagnostics .consumer-row-actions .incident-copy [role=status]{position:absolute;right:0;top:100%;white-space:nowrap;background:var(--contentColor);padding:3px 6px;border:1px solid var(--borderColor);z-index:2;max-width:none}
38
+
39
+ .power-diagnostics .incident-copy button,.power-diagnostics .consumer-row-actions .explain-finding{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:28px;height:28px;min-width:28px;min-height:28px;gap:0;padding:0;line-height:1;vertical-align:middle}.power-diagnostics .incident-copy button>.Icon,.power-diagnostics .consumer-row-actions .explain-finding>.Icon{margin:0;flex-shrink:0}
40
+
41
+ .power-diagnostics .timeline-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.power-diagnostics .timeline-card-top>.timeline-card-heading{flex:1;min-width:0;padding-right:0}.power-diagnostics .timeline-card-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.power-diagnostics .timeline-card-actions .incident-copy{position:relative;margin:0}.power-diagnostics .timeline-card-actions .incident-copy [role=status]{position:absolute;right:0;top:calc(100% + 6px);white-space:nowrap;max-width:260px;background:var(--contentColor);border:1px solid var(--borderColor);padding:4px 6px;z-index:2}.power-diagnostics .timeline-content .timeline-card-actions .timeline-resource-action{position:static;width:28px;height:28px;min-width:28px;margin:0}.power-diagnostics .timeline-card-actions .explain-finding{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;margin:0;padding:0 8px;line-height:1}.power-diagnostics .timeline-card-actions .explain-finding>.Icon{margin:0;flex-shrink:0}
42
+ .power-diagnostics .namespace-scope{display:flex;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:6px;margin:4px 0 16px;min-height:32px}.power-diagnostics .namespace-scope-label{overflow-wrap:anywhere}.power-diagnostics .namespace-scope button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:4px 0;margin:0;border:0;background:transparent;box-shadow:none;color:var(--textColorSecondary)}.power-diagnostics .namespace-scope button:hover{color:var(--primary);background:transparent}.power-diagnostics .namespace-scope button:focus-visible{outline:2px solid var(--primary);outline-offset:3px}
43
+ @container diagnostics (max-width:700px){.power-diagnostics .timeline-card-actions .timeline-action-label{display:none}.power-diagnostics .timeline-card-actions .explain-finding{width:28px;min-width:28px;padding:0}.power-diagnostics .timeline-card-top{gap:12px}}
35
44
  `;
36
45
  //#endregion
37
46
  exports.diagnosticsStyles = diagnosticsStyles;
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.css.js","names":[],"sources":["../../src/renderer/diagnostics.css.ts"],"sourcesContent":["export const diagnosticsStyles = `\n.power-diagnostics{container-type:inline-size;container-name:diagnostics;box-sizing:border-box;color:var(--textColorPrimary);max-width:100%;line-height:1.5}\n.power-diagnostics *{box-sizing:border-box}.power-diagnostics h2{margin:0 0 6px;font-size:24px}.power-diagnostics h3{margin:0 0 6px;font-size:18px}.power-diagnostics p{margin:8px 0 16px}.power-diagnostics .page-intro,.power-diagnostics small,.power-diagnostics .view-intro p{color:var(--textColorSecondary)}\n.power-diagnostics nav{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;border-bottom:1px solid var(--borderColor);padding-bottom:8px}.power-diagnostics button{cursor:pointer;display:inline-flex;align-items:center;gap:6px;border-radius:5px;border:1px solid var(--borderColor);background:var(--contentColor);color:var(--textColorPrimary);font:inherit;padding:6px 10px;margin:3px 4px 3px 0}.power-diagnostics button:hover{border-color:var(--primary)}.power-diagnostics button[aria-pressed=true]{color:var(--primary);border-color:var(--primary)}.power-diagnostics button:disabled{opacity:.5;cursor:default}.power-diagnostics :is(button,input,summary):focus-visible{outline:2px solid var(--primary);outline-offset:2px}\n.power-diagnostics .diagnostics-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.power-diagnostics .snapshot-meta{white-space:pre-wrap;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .view-intro{margin:16px 0}.power-diagnostics .view-intro p{margin:4px 0 0}.power-diagnostics .diagnostics-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:22px}.power-diagnostics .diagnostics-summary>.summary-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--borderColor);border-radius:8px;background:var(--contentColor)}.power-diagnostics .diagnostics-summary strong{display:block;font-size:25px;font-variant-numeric:tabular-nums}.power-diagnostics .diagnostics-summary span{color:var(--textColorSecondary)}.power-diagnostics .summary-card{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.workloads{--summary-color:#bc86df}.power-diagnostics .summary-card.pods{--summary-color:var(--primary,#609ee8)}.power-diagnostics .summary-card.pending{--summary-color:var(--colorSuccess,#67b58b)}.power-diagnostics .summary-card.pending.unavailable{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.unavailable strong{font-size:18px}.power-diagnostics .summary-card.attention{--summary-color:var(--colorWarning,#e0a134)}.power-diagnostics .summary-card strong{color:var(--summary-color)}.power-diagnostics .diagnostics-summary .summary-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:42px;height:42px;border-radius:10px;color:var(--summary-color);background:color-mix(in srgb,var(--summary-color) 12%,transparent)}.power-diagnostics .summary-icon .Icon{color:inherit}\n.power-diagnostics .toolbar{display:grid;align-items:end;gap:16px;margin-bottom:16px}.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px max-content}.power-diagnostics .timeline-toolbar{grid-template-columns:minmax(200px,1fr) 240px max-content}.power-diagnostics .toolbar>label{display:flex;flex-direction:column;gap:6px;min-width:0;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-select{display:block;min-width:180px;max-width:100%;vertical-align:middle}.power-diagnostics .toolbar .diagnostics-select{min-width:0;width:100%}.power-diagnostics .diagnostics-select>div{width:100%}.power-diagnostics .diagnostics-select .Select{min-width:0;width:100%}.power-diagnostics .diagnostics-select .Select__control{min-height:32px;height:32px}.power-diagnostics .diagnostics-select .Select__value-container{padding:0 8px;min-width:0}.power-diagnostics .diagnostics-select .Select__single-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.power-diagnostics .diagnostics-select .Select__input-container{margin:0;padding:0}.power-diagnostics .diagnostics-select .Select__indicator{padding:5px 8px}.power-diagnostics .diagnostics-input{display:block;min-width:0;height:32px}.power-diagnostics .diagnostics-input .Input{height:32px;min-height:32px;margin:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);padding:0 9px}.power-diagnostics .diagnostics-input .Input>.input-area{height:30px;min-height:0;min-width:0;padding:0;border:0;border-bottom:0}.power-diagnostics .diagnostics-input .Input>.input-area:after,.power-diagnostics .diagnostics-input .Input>.input-area:before{display:none}.power-diagnostics .diagnostics-input .Input:focus-within{border-color:var(--primary)}.power-diagnostics .diagnostics-input input{width:100%;max-width:100%;height:30px;min-height:0;padding:0;border:0;border-bottom:0;outline:none;background:transparent;color:var(--textColorPrimary);font:inherit}.power-diagnostics .diagnostics-input .Input:after,.power-diagnostics .diagnostics-input .Input:before{display:none}.power-diagnostics .warning-filter{display:flex;align-items:center;min-height:32px;padding:0 0 1px}.power-diagnostics .warning-filter .Checkbox{margin:0;white-space:nowrap}.power-diagnostics .warning-filter label{display:inline-flex;align-items:center;flex-direction:row;color:var(--textColorPrimary)}\n.power-diagnostics .evidence-table{min-width:660px;table-layout:fixed}.power-diagnostics .evidence-source{width:180px}.power-diagnostics .evidence-node{width:160px}.power-diagnostics .evidence-finding{width:auto}.power-diagnostics .evidence-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .evidence-table td:first-child{min-width:0;overflow-wrap:normal;word-break:normal}.power-diagnostics .evidence-table td:nth-child(2){overflow-wrap:break-word;word-break:normal}.power-diagnostics .evidence-table td:nth-child(3){overflow-wrap:anywhere}.power-diagnostics .diagnostics-table{overflow-x:auto;max-width:100%;border:1px solid var(--borderColor);border-radius:7px;margin:16px 0}.power-diagnostics table{width:100%;border-collapse:collapse}.power-diagnostics th,.power-diagnostics td{text-align:left;padding:14px 16px;border-bottom:1px solid var(--borderColor);vertical-align:top;overflow-wrap:anywhere}.power-diagnostics th{color:var(--textColorSecondary);font-weight:500;background:var(--contentColor)}.power-diagnostics td:first-child{min-width:240px}.power-diagnostics .numeric{text-align:right;min-width:170px;font-variant-numeric:tabular-nums}.power-diagnostics small{display:block;font-size:12px}.power-diagnostics .resource-cell strong{display:block;font-size:16px}.power-diagnostics .resource-cell>span{display:block;margin-top:8px}.power-diagnostics .diagnostics-explainer{margin:14px 0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:6px;overflow-wrap:anywhere}.power-diagnostics summary{cursor:pointer;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-empty{padding:28px;text-align:center;border:1px dashed var(--borderColor);border-radius:8px;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-notice{padding:12px 16px;border-left:3px solid var(--colorWarning,#d49a35);background:var(--contentColor)}.power-diagnostics .pending-heading{padding:18px;border:1px solid var(--borderColor);border-radius:8px;margin-top:20px}.power-diagnostics .pending-heading>strong{display:block;color:var(--textColorSecondary);margin-bottom:8px}\n.power-diagnostics .timeline-legend{display:flex;flex-wrap:wrap;gap:14px;margin:18px 0}.power-diagnostics .timeline-type{--event-color:var(--textColorSecondary);display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .timeline-type:before{content:\"\";width:8px;height:8px;border-radius:50%;background:var(--event-color);flex-shrink:0}.power-diagnostics .observed{--event-color:#7eacb5}.power-diagnostics .warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .restart{--event-color:#bc86df}.power-diagnostics .readiness{--event-color:var(--colorSuccess,#67b58b)}\n.power-diagnostics .diagnostics-timeline{list-style:none;padding:0;margin:24px 0}.power-diagnostics .timeline-entry{display:grid;grid-template-columns:170px minmax(0,1fr);gap:30px;position:relative;padding-bottom:24px;--event-color:var(--textColorSecondary)}.power-diagnostics .timeline-entry.observed{--event-color:#7eacb5}.power-diagnostics .timeline-entry.warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .timeline-entry.rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .timeline-entry.restart{--event-color:#bc86df}.power-diagnostics .timeline-entry.readiness{--event-color:var(--colorSuccess,#67b58b)}.power-diagnostics .timeline-time time{white-space:pre-wrap}.power-diagnostics .timeline-time{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.power-diagnostics .timeline-content{position:relative;min-width:0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:7px;overflow-wrap:anywhere}.power-diagnostics .timeline-content:before{content:\"\";position:absolute;left:-22px;top:20px;width:11px;height:11px;background:var(--event-color);border:2px solid var(--mainBackground,var(--contentColor));border-radius:50%;z-index:1}.power-diagnostics .timeline-entry:before{content:\"\";position:absolute;left:183px;top:24px;bottom:-24px;width:2px;background:var(--borderColor)}.power-diagnostics .timeline-entry:last-child:before{display:none}.power-diagnostics .timeline-card-heading{padding-right:32px}.power-diagnostics .timeline-content .timeline-resource-action{position:absolute;top:10px;right:10px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;min-width:26px;padding:0;margin:0;border-color:transparent;background:transparent;color:var(--textColorSecondary)}.power-diagnostics .timeline-content .timeline-resource-action:hover{color:var(--primary);background:var(--contentColor);border-color:var(--borderColor)}.power-diagnostics .timeline-content small{white-space:pre-wrap}.power-diagnostics .timeline-resource-identity{display:flex;align-items:center;gap:5px;overflow-wrap:anywhere}.power-diagnostics .timeline-content h4{margin:5px 0;font-size:15px}.power-diagnostics .timeline-content p{margin:4px 0 10px}\n.power-diagnostics .consumer-status{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;margin-left:4px;border-radius:4px;font-size:11px;vertical-align:middle;color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorSecondary) 8%,transparent)}.power-diagnostics .consumer-status.warning{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .consumer-status.error{color:var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 10%,transparent)}.power-diagnostics .consumer-status.healthy{color:var(--colorSuccess,#67b58b);background:color-mix(in srgb,var(--colorSuccess,#67b58b) 10%,transparent)}.power-diagnostics .resource-cell .request-burst{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:1px 5px;border-radius:4px;font-size:11px;color:var(--textColorSecondary);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .timeline-content{border-left:2px solid color-mix(in srgb,var(--event-color) 60%,var(--borderColor))}.power-diagnostics .timeline-entry.warning .timeline-content{border-color:color-mix(in srgb,var(--event-color) 35%,var(--borderColor));border-left-color:var(--event-color);background:color-mix(in srgb,var(--event-color) 4%,transparent)}.power-diagnostics .evidence-badge{display:inline-flex;align-items:center;gap:5px;border-radius:4px;padding:2px 6px;font-size:12px;color:var(--primary,#609ee8);background:color-mix(in srgb,var(--primary,#609ee8) 9%,transparent);margin-bottom:4px}.power-diagnostics .evidence-badge.inferred{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 9%,transparent)}\n.power-diagnostics .diagnostics-summary>button.summary-card{margin:0;width:100%;text-align:left;line-height:inherit;font:inherit}.power-diagnostics .diagnostics-summary>button.summary-card:hover{border-color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 5%,var(--contentColor))}\n@container diagnostics (min-width:701px) and (max-width:900px){.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px}.power-diagnostics .consumers-toolbar>.warning-filter{grid-column:1/-1}}\n.power-diagnostics .consumer-identity-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;margin-bottom:4px}.power-diagnostics .consumer-identity-label{min-width:0;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-identity-row .consumer-resource-link{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0;margin:0;padding:0;border:0;background:transparent;text-align:left;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-resource-link:hover{color:var(--primary)}.power-diagnostics .consumer-resource-link>.Icon{flex-shrink:0;opacity:.65}.power-diagnostics .consumer-expand-slot{display:flex;justify-content:flex-end;flex-shrink:0;padding-left:10px;border-left:1px solid var(--borderColor)}.power-diagnostics .consumer-identity-row .consumer-expand{display:flex;align-items:center;justify-content:center;width:28px;height:28px;min-width:28px;margin:0;padding:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary)}.power-diagnostics .consumer-identity-row .consumer-expand:hover{color:var(--primary);border-color:var(--primary)}\n.power-diagnostics .consumer-depth-1>td:first-child{padding-left:32px;position:relative}.power-diagnostics .consumer-depth-2>td:first-child{padding-left:48px;position:relative}.power-diagnostics .consumer-depth-1>td:first-child:before,.power-diagnostics .consumer-depth-2>td:first-child:before{content:\"\";position:absolute;top:0;bottom:0;left:16px;width:1px;background:var(--borderColor)}.power-diagnostics .consumer-depth-2>td:first-child:before{left:32px}.power-diagnostics .consumer-pod-row>td{background:color-mix(in srgb,var(--textColorSecondary) 3%,transparent)}.power-diagnostics .consumer-namespace-row>td:first-child{font-weight:500}.power-diagnostics .namespace-identity{display:inline-flex;align-items:center;gap:7px;font-size:14px}.power-diagnostics .namespace-identity>.Icon{color:var(--primary)}\n.power-diagnostics .consumers-table{table-layout:fixed;min-width:900px}.power-diagnostics .consumers-table .metric-column{width:205px}.power-diagnostics .consumers-table .unscheduled-column{width:165px}.power-diagnostics .consumers-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .consumers-table th:last-child{white-space:normal;word-break:normal;overflow-wrap:normal}.power-diagnostics .consumers-table td{padding-top:12px;padding-bottom:12px}.power-diagnostics .consumer-identity-main{flex:1;min-width:0}.power-diagnostics .consumer-title-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.power-diagnostics .consumer-title-line .consumer-status{margin-left:0}.power-diagnostics .consumer-subtitle{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:5px;line-height:1.4}.power-diagnostics .consumer-subtitle>.Icon{flex-shrink:0}.power-diagnostics .consumer-row-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.power-diagnostics .consumer-identity-row{align-items:flex-start;margin-bottom:0}.power-diagnostics .consumer-identity-row .consumer-resource-link{font-size:14px;color:var(--textColorPrimary)}.power-diagnostics .resource-value,.power-diagnostics .resource-request{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.power-diagnostics .resource-value small,.power-diagnostics .resource-request small{font-size:11px;white-space:nowrap}.power-diagnostics .resource-cell .resource-value strong{font-size:15px;font-weight:600}.power-diagnostics .resource-request{margin-top:3px}.power-diagnostics .resource-request>span{font-size:12px}.power-diagnostics .resource-cell .resource-coverage{margin-top:4px;font-size:10px;line-height:1.4}.power-diagnostics .unscheduled-cell>div{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.power-diagnostics .unscheduled-cell>div+div{margin-top:5px}.power-diagnostics .unscheduled-cell small{font-size:11px}.power-diagnostics .unscheduled-cell span{font-size:12px}.power-diagnostics .unscheduled-cell.has-requests span{color:var(--colorWarning,#e0a134)}.power-diagnostics .unscheduled-empty{color:var(--textColorSecondary);font-size:12px}.power-diagnostics .timeline-entry{color:var(--textColorPrimary)}.power-diagnostics .timeline-entry.warning .timeline-content h4{color:var(--colorWarning,#e0a134)}.power-diagnostics .pending-heading{padding:14px}.power-diagnostics .pending-heading>p{color:var(--textColorSecondary);margin-bottom:0}.power-diagnostics .diagnostics-summary{gap:10px;margin-bottom:16px}.power-diagnostics .diagnostics-summary>.summary-card{padding:10px 14px}.power-diagnostics .diagnostics-summary strong{font-size:22px}.power-diagnostics .diagnostics-summary .summary-icon{width:36px;height:36px;border-radius:8px}.power-diagnostics .diagnostics-summary .summary-card>div>span{font-size:12px}.power-diagnostics .diagnostics-explainer{padding:9px 12px}.power-diagnostics .view-intro{margin:12px 0}.power-diagnostics .view-intro p{font-size:12px}\n.power-diagnostics .pending-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.power-diagnostics .pending-title-row>div{min-width:0}.power-diagnostics .pending-title-row strong{font-size:12px;color:var(--textColorSecondary);overflow-wrap:anywhere}.power-diagnostics .pending-state-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px}.power-diagnostics .pending-state-row h3{margin:0}.power-diagnostics .pending-title-row .pending-open-action{margin:0;flex-shrink:0;min-height:28px;padding:3px 8px;font-size:12px;white-space:nowrap}.power-diagnostics .pending-request-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.power-diagnostics .pending-request-badges>span{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary);font-size:12px}.power-diagnostics .pending-request-badges strong{color:var(--textColorPrimary);font-weight:500;font-variant-numeric:tabular-nums}\n.power-diagnostics .attention-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px}.power-diagnostics .attention-empty strong{font-size:15px;color:var(--textColorPrimary)}.power-diagnostics .attention-empty small{max-width:520px;line-height:1.5}.power-diagnostics .attention-empty>.Icon{color:var(--textColorSecondary)}.power-diagnostics .attention-empty.all-ready>.Icon,.power-diagnostics .attention-empty.all-ready strong{color:var(--colorSuccess,#67b58b)}.power-diagnostics .attention-empty.all-ready{border-color:color-mix(in srgb,var(--colorSuccess,#67b58b) 35%,var(--borderColor));background:color-mix(in srgb,var(--colorSuccess,#67b58b) 3%,transparent)}.power-diagnostics .consumer-tone-error>td{background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}.power-diagnostics .consumer-tone-warning>td{background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}.power-diagnostics .consumer-tone-error>td:first-child{box-shadow:inset 3px 0 var(--colorError,#e56d79)}.power-diagnostics .consumer-tone-warning>td:first-child{box-shadow:inset 3px 0 var(--colorWarning,#e0a134)}\n@media(max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}\n\n@container diagnostics (max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}\n\n.power-diagnostics .diagnostics-select .Select__control{background:color-mix(in srgb,var(--textColorPrimary) 5%,var(--contentColor));border:1px solid var(--inputControlBorder,var(--halfGray));box-shadow:none;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}\n.power-diagnostics .diagnostics-select .Select__control:hover{border-color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorPrimary) 8%,var(--contentColor))}\n.power-diagnostics .diagnostics-select .Select__control--is-focused{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}\n.power-diagnostics .diagnostics-select .Select__single-value{color:var(--textColorPrimary)}\n.power-diagnostics .diagnostics-select .Select__indicators{border-left:1px solid var(--borderFaintColor);align-self:stretch;padding:0 3px}\n.power-diagnostics .diagnostics-select .Select__dropdown-indicator{opacity:.85;color:var(--textColorSecondary)}\n@media(prefers-reduced-motion:reduce){.power-diagnostics .diagnostics-select .Select__control{transition:none}}\n\n.power-diagnostics .diagnostics-summary .summary-icon .Icon,.power-diagnostics .diagnostics-summary .summary-icon .Icon>.icon{color:var(--summary-color)}\n.power-diagnostics .pending-heading.error{border-left:3px solid var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}\n.power-diagnostics .pending-heading.warning{border-left:3px solid var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}\n.power-diagnostics .pending-heading>.consumer-status{margin:0 0 10px}\n`;\n"],"mappings":";AAAA,IAAa,oBAAoB"}
1
+ {"version":3,"file":"diagnostics.css.js","names":[],"sources":["../../src/renderer/diagnostics.css.ts"],"sourcesContent":["export const diagnosticsStyles = `\n.power-diagnostics{container-type:inline-size;container-name:diagnostics;box-sizing:border-box;color:var(--textColorPrimary);max-width:100%;line-height:1.5}\n.power-diagnostics *{box-sizing:border-box}.power-diagnostics h2{margin:0 0 6px;font-size:24px}.power-diagnostics h3{margin:0 0 6px;font-size:18px}.power-diagnostics p{margin:8px 0 16px}.power-diagnostics .page-intro,.power-diagnostics small,.power-diagnostics .view-intro p{color:var(--textColorSecondary)}\n.power-diagnostics nav{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;border-bottom:1px solid var(--borderColor);padding-bottom:8px}.power-diagnostics button{cursor:pointer;display:inline-flex;align-items:center;gap:6px;border-radius:5px;border:1px solid var(--borderColor);background:var(--contentColor);color:var(--textColorPrimary);font:inherit;padding:6px 10px;margin:3px 4px 3px 0}.power-diagnostics button:hover{border-color:var(--primary)}.power-diagnostics button[aria-pressed=true]{color:var(--primary);border-color:var(--primary)}.power-diagnostics button:disabled{opacity:.5;cursor:default}.power-diagnostics :is(button,input,summary):focus-visible{outline:2px solid var(--primary);outline-offset:2px}\n.power-diagnostics .diagnostics-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.power-diagnostics .snapshot-meta{white-space:pre-wrap;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .view-intro{margin:16px 0}.power-diagnostics .view-intro p{margin:4px 0 0}.power-diagnostics .diagnostics-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:22px}.power-diagnostics .diagnostics-summary>.summary-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--borderColor);border-radius:8px;background:var(--contentColor)}.power-diagnostics .diagnostics-summary strong{display:block;font-size:25px;font-variant-numeric:tabular-nums}.power-diagnostics .diagnostics-summary span{color:var(--textColorSecondary)}.power-diagnostics .summary-card{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.workloads{--summary-color:#bc86df}.power-diagnostics .summary-card.pods{--summary-color:var(--primary,#609ee8)}.power-diagnostics .summary-card.pending{--summary-color:var(--colorSuccess,#67b58b)}.power-diagnostics .summary-card.pending.unavailable{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.unavailable strong{font-size:18px}.power-diagnostics .summary-card.attention{--summary-color:var(--colorWarning,#e0a134)}.power-diagnostics .summary-card strong{color:var(--summary-color)}.power-diagnostics .diagnostics-summary .summary-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:42px;height:42px;border-radius:10px;color:var(--summary-color);background:color-mix(in srgb,var(--summary-color) 12%,transparent)}.power-diagnostics .summary-icon .Icon{color:inherit}\n.power-diagnostics .toolbar{display:grid;align-items:end;gap:16px;margin-bottom:16px}.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px max-content}.power-diagnostics .timeline-toolbar{grid-template-columns:minmax(200px,1fr) 240px max-content}.power-diagnostics .toolbar>label{display:flex;flex-direction:column;gap:6px;min-width:0;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-select{display:block;min-width:180px;max-width:100%;vertical-align:middle}.power-diagnostics .toolbar .diagnostics-select{min-width:0;width:100%}.power-diagnostics .diagnostics-select>div{width:100%}.power-diagnostics .diagnostics-select .Select{min-width:0;width:100%}.power-diagnostics .diagnostics-select .Select__control{min-height:32px;height:32px}.power-diagnostics .diagnostics-select .Select__value-container{padding:0 8px;min-width:0}.power-diagnostics .diagnostics-select .Select__single-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.power-diagnostics .diagnostics-select .Select__input-container{margin:0;padding:0}.power-diagnostics .diagnostics-select .Select__indicator{padding:5px 8px}.power-diagnostics .diagnostics-input{display:block;min-width:0;height:32px}.power-diagnostics .diagnostics-input .Input{height:32px;min-height:32px;margin:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);padding:0 9px}.power-diagnostics .diagnostics-input .Input>.input-area{height:30px;min-height:0;min-width:0;padding:0;border:0;border-bottom:0}.power-diagnostics .diagnostics-input .Input>.input-area:after,.power-diagnostics .diagnostics-input .Input>.input-area:before{display:none}.power-diagnostics .diagnostics-input .Input:focus-within{border-color:var(--primary)}.power-diagnostics .diagnostics-input input{width:100%;max-width:100%;height:30px;min-height:0;padding:0;border:0;border-bottom:0;outline:none;background:transparent;color:var(--textColorPrimary);font:inherit}.power-diagnostics .diagnostics-input .Input:after,.power-diagnostics .diagnostics-input .Input:before{display:none}.power-diagnostics .warning-filter{display:flex;align-items:center;min-height:32px;padding:0 0 1px}.power-diagnostics .warning-filter .Checkbox{margin:0;white-space:nowrap}.power-diagnostics .warning-filter label{display:inline-flex;align-items:center;flex-direction:row;color:var(--textColorPrimary)}\n.power-diagnostics .evidence-table{min-width:660px;table-layout:fixed}.power-diagnostics .evidence-source{width:180px}.power-diagnostics .evidence-node{width:160px}.power-diagnostics .evidence-finding{width:auto}.power-diagnostics .evidence-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .evidence-table td:first-child{min-width:0;overflow-wrap:normal;word-break:normal}.power-diagnostics .evidence-table td:nth-child(2){overflow-wrap:break-word;word-break:normal}.power-diagnostics .evidence-table td:nth-child(3){overflow-wrap:anywhere}.power-diagnostics .diagnostics-table{overflow-x:auto;max-width:100%;border:1px solid var(--borderColor);border-radius:7px;margin:16px 0}.power-diagnostics table{width:100%;border-collapse:collapse}.power-diagnostics th,.power-diagnostics td{text-align:left;padding:14px 16px;border-bottom:1px solid var(--borderColor);vertical-align:top;overflow-wrap:anywhere}.power-diagnostics th{color:var(--textColorSecondary);font-weight:500;background:var(--contentColor)}.power-diagnostics td:first-child{min-width:240px}.power-diagnostics .numeric{text-align:right;min-width:170px;font-variant-numeric:tabular-nums}.power-diagnostics small{display:block;font-size:12px}.power-diagnostics .resource-cell strong{display:block;font-size:16px}.power-diagnostics .resource-cell>span{display:block;margin-top:8px}.power-diagnostics .diagnostics-explainer{margin:14px 0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:6px;overflow-wrap:anywhere}.power-diagnostics summary{cursor:pointer;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-empty{padding:28px;text-align:center;border:1px dashed var(--borderColor);border-radius:8px;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-notice{padding:12px 16px;border-left:3px solid var(--colorWarning,#d49a35);background:var(--contentColor)}.power-diagnostics .pending-heading{padding:18px;border:1px solid var(--borderColor);border-radius:8px;margin-top:20px}.power-diagnostics .pending-heading>strong{display:block;color:var(--textColorSecondary);margin-bottom:8px}\n.power-diagnostics .timeline-legend{display:flex;flex-wrap:wrap;gap:14px;margin:18px 0}.power-diagnostics .timeline-type{--event-color:var(--textColorSecondary);display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .timeline-type:before{content:\"\";width:8px;height:8px;border-radius:50%;background:var(--event-color);flex-shrink:0}.power-diagnostics .observed{--event-color:#7eacb5}.power-diagnostics .warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .restart{--event-color:#bc86df}.power-diagnostics .readiness{--event-color:var(--colorSuccess,#67b58b)}\n.power-diagnostics .diagnostics-timeline{list-style:none;padding:0;margin:24px 0}.power-diagnostics .timeline-entry{display:grid;grid-template-columns:170px minmax(0,1fr);gap:30px;position:relative;padding-bottom:24px;--event-color:var(--textColorSecondary)}.power-diagnostics .timeline-entry.observed{--event-color:#7eacb5}.power-diagnostics .timeline-entry.warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .timeline-entry.rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .timeline-entry.restart{--event-color:#bc86df}.power-diagnostics .timeline-entry.readiness{--event-color:var(--colorSuccess,#67b58b)}.power-diagnostics .timeline-time time{white-space:pre-wrap}.power-diagnostics .timeline-time{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.power-diagnostics .timeline-content{position:relative;min-width:0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:7px;overflow-wrap:anywhere}.power-diagnostics .timeline-content:before{content:\"\";position:absolute;left:-22px;top:20px;width:11px;height:11px;background:var(--event-color);border:2px solid var(--mainBackground,var(--contentColor));border-radius:50%;z-index:1}.power-diagnostics .timeline-entry:before{content:\"\";position:absolute;left:183px;top:24px;bottom:-24px;width:2px;background:var(--borderColor)}.power-diagnostics .timeline-entry:last-child:before{display:none}.power-diagnostics .timeline-card-heading{padding-right:32px}.power-diagnostics .timeline-content .timeline-resource-action{position:absolute;top:10px;right:10px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;min-width:26px;padding:0;margin:0;border-color:transparent;background:transparent;color:var(--textColorSecondary)}.power-diagnostics .timeline-content .timeline-resource-action:hover{color:var(--primary);background:var(--contentColor);border-color:var(--borderColor)}.power-diagnostics .timeline-content small{white-space:pre-wrap}.power-diagnostics .timeline-resource-identity{display:flex;align-items:center;gap:5px;overflow-wrap:anywhere}.power-diagnostics .timeline-content h4{margin:5px 0;font-size:15px}.power-diagnostics .timeline-content p{margin:4px 0 10px}\n.power-diagnostics .consumer-status{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;margin-left:4px;border-radius:4px;font-size:11px;vertical-align:middle;color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorSecondary) 8%,transparent)}.power-diagnostics .consumer-status.warning{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .consumer-status.error{color:var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 10%,transparent)}.power-diagnostics .consumer-status.healthy{color:var(--colorSuccess,#67b58b);background:color-mix(in srgb,var(--colorSuccess,#67b58b) 10%,transparent)}.power-diagnostics .resource-cell .request-burst{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:1px 5px;border-radius:4px;font-size:11px;color:var(--textColorSecondary);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .timeline-content{border-left:2px solid color-mix(in srgb,var(--event-color) 60%,var(--borderColor))}.power-diagnostics .timeline-entry.warning .timeline-content{border-color:color-mix(in srgb,var(--event-color) 35%,var(--borderColor));border-left-color:var(--event-color);background:color-mix(in srgb,var(--event-color) 4%,transparent)}.power-diagnostics .evidence-badge{display:inline-flex;align-items:center;gap:5px;border-radius:4px;padding:2px 6px;font-size:12px;color:var(--primary,#609ee8);background:color-mix(in srgb,var(--primary,#609ee8) 9%,transparent);margin-bottom:4px}.power-diagnostics .evidence-badge.inferred{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 9%,transparent)}\n.power-diagnostics .diagnostics-summary>button.summary-card{margin:0;width:100%;text-align:left;line-height:inherit;font:inherit}.power-diagnostics .diagnostics-summary>button.summary-card:hover{border-color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 5%,var(--contentColor))}\n@container diagnostics (min-width:701px) and (max-width:900px){.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px}.power-diagnostics .consumers-toolbar>.warning-filter{grid-column:1/-1}}\n.power-diagnostics .consumer-identity-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;margin-bottom:4px}.power-diagnostics .consumer-identity-label{min-width:0;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-identity-row .consumer-resource-link{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0;margin:0;padding:0;border:0;background:transparent;text-align:left;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-resource-link:hover{color:var(--primary)}.power-diagnostics .consumer-resource-link>.Icon{flex-shrink:0;opacity:.65}.power-diagnostics .consumer-expand-slot{display:flex;justify-content:flex-end;flex-shrink:0;padding-left:10px;border-left:1px solid var(--borderColor)}.power-diagnostics .consumer-identity-row .consumer-expand{display:flex;align-items:center;justify-content:center;width:28px;height:28px;min-width:28px;margin:0;padding:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary)}.power-diagnostics .consumer-identity-row .consumer-expand:hover{color:var(--primary);border-color:var(--primary)}\n.power-diagnostics .consumer-depth-1>td:first-child{padding-left:32px;position:relative}.power-diagnostics .consumer-depth-2>td:first-child{padding-left:48px;position:relative}.power-diagnostics .consumer-depth-1>td:first-child:before,.power-diagnostics .consumer-depth-2>td:first-child:before{content:\"\";position:absolute;top:0;bottom:0;left:16px;width:1px;background:var(--borderColor)}.power-diagnostics .consumer-depth-2>td:first-child:before{left:32px}.power-diagnostics .consumer-pod-row>td{background:color-mix(in srgb,var(--textColorSecondary) 3%,transparent)}.power-diagnostics .consumer-namespace-row>td:first-child{font-weight:500}.power-diagnostics .namespace-identity{min-width:0;max-width:100%;display:inline-flex;align-items:center;gap:7px;font-size:14px}.power-diagnostics .namespace-identity>.Icon{color:var(--primary)}\n.power-diagnostics .consumers-table{table-layout:fixed;min-width:900px}.power-diagnostics .consumers-table .metric-column{width:205px}.power-diagnostics .consumers-table .unscheduled-column{width:165px}.power-diagnostics .consumers-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .consumers-table th:last-child{white-space:normal;word-break:normal;overflow-wrap:normal}.power-diagnostics .consumers-table td{padding-top:12px;padding-bottom:12px}.power-diagnostics .consumer-identity-main{flex:1;min-width:0}.power-diagnostics .consumer-title-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.power-diagnostics .consumer-title-line .consumer-status{margin-left:0}.power-diagnostics .consumer-subtitle{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:5px;line-height:1.4}.power-diagnostics .consumer-subtitle>.Icon{flex-shrink:0}.power-diagnostics .consumer-row-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.power-diagnostics .consumer-identity-row{align-items:flex-start;margin-bottom:0}.power-diagnostics .consumer-identity-row .consumer-resource-link{font-size:14px;color:var(--textColorPrimary)}.power-diagnostics .resource-value,.power-diagnostics .resource-request{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.power-diagnostics .resource-value small,.power-diagnostics .resource-request small{font-size:11px;white-space:nowrap}.power-diagnostics .resource-cell .resource-value strong{font-size:15px;font-weight:600}.power-diagnostics .resource-request{margin-top:3px}.power-diagnostics .resource-request>span{font-size:12px}.power-diagnostics .resource-cell .resource-coverage{margin-top:4px;font-size:10px;line-height:1.4}.power-diagnostics .unscheduled-cell>div{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.power-diagnostics .unscheduled-cell>div+div{margin-top:5px}.power-diagnostics .unscheduled-cell small{font-size:11px}.power-diagnostics .unscheduled-cell span{font-size:12px}.power-diagnostics .unscheduled-cell.has-requests span{color:var(--colorWarning,#e0a134)}.power-diagnostics .unscheduled-empty{color:var(--textColorSecondary);font-size:12px}.power-diagnostics .timeline-entry{color:var(--textColorPrimary)}.power-diagnostics .timeline-entry.warning .timeline-content h4{color:var(--colorWarning,#e0a134)}.power-diagnostics .pending-heading{padding:14px}.power-diagnostics .pending-heading>p{color:var(--textColorSecondary);margin-bottom:0}.power-diagnostics .diagnostics-summary{gap:10px;margin-bottom:16px}.power-diagnostics .diagnostics-summary>.summary-card{padding:10px 14px}.power-diagnostics .diagnostics-summary strong{font-size:22px}.power-diagnostics .diagnostics-summary .summary-icon{width:36px;height:36px;border-radius:8px}.power-diagnostics .diagnostics-summary .summary-card>div>span{font-size:12px}.power-diagnostics .diagnostics-explainer{padding:9px 12px}.power-diagnostics .view-intro{margin:12px 0}.power-diagnostics .view-intro p{font-size:12px}\n.power-diagnostics .pending-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.power-diagnostics .pending-title-row>div{min-width:0}.power-diagnostics .pending-title-row strong{font-size:12px;color:var(--textColorSecondary);overflow-wrap:anywhere}.power-diagnostics .pending-state-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px}.power-diagnostics .pending-state-row h3{margin:0}.power-diagnostics .pending-title-row .pending-open-action{margin:0;flex-shrink:0;min-height:28px;padding:3px 8px;font-size:12px;white-space:nowrap}.power-diagnostics .pending-request-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.power-diagnostics .pending-request-badges>span{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary);font-size:12px}.power-diagnostics .pending-request-badges strong{color:var(--textColorPrimary);font-weight:500;font-variant-numeric:tabular-nums}\n.power-diagnostics .attention-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px}.power-diagnostics .attention-empty strong{font-size:15px;color:var(--textColorPrimary)}.power-diagnostics .attention-empty small{max-width:520px;line-height:1.5}.power-diagnostics .attention-empty>.Icon{color:var(--textColorSecondary)}.power-diagnostics .attention-empty.all-ready>.Icon,.power-diagnostics .attention-empty.all-ready strong{color:var(--colorSuccess,#67b58b)}.power-diagnostics .attention-empty.all-ready{border-color:color-mix(in srgb,var(--colorSuccess,#67b58b) 35%,var(--borderColor));background:color-mix(in srgb,var(--colorSuccess,#67b58b) 3%,transparent)}.power-diagnostics .consumer-tone-error>td{background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}.power-diagnostics .consumer-tone-warning>td{background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}.power-diagnostics .consumer-tone-error>td:first-child{box-shadow:inset 3px 0 var(--colorError,#e56d79)}.power-diagnostics .consumer-tone-warning>td:first-child{box-shadow:inset 3px 0 var(--colorWarning,#e0a134)}\n@media(max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}\n\n@container diagnostics (max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}\n\n.power-diagnostics .diagnostics-select .Select__control{background:color-mix(in srgb,var(--textColorPrimary) 5%,var(--contentColor));border:1px solid var(--inputControlBorder,var(--halfGray));box-shadow:none;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}\n.power-diagnostics .diagnostics-select .Select__control:hover{border-color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorPrimary) 8%,var(--contentColor))}\n.power-diagnostics .diagnostics-select .Select__control--is-focused{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}\n.power-diagnostics .diagnostics-select .Select__single-value{color:var(--textColorPrimary)}\n.power-diagnostics .diagnostics-select .Select__indicators{border-left:1px solid var(--borderFaintColor);align-self:stretch;padding:0 3px}\n.power-diagnostics .diagnostics-select .Select__dropdown-indicator{opacity:.85;color:var(--textColorSecondary)}\n@media(prefers-reduced-motion:reduce){.power-diagnostics .diagnostics-select .Select__control{transition:none}}\n\n.power-diagnostics .diagnostics-summary .summary-icon .Icon,.power-diagnostics .diagnostics-summary .summary-icon .Icon>.icon{color:var(--summary-color)}\n.power-diagnostics .pending-heading.error{border-left:3px solid var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}\n.power-diagnostics .pending-heading.warning{border-left:3px solid var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}\n.power-diagnostics .pending-heading>.consumer-status{margin:0 0 10px}\n.power-diagnostics .consumers-table .consumer-column{width:380px}.power-diagnostics .consumer-title-line{flex-wrap:wrap;white-space:normal}.power-diagnostics .consumer-identity-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.power-diagnostics .consumer-title-line .consumer-resource-link{display:inline-flex;max-width:100%;transition:color 160ms ease}.power-diagnostics .consumer-link-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.power-diagnostics .consumer-identity-row .consumer-resource-link:hover,.power-diagnostics .consumer-identity-row .consumer-resource-link:focus-visible{color:var(--primary)}.power-diagnostics .consumer-resource-link:focus-visible{outline:2px solid var(--primary);outline-offset:3px}.power-diagnostics .consumer-pod-row .consumer-resource-link,.power-diagnostics .consumer-pod-row .consumer-subtitle{padding-left:8px}@media(prefers-reduced-motion:reduce){.power-diagnostics .consumer-title-line .consumer-resource-link{transition:none}}.power-diagnostics .consumer-subtitle{flex-wrap:nowrap;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.power-diagnostics .consumer-status{flex-shrink:1;min-width:0;white-space:normal;overflow-wrap:anywhere}.power-diagnostics .consumers-table td{padding-top:8px;padding-bottom:8px}.power-diagnostics .resource-cell .request-burst{display:inline-flex;margin-top:3px;font-size:10px;white-space:nowrap}.power-diagnostics .explain-finding{font-size:11px;padding:3px 6px}.power-diagnostics .consumer-row-actions .explain-finding{width:26px;height:26px;padding:3px;margin:0}.power-diagnostics .timeline-content details{margin-top:6px}.power-diagnostics .timeline-content details li{margin:8px 0}\n.power-diagnostics .incident-copy{display:inline-flex;align-items:center;gap:8px;margin-right:8px}.power-diagnostics .incident-copy button{min-width:28px;min-height:28px;padding:4px;margin:0}.power-diagnostics .incident-copy [role=status]{font-size:11px;max-width:150px}.power-diagnostics .consumer-row-actions .incident-copy{margin-right:0}.power-diagnostics .consumer-row-actions .explain-finding{min-width:28px;min-height:28px}\n.power-diagnostics .explain-finding{min-width:28px;min-height:28px}.power-diagnostics .consumer-row-actions .incident-copy{position:relative}.power-diagnostics .consumer-row-actions .incident-copy [role=status]{position:absolute;right:0;top:100%;white-space:nowrap;background:var(--contentColor);padding:3px 6px;border:1px solid var(--borderColor);z-index:2;max-width:none}\n\n.power-diagnostics .incident-copy button,.power-diagnostics .consumer-row-actions .explain-finding{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:28px;height:28px;min-width:28px;min-height:28px;gap:0;padding:0;line-height:1;vertical-align:middle}.power-diagnostics .incident-copy button>.Icon,.power-diagnostics .consumer-row-actions .explain-finding>.Icon{margin:0;flex-shrink:0}\n\n.power-diagnostics .timeline-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.power-diagnostics .timeline-card-top>.timeline-card-heading{flex:1;min-width:0;padding-right:0}.power-diagnostics .timeline-card-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.power-diagnostics .timeline-card-actions .incident-copy{position:relative;margin:0}.power-diagnostics .timeline-card-actions .incident-copy [role=status]{position:absolute;right:0;top:calc(100% + 6px);white-space:nowrap;max-width:260px;background:var(--contentColor);border:1px solid var(--borderColor);padding:4px 6px;z-index:2}.power-diagnostics .timeline-content .timeline-card-actions .timeline-resource-action{position:static;width:28px;height:28px;min-width:28px;margin:0}.power-diagnostics .timeline-card-actions .explain-finding{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:28px;margin:0;padding:0 8px;line-height:1}.power-diagnostics .timeline-card-actions .explain-finding>.Icon{margin:0;flex-shrink:0}\n.power-diagnostics .namespace-scope{display:flex;align-items:center;flex-wrap:wrap;column-gap:20px;row-gap:6px;margin:4px 0 16px;min-height:32px}.power-diagnostics .namespace-scope-label{overflow-wrap:anywhere}.power-diagnostics .namespace-scope button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:4px 0;margin:0;border:0;background:transparent;box-shadow:none;color:var(--textColorSecondary)}.power-diagnostics .namespace-scope button:hover{color:var(--primary);background:transparent}.power-diagnostics .namespace-scope button:focus-visible{outline:2px solid var(--primary);outline-offset:3px}\n@container diagnostics (max-width:700px){.power-diagnostics .timeline-card-actions .timeline-action-label{display:none}.power-diagnostics .timeline-card-actions .explain-finding{width:28px;min-width:28px;padding:0}.power-diagnostics .timeline-card-top{gap:12px}}\n`;\n"],"mappings":";AAAA,IAAa,oBAAoB"}