@64mb/freelens-power 2.2.1 → 2.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"appearance.js","names":[],"sources":["../../src/renderer/appearance.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport { reaction } from \"mobx\";\nimport { AppearancePreferencesStore, isAccentSelection } from \"../common/store/appearance-preferences-store\";\n\nexport function startAppearanceOverride(): () => void {\n const preferences = AppearancePreferencesStore.getInstanceOrCreate<AppearancePreferencesStore>();\n const style = document.createElement(\"style\");\n style.dataset.freelensPower = \"accent-color\";\n\n const stop = reaction(\n () => [preferences.enabled, preferences.accentColor, preferences.recolorAppIcon] as const,\n ([enabled, color, recolorAppIcon]) => {\n if (!enabled || !isAccentSelection(color)) {\n style.remove();\n return;\n }\n\n // [!important] takes precedence over the host theme's inline variables\n const accent =\n color === \"default\"\n ? \"\"\n : `\n :root { --primary: ${color} !important; --buttonPrimaryBackground: ${color} !important; --menuSelectedOptionBgc: ${color} !important; --select-option-focused-bgc: color-mix(in srgb, ${color} 24%, var(--contentColor)) !important; --icon-focus-color: ${color} !important; }\n :root .Checkbox, :root .Drawer .drawer-title, :root .DrawerParamToggler .param-link, :root .Drawer .ResizingAnchor { --blue: var(--primary); }\n :root [role=\"treeitem\"][class*=\"catalog-tree-module__selected--\"] { --blue: var(--primary); }\n :root [class*=\"main-layout-module__sidebar--\"] > .ResizingAnchor { --blue: var(--primary); }\n :root .MenuItem:is(.create-terminal-tab, .create-resource-tab) { --bgc-active: var(--primary); }\n :root .Select:not(.Select--is-disabled) .Select__control--is-focused:not(.Select__control--is-disabled) { border-color: ${color} !important; box-shadow: 0 0 0 1px ${color} !important; }\n :root .Select__option--is-selected { background: var(--primary) !important; color: var(--textColorAccent) !important; }\n :root .NamespaceSelectMenu .Select__option { margin-block: 2px; }\n :root .NamespaceSelectMenu .Select__option--is-selected { background: color-mix(in srgb, var(--primary) 10%, var(--contentColor)) !important; color: var(--textColorAccent) !important; }\n :root .NamespaceSelectMenu .Select__option--is-selected.Select__option--is-focused { background: color-mix(in srgb, var(--primary) 24%, var(--contentColor)) !important; }\n :root .NamespaceSelectMenu .Select__option--is-selected .Icon { color: var(--primary); }\n :root a.link { color: var(--primary); }\n :root [data-testid=\"download-logs-dropdown\"] { --accent-color: var(--primary); }\n ${recolorAppIcon ? '.Welcome [data-testid=\"no-welcome-banners-icon\"] svg path[fill=\"#23a49c\"] { fill: var(--primary); }' : \"\"}\n `;\n style.textContent = `${accent}\\ninput[role=\"switch\"] { --track-color-active: var(--primary) !important; }`;\n\n if (!style.isConnected) {\n document.head.append(style);\n }\n },\n { fireImmediately: true },\n );\n\n return () => {\n stop();\n style.remove();\n };\n}\n"],"mappings":";;;AAIA,SAAgB,0BAAsC;CACpD,MAAM,cAAc,qCAAA,2BAA2B,oBAAgD;CAC/F,MAAM,QAAQ,SAAS,cAAc,OAAO;CAC5C,MAAM,QAAQ,gBAAgB;CAE9B,MAAM,OAAO,8BAAA,eACL;EAAC,YAAY;EAAS,YAAY;EAAa,YAAY;CAAc,IAC9E,CAAC,SAAS,OAAO,oBAAoB;EACpC,IAAI,CAAC,WAAW,CAAC,qCAAA,kBAAkB,KAAK,GAAG;GACzC,MAAM,OAAO;GACb;EACF;EAsBA,MAAM,cAAc,GAlBlB,UAAU,YACN,KACA;6BACiB,MAAM,0CAA0C,MAAM,wCAAwC,MAAM,+DAA+D,MAAM,6DAA6D,MAAM;;;;;kIAKvI,MAAM,qCAAqC,MAAM;;;;;;;;UAQzK,iBAAiB,4GAAwG,GAAG;QAElG;EAE9B,IAAI,CAAC,MAAM,aACT,SAAS,KAAK,OAAO,KAAK;CAE9B,GACA,EAAE,iBAAiB,KAAK,CAC1B;CAEA,aAAa;EACX,KAAK;EACL,MAAM,OAAO;CACf;AACF"}
1
+ {"version":3,"file":"appearance.js","names":[],"sources":["../../src/renderer/appearance.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\nimport { reaction } from \"mobx\";\nimport { AppearancePreferencesStore, isAccentSelection } from \"../common/store/appearance-preferences-store\";\n\nexport function accentForeground(color: string): \"#000000\" | \"#ffffff\" {\n const channels = [1, 3, 5].map((offset) => {\n const channel = Number.parseInt(color.slice(offset, offset + 2), 16) / 255;\n return channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4;\n });\n const luminance = channels[0] * 0.2126 + channels[1] * 0.7152 + channels[2] * 0.0722;\n return (luminance + 0.05) / 0.05 >= 1.05 / (luminance + 0.05) ? \"#000000\" : \"#ffffff\";\n}\n\nexport function startAppearanceOverride(): () => void {\n const preferences = AppearancePreferencesStore.getInstanceOrCreate<AppearancePreferencesStore>();\n const style = document.createElement(\"style\");\n style.dataset.freelensPower = \"accent-color\";\n\n const stop = reaction(\n () => [preferences.enabled, preferences.accentColor, preferences.recolorAppIcon] as const,\n ([enabled, color, recolorAppIcon]) => {\n if (!enabled || !isAccentSelection(color)) {\n style.remove();\n return;\n }\n\n // [!important] takes precedence over the host theme's inline variables\n const accent =\n color === \"default\"\n ? \"\"\n : `\n :root { --freelens-power-accent-foreground: ${accentForeground(color)}; --select-option-focused-color: var(--textColorAccent) !important; --primary: ${color} !important; --buttonPrimaryBackground: ${color} !important; --menuSelectedOptionBgc: ${color} !important; --select-option-focused-bgc: color-mix(in srgb, ${color} 24%, var(--contentColor)) !important; --icon-focus-color: ${color} !important; }\n :root .Checkbox, :root .Drawer .drawer-title, :root .DrawerParamToggler .param-link, :root .Drawer .ResizingAnchor { --blue: var(--primary); }\n :root [role=\"treeitem\"][class*=\"catalog-tree-module__selected--\"] { --blue: var(--primary); }\n :root [class*=\"main-layout-module__sidebar--\"] > .ResizingAnchor { --blue: var(--primary); }\n :root .MenuItem:is(.create-terminal-tab, .create-resource-tab) { --bgc-active: var(--primary); }\n :root .Select:not(.Select--is-disabled) .Select__control--is-focused:not(.Select__control--is-disabled) { border-color: ${color} !important; box-shadow: 0 0 0 1px ${color} !important; }\n :root .Select__option--is-selected { background: var(--primary) !important; color: var(--freelens-power-accent-foreground) !important; }\n :root .Select__option--is-focused:not(.Select__option--is-selected) { color: var(--textColorAccent) !important; }\n :root .Button.primary:not(.plain):not(.outlined):not(.light) { color: var(--freelens-power-accent-foreground); }\n :root [data-testid=\"cluster-sidebar\"] { --sidebarActiveColor: var(--freelens-power-accent-foreground); --sidebarSubmenuActiveColor: var(--primary); }\n :root .NamespaceSelectMenu .Select__option { margin-block: 2px; }\n :root .NamespaceSelectMenu .Select__option--is-selected { background: color-mix(in srgb, var(--primary) 10%, var(--contentColor)) !important; color: var(--textColorAccent) !important; }\n :root .NamespaceSelectMenu .Select__option--is-selected.Select__option--is-focused { background: color-mix(in srgb, var(--primary) 24%, var(--contentColor)) !important; }\n :root .NamespaceSelectMenu .Select__option--is-selected .Icon { color: var(--primary); }\n :root .Select__option:not(.Select__option--is-disabled):active { background: var(--primary) !important; color: var(--freelens-power-accent-foreground) !important; }\n :root .NamespaceSelectMenu .Select__option--is-selected:active .Icon { color: inherit; }\n :root a.link { color: var(--primary); }\n :root [data-testid=\"download-logs-dropdown\"] { --accent-color: var(--primary); }\n ${recolorAppIcon ? '.Welcome [data-testid=\"no-welcome-banners-icon\"] svg path[fill=\"#23a49c\"] { fill: var(--primary); }' : \"\"}\n `;\n style.textContent = `${accent}\\ninput[role=\"switch\"] { --track-color-active: var(--primary) !important; }`;\n\n if (!style.isConnected) {\n document.head.append(style);\n }\n },\n { fireImmediately: true },\n );\n\n return () => {\n stop();\n style.remove();\n };\n}\n"],"mappings":";;;AAIA,SAAgB,iBAAiB,OAAsC;CACrE,MAAM,WAAW;EAAC;EAAG;EAAG;CAAC,CAAC,CAAC,KAAK,WAAW;EACzC,MAAM,UAAU,OAAO,SAAS,MAAM,MAAM,QAAQ,SAAS,CAAC,GAAG,EAAE,IAAI;EACvE,OAAO,WAAW,SAAU,UAAU,UAAU,UAAU,QAAS,UAAU;CAC/E,CAAC;CACD,MAAM,YAAY,SAAS,KAAK,QAAS,SAAS,KAAK,QAAS,SAAS,KAAK;CAC9E,QAAQ,YAAY,OAAQ,OAAQ,QAAQ,YAAY,OAAQ,YAAY;AAC9E;AAEA,SAAgB,0BAAsC;CACpD,MAAM,cAAc,qCAAA,2BAA2B,oBAAgD;CAC/F,MAAM,QAAQ,SAAS,cAAc,OAAO;CAC5C,MAAM,QAAQ,gBAAgB;CAE9B,MAAM,OAAO,8BAAA,eACL;EAAC,YAAY;EAAS,YAAY;EAAa,YAAY;CAAc,IAC9E,CAAC,SAAS,OAAO,oBAAoB;EACpC,IAAI,CAAC,WAAW,CAAC,qCAAA,kBAAkB,KAAK,GAAG;GACzC,MAAM,OAAO;GACb;EACF;EA2BA,MAAM,cAAc,GAvBlB,UAAU,YACN,KACA;sDAC0C,iBAAiB,KAAK,EAAE,iFAAiF,MAAM,0CAA0C,MAAM,wCAAwC,MAAM,+DAA+D,MAAM,6DAA6D,MAAM;;;;;kIAKzQ,MAAM,qCAAqC,MAAM;;;;;;;;;;;;;UAazK,iBAAiB,4GAAwG,GAAG;QAElG;EAE9B,IAAI,CAAC,MAAM,aACT,SAAS,KAAK,OAAO,KAAK;CAE9B,GACA,EAAE,iBAAiB,KAAK,CAC1B;CAEA,aAAa;EACX,KAAK;EACL,MAAM,OAAO;CACf;AACF"}
@@ -44,8 +44,8 @@ var ResourceHealthDetails = require__global_external_mobx_react.observer(({ obje
44
44
  /* @__PURE__ */ require_jsx_runtime.jsx("style", { children: `
45
45
  .power-operational-summary > .DrawerTitle.power-operational-title { margin-bottom: 10px; }
46
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); }
47
+ .power-operational-summary .power-resource-action { border: 1px solid var(--borderFaintColor); background: var(--contentColor); color: var(--textColorPrimary); transition: background-color 140ms, border-color 140ms; }
48
+ .power-operational-summary .power-resource-action:not(:disabled):hover { background: color-mix(in srgb, var(--contentColor) 85%, var(--textColorPrimary)); border-color: var(--borderColor); }
49
49
  .power-operational-summary .power-resource-action:active { filter: brightness(1.12); }
50
50
  .power-operational-summary .power-resource-action:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
51
51
  ` }),
@@ -1 +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":"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"}
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(--contentColor); color: var(--textColorPrimary); transition: background-color 140ms, border-color 140ms; }\n .power-operational-summary .power-resource-action:not(:disabled):hover { background: color-mix(in srgb, var(--contentColor) 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":"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"}
@@ -1,10 +1,10 @@
1
1
  const require__global_external_react = require("./_virtual/_global-external_react.js");
2
2
  const require_jsx_runtime = require("./_virtual/_global-external_react/jsx-runtime.js");
3
3
  const require_native_tooltip = require("./native-tooltip.js");
4
- const require_date_time = require("./src/common/date-time.js");
5
- const require_power_log_sql_level = require("./src/common/power-log-sql-level.js");
6
4
  const require_power_log_json_fields = require("./power-log-json-fields.js");
7
5
  const require_power_log_json = require("./power-log-json.js");
6
+ const require_date_time = require("./src/common/date-time.js");
7
+ const require_power_log_sql_level = require("./src/common/power-log-sql-level.js");
8
8
  const require_power_log_message = require("./power-log-message.js");
9
9
  let electron = require("electron");
10
10
  //#region src/renderer/power-log-json-cell.tsx
@@ -1,5 +1,12 @@
1
1
  //#region src/renderer/power-logs.css.ts
2
2
  var powerLogsStyles = `
3
+ .ConfirmDialog:has(.power-logs-confirmation) > .box { background:var(--contentColor); color:var(--textColorPrimary); min-width:min(360px,calc(100vw - 32px)); max-width:min(640px,calc(100vw - 32px)); }
4
+ .ConfirmDialog:has(.power-logs-confirmation) .confirm-content { gap:12px; }
5
+ .ConfirmDialog:has(.power-logs-confirmation) .confirm-content > .Icon { flex-shrink:0; margin:0; }
6
+ .ConfirmDialog .power-logs-confirmation { display:block; min-width:0; overflow-wrap:anywhere; }
7
+ .ConfirmDialog:has(.power-logs-confirmation) .confirm-buttons { background:var(--mainBackground); color:var(--textColorPrimary); }
8
+ .ConfirmDialog .power-logs-confirm-label { display:inline-flex; align-items:center; gap:6px; }
9
+ .ConfirmDialog:has(.power-logs-confirmation) .Button.power-logs-confirm-delete { background:var(--colorError); color:#fff !important; }
3
10
  body:has(.power-logs[data-testid="power-logs-page"]) .power-ai-launcher { display:none; }
4
11
  .power-logs { display:flex; flex-direction:column; height:100%; min-height:0; min-width:0; box-sizing:border-box; overflow:hidden; padding:12px; gap:6px; color:var(--textColorPrimary); container-type:inline-size; }
5
12
  .power-logs header, .power-logs-toolbar, .power-logs-filters, .power-logs-source { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
@@ -21,7 +28,8 @@ body:has(.power-logs[data-testid="power-logs-page"]) .power-ai-launcher { displa
21
28
  .power-logs .power-logs-error { color:var(--colorError,#e68b80); }
22
29
  .power-logs-tabs { display:flex; gap:4px; flex-shrink:0; }
23
30
  .power-logs header .power-logs-page-title { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }
24
- .power-logs-snapshot-option { display:flex; align-items:center; justify-content:space-between; gap:12px; min-width:0; }
31
+ .power-logs-snapshot-option { display:flex; align-items:center; justify-content:flex-start; gap:12px; min-width:0; }
32
+ .power-logs-snapshot-option > .power-logs-option-text { flex:1; }
25
33
  .power-logs-option-text { display:flex; flex-direction:column; gap:3px; min-width:0; white-space:normal; overflow-wrap:anywhere; }
26
34
  .power-logs-option-text strong { font-weight:500; }
27
35
  .power-logs-option-text small { opacity:.85; font-size:11px; }
@@ -123,7 +131,8 @@ body:has(.power-logs[data-testid="power-logs-page"]) .power-ai-launcher { displa
123
131
  .power-logs .power-logs-error { white-space:normal; overflow:visible; overflow-wrap:anywhere; }
124
132
  .power-logs-snapshot-notes { max-height:100px; overflow:auto; }
125
133
  @container(max-width:760px) { .power-logs-detail { width:min(420px,86%); padding:12px; gap:10px; } .power-logs-filters .power-logs-select { flex:1 1 130px; } .power-logs-filters > input { flex-basis:100%; } .power-log-row { grid-template-columns:var(--log-time-width,calc(8ch + 4px)) var(--log-level-width,calc(var(--power-log-level-ch,7) * .833333ch + 4px)) minmax(0,1fr); } .power-log-row .power-log-origin { display:none; } .power-logs header .power-logs-actions { gap:4px; } }
126
- .Select__option--is-selected .power-logs-snapshot-option > button { color:#fff; background:#0002; border:1px solid #fff7; }
134
+ .Select__option--is-selected .power-logs-snapshot-option > button { color:var(--freelens-power-accent-foreground,#fff); background:#0002; border:1px solid currentColor; }
135
+ .Select__option--is-selected .power-logs-snapshot-option > button[data-capture-persistent]:not(:disabled):hover { color:var(--primary); background:var(--freelens-power-accent-foreground,#fff); border-color:var(--freelens-power-accent-foreground,#fff); }
127
136
  .Select__option--is-selected .power-logs-snapshot-option > button[data-capture-delete]:not(:disabled):hover { color:#a61b1b; background:#fff; border-color:#fff; }
128
137
  .power-logs-field-filters { display:flex; align-items:center; flex-wrap:wrap; gap:4px; }
129
138
  .power-logs .power-logs-field-filters button { max-width:360px; min-height:24px; padding:2px 6px; font-size:11px; }
@@ -1 +1 @@
1
- {"version":3,"file":"power-logs.css.js","names":[],"sources":["../../src/renderer/power-logs.css.ts"],"sourcesContent":["export const powerLogsStyles = `\nbody:has(.power-logs[data-testid=\"power-logs-page\"]) .power-ai-launcher { display:none; }\n.power-logs { display:flex; flex-direction:column; height:100%; min-height:0; min-width:0; box-sizing:border-box; overflow:hidden; padding:12px; gap:6px; color:var(--textColorPrimary); container-type:inline-size; }\n.power-logs header, .power-logs-toolbar, .power-logs-filters, .power-logs-source { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }\n.power-logs header h1 { margin:0; font-size:16px; display:flex; align-items:center; gap:10px; }\n.power-logs header .power-logs-actions { margin-left:auto; display:flex; gap:8px; flex-wrap:wrap; }\n.power-logs :is(button,input,select,textarea), .power-logs .power-logs-options > summary { font:inherit; color:inherit; }\n.power-logs :is(.power-logs-filters > input,textarea) { background:var(--contentColor); border:1px solid var(--borderColor); border-radius:5px; padding:4px 8px; min-width:0; }\n.power-logs-filters > input { flex:1; min-width:180px; }\n.power-logs label { display:flex; align-items:center; gap:8px; }\n.power-logs button, .power-logs .power-logs-options > summary { display:inline-flex; align-items:center; justify-content:center; gap:6px; min-height:28px; padding:3px 8px; border:1px solid var(--borderColor); border-radius:5px; background:var(--contentColor); cursor:pointer; box-shadow:none; }\n.power-logs button::before { content:none; }\n.power-logs :is(button:not(:disabled),.power-logs-options > summary):hover { color:var(--primary); border-color:var(--primary); }\n.power-logs button[aria-pressed=true], .power-logs button[aria-selected=true] { color:var(--primary); background:color-mix(in srgb,var(--primary) 12%,var(--contentColor)); border-color:var(--primary); }\n.power-logs button:disabled { opacity:.45; cursor:default; }\n.power-logs :is(button,input,select,textarea):focus-visible, .power-logs .power-logs-options > summary:focus-visible { outline:2px solid var(--primary); outline-offset:2px; }\n.power-logs .power-logs-filters > input:focus-visible, .power-logs textarea:focus-visible { outline:none; border-color:var(--primary); box-shadow:inset 0 0 0 1px var(--primary); }\n.power-logs .power-logs-muted { color:var(--textColorSecondary); font-size:12px; line-height:1.5; }\n.power-logs .power-logs-notice { padding:3px 8px; border:1px solid var(--borderColor); border-radius:4px; line-height:1.5; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex-shrink:0; }\n.power-logs .power-logs-error { color:var(--colorError,#e68b80); }\n.power-logs-tabs { display:flex; gap:4px; flex-shrink:0; }\n.power-logs header .power-logs-page-title { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }\n.power-logs-snapshot-option { display:flex; align-items:center; justify-content:space-between; gap:12px; min-width:0; }\n.power-logs-option-text { display:flex; flex-direction:column; gap:3px; min-width:0; white-space:normal; overflow-wrap:anywhere; }\n.power-logs-option-text strong { font-weight:500; }\n.power-logs-option-text small { opacity:.85; font-size:11px; }\n.power-logs-source-option { display:flex; align-items:center; gap:10px; width:100%; min-width:0; white-space:normal; line-height:1.4; }\n.power-logs-source-option > :first-child { flex-shrink:0; opacity:.75; }\n.power-logs-source-option .power-logs-option-text { flex:1; }\n.power-logs-source-option strong, .power-logs-source-option small { white-space:normal; overflow:visible; overflow-wrap:anywhere; }\n.power-logs-source-check { display:inline-flex; width:16px; flex-shrink:0; }\n.power-logs-snapshot-option > button { display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; min-width:28px; min-height:28px; padding:0; border:0; border-radius:4px; background:transparent; color:inherit; cursor:pointer; }\n.power-logs-snapshot-option > button[data-capture-delete]:not(:disabled):hover { color:var(--colorError); background:color-mix(in srgb,var(--colorError) 12%,transparent); }\n.power-logs-snapshot-option > button[data-capture-persistent]:not(:disabled):hover, .power-logs-snapshot-option > button[aria-pressed=true] { color:var(--primary); background:color-mix(in srgb,var(--primary) 12%,transparent); }\n.power-logs-snapshot-option > button:focus-visible { outline:2px solid var(--primary); outline-offset:-2px; }\n.power-logs-snapshot-option > button:disabled { opacity:.45; cursor:default; }\n.power-logs-level-label { color:var(--textColorSecondary); }\n.power-logs-level-label[data-level=debug] { color:var(--colorInfo); }\n.power-logs-level-label[data-level=info] { color:var(--primary); }\n.power-logs-level-label[data-level=warn] { color:var(--colorWarning); }\n.power-logs-level-label[data-level=error],.power-logs-level-label[data-level=fatal] { color:var(--colorError); }\n.Select__option--is-selected .power-logs-level-label { color:inherit; }\n.power-logs-workspace { position:relative; display:flex; flex:1; min-height:0; }\n.power-logs-viewer { display:flex; flex-direction:column; flex:1; min-width:0; min-height:0; gap:4px; }\n.power-logs-stream { position:relative; flex:1; min-height:0; min-width:0; overflow:auto; border:1px solid var(--borderColor); border-radius:6px; background:var(--contentColor); }\n.power-log-row { min-height:0!important; position:absolute; left:0; right:0; width:100%; display:grid!important; grid-template-columns:var(--log-time-width,calc(8ch + 4px)) var(--log-level-width,calc(var(--power-log-level-ch,7) * .833333ch + 4px)) minmax(100px,180px) minmax(0,1fr); align-items:center; gap:8px!important; padding:0 12px!important; border:0!important; border-left:3px solid var(--textColorSecondary)!important; border-bottom:1px solid var(--borderFaintColor)!important; border-radius:0!important; text-align:left; background:transparent!important; font-family:var(--font-monospace,monospace)!important; font-size:12px!important; }\n.power-logs[data-compact=true] .power-log-row { --log-time-width:calc(8ch + 1px); --log-level-width:calc(var(--power-log-level-ch,7) * .909091ch + 1px); padding-inline:6px!important; gap:4px!important; font-size:11px!important; line-height:16px; }\n.power-logs[data-compact=true] table :is(td,th) { padding:1px 6px; font-size:11px; line-height:16px; }\n.power-logs[data-compact=true] .power-logs-cell { white-space:nowrap; }\n.power-log-row > span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-log-row > span:last-child { white-space:pre; height:16px; line-height:16px; }\n.power-log-message { color:var(--textColorPrimary); }\n.power-log-message [data-log-token=http-method] { color:var(--primary); }\n.power-log-message [data-log-token=uuid] { color:#9cdcfe; }\n.theme-light .power-log-message [data-log-token=uuid] { color:#005a9e; }\n.power-log-row .power-log-level { font-size:10px; font-weight:600; text-transform:uppercase; }\n.power-log-row[data-level=warn] { border-left-color:var(--colorWarning,#d9a441)!important; }\n.power-log-row[data-level=error],.power-log-row[data-level=fatal] { border-left-color:var(--colorError,#d26860)!important; }\n.power-log-row[data-level=info] { border-left-color:var(--primary)!important; }\n.power-logs-detail { position:absolute; z-index:5; top:0; bottom:0; right:0; box-sizing:border-box; box-shadow:-4px 0 18px #0004; display:flex; flex-direction:column; align-items:stretch; gap:12px; width:460px; max-width:95%; padding:16px; background:var(--contentColor); border:1px solid var(--borderColor); border-radius:6px; overflow:auto; }\n.power-logs-detail header { justify-content:flex-end; }\n.power-logs-detail header > strong { margin-right:auto; }\n.power-logs-structured-heading { display:flex; align-items:center; gap:6px; }\n.power-logs .power-logs-detail-copy, .power-logs .power-logs-detail-close { flex-shrink:0; width:28px; padding:0; border-color:transparent; background:transparent; }\n.power-logs .power-logs-detail-copy:not(:disabled):hover, .power-logs .power-logs-detail-close:not(:disabled):hover { border-color:transparent; background:color-mix(in srgb,var(--primary) 10%,transparent); }\n.power-log-json { --json-key:#9cdcfe; --json-string:#ce9178; --json-number:#b5cea8; --json-literal:#c586c0; }\n.theme-light .power-log-json { --json-key:#005a9e; --json-string:#9e2b1a; --json-number:#17642d; --json-literal:#7a288c; }\n.power-log-json [data-token=key] { color:var(--json-key); }\n.power-log-json [data-token=string] { color:var(--json-string); }\n.power-log-json [data-token=number] { color:var(--json-number); }\n.power-log-json [data-token=literal] { color:var(--json-literal); }\n.power-logs pre { white-space:pre-wrap; overflow-wrap:anywhere; font-size:12px; line-height:1.6; }\n.power-logs textarea { user-select:text; box-sizing:border-box; width:100%; height:56px; min-height:48px; max-height:120px; flex-shrink:0; resize:vertical; font-family:var(--font-monospace,monospace); }\n.power-logs-results { flex:1; min-height:0; overflow:auto; border:1px solid var(--borderColor); border-radius:6px; }\n.power-logs table { border-collapse:collapse; table-layout:fixed; font-size:12px; width:100%; min-width:0; }\n\n.power-logs th,.power-logs td { padding:6px 10px; text-align:left; border-bottom:1px solid var(--borderColor); max-width:400px; white-space:nowrap; vertical-align:top; }\n.power-logs .power-logs-cell { display:block; overflow:hidden; text-overflow:ellipsis; max-height:4.8em; }\n.power-logs .power-logs-json-cell { position:relative; display:flex; align-items:center; gap:4px; min-width:0; height:20px; max-height:20px; }\n.power-logs .power-logs-json-cell .power-log-json { flex:1; min-width:0; margin:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; line-height:20px; }\n.power-logs .power-logs-json-copy { display:inline-flex; align-items:center; justify-content:center; flex:0 0 20px; width:20px; height:20px; min-height:0; padding:0; border-color:transparent; background:transparent; opacity:.6; }\n.power-logs .power-logs-json-copy:hover, .power-logs .power-logs-json-copy:focus-visible { opacity:1; background:color-mix(in srgb,var(--primary) 10%,transparent); }\n.power-logs .power-logs-json-copy-feedback { position:absolute; left:0; top:0; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }\n\n.power-logs tbody tr { cursor:pointer; }\n.power-logs tbody tr:hover, .power-logs tbody tr:focus-visible { background:color-mix(in srgb,var(--primary) 10%,var(--contentColor)); outline:none; }\n.power-logs td[data-column=message] { font-family:var(--font-monospace,monospace); font-size:12px; white-space:pre-wrap; overflow-wrap:anywhere; }\n.power-logs td[data-level=error], .power-logs td[data-level=fatal] { color:var(--colorError,#d26860); }\n.power-logs td[data-level=warn] { color:var(--colorWarning,#d9a441); }\n.power-logs th { position:sticky; top:0; background:var(--contentColor); }\n.power-logs dialog { position:fixed; inset:0; margin:auto; background:var(--mainBackground); color:var(--textColorPrimary); border:1px solid var(--borderColor); border-radius:8px; padding:24px; width:min(640px,85vw); max-height:80vh; overflow:auto; }\n.power-logs dialog::backdrop { background:#0007; }\n.power-logs-empty { padding:32px; text-align:center; color:var(--textColorSecondary); }\n\n.power-logs > :not(.power-logs-workspace):not(.power-logs-results) { flex-shrink:0; }\n.power-logs-target, .power-logs-caption { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-select { display:inline-block; min-width:0; max-width:360px; flex:1; }\n.power-logs-source .power-logs-select { flex:1; max-width:none; }\n.power-logs-select > div { width:100%; min-width:0; }\n.power-logs-filters .power-logs-select { flex:0 1 180px; }\n.power-logs-filters .power-logs-select[data-source-select] { flex:1 1 260px; max-width:420px; }\n\n.power-logs-capture { display:flex; }\n.power-logs-capture > button { color:var(--primary); }\n.power-logs-options { position:relative; }\n.power-logs-options > summary { list-style:none; }\n.power-logs-options > summary::-webkit-details-marker { display:none; }\n.power-logs .power-logs-options[open] > summary { color:var(--primary); border-color:var(--primary); background:color-mix(in srgb,var(--primary) 12%,var(--contentColor)); }\n.power-logs-options > div { position:absolute; z-index:10; top:calc(100% + 6px); right:0; box-sizing:border-box; width:280px; max-width:calc(100vw - 32px); border-radius:6px; padding:12px; display:flex; flex-direction:column; gap:12px; background:var(--mainBackground); border:1px solid var(--borderColor); box-shadow:0 4px 18px #0005; }\n.power-logs-options label { white-space:nowrap; justify-content:space-between; gap:12px; }\n.power-logs-options .power-logs-select { min-width:130px; }\n.power-logs-select .Select__single-value { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-sql-tools button { min-height:24px; font-size:12px; }\n.power-logs-pagination { justify-content:flex-end; gap:8px; }\n.power-logs-pagination button { width:28px; padding:3px; }\n.power-logs-footer { display:flex; align-items:center; justify-content:space-between; gap:12px; min-width:0; }\n.power-logs-caption { flex:1; min-width:0; font-size:11px!important; }\n.power-logs .power-logs-collection-note { display:flex; align-items:center; gap:5px; min-width:0; max-width:55%; padding:1px 6px; font-size:11px; }\n.power-logs-collection-note > :first-child { color:var(--colorWarning,#d9a441); flex-shrink:0; }\n.power-logs-collection-note > :last-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-status { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.power-logs .power-logs-error { white-space:normal; overflow:visible; overflow-wrap:anywhere; }\n.power-logs-snapshot-notes { max-height:100px; overflow:auto; }\n@container(max-width:760px) { .power-logs-detail { width:min(420px,86%); padding:12px; gap:10px; } .power-logs-filters .power-logs-select { flex:1 1 130px; } .power-logs-filters > input { flex-basis:100%; } .power-log-row { grid-template-columns:var(--log-time-width,calc(8ch + 4px)) var(--log-level-width,calc(var(--power-log-level-ch,7) * .833333ch + 4px)) minmax(0,1fr); } .power-log-row .power-log-origin { display:none; } .power-logs header .power-logs-actions { gap:4px; } }\n.Select__option--is-selected .power-logs-snapshot-option > button { color:#fff; background:#0002; border:1px solid #fff7; }\n.Select__option--is-selected .power-logs-snapshot-option > button[data-capture-delete]:not(:disabled):hover { color:#a61b1b; background:#fff; border-color:#fff; }\n.power-logs-field-filters { display:flex; align-items:center; flex-wrap:wrap; gap:4px; }\n.power-logs .power-logs-field-filters button { max-width:360px; min-height:24px; padding:2px 6px; font-size:11px; }\n.power-logs-field-filters button > span:first-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-field-filters button > :last-child { flex-shrink:0; }\n@keyframes power-log-json-actions-in { from { opacity:0; } to { opacity:1; } }\n.power-log-json-actions button { color:inherit; }\n.power-logs .power-log-json-actions button:hover, .power-logs .power-log-json-actions button:focus-visible { color:var(--primary); }\n.power-log-json-actions { animation:power-log-json-actions-in 120ms ease-out; }\n@media (prefers-reduced-motion:reduce) { .power-log-json-actions { animation:none; } }\n.power-logs .power-logs-json-cell .power-log-json-fields { flex:1; min-width:0; overflow:hidden; }\n.power-logs .power-logs-json-cell .power-log-json { white-space:pre; }\n.power-log-message [data-log-token=url], .power-log-message [data-log-token=trace-id], .power-log-message [data-log-token=address] { color:#9cdcfe; }\n.theme-light .power-log-message [data-log-token=url], .theme-light .power-log-message [data-log-token=trace-id], .theme-light .power-log-message [data-log-token=address] { color:#005a9e; }\n.power-log-message [data-log-token=duration], .power-log-message [data-status-class=\"2\"] { color:#b5cea8; }\n.theme-light .power-log-message [data-log-token=duration], .theme-light .power-log-message [data-status-class=\"2\"] { color:#17642d; }\n.power-log-message [data-status-class=\"1\"], .power-log-message [data-status-class=\"3\"] { color:#9cdcfe; }\n.theme-light .power-log-message [data-status-class=\"1\"], .theme-light .power-log-message [data-status-class=\"3\"] { color:#005a9e; }\n.power-log-message [data-status-class=\"4\"] { color:#e3b56b; }\n.theme-light .power-log-message [data-status-class=\"4\"] { color:#8a4b00; }\n.power-log-message [data-status-class=\"5\"] { color:#f19b8d; }\n.theme-light .power-log-message [data-status-class=\"5\"] { color:#9e2b1a; }\n.power-logs[data-hide-resource-name=true] .power-log-row { grid-template-columns:var(--log-time-width,calc(8ch + 4px)) var(--log-level-width,calc(var(--power-log-level-ch,7) * .833333ch + 4px)) minmax(0,1fr); }\n.power-logs[data-hide-resource-name=true] .power-log-origin { display:none; }\n.power-logs .power-logs-control-label { display:block; flex:0 0 76px; width:76px; margin:0; }\n.power-logs .power-logs-query-error { font-size:12px; color:var(--colorError); }\n`;\n"],"mappings":";AAAA,IAAa,kBAAkB"}
1
+ {"version":3,"file":"power-logs.css.js","names":[],"sources":["../../src/renderer/power-logs.css.ts"],"sourcesContent":["export const powerLogsStyles = `\n.ConfirmDialog:has(.power-logs-confirmation) > .box { background:var(--contentColor); color:var(--textColorPrimary); min-width:min(360px,calc(100vw - 32px)); max-width:min(640px,calc(100vw - 32px)); }\n.ConfirmDialog:has(.power-logs-confirmation) .confirm-content { gap:12px; }\n.ConfirmDialog:has(.power-logs-confirmation) .confirm-content > .Icon { flex-shrink:0; margin:0; }\n.ConfirmDialog .power-logs-confirmation { display:block; min-width:0; overflow-wrap:anywhere; }\n.ConfirmDialog:has(.power-logs-confirmation) .confirm-buttons { background:var(--mainBackground); color:var(--textColorPrimary); }\n.ConfirmDialog .power-logs-confirm-label { display:inline-flex; align-items:center; gap:6px; }\n.ConfirmDialog:has(.power-logs-confirmation) .Button.power-logs-confirm-delete { background:var(--colorError); color:#fff !important; }\nbody:has(.power-logs[data-testid=\"power-logs-page\"]) .power-ai-launcher { display:none; }\n.power-logs { display:flex; flex-direction:column; height:100%; min-height:0; min-width:0; box-sizing:border-box; overflow:hidden; padding:12px; gap:6px; color:var(--textColorPrimary); container-type:inline-size; }\n.power-logs header, .power-logs-toolbar, .power-logs-filters, .power-logs-source { display:flex; align-items:center; gap:6px; flex-wrap:wrap; }\n.power-logs header h1 { margin:0; font-size:16px; display:flex; align-items:center; gap:10px; }\n.power-logs header .power-logs-actions { margin-left:auto; display:flex; gap:8px; flex-wrap:wrap; }\n.power-logs :is(button,input,select,textarea), .power-logs .power-logs-options > summary { font:inherit; color:inherit; }\n.power-logs :is(.power-logs-filters > input,textarea) { background:var(--contentColor); border:1px solid var(--borderColor); border-radius:5px; padding:4px 8px; min-width:0; }\n.power-logs-filters > input { flex:1; min-width:180px; }\n.power-logs label { display:flex; align-items:center; gap:8px; }\n.power-logs button, .power-logs .power-logs-options > summary { display:inline-flex; align-items:center; justify-content:center; gap:6px; min-height:28px; padding:3px 8px; border:1px solid var(--borderColor); border-radius:5px; background:var(--contentColor); cursor:pointer; box-shadow:none; }\n.power-logs button::before { content:none; }\n.power-logs :is(button:not(:disabled),.power-logs-options > summary):hover { color:var(--primary); border-color:var(--primary); }\n.power-logs button[aria-pressed=true], .power-logs button[aria-selected=true] { color:var(--primary); background:color-mix(in srgb,var(--primary) 12%,var(--contentColor)); border-color:var(--primary); }\n.power-logs button:disabled { opacity:.45; cursor:default; }\n.power-logs :is(button,input,select,textarea):focus-visible, .power-logs .power-logs-options > summary:focus-visible { outline:2px solid var(--primary); outline-offset:2px; }\n.power-logs .power-logs-filters > input:focus-visible, .power-logs textarea:focus-visible { outline:none; border-color:var(--primary); box-shadow:inset 0 0 0 1px var(--primary); }\n.power-logs .power-logs-muted { color:var(--textColorSecondary); font-size:12px; line-height:1.5; }\n.power-logs .power-logs-notice { padding:3px 8px; border:1px solid var(--borderColor); border-radius:4px; line-height:1.5; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex-shrink:0; }\n.power-logs .power-logs-error { color:var(--colorError,#e68b80); }\n.power-logs-tabs { display:flex; gap:4px; flex-shrink:0; }\n.power-logs header .power-logs-page-title { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0; }\n.power-logs-snapshot-option { display:flex; align-items:center; justify-content:flex-start; gap:12px; min-width:0; }\n.power-logs-snapshot-option > .power-logs-option-text { flex:1; }\n.power-logs-option-text { display:flex; flex-direction:column; gap:3px; min-width:0; white-space:normal; overflow-wrap:anywhere; }\n.power-logs-option-text strong { font-weight:500; }\n.power-logs-option-text small { opacity:.85; font-size:11px; }\n.power-logs-source-option { display:flex; align-items:center; gap:10px; width:100%; min-width:0; white-space:normal; line-height:1.4; }\n.power-logs-source-option > :first-child { flex-shrink:0; opacity:.75; }\n.power-logs-source-option .power-logs-option-text { flex:1; }\n.power-logs-source-option strong, .power-logs-source-option small { white-space:normal; overflow:visible; overflow-wrap:anywhere; }\n.power-logs-source-check { display:inline-flex; width:16px; flex-shrink:0; }\n.power-logs-snapshot-option > button { display:inline-flex; align-items:center; justify-content:center; flex-shrink:0; min-width:28px; min-height:28px; padding:0; border:0; border-radius:4px; background:transparent; color:inherit; cursor:pointer; }\n.power-logs-snapshot-option > button[data-capture-delete]:not(:disabled):hover { color:var(--colorError); background:color-mix(in srgb,var(--colorError) 12%,transparent); }\n.power-logs-snapshot-option > button[data-capture-persistent]:not(:disabled):hover, .power-logs-snapshot-option > button[aria-pressed=true] { color:var(--primary); background:color-mix(in srgb,var(--primary) 12%,transparent); }\n.power-logs-snapshot-option > button:focus-visible { outline:2px solid var(--primary); outline-offset:-2px; }\n.power-logs-snapshot-option > button:disabled { opacity:.45; cursor:default; }\n.power-logs-level-label { color:var(--textColorSecondary); }\n.power-logs-level-label[data-level=debug] { color:var(--colorInfo); }\n.power-logs-level-label[data-level=info] { color:var(--primary); }\n.power-logs-level-label[data-level=warn] { color:var(--colorWarning); }\n.power-logs-level-label[data-level=error],.power-logs-level-label[data-level=fatal] { color:var(--colorError); }\n.Select__option--is-selected .power-logs-level-label { color:inherit; }\n.power-logs-workspace { position:relative; display:flex; flex:1; min-height:0; }\n.power-logs-viewer { display:flex; flex-direction:column; flex:1; min-width:0; min-height:0; gap:4px; }\n.power-logs-stream { position:relative; flex:1; min-height:0; min-width:0; overflow:auto; border:1px solid var(--borderColor); border-radius:6px; background:var(--contentColor); }\n.power-log-row { min-height:0!important; position:absolute; left:0; right:0; width:100%; display:grid!important; grid-template-columns:var(--log-time-width,calc(8ch + 4px)) var(--log-level-width,calc(var(--power-log-level-ch,7) * .833333ch + 4px)) minmax(100px,180px) minmax(0,1fr); align-items:center; gap:8px!important; padding:0 12px!important; border:0!important; border-left:3px solid var(--textColorSecondary)!important; border-bottom:1px solid var(--borderFaintColor)!important; border-radius:0!important; text-align:left; background:transparent!important; font-family:var(--font-monospace,monospace)!important; font-size:12px!important; }\n.power-logs[data-compact=true] .power-log-row { --log-time-width:calc(8ch + 1px); --log-level-width:calc(var(--power-log-level-ch,7) * .909091ch + 1px); padding-inline:6px!important; gap:4px!important; font-size:11px!important; line-height:16px; }\n.power-logs[data-compact=true] table :is(td,th) { padding:1px 6px; font-size:11px; line-height:16px; }\n.power-logs[data-compact=true] .power-logs-cell { white-space:nowrap; }\n.power-log-row > span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-log-row > span:last-child { white-space:pre; height:16px; line-height:16px; }\n.power-log-message { color:var(--textColorPrimary); }\n.power-log-message [data-log-token=http-method] { color:var(--primary); }\n.power-log-message [data-log-token=uuid] { color:#9cdcfe; }\n.theme-light .power-log-message [data-log-token=uuid] { color:#005a9e; }\n.power-log-row .power-log-level { font-size:10px; font-weight:600; text-transform:uppercase; }\n.power-log-row[data-level=warn] { border-left-color:var(--colorWarning,#d9a441)!important; }\n.power-log-row[data-level=error],.power-log-row[data-level=fatal] { border-left-color:var(--colorError,#d26860)!important; }\n.power-log-row[data-level=info] { border-left-color:var(--primary)!important; }\n.power-logs-detail { position:absolute; z-index:5; top:0; bottom:0; right:0; box-sizing:border-box; box-shadow:-4px 0 18px #0004; display:flex; flex-direction:column; align-items:stretch; gap:12px; width:460px; max-width:95%; padding:16px; background:var(--contentColor); border:1px solid var(--borderColor); border-radius:6px; overflow:auto; }\n.power-logs-detail header { justify-content:flex-end; }\n.power-logs-detail header > strong { margin-right:auto; }\n.power-logs-structured-heading { display:flex; align-items:center; gap:6px; }\n.power-logs .power-logs-detail-copy, .power-logs .power-logs-detail-close { flex-shrink:0; width:28px; padding:0; border-color:transparent; background:transparent; }\n.power-logs .power-logs-detail-copy:not(:disabled):hover, .power-logs .power-logs-detail-close:not(:disabled):hover { border-color:transparent; background:color-mix(in srgb,var(--primary) 10%,transparent); }\n.power-log-json { --json-key:#9cdcfe; --json-string:#ce9178; --json-number:#b5cea8; --json-literal:#c586c0; }\n.theme-light .power-log-json { --json-key:#005a9e; --json-string:#9e2b1a; --json-number:#17642d; --json-literal:#7a288c; }\n.power-log-json [data-token=key] { color:var(--json-key); }\n.power-log-json [data-token=string] { color:var(--json-string); }\n.power-log-json [data-token=number] { color:var(--json-number); }\n.power-log-json [data-token=literal] { color:var(--json-literal); }\n.power-logs pre { white-space:pre-wrap; overflow-wrap:anywhere; font-size:12px; line-height:1.6; }\n.power-logs textarea { user-select:text; box-sizing:border-box; width:100%; height:56px; min-height:48px; max-height:120px; flex-shrink:0; resize:vertical; font-family:var(--font-monospace,monospace); }\n.power-logs-results { flex:1; min-height:0; overflow:auto; border:1px solid var(--borderColor); border-radius:6px; }\n.power-logs table { border-collapse:collapse; table-layout:fixed; font-size:12px; width:100%; min-width:0; }\n\n.power-logs th,.power-logs td { padding:6px 10px; text-align:left; border-bottom:1px solid var(--borderColor); max-width:400px; white-space:nowrap; vertical-align:top; }\n.power-logs .power-logs-cell { display:block; overflow:hidden; text-overflow:ellipsis; max-height:4.8em; }\n.power-logs .power-logs-json-cell { position:relative; display:flex; align-items:center; gap:4px; min-width:0; height:20px; max-height:20px; }\n.power-logs .power-logs-json-cell .power-log-json { flex:1; min-width:0; margin:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; line-height:20px; }\n.power-logs .power-logs-json-copy { display:inline-flex; align-items:center; justify-content:center; flex:0 0 20px; width:20px; height:20px; min-height:0; padding:0; border-color:transparent; background:transparent; opacity:.6; }\n.power-logs .power-logs-json-copy:hover, .power-logs .power-logs-json-copy:focus-visible { opacity:1; background:color-mix(in srgb,var(--primary) 10%,transparent); }\n.power-logs .power-logs-json-copy-feedback { position:absolute; left:0; top:0; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }\n\n.power-logs tbody tr { cursor:pointer; }\n.power-logs tbody tr:hover, .power-logs tbody tr:focus-visible { background:color-mix(in srgb,var(--primary) 10%,var(--contentColor)); outline:none; }\n.power-logs td[data-column=message] { font-family:var(--font-monospace,monospace); font-size:12px; white-space:pre-wrap; overflow-wrap:anywhere; }\n.power-logs td[data-level=error], .power-logs td[data-level=fatal] { color:var(--colorError,#d26860); }\n.power-logs td[data-level=warn] { color:var(--colorWarning,#d9a441); }\n.power-logs th { position:sticky; top:0; background:var(--contentColor); }\n.power-logs dialog { position:fixed; inset:0; margin:auto; background:var(--mainBackground); color:var(--textColorPrimary); border:1px solid var(--borderColor); border-radius:8px; padding:24px; width:min(640px,85vw); max-height:80vh; overflow:auto; }\n.power-logs dialog::backdrop { background:#0007; }\n.power-logs-empty { padding:32px; text-align:center; color:var(--textColorSecondary); }\n\n.power-logs > :not(.power-logs-workspace):not(.power-logs-results) { flex-shrink:0; }\n.power-logs-target, .power-logs-caption { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-select { display:inline-block; min-width:0; max-width:360px; flex:1; }\n.power-logs-source .power-logs-select { flex:1; max-width:none; }\n.power-logs-select > div { width:100%; min-width:0; }\n.power-logs-filters .power-logs-select { flex:0 1 180px; }\n.power-logs-filters .power-logs-select[data-source-select] { flex:1 1 260px; max-width:420px; }\n\n.power-logs-capture { display:flex; }\n.power-logs-capture > button { color:var(--primary); }\n.power-logs-options { position:relative; }\n.power-logs-options > summary { list-style:none; }\n.power-logs-options > summary::-webkit-details-marker { display:none; }\n.power-logs .power-logs-options[open] > summary { color:var(--primary); border-color:var(--primary); background:color-mix(in srgb,var(--primary) 12%,var(--contentColor)); }\n.power-logs-options > div { position:absolute; z-index:10; top:calc(100% + 6px); right:0; box-sizing:border-box; width:280px; max-width:calc(100vw - 32px); border-radius:6px; padding:12px; display:flex; flex-direction:column; gap:12px; background:var(--mainBackground); border:1px solid var(--borderColor); box-shadow:0 4px 18px #0005; }\n.power-logs-options label { white-space:nowrap; justify-content:space-between; gap:12px; }\n.power-logs-options .power-logs-select { min-width:130px; }\n.power-logs-select .Select__single-value { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-sql-tools button { min-height:24px; font-size:12px; }\n.power-logs-pagination { justify-content:flex-end; gap:8px; }\n.power-logs-pagination button { width:28px; padding:3px; }\n.power-logs-footer { display:flex; align-items:center; justify-content:space-between; gap:12px; min-width:0; }\n.power-logs-caption { flex:1; min-width:0; font-size:11px!important; }\n.power-logs .power-logs-collection-note { display:flex; align-items:center; gap:5px; min-width:0; max-width:55%; padding:1px 6px; font-size:11px; }\n.power-logs-collection-note > :first-child { color:var(--colorWarning,#d9a441); flex-shrink:0; }\n.power-logs-collection-note > :last-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-status { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.power-logs .power-logs-error { white-space:normal; overflow:visible; overflow-wrap:anywhere; }\n.power-logs-snapshot-notes { max-height:100px; overflow:auto; }\n@container(max-width:760px) { .power-logs-detail { width:min(420px,86%); padding:12px; gap:10px; } .power-logs-filters .power-logs-select { flex:1 1 130px; } .power-logs-filters > input { flex-basis:100%; } .power-log-row { grid-template-columns:var(--log-time-width,calc(8ch + 4px)) var(--log-level-width,calc(var(--power-log-level-ch,7) * .833333ch + 4px)) minmax(0,1fr); } .power-log-row .power-log-origin { display:none; } .power-logs header .power-logs-actions { gap:4px; } }\n.Select__option--is-selected .power-logs-snapshot-option > button { color:var(--freelens-power-accent-foreground,#fff); background:#0002; border:1px solid currentColor; }\n.Select__option--is-selected .power-logs-snapshot-option > button[data-capture-persistent]:not(:disabled):hover { color:var(--primary); background:var(--freelens-power-accent-foreground,#fff); border-color:var(--freelens-power-accent-foreground,#fff); }\n.Select__option--is-selected .power-logs-snapshot-option > button[data-capture-delete]:not(:disabled):hover { color:#a61b1b; background:#fff; border-color:#fff; }\n.power-logs-field-filters { display:flex; align-items:center; flex-wrap:wrap; gap:4px; }\n.power-logs .power-logs-field-filters button { max-width:360px; min-height:24px; padding:2px 6px; font-size:11px; }\n.power-logs-field-filters button > span:first-child { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.power-logs-field-filters button > :last-child { flex-shrink:0; }\n@keyframes power-log-json-actions-in { from { opacity:0; } to { opacity:1; } }\n.power-log-json-actions button { color:inherit; }\n.power-logs .power-log-json-actions button:hover, .power-logs .power-log-json-actions button:focus-visible { color:var(--primary); }\n.power-log-json-actions { animation:power-log-json-actions-in 120ms ease-out; }\n@media (prefers-reduced-motion:reduce) { .power-log-json-actions { animation:none; } }\n.power-logs .power-logs-json-cell .power-log-json-fields { flex:1; min-width:0; overflow:hidden; }\n.power-logs .power-logs-json-cell .power-log-json { white-space:pre; }\n.power-log-message [data-log-token=url], .power-log-message [data-log-token=trace-id], .power-log-message [data-log-token=address] { color:#9cdcfe; }\n.theme-light .power-log-message [data-log-token=url], .theme-light .power-log-message [data-log-token=trace-id], .theme-light .power-log-message [data-log-token=address] { color:#005a9e; }\n.power-log-message [data-log-token=duration], .power-log-message [data-status-class=\"2\"] { color:#b5cea8; }\n.theme-light .power-log-message [data-log-token=duration], .theme-light .power-log-message [data-status-class=\"2\"] { color:#17642d; }\n.power-log-message [data-status-class=\"1\"], .power-log-message [data-status-class=\"3\"] { color:#9cdcfe; }\n.theme-light .power-log-message [data-status-class=\"1\"], .theme-light .power-log-message [data-status-class=\"3\"] { color:#005a9e; }\n.power-log-message [data-status-class=\"4\"] { color:#e3b56b; }\n.theme-light .power-log-message [data-status-class=\"4\"] { color:#8a4b00; }\n.power-log-message [data-status-class=\"5\"] { color:#f19b8d; }\n.theme-light .power-log-message [data-status-class=\"5\"] { color:#9e2b1a; }\n.power-logs[data-hide-resource-name=true] .power-log-row { grid-template-columns:var(--log-time-width,calc(8ch + 4px)) var(--log-level-width,calc(var(--power-log-level-ch,7) * .833333ch + 4px)) minmax(0,1fr); }\n.power-logs[data-hide-resource-name=true] .power-log-origin { display:none; }\n.power-logs .power-logs-control-label { display:block; flex:0 0 76px; width:76px; margin:0; }\n.power-logs .power-logs-query-error { font-size:12px; color:var(--colorError); }\n`;\n"],"mappings":";AAAA,IAAa,kBAAkB"}
@@ -7,15 +7,15 @@ const require__global_external_react = require("./_virtual/_global-external_reac
7
7
  const require_jsx_runtime = require("./_virtual/_global-external_react/jsx-runtime.js");
8
8
  const require_native_tooltip = require("./native-tooltip.js");
9
9
  const require_ai_diagnostic_handoff = require("./ai-diagnostic-handoff.js");
10
+ const require_power_log_field_filters = require("./src/common/power-log-field-filters.js");
11
+ const require_power_log_json_fields = require("./power-log-json-fields.js");
12
+ const require_power_log_json = require("./power-log-json.js");
10
13
  const require_date_time = require("./src/common/date-time.js");
11
14
  const require_diagnostic_explain_button = require("./diagnostic-explain-button.js");
12
- const require_power_log_field_filters = require("./src/common/power-log-field-filters.js");
13
15
  const require_power_log_json_filter_sql = require("./src/common/power-log-json-filter-sql.js");
14
16
  const require_power_log_json_preset = require("./src/common/power-log-json-preset.js");
15
17
  const require_power_log_sql_level = require("./src/common/power-log-sql-level.js");
16
18
  const require_power_logs_ai = require("./src/common/power-logs-ai.js");
17
- const require_power_log_json_fields = require("./power-log-json-fields.js");
18
- const require_power_log_json = require("./power-log-json.js");
19
19
  const require_power_log_message = require("./power-log-message.js");
20
20
  const require_power_log_json_cell = require("./power-log-json-cell.js");
21
21
  const require_power_log_sql_editor = require("./power-log-sql-editor.js");
@@ -978,28 +978,56 @@ function Workspace({ clusterId, contextId }) {
978
978
  const capture = captures.find((capture) => capture.id === id);
979
979
  if (!capture) return;
980
980
  require_extensions.Renderer.Component.ConfirmDialog.open({
981
- message: /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
982
- "Delete snapshot ",
983
- /* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
984
- "? This cannot be undone."
985
- ] }),
986
- labelOk: "Delete snapshot",
981
+ message: /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
982
+ className: "power-logs-confirmation",
983
+ children: [
984
+ "Delete snapshot ",
985
+ /* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
986
+ "? This cannot be undone."
987
+ ]
988
+ }),
989
+ labelOk: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
990
+ className: "power-logs-confirm-label",
991
+ children: [/* @__PURE__ */ require_jsx_runtime.jsx("span", {
992
+ "aria-hidden": "true",
993
+ children: /* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Icon, {
994
+ material: "delete_outline",
995
+ size: 16
996
+ })
997
+ }), "Delete snapshot"]
998
+ }),
999
+ okButtonProps: { className: "ok power-logs-confirm-delete" },
987
1000
  ok: () => deleteCapture(id)
988
1001
  });
989
1002
  };
990
1003
  const confirmPersistentCapture = (capture) => {
991
1004
  const persistent = !capture.persistent;
992
1005
  require_extensions.Renderer.Component.ConfirmDialog.open({
993
- message: persistent ? /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
994
- "Keep snapshot ",
995
- /* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
996
- " until you delete it? It will survive restarts and will not expire automatically."
997
- ] }) : /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
998
- "Allow snapshot ",
999
- /* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
1000
- " to expire? Its retention period will start again now."
1001
- ] }),
1002
- labelOk: persistent ? "Keep snapshot" : "Allow expiration",
1006
+ message: persistent ? /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
1007
+ className: "power-logs-confirmation",
1008
+ children: [
1009
+ "Keep snapshot ",
1010
+ /* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
1011
+ " until you delete it? It will survive restarts and will not expire automatically."
1012
+ ]
1013
+ }) : /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
1014
+ className: "power-logs-confirmation",
1015
+ children: [
1016
+ "Allow snapshot ",
1017
+ /* @__PURE__ */ require_jsx_runtime.jsx("strong", { children: capture.target.name }),
1018
+ " to expire? Its retention period will start again now."
1019
+ ]
1020
+ }),
1021
+ labelOk: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
1022
+ className: "power-logs-confirm-label",
1023
+ children: [/* @__PURE__ */ require_jsx_runtime.jsx("span", {
1024
+ "aria-hidden": "true",
1025
+ children: /* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Icon, {
1026
+ svg: persistent ? "push_pin" : "push_off",
1027
+ size: 16
1028
+ })
1029
+ }), persistent ? "Keep snapshot" : "Allow expiration"]
1030
+ }),
1003
1031
  ok: async () => {
1004
1032
  if (!alive.current || deleting.current.has(capture.id) || queryRef.current || captureController.current) return;
1005
1033
  deleting.current.add(capture.id);
@@ -1022,8 +1050,21 @@ function Workspace({ clusterId, contextId }) {
1022
1050
  });
1023
1051
  };
1024
1052
  const clearSavedSnapshots = () => require_extensions.Renderer.Component.ConfirmDialog.open({
1025
- message: "Delete all saved snapshots from all clusters? Temporary snapshots will be kept. This cannot be undone.",
1026
- labelOk: "Clear saved snapshots",
1053
+ message: /* @__PURE__ */ require_jsx_runtime.jsx("div", {
1054
+ className: "power-logs-confirmation",
1055
+ children: "Delete all saved snapshots from all clusters? Temporary snapshots will be kept. This cannot be undone."
1056
+ }),
1057
+ labelOk: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
1058
+ className: "power-logs-confirm-label",
1059
+ children: [/* @__PURE__ */ require_jsx_runtime.jsx("span", {
1060
+ "aria-hidden": "true",
1061
+ children: /* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Icon, {
1062
+ material: "delete_outline",
1063
+ size: 16
1064
+ })
1065
+ }), "Clear saved snapshots"]
1066
+ }),
1067
+ okButtonProps: { className: "ok power-logs-confirm-delete" },
1027
1068
  ok: async () => {
1028
1069
  if (queryRef.current || captureController.current || deleting.current.size) return;
1029
1070
  deleting.current.add("clear-saved");
@@ -1062,6 +1103,16 @@ function Workspace({ clusterId, contextId }) {
1062
1103
  });
1063
1104
  else setError("Open the Pod in the native resource view to use its Logs action");
1064
1105
  };
1106
+ const errorNotice = error && /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
1107
+ role: "alert",
1108
+ className: "power-logs-notice power-logs-error",
1109
+ children: [error, savedPoolFull && /* @__PURE__ */ require_jsx_runtime.jsx("button", {
1110
+ type: "button",
1111
+ disabled: deletingCount > 0 || !!queryId || capturePending,
1112
+ onClick: clearSavedSnapshots,
1113
+ children: "Clear saved snapshots"
1114
+ })]
1115
+ });
1065
1116
  return /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
1066
1117
  className: "power-logs",
1067
1118
  "data-testid": "power-logs-page",
@@ -1247,16 +1298,6 @@ function Workspace({ clusterId, contextId }) {
1247
1298
  ]
1248
1299
  })
1249
1300
  }) : /* @__PURE__ */ require_jsx_runtime.jsx(SourcePicker, {}),
1250
- error && /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
1251
- role: "alert",
1252
- className: "power-logs-notice power-logs-error",
1253
- children: [error, savedPoolFull && /* @__PURE__ */ require_jsx_runtime.jsx("button", {
1254
- type: "button",
1255
- disabled: deletingCount > 0 || !!queryId || capturePending,
1256
- onClick: clearSavedSnapshots,
1257
- children: "Clear saved snapshots"
1258
- })]
1259
- }),
1260
1301
  tab === "live" ? /* @__PURE__ */ require_jsx_runtime.jsxs(require_jsx_runtime.Fragment, { children: [
1261
1302
  /* @__PURE__ */ require_jsx_runtime.jsxs("div", {
1262
1303
  className: "power-logs-filters",
@@ -1363,6 +1404,7 @@ function Workspace({ clusterId, contextId }) {
1363
1404
  })
1364
1405
  ]
1365
1406
  }),
1407
+ errorNotice,
1366
1408
  /* @__PURE__ */ require_jsx_runtime.jsx(FieldFilters, {
1367
1409
  filters: fieldFilters,
1368
1410
  onRemove: (index) => setFieldFilters(fieldFilters.filter((_, item) => item !== index))
@@ -1461,7 +1503,7 @@ function Workspace({ clusterId, contextId }) {
1461
1503
  confirmPersistentCapture(item);
1462
1504
  },
1463
1505
  children: /* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Icon, {
1464
- material: "push_pin",
1506
+ svg: item.persistent ? "push_off" : "push_pin",
1465
1507
  size: 16
1466
1508
  })
1467
1509
  })
@@ -1589,6 +1631,7 @@ function Workspace({ clusterId, contextId }) {
1589
1631
  onChange: setSql,
1590
1632
  fitVersion: sqlFitVersion
1591
1633
  }),
1634
+ errorNotice,
1592
1635
  sqlError && /* @__PURE__ */ require_jsx_runtime.jsx("div", {
1593
1636
  role: "alert",
1594
1637
  className: "power-logs-notice power-logs-error power-logs-query-error",