@64mb/freelens-power 2.2.0 → 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.
- package/README.md +1 -1
- package/THIRD_PARTY_LICENSES +26 -0
- package/out/main/ai-models.js +2 -1
- package/out/main/ai-models.js.map +1 -1
- package/out/main/ai.js +13 -5
- package/out/main/ai.js.map +1 -1
- package/out/renderer/ai-extras.js +21 -16
- package/out/renderer/ai-extras.js.map +1 -1
- package/out/renderer/ai-icon.js +23 -0
- package/out/renderer/ai-icon.js.map +1 -1
- package/out/renderer/ai.js +81 -10
- package/out/renderer/ai.js.map +1 -1
- package/out/renderer/appearance.js +20 -2
- package/out/renderer/appearance.js.map +1 -1
- package/out/renderer/dashboard.js +10 -3
- package/out/renderer/dashboard.js.map +1 -1
- package/out/renderer/details/resource-health-details.js +2 -2
- package/out/renderer/details/resource-health-details.js.map +1 -1
- package/out/renderer/power-log-json-cell.js +2 -2
- package/out/renderer/power-logs.css.js +11 -2
- package/out/renderer/power-logs.css.js.map +1 -1
- package/out/renderer/power-logs.js +75 -32
- package/out/renderer/power-logs.js.map +1 -1
- package/out/renderer/preferences/ai-preferences.js +6 -3
- package/out/renderer/preferences/ai-preferences.js.map +1 -1
- package/out/renderer/preferences/monitoring-preferences.js +14 -6
- package/out/renderer/preferences/monitoring-preferences.js.map +1 -1
- package/package.json +1 -1
|
@@ -152,13 +152,16 @@ var AiPreferences = require__global_external_mobx_react.observer(() => {
|
|
|
152
152
|
})
|
|
153
153
|
})]
|
|
154
154
|
}),
|
|
155
|
-
|
|
155
|
+
/* @__PURE__ */ require_jsx_runtime.jsxs("div", {
|
|
156
156
|
className: "power-settings-row",
|
|
157
157
|
style: rowStyle,
|
|
158
|
-
children: [/* @__PURE__ */ require_jsx_runtime.jsx("label", {
|
|
158
|
+
children: [/* @__PURE__ */ require_jsx_runtime.jsxs("div", { children: [/* @__PURE__ */ require_jsx_runtime.jsx("label", {
|
|
159
159
|
htmlFor: "power-ai-speed",
|
|
160
160
|
children: "Speed"
|
|
161
|
-
}), /* @__PURE__ */ require_jsx_runtime.jsx("div", {
|
|
161
|
+
}), isClaude && /* @__PURE__ */ require_jsx_runtime.jsx("div", {
|
|
162
|
+
className: "power-settings-hint",
|
|
163
|
+
children: "Fast mode applies to Opus models. Availability depends on your CLI account."
|
|
164
|
+
})] }), /* @__PURE__ */ require_jsx_runtime.jsx("div", {
|
|
162
165
|
style: controlStyle,
|
|
163
166
|
children: /* @__PURE__ */ require_jsx_runtime.jsx(Select, {
|
|
164
167
|
id: "power-ai-speed",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-preferences.js","names":[],"sources":["../../../src/renderer/preferences/ai-preferences.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { ipcRenderer } from \"electron\";\nimport { observer } from \"mobx-react\";\nimport { useEffect, useState } from \"react\";\nimport { AI_MODELS_CHANNEL, type AiModel } from \"../../common/ai-models\";\nimport { AiPreferencesStore } from \"../../common/store/ai-preferences-store\";\nimport { AiProviderIcon } from \"../ai-provider-icon\";\nimport { AiShortcutsPreferences } from \"./ai-shortcuts-preferences\";\n\nconst { Select, Switch } = Renderer.Component;\n\nexport const AiPreferences = observer(() => {\n const preferences = AiPreferencesStore.getInstanceOrCreate<AiPreferencesStore>();\n const [catalog, setCatalog] = useState<{ provider: string; models: AiModel[] }>({ provider: \"\", models: [] });\n const models = catalog.provider === preferences.provider ? catalog.models : [];\n useEffect(() => {\n if (!preferences.enabled) {\n setCatalog({ provider: preferences.provider, models: [] });\n return;\n }\n setCatalog({ provider: preferences.provider, models: [] });\n const provider = preferences.provider;\n let active = true;\n void ipcRenderer\n .invoke(AI_MODELS_CHANNEL, preferences.provider)\n .then((value: AiModel[]) => {\n if (active && Array.isArray(value)) setCatalog({ provider, models: value });\n })\n .catch(() => {});\n return () => {\n active = false;\n };\n }, [preferences.enabled, preferences.provider]);\n const isClaude = preferences.provider === \"claude\";\n const providerLabel = isClaude ? \"Claude\" : \"Codex\";\n const currentModel = isClaude ? preferences.claudeModel : preferences.model;\n const selectedModel = JSON.stringify([currentModel, isClaude ? \"\" : preferences.reasoningEffort]);\n const modelOptions = [\n { value: JSON.stringify([\"\", \"\"]), label: `${providerLabel} default` },\n ...models.flatMap((model) => [\n { value: JSON.stringify([model.id, \"\"]), label: `${model.label} · Default` },\n ...model.reasoningEfforts.map((effort) => ({\n value: JSON.stringify([model.id, effort]),\n label: `${model.label} · ${effort}`,\n })),\n ]),\n ];\n if (!modelOptions.some((option) => option.value === selectedModel)) {\n modelOptions.push({\n value: selectedModel,\n label: `${currentModel || `${providerLabel} default`} · ${isClaude ? \"Default\" : preferences.reasoningEffort || \"Default\"}`,\n });\n }\n const controlStyle = { width: 220, maxWidth: \"100%\", flexShrink: 0 };\n const rowStyle = { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 20 };\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 20 }}>\n <style>{`.power-ai-section-title { color: var(--textColorAccent); } .power-ai-prompt { width: 100%; min-height: 90px; max-height: 260px; field-sizing: content; overflow-y: auto; margin-top: 8px; box-sizing: border-box; padding: 12px; border: 1px solid var(--borderFaintColor, #666); border-radius: 8px; background: var(--mainBackground, #242424); color: var(--textColorPrimary, white); font: inherit; resize: none; } .power-ai-prompt:focus { border-color: var(--primary, #5896ff); outline: 1px solid var(--primary, #5896ff); }`}</style>\n <div>\n <Switch\n checked={preferences.enabled}\n onChange={(value) => {\n preferences.enabled = value;\n }}\n >\n Enable AI features\n </Switch>\n <div className=\"power-settings-hint\">\n Turn off to hide the chat, AI button and Ask about cluster, and stop active requests. Settings and\n conversations are kept.\n </div>\n </div>\n <div className=\"power-settings-row\" style={rowStyle}>\n <label htmlFor=\"power-ai-cli\">CLI</label>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-cli\"\n value={preferences.provider}\n options={[\n { value: \"codex\", label: \"Codex\" },\n { value: \"claude\", label: \"Claude\" },\n ]}\n formatOptionLabel={(option) => (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}>\n <AiProviderIcon provider={option.value === \"claude\" ? \"claude\" : \"codex\"} />\n {option.label}\n </span>\n )}\n onChange={(option) => {\n if (option?.value === \"codex\" || option?.value === \"claude\") preferences.provider = option.value;\n }}\n isDisabled={!preferences.enabled}\n isClearable={false}\n isSearchable={false}\n />\n </div>\n </div>\n <div className=\"power-settings-row\" style={rowStyle}>\n <div>\n <label htmlFor=\"power-ai-model\">Model</label>\n <div className=\"power-settings-hint\">\n {isClaude\n ? \"Native Claude model aliases. Availability depends on your CLI account.\"\n : \"Models and reasoning effort from the local Codex catalog.\"}\n </div>\n </div>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-model\"\n value={selectedModel}\n options={modelOptions}\n isDisabled={!preferences.enabled}\n isClearable={false}\n isSearchable={true}\n onChange={(option) => {\n if (!option) return;\n const [model, effort] = JSON.parse(option.value);\n if (isClaude) preferences.claudeModel = model;\n else {\n preferences.model = model;\n preferences.reasoningEffort = effort;\n }\n }}\n />\n </div>\n </div>\n {!isClaude && (\n <div className=\"power-settings-row\" style={rowStyle}>\n <label htmlFor=\"power-ai-speed\">Speed</label>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-speed\"\n value={preferences.speed}\n options={[\n { value: \"default\", label: \"Default\" },\n { value: \"fast\", label: \"Fast\" },\n ]}\n isDisabled={!preferences.enabled}\n isClearable={false}\n isSearchable={false}\n onChange={(option) => {\n if (option) preferences.speed = option.value as \"default\" | \"fast\";\n }}\n />\n </div>\n </div>\n )}\n <div className=\"power-settings-row\" style={rowStyle}>\n <div>\n <label htmlFor=\"power-ai-font-size\">Chat font size</label>\n <div className=\"power-settings-hint\">Messages and input, in pixels (10–24).</div>\n </div>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-font-size\"\n value={preferences.chatFontSize}\n options={Array.from({ length: 15 }, (_, index) => ({ value: index + 10, label: `${index + 10} px` }))}\n isDisabled={!preferences.enabled}\n isSearchable={false}\n isClearable={false}\n onChange={(option) => {\n if (option) preferences.chatFontSize = option.value;\n }}\n />\n </div>\n </div>\n <div>\n <label className=\"power-ai-section-title\" htmlFor=\"power-ai-system-prompt\">\n System prompt\n </label>\n <textarea\n id=\"power-ai-system-prompt\"\n className=\"power-ai-prompt\"\n disabled={!preferences.enabled}\n value={preferences.systemPrompt}\n onChange={(event) => {\n preferences.systemPrompt = event.target.value;\n }}\n />\n </div>\n <div>\n <label className=\"power-ai-section-title\" htmlFor=\"power-ai-cluster-prompt\">\n Cluster prompt\n </label>\n <div className=\"power-settings-hint\">Additional instructions attached to cluster conversations.</div>\n <textarea\n id=\"power-ai-cluster-prompt\"\n className=\"power-ai-prompt\"\n disabled={!preferences.enabled}\n value={preferences.clusterPrompt}\n onChange={(event) => {\n preferences.clusterPrompt = event.target.value;\n }}\n />\n </div>\n <AiShortcutsPreferences disabled={!preferences.enabled} />\n </div>\n );\n});\n"],"mappings":";;;;;;;;;;AASA,IAAM,EAAE,QAAQ,WAAW,mBAAA,SAAS;AAEpC,IAAa,gBAAgB,oCAAA,eAAe;CAC1C,MAAM,cAAc,6BAAA,mBAAmB,oBAAwC;CAC/E,MAAM,CAAC,SAAS,cAAc,+BAAA,SAAkD;EAAE,UAAU;EAAI,QAAQ,CAAC;CAAE,CAAC;CAC5G,MAAM,SAAS,QAAQ,aAAa,YAAY,WAAW,QAAQ,SAAS,CAAC;CAC7E,+BAAA,gBAAgB;EACd,IAAI,CAAC,YAAY,SAAS;GACxB,WAAW;IAAE,UAAU,YAAY;IAAU,QAAQ,CAAC;GAAE,CAAC;GACzD;EACF;EACA,WAAW;GAAE,UAAU,YAAY;GAAU,QAAQ,CAAC;EAAE,CAAC;EACzD,MAAM,WAAW,YAAY;EAC7B,IAAI,SAAS;EACb,SAAK,YACF,OAAO,kBAAA,mBAAmB,YAAY,QAAQ,CAAC,CAC/C,MAAM,UAAqB;GAC1B,IAAI,UAAU,MAAM,QAAQ,KAAK,GAAG,WAAW;IAAE;IAAU,QAAQ;GAAM,CAAC;EAC5E,CAAC,CAAC,CACD,YAAY,CAAC,CAAC;EACjB,aAAa;GACX,SAAS;EACX;CACF,GAAG,CAAC,YAAY,SAAS,YAAY,QAAQ,CAAC;CAC9C,MAAM,WAAW,YAAY,aAAa;CAC1C,MAAM,gBAAgB,WAAW,WAAW;CAC5C,MAAM,eAAe,WAAW,YAAY,cAAc,YAAY;CACtE,MAAM,gBAAgB,KAAK,UAAU,CAAC,cAAc,WAAW,KAAK,YAAY,eAAe,CAAC;CAChG,MAAM,eAAe,CACnB;EAAE,OAAO,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC;EAAG,OAAO,GAAG,cAAc;CAAU,GACrE,GAAG,OAAO,SAAS,UAAU,CAC3B;EAAE,OAAO,KAAK,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC;EAAG,OAAO,GAAG,MAAM,MAAM;CAAY,GAC3E,GAAG,MAAM,iBAAiB,KAAK,YAAY;EACzC,OAAO,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC;EACxC,OAAO,GAAG,MAAM,MAAM,KAAK;CAC7B,EAAE,CACJ,CAAC,CACH;CACA,IAAI,CAAC,aAAa,MAAM,WAAW,OAAO,UAAU,aAAa,GAC/D,aAAa,KAAK;EAChB,OAAO;EACP,OAAO,GAAG,gBAAgB,GAAG,cAAc,UAAU,KAAK,WAAW,YAAY,YAAY,mBAAmB;CAClH,CAAC;CAEH,MAAM,eAAe;EAAE,OAAO;EAAK,UAAU;EAAQ,YAAY;CAAE;CACnE,MAAM,WAAW;EAAE,SAAS;EAAQ,YAAY;EAAU,gBAAgB;EAAiB,KAAK;CAAG;CACnG,OACE,oCAAA,KAAC,OAAD;EAAK,OAAO;GAAE,SAAS;GAAQ,eAAe;GAAU,KAAK;EAAG;YAAhE;GACE,oCAAA,IAAC,SAAD,EAAA,UAAQ,wgBAA+gB,CAAA;GACvhB,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,QAAD;IACE,SAAS,YAAY;IACrB,WAAW,UAAU;KACnB,YAAY,UAAU;IACxB;cACD;GAEO,CAAA,GACR,oCAAA,IAAC,OAAD;IAAK,WAAU;cAAsB;GAGhC,CAAA,CACF,EAAA,CAAA;GACL,oCAAA,KAAC,OAAD;IAAK,WAAU;IAAqB,OAAO;cAA3C,CACE,oCAAA,IAAC,SAAD;KAAO,SAAQ;eAAe;IAAU,CAAA,GACxC,oCAAA,IAAC,OAAD;KAAK,OAAO;eACV,oCAAA,IAAC,QAAD;MACE,IAAG;MACH,OAAO,YAAY;MACnB,SAAS,CACP;OAAE,OAAO;OAAS,OAAO;MAAQ,GACjC;OAAE,OAAO;OAAU,OAAO;MAAS,CACrC;MACA,oBAAoB,WAClB,oCAAA,KAAC,QAAD;OAAM,OAAO;QAAE,SAAS;QAAe,YAAY;QAAU,KAAK;OAAE;iBAApE,CACE,oCAAA,IAAC,yBAAA,gBAAD,EAAgB,UAAU,OAAO,UAAU,WAAW,WAAW,QAAU,CAAA,GAC1E,OAAO,KACJ;;MAER,WAAW,WAAW;OACpB,IAAI,QAAQ,UAAU,WAAW,QAAQ,UAAU,UAAU,YAAY,WAAW,OAAO;MAC7F;MACA,YAAY,CAAC,YAAY;MACzB,aAAa;MACb,cAAc;KACf,CAAA;IACE,CAAA,CACF;;GACL,oCAAA,KAAC,OAAD;IAAK,WAAU;IAAqB,OAAO;cAA3C,CACE,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,SAAD;KAAO,SAAQ;eAAiB;IAAY,CAAA,GAC5C,oCAAA,IAAC,OAAD;KAAK,WAAU;eACZ,WACG,2EACA;IACD,CAAA,CACF,EAAA,CAAA,GACL,oCAAA,IAAC,OAAD;KAAK,OAAO;eACV,oCAAA,IAAC,QAAD;MACE,IAAG;MACH,OAAO;MACP,SAAS;MACT,YAAY,CAAC,YAAY;MACzB,aAAa;MACb,cAAc;MACd,WAAW,WAAW;OACpB,IAAI,CAAC,QAAQ;OACb,MAAM,CAAC,OAAO,UAAU,KAAK,MAAM,OAAO,KAAK;OAC/C,IAAI,UAAU,YAAY,cAAc;YACnC;QACH,YAAY,QAAQ;QACpB,YAAY,kBAAkB;OAChC;MACF;KACD,CAAA;IACE,CAAA,CACF;;GACJ,CAAC,YACA,oCAAA,KAAC,OAAD;IAAK,WAAU;IAAqB,OAAO;cAA3C,CACE,oCAAA,IAAC,SAAD;KAAO,SAAQ;eAAiB;IAAY,CAAA,GAC5C,oCAAA,IAAC,OAAD;KAAK,OAAO;eACV,oCAAA,IAAC,QAAD;MACE,IAAG;MACH,OAAO,YAAY;MACnB,SAAS,CACP;OAAE,OAAO;OAAW,OAAO;MAAU,GACrC;OAAE,OAAO;OAAQ,OAAO;MAAO,CACjC;MACA,YAAY,CAAC,YAAY;MACzB,aAAa;MACb,cAAc;MACd,WAAW,WAAW;OACpB,IAAI,QAAQ,YAAY,QAAQ,OAAO;MACzC;KACD,CAAA;IACE,CAAA,CACF;;GAEP,oCAAA,KAAC,OAAD;IAAK,WAAU;IAAqB,OAAO;cAA3C,CACE,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,SAAD;KAAO,SAAQ;eAAqB;IAAqB,CAAA,GACzD,oCAAA,IAAC,OAAD;KAAK,WAAU;eAAsB;IAA2C,CAAA,CAC7E,EAAA,CAAA,GACL,oCAAA,IAAC,OAAD;KAAK,OAAO;eACV,oCAAA,IAAC,QAAD;MACE,IAAG;MACH,OAAO,YAAY;MACnB,SAAS,MAAM,KAAK,EAAE,QAAQ,GAAG,IAAI,GAAG,WAAW;OAAE,OAAO,QAAQ;OAAI,OAAO,GAAG,QAAQ,GAAG;MAAK,EAAE;MACpG,YAAY,CAAC,YAAY;MACzB,cAAc;MACd,aAAa;MACb,WAAW,WAAW;OACpB,IAAI,QAAQ,YAAY,eAAe,OAAO;MAChD;KACD,CAAA;IACE,CAAA,CACF;;GACL,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,SAAD;IAAO,WAAU;IAAyB,SAAQ;cAAyB;GAEpE,CAAA,GACP,oCAAA,IAAC,YAAD;IACE,IAAG;IACH,WAAU;IACV,UAAU,CAAC,YAAY;IACvB,OAAO,YAAY;IACnB,WAAW,UAAU;KACnB,YAAY,eAAe,MAAM,OAAO;IAC1C;GACD,CAAA,CACE,EAAA,CAAA;GACL,oCAAA,KAAC,OAAD,EAAA,UAAA;IACE,oCAAA,IAAC,SAAD;KAAO,WAAU;KAAyB,SAAQ;eAA0B;IAErE,CAAA;IACP,oCAAA,IAAC,OAAD;KAAK,WAAU;eAAsB;IAA+D,CAAA;IACpG,oCAAA,IAAC,YAAD;KACE,IAAG;KACH,WAAU;KACV,UAAU,CAAC,YAAY;KACvB,OAAO,YAAY;KACnB,WAAW,UAAU;MACnB,YAAY,gBAAgB,MAAM,OAAO;KAC3C;IACD,CAAA;GACE,EAAA,CAAA;GACL,oCAAA,IAAC,iCAAA,wBAAD,EAAwB,UAAU,CAAC,YAAY,QAAU,CAAA;EACtD;;AAET,CAAC"}
|
|
1
|
+
{"version":3,"file":"ai-preferences.js","names":[],"sources":["../../../src/renderer/preferences/ai-preferences.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { ipcRenderer } from \"electron\";\nimport { observer } from \"mobx-react\";\nimport { useEffect, useState } from \"react\";\nimport { AI_MODELS_CHANNEL, type AiModel } from \"../../common/ai-models\";\nimport { AiPreferencesStore } from \"../../common/store/ai-preferences-store\";\nimport { AiProviderIcon } from \"../ai-provider-icon\";\nimport { AiShortcutsPreferences } from \"./ai-shortcuts-preferences\";\n\nconst { Select, Switch } = Renderer.Component;\n\nexport const AiPreferences = observer(() => {\n const preferences = AiPreferencesStore.getInstanceOrCreate<AiPreferencesStore>();\n const [catalog, setCatalog] = useState<{ provider: string; models: AiModel[] }>({ provider: \"\", models: [] });\n const models = catalog.provider === preferences.provider ? catalog.models : [];\n useEffect(() => {\n if (!preferences.enabled) {\n setCatalog({ provider: preferences.provider, models: [] });\n return;\n }\n setCatalog({ provider: preferences.provider, models: [] });\n const provider = preferences.provider;\n let active = true;\n void ipcRenderer\n .invoke(AI_MODELS_CHANNEL, preferences.provider)\n .then((value: AiModel[]) => {\n if (active && Array.isArray(value)) setCatalog({ provider, models: value });\n })\n .catch(() => {});\n return () => {\n active = false;\n };\n }, [preferences.enabled, preferences.provider]);\n const isClaude = preferences.provider === \"claude\";\n const providerLabel = isClaude ? \"Claude\" : \"Codex\";\n const currentModel = isClaude ? preferences.claudeModel : preferences.model;\n const selectedModel = JSON.stringify([currentModel, isClaude ? \"\" : preferences.reasoningEffort]);\n const modelOptions = [\n { value: JSON.stringify([\"\", \"\"]), label: `${providerLabel} default` },\n ...models.flatMap((model) => [\n { value: JSON.stringify([model.id, \"\"]), label: `${model.label} · Default` },\n ...model.reasoningEfforts.map((effort) => ({\n value: JSON.stringify([model.id, effort]),\n label: `${model.label} · ${effort}`,\n })),\n ]),\n ];\n if (!modelOptions.some((option) => option.value === selectedModel)) {\n modelOptions.push({\n value: selectedModel,\n label: `${currentModel || `${providerLabel} default`} · ${isClaude ? \"Default\" : preferences.reasoningEffort || \"Default\"}`,\n });\n }\n const controlStyle = { width: 220, maxWidth: \"100%\", flexShrink: 0 };\n const rowStyle = { display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 20 };\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 20 }}>\n <style>{`.power-ai-section-title { color: var(--textColorAccent); } .power-ai-prompt { width: 100%; min-height: 90px; max-height: 260px; field-sizing: content; overflow-y: auto; margin-top: 8px; box-sizing: border-box; padding: 12px; border: 1px solid var(--borderFaintColor, #666); border-radius: 8px; background: var(--mainBackground, #242424); color: var(--textColorPrimary, white); font: inherit; resize: none; } .power-ai-prompt:focus { border-color: var(--primary, #5896ff); outline: 1px solid var(--primary, #5896ff); }`}</style>\n <div>\n <Switch\n checked={preferences.enabled}\n onChange={(value) => {\n preferences.enabled = value;\n }}\n >\n Enable AI features\n </Switch>\n <div className=\"power-settings-hint\">\n Turn off to hide the chat, AI button and Ask about cluster, and stop active requests. Settings and\n conversations are kept.\n </div>\n </div>\n <div className=\"power-settings-row\" style={rowStyle}>\n <label htmlFor=\"power-ai-cli\">CLI</label>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-cli\"\n value={preferences.provider}\n options={[\n { value: \"codex\", label: \"Codex\" },\n { value: \"claude\", label: \"Claude\" },\n ]}\n formatOptionLabel={(option) => (\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}>\n <AiProviderIcon provider={option.value === \"claude\" ? \"claude\" : \"codex\"} />\n {option.label}\n </span>\n )}\n onChange={(option) => {\n if (option?.value === \"codex\" || option?.value === \"claude\") preferences.provider = option.value;\n }}\n isDisabled={!preferences.enabled}\n isClearable={false}\n isSearchable={false}\n />\n </div>\n </div>\n <div className=\"power-settings-row\" style={rowStyle}>\n <div>\n <label htmlFor=\"power-ai-model\">Model</label>\n <div className=\"power-settings-hint\">\n {isClaude\n ? \"Native Claude model aliases. Availability depends on your CLI account.\"\n : \"Models and reasoning effort from the local Codex catalog.\"}\n </div>\n </div>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-model\"\n value={selectedModel}\n options={modelOptions}\n isDisabled={!preferences.enabled}\n isClearable={false}\n isSearchable={true}\n onChange={(option) => {\n if (!option) return;\n const [model, effort] = JSON.parse(option.value);\n if (isClaude) preferences.claudeModel = model;\n else {\n preferences.model = model;\n preferences.reasoningEffort = effort;\n }\n }}\n />\n </div>\n </div>\n <div className=\"power-settings-row\" style={rowStyle}>\n <div>\n <label htmlFor=\"power-ai-speed\">Speed</label>\n {isClaude && (\n <div className=\"power-settings-hint\">\n Fast mode applies to Opus models. Availability depends on your CLI account.\n </div>\n )}\n </div>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-speed\"\n value={preferences.speed}\n options={[\n { value: \"default\", label: \"Default\" },\n { value: \"fast\", label: \"Fast\" },\n ]}\n isDisabled={!preferences.enabled}\n isClearable={false}\n isSearchable={false}\n onChange={(option) => {\n if (option) preferences.speed = option.value as \"default\" | \"fast\";\n }}\n />\n </div>\n </div>\n <div className=\"power-settings-row\" style={rowStyle}>\n <div>\n <label htmlFor=\"power-ai-font-size\">Chat font size</label>\n <div className=\"power-settings-hint\">Messages and input, in pixels (10–24).</div>\n </div>\n <div style={controlStyle}>\n <Select\n id=\"power-ai-font-size\"\n value={preferences.chatFontSize}\n options={Array.from({ length: 15 }, (_, index) => ({ value: index + 10, label: `${index + 10} px` }))}\n isDisabled={!preferences.enabled}\n isSearchable={false}\n isClearable={false}\n onChange={(option) => {\n if (option) preferences.chatFontSize = option.value;\n }}\n />\n </div>\n </div>\n <div>\n <label className=\"power-ai-section-title\" htmlFor=\"power-ai-system-prompt\">\n System prompt\n </label>\n <textarea\n id=\"power-ai-system-prompt\"\n className=\"power-ai-prompt\"\n disabled={!preferences.enabled}\n value={preferences.systemPrompt}\n onChange={(event) => {\n preferences.systemPrompt = event.target.value;\n }}\n />\n </div>\n <div>\n <label className=\"power-ai-section-title\" htmlFor=\"power-ai-cluster-prompt\">\n Cluster prompt\n </label>\n <div className=\"power-settings-hint\">Additional instructions attached to cluster conversations.</div>\n <textarea\n id=\"power-ai-cluster-prompt\"\n className=\"power-ai-prompt\"\n disabled={!preferences.enabled}\n value={preferences.clusterPrompt}\n onChange={(event) => {\n preferences.clusterPrompt = event.target.value;\n }}\n />\n </div>\n <AiShortcutsPreferences disabled={!preferences.enabled} />\n </div>\n );\n});\n"],"mappings":"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"}
|
|
@@ -136,14 +136,13 @@ var MonitoringPreferences = require__global_external_mobx_react.observer(() => {
|
|
|
136
136
|
children: status?.error ?? (status?.available ? `${status.samples.toLocaleString()} metric buckets · 7-day retention` : "Checking history storage…")
|
|
137
137
|
})
|
|
138
138
|
]
|
|
139
|
-
}), /* @__PURE__ */ require_jsx_runtime.
|
|
139
|
+
}), /* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Button, {
|
|
140
140
|
tooltip: "Delete locally collected metric history without changing other settings",
|
|
141
141
|
style: {
|
|
142
142
|
flexShrink: 0,
|
|
143
143
|
display: "inline-flex",
|
|
144
144
|
alignItems: "center",
|
|
145
145
|
justifyContent: "center",
|
|
146
|
-
gap: 6,
|
|
147
146
|
height: 30,
|
|
148
147
|
padding: "0 10px",
|
|
149
148
|
fontSize: 12,
|
|
@@ -162,10 +161,19 @@ var MonitoringPreferences = require__global_external_mobx_react.observer(() => {
|
|
|
162
161
|
error: "Unable to clear local history. Try again."
|
|
163
162
|
})));
|
|
164
163
|
},
|
|
165
|
-
children:
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
164
|
+
children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
|
|
165
|
+
style: {
|
|
166
|
+
display: "inline-flex",
|
|
167
|
+
alignItems: "center",
|
|
168
|
+
justifyContent: "center",
|
|
169
|
+
gap: 6
|
|
170
|
+
},
|
|
171
|
+
children: [/* @__PURE__ */ require_jsx_runtime.jsx(require_extensions.Renderer.Component.Icon, {
|
|
172
|
+
material: "delete_outline",
|
|
173
|
+
size: 14,
|
|
174
|
+
"aria-hidden": "true"
|
|
175
|
+
}), /* @__PURE__ */ require_jsx_runtime.jsx("span", { children: "Clear" })]
|
|
176
|
+
})
|
|
169
177
|
})]
|
|
170
178
|
})
|
|
171
179
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitoring-preferences.js","names":[],"sources":["../../../src/renderer/preferences/monitoring-preferences.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { observer } from \"mobx-react\";\nimport { useEffect, useState } from \"react\";\nimport { HISTORY_MAX_BYTES, type HistoryStatus } from \"../../common/monitoring-history\";\nimport { MonitoringPreferencesStore } from \"../../common/store/monitoring-preferences-store\";\nimport { monitoringHistory } from \"../monitoring-history\";\nimport { NativeTooltip } from \"../native-tooltip\";\n\nexport const MonitoringPreferences = observer(() => {\n const preferences = MonitoringPreferencesStore.getInstanceOrCreate<MonitoringPreferencesStore>();\n const [status, setStatus] = useState<HistoryStatus>();\n const refresh = () => {\n void monitoringHistory\n .status()\n .then(setStatus)\n .catch(() =>\n setStatus({\n available: false,\n enabled: preferences.historyEnabled,\n bytes: 0,\n samples: 0,\n error: \"History service unavailable\",\n }),\n );\n };\n useEffect(refresh, [preferences.historyEnabled]);\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 20 }}>\n <div>\n <Renderer.Component.Switch\n checked={preferences.diagnosticsVisible}\n onChange={(value) => {\n preferences.diagnosticsVisible = value;\n }}\n >\n Show Diagnostics in sidebar\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">Resource consumers, application events and Pending diagnostics.</div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.relationshipsVisible}\n onChange={(value) => {\n preferences.relationshipsVisible = value;\n }}\n >\n Show Relationships in sidebar\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">\n Focused resource connections from API evidence, with links to related objects.\n </div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.resourceSearchEnabled}\n onChange={(value) => {\n preferences.resourceSearchEnabled = value;\n }}\n >\n Enable resource search (Shift–Shift)\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">\n Search resources with Shift–Shift. Turning this off stops keyboard search and background indexing.\n </div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.enabled}\n onChange={(value) => {\n preferences.enabled = value;\n }}\n >\n Metrics-server monitoring\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">\n CPU/RAM charts for clusters, nodes and pods. Keeps 30 minutes of live samples.\n </div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.historyEnabled}\n onChange={(value) => {\n preferences.historyEnabled = value;\n }}\n >\n Keep local history\n </Renderer.Component.Switch>\n <NativeTooltip title=\"SQLite storage. Collects while the cluster view is active. Resolution: 30 seconds for 2 hours, 5 minutes for 24 hours, 30 minutes for 7 days. Disabling preserves saved history.\">\n <div className=\"power-settings-hint\">Up to 7 days, limited to 100 MiB.</div>\n </NativeTooltip>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12 }}>\n <div style={{ flex: 1, minWidth: 0 }} role=\"status\">\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"baseline\", gap: 12 }}>\n <span>Local storage</span>\n <span style={{ fontVariantNumeric: \"tabular-nums\", color: \"var(--textColorSecondary)\" }}>\n {status?.available\n ? `${(status.bytes / 1024 / 1024).toFixed(2)} / ${HISTORY_MAX_BYTES / 1024 / 1024} MiB`\n : \"— / 100 MiB\"}\n </span>\n </div>\n {status?.available && (\n <div\n role=\"progressbar\"\n aria-label=\"Local history storage\"\n aria-valuemin={0}\n aria-valuemax={HISTORY_MAX_BYTES}\n aria-valuenow={status.bytes}\n aria-valuetext={`${(status.bytes / 1024 / 1024).toFixed(2)} of 100 MiB`}\n style={{ height: 4, marginTop: 8, borderRadius: 2, overflow: \"hidden\", background: \"var(--borderColor)\" }}\n >\n <div\n style={{\n height: \"100%\",\n width: `${Math.min(100, Math.max(0, (status.bytes / HISTORY_MAX_BYTES) * 100))}%`,\n background: \"var(--primary)\",\n transition: \"width 180ms ease\",\n }}\n />\n </div>\n )}\n <div className=\"power-settings-hint\" style={{ marginTop: 6 }}>\n {status?.error ??\n (status?.available\n ? `${status.samples.toLocaleString()} metric buckets · 7-day retention`\n : \"Checking history storage…\")}\n </div>\n </div>\n <Renderer.Component.Button\n tooltip=\"Delete locally collected metric history without changing other settings\"\n style={{\n flexShrink: 0,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n height: 30,\n padding: \"0 10px\",\n fontSize: 12,\n lineHeight: \"16px\",\n border: \"1px solid var(--borderFaintColor)\",\n borderRadius: 6,\n background: \"var(--contentColor)\",\n color: \"var(--textColorSecondary)\",\n }}\n onClick={() => {\n void monitoringHistory\n .clear()\n .then(refresh)\n .catch(() =>\n setStatus((previous) => ({\n available: previous?.available ?? false,\n enabled: preferences.historyEnabled,\n bytes: previous?.bytes ?? 0,\n samples: previous?.samples ?? 0,\n error: \"Unable to clear local history. Try again.\",\n })),\n );\n }}\n >\n <Renderer.Component.Icon material=\"delete_outline\" size={14} />\n <span>Clear</span>\n </Renderer.Component.Button>\n </div>\n </div>\n );\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitoring-preferences.js","names":[],"sources":["../../../src/renderer/preferences/monitoring-preferences.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\nimport { observer } from \"mobx-react\";\nimport { useEffect, useState } from \"react\";\nimport { HISTORY_MAX_BYTES, type HistoryStatus } from \"../../common/monitoring-history\";\nimport { MonitoringPreferencesStore } from \"../../common/store/monitoring-preferences-store\";\nimport { monitoringHistory } from \"../monitoring-history\";\nimport { NativeTooltip } from \"../native-tooltip\";\n\nexport const MonitoringPreferences = observer(() => {\n const preferences = MonitoringPreferencesStore.getInstanceOrCreate<MonitoringPreferencesStore>();\n const [status, setStatus] = useState<HistoryStatus>();\n const refresh = () => {\n void monitoringHistory\n .status()\n .then(setStatus)\n .catch(() =>\n setStatus({\n available: false,\n enabled: preferences.historyEnabled,\n bytes: 0,\n samples: 0,\n error: \"History service unavailable\",\n }),\n );\n };\n useEffect(refresh, [preferences.historyEnabled]);\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 20 }}>\n <div>\n <Renderer.Component.Switch\n checked={preferences.diagnosticsVisible}\n onChange={(value) => {\n preferences.diagnosticsVisible = value;\n }}\n >\n Show Diagnostics in sidebar\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">Resource consumers, application events and Pending diagnostics.</div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.relationshipsVisible}\n onChange={(value) => {\n preferences.relationshipsVisible = value;\n }}\n >\n Show Relationships in sidebar\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">\n Focused resource connections from API evidence, with links to related objects.\n </div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.resourceSearchEnabled}\n onChange={(value) => {\n preferences.resourceSearchEnabled = value;\n }}\n >\n Enable resource search (Shift–Shift)\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">\n Search resources with Shift–Shift. Turning this off stops keyboard search and background indexing.\n </div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.enabled}\n onChange={(value) => {\n preferences.enabled = value;\n }}\n >\n Metrics-server monitoring\n </Renderer.Component.Switch>\n <div className=\"power-settings-hint\">\n CPU/RAM charts for clusters, nodes and pods. Keeps 30 minutes of live samples.\n </div>\n </div>\n <div>\n <Renderer.Component.Switch\n checked={preferences.historyEnabled}\n onChange={(value) => {\n preferences.historyEnabled = value;\n }}\n >\n Keep local history\n </Renderer.Component.Switch>\n <NativeTooltip title=\"SQLite storage. Collects while the cluster view is active. Resolution: 30 seconds for 2 hours, 5 minutes for 24 hours, 30 minutes for 7 days. Disabling preserves saved history.\">\n <div className=\"power-settings-hint\">Up to 7 days, limited to 100 MiB.</div>\n </NativeTooltip>\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 12 }}>\n <div style={{ flex: 1, minWidth: 0 }} role=\"status\">\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"baseline\", gap: 12 }}>\n <span>Local storage</span>\n <span style={{ fontVariantNumeric: \"tabular-nums\", color: \"var(--textColorSecondary)\" }}>\n {status?.available\n ? `${(status.bytes / 1024 / 1024).toFixed(2)} / ${HISTORY_MAX_BYTES / 1024 / 1024} MiB`\n : \"— / 100 MiB\"}\n </span>\n </div>\n {status?.available && (\n <div\n role=\"progressbar\"\n aria-label=\"Local history storage\"\n aria-valuemin={0}\n aria-valuemax={HISTORY_MAX_BYTES}\n aria-valuenow={status.bytes}\n aria-valuetext={`${(status.bytes / 1024 / 1024).toFixed(2)} of 100 MiB`}\n style={{ height: 4, marginTop: 8, borderRadius: 2, overflow: \"hidden\", background: \"var(--borderColor)\" }}\n >\n <div\n style={{\n height: \"100%\",\n width: `${Math.min(100, Math.max(0, (status.bytes / HISTORY_MAX_BYTES) * 100))}%`,\n background: \"var(--primary)\",\n transition: \"width 180ms ease\",\n }}\n />\n </div>\n )}\n <div className=\"power-settings-hint\" style={{ marginTop: 6 }}>\n {status?.error ??\n (status?.available\n ? `${status.samples.toLocaleString()} metric buckets · 7-day retention`\n : \"Checking history storage…\")}\n </div>\n </div>\n <Renderer.Component.Button\n tooltip=\"Delete locally collected metric history without changing other settings\"\n style={{\n flexShrink: 0,\n display: \"inline-flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: 30,\n padding: \"0 10px\",\n fontSize: 12,\n lineHeight: \"16px\",\n border: \"1px solid var(--borderFaintColor)\",\n borderRadius: 6,\n background: \"var(--contentColor)\",\n color: \"var(--textColorSecondary)\",\n }}\n onClick={() => {\n void monitoringHistory\n .clear()\n .then(refresh)\n .catch(() =>\n setStatus((previous) => ({\n available: previous?.available ?? false,\n enabled: preferences.historyEnabled,\n bytes: previous?.bytes ?? 0,\n samples: previous?.samples ?? 0,\n error: \"Unable to clear local history. Try again.\",\n })),\n );\n }}\n >\n <span style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\", gap: 6 }}>\n <Renderer.Component.Icon material=\"delete_outline\" size={14} aria-hidden=\"true\" />\n <span>Clear</span>\n </span>\n </Renderer.Component.Button>\n </div>\n </div>\n );\n});\n"],"mappings":";;;;;;;;;AAQA,IAAa,wBAAwB,oCAAA,eAAe;CAClD,MAAM,cAAc,qCAAA,2BAA2B,oBAAgD;CAC/F,MAAM,CAAC,QAAQ,aAAa,+BAAA,SAAwB;CACpD,MAAM,gBAAgB;EACpB,6BAAK,kBACF,OAAO,CAAC,CACR,KAAK,SAAS,CAAC,CACf,YACC,UAAU;GACR,WAAW;GACX,SAAS,YAAY;GACrB,OAAO;GACP,SAAS;GACT,OAAO;EACT,CAAC,CACH;CACJ;CACA,+BAAA,UAAU,SAAS,CAAC,YAAY,cAAc,CAAC;CAC/C,OACE,oCAAA,KAAC,OAAD;EAAK,OAAO;GAAE,SAAS;GAAQ,eAAe;GAAU,KAAK;EAAG;YAAhE;GACE,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,mBAAA,SAAS,UAAU,QAApB;IACE,SAAS,YAAY;IACrB,WAAW,UAAU;KACnB,YAAY,qBAAqB;IACnC;cACD;GAE0B,CAAA,GAC3B,oCAAA,IAAC,OAAD;IAAK,WAAU;cAAsB;GAAoE,CAAA,CACtG,EAAA,CAAA;GACL,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,mBAAA,SAAS,UAAU,QAApB;IACE,SAAS,YAAY;IACrB,WAAW,UAAU;KACnB,YAAY,uBAAuB;IACrC;cACD;GAE0B,CAAA,GAC3B,oCAAA,IAAC,OAAD;IAAK,WAAU;cAAsB;GAEhC,CAAA,CACF,EAAA,CAAA;GACL,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,mBAAA,SAAS,UAAU,QAApB;IACE,SAAS,YAAY;IACrB,WAAW,UAAU;KACnB,YAAY,wBAAwB;IACtC;cACD;GAE0B,CAAA,GAC3B,oCAAA,IAAC,OAAD;IAAK,WAAU;cAAsB;GAEhC,CAAA,CACF,EAAA,CAAA;GACL,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,mBAAA,SAAS,UAAU,QAApB;IACE,SAAS,YAAY;IACrB,WAAW,UAAU;KACnB,YAAY,UAAU;IACxB;cACD;GAE0B,CAAA,GAC3B,oCAAA,IAAC,OAAD;IAAK,WAAU;cAAsB;GAEhC,CAAA,CACF,EAAA,CAAA;GACL,oCAAA,KAAC,OAAD,EAAA,UAAA,CACE,oCAAA,IAAC,mBAAA,SAAS,UAAU,QAApB;IACE,SAAS,YAAY;IACrB,WAAW,UAAU;KACnB,YAAY,iBAAiB;IAC/B;cACD;GAE0B,CAAA,GAC3B,oCAAA,IAAC,uBAAA,eAAD;IAAe,OAAM;cACnB,oCAAA,IAAC,OAAD;KAAK,WAAU;eAAsB;IAAsC,CAAA;GAC9D,CAAA,CACZ,EAAA,CAAA;GACL,oCAAA,KAAC,OAAD;IAAK,OAAO;KAAE,SAAS;KAAQ,YAAY;KAAU,gBAAgB;KAAiB,KAAK;IAAG;cAA9F,CACE,oCAAA,KAAC,OAAD;KAAK,OAAO;MAAE,MAAM;MAAG,UAAU;KAAE;KAAG,MAAK;eAA3C;MACE,oCAAA,KAAC,OAAD;OAAK,OAAO;QAAE,SAAS;QAAQ,gBAAgB;QAAiB,YAAY;QAAY,KAAK;OAAG;iBAAhG,CACE,oCAAA,IAAC,QAAD,EAAA,UAAM,gBAAmB,CAAA,GACzB,oCAAA,IAAC,QAAD;QAAM,OAAO;SAAE,oBAAoB;SAAgB,OAAO;QAA4B;kBACnF,QAAQ,YACL,IAAI,OAAO,QAAQ,OAAO,KAAA,CAAM,QAAQ,CAAC,EAAE,KAAK,2BAAA,oBAAoB,OAAO,KAAK,QAChF;OACA,CAAA,CACH;;MACJ,QAAQ,aACP,oCAAA,IAAC,OAAD;OACE,MAAK;OACL,cAAW;OACX,iBAAe;OACf,iBAAA;OACA,iBAAe,OAAO;OACtB,kBAAgB,IAAI,OAAO,QAAQ,OAAO,KAAA,CAAM,QAAQ,CAAC,EAAE;OAC3D,OAAO;QAAE,QAAQ;QAAG,WAAW;QAAG,cAAc;QAAG,UAAU;QAAU,YAAY;OAAqB;iBAExG,oCAAA,IAAC,OAAD,EACE,OAAO;QACL,QAAQ;QACR,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,OAAO,QAAA,YAA6B,GAAG,CAAC,EAAE;QAC/E,YAAY;QACZ,YAAY;OACd,EACD,CAAA;MACE,CAAA;MAEP,oCAAA,IAAC,OAAD;OAAK,WAAU;OAAsB,OAAO,EAAE,WAAW,EAAE;iBACxD,QAAQ,UACN,QAAQ,YACL,GAAG,OAAO,QAAQ,eAAe,EAAE,qCACnC;MACH,CAAA;KACF;QACL,oCAAA,IAAC,mBAAA,SAAS,UAAU,QAApB;KACE,SAAQ;KACR,OAAO;MACL,YAAY;MACZ,SAAS;MACT,YAAY;MACZ,gBAAgB;MAChB,QAAQ;MACR,SAAS;MACT,UAAU;MACV,YAAY;MACZ,QAAQ;MACR,cAAc;MACd,YAAY;MACZ,OAAO;KACT;KACA,eAAe;MACb,6BAAK,kBACF,MAAM,CAAC,CACP,KAAK,OAAO,CAAC,CACb,YACC,WAAW,cAAc;OACvB,WAAW,UAAU,aAAa;OAClC,SAAS,YAAY;OACrB,OAAO,UAAU,SAAS;OAC1B,SAAS,UAAU,WAAW;OAC9B,OAAO;MACT,EAAE,CACJ;KACJ;eAEA,oCAAA,KAAC,QAAD;MAAM,OAAO;OAAE,SAAS;OAAe,YAAY;OAAU,gBAAgB;OAAU,KAAK;MAAE;gBAA9F,CACE,oCAAA,IAAC,mBAAA,SAAS,UAAU,MAApB;OAAyB,UAAS;OAAiB,MAAM;OAAI,eAAY;MAAQ,CAAA,GACjF,oCAAA,IAAC,QAAD,EAAA,UAAM,QAAW,CAAA,CACb;;IACmB,CAAA,CACxB;;EACF;;AAET,CAAC"}
|