@osdk/react-devtools 0.10.0 → 0.10.1-main-e39a72892d538f3130e2cd51cee05d83d11fa493

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 (199) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/esm/DevToolsContext.js.map +1 -1
  3. package/build/esm/components/ActionMetrics.js +2 -2
  4. package/build/esm/components/ActionMetrics.js.map +1 -1
  5. package/build/esm/components/BubbleChart.js +1 -1
  6. package/build/esm/components/BubbleChart.js.map +1 -1
  7. package/build/esm/components/CacheInspectorTab.js +1 -1
  8. package/build/esm/components/CacheInspectorTab.js.map +1 -1
  9. package/build/esm/components/CacheMetrics.js +1 -1
  10. package/build/esm/components/CacheMetrics.js.map +1 -1
  11. package/build/esm/components/ComponentCard.js +1 -1
  12. package/build/esm/components/ComponentCard.js.map +1 -1
  13. package/build/esm/components/ComputeTab.js +6 -6
  14. package/build/esm/components/ComputeTab.js.map +1 -1
  15. package/build/esm/components/CopyableCodeBlock.js.map +1 -1
  16. package/build/esm/components/DebuggingTab.js +2 -2
  17. package/build/esm/components/DebuggingTab.js.map +1 -1
  18. package/build/esm/components/HookRow.js.map +1 -1
  19. package/build/esm/components/ImprovementsTab.js.map +1 -1
  20. package/build/esm/components/InspectorSelectionHeader.js.map +1 -1
  21. package/build/esm/components/InterceptTab.js +5 -5
  22. package/build/esm/components/InterceptTab.js.map +1 -1
  23. package/build/esm/components/IssueCard.js.map +1 -1
  24. package/build/esm/components/LogEntryCard.js.map +1 -1
  25. package/build/esm/components/MockEditor.js.map +1 -1
  26. package/build/esm/components/MonitorErrorBoundary.js.map +1 -1
  27. package/build/esm/components/MonitoringPanel.js +1 -1
  28. package/build/esm/components/MonitoringPanel.js.map +1 -1
  29. package/build/esm/components/ObjectLoadingMetrics.js.map +1 -1
  30. package/build/esm/components/OsdkAppErrorBoundary.js.map +1 -1
  31. package/build/esm/components/OsdkDevTools.js.map +1 -1
  32. package/build/esm/components/OverrideEditor.js.map +1 -1
  33. package/build/esm/components/PerformanceTab.js +8 -8
  34. package/build/esm/components/PerformanceTab.js.map +1 -1
  35. package/build/esm/components/PrimitiveSelectionPanel.js +1 -1
  36. package/build/esm/components/PrimitiveSelectionPanel.js.map +1 -1
  37. package/build/esm/components/resolveComponentName.js +2 -2
  38. package/build/esm/components/resolveComponentName.js.map +1 -1
  39. package/build/esm/components/testHelpers.js.map +1 -1
  40. package/build/esm/fiber/DegradationNotice.js +2 -2
  41. package/build/esm/fiber/DegradationNotice.js.map +1 -1
  42. package/build/esm/fiber/DevtoolsHook.js +4 -4
  43. package/build/esm/fiber/DevtoolsHook.js.map +1 -1
  44. package/build/esm/fiber/FiberAccess.js.map +1 -1
  45. package/build/esm/fiber/FiberInspection.js.map +1 -1
  46. package/build/esm/fiber/FiberTags.js.map +1 -1
  47. package/build/esm/fiber/HookStateInspector.js.map +1 -1
  48. package/build/esm/fiber/SafeFiberOperation.js.map +1 -1
  49. package/build/esm/fiber/capabilities.js.map +1 -1
  50. package/build/esm/fiber/traverseFiber.js.map +1 -1
  51. package/build/esm/fiber/types.js.map +1 -1
  52. package/build/esm/fiber/validation.js +1 -1
  53. package/build/esm/fiber/validation.js.map +1 -1
  54. package/build/esm/hooks/createPollingStore.js.map +1 -1
  55. package/build/esm/hooks/useActiveComponents.js.map +1 -1
  56. package/build/esm/hooks/useComponentRegistry.js.map +1 -1
  57. package/build/esm/hooks/useComputeSelectors.js.map +1 -1
  58. package/build/esm/hooks/useConsoleLogs.js.map +1 -1
  59. package/build/esm/hooks/useInspectorSelection.js.map +1 -1
  60. package/build/esm/hooks/useMetrics.js.map +1 -1
  61. package/build/esm/hooks/usePersistedState.js.map +1 -1
  62. package/build/esm/hooks/useRecommendations.js +1 -1
  63. package/build/esm/hooks/useRecommendations.js.map +1 -1
  64. package/build/esm/hooks/useSharedTick.js.map +1 -1
  65. package/build/esm/hooks/useTimeElapsed.js.map +1 -1
  66. package/build/esm/hooks/useTrackerSubscription.js.map +1 -1
  67. package/build/esm/hooks/useUnusedFieldAnalysis.js.map +1 -1
  68. package/build/esm/inspector/ClickToInspectSystem.js.map +1 -1
  69. package/build/esm/inspector/components/ComponentLabel.js.map +1 -1
  70. package/build/esm/inspector/components/InspectorBanner.js.map +1 -1
  71. package/build/esm/inspector/components/InspectorOverlay.js.map +1 -1
  72. package/build/esm/inspector/components/SelectionHighlight.js.map +1 -1
  73. package/build/esm/inspector/createClickToInspect.js.map +1 -1
  74. package/build/esm/inspector/hooks/useAnimatedBounds.js.map +1 -1
  75. package/build/esm/inspector/inspectorController.js.map +1 -1
  76. package/build/esm/inspector/utils/elementBounds.js.map +1 -1
  77. package/build/esm/inspector/utils/interpolation.js.map +1 -1
  78. package/build/esm/inspector/utils/labelPositioning.js.map +1 -1
  79. package/build/esm/mocking/MockCacheKeyGenerator.js +3 -3
  80. package/build/esm/mocking/MockCacheKeyGenerator.js.map +1 -1
  81. package/build/esm/mocking/MockManager.js +4 -4
  82. package/build/esm/mocking/MockManager.js.map +1 -1
  83. package/build/esm/prototyping/PrototypeOverrideStore.js +1 -1
  84. package/build/esm/prototyping/PrototypeOverrideStore.js.map +1 -1
  85. package/build/esm/register.js.map +1 -1
  86. package/build/esm/store/ComputeStore.js.map +1 -1
  87. package/build/esm/store/ConsoleLogStore.js +2 -2
  88. package/build/esm/store/ConsoleLogStore.js.map +1 -1
  89. package/build/esm/store/MetricsStore.js.map +1 -1
  90. package/build/esm/store/MonitorStore.js.map +1 -1
  91. package/build/esm/store/WindowErrorStore.js.map +1 -1
  92. package/build/esm/styles.js.map +1 -1
  93. package/build/esm/types/compute.js.map +1 -1
  94. package/build/esm/utils/ActionLifecycleTracker.js.map +1 -1
  95. package/build/esm/utils/CacheEfficiencyAnalyzer.js.map +1 -1
  96. package/build/esm/utils/ComponentContextCapture.js +10 -10
  97. package/build/esm/utils/ComponentContextCapture.js.map +1 -1
  98. package/build/esm/utils/ComponentPrimitiveDiscovery.js.map +1 -1
  99. package/build/esm/utils/ComponentQueryRegistry.js +8 -8
  100. package/build/esm/utils/ComponentQueryRegistry.js.map +1 -1
  101. package/build/esm/utils/ComputeMonitor.js +2 -2
  102. package/build/esm/utils/ComputeMonitor.js.map +1 -1
  103. package/build/esm/utils/EventTimeline.js.map +1 -1
  104. package/build/esm/utils/LinkTraversalTracker.js +2 -2
  105. package/build/esm/utils/LinkTraversalTracker.js.map +1 -1
  106. package/build/esm/utils/MockDataGenerator.js +4 -4
  107. package/build/esm/utils/MockDataGenerator.js.map +1 -1
  108. package/build/esm/utils/ObservableClientMonitor.js +2 -2
  109. package/build/esm/utils/ObservableClientMonitor.js.map +1 -1
  110. package/build/esm/utils/PerformanceRecommendationEngine.js +1 -1
  111. package/build/esm/utils/PerformanceRecommendationEngine.js.map +1 -1
  112. package/build/esm/utils/PropertyAccessTracker.js +3 -3
  113. package/build/esm/utils/PropertyAccessTracker.js.map +1 -1
  114. package/build/esm/utils/RecommendationMatcher.js.map +1 -1
  115. package/build/esm/utils/SubscriptionTracker.js +1 -1
  116. package/build/esm/utils/SubscriptionTracker.js.map +1 -1
  117. package/build/esm/utils/UnusedFieldAnalyzer.js +6 -7
  118. package/build/esm/utils/UnusedFieldAnalyzer.js.map +1 -1
  119. package/build/esm/utils/WaterfallDetector.js.map +1 -1
  120. package/build/esm/utils/computePayload.js +2 -2
  121. package/build/esm/utils/computePayload.js.map +1 -1
  122. package/build/esm/utils/computeRequest.js.map +1 -1
  123. package/build/esm/utils/format.js.map +1 -1
  124. package/build/esm/vite/hookInstaller.js.map +1 -1
  125. package/build/esm/vite/index.js +2 -3
  126. package/build/esm/vite/index.js.map +1 -1
  127. package/build/types/DevToolsContext.d.ts.map +1 -1
  128. package/build/types/components/ActionMetrics.d.ts.map +1 -1
  129. package/build/types/components/BubbleChart.d.ts.map +1 -1
  130. package/build/types/components/CacheInspectorTab.d.ts.map +1 -1
  131. package/build/types/components/CacheMetrics.d.ts.map +1 -1
  132. package/build/types/components/ComponentCard.d.ts.map +1 -1
  133. package/build/types/components/ComputeTab.d.ts.map +1 -1
  134. package/build/types/components/CopyableCodeBlock.d.ts.map +1 -1
  135. package/build/types/components/DebuggingTab.d.ts.map +1 -1
  136. package/build/types/components/HookRow.d.ts.map +1 -1
  137. package/build/types/components/ImprovementsTab.d.ts.map +1 -1
  138. package/build/types/components/InspectorSelectionHeader.d.ts.map +1 -1
  139. package/build/types/components/InterceptTab.d.ts.map +1 -1
  140. package/build/types/components/IssueCard.d.ts.map +1 -1
  141. package/build/types/components/LogEntryCard.d.ts.map +1 -1
  142. package/build/types/components/MockEditor.d.ts.map +1 -1
  143. package/build/types/components/MonitorErrorBoundary.d.ts.map +1 -1
  144. package/build/types/components/MonitoringPanel.d.ts.map +1 -1
  145. package/build/types/components/ObjectLoadingMetrics.d.ts.map +1 -1
  146. package/build/types/components/OsdkAppErrorBoundary.d.ts.map +1 -1
  147. package/build/types/components/OsdkDevTools.d.ts.map +1 -1
  148. package/build/types/components/OverrideEditor.d.ts.map +1 -1
  149. package/build/types/components/PerformanceTab.d.ts.map +1 -1
  150. package/build/types/components/PrimitiveSelectionPanel.d.ts.map +1 -1
  151. package/build/types/components/resolveComponentName.d.ts.map +1 -1
  152. package/build/types/components/testHelpers.d.ts.map +1 -1
  153. package/build/types/fiber/DegradationNotice.d.ts.map +1 -1
  154. package/build/types/fiber/DevtoolsHook.d.ts.map +1 -1
  155. package/build/types/fiber/FiberInspection.d.ts.map +1 -1
  156. package/build/types/fiber/HookStateInspector.d.ts.map +1 -1
  157. package/build/types/fiber/capabilities.d.ts.map +1 -1
  158. package/build/types/fiber/traverseFiber.d.ts.map +1 -1
  159. package/build/types/fiber/types.d.ts.map +1 -1
  160. package/build/types/hooks/useActiveComponents.d.ts.map +1 -1
  161. package/build/types/hooks/useComponentRegistry.d.ts.map +1 -1
  162. package/build/types/hooks/useComputeSelectors.d.ts.map +1 -1
  163. package/build/types/hooks/useConsoleLogs.d.ts.map +1 -1
  164. package/build/types/hooks/useInspectorSelection.d.ts.map +1 -1
  165. package/build/types/hooks/useMetrics.d.ts.map +1 -1
  166. package/build/types/hooks/useRecommendations.d.ts.map +1 -1
  167. package/build/types/hooks/useUnusedFieldAnalysis.d.ts.map +1 -1
  168. package/build/types/inspector/ClickToInspectSystem.d.ts.map +1 -1
  169. package/build/types/inspector/components/ComponentLabel.d.ts.map +1 -1
  170. package/build/types/inspector/components/InspectorOverlay.d.ts.map +1 -1
  171. package/build/types/inspector/components/SelectionHighlight.d.ts.map +1 -1
  172. package/build/types/inspector/hooks/useAnimatedBounds.d.ts.map +1 -1
  173. package/build/types/mocking/MockManager.d.ts.map +1 -1
  174. package/build/types/store/ComputeStore.d.ts.map +1 -1
  175. package/build/types/store/ConsoleLogStore.d.ts.map +1 -1
  176. package/build/types/store/MetricsStore.d.ts.map +1 -1
  177. package/build/types/store/MonitorStore.d.ts.map +1 -1
  178. package/build/types/store/WindowErrorStore.d.ts.map +1 -1
  179. package/build/types/styles.d.ts +0 -1
  180. package/build/types/styles.d.ts.map +1 -1
  181. package/build/types/types/compute.d.ts.map +1 -1
  182. package/build/types/utils/ActionLifecycleTracker.d.ts.map +1 -1
  183. package/build/types/utils/CacheEfficiencyAnalyzer.d.ts.map +1 -1
  184. package/build/types/utils/ComponentContextCapture.d.ts.map +1 -1
  185. package/build/types/utils/ComponentPrimitiveDiscovery.d.ts.map +1 -1
  186. package/build/types/utils/ComponentQueryRegistry.d.ts.map +1 -1
  187. package/build/types/utils/ComputeMonitor.d.ts.map +1 -1
  188. package/build/types/utils/EventTimeline.d.ts.map +1 -1
  189. package/build/types/utils/LinkTraversalTracker.d.ts.map +1 -1
  190. package/build/types/utils/MockDataGenerator.d.ts.map +1 -1
  191. package/build/types/utils/ObservableClientMonitor.d.ts.map +1 -1
  192. package/build/types/utils/PerformanceRecommendationEngine.d.ts.map +1 -1
  193. package/build/types/utils/PropertyAccessTracker.d.ts.map +1 -1
  194. package/build/types/utils/SubscriptionTracker.d.ts.map +1 -1
  195. package/build/types/utils/UnusedFieldAnalyzer.d.ts.map +1 -1
  196. package/build/types/utils/WaterfallDetector.d.ts.map +1 -1
  197. package/build/types/utils/computeRequest.d.ts.map +1 -1
  198. package/build/types/vite/index.d.ts.map +1 -1
  199. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"CopyableCodeBlock.js","names":["Button","classNames","React","useCallback","useRef","useState","styles","CopyableCodeBlock","children","className","copied","setCopied","copyTimeoutRef","undefined","handleCopy","text","String","navigator","clipboard","writeText","clearTimeout","current","setTimeout","createElement","container","code","variant","size","icon","copyButton","onClick"],"sources":["CopyableCodeBlock.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useRef, useState } from \"react\";\nimport styles from \"./CopyableCodeBlock.module.scss\";\n\ninterface CopyableCodeBlockProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const CopyableCodeBlock: React.FC<CopyableCodeBlockProps> = ({\n children,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n const copyTimeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const handleCopy = useCallback(async () => {\n const text = typeof children === \"string\"\n ? children\n : String(children ?? \"\");\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n clearTimeout(copyTimeoutRef.current);\n copyTimeoutRef.current = setTimeout(() => setCopied(false), 1500);\n } catch {\n }\n }, [children]);\n\n return (\n <div className={styles.container}>\n <pre className={classNames(styles.code, className)}>{children}</pre>\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon={copied ? \"tick\" : \"clipboard\"}\n className={classNames(styles.copyButton, copied && styles.copied)}\n onClick={() => void handleCopy()}\n aria-label=\"Copy to clipboard\"\n />\n </div>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,WAAW,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC5D,OAAOC,MAAM,MAAM,iCAAiC;AAOpD,OAAO,MAAMC,iBAAmD,GAAGA,CAAC;EAClEC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGN,QAAQ,CAAC,KAAK,CAAC;EAC3C,MAAMO,cAAc,GAAGR,MAAM,CAAgCS,SAAS,CAAC;EAEvE,MAAMC,UAAU,GAAGX,WAAW,CAAC,YAAY;IACzC,MAAMY,IAAI,GAAG,OAAOP,QAAQ,KAAK,QAAQ,GACrCA,QAAQ,GACRQ,MAAM,CAACR,QAAQ,IAAI,EAAE,CAAC;IAC1B,IAAI;MACF,MAAMS,SAAS,CAACC,SAAS,CAACC,SAAS,CAACJ,IAAI,CAAC;MACzCJ,SAAS,CAAC,IAAI,CAAC;MACfS,YAAY,CAACR,cAAc,CAACS,OAAO,CAAC;MACpCT,cAAc,CAACS,OAAO,GAAGC,UAAU,CAAC,MAAMX,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACnE,CAAC,CAAC,MAAM,CACR;EACF,CAAC,EAAE,CAACH,QAAQ,CAAC,CAAC;EAEd,oBACEN,KAAA,CAAAqB,aAAA;IAAKd,SAAS,EAAEH,MAAM,CAACkB;EAAU,gBAC/BtB,KAAA,CAAAqB,aAAA;IAAKd,SAAS,EAAER,UAAU,CAACK,MAAM,CAACmB,IAAI,EAAEhB,SAAS;EAAE,GAAED,QAAc,CAAC,eACpEN,KAAA,CAAAqB,aAAA,CAACvB,MAAM;IACL0B,OAAO,EAAC,SAAS;IACjBC,IAAI,EAAC,OAAO;IACZC,IAAI,EAAElB,MAAM,GAAG,MAAM,GAAG,WAAY;IACpCD,SAAS,EAAER,UAAU,CAACK,MAAM,CAACuB,UAAU,EAAEnB,MAAM,IAAIJ,MAAM,CAACI,MAAM,CAAE;IAClEoB,OAAO,EAAEA,CAAA,KAAM,KAAKhB,UAAU,CAAC,CAAE;IACjC,cAAW;EAAmB,CAC/B,CACE,CAAC;AAEV,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"CopyableCodeBlock.js","names":["Button","classNames","React","useCallback","useRef","useState","styles","CopyableCodeBlock","children","className","copied","setCopied","copyTimeoutRef","undefined","handleCopy","text","String","navigator","clipboard","writeText","clearTimeout","current","setTimeout","createElement","container","code","variant","size","icon","copyButton","onClick"],"sources":["CopyableCodeBlock.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useRef, useState } from \"react\";\n\nimport styles from \"./CopyableCodeBlock.module.scss\";\n\ninterface CopyableCodeBlockProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const CopyableCodeBlock: React.FC<CopyableCodeBlockProps> = ({\n children,\n className,\n}) => {\n const [copied, setCopied] = useState(false);\n const copyTimeoutRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n const handleCopy = useCallback(async () => {\n const text =\n typeof children === \"string\" ? children : String(children ?? \"\");\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n clearTimeout(copyTimeoutRef.current);\n copyTimeoutRef.current = setTimeout(() => setCopied(false), 1500);\n } catch {}\n }, [children]);\n\n return (\n <div className={styles.container}>\n <pre className={classNames(styles.code, className)}>{children}</pre>\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon={copied ? \"tick\" : \"clipboard\"}\n className={classNames(styles.copyButton, copied && styles.copied)}\n onClick={() => void handleCopy()}\n aria-label=\"Copy to clipboard\"\n />\n </div>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,QAAQ,mBAAmB;AAC1C,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,WAAW,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAE5D,OAAOC,MAAM,MAAM,iCAAiC;AAOpD,OAAO,MAAMC,iBAAmD,GAAGA,CAAC;EAClEC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGN,QAAQ,CAAC,KAAK,CAAC;EAC3C,MAAMO,cAAc,GAAGR,MAAM,CAAgCS,SAAS,CAAC;EAEvE,MAAMC,UAAU,GAAGX,WAAW,CAAC,YAAY;IACzC,MAAMY,IAAI,GACR,OAAOP,QAAQ,KAAK,QAAQ,GAAGA,QAAQ,GAAGQ,MAAM,CAACR,QAAQ,IAAI,EAAE,CAAC;IAClE,IAAI;MACF,MAAMS,SAAS,CAACC,SAAS,CAACC,SAAS,CAACJ,IAAI,CAAC;MACzCJ,SAAS,CAAC,IAAI,CAAC;MACfS,YAAY,CAACR,cAAc,CAACS,OAAO,CAAC;MACpCT,cAAc,CAACS,OAAO,GAAGC,UAAU,CAAC,MAAMX,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;IACnE,CAAC,CAAC,MAAM,CAAC;EACX,CAAC,EAAE,CAACH,QAAQ,CAAC,CAAC;EAEd,oBACEN,KAAA,CAAAqB,aAAA;IAAKd,SAAS,EAAEH,MAAM,CAACkB;EAAU,gBAC/BtB,KAAA,CAAAqB,aAAA;IAAKd,SAAS,EAAER,UAAU,CAACK,MAAM,CAACmB,IAAI,EAAEhB,SAAS;EAAE,GAAED,QAAc,CAAC,eACpEN,KAAA,CAAAqB,aAAA,CAACvB,MAAM;IACL0B,OAAO,EAAC,SAAS;IACjBC,IAAI,EAAC,OAAO;IACZC,IAAI,EAAElB,MAAM,GAAG,MAAM,GAAG,WAAY;IACpCD,SAAS,EAAER,UAAU,CAACK,MAAM,CAACuB,UAAU,EAAEnB,MAAM,IAAIJ,MAAM,CAACI,MAAM,CAAE;IAClEoB,OAAO,EAAEA,CAAA,KAAM,KAAKhB,UAAU,CAAC,CAAE;IACjC,cAAW;EAAmB,CAC/B,CACE,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -23,11 +23,11 @@ import { useConsoleLogs } from "../hooks/useConsoleLogs.js";
23
23
  import { formatTime } from "../utils/format.js";
24
24
  import { CacheInspectorTab } from "./CacheInspectorTab.js";
25
25
  import { ComponentCard } from "./ComponentCard.js";
26
- import styles from "./DebuggingTab.module.scss.js";
27
26
  import { ImprovementsTab } from "./ImprovementsTab.js";
28
27
  import { IssueCard } from "./IssueCard.js";
29
28
  import { LogEntryCard } from "./LogEntryCard.js";
30
29
  import { resolveComponentName } from "./resolveComponentName.js";
30
+ import styles from "./DebuggingTab.module.scss.js";
31
31
  const SEVERITY_ORDER = {
32
32
  error: 0,
33
33
  warning: 1,
@@ -293,7 +293,7 @@ export const DebuggingTab = ({
293
293
  className: styles.sectionCount
294
294
  }, filteredComponents.size)), filteredComponents.size === 0 && /*#__PURE__*/React.createElement("div", {
295
295
  className: styles.emptyState
296
- }, searchQuery ? "No components match your search" : "No active components found"), Array.from(filteredComponents).map(([componentId, bindings], index) => /*#__PURE__*/React.createElement("div", {
296
+ }, searchQuery ? "No components match your search" : "No active components found"), [...filteredComponents].map(([componentId, bindings], index) => /*#__PURE__*/React.createElement("div", {
297
297
  key: componentId,
298
298
  ref: el => {
299
299
  if (el) {
@@ -1 +1 @@
1
- {"version":3,"file":"DebuggingTab.js","names":["Icon","InputGroup","classNames","React","useCallback","useMemo","useRef","useState","createPollingStore","useActiveComponents","useConsoleLogs","formatTime","CacheInspectorTab","ComponentCard","styles","ImprovementsTab","IssueCard","LogEntryCard","resolveComponentName","SEVERITY_ORDER","error","warning","info","collectIssues","monitorStore","now","issues","err","getMetricsStore","getActionErrors","push","id","severity","category","title","message","suggestion","validationErrors","length","undefined","timestamp","expandable","stack","detailsJson","JSON","stringify","actionType","parameters","windowErrors","getWindowErrorStore","getEntries","windowErrorBuckets","Set","we","filename","lineno","colno","hasExpandable","kind","bucket","Math","floor","add","entry","getConsoleLogStore","level","messageText","args","join","has","issue","source","wr","getPropertyAccessTracker","getWastedRenders","componentId","count","componentName","up","getUnusedProperties","propertyName","sort","a","b","DebuggingTab","searchQuery","setSearchQuery","cacheExpanded","setCacheExpanded","consoleExpanded","setConsoleExpanded","improvementsExpanded","setImprovementsExpanded","componentRefs","Map","activeComponents","entries","consoleEntries","consoleCount","clear","clearConsole","issueStore","Date","useSyncExternalStore","subscribe","getSnapshot","cacheCountStore","loadCacheEntries","cacheCount","searchFilter","trim","q","toLowerCase","includes","errorIssues","filter","i","filteredConsoleEntries","some","arg","issuesByComponent","map","existing","get","set","filteredComponents","filtered","bindings","displayName","handleComponentClick","el","current","scrollIntoView","behavior","block","click","createElement","className","debuggingTab","controls","leftIcon","placeholder","value","onChange","e","target","searchInput","fill","feed","section","sectionHeader","errorSectionHeader","icon","size","color","sectionCount","emptyState","index","key","onComponentClick","style","type","sectionHeaderButton","onClick","role","tabIndex","stopPropagation","onKeyDown","preventDefault","sectionChevron","slice","Array","from","ref","delete"],"sources":["DebuggingTab.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Icon, InputGroup } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport { createPollingStore } from \"../hooks/createPollingStore.js\";\nimport { useActiveComponents } from \"../hooks/useActiveComponents.js\";\nimport { useConsoleLogs } from \"../hooks/useConsoleLogs.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { ComponentHookBinding } from \"../utils/ComponentQueryRegistry.js\";\nimport { formatTime } from \"../utils/format.js\";\nimport { CacheInspectorTab } from \"./CacheInspectorTab.js\";\nimport { ComponentCard } from \"./ComponentCard.js\";\nimport styles from \"./DebuggingTab.module.scss\";\nimport { ImprovementsTab } from \"./ImprovementsTab.js\";\nimport { IssueCard } from \"./IssueCard.js\";\nimport type { Issue } from \"./issueTypes.js\";\nimport { LogEntryCard } from \"./LogEntryCard.js\";\nimport { resolveComponentName } from \"./resolveComponentName.js\";\n\nexport interface DebuggingTabProps {\n monitorStore: MonitorStore;\n}\n\nconst SEVERITY_ORDER: Record<Issue[\"severity\"], number> = {\n error: 0,\n warning: 1,\n info: 2,\n};\n\nfunction collectIssues(\n monitorStore: MonitorStore,\n now: number,\n): Issue[] {\n const issues: Issue[] = [];\n\n for (const err of monitorStore.getMetricsStore().getActionErrors()) {\n issues.push({\n id: err.id,\n severity: \"error\",\n category: \"action failure\",\n title: \"Action failed\",\n message: err.message,\n suggestion: err.validationErrors?.length\n ? \"Fix validation errors before retrying\"\n : undefined,\n timestamp: err.timestamp,\n expandable: {\n stack: err.stack,\n detailsJson: JSON.stringify(\n {\n actionType: err.actionType,\n parameters: err.parameters,\n },\n null,\n 2,\n ),\n },\n });\n }\n\n const windowErrors = monitorStore.getWindowErrorStore().getEntries();\n // Bucketed at 100ms granularity. The lookup checks the current bucket plus\n // the two adjacent buckets so that any console.error within ±100ms of a\n // window error collides regardless of where the timestamps fall.\n const windowErrorBuckets = new Set<string>();\n for (const we of windowErrors) {\n const expandable: NonNullable<Issue[\"expandable\"]> = {};\n if (we.stack) {\n expandable.stack = we.stack;\n }\n if (we.filename || we.lineno || we.colno) {\n expandable.detailsJson = JSON.stringify(\n {\n filename: we.filename,\n lineno: we.lineno,\n colno: we.colno,\n },\n null,\n 2,\n );\n }\n const hasExpandable = expandable.stack !== undefined\n || expandable.detailsJson !== undefined;\n\n issues.push({\n id: `windowError-${we.id}`,\n severity: \"error\",\n category: we.kind === \"unhandledrejection\"\n ? \"unhandled rejection\"\n : \"uncaught error\",\n title: we.kind === \"unhandledrejection\"\n ? \"Unhandled promise rejection\"\n : \"Uncaught error\",\n message: we.message,\n timestamp: we.timestamp,\n ...(hasExpandable ? { expandable } : {}),\n });\n\n const bucket = Math.floor(we.timestamp / 100);\n windowErrorBuckets.add(`${we.message}|${bucket}`);\n }\n\n for (const entry of monitorStore.getConsoleLogStore().getEntries()) {\n if (entry.level !== \"error\") {\n continue;\n }\n const messageText = entry.args.join(\" \");\n const bucket = Math.floor(entry.timestamp / 100);\n if (\n windowErrorBuckets.has(`${messageText}|${bucket - 1}`)\n || windowErrorBuckets.has(`${messageText}|${bucket}`)\n || windowErrorBuckets.has(`${messageText}|${bucket + 1}`)\n ) {\n continue;\n }\n const issue: Issue = {\n id: `console-${entry.id}`,\n severity: \"error\",\n category: \"console error\",\n title: \"console.error\",\n message: messageText,\n timestamp: entry.timestamp,\n };\n if (entry.source) {\n issue.expandable = {\n detailsJson: JSON.stringify({ source: entry.source }, null, 2),\n };\n }\n issues.push(issue);\n }\n\n for (const wr of monitorStore.getPropertyAccessTracker().getWastedRenders()) {\n issues.push({\n id: `wasted-${wr.componentId}-${wr.timestamp}`,\n severity: \"warning\",\n category: \"wasted render\",\n title: `${wr.count} renders without property access`,\n message: `${wr.componentName} renders but doesn't use the data`,\n suggestion: \"Check if this component needs this data subscription\",\n componentId: wr.componentId,\n componentName: wr.componentName,\n timestamp: wr.timestamp,\n });\n }\n\n for (\n const up of monitorStore.getPropertyAccessTracker().getUnusedProperties()\n ) {\n issues.push({\n id: `unused-${up.componentId}-${up.propertyName}`,\n severity: \"info\",\n category: \"unused field\",\n title: `\"${up.propertyName}\" loaded but never accessed`,\n message: `${up.componentName} fetches this field but never reads it`,\n suggestion: \"Remove from query to reduce payload\",\n componentId: up.componentId,\n componentName: up.componentName,\n timestamp: now,\n });\n }\n\n issues.sort(\n (a, b) =>\n SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity]\n || b.timestamp - a.timestamp,\n );\n\n return issues;\n}\n\nexport const DebuggingTab: React.FC<DebuggingTabProps> = ({ monitorStore }) => {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [cacheExpanded, setCacheExpanded] = useState(false);\n const [consoleExpanded, setConsoleExpanded] = useState(true);\n const [improvementsExpanded, setImprovementsExpanded] = useState(true);\n\n const componentRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n const activeComponents = useActiveComponents(monitorStore);\n const { entries: consoleEntries, count: consoleCount, clear: clearConsole } =\n useConsoleLogs(monitorStore);\n\n const issueStore = React.useMemo(\n () =>\n createPollingStore(\n () => collectIssues(monitorStore, Date.now()),\n 2000,\n ),\n [monitorStore],\n );\n const issues = React.useSyncExternalStore(\n issueStore.subscribe,\n issueStore.getSnapshot,\n ) ?? [];\n\n const cacheCountStore = React.useMemo(\n () =>\n createPollingStore(\n async () => {\n const entries = await monitorStore.loadCacheEntries();\n return entries.length;\n },\n 5000,\n ),\n [monitorStore],\n );\n const cacheCount = React.useSyncExternalStore(\n cacheCountStore.subscribe,\n cacheCountStore.getSnapshot,\n ) ?? 0;\n\n const searchFilter = useCallback((issue: Issue) => {\n if (!searchQuery.trim()) {\n return true;\n }\n const q = searchQuery.toLowerCase();\n return issue.title.toLowerCase().includes(q)\n || issue.message.toLowerCase().includes(q)\n || (issue.componentName?.toLowerCase().includes(q) ?? false)\n || issue.category.toLowerCase().includes(q);\n }, [searchQuery]);\n\n const errorIssues = useMemo(\n () => issues.filter(i => i.severity === \"error\").filter(searchFilter),\n [issues, searchFilter],\n );\n\n const filteredConsoleEntries = useMemo(() => {\n if (!searchQuery.trim()) {\n return consoleEntries;\n }\n const q = searchQuery.toLowerCase();\n return consoleEntries.filter(\n (entry) =>\n entry.args.some((arg) => arg.toLowerCase().includes(q))\n || entry.level.includes(q)\n || (entry.source?.toLowerCase().includes(q) ?? false),\n );\n }, [consoleEntries, searchQuery]);\n\n const issuesByComponent = useMemo(() => {\n const map = new Map<string, Issue[]>();\n for (const issue of issues) {\n if (issue.componentId) {\n const existing = map.get(issue.componentId);\n if (existing) {\n existing.push(issue);\n } else {\n map.set(issue.componentId, [issue]);\n }\n }\n }\n return map;\n }, [issues]);\n\n const filteredComponents = useMemo<Map<string, ComponentHookBinding[]>>(\n () => {\n if (!searchQuery.trim()) {\n return activeComponents;\n }\n\n const q = searchQuery.toLowerCase();\n const filtered = new Map<string, ComponentHookBinding[]>();\n\n for (const [componentId, bindings] of activeComponents) {\n const displayName = resolveComponentName(bindings).toLowerCase();\n\n if (\n displayName.includes(q)\n || componentId.includes(q)\n ) {\n filtered.set(componentId, bindings);\n }\n }\n\n return filtered;\n },\n [activeComponents, searchQuery],\n );\n\n const handleComponentClick = useCallback((componentId: string) => {\n const el = componentRefs.current.get(componentId);\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n el.click();\n }\n }, []);\n\n return (\n <div className={styles.debuggingTab}>\n <div className={styles.controls}>\n <InputGroup\n leftIcon=\"search\"\n placeholder=\"Search issues and components...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className={styles.searchInput}\n fill={true}\n />\n </div>\n\n <div className={styles.feed}>\n <div className={styles.section}>\n <div\n className={classNames(\n styles.sectionHeader,\n styles.errorSectionHeader,\n )}\n >\n <Icon icon=\"error\" size={14} color=\"var(--dt-red)\" />\n <span>Errors</span>\n <span className={styles.sectionCount}>\n {errorIssues.length}\n </span>\n </div>\n {errorIssues.length === 0\n ? (\n <div className={styles.emptyState}>\n No errors\n </div>\n )\n : errorIssues.map((issue, index) => (\n <IssueCard\n key={issue.id}\n issue={issue}\n onComponentClick={handleComponentClick}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n ))}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setConsoleExpanded(!consoleExpanded)}\n >\n <Icon icon=\"console\" size={14} color=\"var(--dt-text-tertiary)\" />\n <span>Console</span>\n <span className={styles.sectionCount}>\n {consoleCount}\n </span>\n {consoleCount > 0 && (\n <span\n className={styles.sectionCount}\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n clearConsole();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n clearConsole();\n }\n }}\n >\n clear\n </span>\n )}\n <Icon\n icon={consoleExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {consoleExpanded && (\n filteredConsoleEntries.length === 0\n ? (\n <div className={styles.emptyState}>\n No console output captured\n </div>\n )\n : filteredConsoleEntries.slice(-100).map((entry, index) => (\n <LogEntryCard\n key={entry.id}\n entry={entry}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n ))\n )}\n </div>\n\n <div className={styles.section}>\n <div className={styles.sectionHeader}>\n <span>Components</span>\n <span className={styles.sectionCount}>\n {filteredComponents.size}\n </span>\n </div>\n {filteredComponents.size === 0 && (\n <div className={styles.emptyState}>\n {searchQuery\n ? \"No components match your search\"\n : \"No active components found\"}\n </div>\n )}\n {Array.from(filteredComponents).map(\n ([componentId, bindings], index) => (\n <div\n key={componentId}\n ref={(el) => {\n if (el) {\n componentRefs.current.set(componentId, el);\n } else {\n componentRefs.current.delete(componentId);\n }\n }}\n >\n <ComponentCard\n componentId={componentId}\n bindings={bindings}\n formatTime={formatTime}\n monitorStore={monitorStore}\n issues={issuesByComponent.get(componentId)}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n </div>\n ),\n )}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setImprovementsExpanded(!improvementsExpanded)}\n >\n <span>Improvements</span>\n <Icon\n icon={improvementsExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {improvementsExpanded && (\n <ImprovementsTab monitorStore={monitorStore} />\n )}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setCacheExpanded(!cacheExpanded)}\n >\n <span>Cache</span>\n <span className={styles.sectionCount}>{cacheCount} entries</span>\n <Icon\n icon={cacheExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {cacheExpanded && <CacheInspectorTab monitorStore={monitorStore} />}\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"DebuggingTab.js","names":["Icon","InputGroup","classNames","React","useCallback","useMemo","useRef","useState","createPollingStore","useActiveComponents","useConsoleLogs","formatTime","CacheInspectorTab","ComponentCard","ImprovementsTab","IssueCard","LogEntryCard","resolveComponentName","styles","SEVERITY_ORDER","error","warning","info","collectIssues","monitorStore","now","issues","err","getMetricsStore","getActionErrors","push","id","severity","category","title","message","suggestion","validationErrors","length","undefined","timestamp","expandable","stack","detailsJson","JSON","stringify","actionType","parameters","windowErrors","getWindowErrorStore","getEntries","windowErrorBuckets","Set","we","filename","lineno","colno","hasExpandable","kind","bucket","Math","floor","add","entry","getConsoleLogStore","level","messageText","args","join","has","issue","source","wr","getPropertyAccessTracker","getWastedRenders","componentId","count","componentName","up","getUnusedProperties","propertyName","sort","a","b","DebuggingTab","searchQuery","setSearchQuery","cacheExpanded","setCacheExpanded","consoleExpanded","setConsoleExpanded","improvementsExpanded","setImprovementsExpanded","componentRefs","Map","activeComponents","entries","consoleEntries","consoleCount","clear","clearConsole","issueStore","Date","useSyncExternalStore","subscribe","getSnapshot","cacheCountStore","loadCacheEntries","cacheCount","searchFilter","trim","q","toLowerCase","includes","errorIssues","filter","i","filteredConsoleEntries","some","arg","issuesByComponent","map","existing","get","set","filteredComponents","filtered","bindings","displayName","handleComponentClick","el","current","scrollIntoView","behavior","block","click","createElement","className","debuggingTab","controls","leftIcon","placeholder","value","onChange","e","target","searchInput","fill","feed","section","sectionHeader","errorSectionHeader","icon","size","color","sectionCount","emptyState","index","key","onComponentClick","style","type","sectionHeaderButton","onClick","role","tabIndex","stopPropagation","onKeyDown","preventDefault","sectionChevron","slice","ref","delete"],"sources":["DebuggingTab.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Icon, InputGroup } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport { createPollingStore } from \"../hooks/createPollingStore.js\";\nimport { useActiveComponents } from \"../hooks/useActiveComponents.js\";\nimport { useConsoleLogs } from \"../hooks/useConsoleLogs.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { ComponentHookBinding } from \"../utils/ComponentQueryRegistry.js\";\nimport { formatTime } from \"../utils/format.js\";\nimport { CacheInspectorTab } from \"./CacheInspectorTab.js\";\nimport { ComponentCard } from \"./ComponentCard.js\";\nimport { ImprovementsTab } from \"./ImprovementsTab.js\";\nimport { IssueCard } from \"./IssueCard.js\";\nimport type { Issue } from \"./issueTypes.js\";\nimport { LogEntryCard } from \"./LogEntryCard.js\";\nimport { resolveComponentName } from \"./resolveComponentName.js\";\n\nimport styles from \"./DebuggingTab.module.scss\";\n\nexport interface DebuggingTabProps {\n monitorStore: MonitorStore;\n}\n\nconst SEVERITY_ORDER: Record<Issue[\"severity\"], number> = {\n error: 0,\n warning: 1,\n info: 2,\n};\n\nfunction collectIssues(monitorStore: MonitorStore, now: number): Issue[] {\n const issues: Issue[] = [];\n\n for (const err of monitorStore.getMetricsStore().getActionErrors()) {\n issues.push({\n id: err.id,\n severity: \"error\",\n category: \"action failure\",\n title: \"Action failed\",\n message: err.message,\n suggestion: err.validationErrors?.length\n ? \"Fix validation errors before retrying\"\n : undefined,\n timestamp: err.timestamp,\n expandable: {\n stack: err.stack,\n detailsJson: JSON.stringify(\n {\n actionType: err.actionType,\n parameters: err.parameters,\n },\n null,\n 2\n ),\n },\n });\n }\n\n const windowErrors = monitorStore.getWindowErrorStore().getEntries();\n // Bucketed at 100ms granularity. The lookup checks the current bucket plus\n // the two adjacent buckets so that any console.error within ±100ms of a\n // window error collides regardless of where the timestamps fall.\n const windowErrorBuckets = new Set<string>();\n for (const we of windowErrors) {\n const expandable: NonNullable<Issue[\"expandable\"]> = {};\n if (we.stack) {\n expandable.stack = we.stack;\n }\n if (we.filename || we.lineno || we.colno) {\n expandable.detailsJson = JSON.stringify(\n {\n filename: we.filename,\n lineno: we.lineno,\n colno: we.colno,\n },\n null,\n 2\n );\n }\n const hasExpandable =\n expandable.stack !== undefined || expandable.detailsJson !== undefined;\n\n issues.push({\n id: `windowError-${we.id}`,\n severity: \"error\",\n category:\n we.kind === \"unhandledrejection\"\n ? \"unhandled rejection\"\n : \"uncaught error\",\n title:\n we.kind === \"unhandledrejection\"\n ? \"Unhandled promise rejection\"\n : \"Uncaught error\",\n message: we.message,\n timestamp: we.timestamp,\n ...(hasExpandable ? { expandable } : {}),\n });\n\n const bucket = Math.floor(we.timestamp / 100);\n windowErrorBuckets.add(`${we.message}|${bucket}`);\n }\n\n for (const entry of monitorStore.getConsoleLogStore().getEntries()) {\n if (entry.level !== \"error\") {\n continue;\n }\n const messageText = entry.args.join(\" \");\n const bucket = Math.floor(entry.timestamp / 100);\n if (\n windowErrorBuckets.has(`${messageText}|${bucket - 1}`) ||\n windowErrorBuckets.has(`${messageText}|${bucket}`) ||\n windowErrorBuckets.has(`${messageText}|${bucket + 1}`)\n ) {\n continue;\n }\n const issue: Issue = {\n id: `console-${entry.id}`,\n severity: \"error\",\n category: \"console error\",\n title: \"console.error\",\n message: messageText,\n timestamp: entry.timestamp,\n };\n if (entry.source) {\n issue.expandable = {\n detailsJson: JSON.stringify({ source: entry.source }, null, 2),\n };\n }\n issues.push(issue);\n }\n\n for (const wr of monitorStore.getPropertyAccessTracker().getWastedRenders()) {\n issues.push({\n id: `wasted-${wr.componentId}-${wr.timestamp}`,\n severity: \"warning\",\n category: \"wasted render\",\n title: `${wr.count} renders without property access`,\n message: `${wr.componentName} renders but doesn't use the data`,\n suggestion: \"Check if this component needs this data subscription\",\n componentId: wr.componentId,\n componentName: wr.componentName,\n timestamp: wr.timestamp,\n });\n }\n\n for (const up of monitorStore\n .getPropertyAccessTracker()\n .getUnusedProperties()) {\n issues.push({\n id: `unused-${up.componentId}-${up.propertyName}`,\n severity: \"info\",\n category: \"unused field\",\n title: `\"${up.propertyName}\" loaded but never accessed`,\n message: `${up.componentName} fetches this field but never reads it`,\n suggestion: \"Remove from query to reduce payload\",\n componentId: up.componentId,\n componentName: up.componentName,\n timestamp: now,\n });\n }\n\n issues.sort(\n (a, b) =>\n SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity] ||\n b.timestamp - a.timestamp\n );\n\n return issues;\n}\n\nexport const DebuggingTab: React.FC<DebuggingTabProps> = ({ monitorStore }) => {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [cacheExpanded, setCacheExpanded] = useState(false);\n const [consoleExpanded, setConsoleExpanded] = useState(true);\n const [improvementsExpanded, setImprovementsExpanded] = useState(true);\n\n const componentRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n const activeComponents = useActiveComponents(monitorStore);\n const {\n entries: consoleEntries,\n count: consoleCount,\n clear: clearConsole,\n } = useConsoleLogs(monitorStore);\n\n const issueStore = React.useMemo(\n () =>\n createPollingStore(() => collectIssues(monitorStore, Date.now()), 2000),\n [monitorStore]\n );\n const issues =\n React.useSyncExternalStore(issueStore.subscribe, issueStore.getSnapshot) ??\n [];\n\n const cacheCountStore = React.useMemo(\n () =>\n createPollingStore(async () => {\n const entries = await monitorStore.loadCacheEntries();\n return entries.length;\n }, 5000),\n [monitorStore]\n );\n const cacheCount =\n React.useSyncExternalStore(\n cacheCountStore.subscribe,\n cacheCountStore.getSnapshot\n ) ?? 0;\n\n const searchFilter = useCallback(\n (issue: Issue) => {\n if (!searchQuery.trim()) {\n return true;\n }\n const q = searchQuery.toLowerCase();\n return (\n issue.title.toLowerCase().includes(q) ||\n issue.message.toLowerCase().includes(q) ||\n (issue.componentName?.toLowerCase().includes(q) ?? false) ||\n issue.category.toLowerCase().includes(q)\n );\n },\n [searchQuery]\n );\n\n const errorIssues = useMemo(\n () => issues.filter((i) => i.severity === \"error\").filter(searchFilter),\n [issues, searchFilter]\n );\n\n const filteredConsoleEntries = useMemo(() => {\n if (!searchQuery.trim()) {\n return consoleEntries;\n }\n const q = searchQuery.toLowerCase();\n return consoleEntries.filter(\n (entry) =>\n entry.args.some((arg) => arg.toLowerCase().includes(q)) ||\n entry.level.includes(q) ||\n (entry.source?.toLowerCase().includes(q) ?? false)\n );\n }, [consoleEntries, searchQuery]);\n\n const issuesByComponent = useMemo(() => {\n const map = new Map<string, Issue[]>();\n for (const issue of issues) {\n if (issue.componentId) {\n const existing = map.get(issue.componentId);\n if (existing) {\n existing.push(issue);\n } else {\n map.set(issue.componentId, [issue]);\n }\n }\n }\n return map;\n }, [issues]);\n\n const filteredComponents = useMemo<\n Map<string, ComponentHookBinding[]>\n >(() => {\n if (!searchQuery.trim()) {\n return activeComponents;\n }\n\n const q = searchQuery.toLowerCase();\n const filtered = new Map<string, ComponentHookBinding[]>();\n\n for (const [componentId, bindings] of activeComponents) {\n const displayName = resolveComponentName(bindings).toLowerCase();\n\n if (displayName.includes(q) || componentId.includes(q)) {\n filtered.set(componentId, bindings);\n }\n }\n\n return filtered;\n }, [activeComponents, searchQuery]);\n\n const handleComponentClick = useCallback((componentId: string) => {\n const el = componentRefs.current.get(componentId);\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n el.click();\n }\n }, []);\n\n return (\n <div className={styles.debuggingTab}>\n <div className={styles.controls}>\n <InputGroup\n leftIcon=\"search\"\n placeholder=\"Search issues and components...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className={styles.searchInput}\n fill={true}\n />\n </div>\n\n <div className={styles.feed}>\n <div className={styles.section}>\n <div\n className={classNames(\n styles.sectionHeader,\n styles.errorSectionHeader\n )}\n >\n <Icon icon=\"error\" size={14} color=\"var(--dt-red)\" />\n <span>Errors</span>\n <span className={styles.sectionCount}>{errorIssues.length}</span>\n </div>\n {errorIssues.length === 0 ? (\n <div className={styles.emptyState}>No errors</div>\n ) : (\n errorIssues.map((issue, index) => (\n <IssueCard\n key={issue.id}\n issue={issue}\n onComponentClick={handleComponentClick}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n ))\n )}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setConsoleExpanded(!consoleExpanded)}\n >\n <Icon icon=\"console\" size={14} color=\"var(--dt-text-tertiary)\" />\n <span>Console</span>\n <span className={styles.sectionCount}>{consoleCount}</span>\n {consoleCount > 0 && (\n <span\n className={styles.sectionCount}\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n clearConsole();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n clearConsole();\n }\n }}\n >\n clear\n </span>\n )}\n <Icon\n icon={consoleExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {consoleExpanded &&\n (filteredConsoleEntries.length === 0 ? (\n <div className={styles.emptyState}>\n No console output captured\n </div>\n ) : (\n filteredConsoleEntries\n .slice(-100)\n .map((entry, index) => (\n <LogEntryCard\n key={entry.id}\n entry={entry}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n ))\n ))}\n </div>\n\n <div className={styles.section}>\n <div className={styles.sectionHeader}>\n <span>Components</span>\n <span className={styles.sectionCount}>\n {filteredComponents.size}\n </span>\n </div>\n {filteredComponents.size === 0 && (\n <div className={styles.emptyState}>\n {searchQuery\n ? \"No components match your search\"\n : \"No active components found\"}\n </div>\n )}\n {[...filteredComponents].map(([componentId, bindings], index) => (\n <div\n key={componentId}\n ref={(el) => {\n if (el) {\n componentRefs.current.set(componentId, el);\n } else {\n componentRefs.current.delete(componentId);\n }\n }}\n >\n <ComponentCard\n componentId={componentId}\n bindings={bindings}\n formatTime={formatTime}\n monitorStore={monitorStore}\n issues={issuesByComponent.get(componentId)}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n </div>\n ))}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setImprovementsExpanded(!improvementsExpanded)}\n >\n <span>Improvements</span>\n <Icon\n icon={improvementsExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {improvementsExpanded && (\n <ImprovementsTab monitorStore={monitorStore} />\n )}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setCacheExpanded(!cacheExpanded)}\n >\n <span>Cache</span>\n <span className={styles.sectionCount}>{cacheCount} entries</span>\n <Icon\n icon={cacheExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {cacheExpanded && <CacheInspectorTab monitorStore={monitorStore} />}\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"HookRow.js","names":["Button","Icon","Tag","Tooltip","classNames","React","useMemo","useSharedTick","formatRelativeTime","styles","getHookIcon","hookType","getHookColor","hookObject","hookObjects","hookAction","hookLinks","hookObjectSet","truncateSignature","sig","maxLength","length","substring","HookRow","binding","formatTime","ms","toFixed","monitorStore","tick","status","state","lastUpdate","age","timeline","getEventTimeline","lastEmission","getLastEmission","subscriptionId","Date","now","timestamp","renderCount","createElement","className","hookRow","content","hookBadge","icon","size","minimal","intent","statusBadge","errorMessage","querySignature","title","undefined","filePath","lineNumber","variant","locationButton","onClick","window","open","text","split","pop","avgRenderDuration","performance"],"sources":["HookRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Icon, Tag, Tooltip } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useMemo } from \"react\";\nimport { useSharedTick } from \"../hooks/useSharedTick.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { ComponentHookBinding } from \"../utils/ComponentQueryRegistry.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\nimport styles from \"./HookRow.module.scss\";\n\nfunction getHookIcon(hookType: string) {\n switch (hookType) {\n case \"useOsdkObject\":\n return \"document\";\n case \"useOsdkObjects\":\n return \"properties\";\n case \"useOsdkAction\":\n return \"cog\";\n case \"useLinks\":\n return \"flows\";\n case \"useObjectSet\":\n return \"database\";\n default:\n return \"code\";\n }\n}\n\nfunction getHookColor(hookType: string) {\n switch (hookType) {\n case \"useOsdkObject\":\n return styles.hookObject;\n case \"useOsdkObjects\":\n return styles.hookObjects;\n case \"useOsdkAction\":\n return styles.hookAction;\n case \"useLinks\":\n return styles.hookLinks;\n case \"useObjectSet\":\n return styles.hookObjectSet;\n default:\n return \"\";\n }\n}\n\nfunction truncateSignature(sig: string, maxLength: number = 50) {\n if (sig.length <= maxLength) {\n return sig;\n }\n return `${sig.substring(0, maxLength)}...`;\n}\n\nexport interface HookRowProps {\n binding: ComponentHookBinding;\n formatTime?: (ms: number) => string;\n monitorStore?: MonitorStore;\n}\n\ninterface HookStatus {\n state: \"idle\" | \"loading\" | \"success\" | \"error\" | \"stale\";\n lastUpdate: number | null;\n age: number | null;\n errorMessage?: string;\n}\n\nexport const HookRow: React.FC<HookRowProps> = ({\n binding,\n formatTime = (ms) => `${ms.toFixed(1)}ms`,\n monitorStore,\n}) => {\n const tick = useSharedTick();\n\n const status = useMemo((): HookStatus => {\n if (!monitorStore) {\n return { state: \"idle\", lastUpdate: null, age: null };\n }\n\n const timeline = monitorStore.getEventTimeline();\n const lastEmission = timeline.getLastEmission(binding.subscriptionId);\n\n if (lastEmission) {\n const age = Date.now() - lastEmission.timestamp;\n const isStale = age > 30000;\n\n return {\n state: isStale ? \"stale\" : \"success\",\n lastUpdate: lastEmission.timestamp,\n age,\n };\n } else if (binding.renderCount > 0) {\n return { state: \"loading\", lastUpdate: null, age: null };\n }\n\n return { state: \"idle\", lastUpdate: null, age: null };\n }, [tick, monitorStore, binding.subscriptionId, binding.renderCount]);\n\n const handleClickLocation = () => {\n if (binding.filePath && binding.lineNumber) {\n window.open(`vscode://file/${binding.filePath}:${binding.lineNumber}`);\n }\n };\n\n const getStatusBadge = () => {\n if (!monitorStore) {\n return null;\n }\n\n switch (status.state) {\n case \"loading\":\n return (\n <Tooltip content=\"Loading data...\">\n <Tag\n minimal\n intent=\"primary\"\n icon=\"refresh\"\n className={styles.statusBadge}\n >\n Loading\n </Tag>\n </Tooltip>\n );\n case \"success\":\n return status.lastUpdate != null\n ? (\n <Tooltip\n content={`Last updated ${formatRelativeTime(status.lastUpdate)}`}\n >\n <Tag\n minimal\n intent=\"success\"\n icon=\"tick\"\n className={styles.statusBadge}\n >\n {formatRelativeTime(status.lastUpdate)}\n </Tag>\n </Tooltip>\n )\n : null;\n case \"stale\":\n return status.lastUpdate != null\n ? (\n <Tooltip\n content={`Data is stale (${\n formatRelativeTime(status.lastUpdate)\n })`}\n >\n <Tag\n minimal\n intent=\"warning\"\n icon=\"time\"\n className={styles.statusBadge}\n >\n Stale\n </Tag>\n </Tooltip>\n )\n : null;\n case \"error\":\n return (\n <Tooltip content={status.errorMessage || \"Error loading data\"}>\n <Tag\n minimal\n intent=\"danger\"\n icon=\"error\"\n className={styles.statusBadge}\n >\n Error\n </Tag>\n </Tooltip>\n );\n case \"idle\":\n default:\n return null;\n }\n };\n\n return (\n <div className={styles.hookRow}>\n <Tooltip content={binding.hookType}>\n <div\n className={classNames(\n styles.hookBadge,\n getHookColor(binding.hookType),\n )}\n >\n <Icon icon={getHookIcon(binding.hookType)} size={12} />\n <span className={styles.hookType}>{binding.hookType}</span>\n </div>\n </Tooltip>\n\n {getStatusBadge()}\n\n <Tooltip content={binding.querySignature}>\n <div\n className={styles.querySignature}\n title={binding.querySignature.length > 50\n ? binding.querySignature\n : undefined}\n >\n {truncateSignature(binding.querySignature)}\n </div>\n </Tooltip>\n\n {binding.filePath && (\n <Tooltip\n content={`${binding.filePath}:${binding.lineNumber}`}\n >\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"document\"\n className={styles.locationButton}\n onClick={handleClickLocation}\n text={`${binding.filePath.split(\"/\").pop()}:${binding.lineNumber}`}\n />\n </Tooltip>\n )}\n\n {binding.renderCount > 0 && (\n <Tooltip\n content={`Renders: ${binding.renderCount}, Avg: ${\n formatTime(binding.avgRenderDuration)\n }`}\n >\n <div className={styles.performance}>\n <Icon icon=\"time\" size={10} />\n <span>{formatTime(binding.avgRenderDuration)}</span>\n </div>\n </Tooltip>\n )}\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"HookRow.js","names":["Button","Icon","Tag","Tooltip","classNames","React","useMemo","useSharedTick","formatRelativeTime","styles","getHookIcon","hookType","getHookColor","hookObject","hookObjects","hookAction","hookLinks","hookObjectSet","truncateSignature","sig","maxLength","length","substring","HookRow","binding","formatTime","ms","toFixed","monitorStore","tick","status","state","lastUpdate","age","timeline","getEventTimeline","lastEmission","getLastEmission","subscriptionId","Date","now","timestamp","renderCount","createElement","className","hookRow","content","hookBadge","icon","size","minimal","intent","statusBadge","errorMessage","querySignature","title","undefined","filePath","lineNumber","variant","locationButton","onClick","window","open","text","split","pop","avgRenderDuration","performance"],"sources":["HookRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Icon, Tag, Tooltip } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useMemo } from \"react\";\n\nimport { useSharedTick } from \"../hooks/useSharedTick.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { ComponentHookBinding } from \"../utils/ComponentQueryRegistry.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\n\nimport styles from \"./HookRow.module.scss\";\n\nfunction getHookIcon(hookType: string) {\n switch (hookType) {\n case \"useOsdkObject\":\n return \"document\";\n case \"useOsdkObjects\":\n return \"properties\";\n case \"useOsdkAction\":\n return \"cog\";\n case \"useLinks\":\n return \"flows\";\n case \"useObjectSet\":\n return \"database\";\n default:\n return \"code\";\n }\n}\n\nfunction getHookColor(hookType: string) {\n switch (hookType) {\n case \"useOsdkObject\":\n return styles.hookObject;\n case \"useOsdkObjects\":\n return styles.hookObjects;\n case \"useOsdkAction\":\n return styles.hookAction;\n case \"useLinks\":\n return styles.hookLinks;\n case \"useObjectSet\":\n return styles.hookObjectSet;\n default:\n return \"\";\n }\n}\n\nfunction truncateSignature(sig: string, maxLength: number = 50) {\n if (sig.length <= maxLength) {\n return sig;\n }\n return `${sig.substring(0, maxLength)}...`;\n}\n\nexport interface HookRowProps {\n binding: ComponentHookBinding;\n formatTime?: (ms: number) => string;\n monitorStore?: MonitorStore;\n}\n\ninterface HookStatus {\n state: \"idle\" | \"loading\" | \"success\" | \"error\" | \"stale\";\n lastUpdate: number | null;\n age: number | null;\n errorMessage?: string;\n}\n\nexport const HookRow: React.FC<HookRowProps> = ({\n binding,\n formatTime = (ms) => `${ms.toFixed(1)}ms`,\n monitorStore,\n}) => {\n const tick = useSharedTick();\n\n const status = useMemo((): HookStatus => {\n if (!monitorStore) {\n return { state: \"idle\", lastUpdate: null, age: null };\n }\n\n const timeline = monitorStore.getEventTimeline();\n const lastEmission = timeline.getLastEmission(binding.subscriptionId);\n\n if (lastEmission) {\n const age = Date.now() - lastEmission.timestamp;\n const isStale = age > 30000;\n\n return {\n state: isStale ? \"stale\" : \"success\",\n lastUpdate: lastEmission.timestamp,\n age,\n };\n } else if (binding.renderCount > 0) {\n return { state: \"loading\", lastUpdate: null, age: null };\n }\n\n return { state: \"idle\", lastUpdate: null, age: null };\n }, [tick, monitorStore, binding.subscriptionId, binding.renderCount]);\n\n const handleClickLocation = () => {\n if (binding.filePath && binding.lineNumber) {\n window.open(`vscode://file/${binding.filePath}:${binding.lineNumber}`);\n }\n };\n\n const getStatusBadge = () => {\n if (!monitorStore) {\n return null;\n }\n\n switch (status.state) {\n case \"loading\":\n return (\n <Tooltip content=\"Loading data...\">\n <Tag\n minimal\n intent=\"primary\"\n icon=\"refresh\"\n className={styles.statusBadge}\n >\n Loading\n </Tag>\n </Tooltip>\n );\n case \"success\":\n return status.lastUpdate != null ? (\n <Tooltip\n content={`Last updated ${formatRelativeTime(status.lastUpdate)}`}\n >\n <Tag\n minimal\n intent=\"success\"\n icon=\"tick\"\n className={styles.statusBadge}\n >\n {formatRelativeTime(status.lastUpdate)}\n </Tag>\n </Tooltip>\n ) : null;\n case \"stale\":\n return status.lastUpdate != null ? (\n <Tooltip\n content={`Data is stale (${formatRelativeTime(status.lastUpdate)})`}\n >\n <Tag\n minimal\n intent=\"warning\"\n icon=\"time\"\n className={styles.statusBadge}\n >\n Stale\n </Tag>\n </Tooltip>\n ) : null;\n case \"error\":\n return (\n <Tooltip content={status.errorMessage || \"Error loading data\"}>\n <Tag\n minimal\n intent=\"danger\"\n icon=\"error\"\n className={styles.statusBadge}\n >\n Error\n </Tag>\n </Tooltip>\n );\n case \"idle\":\n default:\n return null;\n }\n };\n\n return (\n <div className={styles.hookRow}>\n <Tooltip content={binding.hookType}>\n <div\n className={classNames(\n styles.hookBadge,\n getHookColor(binding.hookType)\n )}\n >\n <Icon icon={getHookIcon(binding.hookType)} size={12} />\n <span className={styles.hookType}>{binding.hookType}</span>\n </div>\n </Tooltip>\n\n {getStatusBadge()}\n\n <Tooltip content={binding.querySignature}>\n <div\n className={styles.querySignature}\n title={\n binding.querySignature.length > 50\n ? binding.querySignature\n : undefined\n }\n >\n {truncateSignature(binding.querySignature)}\n </div>\n </Tooltip>\n\n {binding.filePath && (\n <Tooltip content={`${binding.filePath}:${binding.lineNumber}`}>\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"document\"\n className={styles.locationButton}\n onClick={handleClickLocation}\n text={`${binding.filePath.split(\"/\").pop()}:${binding.lineNumber}`}\n />\n </Tooltip>\n )}\n\n {binding.renderCount > 0 && (\n <Tooltip\n content={`Renders: ${binding.renderCount}, Avg: ${formatTime(\n binding.avgRenderDuration\n )}`}\n >\n <div className={styles.performance}>\n <Icon icon=\"time\" size={10} />\n <span>{formatTime(binding.avgRenderDuration)}</span>\n </div>\n </Tooltip>\n )}\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ImprovementsTab.js","names":["Button","Code","Collapse","Icon","classNames","React","useState","useRecommendations","styles","ImprovementsTab","monitorStore","recommendations","isLoading","dismiss","refresh","expandedIds","setExpandedIds","Set","toggleExpanded","id","prev","next","has","delete","add","levelIcon","level","createElement","icon","intent","size","className","improvementsTab","length","emptyState","emptyIcon","emptySubtext","Fragment","improvementsHeader","variant","onClick","improvementsList","map","rec","index","key","improvementCard","style","improvementHeader","improvementIcon","improvementLevel","toUpperCase","improvementCategory","category","improvementTitle","title","improvementSummary","suggestion","code","isOpen","improvementDetails","codeSection","codeBlock","improvementActions","dismissible"],"sources":["ImprovementsTab.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Code, Collapse, Icon } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useState } from \"react\";\nimport { useRecommendations } from \"../hooks/useRecommendations.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { Recommendation } from \"../utils/PerformanceRecommendationEngine.js\";\nimport styles from \"./ImprovementsTab.module.scss\";\n\ninterface ImprovementsTabProps {\n monitorStore: MonitorStore;\n}\n\nexport const ImprovementsTab: React.FC<ImprovementsTabProps> = (\n { monitorStore },\n) => {\n const { recommendations, isLoading, dismiss, refresh } = useRecommendations(\n monitorStore,\n );\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n\n const toggleExpanded = (id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n const levelIcon = (level: Recommendation[\"level\"]): React.ReactNode => {\n switch (level) {\n case \"critical\":\n return <Icon icon=\"error\" intent=\"danger\" size={14} />;\n case \"high\":\n return <Icon icon=\"warning-sign\" intent=\"warning\" size={14} />;\n case \"medium\":\n return <Icon icon=\"lightbulb\" intent=\"primary\" size={14} />;\n case \"low\":\n return <Icon icon=\"info-sign\" intent=\"primary\" size={14} />;\n default:\n return <Icon icon=\"dot\" size={14} />;\n }\n };\n\n return (\n <div className={styles.improvementsTab}>\n {isLoading && recommendations.length === 0\n ? <div className={styles.emptyState}>Analyzing...</div>\n : recommendations.length === 0\n ? (\n <div className={styles.emptyState}>\n <div className={styles.emptyIcon}>\n <Icon icon=\"tick-circle\" intent=\"success\" size={32} />\n </div>\n <div>No improvements found</div>\n <div className={styles.emptySubtext}>\n Your app is looking good!\n </div>\n </div>\n )\n : null}\n\n {recommendations.length > 0 && (\n <>\n <div className={styles.improvementsHeader}>\n <span>\n {recommendations.length} potential improvement\n {recommendations.length !== 1 ? \"s\" : \"\"}\n </span>\n <Button\n size=\"small\"\n variant=\"minimal\"\n icon=\"refresh\"\n onClick={refresh}\n >\n Refresh\n </Button>\n </div>\n\n <div className={styles.improvementsList}>\n {recommendations.map((rec, index) => (\n <div\n key={rec.id}\n className={styles.improvementCard}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n >\n <div\n className={styles.improvementHeader}\n onClick={() => toggleExpanded(rec.id)}\n >\n <span className={styles.improvementIcon}>\n {levelIcon(rec.level)}\n </span>\n <span\n className={classNames(\n styles.improvementLevel,\n styles[`level-${rec.level}`],\n )}\n >\n {rec.level.toUpperCase()}\n </span>\n <span className={styles.improvementCategory}>\n {rec.category}\n </span>\n <span className={styles.improvementTitle}>{rec.title}</span>\n </div>\n\n <div className={styles.improvementSummary}>\n {rec.suggestion}\n </div>\n\n {rec.code && (\n <Collapse isOpen={expandedIds.has(rec.id)}>\n <div className={styles.improvementDetails}>\n <div className={styles.codeSection}>\n <Code className={styles.codeBlock}>{rec.code}</Code>\n </div>\n </div>\n </Collapse>\n )}\n\n <div className={styles.improvementActions}>\n {rec.code && (\n <Button\n size=\"small\"\n variant=\"minimal\"\n onClick={() => toggleExpanded(rec.id)}\n >\n {expandedIds.has(rec.id) ? \"Hide Code\" : \"Show Code\"}\n </Button>\n )}\n {rec.dismissible && (\n <Button\n size=\"small\"\n variant=\"minimal\"\n onClick={() => dismiss(rec.id)}\n >\n Dismiss\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"ImprovementsTab.js","names":["Button","Code","Collapse","Icon","classNames","React","useState","useRecommendations","styles","ImprovementsTab","monitorStore","recommendations","isLoading","dismiss","refresh","expandedIds","setExpandedIds","Set","toggleExpanded","id","prev","next","has","delete","add","levelIcon","level","createElement","icon","intent","size","className","improvementsTab","length","emptyState","emptyIcon","emptySubtext","Fragment","improvementsHeader","variant","onClick","improvementsList","map","rec","index","key","improvementCard","style","improvementHeader","improvementIcon","improvementLevel","toUpperCase","improvementCategory","category","improvementTitle","title","improvementSummary","suggestion","code","isOpen","improvementDetails","codeSection","codeBlock","improvementActions","dismissible"],"sources":["ImprovementsTab.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Code, Collapse, Icon } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useState } from \"react\";\n\nimport { useRecommendations } from \"../hooks/useRecommendations.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { Recommendation } from \"../utils/PerformanceRecommendationEngine.js\";\n\nimport styles from \"./ImprovementsTab.module.scss\";\n\ninterface ImprovementsTabProps {\n monitorStore: MonitorStore;\n}\n\nexport const ImprovementsTab: React.FC<ImprovementsTabProps> = ({\n monitorStore,\n}) => {\n const { recommendations, isLoading, dismiss, refresh } =\n useRecommendations(monitorStore);\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n\n const toggleExpanded = (id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n const levelIcon = (level: Recommendation[\"level\"]): React.ReactNode => {\n switch (level) {\n case \"critical\":\n return <Icon icon=\"error\" intent=\"danger\" size={14} />;\n case \"high\":\n return <Icon icon=\"warning-sign\" intent=\"warning\" size={14} />;\n case \"medium\":\n return <Icon icon=\"lightbulb\" intent=\"primary\" size={14} />;\n case \"low\":\n return <Icon icon=\"info-sign\" intent=\"primary\" size={14} />;\n default:\n return <Icon icon=\"dot\" size={14} />;\n }\n };\n\n return (\n <div className={styles.improvementsTab}>\n {isLoading && recommendations.length === 0 ? (\n <div className={styles.emptyState}>Analyzing...</div>\n ) : recommendations.length === 0 ? (\n <div className={styles.emptyState}>\n <div className={styles.emptyIcon}>\n <Icon icon=\"tick-circle\" intent=\"success\" size={32} />\n </div>\n <div>No improvements found</div>\n <div className={styles.emptySubtext}>Your app is looking good!</div>\n </div>\n ) : null}\n\n {recommendations.length > 0 && (\n <>\n <div className={styles.improvementsHeader}>\n <span>\n {recommendations.length} potential improvement\n {recommendations.length !== 1 ? \"s\" : \"\"}\n </span>\n <Button\n size=\"small\"\n variant=\"minimal\"\n icon=\"refresh\"\n onClick={refresh}\n >\n Refresh\n </Button>\n </div>\n\n <div className={styles.improvementsList}>\n {recommendations.map((rec, index) => (\n <div\n key={rec.id}\n className={styles.improvementCard}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n >\n <div\n className={styles.improvementHeader}\n onClick={() => toggleExpanded(rec.id)}\n >\n <span className={styles.improvementIcon}>\n {levelIcon(rec.level)}\n </span>\n <span\n className={classNames(\n styles.improvementLevel,\n styles[`level-${rec.level}`]\n )}\n >\n {rec.level.toUpperCase()}\n </span>\n <span className={styles.improvementCategory}>\n {rec.category}\n </span>\n <span className={styles.improvementTitle}>{rec.title}</span>\n </div>\n\n <div className={styles.improvementSummary}>\n {rec.suggestion}\n </div>\n\n {rec.code && (\n <Collapse isOpen={expandedIds.has(rec.id)}>\n <div className={styles.improvementDetails}>\n <div className={styles.codeSection}>\n <Code className={styles.codeBlock}>{rec.code}</Code>\n </div>\n </div>\n </Collapse>\n )}\n\n <div className={styles.improvementActions}>\n {rec.code && (\n <Button\n size=\"small\"\n variant=\"minimal\"\n onClick={() => toggleExpanded(rec.id)}\n >\n {expandedIds.has(rec.id) ? \"Hide Code\" : \"Show Code\"}\n </Button>\n )}\n {rec.dismissible && (\n <Button\n size=\"small\"\n variant=\"minimal\"\n onClick={() => dismiss(rec.id)}\n >\n Dismiss\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAEC,IAAI,QAAQ,mBAAmB;AAChE,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AAEvC,SAASC,kBAAkB,QAAQ,gCAAgC;AAInE,OAAOC,MAAM,MAAM,+BAA+B;AAMlD,OAAO,MAAMC,eAA+C,GAAGA,CAAC;EAC9DC;AACF,CAAC,KAAK;EACJ,MAAM;IAAEC,eAAe;IAAEC,SAAS;IAAEC,OAAO;IAAEC;EAAQ,CAAC,GACpDP,kBAAkB,CAACG,YAAY,CAAC;EAClC,MAAM,CAACK,WAAW,EAAEC,cAAc,CAAC,GAAGV,QAAQ,CAAc,IAAIW,GAAG,CAAC,CAAC,CAAC;EAEtE,MAAMC,cAAc,GAAIC,EAAU,IAAK;IACrCH,cAAc,CAAEI,IAAI,IAAK;MACvB,MAAMC,IAAI,GAAG,IAAIJ,GAAG,CAACG,IAAI,CAAC;MAC1B,IAAIC,IAAI,CAACC,GAAG,CAACH,EAAE,CAAC,EAAE;QAChBE,IAAI,CAACE,MAAM,CAACJ,EAAE,CAAC;MACjB,CAAC,MAAM;QACLE,IAAI,CAACG,GAAG,CAACL,EAAE,CAAC;MACd;MACA,OAAOE,IAAI;IACb,CAAC,CAAC;EACJ,CAAC;EAED,MAAMI,SAAS,GAAIC,KAA8B,IAAsB;IACrE,QAAQA,KAAK;MACX,KAAK,UAAU;QACb,oBAAOrB,KAAA,CAAAsB,aAAA,CAACxB,IAAI;UAACyB,IAAI,EAAC,OAAO;UAACC,MAAM,EAAC,QAAQ;UAACC,IAAI,EAAE;QAAG,CAAE,CAAC;MACxD,KAAK,MAAM;QACT,oBAAOzB,KAAA,CAAAsB,aAAA,CAACxB,IAAI;UAACyB,IAAI,EAAC,cAAc;UAACC,MAAM,EAAC,SAAS;UAACC,IAAI,EAAE;QAAG,CAAE,CAAC;MAChE,KAAK,QAAQ;QACX,oBAAOzB,KAAA,CAAAsB,aAAA,CAACxB,IAAI;UAACyB,IAAI,EAAC,WAAW;UAACC,MAAM,EAAC,SAAS;UAACC,IAAI,EAAE;QAAG,CAAE,CAAC;MAC7D,KAAK,KAAK;QACR,oBAAOzB,KAAA,CAAAsB,aAAA,CAACxB,IAAI;UAACyB,IAAI,EAAC,WAAW;UAACC,MAAM,EAAC,SAAS;UAACC,IAAI,EAAE;QAAG,CAAE,CAAC;MAC7D;QACE,oBAAOzB,KAAA,CAAAsB,aAAA,CAACxB,IAAI;UAACyB,IAAI,EAAC,KAAK;UAACE,IAAI,EAAE;QAAG,CAAE,CAAC;IACxC;EACF,CAAC;EAED,oBACEzB,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAACwB;EAAgB,GACpCpB,SAAS,IAAID,eAAe,CAACsB,MAAM,KAAK,CAAC,gBACxC5B,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAAC0B;EAAW,GAAC,cAAiB,CAAC,GACnDvB,eAAe,CAACsB,MAAM,KAAK,CAAC,gBAC9B5B,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAAC0B;EAAW,gBAChC7B,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAAC2B;EAAU,gBAC/B9B,KAAA,CAAAsB,aAAA,CAACxB,IAAI;IAACyB,IAAI,EAAC,aAAa;IAACC,MAAM,EAAC,SAAS;IAACC,IAAI,EAAE;EAAG,CAAE,CAClD,CAAC,eACNzB,KAAA,CAAAsB,aAAA,cAAK,uBAA0B,CAAC,eAChCtB,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAAC4B;EAAa,GAAC,2BAA8B,CAChE,CAAC,GACJ,IAAI,EAEPzB,eAAe,CAACsB,MAAM,GAAG,CAAC,iBACzB5B,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAgC,QAAA,qBACEhC,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAAC8B;EAAmB,gBACxCjC,KAAA,CAAAsB,aAAA,eACGhB,eAAe,CAACsB,MAAM,EAAC,wBACxB,EAACtB,eAAe,CAACsB,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,EAClC,CAAC,eACP5B,KAAA,CAAAsB,aAAA,CAAC3B,MAAM;IACL8B,IAAI,EAAC,OAAO;IACZS,OAAO,EAAC,SAAS;IACjBX,IAAI,EAAC,SAAS;IACdY,OAAO,EAAE1B;EAAQ,GAClB,SAEO,CACL,CAAC,eAENT,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAACiC;EAAiB,GACrC9B,eAAe,CAAC+B,GAAG,CAAC,CAACC,GAAG,EAAEC,KAAK,kBAC9BvC,KAAA,CAAAsB,aAAA;IACEkB,GAAG,EAAEF,GAAG,CAACxB,EAAG;IACZY,SAAS,EAAEvB,MAAM,CAACsC,eAAgB;IAClCC,KAAK,EAAE;MAAE,kBAAkB,EAAEH;IAAM;EAAyB,gBAE5DvC,KAAA,CAAAsB,aAAA;IACEI,SAAS,EAAEvB,MAAM,CAACwC,iBAAkB;IACpCR,OAAO,EAAEA,CAAA,KAAMtB,cAAc,CAACyB,GAAG,CAACxB,EAAE;EAAE,gBAEtCd,KAAA,CAAAsB,aAAA;IAAMI,SAAS,EAAEvB,MAAM,CAACyC;EAAgB,GACrCxB,SAAS,CAACkB,GAAG,CAACjB,KAAK,CAChB,CAAC,eACPrB,KAAA,CAAAsB,aAAA;IACEI,SAAS,EAAE3B,UAAU,CACnBI,MAAM,CAAC0C,gBAAgB,EACvB1C,MAAM,CAAC,SAASmC,GAAG,CAACjB,KAAK,EAAE,CAC7B;EAAE,GAEDiB,GAAG,CAACjB,KAAK,CAACyB,WAAW,CAAC,CACnB,CAAC,eACP9C,KAAA,CAAAsB,aAAA;IAAMI,SAAS,EAAEvB,MAAM,CAAC4C;EAAoB,GACzCT,GAAG,CAACU,QACD,CAAC,eACPhD,KAAA,CAAAsB,aAAA;IAAMI,SAAS,EAAEvB,MAAM,CAAC8C;EAAiB,GAAEX,GAAG,CAACY,KAAY,CACxD,CAAC,eAENlD,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAACgD;EAAmB,GACvCb,GAAG,CAACc,UACF,CAAC,EAELd,GAAG,CAACe,IAAI,iBACPrD,KAAA,CAAAsB,aAAA,CAACzB,QAAQ;IAACyD,MAAM,EAAE5C,WAAW,CAACO,GAAG,CAACqB,GAAG,CAACxB,EAAE;EAAE,gBACxCd,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAACoD;EAAmB,gBACxCvD,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAACqD;EAAY,gBACjCxD,KAAA,CAAAsB,aAAA,CAAC1B,IAAI;IAAC8B,SAAS,EAAEvB,MAAM,CAACsD;EAAU,GAAEnB,GAAG,CAACe,IAAW,CAChD,CACF,CACG,CACX,eAEDrD,KAAA,CAAAsB,aAAA;IAAKI,SAAS,EAAEvB,MAAM,CAACuD;EAAmB,GACvCpB,GAAG,CAACe,IAAI,iBACPrD,KAAA,CAAAsB,aAAA,CAAC3B,MAAM;IACL8B,IAAI,EAAC,OAAO;IACZS,OAAO,EAAC,SAAS;IACjBC,OAAO,EAAEA,CAAA,KAAMtB,cAAc,CAACyB,GAAG,CAACxB,EAAE;EAAE,GAErCJ,WAAW,CAACO,GAAG,CAACqB,GAAG,CAACxB,EAAE,CAAC,GAAG,WAAW,GAAG,WACnC,CACT,EACAwB,GAAG,CAACqB,WAAW,iBACd3D,KAAA,CAAAsB,aAAA,CAAC3B,MAAM;IACL8B,IAAI,EAAC,OAAO;IACZS,OAAO,EAAC,SAAS;IACjBC,OAAO,EAAEA,CAAA,KAAM3B,OAAO,CAAC8B,GAAG,CAACxB,EAAE;EAAE,GAChC,SAEO,CAEP,CACF,CACN,CACE,CACL,CAED,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"InspectorSelectionHeader.js","names":["Button","Callout","Icon","Tooltip","React","styles","InspectorSelectionHeader","error","onDismissError","isSelectionActive","onActivateSelection","infoText","activeWarningText","buttonLabel","showHelpTooltip","createElement","className","header","intent","icon","variant","size","onClick","dismissButton","info","Fragment","content","helpIcon","disabled","activateButton"],"sources":["InspectorSelectionHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Callout, Icon, Tooltip } from \"@blueprintjs/core\";\nimport React from \"react\";\nimport styles from \"./InterceptTab.module.scss\";\n\nexport interface InspectorSelectionHeaderProps {\n error: string | null;\n onDismissError: () => void;\n isSelectionActive: boolean;\n onActivateSelection: () => void;\n infoText: React.ReactNode;\n activeWarningText: string;\n buttonLabel: string;\n showHelpTooltip?: boolean;\n}\n\nexport const InspectorSelectionHeader: React.FC<\n InspectorSelectionHeaderProps\n> = ({\n error,\n onDismissError,\n isSelectionActive,\n onActivateSelection,\n infoText,\n activeWarningText,\n buttonLabel,\n showHelpTooltip,\n}) => {\n return (\n <div className={styles.header}>\n {error && (\n <Callout intent=\"danger\" icon=\"error\" className={styles.error}>\n {error}\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"cross\"\n aria-label=\"Dismiss error\"\n onClick={onDismissError}\n className={styles.dismissButton}\n />\n </Callout>\n )}\n\n <Callout intent=\"primary\" icon=\"info-sign\" className={styles.info}>\n {infoText}\n {showHelpTooltip && (\n <>\n {\" \"}\n <Tooltip content=\"If you're unable to find OSDK usage where you expect try hovering over a related component\">\n <Icon\n icon=\"info-sign\"\n size={12}\n className={styles.helpIcon}\n />\n </Tooltip>\n </>\n )}\n </Callout>\n\n <Button\n size=\"large\"\n intent={isSelectionActive ? \"warning\" : \"primary\"}\n icon=\"style\"\n onClick={onActivateSelection}\n disabled={isSelectionActive}\n className={styles.activateButton}\n >\n {isSelectionActive ? \"Selection Mode Active\" : buttonLabel}\n </Button>\n\n {isSelectionActive && (\n <Callout intent=\"warning\" icon=\"hand\">\n {activeWarningText} Press <kbd>Esc</kbd> to cancel.\n </Callout>\n )}\n </div>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAEC,OAAO,QAAQ,mBAAmB;AAClE,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,MAAM,MAAM,4BAA4B;AAa/C,OAAO,MAAMC,wBAEZ,GAAGA,CAAC;EACHC,KAAK;EACLC,cAAc;EACdC,iBAAiB;EACjBC,mBAAmB;EACnBC,QAAQ;EACRC,iBAAiB;EACjBC,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,oBACEV,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAEX,MAAM,CAACY;EAAO,GAC3BV,KAAK,iBACJH,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,QAAQ;IAACC,IAAI,EAAC,OAAO;IAACH,SAAS,EAAEX,MAAM,CAACE;EAAM,GAC3DA,KAAK,eACNH,KAAA,CAAAW,aAAA,CAACf,MAAM;IACLoB,OAAO,EAAC,SAAS;IACjBC,IAAI,EAAC,OAAO;IACZF,IAAI,EAAC,OAAO;IACZ,cAAW,eAAe;IAC1BG,OAAO,EAAEd,cAAe;IACxBQ,SAAS,EAAEX,MAAM,CAACkB;EAAc,CACjC,CACM,CACV,eAEDnB,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,SAAS;IAACC,IAAI,EAAC,WAAW;IAACH,SAAS,EAAEX,MAAM,CAACmB;EAAK,GAC/Db,QAAQ,EACRG,eAAe,iBACdV,KAAA,CAAAW,aAAA,CAAAX,KAAA,CAAAqB,QAAA,QACG,GAAG,eACJrB,KAAA,CAAAW,aAAA,CAACZ,OAAO;IAACuB,OAAO,EAAC;EAA4F,gBAC3GtB,KAAA,CAAAW,aAAA,CAACb,IAAI;IACHiB,IAAI,EAAC,WAAW;IAChBE,IAAI,EAAE,EAAG;IACTL,SAAS,EAAEX,MAAM,CAACsB;EAAS,CAC5B,CACM,CACT,CAEG,CAAC,eAEVvB,KAAA,CAAAW,aAAA,CAACf,MAAM;IACLqB,IAAI,EAAC,OAAO;IACZH,MAAM,EAAET,iBAAiB,GAAG,SAAS,GAAG,SAAU;IAClDU,IAAI,EAAC,OAAO;IACZG,OAAO,EAAEZ,mBAAoB;IAC7BkB,QAAQ,EAAEnB,iBAAkB;IAC5BO,SAAS,EAAEX,MAAM,CAACwB;EAAe,GAEhCpB,iBAAiB,GAAG,uBAAuB,GAAGI,WACzC,CAAC,EAERJ,iBAAiB,iBAChBL,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,SAAS;IAACC,IAAI,EAAC;EAAM,GAClCP,iBAAiB,EAAC,SAAO,eAAAR,KAAA,CAAAW,aAAA,cAAK,KAAQ,CAAC,eACjC,CAER,CAAC;AAEV,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"InspectorSelectionHeader.js","names":["Button","Callout","Icon","Tooltip","React","styles","InspectorSelectionHeader","error","onDismissError","isSelectionActive","onActivateSelection","infoText","activeWarningText","buttonLabel","showHelpTooltip","createElement","className","header","intent","icon","variant","size","onClick","dismissButton","info","Fragment","content","helpIcon","disabled","activateButton"],"sources":["InspectorSelectionHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Callout, Icon, Tooltip } from \"@blueprintjs/core\";\nimport React from \"react\";\n\nimport styles from \"./InterceptTab.module.scss\";\n\nexport interface InspectorSelectionHeaderProps {\n error: string | null;\n onDismissError: () => void;\n isSelectionActive: boolean;\n onActivateSelection: () => void;\n infoText: React.ReactNode;\n activeWarningText: string;\n buttonLabel: string;\n showHelpTooltip?: boolean;\n}\n\nexport const InspectorSelectionHeader: React.FC<\n InspectorSelectionHeaderProps\n> = ({\n error,\n onDismissError,\n isSelectionActive,\n onActivateSelection,\n infoText,\n activeWarningText,\n buttonLabel,\n showHelpTooltip,\n}) => {\n return (\n <div className={styles.header}>\n {error && (\n <Callout intent=\"danger\" icon=\"error\" className={styles.error}>\n {error}\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"cross\"\n aria-label=\"Dismiss error\"\n onClick={onDismissError}\n className={styles.dismissButton}\n />\n </Callout>\n )}\n\n <Callout intent=\"primary\" icon=\"info-sign\" className={styles.info}>\n {infoText}\n {showHelpTooltip && (\n <>\n {\" \"}\n <Tooltip content=\"If you're unable to find OSDK usage where you expect try hovering over a related component\">\n <Icon icon=\"info-sign\" size={12} className={styles.helpIcon} />\n </Tooltip>\n </>\n )}\n </Callout>\n\n <Button\n size=\"large\"\n intent={isSelectionActive ? \"warning\" : \"primary\"}\n icon=\"style\"\n onClick={onActivateSelection}\n disabled={isSelectionActive}\n className={styles.activateButton}\n >\n {isSelectionActive ? \"Selection Mode Active\" : buttonLabel}\n </Button>\n\n {isSelectionActive && (\n <Callout intent=\"warning\" icon=\"hand\">\n {activeWarningText} Press <kbd>Esc</kbd> to cancel.\n </Callout>\n )}\n </div>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAEC,OAAO,QAAQ,mBAAmB;AAClE,OAAOC,KAAK,MAAM,OAAO;AAEzB,OAAOC,MAAM,MAAM,4BAA4B;AAa/C,OAAO,MAAMC,wBAEZ,GAAGA,CAAC;EACHC,KAAK;EACLC,cAAc;EACdC,iBAAiB;EACjBC,mBAAmB;EACnBC,QAAQ;EACRC,iBAAiB;EACjBC,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,oBACEV,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAEX,MAAM,CAACY;EAAO,GAC3BV,KAAK,iBACJH,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,QAAQ;IAACC,IAAI,EAAC,OAAO;IAACH,SAAS,EAAEX,MAAM,CAACE;EAAM,GAC3DA,KAAK,eACNH,KAAA,CAAAW,aAAA,CAACf,MAAM;IACLoB,OAAO,EAAC,SAAS;IACjBC,IAAI,EAAC,OAAO;IACZF,IAAI,EAAC,OAAO;IACZ,cAAW,eAAe;IAC1BG,OAAO,EAAEd,cAAe;IACxBQ,SAAS,EAAEX,MAAM,CAACkB;EAAc,CACjC,CACM,CACV,eAEDnB,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,SAAS;IAACC,IAAI,EAAC,WAAW;IAACH,SAAS,EAAEX,MAAM,CAACmB;EAAK,GAC/Db,QAAQ,EACRG,eAAe,iBACdV,KAAA,CAAAW,aAAA,CAAAX,KAAA,CAAAqB,QAAA,QACG,GAAG,eACJrB,KAAA,CAAAW,aAAA,CAACZ,OAAO;IAACuB,OAAO,EAAC;EAA4F,gBAC3GtB,KAAA,CAAAW,aAAA,CAACb,IAAI;IAACiB,IAAI,EAAC,WAAW;IAACE,IAAI,EAAE,EAAG;IAACL,SAAS,EAAEX,MAAM,CAACsB;EAAS,CAAE,CACvD,CACT,CAEG,CAAC,eAEVvB,KAAA,CAAAW,aAAA,CAACf,MAAM;IACLqB,IAAI,EAAC,OAAO;IACZH,MAAM,EAAET,iBAAiB,GAAG,SAAS,GAAG,SAAU;IAClDU,IAAI,EAAC,OAAO;IACZG,OAAO,EAAEZ,mBAAoB;IAC7BkB,QAAQ,EAAEnB,iBAAkB;IAC5BO,SAAS,EAAEX,MAAM,CAACwB;EAAe,GAEhCpB,iBAAiB,GAAG,uBAAuB,GAAGI,WACzC,CAAC,EAERJ,iBAAiB,iBAChBL,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,SAAS;IAACC,IAAI,EAAC;EAAM,GAClCP,iBAAiB,EAAC,SAAO,eAAAR,KAAA,CAAAW,aAAA,cAAK,KAAQ,CAAC,eACjC,CAER,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -20,10 +20,10 @@ import { createPollingStore } from "../hooks/createPollingStore.js";
20
20
  import { useInspectorSelection } from "../hooks/useInspectorSelection.js";
21
21
  import { MockDataGenerator } from "../utils/MockDataGenerator.js";
22
22
  import { InspectorSelectionHeader } from "./InspectorSelectionHeader.js";
23
- import styles from "./InterceptTab.module.scss.js";
24
23
  import { createMatcherFromPrimitive, createResponseFromConfig, getMockPrimitiveInfo, MockEditor, MockItem } from "./MockEditor.js";
25
24
  import { OverrideEditor, OverrideItem } from "./OverrideEditor.js";
26
25
  import { PrimitiveSelectionPanel } from "./PrimitiveSelectionPanel.js";
26
+ import styles from "./InterceptTab.module.scss.js";
27
27
  const lazyJson = () => import("@codemirror/lang-json").then(m => m.json);
28
28
  let jsonExtensionValue = null;
29
29
  const jsonExtensionListeners = new Set();
@@ -62,8 +62,8 @@ function parseJsonField(text, fieldName) {
62
62
  };
63
63
  }
64
64
  }
65
- const DEFAULT_STATIC_DATA = "{\n \"status\": \"SUCCESS\",\n \"data\": {}\n}";
66
- const DEFAULT_FUNCTION_CODE = "function generateMock(params) {\n return {\n status: \"SUCCESS\",\n data: {}\n };\n}";
65
+ const DEFAULT_STATIC_DATA = '{\n "status": "SUCCESS",\n "data": {}\n}';
66
+ const DEFAULT_FUNCTION_CODE = 'function generateMock(params) {\n return {\n status: "SUCCESS",\n data: {}\n };\n}';
67
67
  const DEFAULT_ERROR_MESSAGE = "Mock request failed";
68
68
  const initialState = {
69
69
  selectedPrimitive: null,
@@ -501,7 +501,7 @@ export const InterceptTab = ({
501
501
  } else if (mockType === "static" && staticData) {
502
502
  try {
503
503
  mockData = JSON.parse(staticData);
504
- } catch (_jsonError) {
504
+ } catch {
505
505
  dispatch({
506
506
  type: "SET_ERROR",
507
507
  error: "Invalid JSON in mock data. Please check your JSON syntax."
@@ -750,7 +750,7 @@ export const InterceptTab = ({
750
750
  }),
751
751
  isSelectionActive: isSelectionActive,
752
752
  onActivateSelection: activateSelection,
753
- infoText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("strong", null, "Intercept:"), " ", "Select a component to mock responses or override query parameters."),
753
+ infoText: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("strong", null, "Intercept:"), " Select a component to mock responses or override query parameters."),
754
754
  activeWarningText: "Selection mode is active. Click on any component to discover its OSDK usage.",
755
755
  buttonLabel: "Select Component",
756
756
  showHelpTooltip: true