@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":"MonitoringPanel.js","names":["Button","Classes","Tooltip","classNames","React","useCallback","useMemo","useRef","useState","createPortal","DegradationNotice","useFiberCapabilities","validateFiberAccess","usePersistedState","ComputeTab","DebuggingTab","InterceptTab","MonitorErrorBoundary","styles","PerformanceTab","darkModeMql","window","matchMedia","undefined","subscribeDarkMode","callback","addEventListener","removeEventListener","getDarkModeSnapshot","matches","subscribeWindowSize","windowSizeSnapshot","width","innerWidth","height","innerHeight","getWindowSizeSnapshot","current","UI_CONSTANTS","DEFAULT_PANEL_WIDTH","DEFAULT_PANEL_HEIGHT","DEFAULT_PANEL_RIGHT_OFFSET","DEFAULT_PANEL_TOP_OFFSET","MIN_PANEL_WIDTH","MIN_PANEL_HEIGHT","TOOLTIP_HOVER_DELAY","DOCKED_BOTTOM_HEIGHT","DOCKED_RIGHT_WIDTH","MIN_DOCKED_BOTTOM_HEIGHT","MIN_DOCKED_RIGHT_WIDTH","MAX_DOCKED_BOTTOM_HEIGHT","MAX_DOCKED_RIGHT_WIDTH","MonitoringPanel","monitorStore","metricsStore","getMetricsStore","computeStore","getComputeStore","fiberCapabilities","activeTab","setActiveTab","position","setPosition","x","y","collapsed","dockMode","themePreference","setThemePreference","systemPrefersDark","useSyncExternalStore","resolvedTheme","panelRef","isDragging","isResizing","dragStart","elemX","elemY","resizeStart","setPositionRef","dragAbortRef","attachDragListeners","abort","controller","AbortController","signal","document","e","deltaX","clientX","deltaY","clientY","prev","Math","max","min","handle","newHeight","newWidth","newX","newY","includes","handleMouseDown","target","closest","controls","preventDefault","handleResizeMouseDown","stopPropagation","handleDockToggle","nextMode","windowSize","effectivePosition","maxX","maxY","createElement","content","placement","hoverOpenDelay","className","minimized","onClick","minimizedIcon","body","panelClassName","panel","DARK","floating","dockedBottom","dockedRight","ref","style","left","top","right","bottom","cls","horizontal","vertical","corner","topLeft","topRight","bottomLeft","bottomRight","map","key","resizeHandle","onMouseDown","header","title","badge","variant","size","icon","reset","tabs","role","tab","type","tabButton","tabButtonActive","charAt","toUpperCase","slice","hookInstalled","fiberAccessWorking","onRetry","tabContentVisible","tabContentHidden","theme","SafeMonitoringPanel","props"],"sources":["MonitoringPanel.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, Classes, Tooltip } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n DegradationNotice,\n useFiberCapabilities,\n} from \"../fiber/DegradationNotice.js\";\nimport { validateFiberAccess } from \"../fiber/validation.js\";\nimport { usePersistedState } from \"../hooks/usePersistedState.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { PanelPosition } from \"../types/index.js\";\nimport { ComputeTab } from \"./ComputeTab.js\";\nimport { DebuggingTab } from \"./DebuggingTab.js\";\nimport { InterceptTab } from \"./InterceptTab.js\";\nimport { MonitorErrorBoundary } from \"./MonitorErrorBoundary.js\";\nimport styles from \"./MonitoringPanel.module.scss\";\nimport { PerformanceTab } from \"./PerformanceTab.js\";\n\nconst darkModeMql = typeof window !== \"undefined\"\n ? window.matchMedia(\"(prefers-color-scheme: dark)\")\n : undefined;\n\nfunction subscribeDarkMode(callback: () => void): () => void {\n if (darkModeMql) {\n darkModeMql.addEventListener(\"change\", callback);\n return () => darkModeMql.removeEventListener(\"change\", callback);\n }\n return () => {};\n}\n\nfunction getDarkModeSnapshot(): boolean {\n return darkModeMql ? darkModeMql.matches : true;\n}\n\nfunction subscribeWindowSize(callback: () => void): () => void {\n window.addEventListener(\"resize\", callback);\n return () => window.removeEventListener(\"resize\", callback);\n}\n\nlet windowSizeSnapshot = typeof window !== \"undefined\"\n ? { width: window.innerWidth, height: window.innerHeight }\n : { width: 0, height: 0 };\n\nfunction getWindowSizeSnapshot(): { width: number; height: number } {\n const current = { width: window.innerWidth, height: window.innerHeight };\n if (\n current.width !== windowSizeSnapshot.width\n || current.height !== windowSizeSnapshot.height\n ) {\n windowSizeSnapshot = current;\n }\n return windowSizeSnapshot;\n}\n\nconst UI_CONSTANTS = {\n DEFAULT_PANEL_WIDTH: 400,\n DEFAULT_PANEL_HEIGHT: 600,\n DEFAULT_PANEL_RIGHT_OFFSET: 420,\n DEFAULT_PANEL_TOP_OFFSET: 20,\n MIN_PANEL_WIDTH: 320,\n MIN_PANEL_HEIGHT: 200,\n TOOLTIP_HOVER_DELAY: 500,\n DOCKED_BOTTOM_HEIGHT: 400,\n DOCKED_RIGHT_WIDTH: 500,\n MIN_DOCKED_BOTTOM_HEIGHT: 200,\n MIN_DOCKED_RIGHT_WIDTH: 320,\n MAX_DOCKED_BOTTOM_HEIGHT: 800,\n MAX_DOCKED_RIGHT_WIDTH: 800,\n};\n\nexport interface MonitoringPanelProps {\n /** The MonitorStore instance that provides all metrics, compute, and component tracking data. */\n monitorStore: MonitorStore;\n}\n\nexport const MonitoringPanel: React.FC<MonitoringPanelProps> = ({\n monitorStore,\n}) => {\n const metricsStore = monitorStore.getMetricsStore();\n const computeStore = monitorStore.getComputeStore();\n const fiberCapabilities = useFiberCapabilities();\n const [activeTab, setActiveTab] = useState<\n | \"performance\"\n | \"compute\"\n | \"intercept\"\n | \"debugging\"\n >(\"performance\");\n const [position, setPosition] = usePersistedState<PanelPosition>(\n \"osdk-monitor-position\",\n {\n x: window.innerWidth - UI_CONSTANTS.DEFAULT_PANEL_RIGHT_OFFSET,\n y: UI_CONSTANTS.DEFAULT_PANEL_TOP_OFFSET,\n width: UI_CONSTANTS.DEFAULT_PANEL_WIDTH,\n height: UI_CONSTANTS.DEFAULT_PANEL_HEIGHT,\n collapsed: false,\n dockMode: \"floating\",\n },\n );\n\n const [themePreference, setThemePreference] = usePersistedState<\n \"light\" | \"dark\" | \"auto\"\n >(\"osdk-devtools-theme\", \"dark\");\n\n const systemPrefersDark = React.useSyncExternalStore(\n subscribeDarkMode,\n getDarkModeSnapshot,\n );\n\n const resolvedTheme = useMemo(\n () =>\n themePreference === \"auto\"\n ? (systemPrefersDark ? \"dark\" : \"light\")\n : themePreference,\n [themePreference, systemPrefersDark],\n );\n\n const panelRef = useRef<HTMLDivElement>(null);\n const isDragging = useRef(false);\n const isResizing = useRef<string | null>(null);\n const dragStart = useRef({ x: 0, y: 0, elemX: 0, elemY: 0 });\n const resizeStart = useRef({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n elemX: 0,\n elemY: 0,\n });\n\n const setPositionRef = useRef(setPosition);\n setPositionRef.current = setPosition;\n\n const dragAbortRef = useRef<AbortController | null>(null);\n\n const attachDragListeners = useCallback(() => {\n dragAbortRef.current?.abort();\n const controller = new AbortController();\n dragAbortRef.current = controller;\n const { signal } = controller;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (isDragging.current) {\n const deltaX = e.clientX - dragStart.current.x;\n const deltaY = e.clientY - dragStart.current.y;\n setPositionRef.current((prev) => ({\n ...prev,\n x: Math.max(\n 0,\n Math.min(\n window.innerWidth - prev.width,\n dragStart.current.elemX + deltaX,\n ),\n ),\n y: Math.max(\n 0,\n Math.min(\n window.innerHeight - prev.height,\n dragStart.current.elemY + deltaY,\n ),\n ),\n }));\n } else if (isResizing.current) {\n const deltaX = e.clientX - resizeStart.current.x;\n const deltaY = e.clientY - resizeStart.current.y;\n const handle = isResizing.current;\n\n setPositionRef.current((prev) => {\n if (prev.dockMode === \"docked-bottom\") {\n const newHeight = Math.max(\n UI_CONSTANTS.MIN_DOCKED_BOTTOM_HEIGHT,\n Math.min(\n UI_CONSTANTS.MAX_DOCKED_BOTTOM_HEIGHT,\n resizeStart.current.height - deltaY,\n ),\n );\n return {\n ...prev,\n height: newHeight,\n y: window.innerHeight - newHeight,\n };\n }\n\n if (prev.dockMode === \"docked-right\") {\n const newWidth = Math.max(\n UI_CONSTANTS.MIN_DOCKED_RIGHT_WIDTH,\n Math.min(\n UI_CONSTANTS.MAX_DOCKED_RIGHT_WIDTH,\n resizeStart.current.width - deltaX,\n ),\n );\n return {\n ...prev,\n width: newWidth,\n x: window.innerWidth - newWidth,\n };\n }\n\n let newX = prev.x;\n let newY = prev.y;\n let newWidth = prev.width;\n let newHeight = prev.height;\n\n if (handle.includes(\"right\")) {\n newWidth = Math.max(\n UI_CONSTANTS.MIN_PANEL_WIDTH,\n resizeStart.current.width + deltaX,\n );\n }\n if (handle.includes(\"left\")) {\n newWidth = Math.max(\n UI_CONSTANTS.MIN_PANEL_WIDTH,\n resizeStart.current.width - deltaX,\n );\n newX = resizeStart.current.elemX + deltaX;\n if (newWidth === UI_CONSTANTS.MIN_PANEL_WIDTH) {\n newX = resizeStart.current.elemX + resizeStart.current.width\n - UI_CONSTANTS.MIN_PANEL_WIDTH;\n }\n }\n if (handle.includes(\"bottom\")) {\n newHeight = Math.max(\n UI_CONSTANTS.MIN_PANEL_HEIGHT,\n resizeStart.current.height + deltaY,\n );\n }\n if (handle.includes(\"top\")) {\n newHeight = Math.max(\n UI_CONSTANTS.MIN_PANEL_HEIGHT,\n resizeStart.current.height - deltaY,\n );\n newY = resizeStart.current.elemY + deltaY;\n if (newHeight === UI_CONSTANTS.MIN_PANEL_HEIGHT) {\n newY = resizeStart.current.elemY + resizeStart.current.height\n - UI_CONSTANTS.MIN_PANEL_HEIGHT;\n }\n }\n\n return {\n ...prev,\n x: newX,\n y: newY,\n width: newWidth,\n height: newHeight,\n };\n });\n }\n };\n\n const handleMouseUp = () => {\n isDragging.current = false;\n isResizing.current = null;\n controller.abort();\n dragAbortRef.current = null;\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove, { signal });\n document.addEventListener(\"mouseup\", handleMouseUp, { signal });\n }, []);\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if ((e.target as HTMLElement).closest(`.${styles.controls}`)) {\n return;\n }\n if (position.dockMode !== \"floating\") {\n return;\n }\n isDragging.current = true;\n dragStart.current = {\n x: e.clientX,\n y: e.clientY,\n elemX: position.x,\n elemY: position.y,\n };\n e.preventDefault();\n attachDragListeners();\n },\n [position, attachDragListeners],\n );\n\n const handleResizeMouseDown = useCallback(\n (e: React.MouseEvent, handle: string) => {\n isResizing.current = handle;\n resizeStart.current = {\n x: e.clientX,\n y: e.clientY,\n width: position.width,\n height: position.height,\n elemX: position.x,\n elemY: position.y,\n };\n e.preventDefault();\n e.stopPropagation();\n attachDragListeners();\n },\n [position, attachDragListeners],\n );\n\n const handleDockToggle = useCallback(() => {\n setPosition((prev) => {\n const nextMode = prev.dockMode === \"floating\"\n ? \"docked-bottom\"\n : prev.dockMode === \"docked-bottom\"\n ? \"docked-right\"\n : \"floating\";\n\n if (nextMode === \"docked-bottom\") {\n return {\n x: 0,\n y: window.innerHeight - UI_CONSTANTS.DOCKED_BOTTOM_HEIGHT,\n width: window.innerWidth,\n height: UI_CONSTANTS.DOCKED_BOTTOM_HEIGHT,\n collapsed: false,\n dockMode: nextMode,\n };\n } else if (nextMode === \"docked-right\") {\n return {\n x: window.innerWidth - UI_CONSTANTS.DOCKED_RIGHT_WIDTH,\n y: 0,\n width: UI_CONSTANTS.DOCKED_RIGHT_WIDTH,\n height: window.innerHeight,\n collapsed: false,\n dockMode: nextMode,\n };\n } else {\n return {\n x: window.innerWidth - UI_CONSTANTS.DEFAULT_PANEL_RIGHT_OFFSET,\n y: UI_CONSTANTS.DEFAULT_PANEL_TOP_OFFSET,\n width: UI_CONSTANTS.DEFAULT_PANEL_WIDTH,\n height: UI_CONSTANTS.DEFAULT_PANEL_HEIGHT,\n collapsed: false,\n dockMode: nextMode,\n };\n }\n });\n }, [setPosition]);\n\n const windowSize = React.useSyncExternalStore(\n subscribeWindowSize,\n getWindowSizeSnapshot,\n );\n\n const effectivePosition = useMemo(() => {\n if (position.dockMode === \"floating\") {\n const maxX = windowSize.width - position.width;\n const maxY = windowSize.height - position.height;\n return {\n ...position,\n x: Math.max(0, Math.min(position.x, maxX)),\n y: Math.max(0, Math.min(position.y, maxY)),\n };\n }\n if (position.dockMode === \"docked-bottom\") {\n return {\n ...position,\n width: windowSize.width,\n y: windowSize.height - position.height,\n };\n }\n if (position.dockMode === \"docked-right\") {\n return {\n ...position,\n height: windowSize.height,\n x: windowSize.width - position.width,\n };\n }\n return position;\n }, [position, windowSize]);\n\n if (position.collapsed) {\n return createPortal(\n <Tooltip\n content=\"View OSDK Devtools\"\n placement=\"left\"\n hoverOpenDelay={UI_CONSTANTS.TOOLTIP_HOVER_DELAY}\n >\n <div\n className={styles.minimized}\n data-dt-theme={resolvedTheme}\n onClick={() => setPosition((prev) => ({ ...prev, collapsed: false }))}\n >\n <span className={styles.minimizedIcon}>&lt;/&gt;</span>\n </div>\n </Tooltip>,\n document.body,\n );\n }\n\n const panelClassName = classNames(\n styles.panel,\n resolvedTheme === \"dark\" ? Classes.DARK : undefined,\n {\n [styles.floating]: position.dockMode === \"floating\",\n [styles.dockedBottom]: position.dockMode === \"docked-bottom\",\n [styles.dockedRight]: position.dockMode === \"docked-right\",\n },\n );\n return createPortal(\n <div\n ref={panelRef}\n className={panelClassName}\n data-dt-theme={resolvedTheme}\n style={{\n left: effectivePosition.dockMode === \"docked-bottom\"\n ? 0\n : effectivePosition.x,\n top: effectivePosition.dockMode === \"docked-right\"\n ? 0\n : effectivePosition.y,\n width: effectivePosition.width,\n height: effectivePosition.height,\n right: effectivePosition.dockMode === \"docked-right\" ? 0 : undefined,\n bottom: effectivePosition.dockMode === \"docked-bottom\" ? 0 : undefined,\n }}\n >\n {(position.dockMode === \"floating\"\n ? [\n { cls: [styles.horizontal, styles.top], handle: \"top\" },\n { cls: [styles.horizontal, styles.bottom], handle: \"bottom\" },\n { cls: [styles.vertical, styles.left], handle: \"left\" },\n { cls: [styles.vertical, styles.right], handle: \"right\" },\n { cls: [styles.corner, styles.topLeft], handle: \"topLeft\" },\n { cls: [styles.corner, styles.topRight], handle: \"topRight\" },\n { cls: [styles.corner, styles.bottomLeft], handle: \"bottomLeft\" },\n { cls: [styles.corner, styles.bottomRight], handle: \"bottomRight\" },\n ]\n : position.dockMode === \"docked-bottom\"\n ? [{ cls: [styles.horizontal, styles.top], handle: \"top\" }]\n : position.dockMode === \"docked-right\"\n ? [{ cls: [styles.vertical, styles.left], handle: \"left\" }]\n : []).map(({ cls, handle }) => (\n <div\n key={handle}\n className={classNames(styles.resizeHandle, ...cls)}\n onMouseDown={(e) => handleResizeMouseDown(e, handle)}\n />\n ))}\n\n <div className={styles.header} onMouseDown={handleMouseDown}>\n <h3 className={styles.title}>\n OSDK Devtools\n <span className={styles.badge}>Beta</span>\n </h3>\n <div className={styles.controls}>\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon={themePreference === \"dark\"\n ? \"moon\"\n : themePreference === \"light\"\n ? \"flash\"\n : \"automatic-updates\"}\n onClick={() =>\n setThemePreference(\n themePreference === \"dark\"\n ? \"light\"\n : themePreference === \"light\"\n ? \"auto\"\n : \"dark\",\n )}\n title={`Theme: ${themePreference} (click to cycle)`}\n aria-label={`Theme: ${themePreference}. Click to cycle.`}\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon={position.dockMode === \"floating\"\n ? \"widget\"\n : position.dockMode === \"docked-bottom\"\n ? \"layout-sorted-clusters\"\n : \"layout-hierarchy\"}\n onClick={handleDockToggle}\n title={`Dock mode: ${position.dockMode} (click to cycle)`}\n aria-label={`Dock mode: ${position.dockMode}. Click to cycle.`}\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"reset\"\n onClick={() => metricsStore.reset()}\n title=\"Reset metrics\"\n aria-label=\"Reset metrics\"\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"minimize\"\n onClick={() =>\n setPosition((prev) => ({ ...prev, collapsed: true }))}\n title=\"Minimize\"\n aria-label=\"Minimize devtools panel\"\n />\n </div>\n </div>\n\n <div className={styles.tabs} role=\"tablist\" aria-label=\"Devtools tabs\">\n {(\n [\"performance\", \"compute\", \"intercept\", \"debugging\"] as const\n ).map((tab) => (\n <button\n key={tab}\n type=\"button\"\n role=\"tab\"\n aria-selected={activeTab === tab}\n className={classNames(\n styles.tabButton,\n activeTab === tab && styles.tabButtonActive,\n )}\n onClick={() => setActiveTab(tab)}\n >\n {tab.charAt(0).toUpperCase() + tab.slice(1)}\n </button>\n ))}\n </div>\n\n <div className={styles.content}>\n {(!fiberCapabilities.hookInstalled\n || !fiberCapabilities.fiberAccessWorking) && (\n <DegradationNotice onRetry={() => validateFiberAccess()} />\n )}\n\n <div\n className={activeTab === \"performance\"\n ? styles.tabContentVisible\n : styles.tabContentHidden}\n >\n <PerformanceTab\n metricsStore={metricsStore}\n monitorStore={monitorStore}\n />\n </div>\n <div\n className={activeTab === \"compute\"\n ? styles.tabContentVisible\n : styles.tabContentHidden}\n >\n <ComputeTab computeStore={computeStore} />\n </div>\n <div\n className={activeTab === \"intercept\"\n ? styles.tabContentVisible\n : styles.tabContentHidden}\n >\n <InterceptTab monitorStore={monitorStore} theme={resolvedTheme} />\n </div>\n <div\n className={activeTab === \"debugging\"\n ? styles.tabContentVisible\n : styles.tabContentHidden}\n >\n <DebuggingTab monitorStore={monitorStore} />\n </div>\n </div>\n </div>,\n document.body,\n );\n};\n\nexport const SafeMonitoringPanel: React.FC<MonitoringPanelProps> = (props) => (\n <MonitorErrorBoundary>\n <MonitoringPanel {...props} />\n </MonitorErrorBoundary>\n);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MonitoringPanel.js","names":["Button","Classes","Tooltip","classNames","React","useCallback","useMemo","useRef","useState","createPortal","DegradationNotice","useFiberCapabilities","validateFiberAccess","usePersistedState","ComputeTab","DebuggingTab","InterceptTab","MonitorErrorBoundary","PerformanceTab","styles","darkModeMql","window","matchMedia","undefined","subscribeDarkMode","callback","addEventListener","removeEventListener","getDarkModeSnapshot","matches","subscribeWindowSize","windowSizeSnapshot","width","innerWidth","height","innerHeight","getWindowSizeSnapshot","current","UI_CONSTANTS","DEFAULT_PANEL_WIDTH","DEFAULT_PANEL_HEIGHT","DEFAULT_PANEL_RIGHT_OFFSET","DEFAULT_PANEL_TOP_OFFSET","MIN_PANEL_WIDTH","MIN_PANEL_HEIGHT","TOOLTIP_HOVER_DELAY","DOCKED_BOTTOM_HEIGHT","DOCKED_RIGHT_WIDTH","MIN_DOCKED_BOTTOM_HEIGHT","MIN_DOCKED_RIGHT_WIDTH","MAX_DOCKED_BOTTOM_HEIGHT","MAX_DOCKED_RIGHT_WIDTH","MonitoringPanel","monitorStore","metricsStore","getMetricsStore","computeStore","getComputeStore","fiberCapabilities","activeTab","setActiveTab","position","setPosition","x","y","collapsed","dockMode","themePreference","setThemePreference","systemPrefersDark","useSyncExternalStore","resolvedTheme","panelRef","isDragging","isResizing","dragStart","elemX","elemY","resizeStart","setPositionRef","dragAbortRef","attachDragListeners","abort","controller","AbortController","signal","document","e","deltaX","clientX","deltaY","clientY","prev","Math","max","min","handle","newHeight","newWidth","newX","newY","includes","handleMouseDown","target","closest","controls","preventDefault","handleResizeMouseDown","stopPropagation","handleDockToggle","nextMode","windowSize","effectivePosition","maxX","maxY","createElement","content","placement","hoverOpenDelay","className","minimized","onClick","minimizedIcon","body","panelClassName","panel","DARK","floating","dockedBottom","dockedRight","ref","style","left","top","right","bottom","cls","horizontal","vertical","corner","topLeft","topRight","bottomLeft","bottomRight","map","key","resizeHandle","onMouseDown","header","title","badge","variant","size","icon","reset","tabs","role","tab","type","tabButton","tabButtonActive","charAt","toUpperCase","slice","hookInstalled","fiberAccessWorking","onRetry","tabContentVisible","tabContentHidden","theme","SafeMonitoringPanel","props"],"sources":["MonitoringPanel.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, Classes, Tooltip } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport {\n DegradationNotice,\n useFiberCapabilities,\n} from \"../fiber/DegradationNotice.js\";\nimport { validateFiberAccess } from \"../fiber/validation.js\";\nimport { usePersistedState } from \"../hooks/usePersistedState.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { PanelPosition } from \"../types/index.js\";\nimport { ComputeTab } from \"./ComputeTab.js\";\nimport { DebuggingTab } from \"./DebuggingTab.js\";\nimport { InterceptTab } from \"./InterceptTab.js\";\nimport { MonitorErrorBoundary } from \"./MonitorErrorBoundary.js\";\nimport { PerformanceTab } from \"./PerformanceTab.js\";\n\nimport styles from \"./MonitoringPanel.module.scss\";\n\nconst darkModeMql =\n typeof window !== \"undefined\"\n ? window.matchMedia(\"(prefers-color-scheme: dark)\")\n : undefined;\n\nfunction subscribeDarkMode(callback: () => void): () => void {\n if (darkModeMql) {\n darkModeMql.addEventListener(\"change\", callback);\n return () => darkModeMql.removeEventListener(\"change\", callback);\n }\n return () => {};\n}\n\nfunction getDarkModeSnapshot(): boolean {\n return darkModeMql ? darkModeMql.matches : true;\n}\n\nfunction subscribeWindowSize(callback: () => void): () => void {\n window.addEventListener(\"resize\", callback);\n return () => window.removeEventListener(\"resize\", callback);\n}\n\nlet windowSizeSnapshot =\n typeof window !== \"undefined\"\n ? { width: window.innerWidth, height: window.innerHeight }\n : { width: 0, height: 0 };\n\nfunction getWindowSizeSnapshot(): { width: number; height: number } {\n const current = { width: window.innerWidth, height: window.innerHeight };\n if (\n current.width !== windowSizeSnapshot.width ||\n current.height !== windowSizeSnapshot.height\n ) {\n windowSizeSnapshot = current;\n }\n return windowSizeSnapshot;\n}\n\nconst UI_CONSTANTS = {\n DEFAULT_PANEL_WIDTH: 400,\n DEFAULT_PANEL_HEIGHT: 600,\n DEFAULT_PANEL_RIGHT_OFFSET: 420,\n DEFAULT_PANEL_TOP_OFFSET: 20,\n MIN_PANEL_WIDTH: 320,\n MIN_PANEL_HEIGHT: 200,\n TOOLTIP_HOVER_DELAY: 500,\n DOCKED_BOTTOM_HEIGHT: 400,\n DOCKED_RIGHT_WIDTH: 500,\n MIN_DOCKED_BOTTOM_HEIGHT: 200,\n MIN_DOCKED_RIGHT_WIDTH: 320,\n MAX_DOCKED_BOTTOM_HEIGHT: 800,\n MAX_DOCKED_RIGHT_WIDTH: 800,\n};\n\nexport interface MonitoringPanelProps {\n /** The MonitorStore instance that provides all metrics, compute, and component tracking data. */\n monitorStore: MonitorStore;\n}\n\nexport const MonitoringPanel: React.FC<MonitoringPanelProps> = ({\n monitorStore,\n}) => {\n const metricsStore = monitorStore.getMetricsStore();\n const computeStore = monitorStore.getComputeStore();\n const fiberCapabilities = useFiberCapabilities();\n const [activeTab, setActiveTab] = useState<\n \"performance\" | \"compute\" | \"intercept\" | \"debugging\"\n >(\"performance\");\n const [position, setPosition] = usePersistedState<PanelPosition>(\n \"osdk-monitor-position\",\n {\n x: window.innerWidth - UI_CONSTANTS.DEFAULT_PANEL_RIGHT_OFFSET,\n y: UI_CONSTANTS.DEFAULT_PANEL_TOP_OFFSET,\n width: UI_CONSTANTS.DEFAULT_PANEL_WIDTH,\n height: UI_CONSTANTS.DEFAULT_PANEL_HEIGHT,\n collapsed: false,\n dockMode: \"floating\",\n }\n );\n\n const [themePreference, setThemePreference] = usePersistedState<\n \"light\" | \"dark\" | \"auto\"\n >(\"osdk-devtools-theme\", \"dark\");\n\n const systemPrefersDark = React.useSyncExternalStore(\n subscribeDarkMode,\n getDarkModeSnapshot\n );\n\n const resolvedTheme = useMemo(\n () =>\n themePreference === \"auto\"\n ? systemPrefersDark\n ? \"dark\"\n : \"light\"\n : themePreference,\n [themePreference, systemPrefersDark]\n );\n\n const panelRef = useRef<HTMLDivElement>(null);\n const isDragging = useRef(false);\n const isResizing = useRef<string | null>(null);\n const dragStart = useRef({ x: 0, y: 0, elemX: 0, elemY: 0 });\n const resizeStart = useRef({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n elemX: 0,\n elemY: 0,\n });\n\n const setPositionRef = useRef(setPosition);\n setPositionRef.current = setPosition;\n\n const dragAbortRef = useRef<AbortController | null>(null);\n\n const attachDragListeners = useCallback(() => {\n dragAbortRef.current?.abort();\n const controller = new AbortController();\n dragAbortRef.current = controller;\n const { signal } = controller;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (isDragging.current) {\n const deltaX = e.clientX - dragStart.current.x;\n const deltaY = e.clientY - dragStart.current.y;\n setPositionRef.current((prev) => ({\n ...prev,\n x: Math.max(\n 0,\n Math.min(\n window.innerWidth - prev.width,\n dragStart.current.elemX + deltaX\n )\n ),\n y: Math.max(\n 0,\n Math.min(\n window.innerHeight - prev.height,\n dragStart.current.elemY + deltaY\n )\n ),\n }));\n } else if (isResizing.current) {\n const deltaX = e.clientX - resizeStart.current.x;\n const deltaY = e.clientY - resizeStart.current.y;\n const handle = isResizing.current;\n\n setPositionRef.current((prev) => {\n if (prev.dockMode === \"docked-bottom\") {\n const newHeight = Math.max(\n UI_CONSTANTS.MIN_DOCKED_BOTTOM_HEIGHT,\n Math.min(\n UI_CONSTANTS.MAX_DOCKED_BOTTOM_HEIGHT,\n resizeStart.current.height - deltaY\n )\n );\n return {\n ...prev,\n height: newHeight,\n y: window.innerHeight - newHeight,\n };\n }\n\n if (prev.dockMode === \"docked-right\") {\n const newWidth = Math.max(\n UI_CONSTANTS.MIN_DOCKED_RIGHT_WIDTH,\n Math.min(\n UI_CONSTANTS.MAX_DOCKED_RIGHT_WIDTH,\n resizeStart.current.width - deltaX\n )\n );\n return {\n ...prev,\n width: newWidth,\n x: window.innerWidth - newWidth,\n };\n }\n\n let newX = prev.x;\n let newY = prev.y;\n let newWidth = prev.width;\n let newHeight = prev.height;\n\n if (handle.includes(\"right\")) {\n newWidth = Math.max(\n UI_CONSTANTS.MIN_PANEL_WIDTH,\n resizeStart.current.width + deltaX\n );\n }\n if (handle.includes(\"left\")) {\n newWidth = Math.max(\n UI_CONSTANTS.MIN_PANEL_WIDTH,\n resizeStart.current.width - deltaX\n );\n newX = resizeStart.current.elemX + deltaX;\n if (newWidth === UI_CONSTANTS.MIN_PANEL_WIDTH) {\n newX =\n resizeStart.current.elemX +\n resizeStart.current.width -\n UI_CONSTANTS.MIN_PANEL_WIDTH;\n }\n }\n if (handle.includes(\"bottom\")) {\n newHeight = Math.max(\n UI_CONSTANTS.MIN_PANEL_HEIGHT,\n resizeStart.current.height + deltaY\n );\n }\n if (handle.includes(\"top\")) {\n newHeight = Math.max(\n UI_CONSTANTS.MIN_PANEL_HEIGHT,\n resizeStart.current.height - deltaY\n );\n newY = resizeStart.current.elemY + deltaY;\n if (newHeight === UI_CONSTANTS.MIN_PANEL_HEIGHT) {\n newY =\n resizeStart.current.elemY +\n resizeStart.current.height -\n UI_CONSTANTS.MIN_PANEL_HEIGHT;\n }\n }\n\n return {\n ...prev,\n x: newX,\n y: newY,\n width: newWidth,\n height: newHeight,\n };\n });\n }\n };\n\n const handleMouseUp = () => {\n isDragging.current = false;\n isResizing.current = null;\n controller.abort();\n dragAbortRef.current = null;\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove, { signal });\n document.addEventListener(\"mouseup\", handleMouseUp, { signal });\n }, []);\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n if ((e.target as HTMLElement).closest(`.${styles.controls}`)) {\n return;\n }\n if (position.dockMode !== \"floating\") {\n return;\n }\n isDragging.current = true;\n dragStart.current = {\n x: e.clientX,\n y: e.clientY,\n elemX: position.x,\n elemY: position.y,\n };\n e.preventDefault();\n attachDragListeners();\n },\n [position, attachDragListeners]\n );\n\n const handleResizeMouseDown = useCallback(\n (e: React.MouseEvent, handle: string) => {\n isResizing.current = handle;\n resizeStart.current = {\n x: e.clientX,\n y: e.clientY,\n width: position.width,\n height: position.height,\n elemX: position.x,\n elemY: position.y,\n };\n e.preventDefault();\n e.stopPropagation();\n attachDragListeners();\n },\n [position, attachDragListeners]\n );\n\n const handleDockToggle = useCallback(() => {\n setPosition((prev) => {\n const nextMode =\n prev.dockMode === \"floating\"\n ? \"docked-bottom\"\n : prev.dockMode === \"docked-bottom\"\n ? \"docked-right\"\n : \"floating\";\n\n if (nextMode === \"docked-bottom\") {\n return {\n x: 0,\n y: window.innerHeight - UI_CONSTANTS.DOCKED_BOTTOM_HEIGHT,\n width: window.innerWidth,\n height: UI_CONSTANTS.DOCKED_BOTTOM_HEIGHT,\n collapsed: false,\n dockMode: nextMode,\n };\n } else if (nextMode === \"docked-right\") {\n return {\n x: window.innerWidth - UI_CONSTANTS.DOCKED_RIGHT_WIDTH,\n y: 0,\n width: UI_CONSTANTS.DOCKED_RIGHT_WIDTH,\n height: window.innerHeight,\n collapsed: false,\n dockMode: nextMode,\n };\n } else {\n return {\n x: window.innerWidth - UI_CONSTANTS.DEFAULT_PANEL_RIGHT_OFFSET,\n y: UI_CONSTANTS.DEFAULT_PANEL_TOP_OFFSET,\n width: UI_CONSTANTS.DEFAULT_PANEL_WIDTH,\n height: UI_CONSTANTS.DEFAULT_PANEL_HEIGHT,\n collapsed: false,\n dockMode: nextMode,\n };\n }\n });\n }, [setPosition]);\n\n const windowSize = React.useSyncExternalStore(\n subscribeWindowSize,\n getWindowSizeSnapshot\n );\n\n const effectivePosition = useMemo(() => {\n if (position.dockMode === \"floating\") {\n const maxX = windowSize.width - position.width;\n const maxY = windowSize.height - position.height;\n return {\n ...position,\n x: Math.max(0, Math.min(position.x, maxX)),\n y: Math.max(0, Math.min(position.y, maxY)),\n };\n }\n if (position.dockMode === \"docked-bottom\") {\n return {\n ...position,\n width: windowSize.width,\n y: windowSize.height - position.height,\n };\n }\n if (position.dockMode === \"docked-right\") {\n return {\n ...position,\n height: windowSize.height,\n x: windowSize.width - position.width,\n };\n }\n return position;\n }, [position, windowSize]);\n\n if (position.collapsed) {\n return createPortal(\n <Tooltip\n content=\"View OSDK Devtools\"\n placement=\"left\"\n hoverOpenDelay={UI_CONSTANTS.TOOLTIP_HOVER_DELAY}\n >\n <div\n className={styles.minimized}\n data-dt-theme={resolvedTheme}\n onClick={() => setPosition((prev) => ({ ...prev, collapsed: false }))}\n >\n <span className={styles.minimizedIcon}>&lt;/&gt;</span>\n </div>\n </Tooltip>,\n document.body\n );\n }\n\n const panelClassName = classNames(\n styles.panel,\n resolvedTheme === \"dark\" ? Classes.DARK : undefined,\n {\n [styles.floating]: position.dockMode === \"floating\",\n [styles.dockedBottom]: position.dockMode === \"docked-bottom\",\n [styles.dockedRight]: position.dockMode === \"docked-right\",\n }\n );\n return createPortal(\n <div\n ref={panelRef}\n className={panelClassName}\n data-dt-theme={resolvedTheme}\n style={{\n left:\n effectivePosition.dockMode === \"docked-bottom\"\n ? 0\n : effectivePosition.x,\n top:\n effectivePosition.dockMode === \"docked-right\"\n ? 0\n : effectivePosition.y,\n width: effectivePosition.width,\n height: effectivePosition.height,\n right: effectivePosition.dockMode === \"docked-right\" ? 0 : undefined,\n bottom: effectivePosition.dockMode === \"docked-bottom\" ? 0 : undefined,\n }}\n >\n {(position.dockMode === \"floating\"\n ? [\n { cls: [styles.horizontal, styles.top], handle: \"top\" },\n { cls: [styles.horizontal, styles.bottom], handle: \"bottom\" },\n { cls: [styles.vertical, styles.left], handle: \"left\" },\n { cls: [styles.vertical, styles.right], handle: \"right\" },\n { cls: [styles.corner, styles.topLeft], handle: \"topLeft\" },\n { cls: [styles.corner, styles.topRight], handle: \"topRight\" },\n { cls: [styles.corner, styles.bottomLeft], handle: \"bottomLeft\" },\n { cls: [styles.corner, styles.bottomRight], handle: \"bottomRight\" },\n ]\n : position.dockMode === \"docked-bottom\"\n ? [{ cls: [styles.horizontal, styles.top], handle: \"top\" }]\n : position.dockMode === \"docked-right\"\n ? [{ cls: [styles.vertical, styles.left], handle: \"left\" }]\n : []\n ).map(({ cls, handle }) => (\n <div\n key={handle}\n className={classNames(styles.resizeHandle, ...cls)}\n onMouseDown={(e) => handleResizeMouseDown(e, handle)}\n />\n ))}\n\n <div className={styles.header} onMouseDown={handleMouseDown}>\n <h3 className={styles.title}>\n OSDK Devtools\n <span className={styles.badge}>Beta</span>\n </h3>\n <div className={styles.controls}>\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon={\n themePreference === \"dark\"\n ? \"moon\"\n : themePreference === \"light\"\n ? \"flash\"\n : \"automatic-updates\"\n }\n onClick={() =>\n setThemePreference(\n themePreference === \"dark\"\n ? \"light\"\n : themePreference === \"light\"\n ? \"auto\"\n : \"dark\"\n )\n }\n title={`Theme: ${themePreference} (click to cycle)`}\n aria-label={`Theme: ${themePreference}. Click to cycle.`}\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon={\n position.dockMode === \"floating\"\n ? \"widget\"\n : position.dockMode === \"docked-bottom\"\n ? \"layout-sorted-clusters\"\n : \"layout-hierarchy\"\n }\n onClick={handleDockToggle}\n title={`Dock mode: ${position.dockMode} (click to cycle)`}\n aria-label={`Dock mode: ${position.dockMode}. Click to cycle.`}\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"reset\"\n onClick={() => metricsStore.reset()}\n title=\"Reset metrics\"\n aria-label=\"Reset metrics\"\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"minimize\"\n onClick={() =>\n setPosition((prev) => ({ ...prev, collapsed: true }))\n }\n title=\"Minimize\"\n aria-label=\"Minimize devtools panel\"\n />\n </div>\n </div>\n\n <div className={styles.tabs} role=\"tablist\" aria-label=\"Devtools tabs\">\n {([\"performance\", \"compute\", \"intercept\", \"debugging\"] as const).map(\n (tab) => (\n <button\n key={tab}\n type=\"button\"\n role=\"tab\"\n aria-selected={activeTab === tab}\n className={classNames(\n styles.tabButton,\n activeTab === tab && styles.tabButtonActive\n )}\n onClick={() => setActiveTab(tab)}\n >\n {tab.charAt(0).toUpperCase() + tab.slice(1)}\n </button>\n )\n )}\n </div>\n\n <div className={styles.content}>\n {(!fiberCapabilities.hookInstalled ||\n !fiberCapabilities.fiberAccessWorking) && (\n <DegradationNotice onRetry={() => validateFiberAccess()} />\n )}\n\n <div\n className={\n activeTab === \"performance\"\n ? styles.tabContentVisible\n : styles.tabContentHidden\n }\n >\n <PerformanceTab\n metricsStore={metricsStore}\n monitorStore={monitorStore}\n />\n </div>\n <div\n className={\n activeTab === \"compute\"\n ? styles.tabContentVisible\n : styles.tabContentHidden\n }\n >\n <ComputeTab computeStore={computeStore} />\n </div>\n <div\n className={\n activeTab === \"intercept\"\n ? styles.tabContentVisible\n : styles.tabContentHidden\n }\n >\n <InterceptTab monitorStore={monitorStore} theme={resolvedTheme} />\n </div>\n <div\n className={\n activeTab === \"debugging\"\n ? styles.tabContentVisible\n : styles.tabContentHidden\n }\n >\n <DebuggingTab monitorStore={monitorStore} />\n </div>\n </div>\n </div>,\n document.body\n );\n};\n\nexport const SafeMonitoringPanel: React.FC<MonitoringPanelProps> = (props) => (\n <MonitorErrorBoundary>\n <MonitoringPanel {...props} />\n </MonitorErrorBoundary>\n);\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectLoadingMetrics.js","names":["classNames","React","formatNumber","styles","ObjectLoadingMetrics","analysisLoading","unusedFieldReport","createElement","className","metric","metricLabel","efficiencyPercent","averageEfficiency","toFixed","wasteKb","totalWastedBytes","Fragment","metricValue","inefficientComponents","success","warning","danger","totalComponents","metricSubtext","commonUnused","length"],"sources":["ObjectLoadingMetrics.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 classNames from \"classnames\";\nimport React from \"react\";\nimport { formatNumber } from \"../utils/format.js\";\nimport type { UnusedFieldReport } from \"../utils/UnusedFieldAnalyzer.js\";\nimport styles from \"./MonitoringPanel.module.scss\";\n\nexport interface ObjectLoadingMetricsProps {\n analysisLoading: boolean;\n unusedFieldReport: UnusedFieldReport | null;\n}\n\nexport const ObjectLoadingMetrics: React.FC<ObjectLoadingMetricsProps> = ({\n analysisLoading,\n unusedFieldReport,\n}) => {\n if (analysisLoading || !unusedFieldReport) {\n return (\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Analyzing...</span>\n </div>\n );\n }\n\n const efficiencyPercent = ((unusedFieldReport.averageEfficiency ?? 0) * 100)\n .toFixed(0);\n const wasteKb = ((unusedFieldReport.totalWastedBytes ?? 0) / 1024).toFixed(\n 1,\n );\n\n return (\n <>\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Inefficient Components</span>\n <span\n className={classNames(\n styles.metricValue,\n unusedFieldReport.inefficientComponents === 0\n ? styles.success\n : unusedFieldReport.inefficientComponents < 5\n ? styles.warning\n : styles.danger,\n )}\n >\n {formatNumber(unusedFieldReport.inefficientComponents)} of{\" \"}\n {formatNumber(unusedFieldReport.totalComponents)}\n </span>\n <span className={styles.metricSubtext}>\n {efficiencyPercent}% efficient\n </span>\n </div>\n\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Wasted Bandwidth</span>\n <span className={styles.metricValue}>\n {wasteKb}KB\n </span>\n <span className={styles.metricSubtext}>\n unused fields loaded\n </span>\n </div>\n\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Common Unused</span>\n <span className={styles.metricValue}>\n {formatNumber(unusedFieldReport.commonUnused.length)}\n </span>\n <span className={styles.metricSubtext}>\n fields unused across queries\n </span>\n </div>\n </>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,QAAQ,oBAAoB;AAEjD,OAAOC,MAAM,MAAM,+BAA+B;AAOlD,OAAO,MAAMC,oBAAyD,GAAGA,CAAC;EACxEC,eAAe;EACfC;AACF,CAAC,KAAK;EACJ,IAAID,eAAe,IAAI,CAACC,iBAAiB,EAAE;IACzC,oBACEL,KAAA,CAAAM,aAAA;MAAKC,SAAS,EAAEL,MAAM,CAACM;IAAO,gBAC5BR,KAAA,CAAAM,aAAA;MAAMC,SAAS,EAAEL,MAAM,CAACO;IAAY,GAAC,cAAkB,CACpD,CAAC;EAEV;EAEA,MAAMC,iBAAiB,GAAG,CAAC,CAACL,iBAAiB,CAACM,iBAAiB,IAAI,CAAC,IAAI,GAAG,EACxEC,OAAO,CAAC,CAAC,CAAC;EACb,MAAMC,OAAO,GAAG,CAAC,CAACR,iBAAiB,CAACS,gBAAgB,IAAI,CAAC,IAAI,IAAI,EAAEF,OAAO,CACxE,CACF,CAAC;EAED,oBACEZ,KAAA,CAAAM,aAAA,CAAAN,KAAA,CAAAe,QAAA,qBACEf,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAEL,MAAM,CAACM;EAAO,gBAC5BR,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACO;EAAY,GAAC,wBAA4B,CAAC,eAClET,KAAA,CAAAM,aAAA;IACEC,SAAS,EAAER,UAAU,CACnBG,MAAM,CAACc,WAAW,EAClBX,iBAAiB,CAACY,qBAAqB,KAAK,CAAC,GACzCf,MAAM,CAACgB,OAAO,GACdb,iBAAiB,CAACY,qBAAqB,GAAG,CAAC,GAC3Cf,MAAM,CAACiB,OAAO,GACdjB,MAAM,CAACkB,MACb;EAAE,GAEDnB,YAAY,CAACI,iBAAiB,CAACY,qBAAqB,CAAC,EAAC,KAAG,EAAC,GAAG,EAC7DhB,YAAY,CAACI,iBAAiB,CAACgB,eAAe,CAC3C,CAAC,eACPrB,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACoB;EAAc,GACnCZ,iBAAiB,EAAC,aACf,CACH,CAAC,eAENV,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAEL,MAAM,CAACM;EAAO,gBAC5BR,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACO;EAAY,GAAC,kBAAsB,CAAC,eAC5DT,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACc;EAAY,GACjCH,OAAO,EAAC,IACL,CAAC,eACPb,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACoB;EAAc,GAAC,sBAEjC,CACH,CAAC,eAENtB,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAEL,MAAM,CAACM;EAAO,gBAC5BR,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACO;EAAY,GAAC,eAAmB,CAAC,eACzDT,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACc;EAAY,GACjCf,YAAY,CAACI,iBAAiB,CAACkB,YAAY,CAACC,MAAM,CAC/C,CAAC,eACPxB,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACoB;EAAc,GAAC,8BAEjC,CACH,CACL,CAAC;AAEP,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"ObjectLoadingMetrics.js","names":["classNames","React","formatNumber","styles","ObjectLoadingMetrics","analysisLoading","unusedFieldReport","createElement","className","metric","metricLabel","efficiencyPercent","averageEfficiency","toFixed","wasteKb","totalWastedBytes","Fragment","metricValue","inefficientComponents","success","warning","danger","totalComponents","metricSubtext","commonUnused","length"],"sources":["ObjectLoadingMetrics.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 classNames from \"classnames\";\nimport React from \"react\";\n\nimport { formatNumber } from \"../utils/format.js\";\nimport type { UnusedFieldReport } from \"../utils/UnusedFieldAnalyzer.js\";\n\nimport styles from \"./MonitoringPanel.module.scss\";\n\nexport interface ObjectLoadingMetricsProps {\n analysisLoading: boolean;\n unusedFieldReport: UnusedFieldReport | null;\n}\n\nexport const ObjectLoadingMetrics: React.FC<ObjectLoadingMetricsProps> = ({\n analysisLoading,\n unusedFieldReport,\n}) => {\n if (analysisLoading || !unusedFieldReport) {\n return (\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Analyzing...</span>\n </div>\n );\n }\n\n const efficiencyPercent = (\n (unusedFieldReport.averageEfficiency ?? 0) * 100\n ).toFixed(0);\n const wasteKb = ((unusedFieldReport.totalWastedBytes ?? 0) / 1024).toFixed(1);\n\n return (\n <>\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Inefficient Components</span>\n <span\n className={classNames(\n styles.metricValue,\n unusedFieldReport.inefficientComponents === 0\n ? styles.success\n : unusedFieldReport.inefficientComponents < 5\n ? styles.warning\n : styles.danger\n )}\n >\n {formatNumber(unusedFieldReport.inefficientComponents)} of{\" \"}\n {formatNumber(unusedFieldReport.totalComponents)}\n </span>\n <span className={styles.metricSubtext}>\n {efficiencyPercent}% efficient\n </span>\n </div>\n\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Wasted Bandwidth</span>\n <span className={styles.metricValue}>{wasteKb}KB</span>\n <span className={styles.metricSubtext}>unused fields loaded</span>\n </div>\n\n <div className={styles.metric}>\n <span className={styles.metricLabel}>Common Unused</span>\n <span className={styles.metricValue}>\n {formatNumber(unusedFieldReport.commonUnused.length)}\n </span>\n <span className={styles.metricSubtext}>\n fields unused across queries\n </span>\n </div>\n </>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,YAAY,QAAQ,oBAAoB;AAGjD,OAAOC,MAAM,MAAM,+BAA+B;AAOlD,OAAO,MAAMC,oBAAyD,GAAGA,CAAC;EACxEC,eAAe;EACfC;AACF,CAAC,KAAK;EACJ,IAAID,eAAe,IAAI,CAACC,iBAAiB,EAAE;IACzC,oBACEL,KAAA,CAAAM,aAAA;MAAKC,SAAS,EAAEL,MAAM,CAACM;IAAO,gBAC5BR,KAAA,CAAAM,aAAA;MAAMC,SAAS,EAAEL,MAAM,CAACO;IAAY,GAAC,cAAkB,CACpD,CAAC;EAEV;EAEA,MAAMC,iBAAiB,GAAG,CACxB,CAACL,iBAAiB,CAACM,iBAAiB,IAAI,CAAC,IAAI,GAAG,EAChDC,OAAO,CAAC,CAAC,CAAC;EACZ,MAAMC,OAAO,GAAG,CAAC,CAACR,iBAAiB,CAACS,gBAAgB,IAAI,CAAC,IAAI,IAAI,EAAEF,OAAO,CAAC,CAAC,CAAC;EAE7E,oBACEZ,KAAA,CAAAM,aAAA,CAAAN,KAAA,CAAAe,QAAA,qBACEf,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAEL,MAAM,CAACM;EAAO,gBAC5BR,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACO;EAAY,GAAC,wBAA4B,CAAC,eAClET,KAAA,CAAAM,aAAA;IACEC,SAAS,EAAER,UAAU,CACnBG,MAAM,CAACc,WAAW,EAClBX,iBAAiB,CAACY,qBAAqB,KAAK,CAAC,GACzCf,MAAM,CAACgB,OAAO,GACdb,iBAAiB,CAACY,qBAAqB,GAAG,CAAC,GACzCf,MAAM,CAACiB,OAAO,GACdjB,MAAM,CAACkB,MACf;EAAE,GAEDnB,YAAY,CAACI,iBAAiB,CAACY,qBAAqB,CAAC,EAAC,KAAG,EAAC,GAAG,EAC7DhB,YAAY,CAACI,iBAAiB,CAACgB,eAAe,CAC3C,CAAC,eACPrB,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACoB;EAAc,GACnCZ,iBAAiB,EAAC,aACf,CACH,CAAC,eAENV,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAEL,MAAM,CAACM;EAAO,gBAC5BR,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACO;EAAY,GAAC,kBAAsB,CAAC,eAC5DT,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACc;EAAY,GAAEH,OAAO,EAAC,IAAQ,CAAC,eACvDb,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACoB;EAAc,GAAC,sBAA0B,CAC9D,CAAC,eAENtB,KAAA,CAAAM,aAAA;IAAKC,SAAS,EAAEL,MAAM,CAACM;EAAO,gBAC5BR,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACO;EAAY,GAAC,eAAmB,CAAC,eACzDT,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACc;EAAY,GACjCf,YAAY,CAACI,iBAAiB,CAACkB,YAAY,CAACC,MAAM,CAC/C,CAAC,eACPxB,KAAA,CAAAM,aAAA;IAAMC,SAAS,EAAEL,MAAM,CAACoB;EAAc,GAAC,8BAEjC,CACH,CACL,CAAC;AAEP,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"OsdkAppErrorBoundary.js","names":["React","OsdkAppErrorBoundary","Component","constructor","props","state","error","getDerivedStateFromError","componentDidCatch","errorInfo","source","componentStack","split","trim","undefined","monitorStore","getWindowErrorStore","recordError","reset","setState","render","children","fallback","createElement","role","message","type","onClick"],"sources":["OsdkAppErrorBoundary.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\n// Boundary for *host app* code. Wraps a subtree so that render errors\n// surface in the devtools Errors panel via WindowErrorStore.recordError.\n// Production-safe: production React doesn't route render errors through\n// console.error, so the Errors panel relies on this boundary for those.\n\nimport React from \"react\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\n\nexport interface OsdkAppErrorBoundaryProps {\n monitorStore: MonitorStore;\n children: React.ReactNode;\n fallback?:\n | React.ReactNode\n | ((error: Error, reset: () => void) => React.ReactNode);\n}\n\ninterface OsdkAppErrorBoundaryState {\n error: Error | null;\n}\n\nexport class OsdkAppErrorBoundary extends React.Component<\n OsdkAppErrorBoundaryProps,\n OsdkAppErrorBoundaryState\n> {\n constructor(props: OsdkAppErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): OsdkAppErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n const source = errorInfo.componentStack\n ? errorInfo.componentStack.split(\"\\n\")[1]?.trim()\n : undefined;\n this.props.monitorStore.getWindowErrorStore().recordError(error, source);\n }\n\n reset = (): void => {\n this.setState({ error: null });\n };\n\n render(): React.ReactNode {\n const { error } = this.state;\n if (error == null) {\n return this.props.children;\n }\n\n const { fallback } = this.props;\n if (typeof fallback === \"function\") {\n return fallback(error, this.reset);\n }\n if (fallback !== undefined) {\n return fallback;\n }\n\n return (\n <div role=\"alert\">\n <p>Something went wrong.</p>\n <pre>{error.message}</pre>\n <button type=\"button\" onClick={this.reset}>Reset</button>\n </div>\n );\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AAezB,OAAO,MAAMC,oBAAoB,SAASD,KAAK,CAACE,SAAS,CAGvD;EACAC,WAAWA,CAACC,KAAgC,EAAE;IAC5C,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;MAAEC,KAAK,EAAE;IAAK,CAAC;EAC9B;EAEA,OAAOC,wBAAwBA,CAACD,KAAY,EAA6B;IACvE,OAAO;MAAEA;IAAM,CAAC;EAClB;EAEAE,iBAAiBA,CAACF,KAAY,EAAEG,SAA0B,EAAQ;IAChE,MAAMC,MAAM,GAAGD,SAAS,CAACE,cAAc,GACnCF,SAAS,CAACE,cAAc,CAACC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAEC,IAAI,CAAC,CAAC,GAC/CC,SAAS;IACb,IAAI,CAACV,KAAK,CAACW,YAAY,CAACC,mBAAmB,CAAC,CAAC,CAACC,WAAW,CAACX,KAAK,EAAEI,MAAM,CAAC;EAC1E;EAEAQ,KAAK,GAAGA,CAAA,KAAY;IAClB,IAAI,CAACC,QAAQ,CAAC;MAAEb,KAAK,EAAE;IAAK,CAAC,CAAC;EAChC,CAAC;EAEDc,MAAMA,CAAA,EAAoB;IACxB,MAAM;MAAEd;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5B,IAAIC,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI,CAACF,KAAK,CAACiB,QAAQ;IAC5B;IAEA,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAClB,KAAK;IAC/B,IAAI,OAAOkB,QAAQ,KAAK,UAAU,EAAE;MAClC,OAAOA,QAAQ,CAAChB,KAAK,EAAE,IAAI,CAACY,KAAK,CAAC;IACpC;IACA,IAAII,QAAQ,KAAKR,SAAS,EAAE;MAC1B,OAAOQ,QAAQ;IACjB;IAEA,oBACEtB,KAAA,CAAAuB,aAAA;MAAKC,IAAI,EAAC;IAAO,gBACfxB,KAAA,CAAAuB,aAAA,YAAG,uBAAwB,CAAC,eAC5BvB,KAAA,CAAAuB,aAAA,cAAMjB,KAAK,CAACmB,OAAa,CAAC,eAC1BzB,KAAA,CAAAuB,aAAA;MAAQG,IAAI,EAAC,QAAQ;MAACC,OAAO,EAAE,IAAI,CAACT;IAAM,GAAC,OAAa,CACrD,CAAC;EAEV;AACF","ignoreList":[]}
1
+ {"version":3,"file":"OsdkAppErrorBoundary.js","names":["React","OsdkAppErrorBoundary","Component","constructor","props","state","error","getDerivedStateFromError","componentDidCatch","errorInfo","source","componentStack","split","trim","undefined","monitorStore","getWindowErrorStore","recordError","reset","setState","render","children","fallback","createElement","role","message","type","onClick"],"sources":["OsdkAppErrorBoundary.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\n// Boundary for *host app* code. Wraps a subtree so that render errors\n// surface in the devtools Errors panel via WindowErrorStore.recordError.\n// Production-safe: production React doesn't route render errors through\n// console.error, so the Errors panel relies on this boundary for those.\n\nimport React from \"react\";\n\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\n\nexport interface OsdkAppErrorBoundaryProps {\n monitorStore: MonitorStore;\n children: React.ReactNode;\n fallback?:\n | React.ReactNode\n | ((error: Error, reset: () => void) => React.ReactNode);\n}\n\ninterface OsdkAppErrorBoundaryState {\n error: Error | null;\n}\n\nexport class OsdkAppErrorBoundary extends React.Component<\n OsdkAppErrorBoundaryProps,\n OsdkAppErrorBoundaryState\n> {\n constructor(props: OsdkAppErrorBoundaryProps) {\n super(props);\n this.state = { error: null };\n }\n\n static getDerivedStateFromError(error: Error): OsdkAppErrorBoundaryState {\n return { error };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void {\n const source = errorInfo.componentStack\n ? errorInfo.componentStack.split(\"\\n\")[1]?.trim()\n : undefined;\n this.props.monitorStore.getWindowErrorStore().recordError(error, source);\n }\n\n reset = (): void => {\n this.setState({ error: null });\n };\n\n render(): React.ReactNode {\n const { error } = this.state;\n if (error == null) {\n return this.props.children;\n }\n\n const { fallback } = this.props;\n if (typeof fallback === \"function\") {\n return fallback(error, this.reset);\n }\n if (fallback !== undefined) {\n return fallback;\n }\n\n return (\n <div role=\"alert\">\n <p>Something went wrong.</p>\n <pre>{error.message}</pre>\n <button type=\"button\" onClick={this.reset}>\n Reset\n </button>\n </div>\n );\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,MAAM,OAAO;AAgBzB,OAAO,MAAMC,oBAAoB,SAASD,KAAK,CAACE,SAAS,CAGvD;EACAC,WAAWA,CAACC,KAAgC,EAAE;IAC5C,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;MAAEC,KAAK,EAAE;IAAK,CAAC;EAC9B;EAEA,OAAOC,wBAAwBA,CAACD,KAAY,EAA6B;IACvE,OAAO;MAAEA;IAAM,CAAC;EAClB;EAEAE,iBAAiBA,CAACF,KAAY,EAAEG,SAA0B,EAAQ;IAChE,MAAMC,MAAM,GAAGD,SAAS,CAACE,cAAc,GACnCF,SAAS,CAACE,cAAc,CAACC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAEC,IAAI,CAAC,CAAC,GAC/CC,SAAS;IACb,IAAI,CAACV,KAAK,CAACW,YAAY,CAACC,mBAAmB,CAAC,CAAC,CAACC,WAAW,CAACX,KAAK,EAAEI,MAAM,CAAC;EAC1E;EAEAQ,KAAK,GAAGA,CAAA,KAAY;IAClB,IAAI,CAACC,QAAQ,CAAC;MAAEb,KAAK,EAAE;IAAK,CAAC,CAAC;EAChC,CAAC;EAEDc,MAAMA,CAAA,EAAoB;IACxB,MAAM;MAAEd;IAAM,CAAC,GAAG,IAAI,CAACD,KAAK;IAC5B,IAAIC,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI,CAACF,KAAK,CAACiB,QAAQ;IAC5B;IAEA,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAAClB,KAAK;IAC/B,IAAI,OAAOkB,QAAQ,KAAK,UAAU,EAAE;MAClC,OAAOA,QAAQ,CAAChB,KAAK,EAAE,IAAI,CAACY,KAAK,CAAC;IACpC;IACA,IAAII,QAAQ,KAAKR,SAAS,EAAE;MAC1B,OAAOQ,QAAQ;IACjB;IAEA,oBACEtB,KAAA,CAAAuB,aAAA;MAAKC,IAAI,EAAC;IAAO,gBACfxB,KAAA,CAAAuB,aAAA,YAAG,uBAAwB,CAAC,eAC5BvB,KAAA,CAAAuB,aAAA,cAAMjB,KAAK,CAACmB,OAAa,CAAC,eAC1BzB,KAAA,CAAAuB,aAAA;MAAQG,IAAI,EAAC,QAAQ;MAACC,OAAO,EAAE,IAAI,CAACT;IAAM,GAAC,OAEnC,CACL,CAAC;EAEV;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"OsdkDevTools.js","names":["React","useContext","DevToolsContext","MonitoringPanel","GLOBAL_STORE_KEY","getGlobalMonitorStore","globalThis","candidate","undefined","OsdkDevTools","contextStore","monitorStore","createElement"],"sources":["OsdkDevTools.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 React, { useContext } from \"react\";\nimport { DevToolsContext } from \"../DevToolsContext.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport { MonitoringPanel } from \"./MonitoringPanel.js\";\n\nconst GLOBAL_STORE_KEY = \"__OSDK_DEVTOOLS_MONITOR_STORE__\";\n\nfunction getGlobalMonitorStore(): MonitorStore | undefined {\n if (\n typeof globalThis !== \"undefined\"\n && GLOBAL_STORE_KEY in globalThis\n ) {\n const candidate = (globalThis as Record<string, unknown>)[GLOBAL_STORE_KEY];\n if (\n typeof candidate === \"object\"\n && candidate != null\n && \"getMetricsStore\" in candidate\n && \"getComputeStore\" in candidate\n ) {\n return candidate as MonitorStore;\n }\n }\n return undefined;\n}\n\nexport function OsdkDevTools(): React.ReactElement | null {\n const contextStore = useContext(DevToolsContext);\n const monitorStore = contextStore\n ?? getGlobalMonitorStore()\n ?? null;\n\n if (!monitorStore) {\n return null;\n }\n return <MonitoringPanel monitorStore={monitorStore} />;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SAASC,eAAe,QAAQ,uBAAuB;AAEvD,SAASC,eAAe,QAAQ,sBAAsB;AAEtD,MAAMC,gBAAgB,GAAG,iCAAiC;AAE1D,SAASC,qBAAqBA,CAAA,EAA6B;EACzD,IACE,OAAOC,UAAU,KAAK,WAAW,IAC9BF,gBAAgB,IAAIE,UAAU,EACjC;IACA,MAAMC,SAAS,GAAID,UAAU,CAA6BF,gBAAgB,CAAC;IAC3E,IACE,OAAOG,SAAS,KAAK,QAAQ,IAC1BA,SAAS,IAAI,IAAI,IACjB,iBAAiB,IAAIA,SAAS,IAC9B,iBAAiB,IAAIA,SAAS,EACjC;MACA,OAAOA,SAAS;IAClB;EACF;EACA,OAAOC,SAAS;AAClB;AAEA,OAAO,SAASC,YAAYA,CAAA,EAA8B;EACxD,MAAMC,YAAY,GAAGT,UAAU,CAACC,eAAe,CAAC;EAChD,MAAMS,YAAY,GAAGD,YAAY,IAC5BL,qBAAqB,CAAC,CAAC,IACvB,IAAI;EAET,IAAI,CAACM,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EACA,oBAAOX,KAAA,CAAAY,aAAA,CAACT,eAAe;IAACQ,YAAY,EAAEA;EAAa,CAAE,CAAC;AACxD","ignoreList":[]}
1
+ {"version":3,"file":"OsdkDevTools.js","names":["React","useContext","DevToolsContext","MonitoringPanel","GLOBAL_STORE_KEY","getGlobalMonitorStore","globalThis","candidate","undefined","OsdkDevTools","contextStore","monitorStore","createElement"],"sources":["OsdkDevTools.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 React, { useContext } from \"react\";\n\nimport { DevToolsContext } from \"../DevToolsContext.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport { MonitoringPanel } from \"./MonitoringPanel.js\";\n\nconst GLOBAL_STORE_KEY = \"__OSDK_DEVTOOLS_MONITOR_STORE__\";\n\nfunction getGlobalMonitorStore(): MonitorStore | undefined {\n if (typeof globalThis !== \"undefined\" && GLOBAL_STORE_KEY in globalThis) {\n const candidate = (globalThis as Record<string, unknown>)[GLOBAL_STORE_KEY];\n if (\n typeof candidate === \"object\" &&\n candidate != null &&\n \"getMetricsStore\" in candidate &&\n \"getComputeStore\" in candidate\n ) {\n return candidate as MonitorStore;\n }\n }\n return undefined;\n}\n\nexport function OsdkDevTools(): React.ReactElement | null {\n const contextStore = useContext(DevToolsContext);\n const monitorStore = contextStore ?? getGlobalMonitorStore() ?? null;\n\n if (!monitorStore) {\n return null;\n }\n return <MonitoringPanel monitorStore={monitorStore} />;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,UAAU,QAAQ,OAAO;AAEzC,SAASC,eAAe,QAAQ,uBAAuB;AAEvD,SAASC,eAAe,QAAQ,sBAAsB;AAEtD,MAAMC,gBAAgB,GAAG,iCAAiC;AAE1D,SAASC,qBAAqBA,CAAA,EAA6B;EACzD,IAAI,OAAOC,UAAU,KAAK,WAAW,IAAIF,gBAAgB,IAAIE,UAAU,EAAE;IACvE,MAAMC,SAAS,GAAID,UAAU,CAA6BF,gBAAgB,CAAC;IAC3E,IACE,OAAOG,SAAS,KAAK,QAAQ,IAC7BA,SAAS,IAAI,IAAI,IACjB,iBAAiB,IAAIA,SAAS,IAC9B,iBAAiB,IAAIA,SAAS,EAC9B;MACA,OAAOA,SAAS;IAClB;EACF;EACA,OAAOC,SAAS;AAClB;AAEA,OAAO,SAASC,YAAYA,CAAA,EAA8B;EACxD,MAAMC,YAAY,GAAGT,UAAU,CAACC,eAAe,CAAC;EAChD,MAAMS,YAAY,GAAGD,YAAY,IAAIL,qBAAqB,CAAC,CAAC,IAAI,IAAI;EAEpE,IAAI,CAACM,YAAY,EAAE;IACjB,OAAO,IAAI;EACb;EACA,oBAAOX,KAAA,CAAAY,aAAA,CAACT,eAAe;IAACQ,YAAY,EAAEA;EAAa,CAAE,CAAC;AACxD","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"OverrideEditor.js","names":["Button","FormGroup","Icon","NumericInput","React","Suspense","styles","LazyCodeMirror","lazy","CodeMirrorPlaceholder","createElement","className","editorPlaceholder","OverrideEditor","selectedQuery","whereClauseText","orderByText","pageSize","groupByText","selectText","jsonExtensions","theme","dispatch","onApplyOverride","onClearSelection","editorPanel","panelHeader","icon","panelTitle","objectType","panelSubtitle","componentName","variant","size","onClick","fallback","editorContent","label","labelFor","value","onChange","val","type","text","extensions","height","placeholder","basicSetup","lineNumbers","foldGutter","isAggregation","Fragment","id","onValueChange","undefined","min","fill","editorActions","intent","OverrideItem","memo","override","onToggle","onRemove","onEdit","interceptItem","interceptItemContent","clickable","interceptItemHeader","hookType","interceptItemTitle","interceptBadge","interceptBadgeOverride","overrideItemStatus","enabled","statusEnabled","statusDisabled","interceptItemDetails","detail","interceptItemActions","title","displayName"],"sources":["OverrideEditor.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, FormGroup, Icon, NumericInput } from \"@blueprintjs/core\";\nimport type { ReactCodeMirrorProps } from \"@uiw/react-codemirror\";\nimport React, { Suspense } from \"react\";\nimport type { PrototypeOverride } from \"../prototyping/PrototypeOverrideStore.js\";\nimport type { InterceptAction, SelectedQuery } from \"./InterceptTab.js\";\nimport styles from \"./InterceptTab.module.scss\";\n\nconst LazyCodeMirror = React.lazy(() => import(\"@uiw/react-codemirror\"));\n\nfunction CodeMirrorPlaceholder() {\n return <div className={styles.editorPlaceholder}>Loading editor...</div>;\n}\n\ninterface OverrideEditorProps {\n selectedQuery: SelectedQuery;\n whereClauseText: string;\n orderByText: string;\n pageSize: number | undefined;\n groupByText: string;\n selectText: string;\n jsonExtensions: ReactCodeMirrorProps[\"extensions\"];\n theme: \"light\" | \"dark\";\n dispatch: React.Dispatch<InterceptAction>;\n onApplyOverride: () => void;\n onClearSelection: () => void;\n}\n\nexport const OverrideEditor: React.FC<OverrideEditorProps> = ({\n selectedQuery,\n whereClauseText,\n orderByText,\n pageSize,\n groupByText,\n selectText,\n jsonExtensions,\n theme,\n dispatch,\n onApplyOverride,\n onClearSelection,\n}) => {\n return (\n <div className={styles.editorPanel}>\n <div className={styles.panelHeader}>\n <Icon icon=\"edit\" />\n <div>\n <div className={styles.panelTitle}>\n {selectedQuery.objectType}\n </div>\n <div className={styles.panelSubtitle}>\n {selectedQuery.componentName}\n </div>\n </div>\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"cross\"\n aria-label=\"Close editor\"\n onClick={onClearSelection}\n />\n </div>\n\n <Suspense fallback={<CodeMirrorPlaceholder />}>\n <div className={styles.editorContent}>\n <FormGroup\n label=\"Where Clause (JSON)\"\n labelFor=\"where-clause\"\n >\n <LazyCodeMirror\n value={whereClauseText}\n onChange={(val) =>\n dispatch({ type: \"SET_WHERE_CLAUSE_TEXT\", text: val })}\n extensions={jsonExtensions}\n theme={theme}\n height=\"120px\"\n placeholder='{ \"status\": \"active\" }'\n basicSetup={{\n lineNumbers: false,\n foldGutter: false,\n }}\n />\n </FormGroup>\n\n {selectedQuery.isAggregation\n ? (\n <>\n <FormGroup label=\"Group By (JSON)\" labelFor=\"group-by\">\n <LazyCodeMirror\n value={groupByText}\n onChange={(val) =>\n dispatch({ type: \"SET_GROUP_BY_TEXT\", text: val })}\n extensions={jsonExtensions}\n theme={theme}\n height=\"80px\"\n placeholder='{ \"status\": \"exact\", \"department\": \"exact\" }'\n basicSetup={{ lineNumbers: false, foldGutter: false }}\n />\n </FormGroup>\n\n <FormGroup label=\"Select (JSON)\" labelFor=\"select\">\n <LazyCodeMirror\n value={selectText}\n onChange={(val) =>\n dispatch({ type: \"SET_SELECT_TEXT\", text: val })}\n extensions={jsonExtensions}\n theme={theme}\n height=\"80px\"\n placeholder='{ \"count\": { \"$count\": {} } }'\n basicSetup={{ lineNumbers: false, foldGutter: false }}\n />\n </FormGroup>\n </>\n )\n : (\n <>\n <FormGroup label=\"Order By (JSON)\" labelFor=\"order-by\">\n <LazyCodeMirror\n value={orderByText}\n onChange={(val) =>\n dispatch({ type: \"SET_ORDER_BY_TEXT\", text: val })}\n extensions={jsonExtensions}\n theme={theme}\n height=\"80px\"\n placeholder='{ \"createdAt\": \"desc\" }'\n basicSetup={{ lineNumbers: false, foldGutter: false }}\n />\n </FormGroup>\n\n <FormGroup label=\"Page Size\" labelFor=\"page-size\">\n <NumericInput\n id=\"page-size\"\n value={pageSize ?? \"\"}\n onValueChange={(value) =>\n dispatch({\n type: \"SET_PAGE_SIZE\",\n pageSize: value > 0 ? value : undefined,\n })}\n placeholder=\"Default\"\n min={1}\n fill={true}\n />\n </FormGroup>\n </>\n )}\n\n <div className={styles.editorActions}>\n <Button\n intent=\"primary\"\n icon=\"tick\"\n onClick={onApplyOverride}\n >\n Apply Override\n </Button>\n <Button variant=\"minimal\" onClick={onClearSelection}>\n Cancel\n </Button>\n </div>\n </div>\n </Suspense>\n </div>\n );\n};\n\nexport interface OverrideItemProps {\n override: PrototypeOverride;\n onToggle: () => void;\n onRemove: () => void;\n onEdit: () => void;\n}\n\nexport const OverrideItem: React.FC<OverrideItemProps> = React.memo(\n ({ override, onToggle, onRemove, onEdit }) => {\n return (\n <div className={styles.interceptItem}>\n <div\n className={`${styles.interceptItemContent} ${styles.clickable}`}\n onClick={onEdit}\n >\n <div className={styles.interceptItemHeader}>\n <Icon\n icon={override.hookType === \"useOsdkAggregation\"\n ? \"grouped-bar-chart\"\n : \"th-list\"}\n />\n <span className={styles.interceptItemTitle}>\n {override.objectType}\n </span>\n <span\n className={`${styles.interceptBadge} ${styles.interceptBadgeOverride}`}\n >\n override\n </span>\n <span\n className={`${styles.overrideItemStatus} ${\n override.enabled\n ? styles.statusEnabled\n : styles.statusDisabled\n }`}\n >\n {override.enabled ? \"active\" : \"paused\"}\n </span>\n </div>\n <div className={styles.interceptItemDetails}>\n <span className={styles.detail}>\n {override.componentName}\n </span>\n </div>\n </div>\n\n <div className={styles.interceptItemActions}>\n <Button\n variant=\"minimal\"\n size=\"small\"\n intent={override.enabled ? \"success\" : \"warning\"}\n icon={override.enabled ? \"pause\" : \"play\"}\n onClick={onToggle}\n title={override.enabled ? \"Pause override\" : \"Resume override\"}\n aria-label={override.enabled ? \"Pause override\" : \"Resume override\"}\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n intent=\"danger\"\n icon=\"trash\"\n onClick={onRemove}\n title=\"Remove override\"\n aria-label=\"Remove override\"\n />\n </div>\n </div>\n );\n },\n);\n\nOverrideItem.displayName = \"OverrideItem\";\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"OverrideEditor.js","names":["Button","FormGroup","Icon","NumericInput","React","Suspense","styles","LazyCodeMirror","lazy","CodeMirrorPlaceholder","createElement","className","editorPlaceholder","OverrideEditor","selectedQuery","whereClauseText","orderByText","pageSize","groupByText","selectText","jsonExtensions","theme","dispatch","onApplyOverride","onClearSelection","editorPanel","panelHeader","icon","panelTitle","objectType","panelSubtitle","componentName","variant","size","onClick","fallback","editorContent","label","labelFor","value","onChange","val","type","text","extensions","height","placeholder","basicSetup","lineNumbers","foldGutter","isAggregation","Fragment","id","onValueChange","undefined","min","fill","editorActions","intent","OverrideItem","memo","override","onToggle","onRemove","onEdit","interceptItem","interceptItemContent","clickable","interceptItemHeader","hookType","interceptItemTitle","interceptBadge","interceptBadgeOverride","overrideItemStatus","enabled","statusEnabled","statusDisabled","interceptItemDetails","detail","interceptItemActions","title","displayName"],"sources":["OverrideEditor.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, FormGroup, Icon, NumericInput } from \"@blueprintjs/core\";\nimport type { ReactCodeMirrorProps } from \"@uiw/react-codemirror\";\nimport React, { Suspense } from \"react\";\n\nimport type { PrototypeOverride } from \"../prototyping/PrototypeOverrideStore.js\";\nimport type { InterceptAction, SelectedQuery } from \"./InterceptTab.js\";\n\nimport styles from \"./InterceptTab.module.scss\";\n\nconst LazyCodeMirror = React.lazy(() => import(\"@uiw/react-codemirror\"));\n\nfunction CodeMirrorPlaceholder() {\n return <div className={styles.editorPlaceholder}>Loading editor...</div>;\n}\n\ninterface OverrideEditorProps {\n selectedQuery: SelectedQuery;\n whereClauseText: string;\n orderByText: string;\n pageSize: number | undefined;\n groupByText: string;\n selectText: string;\n jsonExtensions: ReactCodeMirrorProps[\"extensions\"];\n theme: \"light\" | \"dark\";\n dispatch: React.Dispatch<InterceptAction>;\n onApplyOverride: () => void;\n onClearSelection: () => void;\n}\n\nexport const OverrideEditor: React.FC<OverrideEditorProps> = ({\n selectedQuery,\n whereClauseText,\n orderByText,\n pageSize,\n groupByText,\n selectText,\n jsonExtensions,\n theme,\n dispatch,\n onApplyOverride,\n onClearSelection,\n}) => {\n return (\n <div className={styles.editorPanel}>\n <div className={styles.panelHeader}>\n <Icon icon=\"edit\" />\n <div>\n <div className={styles.panelTitle}>{selectedQuery.objectType}</div>\n <div className={styles.panelSubtitle}>\n {selectedQuery.componentName}\n </div>\n </div>\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"cross\"\n aria-label=\"Close editor\"\n onClick={onClearSelection}\n />\n </div>\n\n <Suspense fallback={<CodeMirrorPlaceholder />}>\n <div className={styles.editorContent}>\n <FormGroup label=\"Where Clause (JSON)\" labelFor=\"where-clause\">\n <LazyCodeMirror\n value={whereClauseText}\n onChange={(val) =>\n dispatch({ type: \"SET_WHERE_CLAUSE_TEXT\", text: val })\n }\n extensions={jsonExtensions}\n theme={theme}\n height=\"120px\"\n placeholder='{ \"status\": \"active\" }'\n basicSetup={{\n lineNumbers: false,\n foldGutter: false,\n }}\n />\n </FormGroup>\n\n {selectedQuery.isAggregation ? (\n <>\n <FormGroup label=\"Group By (JSON)\" labelFor=\"group-by\">\n <LazyCodeMirror\n value={groupByText}\n onChange={(val) =>\n dispatch({ type: \"SET_GROUP_BY_TEXT\", text: val })\n }\n extensions={jsonExtensions}\n theme={theme}\n height=\"80px\"\n placeholder='{ \"status\": \"exact\", \"department\": \"exact\" }'\n basicSetup={{ lineNumbers: false, foldGutter: false }}\n />\n </FormGroup>\n\n <FormGroup label=\"Select (JSON)\" labelFor=\"select\">\n <LazyCodeMirror\n value={selectText}\n onChange={(val) =>\n dispatch({ type: \"SET_SELECT_TEXT\", text: val })\n }\n extensions={jsonExtensions}\n theme={theme}\n height=\"80px\"\n placeholder='{ \"count\": { \"$count\": {} } }'\n basicSetup={{ lineNumbers: false, foldGutter: false }}\n />\n </FormGroup>\n </>\n ) : (\n <>\n <FormGroup label=\"Order By (JSON)\" labelFor=\"order-by\">\n <LazyCodeMirror\n value={orderByText}\n onChange={(val) =>\n dispatch({ type: \"SET_ORDER_BY_TEXT\", text: val })\n }\n extensions={jsonExtensions}\n theme={theme}\n height=\"80px\"\n placeholder='{ \"createdAt\": \"desc\" }'\n basicSetup={{ lineNumbers: false, foldGutter: false }}\n />\n </FormGroup>\n\n <FormGroup label=\"Page Size\" labelFor=\"page-size\">\n <NumericInput\n id=\"page-size\"\n value={pageSize ?? \"\"}\n onValueChange={(value) =>\n dispatch({\n type: \"SET_PAGE_SIZE\",\n pageSize: value > 0 ? value : undefined,\n })\n }\n placeholder=\"Default\"\n min={1}\n fill={true}\n />\n </FormGroup>\n </>\n )}\n\n <div className={styles.editorActions}>\n <Button intent=\"primary\" icon=\"tick\" onClick={onApplyOverride}>\n Apply Override\n </Button>\n <Button variant=\"minimal\" onClick={onClearSelection}>\n Cancel\n </Button>\n </div>\n </div>\n </Suspense>\n </div>\n );\n};\n\nexport interface OverrideItemProps {\n override: PrototypeOverride;\n onToggle: () => void;\n onRemove: () => void;\n onEdit: () => void;\n}\n\nexport const OverrideItem: React.FC<OverrideItemProps> = React.memo(\n ({ override, onToggle, onRemove, onEdit }) => {\n return (\n <div className={styles.interceptItem}>\n <div\n className={`${styles.interceptItemContent} ${styles.clickable}`}\n onClick={onEdit}\n >\n <div className={styles.interceptItemHeader}>\n <Icon\n icon={\n override.hookType === \"useOsdkAggregation\"\n ? \"grouped-bar-chart\"\n : \"th-list\"\n }\n />\n <span className={styles.interceptItemTitle}>\n {override.objectType}\n </span>\n <span\n className={`${styles.interceptBadge} ${styles.interceptBadgeOverride}`}\n >\n override\n </span>\n <span\n className={`${styles.overrideItemStatus} ${\n override.enabled ? styles.statusEnabled : styles.statusDisabled\n }`}\n >\n {override.enabled ? \"active\" : \"paused\"}\n </span>\n </div>\n <div className={styles.interceptItemDetails}>\n <span className={styles.detail}>{override.componentName}</span>\n </div>\n </div>\n\n <div className={styles.interceptItemActions}>\n <Button\n variant=\"minimal\"\n size=\"small\"\n intent={override.enabled ? \"success\" : \"warning\"}\n icon={override.enabled ? \"pause\" : \"play\"}\n onClick={onToggle}\n title={override.enabled ? \"Pause override\" : \"Resume override\"}\n aria-label={override.enabled ? \"Pause override\" : \"Resume override\"}\n />\n <Button\n variant=\"minimal\"\n size=\"small\"\n intent=\"danger\"\n icon=\"trash\"\n onClick={onRemove}\n title=\"Remove override\"\n aria-label=\"Remove override\"\n />\n </div>\n </div>\n );\n }\n);\n\nOverrideItem.displayName = \"OverrideItem\";\n"],"mappings":"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","ignoreList":[]}
@@ -25,8 +25,8 @@ import { formatTime } from "../utils/format.js";
25
25
  import { buildRecommendationMap, getRecommendationsForOperation } from "../utils/RecommendationMatcher.js";
26
26
  import { ActionMetrics } from "./ActionMetrics.js";
27
27
  import { CacheMetrics } from "./CacheMetrics.js";
28
- import styles from "./MonitoringPanel.module.scss.js";
29
28
  import { ObjectLoadingMetrics } from "./ObjectLoadingMetrics.js";
29
+ import styles from "./MonitoringPanel.module.scss.js";
30
30
  const CACHE_OPERATION_TYPES = new Set(["cache-hit", "cache-miss", "revalidation", "deduplication", "optimistic-update"]);
31
31
  const ACTION_OPERATION_TYPES = new Set(["action", "action-validation"]);
32
32
  const MAX_RECENT_OPERATIONS = 50;
@@ -167,26 +167,26 @@ const OPERATION_DISPLAY = {
167
167
  tooltip: "Cache hit \u2014 served from cache"
168
168
  },
169
169
  "cache-miss": {
170
- icon: "\u00d7",
170
+ icon: "\u00D7",
171
171
  class: styles.cacheMiss,
172
172
  tooltip: "Cache miss \u2014 fetched from network"
173
173
  },
174
- "revalidation": {
175
- icon: "\u21bb",
174
+ revalidation: {
175
+ icon: "\u21BB",
176
176
  class: styles.revalidation,
177
177
  tooltip: "Stale-while-revalidate \u2014 data already served from cache, re-fetching in background"
178
178
  },
179
- "deduplication": {
179
+ deduplication: {
180
180
  icon: "=",
181
181
  class: styles.deduplication,
182
182
  tooltip: "Deduplicated \u2014 shared with existing subscription"
183
183
  },
184
184
  "optimistic-update": {
185
- icon: "\u26a1",
185
+ icon: "\u26A1",
186
186
  class: styles.optimistic,
187
187
  tooltip: "Optimistic update"
188
188
  },
189
- "action": {
189
+ action: {
190
190
  icon: "\u2699",
191
191
  class: styles.action,
192
192
  tooltip: "Action"
@@ -275,7 +275,7 @@ const OperationItem = ({
275
275
  const parts = operation.signature.split(":");
276
276
  if (parts.length >= 2) {
277
277
  const objectType = parts[1];
278
- const truncatedName = displayName.length > 20 ? displayName.slice(0, 20) + "\u2026" : displayName;
278
+ const truncatedName = displayName.length > 20 ? `${displayName.slice(0, 20)}\u2026` : displayName;
279
279
  return `${objectType}: ${truncatedName}`;
280
280
  }
281
281
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PerformanceTab.js","names":["Button","ButtonGroup","classNames","React","useMemo","useState","createPollingStore","useMetrics","useRecommendations","useUnusedFieldAnalysis","formatTime","buildRecommendationMap","getRecommendationsForOperation","ActionMetrics","CacheMetrics","styles","ObjectLoadingMetrics","CACHE_OPERATION_TYPES","Set","ACTION_OPERATION_TYPES","MAX_RECENT_OPERATIONS","PerformanceTab","metricsStore","monitorStore","metrics","report","unusedFieldReport","isLoading","analysisLoading","recommendations","filter","setFilter","recommendationMap","enrichmentStore","entries","loadCacheEntries","timeline","getEventTimeline","actions","getEventsByType","cacheEntries","recentActions","slice","enrichmentData","useSyncExternalStore","subscribe","getSnapshot","displayNameMap","map","Map","entry","data","primaryKey","$primaryKey","objectType","$objectType","displayName","title","name","label","description","length","set","String","getDisplayNameKey","signature","parts","split","join","findCausingAction","timestamp","i","action","timeDiff","filteredOperations","recent","op","has","type","operations","reverse","createElement","Fragment","className","metricsGrid","metricGroup","metricGroupTitle","metricGroupContent","filterControls","active","onClick","size","operationsList","isCacheOp","causingAction","displayKey","OperationItem","key","id","operation","get","undefined","causingActionName","actionName","emptyState","OPERATION_DISPLAY","icon","class","cacheHit","tooltip","cacheMiss","revalidation","deduplication","optimistic","validation","DEFAULT_OPERATION_DISPLAY","isAction","isValidation","operationIcon","operationClass","operationTooltip","metricBadges","serverRoundTripTime","push","operationMetric","optimisticObserved","optimisticRenderTime","perceivedSpeedup","saved","rollback","responseTime","topRec","operationItem","operationType","operationDetails","operationSignature","truncatedName","actionCauseBadge","inlineIndicator","suggestion","level","operationTime","Date","toLocaleTimeString","inlineTip","operationMetrics"],"sources":["PerformanceTab.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, ButtonGroup } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useMemo, useState } from \"react\";\nimport { createPollingStore } from \"../hooks/createPollingStore.js\";\nimport { useMetrics } from \"../hooks/useMetrics.js\";\nimport { useRecommendations } from \"../hooks/useRecommendations.js\";\nimport { useUnusedFieldAnalysis } from \"../hooks/useUnusedFieldAnalysis.js\";\nimport type { MetricsStore } from \"../store/MetricsStore.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { Operation } from \"../types/index.js\";\nimport type { ActionStartEvent } from \"../utils/EventTimeline.js\";\nimport { formatTime } from \"../utils/format.js\";\nimport type { Recommendation } from \"../utils/PerformanceRecommendationEngine.js\";\nimport {\n buildRecommendationMap,\n getRecommendationsForOperation,\n} from \"../utils/RecommendationMatcher.js\";\nimport { ActionMetrics } from \"./ActionMetrics.js\";\nimport { CacheMetrics } from \"./CacheMetrics.js\";\nimport styles from \"./MonitoringPanel.module.scss\";\nimport { ObjectLoadingMetrics } from \"./ObjectLoadingMetrics.js\";\n\nconst CACHE_OPERATION_TYPES = new Set<Operation[\"type\"]>([\n \"cache-hit\",\n \"cache-miss\",\n \"revalidation\",\n \"deduplication\",\n \"optimistic-update\",\n]);\n\nconst ACTION_OPERATION_TYPES = new Set<Operation[\"type\"]>([\n \"action\",\n \"action-validation\",\n]);\n\nconst MAX_RECENT_OPERATIONS = 50;\n\nexport interface PerformanceTabProps {\n metricsStore: MetricsStore;\n monitorStore: MonitorStore;\n}\n\nexport const PerformanceTab: React.FC<PerformanceTabProps> = (\n { metricsStore, monitorStore },\n) => {\n const metrics = useMetrics(metricsStore);\n const { report: unusedFieldReport, isLoading: analysisLoading } =\n useUnusedFieldAnalysis(monitorStore);\n const { recommendations } = useRecommendations(monitorStore);\n const [filter, setFilter] = useState<\"all\" | \"cache\" | \"actions\">(\"all\");\n\n const recommendationMap = useMemo(\n () => buildRecommendationMap(recommendations),\n [recommendations],\n );\n\n const enrichmentStore = React.useMemo(\n () =>\n createPollingStore(async () => {\n const entries = await monitorStore.loadCacheEntries();\n const timeline = monitorStore.getEventTimeline();\n const actions = timeline.getEventsByType(\"ACTION_START\");\n return {\n cacheEntries: entries,\n recentActions: actions.slice(-20),\n };\n }, 2000),\n [monitorStore],\n );\n const enrichmentData = React.useSyncExternalStore(\n enrichmentStore.subscribe,\n enrichmentStore.getSnapshot,\n );\n const cacheEntries = enrichmentData?.cacheEntries ?? [];\n const recentActions = enrichmentData?.recentActions ?? [];\n\n const displayNameMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const entry of cacheEntries) {\n if (entry.data && typeof entry.data === \"object\") {\n const data = entry.data as Record<string, unknown>;\n const primaryKey = data.$primaryKey;\n const objectType = data.$objectType ?? entry.objectType;\n const displayName = data.title ?? data.name ?? data.label\n ?? data.displayName ?? data.description;\n if (\n typeof displayName === \"string\" && displayName.length > 0\n && (typeof primaryKey === \"string\" || typeof primaryKey === \"number\")\n && typeof objectType === \"string\"\n ) {\n map.set(`${objectType}:${String(primaryKey)}`, displayName);\n }\n }\n }\n return map;\n }, [cacheEntries]);\n\n const getDisplayNameKey = (signature: string): string | null => {\n const parts = signature.split(\":\");\n if (parts.length >= 3 && parts[0] === \"object\") {\n return `${parts[1]}:${parts.slice(2).join(\":\")}`;\n }\n return null;\n };\n\n const findCausingAction = (timestamp: number): ActionStartEvent | null => {\n for (let i = recentActions.length - 1; i >= 0; i--) {\n const action = recentActions[i];\n const timeDiff = timestamp - action.timestamp;\n if (timeDiff >= 0 && timeDiff < 500) {\n return action;\n }\n }\n return null;\n };\n\n const filteredOperations = useMemo(() =>\n metrics.recent.filter((op) => {\n if (filter === \"all\") {\n return true;\n }\n if (filter === \"cache\") {\n return CACHE_OPERATION_TYPES.has(op.type);\n }\n if (filter === \"actions\") {\n return ACTION_OPERATION_TYPES.has(op.type);\n }\n return false;\n }), [metrics.recent, filter]);\n\n const operations = filteredOperations.slice(\n -MAX_RECENT_OPERATIONS,\n ).reverse();\n\n return (\n <>\n <div className={styles.metricsGrid}>\n <div className={styles.metricGroup}>\n <h4 className={styles.metricGroupTitle}>Object Loading</h4>\n <div className={styles.metricGroupContent}>\n <ObjectLoadingMetrics\n analysisLoading={analysisLoading}\n unusedFieldReport={unusedFieldReport}\n />\n </div>\n </div>\n <div className={styles.metricGroup}>\n <h4 className={styles.metricGroupTitle}>Actions</h4>\n <div className={styles.metricGroupContent}>\n <ActionMetrics metrics={metrics} />\n </div>\n </div>\n <div className={styles.metricGroup}>\n <h4 className={styles.metricGroupTitle}>Caching</h4>\n <div className={styles.metricGroupContent}>\n <CacheMetrics metrics={metrics} />\n </div>\n </div>\n </div>\n\n <div className={styles.filterControls}>\n <ButtonGroup>\n <Button\n active={filter === \"all\"}\n onClick={() => setFilter(\"all\")}\n size=\"small\"\n >\n All\n </Button>\n <Button\n active={filter === \"cache\"}\n onClick={() => setFilter(\"cache\")}\n size=\"small\"\n >\n Cache\n </Button>\n <Button\n active={filter === \"actions\"}\n onClick={() => setFilter(\"actions\")}\n size=\"small\"\n >\n Actions\n </Button>\n </ButtonGroup>\n </div>\n\n <div className={styles.operationsList}>\n {operations.length > 0\n ? operations.map((op) => {\n const isCacheOp = op.type !== \"action\"\n && op.type !== \"action-validation\";\n const causingAction = isCacheOp\n ? findCausingAction(op.timestamp)\n : null;\n const displayKey = getDisplayNameKey(op.signature);\n return (\n <OperationItem\n key={op.id}\n operation={op}\n formatTime={formatTime}\n recommendations={getRecommendationsForOperation(\n op,\n recommendationMap,\n )}\n displayName={displayKey\n ? displayNameMap.get(displayKey)\n : undefined}\n causingActionName={causingAction?.actionName}\n />\n );\n })\n : (\n <div className={styles.emptyState}>\n {filter === \"all\"\n ? \"No recent activity\"\n : filter === \"cache\"\n ? \"No recent cache activity\"\n : \"No recent action activity\"}\n </div>\n )}\n </div>\n </>\n );\n};\n\nconst OPERATION_DISPLAY: Record<\n string,\n { icon: string; class: string; tooltip: string }\n> = {\n \"cache-hit\": {\n icon: \"\\u2713\",\n class: styles.cacheHit,\n tooltip: \"Cache hit \\u2014 served from cache\",\n },\n \"cache-miss\": {\n icon: \"\\u00d7\",\n class: styles.cacheMiss,\n tooltip: \"Cache miss \\u2014 fetched from network\",\n },\n \"revalidation\": {\n icon: \"\\u21bb\",\n class: styles.revalidation,\n tooltip:\n \"Stale-while-revalidate \\u2014 data already served from cache, re-fetching in background\",\n },\n \"deduplication\": {\n icon: \"=\",\n class: styles.deduplication,\n tooltip: \"Deduplicated \\u2014 shared with existing subscription\",\n },\n \"optimistic-update\": {\n icon: \"\\u26a1\",\n class: styles.optimistic,\n tooltip: \"Optimistic update\",\n },\n \"action\": { icon: \"\\u2699\", class: styles.action, tooltip: \"Action\" },\n \"action-validation\": {\n icon: \"\\u2714\",\n class: styles.validation,\n tooltip: \"Action validation\",\n },\n};\n\nconst DEFAULT_OPERATION_DISPLAY = { icon: \"\\u2022\", class: \"\", tooltip: \"\" };\n\ninterface OperationItemProps {\n operation: Operation;\n formatTime: (ms: number) => string;\n recommendations?: Recommendation[];\n displayName?: string;\n causingActionName?: string;\n}\n\nconst OperationItem: React.FC<OperationItemProps> = (\n {\n operation,\n formatTime,\n recommendations = [],\n displayName,\n causingActionName,\n },\n) => {\n const isAction = operation.type === \"action\";\n const isValidation = operation.type === \"action-validation\";\n const isCacheOperation = !isAction && !isValidation;\n\n const getEnrichedSignature = (): string => {\n if (isAction || isValidation) {\n return operation.actionName ?? operation.signature;\n }\n if (displayName) {\n const parts = operation.signature.split(\":\");\n if (parts.length >= 2) {\n const objectType = parts[1];\n const truncatedName = displayName.length > 20\n ? displayName.slice(0, 20) + \"\\u2026\"\n : displayName;\n return `${objectType}: ${truncatedName}`;\n }\n }\n return operation.signature;\n };\n\n const {\n icon: operationIcon,\n class: operationClass,\n tooltip: operationTooltip,\n } = OPERATION_DISPLAY[operation.type] ?? DEFAULT_OPERATION_DISPLAY;\n\n const metricBadges: React.ReactNode[] = [];\n\n if (isAction) {\n if (operation.serverRoundTripTime != null) {\n metricBadges.push(\n <span key=\"server\" className={styles.operationMetric}>\n Server {formatTime(operation.serverRoundTripTime)}\n </span>,\n );\n }\n\n if (\n operation.optimisticObserved && operation.optimisticRenderTime != null\n ) {\n metricBadges.push(\n <span key=\"optimistic\" className={styles.operationMetric}>\n Optimistic {formatTime(operation.optimisticRenderTime)}\n </span>,\n );\n }\n\n if (operation.optimisticObserved && operation.perceivedSpeedup != null) {\n metricBadges.push(\n <span\n key=\"speedup\"\n className={classNames(styles.operationMetric, styles.saved)}\n >\n Speedup {formatTime(operation.perceivedSpeedup)}\n </span>,\n );\n }\n\n if (operation.rollback) {\n metricBadges.push(\n <span\n key=\"rollback\"\n className={classNames(styles.operationMetric, styles.rollback)}\n >\n Rollback\n </span>,\n );\n }\n } else if (isValidation) {\n if (operation.responseTime != null) {\n metricBadges.push(\n <span key=\"validation\" className={styles.operationMetric}>\n Validation {formatTime(operation.responseTime)}\n </span>,\n );\n }\n } else {\n if (operation.responseTime != null) {\n metricBadges.push(\n <span key=\"response\" className={styles.operationMetric}>\n {formatTime(operation.responseTime)}\n </span>,\n );\n }\n }\n\n const topRec = recommendations[0];\n\n return (\n <div className={styles.operationItem}>\n <span\n className={classNames(styles.operationType, operationClass)}\n title={operationTooltip}\n >\n {operationIcon}\n </span>\n <div className={styles.operationDetails}>\n <div className={styles.operationSignature}>\n {getEnrichedSignature()}\n {isCacheOperation && causingActionName && (\n <span\n className={styles.actionCauseBadge}\n title={`Triggered by ${causingActionName}`}\n >\n ← {causingActionName}\n </span>\n )}\n {topRec && (\n <span\n className={styles.inlineIndicator}\n title={topRec.suggestion}\n >\n {topRec.level === \"critical\" || topRec.level === \"high\"\n ? \"⚠️\"\n : \"💡\"}\n </span>\n )}\n </div>\n <div className={styles.operationTime}>\n {new Date(operation.timestamp).toLocaleTimeString()}\n </div>\n {topRec && (\n <div className={styles.inlineTip}>\n {topRec.title}\n </div>\n )}\n {metricBadges.length > 0 && (\n <div className={styles.operationMetrics}>{metricBadges}</div>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"PerformanceTab.js","names":["Button","ButtonGroup","classNames","React","useMemo","useState","createPollingStore","useMetrics","useRecommendations","useUnusedFieldAnalysis","formatTime","buildRecommendationMap","getRecommendationsForOperation","ActionMetrics","CacheMetrics","ObjectLoadingMetrics","styles","CACHE_OPERATION_TYPES","Set","ACTION_OPERATION_TYPES","MAX_RECENT_OPERATIONS","PerformanceTab","metricsStore","monitorStore","metrics","report","unusedFieldReport","isLoading","analysisLoading","recommendations","filter","setFilter","recommendationMap","enrichmentStore","entries","loadCacheEntries","timeline","getEventTimeline","actions","getEventsByType","cacheEntries","recentActions","slice","enrichmentData","useSyncExternalStore","subscribe","getSnapshot","displayNameMap","map","Map","entry","data","primaryKey","$primaryKey","objectType","$objectType","displayName","title","name","label","description","length","set","String","getDisplayNameKey","signature","parts","split","join","findCausingAction","timestamp","i","action","timeDiff","filteredOperations","recent","op","has","type","operations","reverse","createElement","Fragment","className","metricsGrid","metricGroup","metricGroupTitle","metricGroupContent","filterControls","active","onClick","size","operationsList","isCacheOp","causingAction","displayKey","OperationItem","key","id","operation","get","undefined","causingActionName","actionName","emptyState","OPERATION_DISPLAY","icon","class","cacheHit","tooltip","cacheMiss","revalidation","deduplication","optimistic","validation","DEFAULT_OPERATION_DISPLAY","isAction","isValidation","operationIcon","operationClass","operationTooltip","metricBadges","serverRoundTripTime","push","operationMetric","optimisticObserved","optimisticRenderTime","perceivedSpeedup","saved","rollback","responseTime","topRec","operationItem","operationType","operationDetails","operationSignature","truncatedName","actionCauseBadge","inlineIndicator","suggestion","level","operationTime","Date","toLocaleTimeString","inlineTip","operationMetrics"],"sources":["PerformanceTab.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, ButtonGroup } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useMemo, useState } from \"react\";\n\nimport { createPollingStore } from \"../hooks/createPollingStore.js\";\nimport { useMetrics } from \"../hooks/useMetrics.js\";\nimport { useRecommendations } from \"../hooks/useRecommendations.js\";\nimport { useUnusedFieldAnalysis } from \"../hooks/useUnusedFieldAnalysis.js\";\nimport type { MetricsStore } from \"../store/MetricsStore.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { Operation } from \"../types/index.js\";\nimport type { ActionStartEvent } from \"../utils/EventTimeline.js\";\nimport { formatTime } from \"../utils/format.js\";\nimport type { Recommendation } from \"../utils/PerformanceRecommendationEngine.js\";\nimport {\n buildRecommendationMap,\n getRecommendationsForOperation,\n} from \"../utils/RecommendationMatcher.js\";\nimport { ActionMetrics } from \"./ActionMetrics.js\";\nimport { CacheMetrics } from \"./CacheMetrics.js\";\nimport { ObjectLoadingMetrics } from \"./ObjectLoadingMetrics.js\";\n\nimport styles from \"./MonitoringPanel.module.scss\";\n\nconst CACHE_OPERATION_TYPES = new Set<Operation[\"type\"]>([\n \"cache-hit\",\n \"cache-miss\",\n \"revalidation\",\n \"deduplication\",\n \"optimistic-update\",\n]);\n\nconst ACTION_OPERATION_TYPES = new Set<Operation[\"type\"]>([\n \"action\",\n \"action-validation\",\n]);\n\nconst MAX_RECENT_OPERATIONS = 50;\n\nexport interface PerformanceTabProps {\n metricsStore: MetricsStore;\n monitorStore: MonitorStore;\n}\n\nexport const PerformanceTab: React.FC<PerformanceTabProps> = ({\n metricsStore,\n monitorStore,\n}) => {\n const metrics = useMetrics(metricsStore);\n const { report: unusedFieldReport, isLoading: analysisLoading } =\n useUnusedFieldAnalysis(monitorStore);\n const { recommendations } = useRecommendations(monitorStore);\n const [filter, setFilter] = useState<\"all\" | \"cache\" | \"actions\">(\"all\");\n\n const recommendationMap = useMemo(\n () => buildRecommendationMap(recommendations),\n [recommendations]\n );\n\n const enrichmentStore = React.useMemo(\n () =>\n createPollingStore(async () => {\n const entries = await monitorStore.loadCacheEntries();\n const timeline = monitorStore.getEventTimeline();\n const actions = timeline.getEventsByType(\"ACTION_START\");\n return {\n cacheEntries: entries,\n recentActions: actions.slice(-20),\n };\n }, 2000),\n [monitorStore]\n );\n const enrichmentData = React.useSyncExternalStore(\n enrichmentStore.subscribe,\n enrichmentStore.getSnapshot\n );\n const cacheEntries = enrichmentData?.cacheEntries ?? [];\n const recentActions = enrichmentData?.recentActions ?? [];\n\n const displayNameMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const entry of cacheEntries) {\n if (entry.data && typeof entry.data === \"object\") {\n const data = entry.data as Record<string, unknown>;\n const primaryKey = data.$primaryKey;\n const objectType = data.$objectType ?? entry.objectType;\n const displayName =\n data.title ??\n data.name ??\n data.label ??\n data.displayName ??\n data.description;\n if (\n typeof displayName === \"string\" &&\n displayName.length > 0 &&\n (typeof primaryKey === \"string\" || typeof primaryKey === \"number\") &&\n typeof objectType === \"string\"\n ) {\n map.set(`${objectType}:${String(primaryKey)}`, displayName);\n }\n }\n }\n return map;\n }, [cacheEntries]);\n\n const getDisplayNameKey = (signature: string): string | null => {\n const parts = signature.split(\":\");\n if (parts.length >= 3 && parts[0] === \"object\") {\n return `${parts[1]}:${parts.slice(2).join(\":\")}`;\n }\n return null;\n };\n\n const findCausingAction = (timestamp: number): ActionStartEvent | null => {\n for (let i = recentActions.length - 1; i >= 0; i--) {\n const action = recentActions[i];\n const timeDiff = timestamp - action.timestamp;\n if (timeDiff >= 0 && timeDiff < 500) {\n return action;\n }\n }\n return null;\n };\n\n const filteredOperations = useMemo(\n () =>\n metrics.recent.filter((op) => {\n if (filter === \"all\") {\n return true;\n }\n if (filter === \"cache\") {\n return CACHE_OPERATION_TYPES.has(op.type);\n }\n if (filter === \"actions\") {\n return ACTION_OPERATION_TYPES.has(op.type);\n }\n return false;\n }),\n [metrics.recent, filter]\n );\n\n const operations = filteredOperations.slice(-MAX_RECENT_OPERATIONS).reverse();\n\n return (\n <>\n <div className={styles.metricsGrid}>\n <div className={styles.metricGroup}>\n <h4 className={styles.metricGroupTitle}>Object Loading</h4>\n <div className={styles.metricGroupContent}>\n <ObjectLoadingMetrics\n analysisLoading={analysisLoading}\n unusedFieldReport={unusedFieldReport}\n />\n </div>\n </div>\n <div className={styles.metricGroup}>\n <h4 className={styles.metricGroupTitle}>Actions</h4>\n <div className={styles.metricGroupContent}>\n <ActionMetrics metrics={metrics} />\n </div>\n </div>\n <div className={styles.metricGroup}>\n <h4 className={styles.metricGroupTitle}>Caching</h4>\n <div className={styles.metricGroupContent}>\n <CacheMetrics metrics={metrics} />\n </div>\n </div>\n </div>\n\n <div className={styles.filterControls}>\n <ButtonGroup>\n <Button\n active={filter === \"all\"}\n onClick={() => setFilter(\"all\")}\n size=\"small\"\n >\n All\n </Button>\n <Button\n active={filter === \"cache\"}\n onClick={() => setFilter(\"cache\")}\n size=\"small\"\n >\n Cache\n </Button>\n <Button\n active={filter === \"actions\"}\n onClick={() => setFilter(\"actions\")}\n size=\"small\"\n >\n Actions\n </Button>\n </ButtonGroup>\n </div>\n\n <div className={styles.operationsList}>\n {operations.length > 0 ? (\n operations.map((op) => {\n const isCacheOp =\n op.type !== \"action\" && op.type !== \"action-validation\";\n const causingAction = isCacheOp\n ? findCausingAction(op.timestamp)\n : null;\n const displayKey = getDisplayNameKey(op.signature);\n return (\n <OperationItem\n key={op.id}\n operation={op}\n formatTime={formatTime}\n recommendations={getRecommendationsForOperation(\n op,\n recommendationMap\n )}\n displayName={\n displayKey ? displayNameMap.get(displayKey) : undefined\n }\n causingActionName={causingAction?.actionName}\n />\n );\n })\n ) : (\n <div className={styles.emptyState}>\n {filter === \"all\"\n ? \"No recent activity\"\n : filter === \"cache\"\n ? \"No recent cache activity\"\n : \"No recent action activity\"}\n </div>\n )}\n </div>\n </>\n );\n};\n\nconst OPERATION_DISPLAY: Record<\n string,\n { icon: string; class: string; tooltip: string }\n> = {\n \"cache-hit\": {\n icon: \"\\u2713\",\n class: styles.cacheHit,\n tooltip: \"Cache hit \\u2014 served from cache\",\n },\n \"cache-miss\": {\n icon: \"\\u00D7\",\n class: styles.cacheMiss,\n tooltip: \"Cache miss \\u2014 fetched from network\",\n },\n revalidation: {\n icon: \"\\u21BB\",\n class: styles.revalidation,\n tooltip:\n \"Stale-while-revalidate \\u2014 data already served from cache, re-fetching in background\",\n },\n deduplication: {\n icon: \"=\",\n class: styles.deduplication,\n tooltip: \"Deduplicated \\u2014 shared with existing subscription\",\n },\n \"optimistic-update\": {\n icon: \"\\u26A1\",\n class: styles.optimistic,\n tooltip: \"Optimistic update\",\n },\n action: { icon: \"\\u2699\", class: styles.action, tooltip: \"Action\" },\n \"action-validation\": {\n icon: \"\\u2714\",\n class: styles.validation,\n tooltip: \"Action validation\",\n },\n};\n\nconst DEFAULT_OPERATION_DISPLAY = { icon: \"\\u2022\", class: \"\", tooltip: \"\" };\n\ninterface OperationItemProps {\n operation: Operation;\n formatTime: (ms: number) => string;\n recommendations?: Recommendation[];\n displayName?: string;\n causingActionName?: string;\n}\n\nconst OperationItem: React.FC<OperationItemProps> = ({\n operation,\n formatTime,\n recommendations = [],\n displayName,\n causingActionName,\n}) => {\n const isAction = operation.type === \"action\";\n const isValidation = operation.type === \"action-validation\";\n const isCacheOperation = !isAction && !isValidation;\n\n const getEnrichedSignature = (): string => {\n if (isAction || isValidation) {\n return operation.actionName ?? operation.signature;\n }\n if (displayName) {\n const parts = operation.signature.split(\":\");\n if (parts.length >= 2) {\n const objectType = parts[1];\n const truncatedName =\n displayName.length > 20\n ? `${displayName.slice(0, 20)}\\u2026`\n : displayName;\n return `${objectType}: ${truncatedName}`;\n }\n }\n return operation.signature;\n };\n\n const {\n icon: operationIcon,\n class: operationClass,\n tooltip: operationTooltip,\n } = OPERATION_DISPLAY[operation.type] ?? DEFAULT_OPERATION_DISPLAY;\n\n const metricBadges: React.ReactNode[] = [];\n\n if (isAction) {\n if (operation.serverRoundTripTime != null) {\n metricBadges.push(\n <span key=\"server\" className={styles.operationMetric}>\n Server {formatTime(operation.serverRoundTripTime)}\n </span>\n );\n }\n\n if (\n operation.optimisticObserved &&\n operation.optimisticRenderTime != null\n ) {\n metricBadges.push(\n <span key=\"optimistic\" className={styles.operationMetric}>\n Optimistic {formatTime(operation.optimisticRenderTime)}\n </span>\n );\n }\n\n if (operation.optimisticObserved && operation.perceivedSpeedup != null) {\n metricBadges.push(\n <span\n key=\"speedup\"\n className={classNames(styles.operationMetric, styles.saved)}\n >\n Speedup {formatTime(operation.perceivedSpeedup)}\n </span>\n );\n }\n\n if (operation.rollback) {\n metricBadges.push(\n <span\n key=\"rollback\"\n className={classNames(styles.operationMetric, styles.rollback)}\n >\n Rollback\n </span>\n );\n }\n } else if (isValidation) {\n if (operation.responseTime != null) {\n metricBadges.push(\n <span key=\"validation\" className={styles.operationMetric}>\n Validation {formatTime(operation.responseTime)}\n </span>\n );\n }\n } else {\n if (operation.responseTime != null) {\n metricBadges.push(\n <span key=\"response\" className={styles.operationMetric}>\n {formatTime(operation.responseTime)}\n </span>\n );\n }\n }\n\n const topRec = recommendations[0];\n\n return (\n <div className={styles.operationItem}>\n <span\n className={classNames(styles.operationType, operationClass)}\n title={operationTooltip}\n >\n {operationIcon}\n </span>\n <div className={styles.operationDetails}>\n <div className={styles.operationSignature}>\n {getEnrichedSignature()}\n {isCacheOperation && causingActionName && (\n <span\n className={styles.actionCauseBadge}\n title={`Triggered by ${causingActionName}`}\n >\n ← {causingActionName}\n </span>\n )}\n {topRec && (\n <span className={styles.inlineIndicator} title={topRec.suggestion}>\n {topRec.level === \"critical\" || topRec.level === \"high\"\n ? \"⚠️\"\n : \"💡\"}\n </span>\n )}\n </div>\n <div className={styles.operationTime}>\n {new Date(operation.timestamp).toLocaleTimeString()}\n </div>\n {topRec && <div className={styles.inlineTip}>{topRec.title}</div>}\n {metricBadges.length > 0 && (\n <div className={styles.operationMetrics}>{metricBadges}</div>\n )}\n </div>\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,WAAW,QAAQ,mBAAmB;AACvD,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEhD,SAASC,kBAAkB,QAAQ,gCAAgC;AACnE,SAASC,UAAU,QAAQ,wBAAwB;AACnD,SAASC,kBAAkB,QAAQ,gCAAgC;AACnE,SAASC,sBAAsB,QAAQ,oCAAoC;AAK3E,SAASC,UAAU,QAAQ,oBAAoB;AAE/C,SACEC,sBAAsB,EACtBC,8BAA8B,QACzB,mCAAmC;AAC1C,SAASC,aAAa,QAAQ,oBAAoB;AAClD,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,oBAAoB,QAAQ,2BAA2B;AAEhE,OAAOC,MAAM,MAAM,+BAA+B;AAElD,MAAMC,qBAAqB,GAAG,IAAIC,GAAG,CAAoB,CACvD,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EACf,mBAAmB,CACpB,CAAC;AAEF,MAAMC,sBAAsB,GAAG,IAAID,GAAG,CAAoB,CACxD,QAAQ,EACR,mBAAmB,CACpB,CAAC;AAEF,MAAME,qBAAqB,GAAG,EAAE;AAOhC,OAAO,MAAMC,cAA6C,GAAGA,CAAC;EAC5DC,YAAY;EACZC;AACF,CAAC,KAAK;EACJ,MAAMC,OAAO,GAAGjB,UAAU,CAACe,YAAY,CAAC;EACxC,MAAM;IAAEG,MAAM,EAAEC,iBAAiB;IAAEC,SAAS,EAAEC;EAAgB,CAAC,GAC7DnB,sBAAsB,CAACc,YAAY,CAAC;EACtC,MAAM;IAAEM;EAAgB,CAAC,GAAGrB,kBAAkB,CAACe,YAAY,CAAC;EAC5D,MAAM,CAACO,MAAM,EAAEC,SAAS,CAAC,GAAG1B,QAAQ,CAA8B,KAAK,CAAC;EAExE,MAAM2B,iBAAiB,GAAG5B,OAAO,CAC/B,MAAMO,sBAAsB,CAACkB,eAAe,CAAC,EAC7C,CAACA,eAAe,CAClB,CAAC;EAED,MAAMI,eAAe,GAAG9B,KAAK,CAACC,OAAO,CACnC,MACEE,kBAAkB,CAAC,YAAY;IAC7B,MAAM4B,OAAO,GAAG,MAAMX,YAAY,CAACY,gBAAgB,CAAC,CAAC;IACrD,MAAMC,QAAQ,GAAGb,YAAY,CAACc,gBAAgB,CAAC,CAAC;IAChD,MAAMC,OAAO,GAAGF,QAAQ,CAACG,eAAe,CAAC,cAAc,CAAC;IACxD,OAAO;MACLC,YAAY,EAAEN,OAAO;MACrBO,aAAa,EAAEH,OAAO,CAACI,KAAK,CAAC,CAAC,EAAE;IAClC,CAAC;EACH,CAAC,EAAE,IAAI,CAAC,EACV,CAACnB,YAAY,CACf,CAAC;EACD,MAAMoB,cAAc,GAAGxC,KAAK,CAACyC,oBAAoB,CAC/CX,eAAe,CAACY,SAAS,EACzBZ,eAAe,CAACa,WAClB,CAAC;EACD,MAAMN,YAAY,GAAGG,cAAc,EAAEH,YAAY,IAAI,EAAE;EACvD,MAAMC,aAAa,GAAGE,cAAc,EAAEF,aAAa,IAAI,EAAE;EAEzD,MAAMM,cAAc,GAAG3C,OAAO,CAAC,MAAM;IACnC,MAAM4C,GAAG,GAAG,IAAIC,GAAG,CAAiB,CAAC;IACrC,KAAK,MAAMC,KAAK,IAAIV,YAAY,EAAE;MAChC,IAAIU,KAAK,CAACC,IAAI,IAAI,OAAOD,KAAK,CAACC,IAAI,KAAK,QAAQ,EAAE;QAChD,MAAMA,IAAI,GAAGD,KAAK,CAACC,IAA+B;QAClD,MAAMC,UAAU,GAAGD,IAAI,CAACE,WAAW;QACnC,MAAMC,UAAU,GAAGH,IAAI,CAACI,WAAW,IAAIL,KAAK,CAACI,UAAU;QACvD,MAAME,WAAW,GACfL,IAAI,CAACM,KAAK,IACVN,IAAI,CAACO,IAAI,IACTP,IAAI,CAACQ,KAAK,IACVR,IAAI,CAACK,WAAW,IAChBL,IAAI,CAACS,WAAW;QAClB,IACE,OAAOJ,WAAW,KAAK,QAAQ,IAC/BA,WAAW,CAACK,MAAM,GAAG,CAAC,KACrB,OAAOT,UAAU,KAAK,QAAQ,IAAI,OAAOA,UAAU,KAAK,QAAQ,CAAC,IAClE,OAAOE,UAAU,KAAK,QAAQ,EAC9B;UACAN,GAAG,CAACc,GAAG,CAAC,GAAGR,UAAU,IAAIS,MAAM,CAACX,UAAU,CAAC,EAAE,EAAEI,WAAW,CAAC;QAC7D;MACF;IACF;IACA,OAAOR,GAAG;EACZ,CAAC,EAAE,CAACR,YAAY,CAAC,CAAC;EAElB,MAAMwB,iBAAiB,GAAIC,SAAiB,IAAoB;IAC9D,MAAMC,KAAK,GAAGD,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;IAClC,IAAID,KAAK,CAACL,MAAM,IAAI,CAAC,IAAIK,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;MAC9C,OAAO,GAAGA,KAAK,CAAC,CAAC,CAAC,IAAIA,KAAK,CAACxB,KAAK,CAAC,CAAC,CAAC,CAAC0B,IAAI,CAAC,GAAG,CAAC,EAAE;IAClD;IACA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,iBAAiB,GAAIC,SAAiB,IAA8B;IACxE,KAAK,IAAIC,CAAC,GAAG9B,aAAa,CAACoB,MAAM,GAAG,CAAC,EAAEU,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;MAClD,MAAMC,MAAM,GAAG/B,aAAa,CAAC8B,CAAC,CAAC;MAC/B,MAAME,QAAQ,GAAGH,SAAS,GAAGE,MAAM,CAACF,SAAS;MAC7C,IAAIG,QAAQ,IAAI,CAAC,IAAIA,QAAQ,GAAG,GAAG,EAAE;QACnC,OAAOD,MAAM;MACf;IACF;IACA,OAAO,IAAI;EACb,CAAC;EAED,MAAME,kBAAkB,GAAGtE,OAAO,CAChC,MACEoB,OAAO,CAACmD,MAAM,CAAC7C,MAAM,CAAE8C,EAAE,IAAK;IAC5B,IAAI9C,MAAM,KAAK,KAAK,EAAE;MACpB,OAAO,IAAI;IACb;IACA,IAAIA,MAAM,KAAK,OAAO,EAAE;MACtB,OAAOb,qBAAqB,CAAC4D,GAAG,CAACD,EAAE,CAACE,IAAI,CAAC;IAC3C;IACA,IAAIhD,MAAM,KAAK,SAAS,EAAE;MACxB,OAAOX,sBAAsB,CAAC0D,GAAG,CAACD,EAAE,CAACE,IAAI,CAAC;IAC5C;IACA,OAAO,KAAK;EACd,CAAC,CAAC,EACJ,CAACtD,OAAO,CAACmD,MAAM,EAAE7C,MAAM,CACzB,CAAC;EAED,MAAMiD,UAAU,GAAGL,kBAAkB,CAAChC,KAAK,CAAC,CAACtB,qBAAqB,CAAC,CAAC4D,OAAO,CAAC,CAAC;EAE7E,oBACE7E,KAAA,CAAA8E,aAAA,CAAA9E,KAAA,CAAA+E,QAAA,qBACE/E,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACoE;EAAY,gBACjCjF,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACqE;EAAY,gBACjClF,KAAA,CAAA8E,aAAA;IAAIE,SAAS,EAAEnE,MAAM,CAACsE;EAAiB,GAAC,gBAAkB,CAAC,eAC3DnF,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACuE;EAAmB,gBACxCpF,KAAA,CAAA8E,aAAA,CAAClE,oBAAoB;IACnBa,eAAe,EAAEA,eAAgB;IACjCF,iBAAiB,EAAEA;EAAkB,CACtC,CACE,CACF,CAAC,eACNvB,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACqE;EAAY,gBACjClF,KAAA,CAAA8E,aAAA;IAAIE,SAAS,EAAEnE,MAAM,CAACsE;EAAiB,GAAC,SAAW,CAAC,eACpDnF,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACuE;EAAmB,gBACxCpF,KAAA,CAAA8E,aAAA,CAACpE,aAAa;IAACW,OAAO,EAAEA;EAAQ,CAAE,CAC/B,CACF,CAAC,eACNrB,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACqE;EAAY,gBACjClF,KAAA,CAAA8E,aAAA;IAAIE,SAAS,EAAEnE,MAAM,CAACsE;EAAiB,GAAC,SAAW,CAAC,eACpDnF,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACuE;EAAmB,gBACxCpF,KAAA,CAAA8E,aAAA,CAACnE,YAAY;IAACU,OAAO,EAAEA;EAAQ,CAAE,CAC9B,CACF,CACF,CAAC,eAENrB,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACwE;EAAe,gBACpCrF,KAAA,CAAA8E,aAAA,CAAChF,WAAW,qBACVE,KAAA,CAAA8E,aAAA,CAACjF,MAAM;IACLyF,MAAM,EAAE3D,MAAM,KAAK,KAAM;IACzB4D,OAAO,EAAEA,CAAA,KAAM3D,SAAS,CAAC,KAAK,CAAE;IAChC4D,IAAI,EAAC;EAAO,GACb,KAEO,CAAC,eACTxF,KAAA,CAAA8E,aAAA,CAACjF,MAAM;IACLyF,MAAM,EAAE3D,MAAM,KAAK,OAAQ;IAC3B4D,OAAO,EAAEA,CAAA,KAAM3D,SAAS,CAAC,OAAO,CAAE;IAClC4D,IAAI,EAAC;EAAO,GACb,OAEO,CAAC,eACTxF,KAAA,CAAA8E,aAAA,CAACjF,MAAM;IACLyF,MAAM,EAAE3D,MAAM,KAAK,SAAU;IAC7B4D,OAAO,EAAEA,CAAA,KAAM3D,SAAS,CAAC,SAAS,CAAE;IACpC4D,IAAI,EAAC;EAAO,GACb,SAEO,CACG,CACV,CAAC,eAENxF,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAAC4E;EAAe,GACnCb,UAAU,CAAClB,MAAM,GAAG,CAAC,GACpBkB,UAAU,CAAC/B,GAAG,CAAE4B,EAAE,IAAK;IACrB,MAAMiB,SAAS,GACbjB,EAAE,CAACE,IAAI,KAAK,QAAQ,IAAIF,EAAE,CAACE,IAAI,KAAK,mBAAmB;IACzD,MAAMgB,aAAa,GAAGD,SAAS,GAC3BxB,iBAAiB,CAACO,EAAE,CAACN,SAAS,CAAC,GAC/B,IAAI;IACR,MAAMyB,UAAU,GAAG/B,iBAAiB,CAACY,EAAE,CAACX,SAAS,CAAC;IAClD,oBACE9D,KAAA,CAAA8E,aAAA,CAACe,aAAa;MACZC,GAAG,EAAErB,EAAE,CAACsB,EAAG;MACXC,SAAS,EAAEvB,EAAG;MACdlE,UAAU,EAAEA,UAAW;MACvBmB,eAAe,EAAEjB,8BAA8B,CAC7CgE,EAAE,EACF5C,iBACF,CAAE;MACFwB,WAAW,EACTuC,UAAU,GAAGhD,cAAc,CAACqD,GAAG,CAACL,UAAU,CAAC,GAAGM,SAC/C;MACDC,iBAAiB,EAAER,aAAa,EAAES;IAAW,CAC9C,CAAC;EAEN,CAAC,CAAC,gBAEFpG,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACwF;EAAW,GAC/B1E,MAAM,KAAK,KAAK,GACb,oBAAoB,GACpBA,MAAM,KAAK,OAAO,GAChB,0BAA0B,GAC1B,2BACH,CAEJ,CACL,CAAC;AAEP,CAAC;AAED,MAAM2E,iBAGL,GAAG;EACF,WAAW,EAAE;IACXC,IAAI,EAAE,QAAQ;IACdC,KAAK,EAAE3F,MAAM,CAAC4F,QAAQ;IACtBC,OAAO,EAAE;EACX,CAAC;EACD,YAAY,EAAE;IACZH,IAAI,EAAE,QAAQ;IACdC,KAAK,EAAE3F,MAAM,CAAC8F,SAAS;IACvBD,OAAO,EAAE;EACX,CAAC;EACDE,YAAY,EAAE;IACZL,IAAI,EAAE,QAAQ;IACdC,KAAK,EAAE3F,MAAM,CAAC+F,YAAY;IAC1BF,OAAO,EACL;EACJ,CAAC;EACDG,aAAa,EAAE;IACbN,IAAI,EAAE,GAAG;IACTC,KAAK,EAAE3F,MAAM,CAACgG,aAAa;IAC3BH,OAAO,EAAE;EACX,CAAC;EACD,mBAAmB,EAAE;IACnBH,IAAI,EAAE,QAAQ;IACdC,KAAK,EAAE3F,MAAM,CAACiG,UAAU;IACxBJ,OAAO,EAAE;EACX,CAAC;EACDrC,MAAM,EAAE;IAAEkC,IAAI,EAAE,QAAQ;IAAEC,KAAK,EAAE3F,MAAM,CAACwD,MAAM;IAAEqC,OAAO,EAAE;EAAS,CAAC;EACnE,mBAAmB,EAAE;IACnBH,IAAI,EAAE,QAAQ;IACdC,KAAK,EAAE3F,MAAM,CAACkG,UAAU;IACxBL,OAAO,EAAE;EACX;AACF,CAAC;AAED,MAAMM,yBAAyB,GAAG;EAAET,IAAI,EAAE,QAAQ;EAAEC,KAAK,EAAE,EAAE;EAAEE,OAAO,EAAE;AAAG,CAAC;AAU5E,MAAMb,aAA2C,GAAGA,CAAC;EACnDG,SAAS;EACTzF,UAAU;EACVmB,eAAe,GAAG,EAAE;EACpB2B,WAAW;EACX8C;AACF,CAAC,KAAK;EACJ,MAAMc,QAAQ,GAAGjB,SAAS,CAACrB,IAAI,KAAK,QAAQ;EAC5C,MAAMuC,YAAY,GAAGlB,SAAS,CAACrB,IAAI,KAAK,mBAAmB;EAqB3D,MAAM;IACJ4B,IAAI,EAAEY,aAAa;IACnBX,KAAK,EAAEY,cAAc;IACrBV,OAAO,EAAEW;EACX,CAAC,GAAGf,iBAAiB,CAACN,SAAS,CAACrB,IAAI,CAAC,IAAIqC,yBAAyB;EAElE,MAAMM,YAA+B,GAAG,EAAE;EAE1C,IAAIL,QAAQ,EAAE;IACZ,IAAIjB,SAAS,CAACuB,mBAAmB,IAAI,IAAI,EAAE;MACzCD,YAAY,CAACE,IAAI,cACfxH,KAAA,CAAA8E,aAAA;QAAMgB,GAAG,EAAC,QAAQ;QAACd,SAAS,EAAEnE,MAAM,CAAC4G;MAAgB,GAAC,SAC7C,EAAClH,UAAU,CAACyF,SAAS,CAACuB,mBAAmB,CAC5C,CACR,CAAC;IACH;IAEA,IACEvB,SAAS,CAAC0B,kBAAkB,IAC5B1B,SAAS,CAAC2B,oBAAoB,IAAI,IAAI,EACtC;MACAL,YAAY,CAACE,IAAI,cACfxH,KAAA,CAAA8E,aAAA;QAAMgB,GAAG,EAAC,YAAY;QAACd,SAAS,EAAEnE,MAAM,CAAC4G;MAAgB,GAAC,aAC7C,EAAClH,UAAU,CAACyF,SAAS,CAAC2B,oBAAoB,CACjD,CACR,CAAC;IACH;IAEA,IAAI3B,SAAS,CAAC0B,kBAAkB,IAAI1B,SAAS,CAAC4B,gBAAgB,IAAI,IAAI,EAAE;MACtEN,YAAY,CAACE,IAAI,cACfxH,KAAA,CAAA8E,aAAA;QACEgB,GAAG,EAAC,SAAS;QACbd,SAAS,EAAEjF,UAAU,CAACc,MAAM,CAAC4G,eAAe,EAAE5G,MAAM,CAACgH,KAAK;MAAE,GAC7D,UACS,EAACtH,UAAU,CAACyF,SAAS,CAAC4B,gBAAgB,CAC1C,CACR,CAAC;IACH;IAEA,IAAI5B,SAAS,CAAC8B,QAAQ,EAAE;MACtBR,YAAY,CAACE,IAAI,cACfxH,KAAA,CAAA8E,aAAA;QACEgB,GAAG,EAAC,UAAU;QACdd,SAAS,EAAEjF,UAAU,CAACc,MAAM,CAAC4G,eAAe,EAAE5G,MAAM,CAACiH,QAAQ;MAAE,GAChE,UAEK,CACR,CAAC;IACH;EACF,CAAC,MAAM,IAAIZ,YAAY,EAAE;IACvB,IAAIlB,SAAS,CAAC+B,YAAY,IAAI,IAAI,EAAE;MAClCT,YAAY,CAACE,IAAI,cACfxH,KAAA,CAAA8E,aAAA;QAAMgB,GAAG,EAAC,YAAY;QAACd,SAAS,EAAEnE,MAAM,CAAC4G;MAAgB,GAAC,aAC7C,EAAClH,UAAU,CAACyF,SAAS,CAAC+B,YAAY,CACzC,CACR,CAAC;IACH;EACF,CAAC,MAAM;IACL,IAAI/B,SAAS,CAAC+B,YAAY,IAAI,IAAI,EAAE;MAClCT,YAAY,CAACE,IAAI,cACfxH,KAAA,CAAA8E,aAAA;QAAMgB,GAAG,EAAC,UAAU;QAACd,SAAS,EAAEnE,MAAM,CAAC4G;MAAgB,GACpDlH,UAAU,CAACyF,SAAS,CAAC+B,YAAY,CAC9B,CACR,CAAC;IACH;EACF;EAEA,MAAMC,MAAM,GAAGtG,eAAe,CAAC,CAAC,CAAC;EAEjC,oBACE1B,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACoH;EAAc,gBACnCjI,KAAA,CAAA8E,aAAA;IACEE,SAAS,EAAEjF,UAAU,CAACc,MAAM,CAACqH,aAAa,EAAEd,cAAc,CAAE;IAC5D9D,KAAK,EAAE+D;EAAiB,GAEvBF,aACG,CAAC,eACPnH,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACsH;EAAiB,gBACtCnI,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACuH;EAAmB,GACvC,CAjGoB,MAAc;IACzC,IAAInB,QAAQ,IAAIC,YAAY,EAAE;MAC5B,OAAOlB,SAAS,CAACI,UAAU,IAAIJ,SAAS,CAAClC,SAAS;IACpD;IACA,IAAIT,WAAW,EAAE;MACf,MAAMU,KAAK,GAAGiC,SAAS,CAAClC,SAAS,CAACE,KAAK,CAAC,GAAG,CAAC;MAC5C,IAAID,KAAK,CAACL,MAAM,IAAI,CAAC,EAAE;QACrB,MAAMP,UAAU,GAAGY,KAAK,CAAC,CAAC,CAAC;QAC3B,MAAMsE,aAAa,GACjBhF,WAAW,CAACK,MAAM,GAAG,EAAE,GACnB,GAAGL,WAAW,CAACd,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,GACnCc,WAAW;QACjB,OAAO,GAAGF,UAAU,KAAKkF,aAAa,EAAE;MAC1C;IACF;IACA,OAAOrC,SAAS,CAAClC,SAAS;EAC5B,CAAC,EAiF6B,CAAC,EAnGN,CAACmD,QAAQ,IAAI,CAACC,YAAY,IAoGtBf,iBAAiB,iBACpCnG,KAAA,CAAA8E,aAAA;IACEE,SAAS,EAAEnE,MAAM,CAACyH,gBAAiB;IACnChF,KAAK,EAAE,gBAAgB6C,iBAAiB;EAAG,GAC5C,SACG,EAACA,iBACC,CACP,EACA6B,MAAM,iBACLhI,KAAA,CAAA8E,aAAA;IAAME,SAAS,EAAEnE,MAAM,CAAC0H,eAAgB;IAACjF,KAAK,EAAE0E,MAAM,CAACQ;EAAW,GAC/DR,MAAM,CAACS,KAAK,KAAK,UAAU,IAAIT,MAAM,CAACS,KAAK,KAAK,MAAM,GACnD,IAAI,GACJ,IACA,CAEL,CAAC,eACNzI,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAAC6H;EAAc,GAClC,IAAIC,IAAI,CAAC3C,SAAS,CAAC7B,SAAS,CAAC,CAACyE,kBAAkB,CAAC,CAC/C,CAAC,EACLZ,MAAM,iBAAIhI,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACgI;EAAU,GAAEb,MAAM,CAAC1E,KAAW,CAAC,EAChEgE,YAAY,CAAC5D,MAAM,GAAG,CAAC,iBACtB1D,KAAA,CAAA8E,aAAA;IAAKE,SAAS,EAAEnE,MAAM,CAACiI;EAAiB,GAAExB,YAAkB,CAE3D,CACF,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -45,7 +45,7 @@ export const PrimitiveSelectionPanel = ({
45
45
  className: styles.headerTitle
46
46
  }, "Discovered OSDK Usage"), /*#__PURE__*/React.createElement("div", {
47
47
  className: styles.headerSubtitle
48
- }, primitives.componentName, " \xB7 ", totalCount, " ", "item", totalCount !== 1 ? "s" : ""))), /*#__PURE__*/React.createElement(Button, {
48
+ }, primitives.componentName, " \xB7 ", totalCount, " item", totalCount !== 1 ? "s" : ""))), /*#__PURE__*/React.createElement(Button, {
49
49
  variant: "minimal",
50
50
  size: "small",
51
51
  icon: "cross",