@64mb/freelens-power 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/README.md +5 -4
  2. package/THIRD_PARTY_LICENSES +1707 -0
  3. package/out/main/ai.js +63 -23
  4. package/out/main/ai.js.map +1 -1
  5. package/out/main/cluster-icons-catalog.js +28 -0
  6. package/out/main/cluster-icons-catalog.js.map +1 -0
  7. package/out/main/cluster-icons.js +125 -0
  8. package/out/main/cluster-icons.js.map +1 -0
  9. package/out/main/common/ai-terminal-context.js +51 -0
  10. package/out/main/common/ai-terminal-context.js.map +1 -0
  11. package/out/main/common/ai.js.map +1 -1
  12. package/out/main/common/cluster-icon-ipc.js +6 -0
  13. package/out/main/common/cluster-icon-ipc.js.map +1 -0
  14. package/out/main/common/cluster-icons.js +121 -0
  15. package/out/main/common/cluster-icons.js.map +1 -0
  16. package/out/main/common/dashboard.js +2 -1
  17. package/out/main/common/dashboard.js.map +1 -1
  18. package/out/main/common/settings-export.js +4 -2
  19. package/out/main/common/settings-export.js.map +1 -1
  20. package/out/main/common/store/cluster-icons-store.js +32 -0
  21. package/out/main/common/store/cluster-icons-store.js.map +1 -0
  22. package/out/main/common/store/dashboard-preferences-store.js +2 -1
  23. package/out/main/common/store/dashboard-preferences-store.js.map +1 -1
  24. package/out/main/common/store/monitoring-preferences-store.js +5 -0
  25. package/out/main/common/store/monitoring-preferences-store.js.map +1 -1
  26. package/out/main/dashboard-views.js +20 -10
  27. package/out/main/dashboard-views.js.map +1 -1
  28. package/out/main/diagnostics-menu-order.js +57 -0
  29. package/out/main/diagnostics-menu-order.js.map +1 -0
  30. package/out/main/index.js +9 -1
  31. package/out/main/index.js.map +1 -1
  32. package/out/main/monitoring-history.js +13 -3
  33. package/out/main/monitoring-history.js.map +1 -1
  34. package/out/renderer/_virtual/_global-external_react-dom.js +2 -1
  35. package/out/renderer/_virtual/_global-external_react.js +10 -5
  36. package/out/renderer/_virtual/_rolldown/runtime.js +22 -0
  37. package/out/renderer/ai-terminal-context.js +200 -0
  38. package/out/renderer/ai-terminal-context.js.map +1 -0
  39. package/out/renderer/ai.js +90 -9
  40. package/out/renderer/ai.js.map +1 -1
  41. package/out/renderer/appearance.js +1 -0
  42. package/out/renderer/appearance.js.map +1 -1
  43. package/out/renderer/cluster-icon-colors.js +188 -0
  44. package/out/renderer/cluster-icon-colors.js.map +1 -0
  45. package/out/renderer/cluster-icons.js +304 -0
  46. package/out/renderer/cluster-icons.js.map +1 -0
  47. package/out/renderer/dashboard.js +51 -14
  48. package/out/renderer/dashboard.js.map +1 -1
  49. package/out/renderer/details/secret-certificate-details.js +9 -2
  50. package/out/renderer/details/secret-certificate-details.js.map +1 -1
  51. package/out/renderer/diagnostics.css.js +39 -0
  52. package/out/renderer/diagnostics.css.js.map +1 -0
  53. package/out/renderer/diagnostics.js +796 -343
  54. package/out/renderer/diagnostics.js.map +1 -1
  55. package/out/renderer/index.js +9 -4
  56. package/out/renderer/index.js.map +1 -1
  57. package/out/renderer/monitoring-details-chart.js +42 -0
  58. package/out/renderer/monitoring-details-chart.js.map +1 -0
  59. package/out/renderer/monitoring-history-collection.js +2 -18
  60. package/out/renderer/monitoring-history-collection.js.map +1 -1
  61. package/out/renderer/monitoring-history-view.js +111 -34
  62. package/out/renderer/monitoring-history-view.js.map +1 -1
  63. package/out/renderer/monitoring.js +68 -27
  64. package/out/renderer/monitoring.js.map +1 -1
  65. package/out/renderer/node-monitoring.js +23 -12
  66. package/out/renderer/node-monitoring.js.map +1 -1
  67. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +10 -0
  68. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js.map +1 -0
  69. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +8 -0
  70. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js.map +1 -0
  71. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js +9 -0
  72. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js.map +1 -0
  73. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +9 -0
  74. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +1 -0
  75. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/classCallCheck.js +8 -0
  76. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/classCallCheck.js.map +1 -0
  77. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/createClass.js +15 -0
  78. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/createClass.js.map +1 -0
  79. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/createSuper.js +19 -0
  80. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/createSuper.js.map +1 -0
  81. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/defineProperty.js +14 -0
  82. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/defineProperty.js.map +1 -0
  83. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/extends.js +19 -0
  84. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -0
  85. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js +15 -0
  86. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js.map +1 -0
  87. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/inherits.js +14 -0
  88. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/inherits.js.map +1 -0
  89. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js +18 -0
  90. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js.map +1 -0
  91. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +8 -0
  92. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/iterableToArray.js.map +1 -0
  93. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js +26 -0
  94. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js.map +1 -0
  95. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +8 -0
  96. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js.map +1 -0
  97. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +8 -0
  98. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js.map +1 -0
  99. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/objectSpread2.js +27 -0
  100. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/objectSpread2.js.map +1 -0
  101. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +15 -0
  102. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js.map +1 -0
  103. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +14 -0
  104. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -0
  105. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js +12 -0
  106. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js.map +1 -0
  107. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +15 -0
  108. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -0
  109. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/slicedToArray.js +12 -0
  110. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/slicedToArray.js.map +1 -0
  111. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js +8 -0
  112. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js.map +1 -0
  113. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +12 -0
  114. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js.map +1 -0
  115. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +16 -0
  116. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -0
  117. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +11 -0
  118. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +1 -0
  119. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/typeof.js +18 -0
  120. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/typeof.js.map +1 -0
  121. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +13 -0
  122. package/out/renderer/node_modules/.pnpm/@babel_runtime@7.27.6/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +1 -0
  123. package/out/renderer/node_modules/.pnpm/@emotion_cache@11.14.0/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js +237 -0
  124. package/out/renderer/node_modules/.pnpm/@emotion_cache@11.14.0/node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js.map +1 -0
  125. package/out/renderer/node_modules/.pnpm/@emotion_hash@0.9.2/node_modules/@emotion/hash/dist/emotion-hash.esm.js +25 -0
  126. package/out/renderer/node_modules/.pnpm/@emotion_hash@0.9.2/node_modules/@emotion/hash/dist/emotion-hash.esm.js.map +1 -0
  127. package/out/renderer/node_modules/.pnpm/@emotion_memoize@0.9.0/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js +12 -0
  128. package/out/renderer/node_modules/.pnpm/@emotion_memoize@0.9.0/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
  129. package/out/renderer/node_modules/.pnpm/@emotion_react@11.14.0_@types_react@17.0.93_react@17.0.2/node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js +58 -0
  130. package/out/renderer/node_modules/.pnpm/@emotion_react@11.14.0_@types_react@17.0.93_react@17.0.2/node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js.map +1 -0
  131. package/out/renderer/node_modules/.pnpm/@emotion_react@11.14.0_@types_react@17.0.93_react@17.0.2/node_modules/@emotion/react/dist/emotion-react.browser.esm.js +54 -0
  132. package/out/renderer/node_modules/.pnpm/@emotion_react@11.14.0_@types_react@17.0.93_react@17.0.2/node_modules/@emotion/react/dist/emotion-react.browser.esm.js.map +1 -0
  133. package/out/renderer/node_modules/.pnpm/@emotion_serialize@1.3.3/node_modules/@emotion/serialize/dist/emotion-serialize.esm.js +133 -0
  134. package/out/renderer/node_modules/.pnpm/@emotion_serialize@1.3.3/node_modules/@emotion/serialize/dist/emotion-serialize.esm.js.map +1 -0
  135. package/out/renderer/node_modules/.pnpm/@emotion_sheet@1.4.0/node_modules/@emotion/sheet/dist/emotion-sheet.esm.js +65 -0
  136. package/out/renderer/node_modules/.pnpm/@emotion_sheet@1.4.0/node_modules/@emotion/sheet/dist/emotion-sheet.esm.js.map +1 -0
  137. package/out/renderer/node_modules/.pnpm/@emotion_unitless@0.10.0/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js +54 -0
  138. package/out/renderer/node_modules/.pnpm/@emotion_unitless@0.10.0/node_modules/@emotion/unitless/dist/emotion-unitless.esm.js.map +1 -0
  139. package/out/renderer/node_modules/.pnpm/@emotion_use-insertion-effect-with-fallbacks@1.2.0_react@17.0.2/node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js +12 -0
  140. package/out/renderer/node_modules/.pnpm/@emotion_use-insertion-effect-with-fallbacks@1.2.0_react@17.0.2/node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js.map +1 -0
  141. package/out/renderer/node_modules/.pnpm/@emotion_utils@1.4.2/node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js +30 -0
  142. package/out/renderer/node_modules/.pnpm/@emotion_utils@1.4.2/node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js.map +1 -0
  143. package/out/renderer/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +211 -0
  144. package/out/renderer/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
  145. package/out/renderer/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +97 -0
  146. package/out/renderer/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  147. package/out/renderer/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +31 -0
  148. package/out/renderer/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  149. package/out/renderer/node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js +93 -0
  150. package/out/renderer/node_modules/.pnpm/hoist-non-react-statics@3.3.2/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js.map +1 -0
  151. package/out/renderer/node_modules/.pnpm/memoize-one@6.0.0/node_modules/memoize-one/dist/memoize-one.esm.js +38 -0
  152. package/out/renderer/node_modules/.pnpm/memoize-one@6.0.0/node_modules/memoize-one/dist/memoize-one.esm.js.map +1 -0
  153. package/out/renderer/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js +159 -0
  154. package/out/renderer/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.development.js.map +1 -0
  155. package/out/renderer/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.production.min.js +103 -0
  156. package/out/renderer/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
  157. package/out/renderer/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +18 -0
  158. package/out/renderer/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js.map +1 -0
  159. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/Select-ef7c0426.esm.js +2200 -0
  160. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/Select-ef7c0426.esm.js.map +1 -0
  161. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/index-641ee5b8.esm.js +992 -0
  162. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/index-641ee5b8.esm.js.map +1 -0
  163. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/react-select.esm.js +14 -0
  164. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/react-select.esm.js.map +1 -0
  165. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/useStateManager-7e1e8489.esm.js +56 -0
  166. package/out/renderer/node_modules/.pnpm/react-select@5.10.2_@types_react@17.0.93_react-dom@17.0.2_react@17.0.2__react@17.0.2/node_modules/react-select/dist/useStateManager-7e1e8489.esm.js.map +1 -0
  167. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Enum.js +22 -0
  168. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Enum.js.map +1 -0
  169. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Middleware.js +30 -0
  170. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Middleware.js.map +1 -0
  171. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Parser.js +164 -0
  172. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Parser.js.map +1 -0
  173. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Serializer.js +37 -0
  174. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Serializer.js.map +1 -0
  175. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Tokenizer.js +245 -0
  176. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Tokenizer.js.map +1 -0
  177. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Utility.js +120 -0
  178. package/out/renderer/node_modules/.pnpm/stylis@4.2.0/node_modules/stylis/src/Utility.js.map +1 -0
  179. package/out/renderer/node_modules/.pnpm/use-isomorphic-layout-effect@1.2.1_@types_react@17.0.93_react@17.0.2/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js +6 -0
  180. package/out/renderer/node_modules/.pnpm/use-isomorphic-layout-effect@1.2.1_@types_react@17.0.93_react@17.0.2/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js.map +1 -0
  181. package/out/renderer/pod-monitoring.js +15 -19
  182. package/out/renderer/pod-monitoring.js.map +1 -1
  183. package/out/renderer/preferences/ai-shortcuts-preferences.js +12 -4
  184. package/out/renderer/preferences/ai-shortcuts-preferences.js.map +1 -1
  185. package/out/renderer/preferences/dashboard-preferences.js +37 -6
  186. package/out/renderer/preferences/dashboard-preferences.js.map +1 -1
  187. package/out/renderer/preferences/monitoring-preferences.js +131 -44
  188. package/out/renderer/preferences/monitoring-preferences.js.map +1 -1
  189. package/out/renderer/preferences/preferences.js +31 -7
  190. package/out/renderer/preferences/preferences.js.map +1 -1
  191. package/out/renderer/read-only.js +2 -2
  192. package/out/renderer/read-only.js.map +1 -1
  193. package/out/renderer/src/common/ai-terminal-context.js +51 -0
  194. package/out/renderer/src/common/ai-terminal-context.js.map +1 -0
  195. package/out/renderer/src/common/ai.js.map +1 -1
  196. package/out/renderer/src/common/cluster-icon-ipc.js +6 -0
  197. package/out/renderer/src/common/cluster-icon-ipc.js.map +1 -0
  198. package/out/renderer/src/common/cluster-icons.js +133 -0
  199. package/out/renderer/src/common/cluster-icons.js.map +1 -0
  200. package/out/renderer/src/common/dashboard.js +2 -1
  201. package/out/renderer/src/common/dashboard.js.map +1 -1
  202. package/out/renderer/src/common/date-time.js +11 -0
  203. package/out/renderer/src/common/date-time.js.map +1 -0
  204. package/out/renderer/src/common/monitoring-history.js +2 -0
  205. package/out/renderer/src/common/monitoring-history.js.map +1 -1
  206. package/out/renderer/src/common/resource-diagnostics.js.map +1 -1
  207. package/out/renderer/src/common/settings-export.js.map +1 -1
  208. package/out/renderer/src/common/store/dashboard-preferences-store.js +2 -1
  209. package/out/renderer/src/common/store/dashboard-preferences-store.js.map +1 -1
  210. package/out/renderer/src/common/store/monitoring-preferences-store.js +5 -0
  211. package/out/renderer/src/common/store/monitoring-preferences-store.js.map +1 -1
  212. package/out/renderer/welcome.js +28 -6
  213. package/out/renderer/welcome.js.map +1 -1
  214. package/package.json +3 -2
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","names":[],"sources":["../../src/renderer/dashboard.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\n// SPDX-License-Identifier: Apache-2.0\nimport { ipcRenderer, shell } from \"electron\";\nimport { observer } from \"mobx-react\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { normalizeDashboardUrl } from \"../common/dashboard\";\nimport {\n DASHBOARD_VIEWS_CLEAR,\n DASHBOARD_VIEWS_LOADING,\n DASHBOARD_VIEWS_PIN,\n DASHBOARD_VIEWS_PINNED,\n DASHBOARD_VIEWS_RELOAD,\n DASHBOARD_VIEWS_SYNC,\n type DashboardViewLoading,\n} from \"../common/dashboard-views\";\nimport { DashboardPreferencesStore } from \"../common/store/dashboard-preferences-store\";\n\nconst styles = `\n .freelens-power-dashboard .power-dashboard-card-pinned .power-dashboard-embed { opacity: .65; }\n .freelens-power-dashboard .power-dashboard-pin-placeholder { display: flex; width: 100%; height: 100%; flex-direction: column; align-items: center; justify-content: center; gap: 12px; border: 0; background: var(--mainBackground); color: var(--textColorSecondary); cursor: pointer; font: inherit; }\n .freelens-power-dashboard .power-dashboard-pin-placeholder:hover { color: var(--textColorAccent); }\n\n .ClusterManager main.freelens-power-dashboard, .freelens-power-dashboard { display: block; position: relative; z-index: 2; flex: 1; background: var(--mainBackground); padding: 28px; color: var(--textColorPrimary); min-width: 0; height: 100%; overflow: auto; box-sizing: border-box; }\n .freelens-power-dashboard .power-dashboard-header {\n display: flex; align-items: center; justify-content: space-between; gap: 20px; margin-bottom: 24px;\n }\n .freelens-power-dashboard h1 { margin: 0; color: var(--textColorAccent); font-size: 24px; }\n .freelens-power-dashboard .power-dashboard-subtitle,\n .freelens-power-dashboard .power-dashboard-hint { color: var(--textColorSecondary); line-height: 1.5; }\n .freelens-power-dashboard .power-dashboard-subtitle { margin: 6px 0 0; }\n .freelens-power-dashboard button {\n padding: 9px 16px; border: 1px solid var(--borderFaintColor); border-radius: 8px;\n background: var(--contentColor); color: var(--textColorAccent); cursor: pointer;\n }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action { display: inline-flex; align-items: center; gap: 7px; min-height: 32px; padding: 6px 12px; font-size: 13px; background: transparent; color: var(--textColorSecondary); }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action { transition: background-color 140ms, border-color 140ms, color 140ms; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action:hover { background: var(--contentColor); border-color: var(--borderColor); color: var(--textColorAccent); }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action .Icon { color: inherit; transition: color 160ms ease; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-refresh { width: 32px; height: 32px; padding: 0; justify-content: center; border-color: transparent; border-radius: 8px; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-refresh:hover { border-color: transparent; background: color-mix(in srgb, var(--primary) 10%, transparent); color: var(--primary); }\n .power-dashboard-actions { display: flex; align-items: center; gap: 8px; }\n .power-dashboard-action:disabled { opacity: 0.5; cursor: wait; }\n .freelens-power-dashboard .power-dashboard-grid {\n display: grid; grid-template-columns: repeat(var(--power-columns, 4), minmax(0, 1fr)); grid-auto-rows: 220px; grid-auto-flow: row; gap: 20px;\n }\n .freelens-power-dashboard .power-dashboard-card {\n display: flex; flex-direction: column; min-width: 0; overflow: hidden;\n border: 1px solid var(--borderFaintColor); border-radius: 12px; background: var(--contentColor);\n }\n .freelens-power-dashboard.power-dashboard-expanded { display: flex !important; flex-direction: column; overflow: hidden; }\n .freelens-power-dashboard.power-dashboard-expanded .power-dashboard-grid { display: block; flex: 1; min-height: 0; }\n .freelens-power-dashboard.power-dashboard-expanded .power-dashboard-card:not([hidden]) { height: 100%; box-sizing: border-box; }\n .freelens-power-dashboard .power-dashboard-card[hidden] { display: none; }\n .freelens-power-dashboard .power-dashboard-card-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }\n .freelens-power-dashboard button.power-dashboard-expand { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; border: 0; border-radius: 5px; background: transparent; color: var(--textColorSecondary); transition: color 160ms ease, background-color 160ms ease; }\n .freelens-power-dashboard button.power-dashboard-expand:hover { color: var(--textColorAccent); background: var(--mainBackground); }\n .freelens-power-dashboard button.power-dashboard-expand[aria-pressed=\"true\"],\n .freelens-power-dashboard button.power-dashboard-expand[aria-pressed=\"true\"] .Icon { color: var(--primary); }\n .freelens-power-dashboard button.power-dashboard-expand[aria-pressed=\"true\"]:hover { background: color-mix(in srgb, var(--primary) 12%, transparent); }\n .freelens-power-dashboard button.power-dashboard-expand:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }\n .freelens-power-dashboard .power-dashboard-card-s { grid-column: span 1; grid-row: span 1; }\n .freelens-power-dashboard .power-dashboard-card-m { grid-column: span var(--power-medium-span, 2); grid-row: span 2; }\n .freelens-power-dashboard .power-dashboard-card-l { grid-column: span var(--power-large-span, 4); grid-row: span 4; }\n .freelens-power-dashboard .power-dashboard-card-header {\n display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px 12px;\n }\n .freelens-power-dashboard h2 { margin: 0; font-size: 14px; overflow-wrap: anywhere; }\n .freelens-power-dashboard .power-dashboard-card-title { display: flex; align-items: center; gap: 8px; min-width: 0; }\n .freelens-power-dashboard .power-dashboard-site-icon { width: 16px; height: 16px; border-radius: 4px; object-fit: contain; flex-shrink: 0; }\n .freelens-power-dashboard .power-dashboard-card-header a {\n flex-shrink: 0; color: var(--textColorPrimary); font-size: 12px; transition: color 160ms ease;\n }\n .freelens-power-dashboard .power-dashboard-card-header a .Icon { color: inherit; transition: color 160ms ease; }\n .freelens-power-dashboard .power-dashboard-card-header a:hover { color: var(--textColorAccent); }\n .freelens-power-dashboard .power-dashboard-embed { width: 100%; flex: 1; min-height: 0; overflow: hidden; }\n .freelens-power-dashboard .power-dashboard-skeleton { height: 100%; box-sizing: border-box; padding: 20px; display: flex; flex-direction: column; gap: 12px; background: var(--contentColor); }\n .freelens-power-dashboard .power-dashboard-skeleton span { height: 12px; border-radius: 6px; background: color-mix(in srgb, var(--textColorSecondary) 12%, transparent); animation: power-dashboard-loading 1.8s ease-in-out infinite; }\n .freelens-power-dashboard .power-dashboard-skeleton span:first-child { width: 45%; height: 20px; margin-bottom: 8px; }\n .freelens-power-dashboard .power-dashboard-skeleton span:last-child { flex: 1; min-height: 30px; }\n @keyframes power-dashboard-loading { 50% { opacity: .45; } }\n @media (prefers-reduced-motion: reduce) { .freelens-power-dashboard .power-dashboard-skeleton span { animation: none; } }\n .freelens-power-dashboard .power-dashboard-hint { margin: 16px 0 0; font-size: 12px; }\n .freelens-power-dashboard .power-dashboard-empty {\n padding: 40px 24px; border: 1px solid var(--borderFaintColor); border-radius: 12px;\n background: var(--contentColor); text-align: center;\n }\n .freelens-power-dashboard .power-dashboard-empty p { color: var(--textColorSecondary); margin: 12px 0 24px; }\n @media (max-width: 700px) {\n .ClusterManager main.freelens-power-dashboard, .freelens-power-dashboard { display: block; position: relative; z-index: 2; flex: 1; background: var(--mainBackground); padding: 18px; }\n .freelens-power-dashboard .power-dashboard-header { flex-wrap: wrap; }\n }\n`;\n\nfunction WebsiteIcon({ url, favicon }: { url: string; favicon?: string }) {\n const [failed, setFailed] = useState(false);\n if (failed)\n return (\n <span className=\"power-dashboard-site-icon\" aria-hidden=\"true\">\n 🌐\n </span>\n );\n return (\n <img\n className=\"power-dashboard-site-icon\"\n src={favicon || new URL(\"/favicon.ico\", url).href}\n alt=\"\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n onError={() => setFailed(true)}\n />\n );\n}\n\nexport const DashboardPage = observer(({ onOpenPreferences }: { onOpenPreferences: () => void }) => {\n const preferences = DashboardPreferencesStore.getInstanceOrCreate<DashboardPreferencesStore>();\n const cards = preferences.cards.flatMap((card) => {\n const url = normalizeDashboardUrl(card.url);\n return url ? [{ ...card, url }] : [];\n });\n const root = useRef<HTMLElement>(null);\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const expanded = cards.some((card) => card.id === expandedId) ? expandedId : null;\n const expandedRef = useRef<string | null>(null);\n const gridScrollTop = useRef<number | null>(null);\n expandedRef.current = expanded;\n useLayoutEffect(() => {\n const container = root.current;\n if (!container) return;\n if (expanded) container.scrollTop = 0;\n else if (gridScrollTop.current !== null) {\n container.scrollTop = gridScrollTop.current;\n gridScrollTop.current = null;\n }\n }, [expanded]);\n useEffect(() => {\n if (expandedId && !expanded) setExpandedId(null);\n }, [expandedId, expanded]);\n useEffect(() => {\n const restore = () => setExpandedId(null);\n const escape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && expandedRef.current) {\n event.preventDefault();\n event.stopPropagation();\n restore();\n }\n };\n document.addEventListener(\"keydown\", escape, true);\n ipcRenderer.on(\"freelens-power:dashboard-escape\", restore);\n return () => {\n document.removeEventListener(\"keydown\", escape, true);\n ipcRenderer.removeListener(\"freelens-power:dashboard-escape\", restore);\n };\n }, []);\n const [loadFailed, setLoadFailed] = useState(false);\n const [loadingCards, setLoadingCards] = useState<Record<string, DashboardViewLoading>>({});\n useEffect(() => {\n const update = (_event: unknown, value: DashboardViewLoading) => {\n if (\n !value ||\n typeof value.id !== \"string\" ||\n typeof value.url !== \"string\" ||\n typeof value.loading !== \"boolean\" ||\n typeof value.failed !== \"boolean\" ||\n !preferences.cards.some((card) => card.id === value.id && normalizeDashboardUrl(card.url) === value.url)\n )\n return;\n setLoadingCards((previous) => {\n const existing = previous[value.id];\n return existing?.url === value.url && existing.loading === value.loading && existing.failed === value.failed\n ? previous\n : { ...previous, [value.id]: value };\n });\n if (value.failed) setLoadFailed(true);\n };\n ipcRenderer.on(DASHBOARD_VIEWS_LOADING, update);\n return () => {\n ipcRenderer.removeListener(DASHBOARD_VIEWS_LOADING, update);\n };\n }, [preferences]);\n const [reloading, setReloading] = useState(false);\n const reloadCards = async () => {\n if (reloading) return;\n setReloading(true);\n try {\n const results = await Promise.all(cards.map(({ id }) => ipcRenderer.invoke(DASHBOARD_VIEWS_RELOAD, { id })));\n setLoadFailed(results.some((result) => result?.failed?.length));\n } catch {\n setLoadFailed(true);\n } finally {\n setReloading(false);\n }\n };\n const focusPinned = (id: string) => {\n void ipcRenderer.invoke(DASHBOARD_VIEWS_PIN, { id, focus: true }).catch(() => setLoadFailed(true));\n };\n const [pinnedCards, setPinnedCards] = useState<string[]>([]);\n useEffect(() => {\n const update = (_event: unknown, ids: unknown) => {\n if (Array.isArray(ids)) setPinnedCards(ids.filter((id): id is string => typeof id === \"string\"));\n };\n ipcRenderer.on(DASHBOARD_VIEWS_PINNED, update);\n return () => {\n ipcRenderer.removeListener(DASHBOARD_VIEWS_PINNED, update);\n };\n }, []);\n const togglePinned = async (id: string) => {\n try {\n const result = await ipcRenderer.invoke(DASHBOARD_VIEWS_PIN, { id, pinned: !pinnedCards.includes(id) });\n if (Array.isArray(result?.pinned))\n setPinnedCards(result.pinned.filter((value: unknown): value is string => typeof value === \"string\"));\n } catch {\n setLoadFailed(true);\n }\n };\n const [siteIcons, setSiteIcons] = useState<Record<string, string>>({});\n useEffect(() => {\n const update = (_event: unknown, icon: { id?: unknown; url?: unknown }) => {\n if (typeof icon?.id !== \"string\" || typeof icon.url !== \"string\") return;\n const imageData =\n icon.url.length <= 720_000 &&\n /^data:image\\/(?:png|jpeg|gif|webp|x-icon|vnd\\.microsoft\\.icon|svg\\+xml);base64,[A-Za-z0-9+/]+={0,2}$/.test(\n icon.url,\n );\n const url = imageData ? icon.url : normalizeDashboardUrl(icon.url);\n if (!url) return;\n const id = icon.id;\n setSiteIcons((previous) => (previous[id] === url ? previous : { ...previous, [id]: url }));\n };\n ipcRenderer.on(\"freelens-power:dashboard-site-icon\", update);\n return () => {\n ipcRenderer.removeListener(\"freelens-power:dashboard-site-icon\", update);\n };\n }, []);\n const cardIdentity = JSON.stringify(cards.map(({ id, url, size }) => ({ id, url, size })));\n useEffect(() => {\n setSiteIcons({});\n }, [cardIdentity]);\n useEffect(() => {\n const container = root.current;\n if (!container) return;\n let active = true;\n let frame = 0;\n const sync = () => {\n frame = 0;\n const containerStyle = window.getComputedStyle(container);\n const contentWidth =\n container.clientWidth -\n (Number.parseFloat(containerStyle.paddingLeft) || 0) -\n (Number.parseFloat(containerStyle.paddingRight) || 0);\n const columns = Math.max(1, Math.min(12, Math.floor((contentWidth + 20) / 260)));\n for (const [property, value] of Object.entries({\n \"--power-columns\": columns,\n \"--power-medium-span\": Math.min(2, columns),\n \"--power-large-span\": Math.min(4, columns),\n })) {\n if (container.style.getPropertyValue(property) !== String(value))\n container.style.setProperty(property, String(value));\n }\n const containerBounds = container.getBoundingClientRect();\n const overlayOpen = Array.from(\n document.querySelectorAll<HTMLElement>('.Dialog, [role=\"dialog\"], [role=\"menu\"], .Menu, .power-ai-panel'),\n ).some((element) => {\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n return rect.width > 0 && rect.height > 0 && style.display !== \"none\" && style.visibility !== \"hidden\";\n });\n const visible = overlayOpen\n ? []\n : Array.from(container.querySelectorAll<HTMLElement>(\".power-dashboard-embed\")).flatMap((element) => {\n if (expandedRef.current && element.dataset.cardId !== expandedRef.current) return [];\n const rect = element.getBoundingClientRect();\n const x = Math.ceil(Math.max(0, rect.left, containerBounds.left));\n const y = Math.ceil(Math.max(0, rect.top, containerBounds.top));\n const right = Math.floor(Math.min(window.innerWidth, rect.right, containerBounds.right));\n const bottom = Math.floor(Math.min(window.innerHeight, rect.bottom, containerBounds.bottom));\n const bounds = {\n x: Math.floor(rect.left),\n y: Math.floor(rect.top),\n width: Math.ceil(rect.right) - Math.floor(rect.left),\n height: Math.ceil(rect.bottom) - Math.floor(rect.top),\n };\n const clip = { x, y, width: right - x, height: bottom - y };\n if (\n ![...Object.values(bounds), ...Object.values(clip)].every(Number.isFinite) ||\n rect.width <= 0 ||\n rect.height <= 0 ||\n clip.width <= 0 ||\n clip.height <= 0\n )\n return [];\n return [{ id: element.dataset.cardId, bounds, clip }];\n });\n void ipcRenderer\n .invoke(DASHBOARD_VIEWS_SYNC, {\n cards: visible,\n ...(overlayOpen ? { hidden: true } : {}),\n })\n .then(\n (result) => {\n if (active) {\n setLoadFailed(Boolean(result?.failed?.length));\n if (Array.isArray(result?.pinned)) setPinnedCards(result.pinned);\n }\n },\n () => {\n if (active) setLoadFailed(true);\n },\n );\n };\n const schedule = () => {\n if (!frame) frame = window.requestAnimationFrame(sync);\n };\n const mutations = new MutationObserver(schedule);\n mutations.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\"],\n });\n const observer = new ResizeObserver(schedule);\n observer.observe(container);\n for (const element of container.querySelectorAll(\".power-dashboard-embed\")) observer.observe(element);\n container.addEventListener(\"scroll\", schedule);\n window.addEventListener(\"resize\", schedule);\n schedule();\n return () => {\n active = false;\n window.cancelAnimationFrame(frame);\n observer.disconnect();\n mutations.disconnect();\n container.removeEventListener(\"scroll\", schedule);\n window.removeEventListener(\"resize\", schedule);\n void ipcRenderer.invoke(DASHBOARD_VIEWS_CLEAR).catch(() => {});\n };\n }, [cardIdentity]);\n\n return (\n <main ref={root} className={`freelens-power-dashboard${expanded ? \" power-dashboard-expanded\" : \"\"}`}>\n <style>{styles}</style>\n <header className=\"power-dashboard-header\">\n <div>\n <h1>🔋 Power Dashboard</h1>\n </div>\n <div className=\"power-dashboard-actions\">\n <button\n type=\"button\"\n className=\"power-dashboard-action power-dashboard-refresh\"\n aria-label=\"Refresh\"\n aria-busy={reloading}\n disabled={reloading || cards.length === 0}\n onClick={() => {\n void reloadCards();\n }}\n >\n <Renderer.Component.Icon material=\"refresh\" size={18} tooltip=\"Refresh\" />\n </button>\n <button type=\"button\" className=\"power-dashboard-action\" onClick={onOpenPreferences}>\n <span aria-hidden=\"true\">\n <Renderer.Component.Icon material=\"settings\" size={16} />\n </span>{\" \"}\n Settings\n </button>\n </div>\n </header>\n {cards.length === 0 ? (\n <section className=\"power-dashboard-empty\">\n <h2>Build your dashboard</h2>\n <p>Add your favorite tools and pages in Settings.</p>\n <button type=\"button\" onClick={onOpenPreferences}>\n Add cards\n </button>\n </section>\n ) : (\n <>\n <div className=\"power-dashboard-grid\">\n {cards.map((card) => (\n <section\n key={card.id}\n hidden={Boolean(expanded && expanded !== card.id)}\n className={`power-dashboard-card power-dashboard-card-${card.size}${pinnedCards.includes(card.id) ? \" power-dashboard-card-pinned\" : \"\"}`}\n >\n <header className=\"power-dashboard-card-header\">\n <div className=\"power-dashboard-card-title\">\n <WebsiteIcon\n key={`${card.url}:${siteIcons[card.id] || \"\"}`}\n url={card.url}\n favicon={siteIcons[card.id]}\n />\n <h2>{card.title}</h2>\n </div>\n <div className=\"power-dashboard-card-actions\">\n <button\n type=\"button\"\n className=\"power-dashboard-expand\"\n aria-label={`${pinnedCards.includes(card.id) ? \"Unpin\" : \"Pin\"} ${card.title}`}\n aria-pressed={pinnedCards.includes(card.id)}\n title={pinnedCards.includes(card.id) ? \"Close pinned window\" : \"Pin above other windows\"}\n onClick={() => {\n void togglePinned(card.id);\n }}\n >\n <Renderer.Component.Icon material=\"push_pin\" size={18} />\n </button>\n <button\n type=\"button\"\n className=\"power-dashboard-expand\"\n aria-label={`${expanded === card.id ? \"Restore\" : \"Expand\"} ${card.title}`}\n aria-pressed={expanded === card.id}\n title={expanded === card.id ? \"Restore\" : \"Expand\"}\n onClick={() => {\n if (!expanded) gridScrollTop.current = root.current?.scrollTop ?? 0;\n setExpandedId(expanded === card.id ? null : card.id);\n }}\n >\n <Renderer.Component.Icon\n material={expanded === card.id ? \"fullscreen_exit\" : \"fullscreen\"}\n size={18}\n />\n </button>\n <a\n href={card.url}\n onClick={(event) => {\n event.preventDefault();\n void shell.openExternal(card.url);\n }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={`Open ${card.title} in browser`}\n >\n <Renderer.Component.Icon material=\"open_in_new\" size={18} tooltip=\"Open in browser\" />\n </a>\n </div>\n </header>\n <div\n className=\"power-dashboard-embed\"\n data-card-id={card.id}\n role=\"region\"\n aria-label={card.title}\n aria-busy={loadingCards[card.id]?.url === card.url && loadingCards[card.id]?.loading}\n >\n {!pinnedCards.includes(card.id) &&\n loadingCards[card.id]?.url === card.url &&\n loadingCards[card.id]?.loading && (\n <div className=\"power-dashboard-skeleton\" role=\"status\" aria-label={`Loading ${card.title}`}>\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n </div>\n )}\n {pinnedCards.includes(card.id) && (\n <button\n type=\"button\"\n className=\"power-dashboard-pin-placeholder\"\n onClick={() => focusPinned(card.id)}\n aria-label={`Focus pinned ${card.title}`}\n >\n <Renderer.Component.Icon material=\"push_pin\" size={28} />\n <span>Pinned above other windows</span>\n <span>Focus window</span>\n </button>\n )}\n </div>\n </section>\n ))}\n </div>\n {loadFailed && (\n <p role=\"alert\" className=\"power-dashboard-hint\">\n Unable to load dashboard cards. Open them in your browser.\n </p>\n )}\n </>\n )}\n </main>\n );\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"dashboard.js","names":[],"sources":["../../src/renderer/dashboard.tsx"],"sourcesContent":["import { Renderer } from \"@freelensapp/extensions\";\n// SPDX-License-Identifier: Apache-2.0\nimport { ipcRenderer, shell } from \"electron\";\nimport { observer } from \"mobx-react\";\nimport { type CSSProperties, useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { normalizeDashboardUrl } from \"../common/dashboard\";\nimport {\n DASHBOARD_VIEWS_CLEAR,\n DASHBOARD_VIEWS_LOADING,\n DASHBOARD_VIEWS_PIN,\n DASHBOARD_VIEWS_PINNED,\n DASHBOARD_VIEWS_RELOAD,\n DASHBOARD_VIEWS_SYNC,\n type DashboardViewLoading,\n} from \"../common/dashboard-views\";\nimport { DashboardPreferencesStore } from \"../common/store/dashboard-preferences-store\";\n\nconst styles = `\n .freelens-power-dashboard .power-dashboard-card-pinned .power-dashboard-embed { opacity: .65; }\n .freelens-power-dashboard .power-dashboard-pin-placeholder { display: flex; width: 100%; height: 100%; flex-direction: column; align-items: center; justify-content: center; gap: 12px; border: 0; background: var(--mainBackground); color: var(--textColorSecondary); cursor: pointer; font: inherit; }\n .freelens-power-dashboard .power-dashboard-pin-placeholder:hover { color: var(--textColorAccent); }\n\n .ClusterManager main.freelens-power-dashboard, .freelens-power-dashboard { display: block; position: relative; z-index: 2; flex: 1; background: var(--mainBackground); padding: 28px; color: var(--textColorPrimary); min-width: 0; height: 100%; overflow: auto; box-sizing: border-box; }\n .freelens-power-dashboard .power-dashboard-header {\n display: flex; align-items: center; justify-content: space-between; gap: 20px; margin-bottom: 24px;\n }\n .freelens-power-dashboard h1 { margin: 0; color: var(--textColorAccent); font-size: 24px; }\n .freelens-power-dashboard .power-dashboard-subtitle,\n .freelens-power-dashboard .power-dashboard-hint { color: var(--textColorSecondary); line-height: 1.5; }\n .freelens-power-dashboard .power-dashboard-subtitle { margin: 6px 0 0; }\n .freelens-power-dashboard button {\n padding: 9px 16px; border: 1px solid var(--borderFaintColor); border-radius: 8px;\n background: var(--contentColor); color: var(--textColorAccent); cursor: pointer;\n }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action { display: inline-flex; align-items: center; gap: 7px; min-height: 32px; padding: 6px 12px; font-size: 13px; background: transparent; color: var(--textColorSecondary); }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action { transition: background-color 140ms, border-color 140ms, color 140ms; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action:hover { background: var(--contentColor); border-color: var(--borderColor); color: var(--textColorAccent); }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-action .Icon { color: inherit; transition: color 160ms ease; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-refresh { width: 32px; height: 32px; padding: 0; justify-content: center; border-color: transparent; border-radius: 8px; }\n .freelens-power-dashboard .power-dashboard-header .power-dashboard-refresh:hover { border-color: transparent; background: color-mix(in srgb, var(--primary) 10%, transparent); color: var(--primary); }\n .power-dashboard-actions { display: flex; align-items: center; gap: 8px; }\n .power-dashboard-action:disabled { opacity: 0.5; cursor: wait; }\n .freelens-power-dashboard .power-dashboard-grid {\n display: grid; grid-template-columns: repeat(var(--power-columns, 4), minmax(0, 1fr)); grid-auto-rows: 220px; grid-auto-flow: row; gap: 20px;\n }\n .freelens-power-dashboard .power-dashboard-card {\n display: flex; flex-direction: column; min-width: 0; overflow: hidden;\n border: 1px solid var(--borderFaintColor); border-radius: 12px; background: var(--contentColor);\n }\n .freelens-power-dashboard.power-dashboard-expanded { display: flex !important; flex-direction: column; overflow: hidden; }\n .freelens-power-dashboard.power-dashboard-expanded .power-dashboard-grid { display: block; flex: 1; min-height: 0; }\n .freelens-power-dashboard.power-dashboard-expanded .power-dashboard-card:not([hidden]) { height: 100%; box-sizing: border-box; }\n .freelens-power-dashboard .power-dashboard-card[hidden] { display: none; }\n .freelens-power-dashboard .power-dashboard-card-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }\n .freelens-power-dashboard button.power-dashboard-expand { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; padding: 0; border: 0; border-radius: 5px; background: transparent; color: var(--textColorSecondary); transition: color 160ms ease, background-color 160ms ease; }\n .freelens-power-dashboard button.power-dashboard-expand:hover { color: var(--textColorAccent); background: var(--mainBackground); }\n .freelens-power-dashboard button.power-dashboard-expand[aria-pressed=\"true\"],\n .freelens-power-dashboard button.power-dashboard-expand[aria-pressed=\"true\"] .Icon { color: var(--primary); }\n .freelens-power-dashboard button.power-dashboard-expand[aria-pressed=\"true\"]:hover { background: color-mix(in srgb, var(--primary) 12%, transparent); }\n .freelens-power-dashboard button.power-dashboard-expand:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }\n .freelens-power-dashboard .power-dashboard-card-xs { grid-column: span 1; grid-row: span 1; }\n .freelens-power-dashboard .power-dashboard-card-s { grid-column: span var(--power-small-span, 2); grid-row: span 2; }\n .freelens-power-dashboard .power-dashboard-card-m { grid-column: span var(--power-medium-span, 4); grid-row: span 2; }\n .freelens-power-dashboard .power-dashboard-card-l { grid-column: span var(--power-large-span, 4); grid-row: span 3; }\n .freelens-power-dashboard .power-dashboard-card-xl { grid-column: span var(--power-columns, 4); grid-row: span 3; }\n .freelens-power-dashboard .power-dashboard-card-header {\n display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 6px 12px;\n }\n .freelens-power-dashboard h2 { margin: 0; font-size: 14px; overflow-wrap: anywhere; }\n .freelens-power-dashboard .power-dashboard-card-title { display: flex; align-items: center; gap: 8px; min-width: 0; }\n .freelens-power-dashboard .power-dashboard-card-title h2 { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .freelens-power-dashboard .power-dashboard-card-xs .power-dashboard-card-header { flex-wrap: wrap; row-gap: 4px; }\n .freelens-power-dashboard .power-dashboard-card-xs .power-dashboard-card-title { flex-basis: 100%; }\n .freelens-power-dashboard .power-dashboard-card-xs .power-dashboard-card-actions { margin-left: auto; }\n .freelens-power-dashboard .power-dashboard-site-icon { width: 16px; height: 16px; border-radius: 4px; object-fit: contain; flex-shrink: 0; }\n .freelens-power-dashboard .power-dashboard-card-header a {\n flex-shrink: 0; color: var(--textColorPrimary); font-size: 12px; transition: color 160ms ease;\n }\n .freelens-power-dashboard .power-dashboard-card-header a .Icon { color: inherit; transition: color 160ms ease; }\n .freelens-power-dashboard .power-dashboard-card-header a:hover { color: var(--textColorAccent); }\n .freelens-power-dashboard .power-dashboard-embed { width: 100%; flex: 1; min-height: 0; overflow: hidden; }\n .freelens-power-dashboard .power-dashboard-skeleton { height: 100%; box-sizing: border-box; padding: 20px; display: flex; flex-direction: column; gap: 12px; background: var(--contentColor); }\n .freelens-power-dashboard .power-dashboard-skeleton span { height: 12px; border-radius: 6px; background: color-mix(in srgb, var(--textColorSecondary) 12%, transparent); animation: power-dashboard-loading 1.8s ease-in-out infinite; }\n .freelens-power-dashboard .power-dashboard-skeleton span:first-child { width: 45%; height: 20px; margin-bottom: 8px; }\n .freelens-power-dashboard .power-dashboard-skeleton span:last-child { flex: 1; min-height: 30px; }\n @keyframes power-dashboard-loading { 50% { opacity: .45; } }\n @media (prefers-reduced-motion: reduce) { .freelens-power-dashboard .power-dashboard-skeleton span { animation: none; } }\n .freelens-power-dashboard .power-dashboard-hint { margin: 16px 0 0; font-size: 12px; }\n .power-dashboard-right-tooltip { position: fixed !important; left: calc(anchor(right) + 8px) !important; top: anchor(center) !important; right: auto !important; bottom: auto !important; translate: 0 -50%; white-space: nowrap !important; max-width: none !important; }\n .freelens-power-dashboard .power-dashboard-empty {\n padding: 40px 24px; border: 1px solid var(--borderFaintColor); border-radius: 12px;\n background: var(--contentColor); text-align: center;\n }\n .freelens-power-dashboard .power-dashboard-empty p { color: var(--textColorSecondary); margin: 12px 0 24px; }\n @media (max-width: 700px) {\n .ClusterManager main.freelens-power-dashboard, .freelens-power-dashboard { display: block; position: relative; z-index: 2; flex: 1; background: var(--mainBackground); padding: 18px; }\n .freelens-power-dashboard .power-dashboard-header { flex-wrap: wrap; }\n }\n`;\n\nfunction DashboardActionIcon({ material, tooltip }: { material: string; tooltip: string }) {\n const [anchor] = useState(() => `--power-dashboard-action-${crypto.randomUUID()}`);\n return (\n <Renderer.Component.Icon\n material={material}\n size={18}\n style={{ anchorName: anchor, \"--size\": \"18px\" } as CSSProperties}\n tooltip={{ children: tooltip, className: \"power-dashboard-right-tooltip\", style: { positionAnchor: anchor } }}\n />\n );\n}\n\nfunction WebsiteIcon({ url, favicon }: { url: string; favicon?: string }) {\n const [failed, setFailed] = useState(false);\n if (failed)\n return (\n <span className=\"power-dashboard-site-icon\" aria-hidden=\"true\">\n 🌐\n </span>\n );\n return (\n <img\n className=\"power-dashboard-site-icon\"\n src={favicon || new URL(\"/favicon.ico\", url).href}\n alt=\"\"\n loading=\"lazy\"\n referrerPolicy=\"no-referrer\"\n onError={() => setFailed(true)}\n />\n );\n}\n\nexport const DashboardPage = observer(({ onOpenPreferences }: { onOpenPreferences: () => void }) => {\n const preferences = DashboardPreferencesStore.getInstanceOrCreate<DashboardPreferencesStore>();\n const cards = preferences.cards.flatMap((card) => {\n const url = normalizeDashboardUrl(card.url);\n return url ? [{ ...card, url }] : [];\n });\n const root = useRef<HTMLElement>(null);\n const [expandedId, setExpandedId] = useState<string | null>(null);\n const expanded = cards.some((card) => card.id === expandedId) ? expandedId : null;\n const expandedRef = useRef<string | null>(null);\n const gridScrollTop = useRef<number | null>(null);\n expandedRef.current = expanded;\n useLayoutEffect(() => {\n const container = root.current;\n if (!container) return;\n if (expanded) container.scrollTop = 0;\n else if (gridScrollTop.current !== null) {\n container.scrollTop = gridScrollTop.current;\n gridScrollTop.current = null;\n }\n }, [expanded]);\n useEffect(() => {\n if (expandedId && !expanded) setExpandedId(null);\n }, [expandedId, expanded]);\n useEffect(() => {\n const restore = () => setExpandedId(null);\n const escape = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && expandedRef.current) {\n event.preventDefault();\n event.stopPropagation();\n restore();\n }\n };\n document.addEventListener(\"keydown\", escape, true);\n ipcRenderer.on(\"freelens-power:dashboard-escape\", restore);\n return () => {\n document.removeEventListener(\"keydown\", escape, true);\n ipcRenderer.removeListener(\"freelens-power:dashboard-escape\", restore);\n };\n }, []);\n const [loadFailed, setLoadFailed] = useState(false);\n const [loadingCards, setLoadingCards] = useState<Record<string, DashboardViewLoading>>({});\n useEffect(() => {\n const update = (_event: unknown, value: DashboardViewLoading) => {\n if (\n !value ||\n typeof value.id !== \"string\" ||\n typeof value.url !== \"string\" ||\n typeof value.loading !== \"boolean\" ||\n typeof value.failed !== \"boolean\" ||\n !preferences.cards.some((card) => card.id === value.id && normalizeDashboardUrl(card.url) === value.url)\n )\n return;\n setLoadingCards((previous) => {\n const existing = previous[value.id];\n return existing?.url === value.url && existing.loading === value.loading && existing.failed === value.failed\n ? previous\n : { ...previous, [value.id]: value };\n });\n if (value.failed) setLoadFailed(true);\n };\n ipcRenderer.on(DASHBOARD_VIEWS_LOADING, update);\n return () => {\n ipcRenderer.removeListener(DASHBOARD_VIEWS_LOADING, update);\n };\n }, [preferences]);\n const [reloading, setReloading] = useState(false);\n const reloadCards = async () => {\n if (reloading) return;\n setReloading(true);\n try {\n const results = await Promise.all(cards.map(({ id }) => ipcRenderer.invoke(DASHBOARD_VIEWS_RELOAD, { id })));\n setLoadFailed(results.some((result) => result?.failed?.length));\n } catch {\n setLoadFailed(true);\n } finally {\n setReloading(false);\n }\n };\n const focusPinned = (id: string) => {\n void ipcRenderer.invoke(DASHBOARD_VIEWS_PIN, { id, focus: true }).catch(() => setLoadFailed(true));\n };\n const [pinnedCards, setPinnedCards] = useState<string[]>([]);\n useEffect(() => {\n const update = (_event: unknown, ids: unknown) => {\n if (Array.isArray(ids)) setPinnedCards(ids.filter((id): id is string => typeof id === \"string\"));\n };\n ipcRenderer.on(DASHBOARD_VIEWS_PINNED, update);\n return () => {\n ipcRenderer.removeListener(DASHBOARD_VIEWS_PINNED, update);\n };\n }, []);\n const togglePinned = async (id: string) => {\n try {\n const result = await ipcRenderer.invoke(DASHBOARD_VIEWS_PIN, { id, pinned: !pinnedCards.includes(id) });\n if (Array.isArray(result?.pinned))\n setPinnedCards(result.pinned.filter((value: unknown): value is string => typeof value === \"string\"));\n } catch {\n setLoadFailed(true);\n }\n };\n const [siteIcons, setSiteIcons] = useState<Record<string, string>>({});\n useEffect(() => {\n const update = (_event: unknown, icon: { id?: unknown; url?: unknown }) => {\n if (typeof icon?.id !== \"string\" || typeof icon.url !== \"string\") return;\n const imageData =\n icon.url.length <= 720_000 &&\n /^data:image\\/(?:png|jpeg|gif|webp|x-icon|vnd\\.microsoft\\.icon|svg\\+xml);base64,[A-Za-z0-9+/]+={0,2}$/.test(\n icon.url,\n );\n const url = imageData ? icon.url : normalizeDashboardUrl(icon.url);\n if (!url) return;\n const id = icon.id;\n setSiteIcons((previous) => (previous[id] === url ? previous : { ...previous, [id]: url }));\n };\n ipcRenderer.on(\"freelens-power:dashboard-site-icon\", update);\n return () => {\n ipcRenderer.removeListener(\"freelens-power:dashboard-site-icon\", update);\n };\n }, []);\n const cardIdentity = JSON.stringify(cards.map(({ id, url, size }) => ({ id, url, size })));\n useEffect(() => {\n setSiteIcons({});\n }, [cardIdentity]);\n useEffect(() => {\n const container = root.current;\n if (!container) return;\n let active = true;\n let frame = 0;\n const sync = () => {\n frame = 0;\n const containerStyle = window.getComputedStyle(container);\n const contentWidth =\n container.clientWidth -\n (Number.parseFloat(containerStyle.paddingLeft) || 0) -\n (Number.parseFloat(containerStyle.paddingRight) || 0);\n const columns = contentWidth >= 1200 ? 6 : contentWidth >= 800 ? 4 : contentWidth >= 520 ? 2 : 1;\n for (const [property, value] of Object.entries({\n \"--power-columns\": columns,\n \"--power-small-span\": Math.min(2, columns),\n \"--power-medium-span\": Math.min(4, columns),\n \"--power-large-span\": Math.min(4, columns),\n })) {\n if (container.style.getPropertyValue(property) !== String(value))\n container.style.setProperty(property, String(value));\n }\n const containerBounds = container.getBoundingClientRect();\n const overlayOpen = Array.from(\n document.querySelectorAll<HTMLElement>('.Dialog, [role=\"dialog\"], [role=\"menu\"], .Menu, .power-ai-panel'),\n ).some((element) => {\n const rect = element.getBoundingClientRect();\n const style = window.getComputedStyle(element);\n return rect.width > 0 && rect.height > 0 && style.display !== \"none\" && style.visibility !== \"hidden\";\n });\n const visible = overlayOpen\n ? []\n : Array.from(container.querySelectorAll<HTMLElement>(\".power-dashboard-embed\")).flatMap((element) => {\n if (expandedRef.current && element.dataset.cardId !== expandedRef.current) return [];\n const rect = element.getBoundingClientRect();\n const x = Math.ceil(Math.max(0, rect.left, containerBounds.left));\n const y = Math.ceil(Math.max(0, rect.top, containerBounds.top));\n const right = Math.floor(Math.min(window.innerWidth, rect.right, containerBounds.right));\n const bottom = Math.floor(Math.min(window.innerHeight, rect.bottom, containerBounds.bottom));\n const bounds = {\n x: Math.floor(rect.left),\n y: Math.floor(rect.top),\n width: Math.ceil(rect.right) - Math.floor(rect.left),\n height: Math.ceil(rect.bottom) - Math.floor(rect.top),\n };\n const clip = { x, y, width: right - x, height: bottom - y };\n if (\n ![...Object.values(bounds), ...Object.values(clip)].every(Number.isFinite) ||\n rect.width <= 0 ||\n rect.height <= 0 ||\n clip.width <= 0 ||\n clip.height <= 0\n )\n return [];\n return [{ id: element.dataset.cardId, bounds, clip }];\n });\n void ipcRenderer\n .invoke(DASHBOARD_VIEWS_SYNC, {\n cards: visible,\n ...(overlayOpen ? { hidden: true } : {}),\n })\n .then(\n (result) => {\n if (active) {\n setLoadFailed(Boolean(result?.failed?.length));\n if (Array.isArray(result?.pinned)) setPinnedCards(result.pinned);\n }\n },\n () => {\n if (active) setLoadFailed(true);\n },\n );\n };\n const schedule = () => {\n if (!frame) frame = window.requestAnimationFrame(sync);\n };\n const mutations = new MutationObserver(schedule);\n mutations.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"class\", \"style\", \"hidden\"],\n });\n const observer = new ResizeObserver(schedule);\n observer.observe(container);\n for (const element of container.querySelectorAll(\".power-dashboard-embed\")) observer.observe(element);\n container.addEventListener(\"scroll\", schedule);\n window.addEventListener(\"resize\", schedule);\n schedule();\n return () => {\n active = false;\n window.cancelAnimationFrame(frame);\n observer.disconnect();\n mutations.disconnect();\n container.removeEventListener(\"scroll\", schedule);\n window.removeEventListener(\"resize\", schedule);\n void ipcRenderer.invoke(DASHBOARD_VIEWS_CLEAR).catch(() => {});\n };\n }, [cardIdentity]);\n\n return (\n <main ref={root} className={`freelens-power-dashboard${expanded ? \" power-dashboard-expanded\" : \"\"}`}>\n <style>{styles}</style>\n <header className=\"power-dashboard-header\">\n <div>\n <h1>🔋 Power Dashboard</h1>\n </div>\n <div className=\"power-dashboard-actions\">\n <button\n type=\"button\"\n className=\"power-dashboard-action power-dashboard-refresh\"\n aria-label=\"Refresh\"\n aria-busy={reloading}\n disabled={reloading || cards.length === 0}\n onClick={() => {\n void reloadCards();\n }}\n >\n <Renderer.Component.Icon material=\"refresh\" size={18} tooltip=\"Refresh\" />\n </button>\n <button type=\"button\" className=\"power-dashboard-action\" onClick={onOpenPreferences}>\n <span aria-hidden=\"true\">\n <Renderer.Component.Icon material=\"settings\" size={16} />\n </span>{\" \"}\n Settings\n </button>\n </div>\n </header>\n {cards.length === 0 ? (\n <section className=\"power-dashboard-empty\">\n <h2>Build your dashboard</h2>\n <p>Add your favorite tools and pages in Settings.</p>\n <button type=\"button\" onClick={onOpenPreferences}>\n Add cards\n </button>\n </section>\n ) : (\n <>\n <div className=\"power-dashboard-grid\">\n {cards.map((card) => (\n <section\n key={card.id}\n hidden={Boolean(expanded && expanded !== card.id)}\n className={`power-dashboard-card power-dashboard-card-${card.size}${pinnedCards.includes(card.id) ? \" power-dashboard-card-pinned\" : \"\"}`}\n >\n <header className=\"power-dashboard-card-header\">\n <div className=\"power-dashboard-card-title\">\n <WebsiteIcon\n key={`${card.url}:${siteIcons[card.id] || \"\"}`}\n url={card.url}\n favicon={siteIcons[card.id]}\n />\n <h2>{card.title}</h2>\n </div>\n <div className=\"power-dashboard-card-actions\">\n <button\n type=\"button\"\n className=\"power-dashboard-expand\"\n aria-label={`Auto-refresh ${card.title} every 10 seconds`}\n aria-pressed={card.refreshEvery10Seconds === true}\n onClick={() => {\n preferences.upsertCard({ ...card, refreshEvery10Seconds: !card.refreshEvery10Seconds });\n }}\n >\n <DashboardActionIcon\n material=\"autorenew\"\n tooltip={card.refreshEvery10Seconds ? \"Disable refresh\" : \"Enable refresh (10s)\"}\n />\n </button>\n <button\n type=\"button\"\n className=\"power-dashboard-expand\"\n aria-label={`${pinnedCards.includes(card.id) ? \"Unpin\" : \"Pin\"} ${card.title}`}\n aria-pressed={pinnedCards.includes(card.id)}\n onClick={() => {\n void togglePinned(card.id);\n }}\n >\n <DashboardActionIcon\n material=\"push_pin\"\n tooltip={pinnedCards.includes(card.id) ? \"Unpin\" : \"Pin\"}\n />\n </button>\n <button\n type=\"button\"\n className=\"power-dashboard-expand\"\n aria-label={`${expanded === card.id ? \"Restore\" : \"Expand\"} ${card.title}`}\n aria-pressed={expanded === card.id}\n onClick={() => {\n if (!expanded) gridScrollTop.current = root.current?.scrollTop ?? 0;\n setExpandedId(expanded === card.id ? null : card.id);\n }}\n >\n <DashboardActionIcon\n material={expanded === card.id ? \"fullscreen_exit\" : \"fullscreen\"}\n tooltip={expanded === card.id ? \"Restore\" : \"Expand\"}\n />\n </button>\n <a\n href={card.url}\n onClick={(event) => {\n event.preventDefault();\n void shell.openExternal(card.url);\n }}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n aria-label={`Open ${card.title} in browser`}\n >\n <DashboardActionIcon material=\"open_in_new\" tooltip=\"Open\" />\n </a>\n </div>\n </header>\n <div\n className=\"power-dashboard-embed\"\n data-card-id={card.id}\n role=\"region\"\n aria-label={card.title}\n aria-busy={loadingCards[card.id]?.url === card.url && loadingCards[card.id]?.loading}\n >\n {!pinnedCards.includes(card.id) &&\n loadingCards[card.id]?.url === card.url &&\n loadingCards[card.id]?.loading && (\n <div className=\"power-dashboard-skeleton\" role=\"status\" aria-label={`Loading ${card.title}`}>\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n <span aria-hidden=\"true\" />\n </div>\n )}\n {pinnedCards.includes(card.id) && (\n <button\n type=\"button\"\n className=\"power-dashboard-pin-placeholder\"\n onClick={() => focusPinned(card.id)}\n aria-label={`Focus pinned ${card.title}`}\n >\n <Renderer.Component.Icon material=\"push_pin\" size={28} />\n <span>Pinned above other windows</span>\n <span>Focus window</span>\n </button>\n )}\n </div>\n </section>\n ))}\n </div>\n {loadFailed && (\n <p role=\"alert\" className=\"power-dashboard-hint\">\n Unable to load dashboard cards. Open them in your browser.\n </p>\n )}\n </>\n )}\n </main>\n );\n});\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  const require_extensions = require("../_virtual/_global-external_@freelensapp/extensions.js");
2
2
  const require__global_external_mobx_react = require("../_virtual/_global-external_mobx-react.js");
3
3
  const require_jsx_runtime = require("../_virtual/_global-external_react/jsx-runtime.js");
4
+ const require_date_time = require("../src/common/date-time.js");
4
5
  const require_secret_certificates = require("../src/common/secret-certificates.js");
5
6
  //#region src/renderer/details/secret-certificate-details.tsx
6
7
  var { DrawerTitle, DrawerItem } = require_extensions.Renderer.Component;
@@ -38,14 +39,20 @@ var SecretCertificateDetails = require__global_external_mobx_react.observer(({ o
38
39
  }),
39
40
  /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
40
41
  name: "Not before",
41
- children: certificate.validFrom
42
+ children: /* @__PURE__ */ require_jsx_runtime.jsx("span", {
43
+ style: { whiteSpace: "pre-wrap" },
44
+ children: require_date_time.formatDateTime(certificate.validFrom)
45
+ })
42
46
  }),
43
47
  /* @__PURE__ */ require_jsx_runtime.jsx(DrawerItem, {
44
48
  name: "Expires",
45
49
  children: /* @__PURE__ */ require_jsx_runtime.jsxs("span", {
46
50
  style: expired ? { color: "red" } : void 0,
47
51
  children: [
48
- certificate.validTo,
52
+ /* @__PURE__ */ require_jsx_runtime.jsx("span", {
53
+ style: { whiteSpace: "pre-wrap" },
54
+ children: require_date_time.formatDateTime(certificate.validTo)
55
+ }),
49
56
  " (",
50
57
  expired ? `Expired ${Math.ceil(-remaining / 864e5)} days ago` : `${days} days remaining`,
51
58
  ")"
@@ -1 +1 @@
1
- {"version":3,"file":"secret-certificate-details.js","names":[],"sources":["../../../src/renderer/details/secret-certificate-details.tsx"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { observer } from \"mobx-react\";\nimport { parseSecretCertificates } from \"../../common/secret-certificates\";\n\nconst { DrawerTitle, DrawerItem } = Renderer.Component;\n\nexport const SecretCertificateDetails = observer(\n ({ object }: Renderer.Component.KubeObjectDetailsProps<Renderer.K8sApi.Secret>) => {\n const certificates = parseSecretCertificates(object.data);\n const now = Date.now();\n\n if (certificates.length === 0) return null;\n\n return (\n <>\n {certificates.map((certificate) => {\n const remaining = new Date(certificate.validTo).getTime() - now;\n const days = Math.ceil(remaining / 86_400_000);\n const expired = remaining <= 0;\n\n return (\n <div key={`${certificate.key}:${certificate.index}`}>\n <DrawerTitle>\n Certificate Info - {certificate.key} ({certificate.index})\n </DrawerTitle>\n <DrawerItem name=\"CN\">{certificate.commonName}</DrawerItem>\n <DrawerItem name=\"SAN\">{certificate.subjectAltName ?? \"—\"}</DrawerItem>\n <DrawerItem name=\"Serial Number\">{certificate.serialNumber}</DrawerItem>\n <DrawerItem name=\"Issuer\">{certificate.issuer}</DrawerItem>\n <DrawerItem name=\"Not before\">{certificate.validFrom}</DrawerItem>\n <DrawerItem name=\"Expires\">\n <span style={expired ? { color: \"red\" } : undefined}>\n {certificate.validTo} (\n {expired ? `Expired ${Math.ceil(-remaining / 86_400_000)} days ago` : `${days} days remaining`})\n </span>\n </DrawerItem>\n </div>\n );\n })}\n </>\n );\n },\n);\n"],"mappings":";;;;;AAMA,IAAM,EAAE,aAAa,eAAe,mBAAA,SAAS;AAE7C,IAAa,2BAA2B,oCAAA,UACrC,EAAE,aAAgF;CACjF,MAAM,eAAe,4BAAA,wBAAwB,OAAO,IAAI;CACxD,MAAM,MAAM,KAAK,IAAI;CAErB,IAAI,aAAa,WAAW,GAAG,OAAO;CAEtC,OACE,oCAAA,IAAA,oBAAA,UAAA,EAAA,UACG,aAAa,KAAK,gBAAgB;EACjC,MAAM,YAAY,IAAI,KAAK,YAAY,OAAO,CAAC,CAAC,QAAQ,IAAI;EAC5D,MAAM,OAAO,KAAK,KAAK,YAAY,KAAU;EAC7C,MAAM,UAAU,aAAa;EAE7B,OACE,oCAAA,KAAC,OAAD,EAAA,UAAA;GACE,oCAAA,KAAC,aAAD,EAAA,UAAA;IAAa;IACS,YAAY;IAAI;IAAG,YAAY;IAAM;GAC9C,EAAA,CAAA;GACb,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAM,YAAY;GAAuB,CAAA;GAC1D,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAO,YAAY,kBAAkB;GAAgB,CAAA;GACtE,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAiB,YAAY;GAAyB,CAAA;GACvE,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAU,YAAY;GAAmB,CAAA;GAC1D,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAc,YAAY;GAAsB,CAAA;GACjE,oCAAA,IAAC,YAAD;IAAY,MAAK;cACf,oCAAA,KAAC,QAAD;KAAM,OAAO,UAAU,EAAE,OAAO,MAAM,IAAI,KAAA;eAA1C;MACG,YAAY;MAAQ;MACpB,UAAU,WAAW,KAAK,KAAK,CAAC,YAAY,KAAU,EAAE,aAAa,GAAG,KAAK;MAAiB;KAC3F;;GACI,CAAA;EACT,EAAA,GAfK,GAAG,YAAY,IAAI,GAAG,YAAY,OAevC;CAET,CAAC,EACD,CAAA;AAEN,CACF"}
1
+ {"version":3,"file":"secret-certificate-details.js","names":[],"sources":["../../../src/renderer/details/secret-certificate-details.tsx"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\nimport { Renderer } from \"@freelensapp/extensions\";\nimport { observer } from \"mobx-react\";\nimport { formatDateTime } from \"../../common/date-time\";\nimport { parseSecretCertificates } from \"../../common/secret-certificates\";\n\nconst { DrawerTitle, DrawerItem } = Renderer.Component;\n\nexport const SecretCertificateDetails = observer(\n ({ object }: Renderer.Component.KubeObjectDetailsProps<Renderer.K8sApi.Secret>) => {\n const certificates = parseSecretCertificates(object.data);\n const now = Date.now();\n\n if (certificates.length === 0) return null;\n\n return (\n <>\n {certificates.map((certificate) => {\n const remaining = new Date(certificate.validTo).getTime() - now;\n const days = Math.ceil(remaining / 86_400_000);\n const expired = remaining <= 0;\n\n return (\n <div key={`${certificate.key}:${certificate.index}`}>\n <DrawerTitle>\n Certificate Info - {certificate.key} ({certificate.index})\n </DrawerTitle>\n <DrawerItem name=\"CN\">{certificate.commonName}</DrawerItem>\n <DrawerItem name=\"SAN\">{certificate.subjectAltName ?? \"—\"}</DrawerItem>\n <DrawerItem name=\"Serial Number\">{certificate.serialNumber}</DrawerItem>\n <DrawerItem name=\"Issuer\">{certificate.issuer}</DrawerItem>\n <DrawerItem name=\"Not before\">\n <span style={{ whiteSpace: \"pre-wrap\" }}>{formatDateTime(certificate.validFrom)}</span>\n </DrawerItem>\n <DrawerItem name=\"Expires\">\n <span style={expired ? { color: \"red\" } : undefined}>\n <span style={{ whiteSpace: \"pre-wrap\" }}>{formatDateTime(certificate.validTo)}</span> (\n {expired ? `Expired ${Math.ceil(-remaining / 86_400_000)} days ago` : `${days} days remaining`})\n </span>\n </DrawerItem>\n </div>\n );\n })}\n </>\n );\n },\n);\n"],"mappings":";;;;;;AAOA,IAAM,EAAE,aAAa,eAAe,mBAAA,SAAS;AAE7C,IAAa,2BAA2B,oCAAA,UACrC,EAAE,aAAgF;CACjF,MAAM,eAAe,4BAAA,wBAAwB,OAAO,IAAI;CACxD,MAAM,MAAM,KAAK,IAAI;CAErB,IAAI,aAAa,WAAW,GAAG,OAAO;CAEtC,OACE,oCAAA,IAAA,oBAAA,UAAA,EAAA,UACG,aAAa,KAAK,gBAAgB;EACjC,MAAM,YAAY,IAAI,KAAK,YAAY,OAAO,CAAC,CAAC,QAAQ,IAAI;EAC5D,MAAM,OAAO,KAAK,KAAK,YAAY,KAAU;EAC7C,MAAM,UAAU,aAAa;EAE7B,OACE,oCAAA,KAAC,OAAD,EAAA,UAAA;GACE,oCAAA,KAAC,aAAD,EAAA,UAAA;IAAa;IACS,YAAY;IAAI;IAAG,YAAY;IAAM;GAC9C,EAAA,CAAA;GACb,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAM,YAAY;GAAuB,CAAA;GAC1D,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAO,YAAY,kBAAkB;GAAgB,CAAA;GACtE,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAiB,YAAY;GAAyB,CAAA;GACvE,oCAAA,IAAC,YAAD;IAAY,MAAK;cAAU,YAAY;GAAmB,CAAA;GAC1D,oCAAA,IAAC,YAAD;IAAY,MAAK;cACf,oCAAA,IAAC,QAAD;KAAM,OAAO,EAAE,YAAY,WAAW;eAAI,kBAAA,eAAe,YAAY,SAAS;IAAQ,CAAA;GAC5E,CAAA;GACZ,oCAAA,IAAC,YAAD;IAAY,MAAK;cACf,oCAAA,KAAC,QAAD;KAAM,OAAO,UAAU,EAAE,OAAO,MAAM,IAAI,KAAA;eAA1C;MACE,oCAAA,IAAC,QAAD;OAAM,OAAO,EAAE,YAAY,WAAW;iBAAI,kBAAA,eAAe,YAAY,OAAO;MAAQ,CAAA;MAAC;MACpF,UAAU,WAAW,KAAK,KAAK,CAAC,YAAY,KAAU,EAAE,aAAa,GAAG,KAAK;MAAiB;KAC3F;;GACI,CAAA;EACT,EAAA,GAjBK,GAAG,YAAY,IAAI,GAAG,YAAY,OAiBvC;CAET,CAAC,EACD,CAAA;AAEN,CACF"}
@@ -0,0 +1,39 @@
1
+ //#region src/renderer/diagnostics.css.ts
2
+ var diagnosticsStyles = `
3
+ .power-diagnostics{container-type:inline-size;container-name:diagnostics;box-sizing:border-box;color:var(--textColorPrimary);max-width:100%;line-height:1.5}
4
+ .power-diagnostics *{box-sizing:border-box}.power-diagnostics h2{margin:0 0 6px;font-size:24px}.power-diagnostics h3{margin:0 0 6px;font-size:18px}.power-diagnostics p{margin:8px 0 16px}.power-diagnostics .page-intro,.power-diagnostics small,.power-diagnostics .view-intro p{color:var(--textColorSecondary)}
5
+ .power-diagnostics nav{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;border-bottom:1px solid var(--borderColor);padding-bottom:8px}.power-diagnostics button{cursor:pointer;display:inline-flex;align-items:center;gap:6px;border-radius:5px;border:1px solid var(--borderColor);background:var(--contentColor);color:var(--textColorPrimary);font:inherit;padding:6px 10px;margin:3px 4px 3px 0}.power-diagnostics button:hover{border-color:var(--primary)}.power-diagnostics button[aria-pressed=true]{color:var(--primary);border-color:var(--primary)}.power-diagnostics button:disabled{opacity:.5;cursor:default}.power-diagnostics :is(button,input,summary):focus-visible{outline:2px solid var(--primary);outline-offset:2px}
6
+ .power-diagnostics .diagnostics-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.power-diagnostics .snapshot-meta{white-space:pre-wrap;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .view-intro{margin:16px 0}.power-diagnostics .view-intro p{margin:4px 0 0}.power-diagnostics .diagnostics-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:22px}.power-diagnostics .diagnostics-summary>.summary-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--borderColor);border-radius:8px;background:var(--contentColor)}.power-diagnostics .diagnostics-summary strong{display:block;font-size:25px;font-variant-numeric:tabular-nums}.power-diagnostics .diagnostics-summary span{color:var(--textColorSecondary)}.power-diagnostics .summary-card{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.workloads{--summary-color:#bc86df}.power-diagnostics .summary-card.pods{--summary-color:var(--primary,#609ee8)}.power-diagnostics .summary-card.pending{--summary-color:var(--colorSuccess,#67b58b)}.power-diagnostics .summary-card.pending.unavailable{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.unavailable strong{font-size:18px}.power-diagnostics .summary-card.attention{--summary-color:var(--colorWarning,#e0a134)}.power-diagnostics .summary-card strong{color:var(--summary-color)}.power-diagnostics .diagnostics-summary .summary-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:42px;height:42px;border-radius:10px;color:var(--summary-color);background:color-mix(in srgb,var(--summary-color) 12%,transparent)}.power-diagnostics .summary-icon .Icon{color:inherit}
7
+ .power-diagnostics .toolbar{display:grid;align-items:end;gap:16px;margin-bottom:16px}.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px max-content}.power-diagnostics .timeline-toolbar{grid-template-columns:minmax(200px,1fr) 240px max-content}.power-diagnostics .toolbar>label{display:flex;flex-direction:column;gap:6px;min-width:0;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-select{display:block;min-width:180px;max-width:100%;vertical-align:middle}.power-diagnostics .toolbar .diagnostics-select{min-width:0;width:100%}.power-diagnostics .diagnostics-select>div{width:100%}.power-diagnostics .diagnostics-select .Select{min-width:0;width:100%}.power-diagnostics .diagnostics-select .Select__control{min-height:32px;height:32px}.power-diagnostics .diagnostics-select .Select__value-container{padding:0 8px;min-width:0}.power-diagnostics .diagnostics-select .Select__single-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.power-diagnostics .diagnostics-select .Select__input-container{margin:0;padding:0}.power-diagnostics .diagnostics-select .Select__indicator{padding:5px 8px}.power-diagnostics .diagnostics-input{display:block;min-width:0;height:32px}.power-diagnostics .diagnostics-input .Input{height:32px;min-height:32px;margin:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);padding:0 9px}.power-diagnostics .diagnostics-input .Input>.input-area{height:30px;min-height:0;min-width:0;padding:0;border:0;border-bottom:0}.power-diagnostics .diagnostics-input .Input>.input-area:after,.power-diagnostics .diagnostics-input .Input>.input-area:before{display:none}.power-diagnostics .diagnostics-input .Input:focus-within{border-color:var(--primary)}.power-diagnostics .diagnostics-input input{width:100%;max-width:100%;height:30px;min-height:0;padding:0;border:0;border-bottom:0;outline:none;background:transparent;color:var(--textColorPrimary);font:inherit}.power-diagnostics .diagnostics-input .Input:after,.power-diagnostics .diagnostics-input .Input:before{display:none}.power-diagnostics .warning-filter{display:flex;align-items:center;min-height:32px;padding:0 0 1px}.power-diagnostics .warning-filter .Checkbox{margin:0;white-space:nowrap}.power-diagnostics .warning-filter label{display:inline-flex;align-items:center;flex-direction:row;color:var(--textColorPrimary)}
8
+ .power-diagnostics .evidence-table{min-width:660px;table-layout:fixed}.power-diagnostics .evidence-source{width:180px}.power-diagnostics .evidence-node{width:160px}.power-diagnostics .evidence-finding{width:auto}.power-diagnostics .evidence-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .evidence-table td:first-child{min-width:0;overflow-wrap:normal;word-break:normal}.power-diagnostics .evidence-table td:nth-child(2){overflow-wrap:break-word;word-break:normal}.power-diagnostics .evidence-table td:nth-child(3){overflow-wrap:anywhere}.power-diagnostics .diagnostics-table{overflow-x:auto;max-width:100%;border:1px solid var(--borderColor);border-radius:7px;margin:16px 0}.power-diagnostics table{width:100%;border-collapse:collapse}.power-diagnostics th,.power-diagnostics td{text-align:left;padding:14px 16px;border-bottom:1px solid var(--borderColor);vertical-align:top;overflow-wrap:anywhere}.power-diagnostics th{color:var(--textColorSecondary);font-weight:500;background:var(--contentColor)}.power-diagnostics td:first-child{min-width:240px}.power-diagnostics .numeric{text-align:right;min-width:170px;font-variant-numeric:tabular-nums}.power-diagnostics small{display:block;font-size:12px}.power-diagnostics .resource-cell strong{display:block;font-size:16px}.power-diagnostics .resource-cell>span{display:block;margin-top:8px}.power-diagnostics .diagnostics-explainer{margin:14px 0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:6px;overflow-wrap:anywhere}.power-diagnostics summary{cursor:pointer;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-empty{padding:28px;text-align:center;border:1px dashed var(--borderColor);border-radius:8px;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-notice{padding:12px 16px;border-left:3px solid var(--colorWarning,#d49a35);background:var(--contentColor)}.power-diagnostics .pending-heading{padding:18px;border:1px solid var(--borderColor);border-radius:8px;margin-top:20px}.power-diagnostics .pending-heading>strong{display:block;color:var(--textColorSecondary);margin-bottom:8px}
9
+ .power-diagnostics .timeline-legend{display:flex;flex-wrap:wrap;gap:14px;margin:18px 0}.power-diagnostics .timeline-type{--event-color:var(--textColorSecondary);display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .timeline-type:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--event-color);flex-shrink:0}.power-diagnostics .observed{--event-color:#7eacb5}.power-diagnostics .warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .restart{--event-color:#bc86df}.power-diagnostics .readiness{--event-color:var(--colorSuccess,#67b58b)}
10
+ .power-diagnostics .diagnostics-timeline{list-style:none;padding:0;margin:24px 0}.power-diagnostics .timeline-entry{display:grid;grid-template-columns:170px minmax(0,1fr);gap:30px;position:relative;padding-bottom:24px;--event-color:var(--textColorSecondary)}.power-diagnostics .timeline-entry.observed{--event-color:#7eacb5}.power-diagnostics .timeline-entry.warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .timeline-entry.rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .timeline-entry.restart{--event-color:#bc86df}.power-diagnostics .timeline-entry.readiness{--event-color:var(--colorSuccess,#67b58b)}.power-diagnostics .timeline-time time{white-space:pre-wrap}.power-diagnostics .timeline-time{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.power-diagnostics .timeline-content{position:relative;min-width:0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:7px;overflow-wrap:anywhere}.power-diagnostics .timeline-content:before{content:"";position:absolute;left:-22px;top:20px;width:11px;height:11px;background:var(--event-color);border:2px solid var(--mainBackground,var(--contentColor));border-radius:50%;z-index:1}.power-diagnostics .timeline-entry:before{content:"";position:absolute;left:183px;top:24px;bottom:-24px;width:2px;background:var(--borderColor)}.power-diagnostics .timeline-entry:last-child:before{display:none}.power-diagnostics .timeline-card-heading{padding-right:32px}.power-diagnostics .timeline-content .timeline-resource-action{position:absolute;top:10px;right:10px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;min-width:26px;padding:0;margin:0;border-color:transparent;background:transparent;color:var(--textColorSecondary)}.power-diagnostics .timeline-content .timeline-resource-action:hover{color:var(--primary);background:var(--contentColor);border-color:var(--borderColor)}.power-diagnostics .timeline-content small{white-space:pre-wrap}.power-diagnostics .timeline-resource-identity{display:flex;align-items:center;gap:5px;overflow-wrap:anywhere}.power-diagnostics .timeline-content h4{margin:5px 0;font-size:15px}.power-diagnostics .timeline-content p{margin:4px 0 10px}
11
+ .power-diagnostics .consumer-status{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;margin-left:4px;border-radius:4px;font-size:11px;vertical-align:middle;color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorSecondary) 8%,transparent)}.power-diagnostics .consumer-status.warning{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .consumer-status.error{color:var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 10%,transparent)}.power-diagnostics .consumer-status.healthy{color:var(--colorSuccess,#67b58b);background:color-mix(in srgb,var(--colorSuccess,#67b58b) 10%,transparent)}.power-diagnostics .resource-cell .request-burst{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:1px 5px;border-radius:4px;font-size:11px;color:var(--textColorSecondary);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .timeline-content{border-left:2px solid color-mix(in srgb,var(--event-color) 60%,var(--borderColor))}.power-diagnostics .timeline-entry.warning .timeline-content{border-color:color-mix(in srgb,var(--event-color) 35%,var(--borderColor));border-left-color:var(--event-color);background:color-mix(in srgb,var(--event-color) 4%,transparent)}.power-diagnostics .evidence-badge{display:inline-flex;align-items:center;gap:5px;border-radius:4px;padding:2px 6px;font-size:12px;color:var(--primary,#609ee8);background:color-mix(in srgb,var(--primary,#609ee8) 9%,transparent);margin-bottom:4px}.power-diagnostics .evidence-badge.inferred{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 9%,transparent)}
12
+ .power-diagnostics .diagnostics-summary>button.summary-card{margin:0;width:100%;text-align:left;line-height:inherit;font:inherit}.power-diagnostics .diagnostics-summary>button.summary-card:hover{border-color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 5%,var(--contentColor))}
13
+ @container diagnostics (min-width:701px) and (max-width:900px){.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px}.power-diagnostics .consumers-toolbar>.warning-filter{grid-column:1/-1}}
14
+ .power-diagnostics .consumer-identity-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;margin-bottom:4px}.power-diagnostics .consumer-identity-label{min-width:0;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-identity-row .consumer-resource-link{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0;margin:0;padding:0;border:0;background:transparent;text-align:left;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-resource-link:hover{color:var(--primary)}.power-diagnostics .consumer-resource-link>.Icon{flex-shrink:0;opacity:.65}.power-diagnostics .consumer-expand-slot{display:flex;justify-content:flex-end;flex-shrink:0;padding-left:10px;border-left:1px solid var(--borderColor)}.power-diagnostics .consumer-identity-row .consumer-expand{display:flex;align-items:center;justify-content:center;width:28px;height:28px;min-width:28px;margin:0;padding:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary)}.power-diagnostics .consumer-identity-row .consumer-expand:hover{color:var(--primary);border-color:var(--primary)}
15
+ .power-diagnostics .consumer-depth-1>td:first-child{padding-left:32px;position:relative}.power-diagnostics .consumer-depth-2>td:first-child{padding-left:48px;position:relative}.power-diagnostics .consumer-depth-1>td:first-child:before,.power-diagnostics .consumer-depth-2>td:first-child:before{content:"";position:absolute;top:0;bottom:0;left:16px;width:1px;background:var(--borderColor)}.power-diagnostics .consumer-depth-2>td:first-child:before{left:32px}.power-diagnostics .consumer-pod-row>td{background:color-mix(in srgb,var(--textColorSecondary) 3%,transparent)}.power-diagnostics .consumer-namespace-row>td:first-child{font-weight:500}.power-diagnostics .namespace-identity{display:inline-flex;align-items:center;gap:7px;font-size:14px}.power-diagnostics .namespace-identity>.Icon{color:var(--primary)}
16
+ .power-diagnostics .consumers-table{table-layout:fixed;min-width:900px}.power-diagnostics .consumers-table .metric-column{width:205px}.power-diagnostics .consumers-table .unscheduled-column{width:165px}.power-diagnostics .consumers-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .consumers-table th:last-child{white-space:normal;word-break:normal;overflow-wrap:normal}.power-diagnostics .consumers-table td{padding-top:12px;padding-bottom:12px}.power-diagnostics .consumer-identity-main{flex:1;min-width:0}.power-diagnostics .consumer-title-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.power-diagnostics .consumer-title-line .consumer-status{margin-left:0}.power-diagnostics .consumer-subtitle{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:5px;line-height:1.4}.power-diagnostics .consumer-subtitle>.Icon{flex-shrink:0}.power-diagnostics .consumer-row-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.power-diagnostics .consumer-identity-row{align-items:flex-start;margin-bottom:0}.power-diagnostics .consumer-identity-row .consumer-resource-link{font-size:14px;color:var(--textColorPrimary)}.power-diagnostics .resource-value,.power-diagnostics .resource-request{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.power-diagnostics .resource-value small,.power-diagnostics .resource-request small{font-size:11px;white-space:nowrap}.power-diagnostics .resource-cell .resource-value strong{font-size:15px;font-weight:600}.power-diagnostics .resource-request{margin-top:3px}.power-diagnostics .resource-request>span{font-size:12px}.power-diagnostics .resource-cell .resource-coverage{margin-top:4px;font-size:10px;line-height:1.4}.power-diagnostics .unscheduled-cell>div{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.power-diagnostics .unscheduled-cell>div+div{margin-top:5px}.power-diagnostics .unscheduled-cell small{font-size:11px}.power-diagnostics .unscheduled-cell span{font-size:12px}.power-diagnostics .unscheduled-cell.has-requests span{color:var(--colorWarning,#e0a134)}.power-diagnostics .unscheduled-empty{color:var(--textColorSecondary);font-size:12px}.power-diagnostics .timeline-entry{color:var(--textColorPrimary)}.power-diagnostics .timeline-entry.warning .timeline-content h4{color:var(--colorWarning,#e0a134)}.power-diagnostics .pending-heading{padding:14px}.power-diagnostics .pending-heading>p{color:var(--textColorSecondary);margin-bottom:0}.power-diagnostics .diagnostics-summary{gap:10px;margin-bottom:16px}.power-diagnostics .diagnostics-summary>.summary-card{padding:10px 14px}.power-diagnostics .diagnostics-summary strong{font-size:22px}.power-diagnostics .diagnostics-summary .summary-icon{width:36px;height:36px;border-radius:8px}.power-diagnostics .diagnostics-summary .summary-card>div>span{font-size:12px}.power-diagnostics .diagnostics-explainer{padding:9px 12px}.power-diagnostics .view-intro{margin:12px 0}.power-diagnostics .view-intro p{font-size:12px}
17
+ .power-diagnostics .pending-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.power-diagnostics .pending-title-row>div{min-width:0}.power-diagnostics .pending-title-row strong{font-size:12px;color:var(--textColorSecondary);overflow-wrap:anywhere}.power-diagnostics .pending-state-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px}.power-diagnostics .pending-state-row h3{margin:0}.power-diagnostics .pending-title-row .pending-open-action{margin:0;flex-shrink:0;min-height:28px;padding:3px 8px;font-size:12px;white-space:nowrap}.power-diagnostics .pending-request-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.power-diagnostics .pending-request-badges>span{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary);font-size:12px}.power-diagnostics .pending-request-badges strong{color:var(--textColorPrimary);font-weight:500;font-variant-numeric:tabular-nums}
18
+ .power-diagnostics .attention-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px}.power-diagnostics .attention-empty strong{font-size:15px;color:var(--textColorPrimary)}.power-diagnostics .attention-empty small{max-width:520px;line-height:1.5}.power-diagnostics .attention-empty>.Icon{color:var(--textColorSecondary)}.power-diagnostics .attention-empty.all-ready>.Icon,.power-diagnostics .attention-empty.all-ready strong{color:var(--colorSuccess,#67b58b)}.power-diagnostics .attention-empty.all-ready{border-color:color-mix(in srgb,var(--colorSuccess,#67b58b) 35%,var(--borderColor));background:color-mix(in srgb,var(--colorSuccess,#67b58b) 3%,transparent)}.power-diagnostics .consumer-tone-error>td{background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}.power-diagnostics .consumer-tone-warning>td{background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}.power-diagnostics .consumer-tone-error>td:first-child{box-shadow:inset 3px 0 var(--colorError,#e56d79)}.power-diagnostics .consumer-tone-warning>td:first-child{box-shadow:inset 3px 0 var(--colorWarning,#e0a134)}
19
+ @media(max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}
20
+
21
+ @container diagnostics (max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}
22
+
23
+ .power-diagnostics .diagnostics-select .Select__control{background:color-mix(in srgb,var(--textColorPrimary) 5%,var(--contentColor));border:1px solid var(--inputControlBorder,var(--halfGray));box-shadow:none;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}
24
+ .power-diagnostics .diagnostics-select .Select__control:hover{border-color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorPrimary) 8%,var(--contentColor))}
25
+ .power-diagnostics .diagnostics-select .Select__control--is-focused{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}
26
+ .power-diagnostics .diagnostics-select .Select__single-value{color:var(--textColorPrimary)}
27
+ .power-diagnostics .diagnostics-select .Select__indicators{border-left:1px solid var(--borderFaintColor);align-self:stretch;padding:0 3px}
28
+ .power-diagnostics .diagnostics-select .Select__dropdown-indicator{opacity:.85;color:var(--textColorSecondary)}
29
+ @media(prefers-reduced-motion:reduce){.power-diagnostics .diagnostics-select .Select__control{transition:none}}
30
+
31
+ .power-diagnostics .diagnostics-summary .summary-icon .Icon,.power-diagnostics .diagnostics-summary .summary-icon .Icon>.icon{color:var(--summary-color)}
32
+ .power-diagnostics .pending-heading.error{border-left:3px solid var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}
33
+ .power-diagnostics .pending-heading.warning{border-left:3px solid var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}
34
+ .power-diagnostics .pending-heading>.consumer-status{margin:0 0 10px}
35
+ `;
36
+ //#endregion
37
+ exports.diagnosticsStyles = diagnosticsStyles;
38
+
39
+ //# sourceMappingURL=diagnostics.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.css.js","names":[],"sources":["../../src/renderer/diagnostics.css.ts"],"sourcesContent":["export const diagnosticsStyles = `\n.power-diagnostics{container-type:inline-size;container-name:diagnostics;box-sizing:border-box;color:var(--textColorPrimary);max-width:100%;line-height:1.5}\n.power-diagnostics *{box-sizing:border-box}.power-diagnostics h2{margin:0 0 6px;font-size:24px}.power-diagnostics h3{margin:0 0 6px;font-size:18px}.power-diagnostics p{margin:8px 0 16px}.power-diagnostics .page-intro,.power-diagnostics small,.power-diagnostics .view-intro p{color:var(--textColorSecondary)}\n.power-diagnostics nav{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px;border-bottom:1px solid var(--borderColor);padding-bottom:8px}.power-diagnostics button{cursor:pointer;display:inline-flex;align-items:center;gap:6px;border-radius:5px;border:1px solid var(--borderColor);background:var(--contentColor);color:var(--textColorPrimary);font:inherit;padding:6px 10px;margin:3px 4px 3px 0}.power-diagnostics button:hover{border-color:var(--primary)}.power-diagnostics button[aria-pressed=true]{color:var(--primary);border-color:var(--primary)}.power-diagnostics button:disabled{opacity:.5;cursor:default}.power-diagnostics :is(button,input,summary):focus-visible{outline:2px solid var(--primary);outline-offset:2px}\n.power-diagnostics .diagnostics-header{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.power-diagnostics .snapshot-meta{white-space:pre-wrap;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .view-intro{margin:16px 0}.power-diagnostics .view-intro p{margin:4px 0 0}.power-diagnostics .diagnostics-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:22px}.power-diagnostics .diagnostics-summary>.summary-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--borderColor);border-radius:8px;background:var(--contentColor)}.power-diagnostics .diagnostics-summary strong{display:block;font-size:25px;font-variant-numeric:tabular-nums}.power-diagnostics .diagnostics-summary span{color:var(--textColorSecondary)}.power-diagnostics .summary-card{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.workloads{--summary-color:#bc86df}.power-diagnostics .summary-card.pods{--summary-color:var(--primary,#609ee8)}.power-diagnostics .summary-card.pending{--summary-color:var(--colorSuccess,#67b58b)}.power-diagnostics .summary-card.pending.unavailable{--summary-color:var(--textColorSecondary)}.power-diagnostics .summary-card.unavailable strong{font-size:18px}.power-diagnostics .summary-card.attention{--summary-color:var(--colorWarning,#e0a134)}.power-diagnostics .summary-card strong{color:var(--summary-color)}.power-diagnostics .diagnostics-summary .summary-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:42px;height:42px;border-radius:10px;color:var(--summary-color);background:color-mix(in srgb,var(--summary-color) 12%,transparent)}.power-diagnostics .summary-icon .Icon{color:inherit}\n.power-diagnostics .toolbar{display:grid;align-items:end;gap:16px;margin-bottom:16px}.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px max-content}.power-diagnostics .timeline-toolbar{grid-template-columns:minmax(200px,1fr) 240px max-content}.power-diagnostics .toolbar>label{display:flex;flex-direction:column;gap:6px;min-width:0;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-select{display:block;min-width:180px;max-width:100%;vertical-align:middle}.power-diagnostics .toolbar .diagnostics-select{min-width:0;width:100%}.power-diagnostics .diagnostics-select>div{width:100%}.power-diagnostics .diagnostics-select .Select{min-width:0;width:100%}.power-diagnostics .diagnostics-select .Select__control{min-height:32px;height:32px}.power-diagnostics .diagnostics-select .Select__value-container{padding:0 8px;min-width:0}.power-diagnostics .diagnostics-select .Select__single-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.power-diagnostics .diagnostics-select .Select__input-container{margin:0;padding:0}.power-diagnostics .diagnostics-select .Select__indicator{padding:5px 8px}.power-diagnostics .diagnostics-input{display:block;min-width:0;height:32px}.power-diagnostics .diagnostics-input .Input{height:32px;min-height:32px;margin:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);padding:0 9px}.power-diagnostics .diagnostics-input .Input>.input-area{height:30px;min-height:0;min-width:0;padding:0;border:0;border-bottom:0}.power-diagnostics .diagnostics-input .Input>.input-area:after,.power-diagnostics .diagnostics-input .Input>.input-area:before{display:none}.power-diagnostics .diagnostics-input .Input:focus-within{border-color:var(--primary)}.power-diagnostics .diagnostics-input input{width:100%;max-width:100%;height:30px;min-height:0;padding:0;border:0;border-bottom:0;outline:none;background:transparent;color:var(--textColorPrimary);font:inherit}.power-diagnostics .diagnostics-input .Input:after,.power-diagnostics .diagnostics-input .Input:before{display:none}.power-diagnostics .warning-filter{display:flex;align-items:center;min-height:32px;padding:0 0 1px}.power-diagnostics .warning-filter .Checkbox{margin:0;white-space:nowrap}.power-diagnostics .warning-filter label{display:inline-flex;align-items:center;flex-direction:row;color:var(--textColorPrimary)}\n.power-diagnostics .evidence-table{min-width:660px;table-layout:fixed}.power-diagnostics .evidence-source{width:180px}.power-diagnostics .evidence-node{width:160px}.power-diagnostics .evidence-finding{width:auto}.power-diagnostics .evidence-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .evidence-table td:first-child{min-width:0;overflow-wrap:normal;word-break:normal}.power-diagnostics .evidence-table td:nth-child(2){overflow-wrap:break-word;word-break:normal}.power-diagnostics .evidence-table td:nth-child(3){overflow-wrap:anywhere}.power-diagnostics .diagnostics-table{overflow-x:auto;max-width:100%;border:1px solid var(--borderColor);border-radius:7px;margin:16px 0}.power-diagnostics table{width:100%;border-collapse:collapse}.power-diagnostics th,.power-diagnostics td{text-align:left;padding:14px 16px;border-bottom:1px solid var(--borderColor);vertical-align:top;overflow-wrap:anywhere}.power-diagnostics th{color:var(--textColorSecondary);font-weight:500;background:var(--contentColor)}.power-diagnostics td:first-child{min-width:240px}.power-diagnostics .numeric{text-align:right;min-width:170px;font-variant-numeric:tabular-nums}.power-diagnostics small{display:block;font-size:12px}.power-diagnostics .resource-cell strong{display:block;font-size:16px}.power-diagnostics .resource-cell>span{display:block;margin-top:8px}.power-diagnostics .diagnostics-explainer{margin:14px 0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:6px;overflow-wrap:anywhere}.power-diagnostics summary{cursor:pointer;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-empty{padding:28px;text-align:center;border:1px dashed var(--borderColor);border-radius:8px;color:var(--textColorSecondary)}.power-diagnostics .diagnostics-notice{padding:12px 16px;border-left:3px solid var(--colorWarning,#d49a35);background:var(--contentColor)}.power-diagnostics .pending-heading{padding:18px;border:1px solid var(--borderColor);border-radius:8px;margin-top:20px}.power-diagnostics .pending-heading>strong{display:block;color:var(--textColorSecondary);margin-bottom:8px}\n.power-diagnostics .timeline-legend{display:flex;flex-wrap:wrap;gap:14px;margin:18px 0}.power-diagnostics .timeline-type{--event-color:var(--textColorSecondary);display:inline-flex;align-items:center;gap:7px;font-size:12px;color:var(--textColorSecondary)}.power-diagnostics .timeline-type:before{content:\"\";width:8px;height:8px;border-radius:50%;background:var(--event-color);flex-shrink:0}.power-diagnostics .observed{--event-color:#7eacb5}.power-diagnostics .warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .restart{--event-color:#bc86df}.power-diagnostics .readiness{--event-color:var(--colorSuccess,#67b58b)}\n.power-diagnostics .diagnostics-timeline{list-style:none;padding:0;margin:24px 0}.power-diagnostics .timeline-entry{display:grid;grid-template-columns:170px minmax(0,1fr);gap:30px;position:relative;padding-bottom:24px;--event-color:var(--textColorSecondary)}.power-diagnostics .timeline-entry.observed{--event-color:#7eacb5}.power-diagnostics .timeline-entry.warning{--event-color:var(--colorWarning,#e0a134)}.power-diagnostics .timeline-entry.rollout{--event-color:var(--primary,#609ee8)}.power-diagnostics .timeline-entry.restart{--event-color:#bc86df}.power-diagnostics .timeline-entry.readiness{--event-color:var(--colorSuccess,#67b58b)}.power-diagnostics .timeline-time time{white-space:pre-wrap}.power-diagnostics .timeline-time{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.power-diagnostics .timeline-content{position:relative;min-width:0;padding:12px 16px;border:1px solid var(--borderColor);border-radius:7px;overflow-wrap:anywhere}.power-diagnostics .timeline-content:before{content:\"\";position:absolute;left:-22px;top:20px;width:11px;height:11px;background:var(--event-color);border:2px solid var(--mainBackground,var(--contentColor));border-radius:50%;z-index:1}.power-diagnostics .timeline-entry:before{content:\"\";position:absolute;left:183px;top:24px;bottom:-24px;width:2px;background:var(--borderColor)}.power-diagnostics .timeline-entry:last-child:before{display:none}.power-diagnostics .timeline-card-heading{padding-right:32px}.power-diagnostics .timeline-content .timeline-resource-action{position:absolute;top:10px;right:10px;display:flex;align-items:center;justify-content:center;width:26px;height:26px;min-width:26px;padding:0;margin:0;border-color:transparent;background:transparent;color:var(--textColorSecondary)}.power-diagnostics .timeline-content .timeline-resource-action:hover{color:var(--primary);background:var(--contentColor);border-color:var(--borderColor)}.power-diagnostics .timeline-content small{white-space:pre-wrap}.power-diagnostics .timeline-resource-identity{display:flex;align-items:center;gap:5px;overflow-wrap:anywhere}.power-diagnostics .timeline-content h4{margin:5px 0;font-size:15px}.power-diagnostics .timeline-content p{margin:4px 0 10px}\n.power-diagnostics .consumer-status{display:inline-flex;align-items:center;gap:4px;padding:1px 6px;margin-left:4px;border-radius:4px;font-size:11px;vertical-align:middle;color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorSecondary) 8%,transparent)}.power-diagnostics .consumer-status.warning{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .consumer-status.error{color:var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 10%,transparent)}.power-diagnostics .consumer-status.healthy{color:var(--colorSuccess,#67b58b);background:color-mix(in srgb,var(--colorSuccess,#67b58b) 10%,transparent)}.power-diagnostics .resource-cell .request-burst{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:1px 5px;border-radius:4px;font-size:11px;color:var(--textColorSecondary);background:color-mix(in srgb,var(--colorWarning,#e0a134) 10%,transparent)}.power-diagnostics .timeline-content{border-left:2px solid color-mix(in srgb,var(--event-color) 60%,var(--borderColor))}.power-diagnostics .timeline-entry.warning .timeline-content{border-color:color-mix(in srgb,var(--event-color) 35%,var(--borderColor));border-left-color:var(--event-color);background:color-mix(in srgb,var(--event-color) 4%,transparent)}.power-diagnostics .evidence-badge{display:inline-flex;align-items:center;gap:5px;border-radius:4px;padding:2px 6px;font-size:12px;color:var(--primary,#609ee8);background:color-mix(in srgb,var(--primary,#609ee8) 9%,transparent);margin-bottom:4px}.power-diagnostics .evidence-badge.inferred{color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 9%,transparent)}\n.power-diagnostics .diagnostics-summary>button.summary-card{margin:0;width:100%;text-align:left;line-height:inherit;font:inherit}.power-diagnostics .diagnostics-summary>button.summary-card:hover{border-color:var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 5%,var(--contentColor))}\n@container diagnostics (min-width:701px) and (max-width:900px){.power-diagnostics .consumers-toolbar{grid-template-columns:160px minmax(160px,1fr) 180px}.power-diagnostics .consumers-toolbar>.warning-filter{grid-column:1/-1}}\n.power-diagnostics .consumer-identity-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-width:0;margin-bottom:4px}.power-diagnostics .consumer-identity-label{min-width:0;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-identity-row .consumer-resource-link{display:inline-flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0;margin:0;padding:0;border:0;background:transparent;text-align:left;font-weight:500;overflow-wrap:anywhere}.power-diagnostics .consumer-resource-link:hover{color:var(--primary)}.power-diagnostics .consumer-resource-link>.Icon{flex-shrink:0;opacity:.65}.power-diagnostics .consumer-expand-slot{display:flex;justify-content:flex-end;flex-shrink:0;padding-left:10px;border-left:1px solid var(--borderColor)}.power-diagnostics .consumer-identity-row .consumer-expand{display:flex;align-items:center;justify-content:center;width:28px;height:28px;min-width:28px;margin:0;padding:0;border:1px solid var(--borderColor);border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary)}.power-diagnostics .consumer-identity-row .consumer-expand:hover{color:var(--primary);border-color:var(--primary)}\n.power-diagnostics .consumer-depth-1>td:first-child{padding-left:32px;position:relative}.power-diagnostics .consumer-depth-2>td:first-child{padding-left:48px;position:relative}.power-diagnostics .consumer-depth-1>td:first-child:before,.power-diagnostics .consumer-depth-2>td:first-child:before{content:\"\";position:absolute;top:0;bottom:0;left:16px;width:1px;background:var(--borderColor)}.power-diagnostics .consumer-depth-2>td:first-child:before{left:32px}.power-diagnostics .consumer-pod-row>td{background:color-mix(in srgb,var(--textColorSecondary) 3%,transparent)}.power-diagnostics .consumer-namespace-row>td:first-child{font-weight:500}.power-diagnostics .namespace-identity{display:inline-flex;align-items:center;gap:7px;font-size:14px}.power-diagnostics .namespace-identity>.Icon{color:var(--primary)}\n.power-diagnostics .consumers-table{table-layout:fixed;min-width:900px}.power-diagnostics .consumers-table .metric-column{width:205px}.power-diagnostics .consumers-table .unscheduled-column{width:165px}.power-diagnostics .consumers-table th{white-space:nowrap;overflow-wrap:normal}.power-diagnostics .consumers-table th:last-child{white-space:normal;word-break:normal;overflow-wrap:normal}.power-diagnostics .consumers-table td{padding-top:12px;padding-bottom:12px}.power-diagnostics .consumer-identity-main{flex:1;min-width:0}.power-diagnostics .consumer-title-line{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.power-diagnostics .consumer-title-line .consumer-status{margin-left:0}.power-diagnostics .consumer-subtitle{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:5px;line-height:1.4}.power-diagnostics .consumer-subtitle>.Icon{flex-shrink:0}.power-diagnostics .consumer-row-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.power-diagnostics .consumer-identity-row{align-items:flex-start;margin-bottom:0}.power-diagnostics .consumer-identity-row .consumer-resource-link{font-size:14px;color:var(--textColorPrimary)}.power-diagnostics .resource-value,.power-diagnostics .resource-request{display:flex;align-items:baseline;justify-content:space-between;gap:10px}.power-diagnostics .resource-value small,.power-diagnostics .resource-request small{font-size:11px;white-space:nowrap}.power-diagnostics .resource-cell .resource-value strong{font-size:15px;font-weight:600}.power-diagnostics .resource-request{margin-top:3px}.power-diagnostics .resource-request>span{font-size:12px}.power-diagnostics .resource-cell .resource-coverage{margin-top:4px;font-size:10px;line-height:1.4}.power-diagnostics .unscheduled-cell>div{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.power-diagnostics .unscheduled-cell>div+div{margin-top:5px}.power-diagnostics .unscheduled-cell small{font-size:11px}.power-diagnostics .unscheduled-cell span{font-size:12px}.power-diagnostics .unscheduled-cell.has-requests span{color:var(--colorWarning,#e0a134)}.power-diagnostics .unscheduled-empty{color:var(--textColorSecondary);font-size:12px}.power-diagnostics .timeline-entry{color:var(--textColorPrimary)}.power-diagnostics .timeline-entry.warning .timeline-content h4{color:var(--colorWarning,#e0a134)}.power-diagnostics .pending-heading{padding:14px}.power-diagnostics .pending-heading>p{color:var(--textColorSecondary);margin-bottom:0}.power-diagnostics .diagnostics-summary{gap:10px;margin-bottom:16px}.power-diagnostics .diagnostics-summary>.summary-card{padding:10px 14px}.power-diagnostics .diagnostics-summary strong{font-size:22px}.power-diagnostics .diagnostics-summary .summary-icon{width:36px;height:36px;border-radius:8px}.power-diagnostics .diagnostics-summary .summary-card>div>span{font-size:12px}.power-diagnostics .diagnostics-explainer{padding:9px 12px}.power-diagnostics .view-intro{margin:12px 0}.power-diagnostics .view-intro p{font-size:12px}\n.power-diagnostics .pending-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}.power-diagnostics .pending-title-row>div{min-width:0}.power-diagnostics .pending-title-row strong{font-size:12px;color:var(--textColorSecondary);overflow-wrap:anywhere}.power-diagnostics .pending-state-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px}.power-diagnostics .pending-state-row h3{margin:0}.power-diagnostics .pending-title-row .pending-open-action{margin:0;flex-shrink:0;min-height:28px;padding:3px 8px;font-size:12px;white-space:nowrap}.power-diagnostics .pending-request-badges{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.power-diagnostics .pending-request-badges>span{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border-radius:4px;background:var(--contentColor);color:var(--textColorSecondary);font-size:12px}.power-diagnostics .pending-request-badges strong{color:var(--textColorPrimary);font-weight:500;font-variant-numeric:tabular-nums}\n.power-diagnostics .attention-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:20px}.power-diagnostics .attention-empty strong{font-size:15px;color:var(--textColorPrimary)}.power-diagnostics .attention-empty small{max-width:520px;line-height:1.5}.power-diagnostics .attention-empty>.Icon{color:var(--textColorSecondary)}.power-diagnostics .attention-empty.all-ready>.Icon,.power-diagnostics .attention-empty.all-ready strong{color:var(--colorSuccess,#67b58b)}.power-diagnostics .attention-empty.all-ready{border-color:color-mix(in srgb,var(--colorSuccess,#67b58b) 35%,var(--borderColor));background:color-mix(in srgb,var(--colorSuccess,#67b58b) 3%,transparent)}.power-diagnostics .consumer-tone-error>td{background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}.power-diagnostics .consumer-tone-warning>td{background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}.power-diagnostics .consumer-tone-error>td:first-child{box-shadow:inset 3px 0 var(--colorError,#e56d79)}.power-diagnostics .consumer-tone-warning>td:first-child{box-shadow:inset 3px 0 var(--colorWarning,#e0a134)}\n@media(max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}\n\n@container diagnostics (max-width:700px){.power-diagnostics .diagnostics-summary{grid-template-columns:1fr}.power-diagnostics .toolbar{grid-template-columns:minmax(0,1fr);align-items:stretch}.power-diagnostics .toolbar>*,.power-diagnostics .diagnostics-select{width:100%;min-width:0}.power-diagnostics .warning-filter{padding:0}.power-diagnostics .timeline-entry{grid-template-columns:minmax(0,1fr);gap:6px;padding-left:24px}.power-diagnostics .timeline-time{text-align:left;padding:0}.power-diagnostics .timeline-entry:before{left:5px;top:44px}.power-diagnostics .timeline-content:before{left:-24px}.power-diagnostics .timeline-content{margin-left:0}}\n\n.power-diagnostics .diagnostics-select .Select__control{background:color-mix(in srgb,var(--textColorPrimary) 5%,var(--contentColor));border:1px solid var(--inputControlBorder,var(--halfGray));box-shadow:none;cursor:pointer;transition:border-color .15s,background .15s,box-shadow .15s}\n.power-diagnostics .diagnostics-select .Select__control:hover{border-color:var(--textColorSecondary);background:color-mix(in srgb,var(--textColorPrimary) 8%,var(--contentColor))}\n.power-diagnostics .diagnostics-select .Select__control--is-focused{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}\n.power-diagnostics .diagnostics-select .Select__single-value{color:var(--textColorPrimary)}\n.power-diagnostics .diagnostics-select .Select__indicators{border-left:1px solid var(--borderFaintColor);align-self:stretch;padding:0 3px}\n.power-diagnostics .diagnostics-select .Select__dropdown-indicator{opacity:.85;color:var(--textColorSecondary)}\n@media(prefers-reduced-motion:reduce){.power-diagnostics .diagnostics-select .Select__control{transition:none}}\n\n.power-diagnostics .diagnostics-summary .summary-icon .Icon,.power-diagnostics .diagnostics-summary .summary-icon .Icon>.icon{color:var(--summary-color)}\n.power-diagnostics .pending-heading.error{border-left:3px solid var(--colorError,#e56d79);background:color-mix(in srgb,var(--colorError,#e56d79) 4%,transparent)}\n.power-diagnostics .pending-heading.warning{border-left:3px solid var(--colorWarning,#e0a134);background:color-mix(in srgb,var(--colorWarning,#e0a134) 3%,transparent)}\n.power-diagnostics .pending-heading>.consumer-status{margin:0 0 10px}\n`;\n"],"mappings":";AAAA,IAAa,oBAAoB"}