@osdk/react-devtools 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +79 -0
- package/build/esm/DevToolsContext.js +19 -0
- package/build/esm/DevToolsContext.js.map +1 -0
- package/build/esm/components/ActionMetrics.js +89 -0
- package/build/esm/components/ActionMetrics.js.map +1 -0
- package/build/esm/components/BubbleChart.js +175 -0
- package/build/esm/components/BubbleChart.js.map +1 -0
- package/build/esm/components/BubbleChart.module.scss.js +6 -0
- package/build/esm/components/CacheInspectorTab.js +291 -0
- package/build/esm/components/CacheInspectorTab.js.map +1 -0
- package/build/esm/components/CacheInspectorTab.module.scss.js +39 -0
- package/build/esm/components/CacheMetrics.js +55 -0
- package/build/esm/components/CacheMetrics.js.map +1 -0
- package/build/esm/components/ComponentCard.js +124 -0
- package/build/esm/components/ComponentCard.js.map +1 -0
- package/build/esm/components/ComponentCard.module.scss.js +31 -0
- package/build/esm/components/ComputeTab.js +175 -0
- package/build/esm/components/ComputeTab.js.map +1 -0
- package/build/esm/components/CopyableCodeBlock.js +49 -0
- package/build/esm/components/CopyableCodeBlock.js.map +1 -0
- package/build/esm/components/CopyableCodeBlock.module.scss.js +10 -0
- package/build/esm/components/DebuggingTab.js +342 -0
- package/build/esm/components/DebuggingTab.js.map +1 -0
- package/build/esm/components/DebuggingTab.module.scss.js +18 -0
- package/build/esm/components/HookRow.js +180 -0
- package/build/esm/components/HookRow.js.map +1 -0
- package/build/esm/components/HookRow.module.scss.js +16 -0
- package/build/esm/components/ImprovementsTab.js +138 -0
- package/build/esm/components/ImprovementsTab.js.map +1 -0
- package/build/esm/components/ImprovementsTab.module.scss.js +30 -0
- package/build/esm/components/InspectorSelectionHeader.js +65 -0
- package/build/esm/components/InspectorSelectionHeader.js.map +1 -0
- package/build/esm/components/InterceptTab.js +862 -0
- package/build/esm/components/InterceptTab.js.map +1 -0
- package/build/esm/components/InterceptTab.module.scss.js +49 -0
- package/build/esm/components/IssueCard.js +115 -0
- package/build/esm/components/IssueCard.js.map +1 -0
- package/build/esm/components/IssueCard.module.scss.js +24 -0
- package/build/esm/components/LogEntryCard.js +94 -0
- package/build/esm/components/LogEntryCard.js.map +1 -0
- package/build/esm/components/LogEntryCard.module.scss.js +19 -0
- package/build/esm/components/MockEditor.js +316 -0
- package/build/esm/components/MockEditor.js.map +1 -0
- package/build/esm/components/MonitorErrorBoundary.js +64 -0
- package/build/esm/components/MonitorErrorBoundary.js.map +1 -0
- package/build/esm/components/MonitorErrorBoundary.module.scss.js +9 -0
- package/build/esm/components/MonitoringPanel.js +434 -0
- package/build/esm/components/MonitoringPanel.js.map +1 -0
- package/build/esm/components/MonitoringPanel.module.scss.js +81 -0
- package/build/esm/components/ObjectLoadingMetrics.js +60 -0
- package/build/esm/components/ObjectLoadingMetrics.js.map +1 -0
- package/build/esm/components/OsdkAppErrorBoundary.js +68 -0
- package/build/esm/components/OsdkAppErrorBoundary.js.map +1 -0
- package/build/esm/components/OsdkDevTools.js +40 -0
- package/build/esm/components/OsdkDevTools.js.map +1 -0
- package/build/esm/components/OverrideEditor.js +197 -0
- package/build/esm/components/OverrideEditor.js.map +1 -0
- package/build/esm/components/PerformanceTab.js +297 -0
- package/build/esm/components/PerformanceTab.js.map +1 -0
- package/build/esm/components/PrimitiveSelectionPanel.js +220 -0
- package/build/esm/components/PrimitiveSelectionPanel.js.map +1 -0
- package/build/esm/components/PrimitiveSelectionPanel.module.scss.js +26 -0
- package/build/esm/components/issueTypes.js +2 -0
- package/build/esm/components/issueTypes.js.map +1 -0
- package/build/esm/components/resolveComponentName.js +57 -0
- package/build/esm/components/resolveComponentName.js.map +1 -0
- package/build/esm/components/testHelpers.js +312 -0
- package/build/esm/components/testHelpers.js.map +1 -0
- package/build/esm/css.d.ts +20 -0
- package/build/esm/fiber/DegradationNotice.js +193 -0
- package/build/esm/fiber/DegradationNotice.js.map +1 -0
- package/build/esm/fiber/DevtoolsHook.js +252 -0
- package/build/esm/fiber/DevtoolsHook.js.map +1 -0
- package/build/esm/fiber/FiberAccess.js +65 -0
- package/build/esm/fiber/FiberAccess.js.map +1 -0
- package/build/esm/fiber/FiberInspection.js +140 -0
- package/build/esm/fiber/FiberInspection.js.map +1 -0
- package/build/esm/fiber/FiberTags.js +52 -0
- package/build/esm/fiber/FiberTags.js.map +1 -0
- package/build/esm/fiber/HookStateInspector.js +254 -0
- package/build/esm/fiber/HookStateInspector.js.map +1 -0
- package/build/esm/fiber/SafeFiberOperation.js +35 -0
- package/build/esm/fiber/SafeFiberOperation.js.map +1 -0
- package/build/esm/fiber/capabilities.js +180 -0
- package/build/esm/fiber/capabilities.js.map +1 -0
- package/build/esm/fiber/traverseFiber.js +129 -0
- package/build/esm/fiber/traverseFiber.js.map +1 -0
- package/build/esm/fiber/types.js +2 -0
- package/build/esm/fiber/types.js.map +1 -0
- package/build/esm/fiber/validation.js +155 -0
- package/build/esm/fiber/validation.js.map +1 -0
- package/build/esm/hooks/createPollingStore.js +81 -0
- package/build/esm/hooks/createPollingStore.js.map +1 -0
- package/build/esm/hooks/useActiveComponents.js +27 -0
- package/build/esm/hooks/useActiveComponents.js.map +1 -0
- package/build/esm/hooks/useComponentRegistry.js +25 -0
- package/build/esm/hooks/useComponentRegistry.js.map +1 -0
- package/build/esm/hooks/useComputeSelectors.js +43 -0
- package/build/esm/hooks/useComputeSelectors.js.map +1 -0
- package/build/esm/hooks/useConsoleLogs.js +46 -0
- package/build/esm/hooks/useConsoleLogs.js.map +1 -0
- package/build/esm/hooks/useInspectorSelection.js +93 -0
- package/build/esm/hooks/useInspectorSelection.js.map +1 -0
- package/build/esm/hooks/useMetrics.js +23 -0
- package/build/esm/hooks/useMetrics.js.map +1 -0
- package/build/esm/hooks/usePersistedState.js +89 -0
- package/build/esm/hooks/usePersistedState.js.map +1 -0
- package/build/esm/hooks/useRecommendations.js +123 -0
- package/build/esm/hooks/useRecommendations.js.map +1 -0
- package/build/esm/hooks/useSharedTick.js +49 -0
- package/build/esm/hooks/useSharedTick.js.map +1 -0
- package/build/esm/hooks/useTimeElapsed.js +51 -0
- package/build/esm/hooks/useTimeElapsed.js.map +1 -0
- package/build/esm/hooks/useTrackerSubscription.js +97 -0
- package/build/esm/hooks/useTrackerSubscription.js.map +1 -0
- package/build/esm/hooks/useUnusedFieldAnalysis.js +99 -0
- package/build/esm/hooks/useUnusedFieldAnalysis.js.map +1 -0
- package/build/esm/index.js +31 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/inspector/ClickToInspectSystem.js +228 -0
- package/build/esm/inspector/ClickToInspectSystem.js.map +1 -0
- package/build/esm/inspector/components/ComponentLabel.js +175 -0
- package/build/esm/inspector/components/ComponentLabel.js.map +1 -0
- package/build/esm/inspector/components/ComponentLabel.module.scss.js +12 -0
- package/build/esm/inspector/components/InspectorBanner.js +79 -0
- package/build/esm/inspector/components/InspectorBanner.js.map +1 -0
- package/build/esm/inspector/components/InspectorOverlay.js +149 -0
- package/build/esm/inspector/components/InspectorOverlay.js.map +1 -0
- package/build/esm/inspector/components/SelectionHighlight.js +74 -0
- package/build/esm/inspector/components/SelectionHighlight.js.map +1 -0
- package/build/esm/inspector/createClickToInspect.js +21 -0
- package/build/esm/inspector/createClickToInspect.js.map +1 -0
- package/build/esm/inspector/hooks/useAnimatedBounds.js +167 -0
- package/build/esm/inspector/hooks/useAnimatedBounds.js.map +1 -0
- package/build/esm/inspector/index.js +40 -0
- package/build/esm/inspector/index.js.map +1 -0
- package/build/esm/inspector/inspectorController.js +328 -0
- package/build/esm/inspector/inspectorController.js.map +1 -0
- package/build/esm/inspector/types.js +2 -0
- package/build/esm/inspector/types.js.map +1 -0
- package/build/esm/inspector/utils/elementBounds.js +72 -0
- package/build/esm/inspector/utils/elementBounds.js.map +1 -0
- package/build/esm/inspector/utils/interpolation.js +26 -0
- package/build/esm/inspector/utils/interpolation.js.map +1 -0
- package/build/esm/inspector/utils/labelPositioning.js +62 -0
- package/build/esm/inspector/utils/labelPositioning.js.map +1 -0
- package/build/esm/mocking/MockCacheKeyGenerator.js +109 -0
- package/build/esm/mocking/MockCacheKeyGenerator.js.map +1 -0
- package/build/esm/mocking/MockManager.js +281 -0
- package/build/esm/mocking/MockManager.js.map +1 -0
- package/build/esm/prototyping/PrototypeOverrideStore.js +66 -0
- package/build/esm/prototyping/PrototypeOverrideStore.js.map +1 -0
- package/build/esm/prototyping/index.js +18 -0
- package/build/esm/prototyping/index.js.map +1 -0
- package/build/esm/public/vite.js +19 -0
- package/build/esm/public/vite.js.map +1 -0
- package/build/esm/register.js +41 -0
- package/build/esm/register.js.map +1 -0
- package/build/esm/scss.d.ts +20 -0
- package/build/esm/store/ComputeStore.js +269 -0
- package/build/esm/store/ComputeStore.js.map +1 -0
- package/build/esm/store/ConsoleLogStore.js +289 -0
- package/build/esm/store/ConsoleLogStore.js.map +1 -0
- package/build/esm/store/MetricsStore.js +428 -0
- package/build/esm/store/MetricsStore.js.map +1 -0
- package/build/esm/store/MonitorStore.js +288 -0
- package/build/esm/store/MonitorStore.js.map +1 -0
- package/build/esm/store/SubscribableStore.js +38 -0
- package/build/esm/store/SubscribableStore.js.map +1 -0
- package/build/esm/store/WindowErrorStore.js +195 -0
- package/build/esm/store/WindowErrorStore.js.map +1 -0
- package/build/esm/styles.css +19441 -0
- package/build/esm/styles.js +31 -0
- package/build/esm/styles.js.map +1 -0
- package/build/esm/types/compute.js +2 -0
- package/build/esm/types/compute.js.map +1 -0
- package/build/esm/types/emissions.js +2 -0
- package/build/esm/types/emissions.js.map +1 -0
- package/build/esm/types/index.js +23 -0
- package/build/esm/types/index.js.map +1 -0
- package/build/esm/utils/ActionLifecycleTracker.js +178 -0
- package/build/esm/utils/ActionLifecycleTracker.js.map +1 -0
- package/build/esm/utils/CacheEfficiencyAnalyzer.js +198 -0
- package/build/esm/utils/CacheEfficiencyAnalyzer.js.map +1 -0
- package/build/esm/utils/CircularBuffer.js +96 -0
- package/build/esm/utils/CircularBuffer.js.map +1 -0
- package/build/esm/utils/ComponentContextCapture.js +215 -0
- package/build/esm/utils/ComponentContextCapture.js.map +1 -0
- package/build/esm/utils/ComponentPrimitiveDiscovery.js +173 -0
- package/build/esm/utils/ComponentPrimitiveDiscovery.js.map +1 -0
- package/build/esm/utils/ComponentQueryRegistry.js +340 -0
- package/build/esm/utils/ComponentQueryRegistry.js.map +1 -0
- package/build/esm/utils/ComputeMonitor.js +199 -0
- package/build/esm/utils/ComputeMonitor.js.map +1 -0
- package/build/esm/utils/EventTimeline.js +130 -0
- package/build/esm/utils/EventTimeline.js.map +1 -0
- package/build/esm/utils/LinkTraversalTracker.js +116 -0
- package/build/esm/utils/LinkTraversalTracker.js.map +1 -0
- package/build/esm/utils/MockDataGenerator.js +473 -0
- package/build/esm/utils/MockDataGenerator.js.map +1 -0
- package/build/esm/utils/ObservableClientMonitor.js +768 -0
- package/build/esm/utils/ObservableClientMonitor.js.map +1 -0
- package/build/esm/utils/PerformanceRecommendationEngine.js +185 -0
- package/build/esm/utils/PerformanceRecommendationEngine.js.map +1 -0
- package/build/esm/utils/PropertyAccessTracker.js +238 -0
- package/build/esm/utils/PropertyAccessTracker.js.map +1 -0
- package/build/esm/utils/RecommendationMatcher.js +53 -0
- package/build/esm/utils/RecommendationMatcher.js.map +1 -0
- package/build/esm/utils/SubscriptionTracker.js +132 -0
- package/build/esm/utils/SubscriptionTracker.js.map +1 -0
- package/build/esm/utils/UnusedFieldAnalyzer.js +186 -0
- package/build/esm/utils/UnusedFieldAnalyzer.js.map +1 -0
- package/build/esm/utils/WaterfallDetector.js +200 -0
- package/build/esm/utils/WaterfallDetector.js.map +1 -0
- package/build/esm/utils/computePayload.js +37 -0
- package/build/esm/utils/computePayload.js.map +1 -0
- package/build/esm/utils/computeRequest.js +29 -0
- package/build/esm/utils/computeRequest.js.map +1 -0
- package/build/esm/utils/format.js +69 -0
- package/build/esm/utils/format.js.map +1 -0
- package/build/esm/utils/logger.js +31 -0
- package/build/esm/utils/logger.js.map +1 -0
- package/build/esm/vite/constants.js +18 -0
- package/build/esm/vite/constants.js.map +1 -0
- package/build/esm/vite/hookInstaller.js +99 -0
- package/build/esm/vite/hookInstaller.js.map +1 -0
- package/build/esm/vite/index.js +77 -0
- package/build/esm/vite/index.js.map +1 -0
- package/build/types/DevToolsContext.d.ts +3 -0
- package/build/types/DevToolsContext.d.ts.map +1 -0
- package/build/types/components/ActionMetrics.d.ts +6 -0
- package/build/types/components/ActionMetrics.d.ts.map +1 -0
- package/build/types/components/BubbleChart.d.ts +10 -0
- package/build/types/components/BubbleChart.d.ts.map +1 -0
- package/build/types/components/CacheInspectorTab.d.ts +6 -0
- package/build/types/components/CacheInspectorTab.d.ts.map +1 -0
- package/build/types/components/CacheMetrics.d.ts +6 -0
- package/build/types/components/CacheMetrics.d.ts.map +1 -0
- package/build/types/components/ComponentCard.d.ts +13 -0
- package/build/types/components/ComponentCard.d.ts.map +1 -0
- package/build/types/components/ComputeTab.d.ts +6 -0
- package/build/types/components/ComputeTab.d.ts.map +1 -0
- package/build/types/components/CopyableCodeBlock.d.ts +7 -0
- package/build/types/components/CopyableCodeBlock.d.ts.map +1 -0
- package/build/types/components/DebuggingTab.d.ts +6 -0
- package/build/types/components/DebuggingTab.d.ts.map +1 -0
- package/build/types/components/HookRow.d.ts +9 -0
- package/build/types/components/HookRow.d.ts.map +1 -0
- package/build/types/components/ImprovementsTab.d.ts +7 -0
- package/build/types/components/ImprovementsTab.d.ts.map +1 -0
- package/build/types/components/InspectorSelectionHeader.d.ts +12 -0
- package/build/types/components/InspectorSelectionHeader.d.ts.map +1 -0
- package/build/types/components/InterceptTab.d.ts +126 -0
- package/build/types/components/InterceptTab.d.ts.map +1 -0
- package/build/types/components/IssueCard.d.ts +8 -0
- package/build/types/components/IssueCard.d.ts.map +1 -0
- package/build/types/components/LogEntryCard.d.ts +7 -0
- package/build/types/components/LogEntryCard.d.ts.map +1 -0
- package/build/types/components/MockEditor.d.ts +58 -0
- package/build/types/components/MockEditor.d.ts.map +1 -0
- package/build/types/components/MonitorErrorBoundary.d.ts +16 -0
- package/build/types/components/MonitorErrorBoundary.d.ts.map +1 -0
- package/build/types/components/MonitoringPanel.d.ts +8 -0
- package/build/types/components/MonitoringPanel.d.ts.map +1 -0
- package/build/types/components/ObjectLoadingMetrics.d.ts +7 -0
- package/build/types/components/ObjectLoadingMetrics.d.ts.map +1 -0
- package/build/types/components/OsdkAppErrorBoundary.d.ts +18 -0
- package/build/types/components/OsdkAppErrorBoundary.d.ts.map +1 -0
- package/build/types/components/OsdkDevTools.d.ts +2 -0
- package/build/types/components/OsdkDevTools.d.ts.map +1 -0
- package/build/types/components/OverrideEditor.d.ts +26 -0
- package/build/types/components/OverrideEditor.d.ts.map +1 -0
- package/build/types/components/PerformanceTab.d.ts +8 -0
- package/build/types/components/PerformanceTab.d.ts.map +1 -0
- package/build/types/components/PrimitiveSelectionPanel.d.ts +28 -0
- package/build/types/components/PrimitiveSelectionPanel.d.ts.map +1 -0
- package/build/types/components/issueTypes.d.ts +16 -0
- package/build/types/components/issueTypes.d.ts.map +1 -0
- package/build/types/components/resolveComponentName.d.ts +3 -0
- package/build/types/components/resolveComponentName.d.ts.map +1 -0
- package/build/types/components/testHelpers.d.ts +2 -0
- package/build/types/components/testHelpers.d.ts.map +1 -0
- package/build/types/css.d.d.ts +4 -0
- package/build/types/css.d.d.ts.map +1 -0
- package/build/types/fiber/DegradationNotice.d.ts +8 -0
- package/build/types/fiber/DegradationNotice.d.ts.map +1 -0
- package/build/types/fiber/DevtoolsHook.d.ts +7 -0
- package/build/types/fiber/DevtoolsHook.d.ts.map +1 -0
- package/build/types/fiber/FiberAccess.d.ts +2 -0
- package/build/types/fiber/FiberAccess.d.ts.map +1 -0
- package/build/types/fiber/FiberInspection.d.ts +6 -0
- package/build/types/fiber/FiberInspection.d.ts.map +1 -0
- package/build/types/fiber/FiberTags.d.ts +33 -0
- package/build/types/fiber/FiberTags.d.ts.map +1 -0
- package/build/types/fiber/HookStateInspector.d.ts +45 -0
- package/build/types/fiber/HookStateInspector.d.ts.map +1 -0
- package/build/types/fiber/SafeFiberOperation.d.ts +7 -0
- package/build/types/fiber/SafeFiberOperation.d.ts.map +1 -0
- package/build/types/fiber/capabilities.d.ts +38 -0
- package/build/types/fiber/capabilities.d.ts.map +1 -0
- package/build/types/fiber/traverseFiber.d.ts +5 -0
- package/build/types/fiber/traverseFiber.d.ts.map +1 -0
- package/build/types/fiber/types.d.ts +87 -0
- package/build/types/fiber/types.d.ts.map +1 -0
- package/build/types/fiber/validation.d.ts +10 -0
- package/build/types/fiber/validation.d.ts.map +1 -0
- package/build/types/hooks/createPollingStore.d.ts +5 -0
- package/build/types/hooks/createPollingStore.d.ts.map +1 -0
- package/build/types/hooks/useActiveComponents.d.ts +3 -0
- package/build/types/hooks/useActiveComponents.d.ts.map +1 -0
- package/build/types/hooks/useComponentRegistry.d.ts +3 -0
- package/build/types/hooks/useComponentRegistry.d.ts.map +1 -0
- package/build/types/hooks/useComputeSelectors.d.ts +7 -0
- package/build/types/hooks/useComputeSelectors.d.ts.map +1 -0
- package/build/types/hooks/useConsoleLogs.d.ts +7 -0
- package/build/types/hooks/useConsoleLogs.d.ts.map +1 -0
- package/build/types/hooks/useInspectorSelection.d.ts +9 -0
- package/build/types/hooks/useInspectorSelection.d.ts.map +1 -0
- package/build/types/hooks/useMetrics.d.ts +3 -0
- package/build/types/hooks/useMetrics.d.ts.map +1 -0
- package/build/types/hooks/usePersistedState.d.ts +1 -0
- package/build/types/hooks/usePersistedState.d.ts.map +1 -0
- package/build/types/hooks/useRecommendations.d.ts +10 -0
- package/build/types/hooks/useRecommendations.d.ts.map +1 -0
- package/build/types/hooks/useSharedTick.d.ts +1 -0
- package/build/types/hooks/useSharedTick.d.ts.map +1 -0
- package/build/types/hooks/useTimeElapsed.d.ts +1 -0
- package/build/types/hooks/useTimeElapsed.d.ts.map +1 -0
- package/build/types/hooks/useTrackerSubscription.d.ts +16 -0
- package/build/types/hooks/useTrackerSubscription.d.ts.map +1 -0
- package/build/types/hooks/useUnusedFieldAnalysis.d.ts +8 -0
- package/build/types/hooks/useUnusedFieldAnalysis.d.ts.map +1 -0
- package/build/types/index.d.ts +21 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/inspector/ClickToInspectSystem.d.ts +40 -0
- package/build/types/inspector/ClickToInspectSystem.d.ts.map +1 -0
- package/build/types/inspector/components/ComponentLabel.d.ts +3 -0
- package/build/types/inspector/components/ComponentLabel.d.ts.map +1 -0
- package/build/types/inspector/components/InspectorBanner.d.ts +5 -0
- package/build/types/inspector/components/InspectorBanner.d.ts.map +1 -0
- package/build/types/inspector/components/InspectorOverlay.d.ts +3 -0
- package/build/types/inspector/components/InspectorOverlay.d.ts.map +1 -0
- package/build/types/inspector/components/SelectionHighlight.d.ts +3 -0
- package/build/types/inspector/components/SelectionHighlight.d.ts.map +1 -0
- package/build/types/inspector/createClickToInspect.d.ts +3 -0
- package/build/types/inspector/createClickToInspect.d.ts.map +1 -0
- package/build/types/inspector/hooks/useAnimatedBounds.d.ts +2 -0
- package/build/types/inspector/hooks/useAnimatedBounds.d.ts.map +1 -0
- package/build/types/inspector/index.d.ts +13 -0
- package/build/types/inspector/index.d.ts.map +1 -0
- package/build/types/inspector/inspectorController.d.ts +2 -0
- package/build/types/inspector/inspectorController.d.ts.map +1 -0
- package/build/types/inspector/types.d.ts +94 -0
- package/build/types/inspector/types.d.ts.map +1 -0
- package/build/types/inspector/utils/elementBounds.d.ts +3 -0
- package/build/types/inspector/utils/elementBounds.d.ts.map +1 -0
- package/build/types/inspector/utils/interpolation.d.ts +7 -0
- package/build/types/inspector/utils/interpolation.d.ts.map +1 -0
- package/build/types/inspector/utils/labelPositioning.d.ts +3 -0
- package/build/types/inspector/utils/labelPositioning.d.ts.map +1 -0
- package/build/types/mocking/MockCacheKeyGenerator.d.ts +41 -0
- package/build/types/mocking/MockCacheKeyGenerator.d.ts.map +1 -0
- package/build/types/mocking/MockManager.d.ts +103 -0
- package/build/types/mocking/MockManager.d.ts.map +1 -0
- package/build/types/prototyping/PrototypeOverrideStore.d.ts +33 -0
- package/build/types/prototyping/PrototypeOverrideStore.d.ts.map +1 -0
- package/build/types/prototyping/index.d.ts +1 -0
- package/build/types/prototyping/index.d.ts.map +1 -0
- package/build/types/public/vite.d.ts +2 -0
- package/build/types/public/vite.d.ts.map +1 -0
- package/build/types/register.d.ts +1 -0
- package/build/types/register.d.ts.map +1 -0
- package/build/types/scss.d.d.ts +6 -0
- package/build/types/scss.d.d.ts.map +1 -0
- package/build/types/store/ComputeStore.d.ts +47 -0
- package/build/types/store/ComputeStore.d.ts.map +1 -0
- package/build/types/store/ConsoleLogStore.d.ts +29 -0
- package/build/types/store/ConsoleLogStore.d.ts.map +1 -0
- package/build/types/store/MetricsStore.d.ts +42 -0
- package/build/types/store/MetricsStore.d.ts.map +1 -0
- package/build/types/store/MonitorStore.d.ts +86 -0
- package/build/types/store/MonitorStore.d.ts.map +1 -0
- package/build/types/store/SubscribableStore.d.ts +6 -0
- package/build/types/store/SubscribableStore.d.ts.map +1 -0
- package/build/types/store/WindowErrorStore.d.ts +32 -0
- package/build/types/store/WindowErrorStore.d.ts.map +1 -0
- package/build/types/styles.d.ts +1 -0
- package/build/types/styles.d.ts.map +1 -0
- package/build/types/types/compute.d.ts +73 -0
- package/build/types/types/compute.d.ts.map +1 -0
- package/build/types/types/emissions.d.ts +24 -0
- package/build/types/types/emissions.d.ts.map +1 -0
- package/build/types/types/index.d.ts +143 -0
- package/build/types/types/index.d.ts.map +1 -0
- package/build/types/utils/ActionLifecycleTracker.d.ts +39 -0
- package/build/types/utils/ActionLifecycleTracker.d.ts.map +1 -0
- package/build/types/utils/CacheEfficiencyAnalyzer.d.ts +45 -0
- package/build/types/utils/CacheEfficiencyAnalyzer.d.ts.map +1 -0
- package/build/types/utils/CircularBuffer.d.ts +18 -0
- package/build/types/utils/CircularBuffer.d.ts.map +1 -0
- package/build/types/utils/ComponentContextCapture.d.ts +29 -0
- package/build/types/utils/ComponentContextCapture.d.ts.map +1 -0
- package/build/types/utils/ComponentPrimitiveDiscovery.d.ts +62 -0
- package/build/types/utils/ComponentPrimitiveDiscovery.d.ts.map +1 -0
- package/build/types/utils/ComponentQueryRegistry.d.ts +91 -0
- package/build/types/utils/ComponentQueryRegistry.d.ts.map +1 -0
- package/build/types/utils/ComputeMonitor.d.ts +14 -0
- package/build/types/utils/ComputeMonitor.d.ts.map +1 -0
- package/build/types/utils/EventTimeline.d.ts +102 -0
- package/build/types/utils/EventTimeline.d.ts.map +1 -0
- package/build/types/utils/LinkTraversalTracker.d.ts +43 -0
- package/build/types/utils/LinkTraversalTracker.d.ts.map +1 -0
- package/build/types/utils/MockDataGenerator.d.ts +23 -0
- package/build/types/utils/MockDataGenerator.d.ts.map +1 -0
- package/build/types/utils/ObservableClientMonitor.d.ts +62 -0
- package/build/types/utils/ObservableClientMonitor.d.ts.map +1 -0
- package/build/types/utils/PerformanceRecommendationEngine.d.ts +67 -0
- package/build/types/utils/PerformanceRecommendationEngine.d.ts.map +1 -0
- package/build/types/utils/PropertyAccessTracker.d.ts +50 -0
- package/build/types/utils/PropertyAccessTracker.d.ts.map +1 -0
- package/build/types/utils/RecommendationMatcher.d.ts +5 -0
- package/build/types/utils/RecommendationMatcher.d.ts.map +1 -0
- package/build/types/utils/SubscriptionTracker.d.ts +17 -0
- package/build/types/utils/SubscriptionTracker.d.ts.map +1 -0
- package/build/types/utils/UnusedFieldAnalyzer.d.ts +46 -0
- package/build/types/utils/UnusedFieldAnalyzer.d.ts.map +1 -0
- package/build/types/utils/WaterfallDetector.d.ts +28 -0
- package/build/types/utils/WaterfallDetector.d.ts.map +1 -0
- package/build/types/utils/computePayload.d.ts +3 -0
- package/build/types/utils/computePayload.d.ts.map +1 -0
- package/build/types/utils/computeRequest.d.ts +20 -0
- package/build/types/utils/computeRequest.d.ts.map +1 -0
- package/build/types/utils/format.d.ts +5 -0
- package/build/types/utils/format.d.ts.map +1 -0
- package/build/types/utils/logger.d.ts +2 -0
- package/build/types/utils/logger.d.ts.map +1 -0
- package/build/types/vite/constants.d.ts +1 -0
- package/build/types/vite/constants.d.ts.map +1 -0
- package/build/types/vite/hookInstaller.d.ts +1 -0
- package/build/types/vite/hookInstaller.d.ts.map +1 -0
- package/build/types/vite/index.d.ts +20 -0
- package/build/types/vite/index.d.ts.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DebuggingTab.js","names":["Icon","InputGroup","classNames","React","useCallback","useMemo","useRef","useState","createPollingStore","useActiveComponents","useConsoleLogs","formatTime","CacheInspectorTab","ComponentCard","styles","ImprovementsTab","IssueCard","LogEntryCard","resolveComponentName","SEVERITY_ORDER","error","warning","info","collectIssues","monitorStore","now","issues","err","getMetricsStore","getActionErrors","push","id","severity","category","title","message","suggestion","validationErrors","length","undefined","timestamp","expandable","stack","detailsJson","JSON","stringify","actionType","parameters","windowErrors","getWindowErrorStore","getEntries","windowErrorBuckets","Set","we","filename","lineno","colno","hasExpandable","kind","bucket","Math","floor","add","entry","getConsoleLogStore","level","messageText","args","join","has","issue","source","wr","getPropertyAccessTracker","getWastedRenders","componentId","count","componentName","up","getUnusedProperties","propertyName","sort","a","b","DebuggingTab","searchQuery","setSearchQuery","cacheExpanded","setCacheExpanded","consoleExpanded","setConsoleExpanded","improvementsExpanded","setImprovementsExpanded","componentRefs","Map","activeComponents","entries","consoleEntries","consoleCount","clear","clearConsole","issueStore","Date","useSyncExternalStore","subscribe","getSnapshot","cacheCountStore","loadCacheEntries","cacheCount","searchFilter","trim","q","toLowerCase","includes","errorIssues","filter","i","filteredConsoleEntries","some","arg","issuesByComponent","map","existing","get","set","filteredComponents","filtered","bindings","displayName","handleComponentClick","el","current","scrollIntoView","behavior","block","click","createElement","className","debuggingTab","controls","leftIcon","placeholder","value","onChange","e","target","searchInput","fill","feed","section","sectionHeader","errorSectionHeader","icon","size","color","sectionCount","emptyState","index","key","onComponentClick","style","type","sectionHeaderButton","onClick","role","tabIndex","stopPropagation","onKeyDown","preventDefault","sectionChevron","slice","Array","from","ref","delete"],"sources":["DebuggingTab.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Icon, InputGroup } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useCallback, useMemo, useRef, useState } from \"react\";\nimport { createPollingStore } from \"../hooks/createPollingStore.js\";\nimport { useActiveComponents } from \"../hooks/useActiveComponents.js\";\nimport { useConsoleLogs } from \"../hooks/useConsoleLogs.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { ComponentHookBinding } from \"../utils/ComponentQueryRegistry.js\";\nimport { formatTime } from \"../utils/format.js\";\nimport { CacheInspectorTab } from \"./CacheInspectorTab.js\";\nimport { ComponentCard } from \"./ComponentCard.js\";\nimport styles from \"./DebuggingTab.module.scss\";\nimport { ImprovementsTab } from \"./ImprovementsTab.js\";\nimport { IssueCard } from \"./IssueCard.js\";\nimport type { Issue } from \"./issueTypes.js\";\nimport { LogEntryCard } from \"./LogEntryCard.js\";\nimport { resolveComponentName } from \"./resolveComponentName.js\";\n\nexport interface DebuggingTabProps {\n monitorStore: MonitorStore;\n}\n\nconst SEVERITY_ORDER: Record<Issue[\"severity\"], number> = {\n error: 0,\n warning: 1,\n info: 2,\n};\n\nfunction collectIssues(\n monitorStore: MonitorStore,\n now: number,\n): Issue[] {\n const issues: Issue[] = [];\n\n for (const err of monitorStore.getMetricsStore().getActionErrors()) {\n issues.push({\n id: err.id,\n severity: \"error\",\n category: \"action failure\",\n title: \"Action failed\",\n message: err.message,\n suggestion: err.validationErrors?.length\n ? \"Fix validation errors before retrying\"\n : undefined,\n timestamp: err.timestamp,\n expandable: {\n stack: err.stack,\n detailsJson: JSON.stringify(\n {\n actionType: err.actionType,\n parameters: err.parameters,\n },\n null,\n 2,\n ),\n },\n });\n }\n\n const windowErrors = monitorStore.getWindowErrorStore().getEntries();\n // Bucketed at 100ms granularity. The lookup checks the current bucket plus\n // the two adjacent buckets so that any console.error within ±100ms of a\n // window error collides regardless of where the timestamps fall.\n const windowErrorBuckets = new Set<string>();\n for (const we of windowErrors) {\n const expandable: NonNullable<Issue[\"expandable\"]> = {};\n if (we.stack) {\n expandable.stack = we.stack;\n }\n if (we.filename || we.lineno || we.colno) {\n expandable.detailsJson = JSON.stringify(\n {\n filename: we.filename,\n lineno: we.lineno,\n colno: we.colno,\n },\n null,\n 2,\n );\n }\n const hasExpandable = expandable.stack !== undefined\n || expandable.detailsJson !== undefined;\n\n issues.push({\n id: `windowError-${we.id}`,\n severity: \"error\",\n category: we.kind === \"unhandledrejection\"\n ? \"unhandled rejection\"\n : \"uncaught error\",\n title: we.kind === \"unhandledrejection\"\n ? \"Unhandled promise rejection\"\n : \"Uncaught error\",\n message: we.message,\n timestamp: we.timestamp,\n ...(hasExpandable ? { expandable } : {}),\n });\n\n const bucket = Math.floor(we.timestamp / 100);\n windowErrorBuckets.add(`${we.message}|${bucket}`);\n }\n\n for (const entry of monitorStore.getConsoleLogStore().getEntries()) {\n if (entry.level !== \"error\") {\n continue;\n }\n const messageText = entry.args.join(\" \");\n const bucket = Math.floor(entry.timestamp / 100);\n if (\n windowErrorBuckets.has(`${messageText}|${bucket - 1}`)\n || windowErrorBuckets.has(`${messageText}|${bucket}`)\n || windowErrorBuckets.has(`${messageText}|${bucket + 1}`)\n ) {\n continue;\n }\n const issue: Issue = {\n id: `console-${entry.id}`,\n severity: \"error\",\n category: \"console error\",\n title: \"console.error\",\n message: messageText,\n timestamp: entry.timestamp,\n };\n if (entry.source) {\n issue.expandable = {\n detailsJson: JSON.stringify({ source: entry.source }, null, 2),\n };\n }\n issues.push(issue);\n }\n\n for (const wr of monitorStore.getPropertyAccessTracker().getWastedRenders()) {\n issues.push({\n id: `wasted-${wr.componentId}-${wr.timestamp}`,\n severity: \"warning\",\n category: \"wasted render\",\n title: `${wr.count} renders without property access`,\n message: `${wr.componentName} renders but doesn't use the data`,\n suggestion: \"Check if this component needs this data subscription\",\n componentId: wr.componentId,\n componentName: wr.componentName,\n timestamp: wr.timestamp,\n });\n }\n\n for (\n const up of monitorStore.getPropertyAccessTracker().getUnusedProperties()\n ) {\n issues.push({\n id: `unused-${up.componentId}-${up.propertyName}`,\n severity: \"info\",\n category: \"unused field\",\n title: `\"${up.propertyName}\" loaded but never accessed`,\n message: `${up.componentName} fetches this field but never reads it`,\n suggestion: \"Remove from query to reduce payload\",\n componentId: up.componentId,\n componentName: up.componentName,\n timestamp: now,\n });\n }\n\n issues.sort(\n (a, b) =>\n SEVERITY_ORDER[a.severity] - SEVERITY_ORDER[b.severity]\n || b.timestamp - a.timestamp,\n );\n\n return issues;\n}\n\nexport const DebuggingTab: React.FC<DebuggingTabProps> = ({ monitorStore }) => {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [cacheExpanded, setCacheExpanded] = useState(false);\n const [consoleExpanded, setConsoleExpanded] = useState(true);\n const [improvementsExpanded, setImprovementsExpanded] = useState(true);\n\n const componentRefs = useRef<Map<string, HTMLDivElement>>(new Map());\n\n const activeComponents = useActiveComponents(monitorStore);\n const { entries: consoleEntries, count: consoleCount, clear: clearConsole } =\n useConsoleLogs(monitorStore);\n\n const issueStore = React.useMemo(\n () =>\n createPollingStore(\n () => collectIssues(monitorStore, Date.now()),\n 2000,\n ),\n [monitorStore],\n );\n const issues = React.useSyncExternalStore(\n issueStore.subscribe,\n issueStore.getSnapshot,\n ) ?? [];\n\n const cacheCountStore = React.useMemo(\n () =>\n createPollingStore(\n async () => {\n const entries = await monitorStore.loadCacheEntries();\n return entries.length;\n },\n 5000,\n ),\n [monitorStore],\n );\n const cacheCount = React.useSyncExternalStore(\n cacheCountStore.subscribe,\n cacheCountStore.getSnapshot,\n ) ?? 0;\n\n const searchFilter = useCallback((issue: Issue) => {\n if (!searchQuery.trim()) {\n return true;\n }\n const q = searchQuery.toLowerCase();\n return issue.title.toLowerCase().includes(q)\n || issue.message.toLowerCase().includes(q)\n || (issue.componentName?.toLowerCase().includes(q) ?? false)\n || issue.category.toLowerCase().includes(q);\n }, [searchQuery]);\n\n const errorIssues = useMemo(\n () => issues.filter(i => i.severity === \"error\").filter(searchFilter),\n [issues, searchFilter],\n );\n\n const filteredConsoleEntries = useMemo(() => {\n if (!searchQuery.trim()) {\n return consoleEntries;\n }\n const q = searchQuery.toLowerCase();\n return consoleEntries.filter(\n (entry) =>\n entry.args.some((arg) => arg.toLowerCase().includes(q))\n || entry.level.includes(q)\n || (entry.source?.toLowerCase().includes(q) ?? false),\n );\n }, [consoleEntries, searchQuery]);\n\n const issuesByComponent = useMemo(() => {\n const map = new Map<string, Issue[]>();\n for (const issue of issues) {\n if (issue.componentId) {\n const existing = map.get(issue.componentId);\n if (existing) {\n existing.push(issue);\n } else {\n map.set(issue.componentId, [issue]);\n }\n }\n }\n return map;\n }, [issues]);\n\n const filteredComponents = useMemo<Map<string, ComponentHookBinding[]>>(\n () => {\n if (!searchQuery.trim()) {\n return activeComponents;\n }\n\n const q = searchQuery.toLowerCase();\n const filtered = new Map<string, ComponentHookBinding[]>();\n\n for (const [componentId, bindings] of activeComponents) {\n const displayName = resolveComponentName(bindings).toLowerCase();\n\n if (\n displayName.includes(q)\n || componentId.includes(q)\n ) {\n filtered.set(componentId, bindings);\n }\n }\n\n return filtered;\n },\n [activeComponents, searchQuery],\n );\n\n const handleComponentClick = useCallback((componentId: string) => {\n const el = componentRefs.current.get(componentId);\n if (el) {\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n el.click();\n }\n }, []);\n\n return (\n <div className={styles.debuggingTab}>\n <div className={styles.controls}>\n <InputGroup\n leftIcon=\"search\"\n placeholder=\"Search issues and components...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className={styles.searchInput}\n fill={true}\n />\n </div>\n\n <div className={styles.feed}>\n <div className={styles.section}>\n <div\n className={classNames(\n styles.sectionHeader,\n styles.errorSectionHeader,\n )}\n >\n <Icon icon=\"error\" size={14} color=\"var(--dt-red)\" />\n <span>Errors</span>\n <span className={styles.sectionCount}>\n {errorIssues.length}\n </span>\n </div>\n {errorIssues.length === 0\n ? (\n <div className={styles.emptyState}>\n No errors\n </div>\n )\n : errorIssues.map((issue, index) => (\n <IssueCard\n key={issue.id}\n issue={issue}\n onComponentClick={handleComponentClick}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n ))}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setConsoleExpanded(!consoleExpanded)}\n >\n <Icon icon=\"console\" size={14} color=\"var(--dt-text-tertiary)\" />\n <span>Console</span>\n <span className={styles.sectionCount}>\n {consoleCount}\n </span>\n {consoleCount > 0 && (\n <span\n className={styles.sectionCount}\n role=\"button\"\n tabIndex={0}\n onClick={(e) => {\n e.stopPropagation();\n clearConsole();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.stopPropagation();\n e.preventDefault();\n clearConsole();\n }\n }}\n >\n clear\n </span>\n )}\n <Icon\n icon={consoleExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {consoleExpanded && (\n filteredConsoleEntries.length === 0\n ? (\n <div className={styles.emptyState}>\n No console output captured\n </div>\n )\n : filteredConsoleEntries.slice(-100).map((entry, index) => (\n <LogEntryCard\n key={entry.id}\n entry={entry}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n ))\n )}\n </div>\n\n <div className={styles.section}>\n <div className={styles.sectionHeader}>\n <span>Components</span>\n <span className={styles.sectionCount}>\n {filteredComponents.size}\n </span>\n </div>\n {filteredComponents.size === 0 && (\n <div className={styles.emptyState}>\n {searchQuery\n ? \"No components match your search\"\n : \"No active components found\"}\n </div>\n )}\n {Array.from(filteredComponents).map(\n ([componentId, bindings], index) => (\n <div\n key={componentId}\n ref={(el) => {\n if (el) {\n componentRefs.current.set(componentId, el);\n } else {\n componentRefs.current.delete(componentId);\n }\n }}\n >\n <ComponentCard\n componentId={componentId}\n bindings={bindings}\n formatTime={formatTime}\n monitorStore={monitorStore}\n issues={issuesByComponent.get(componentId)}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n />\n </div>\n ),\n )}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setImprovementsExpanded(!improvementsExpanded)}\n >\n <span>Improvements</span>\n <Icon\n icon={improvementsExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {improvementsExpanded && (\n <ImprovementsTab monitorStore={monitorStore} />\n )}\n </div>\n\n <div className={styles.section}>\n <button\n type=\"button\"\n className={styles.sectionHeaderButton}\n onClick={() => setCacheExpanded(!cacheExpanded)}\n >\n <span>Cache</span>\n <span className={styles.sectionCount}>{cacheCount} entries</span>\n <Icon\n icon={cacheExpanded ? \"chevron-down\" : \"chevron-right\"}\n size={14}\n className={styles.sectionChevron}\n />\n </button>\n {cacheExpanded && <CacheInspectorTab monitorStore={monitorStore} />}\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// AUTO-GENERATED by scripts/build-css.mjs. Do not edit by hand.
|
|
2
|
+
const styles = {
|
|
3
|
+
"debuggingTab": "DebuggingTab-module__debuggingTab___zfzaJ5FH",
|
|
4
|
+
"controls": "DebuggingTab-module__controls___FSDq2h7O",
|
|
5
|
+
"searchInput": "DebuggingTab-module__searchInput___LJOs-4Pm",
|
|
6
|
+
"feed": "DebuggingTab-module__feed___ejKHjTo0",
|
|
7
|
+
"section": "DebuggingTab-module__section___CgtHGruC",
|
|
8
|
+
"sectionHeader": "DebuggingTab-module__sectionHeader___H56cYd3e",
|
|
9
|
+
"sectionHeaderButton": "DebuggingTab-module__sectionHeaderButton___NWf0RkGp",
|
|
10
|
+
"sectionCount": "DebuggingTab-module__sectionCount___pchZP6lr",
|
|
11
|
+
"sectionChevron": "DebuggingTab-module__sectionChevron___Rj9ySUzo",
|
|
12
|
+
"errorSectionHeader": "DebuggingTab-module__errorSectionHeader___wWf763EV",
|
|
13
|
+
"clearLink": "DebuggingTab-module__clearLink___KL9ebJnm",
|
|
14
|
+
"emptyState": "DebuggingTab-module__emptyState___NiVnkESW",
|
|
15
|
+
"dt-shimmer": "DebuggingTab-module__dt-shimmer___rbOIdJxd",
|
|
16
|
+
"dt-fade-up": "DebuggingTab-module__dt-fade-up___PXaVGov7"
|
|
17
|
+
};
|
|
18
|
+
export default styles;
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { Button, Icon, Tag, Tooltip } from "@blueprintjs/core";
|
|
18
|
+
import classNames from "classnames";
|
|
19
|
+
import React, { useMemo } from "react";
|
|
20
|
+
import { useSharedTick } from "../hooks/useSharedTick.js";
|
|
21
|
+
import { formatRelativeTime } from "../utils/format.js";
|
|
22
|
+
import styles from "./HookRow.module.scss.js";
|
|
23
|
+
function getHookIcon(hookType) {
|
|
24
|
+
switch (hookType) {
|
|
25
|
+
case "useOsdkObject":
|
|
26
|
+
return "document";
|
|
27
|
+
case "useOsdkObjects":
|
|
28
|
+
return "properties";
|
|
29
|
+
case "useOsdkAction":
|
|
30
|
+
return "cog";
|
|
31
|
+
case "useLinks":
|
|
32
|
+
return "flows";
|
|
33
|
+
case "useObjectSet":
|
|
34
|
+
return "database";
|
|
35
|
+
default:
|
|
36
|
+
return "code";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function getHookColor(hookType) {
|
|
40
|
+
switch (hookType) {
|
|
41
|
+
case "useOsdkObject":
|
|
42
|
+
return styles.hookObject;
|
|
43
|
+
case "useOsdkObjects":
|
|
44
|
+
return styles.hookObjects;
|
|
45
|
+
case "useOsdkAction":
|
|
46
|
+
return styles.hookAction;
|
|
47
|
+
case "useLinks":
|
|
48
|
+
return styles.hookLinks;
|
|
49
|
+
case "useObjectSet":
|
|
50
|
+
return styles.hookObjectSet;
|
|
51
|
+
default:
|
|
52
|
+
return "";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function truncateSignature(sig, maxLength = 50) {
|
|
56
|
+
if (sig.length <= maxLength) {
|
|
57
|
+
return sig;
|
|
58
|
+
}
|
|
59
|
+
return `${sig.substring(0, maxLength)}...`;
|
|
60
|
+
}
|
|
61
|
+
export const HookRow = ({
|
|
62
|
+
binding,
|
|
63
|
+
formatTime = ms => `${ms.toFixed(1)}ms`,
|
|
64
|
+
monitorStore
|
|
65
|
+
}) => {
|
|
66
|
+
const tick = useSharedTick();
|
|
67
|
+
const status = useMemo(() => {
|
|
68
|
+
if (!monitorStore) {
|
|
69
|
+
return {
|
|
70
|
+
state: "idle",
|
|
71
|
+
lastUpdate: null,
|
|
72
|
+
age: null
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const timeline = monitorStore.getEventTimeline();
|
|
76
|
+
const lastEmission = timeline.getLastEmission(binding.subscriptionId);
|
|
77
|
+
if (lastEmission) {
|
|
78
|
+
const age = Date.now() - lastEmission.timestamp;
|
|
79
|
+
return {
|
|
80
|
+
state: age > 30000 ? "stale" : "success",
|
|
81
|
+
lastUpdate: lastEmission.timestamp,
|
|
82
|
+
age
|
|
83
|
+
};
|
|
84
|
+
} else if (binding.renderCount > 0) {
|
|
85
|
+
return {
|
|
86
|
+
state: "loading",
|
|
87
|
+
lastUpdate: null,
|
|
88
|
+
age: null
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
return {
|
|
92
|
+
state: "idle",
|
|
93
|
+
lastUpdate: null,
|
|
94
|
+
age: null
|
|
95
|
+
};
|
|
96
|
+
}, [tick, monitorStore, binding.subscriptionId, binding.renderCount]);
|
|
97
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
98
|
+
className: styles.hookRow
|
|
99
|
+
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
100
|
+
content: binding.hookType
|
|
101
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
102
|
+
className: classNames(styles.hookBadge, getHookColor(binding.hookType))
|
|
103
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
104
|
+
icon: getHookIcon(binding.hookType),
|
|
105
|
+
size: 12
|
|
106
|
+
}), /*#__PURE__*/React.createElement("span", {
|
|
107
|
+
className: styles.hookType
|
|
108
|
+
}, binding.hookType))), (() => {
|
|
109
|
+
if (!monitorStore) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
switch (status.state) {
|
|
113
|
+
case "loading":
|
|
114
|
+
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
115
|
+
content: "Loading data..."
|
|
116
|
+
}, /*#__PURE__*/React.createElement(Tag, {
|
|
117
|
+
minimal: true,
|
|
118
|
+
intent: "primary",
|
|
119
|
+
icon: "refresh",
|
|
120
|
+
className: styles.statusBadge
|
|
121
|
+
}, "Loading"));
|
|
122
|
+
case "success":
|
|
123
|
+
return status.lastUpdate != null ? /*#__PURE__*/React.createElement(Tooltip, {
|
|
124
|
+
content: `Last updated ${formatRelativeTime(status.lastUpdate)}`
|
|
125
|
+
}, /*#__PURE__*/React.createElement(Tag, {
|
|
126
|
+
minimal: true,
|
|
127
|
+
intent: "success",
|
|
128
|
+
icon: "tick",
|
|
129
|
+
className: styles.statusBadge
|
|
130
|
+
}, formatRelativeTime(status.lastUpdate))) : null;
|
|
131
|
+
case "stale":
|
|
132
|
+
return status.lastUpdate != null ? /*#__PURE__*/React.createElement(Tooltip, {
|
|
133
|
+
content: `Data is stale (${formatRelativeTime(status.lastUpdate)})`
|
|
134
|
+
}, /*#__PURE__*/React.createElement(Tag, {
|
|
135
|
+
minimal: true,
|
|
136
|
+
intent: "warning",
|
|
137
|
+
icon: "time",
|
|
138
|
+
className: styles.statusBadge
|
|
139
|
+
}, "Stale")) : null;
|
|
140
|
+
case "error":
|
|
141
|
+
return /*#__PURE__*/React.createElement(Tooltip, {
|
|
142
|
+
content: status.errorMessage || "Error loading data"
|
|
143
|
+
}, /*#__PURE__*/React.createElement(Tag, {
|
|
144
|
+
minimal: true,
|
|
145
|
+
intent: "danger",
|
|
146
|
+
icon: "error",
|
|
147
|
+
className: styles.statusBadge
|
|
148
|
+
}, "Error"));
|
|
149
|
+
case "idle":
|
|
150
|
+
default:
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
})(), /*#__PURE__*/React.createElement(Tooltip, {
|
|
154
|
+
content: binding.querySignature
|
|
155
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
156
|
+
className: styles.querySignature,
|
|
157
|
+
title: binding.querySignature.length > 50 ? binding.querySignature : undefined
|
|
158
|
+
}, truncateSignature(binding.querySignature))), binding.filePath && /*#__PURE__*/React.createElement(Tooltip, {
|
|
159
|
+
content: `${binding.filePath}:${binding.lineNumber}`
|
|
160
|
+
}, /*#__PURE__*/React.createElement(Button, {
|
|
161
|
+
variant: "minimal",
|
|
162
|
+
size: "small",
|
|
163
|
+
icon: "document",
|
|
164
|
+
className: styles.locationButton,
|
|
165
|
+
onClick: () => {
|
|
166
|
+
if (binding.filePath && binding.lineNumber) {
|
|
167
|
+
window.open(`vscode://file/${binding.filePath}:${binding.lineNumber}`);
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
text: `${binding.filePath.split("/").pop()}:${binding.lineNumber}`
|
|
171
|
+
})), binding.renderCount > 0 && /*#__PURE__*/React.createElement(Tooltip, {
|
|
172
|
+
content: `Renders: ${binding.renderCount}, Avg: ${formatTime(binding.avgRenderDuration)}`
|
|
173
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
174
|
+
className: styles.performance
|
|
175
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
176
|
+
icon: "time",
|
|
177
|
+
size: 10
|
|
178
|
+
}), /*#__PURE__*/React.createElement("span", null, formatTime(binding.avgRenderDuration)))));
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=HookRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HookRow.js","names":["Button","Icon","Tag","Tooltip","classNames","React","useMemo","useSharedTick","formatRelativeTime","styles","getHookIcon","hookType","getHookColor","hookObject","hookObjects","hookAction","hookLinks","hookObjectSet","truncateSignature","sig","maxLength","length","substring","HookRow","binding","formatTime","ms","toFixed","monitorStore","tick","status","state","lastUpdate","age","timeline","getEventTimeline","lastEmission","getLastEmission","subscriptionId","Date","now","timestamp","renderCount","createElement","className","hookRow","content","hookBadge","icon","size","minimal","intent","statusBadge","errorMessage","querySignature","title","undefined","filePath","lineNumber","variant","locationButton","onClick","window","open","text","split","pop","avgRenderDuration","performance"],"sources":["HookRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Icon, Tag, Tooltip } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useMemo } from \"react\";\nimport { useSharedTick } from \"../hooks/useSharedTick.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { ComponentHookBinding } from \"../utils/ComponentQueryRegistry.js\";\nimport { formatRelativeTime } from \"../utils/format.js\";\nimport styles from \"./HookRow.module.scss\";\n\nfunction getHookIcon(hookType: string) {\n switch (hookType) {\n case \"useOsdkObject\":\n return \"document\";\n case \"useOsdkObjects\":\n return \"properties\";\n case \"useOsdkAction\":\n return \"cog\";\n case \"useLinks\":\n return \"flows\";\n case \"useObjectSet\":\n return \"database\";\n default:\n return \"code\";\n }\n}\n\nfunction getHookColor(hookType: string) {\n switch (hookType) {\n case \"useOsdkObject\":\n return styles.hookObject;\n case \"useOsdkObjects\":\n return styles.hookObjects;\n case \"useOsdkAction\":\n return styles.hookAction;\n case \"useLinks\":\n return styles.hookLinks;\n case \"useObjectSet\":\n return styles.hookObjectSet;\n default:\n return \"\";\n }\n}\n\nfunction truncateSignature(sig: string, maxLength: number = 50) {\n if (sig.length <= maxLength) {\n return sig;\n }\n return `${sig.substring(0, maxLength)}...`;\n}\n\nexport interface HookRowProps {\n binding: ComponentHookBinding;\n formatTime?: (ms: number) => string;\n monitorStore?: MonitorStore;\n}\n\ninterface HookStatus {\n state: \"idle\" | \"loading\" | \"success\" | \"error\" | \"stale\";\n lastUpdate: number | null;\n age: number | null;\n errorMessage?: string;\n}\n\nexport const HookRow: React.FC<HookRowProps> = ({\n binding,\n formatTime = (ms) => `${ms.toFixed(1)}ms`,\n monitorStore,\n}) => {\n const tick = useSharedTick();\n\n const status = useMemo((): HookStatus => {\n if (!monitorStore) {\n return { state: \"idle\", lastUpdate: null, age: null };\n }\n\n const timeline = monitorStore.getEventTimeline();\n const lastEmission = timeline.getLastEmission(binding.subscriptionId);\n\n if (lastEmission) {\n const age = Date.now() - lastEmission.timestamp;\n const isStale = age > 30000;\n\n return {\n state: isStale ? \"stale\" : \"success\",\n lastUpdate: lastEmission.timestamp,\n age,\n };\n } else if (binding.renderCount > 0) {\n return { state: \"loading\", lastUpdate: null, age: null };\n }\n\n return { state: \"idle\", lastUpdate: null, age: null };\n }, [tick, monitorStore, binding.subscriptionId, binding.renderCount]);\n\n const handleClickLocation = () => {\n if (binding.filePath && binding.lineNumber) {\n window.open(`vscode://file/${binding.filePath}:${binding.lineNumber}`);\n }\n };\n\n const getStatusBadge = () => {\n if (!monitorStore) {\n return null;\n }\n\n switch (status.state) {\n case \"loading\":\n return (\n <Tooltip content=\"Loading data...\">\n <Tag\n minimal\n intent=\"primary\"\n icon=\"refresh\"\n className={styles.statusBadge}\n >\n Loading\n </Tag>\n </Tooltip>\n );\n case \"success\":\n return status.lastUpdate != null\n ? (\n <Tooltip\n content={`Last updated ${formatRelativeTime(status.lastUpdate)}`}\n >\n <Tag\n minimal\n intent=\"success\"\n icon=\"tick\"\n className={styles.statusBadge}\n >\n {formatRelativeTime(status.lastUpdate)}\n </Tag>\n </Tooltip>\n )\n : null;\n case \"stale\":\n return status.lastUpdate != null\n ? (\n <Tooltip\n content={`Data is stale (${\n formatRelativeTime(status.lastUpdate)\n })`}\n >\n <Tag\n minimal\n intent=\"warning\"\n icon=\"time\"\n className={styles.statusBadge}\n >\n Stale\n </Tag>\n </Tooltip>\n )\n : null;\n case \"error\":\n return (\n <Tooltip content={status.errorMessage || \"Error loading data\"}>\n <Tag\n minimal\n intent=\"danger\"\n icon=\"error\"\n className={styles.statusBadge}\n >\n Error\n </Tag>\n </Tooltip>\n );\n case \"idle\":\n default:\n return null;\n }\n };\n\n return (\n <div className={styles.hookRow}>\n <Tooltip content={binding.hookType}>\n <div\n className={classNames(\n styles.hookBadge,\n getHookColor(binding.hookType),\n )}\n >\n <Icon icon={getHookIcon(binding.hookType)} size={12} />\n <span className={styles.hookType}>{binding.hookType}</span>\n </div>\n </Tooltip>\n\n {getStatusBadge()}\n\n <Tooltip content={binding.querySignature}>\n <div\n className={styles.querySignature}\n title={binding.querySignature.length > 50\n ? binding.querySignature\n : undefined}\n >\n {truncateSignature(binding.querySignature)}\n </div>\n </Tooltip>\n\n {binding.filePath && (\n <Tooltip\n content={`${binding.filePath}:${binding.lineNumber}`}\n >\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"document\"\n className={styles.locationButton}\n onClick={handleClickLocation}\n text={`${binding.filePath.split(\"/\").pop()}:${binding.lineNumber}`}\n />\n </Tooltip>\n )}\n\n {binding.renderCount > 0 && (\n <Tooltip\n content={`Renders: ${binding.renderCount}, Avg: ${\n formatTime(binding.avgRenderDuration)\n }`}\n >\n <div className={styles.performance}>\n <Icon icon=\"time\" size={10} />\n <span>{formatTime(binding.avgRenderDuration)}</span>\n </div>\n </Tooltip>\n )}\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// AUTO-GENERATED by scripts/build-css.mjs. Do not edit by hand.
|
|
2
|
+
const styles = {
|
|
3
|
+
"hookRow": "HookRow-module__hookRow___2I-kD1-1",
|
|
4
|
+
"hookBadge": "HookRow-module__hookBadge___5kavu6Rr",
|
|
5
|
+
"hookType": "HookRow-module__hookType___qCvzC-Ye",
|
|
6
|
+
"hookObject": "HookRow-module__hookObject___TXOBgo-Q",
|
|
7
|
+
"hookObjects": "HookRow-module__hookObjects___l0fbfAA1",
|
|
8
|
+
"hookAction": "HookRow-module__hookAction___r79eU47q",
|
|
9
|
+
"hookLinks": "HookRow-module__hookLinks___8hVV76BO",
|
|
10
|
+
"hookObjectSet": "HookRow-module__hookObjectSet___t9UvLDGN",
|
|
11
|
+
"querySignature": "HookRow-module__querySignature___3Rmejvwq",
|
|
12
|
+
"locationButton": "HookRow-module__locationButton___rffrHF10",
|
|
13
|
+
"performance": "HookRow-module__performance___3PcDvBAk",
|
|
14
|
+
"statusBadge": "HookRow-module__statusBadge___YUOvlp5G"
|
|
15
|
+
};
|
|
16
|
+
export default styles;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { Button, Code, Collapse, Icon } from "@blueprintjs/core";
|
|
18
|
+
import classNames from "classnames";
|
|
19
|
+
import React, { useState } from "react";
|
|
20
|
+
import { useRecommendations } from "../hooks/useRecommendations.js";
|
|
21
|
+
import styles from "./ImprovementsTab.module.scss.js";
|
|
22
|
+
export const ImprovementsTab = ({
|
|
23
|
+
monitorStore
|
|
24
|
+
}) => {
|
|
25
|
+
const {
|
|
26
|
+
recommendations,
|
|
27
|
+
isLoading,
|
|
28
|
+
dismiss,
|
|
29
|
+
refresh
|
|
30
|
+
} = useRecommendations(monitorStore);
|
|
31
|
+
const [expandedIds, setExpandedIds] = useState(new Set());
|
|
32
|
+
const toggleExpanded = id => {
|
|
33
|
+
setExpandedIds(prev => {
|
|
34
|
+
const next = new Set(prev);
|
|
35
|
+
if (next.has(id)) {
|
|
36
|
+
next.delete(id);
|
|
37
|
+
} else {
|
|
38
|
+
next.add(id);
|
|
39
|
+
}
|
|
40
|
+
return next;
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
const levelIcon = level => {
|
|
44
|
+
switch (level) {
|
|
45
|
+
case "critical":
|
|
46
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
47
|
+
icon: "error",
|
|
48
|
+
intent: "danger",
|
|
49
|
+
size: 14
|
|
50
|
+
});
|
|
51
|
+
case "high":
|
|
52
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
53
|
+
icon: "warning-sign",
|
|
54
|
+
intent: "warning",
|
|
55
|
+
size: 14
|
|
56
|
+
});
|
|
57
|
+
case "medium":
|
|
58
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
59
|
+
icon: "lightbulb",
|
|
60
|
+
intent: "primary",
|
|
61
|
+
size: 14
|
|
62
|
+
});
|
|
63
|
+
case "low":
|
|
64
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
65
|
+
icon: "info-sign",
|
|
66
|
+
intent: "primary",
|
|
67
|
+
size: 14
|
|
68
|
+
});
|
|
69
|
+
default:
|
|
70
|
+
return /*#__PURE__*/React.createElement(Icon, {
|
|
71
|
+
icon: "dot",
|
|
72
|
+
size: 14
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
77
|
+
className: styles.improvementsTab
|
|
78
|
+
}, isLoading && recommendations.length === 0 ? /*#__PURE__*/React.createElement("div", {
|
|
79
|
+
className: styles.emptyState
|
|
80
|
+
}, "Analyzing...") : recommendations.length === 0 ? /*#__PURE__*/React.createElement("div", {
|
|
81
|
+
className: styles.emptyState
|
|
82
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
83
|
+
className: styles.emptyIcon
|
|
84
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
85
|
+
icon: "tick-circle",
|
|
86
|
+
intent: "success",
|
|
87
|
+
size: 32
|
|
88
|
+
})), /*#__PURE__*/React.createElement("div", null, "No improvements found"), /*#__PURE__*/React.createElement("div", {
|
|
89
|
+
className: styles.emptySubtext
|
|
90
|
+
}, "Your app is looking good!")) : null, recommendations.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
91
|
+
className: styles.improvementsHeader
|
|
92
|
+
}, /*#__PURE__*/React.createElement("span", null, recommendations.length, " potential improvement", recommendations.length !== 1 ? "s" : ""), /*#__PURE__*/React.createElement(Button, {
|
|
93
|
+
size: "small",
|
|
94
|
+
variant: "minimal",
|
|
95
|
+
icon: "refresh",
|
|
96
|
+
onClick: refresh
|
|
97
|
+
}, "Refresh")), /*#__PURE__*/React.createElement("div", {
|
|
98
|
+
className: styles.improvementsList
|
|
99
|
+
}, recommendations.map((rec, index) => /*#__PURE__*/React.createElement("div", {
|
|
100
|
+
key: rec.id,
|
|
101
|
+
className: styles.improvementCard,
|
|
102
|
+
style: {
|
|
103
|
+
"--entrance-index": index
|
|
104
|
+
}
|
|
105
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
106
|
+
className: styles.improvementHeader,
|
|
107
|
+
onClick: () => toggleExpanded(rec.id)
|
|
108
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
109
|
+
className: styles.improvementIcon
|
|
110
|
+
}, levelIcon(rec.level)), /*#__PURE__*/React.createElement("span", {
|
|
111
|
+
className: classNames(styles.improvementLevel, styles[`level-${rec.level}`])
|
|
112
|
+
}, rec.level.toUpperCase()), /*#__PURE__*/React.createElement("span", {
|
|
113
|
+
className: styles.improvementCategory
|
|
114
|
+
}, rec.category), /*#__PURE__*/React.createElement("span", {
|
|
115
|
+
className: styles.improvementTitle
|
|
116
|
+
}, rec.title)), /*#__PURE__*/React.createElement("div", {
|
|
117
|
+
className: styles.improvementSummary
|
|
118
|
+
}, rec.suggestion), rec.code && /*#__PURE__*/React.createElement(Collapse, {
|
|
119
|
+
isOpen: expandedIds.has(rec.id)
|
|
120
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
121
|
+
className: styles.improvementDetails
|
|
122
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
123
|
+
className: styles.codeSection
|
|
124
|
+
}, /*#__PURE__*/React.createElement(Code, {
|
|
125
|
+
className: styles.codeBlock
|
|
126
|
+
}, rec.code)))), /*#__PURE__*/React.createElement("div", {
|
|
127
|
+
className: styles.improvementActions
|
|
128
|
+
}, rec.code && /*#__PURE__*/React.createElement(Button, {
|
|
129
|
+
size: "small",
|
|
130
|
+
variant: "minimal",
|
|
131
|
+
onClick: () => toggleExpanded(rec.id)
|
|
132
|
+
}, expandedIds.has(rec.id) ? "Hide Code" : "Show Code"), rec.dismissible && /*#__PURE__*/React.createElement(Button, {
|
|
133
|
+
size: "small",
|
|
134
|
+
variant: "minimal",
|
|
135
|
+
onClick: () => dismiss(rec.id)
|
|
136
|
+
}, "Dismiss")))))));
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=ImprovementsTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImprovementsTab.js","names":["Button","Code","Collapse","Icon","classNames","React","useState","useRecommendations","styles","ImprovementsTab","monitorStore","recommendations","isLoading","dismiss","refresh","expandedIds","setExpandedIds","Set","toggleExpanded","id","prev","next","has","delete","add","levelIcon","level","createElement","icon","intent","size","className","improvementsTab","length","emptyState","emptyIcon","emptySubtext","Fragment","improvementsHeader","variant","onClick","improvementsList","map","rec","index","key","improvementCard","style","improvementHeader","improvementIcon","improvementLevel","toUpperCase","improvementCategory","category","improvementTitle","title","improvementSummary","suggestion","code","isOpen","improvementDetails","codeSection","codeBlock","improvementActions","dismissible"],"sources":["ImprovementsTab.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Code, Collapse, Icon } from \"@blueprintjs/core\";\nimport classNames from \"classnames\";\nimport React, { useState } from \"react\";\nimport { useRecommendations } from \"../hooks/useRecommendations.js\";\nimport type { MonitorStore } from \"../store/MonitorStore.js\";\nimport type { Recommendation } from \"../utils/PerformanceRecommendationEngine.js\";\nimport styles from \"./ImprovementsTab.module.scss\";\n\ninterface ImprovementsTabProps {\n monitorStore: MonitorStore;\n}\n\nexport const ImprovementsTab: React.FC<ImprovementsTabProps> = (\n { monitorStore },\n) => {\n const { recommendations, isLoading, dismiss, refresh } = useRecommendations(\n monitorStore,\n );\n const [expandedIds, setExpandedIds] = useState<Set<string>>(new Set());\n\n const toggleExpanded = (id: string) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n };\n\n const levelIcon = (level: Recommendation[\"level\"]): React.ReactNode => {\n switch (level) {\n case \"critical\":\n return <Icon icon=\"error\" intent=\"danger\" size={14} />;\n case \"high\":\n return <Icon icon=\"warning-sign\" intent=\"warning\" size={14} />;\n case \"medium\":\n return <Icon icon=\"lightbulb\" intent=\"primary\" size={14} />;\n case \"low\":\n return <Icon icon=\"info-sign\" intent=\"primary\" size={14} />;\n default:\n return <Icon icon=\"dot\" size={14} />;\n }\n };\n\n return (\n <div className={styles.improvementsTab}>\n {isLoading && recommendations.length === 0\n ? <div className={styles.emptyState}>Analyzing...</div>\n : recommendations.length === 0\n ? (\n <div className={styles.emptyState}>\n <div className={styles.emptyIcon}>\n <Icon icon=\"tick-circle\" intent=\"success\" size={32} />\n </div>\n <div>No improvements found</div>\n <div className={styles.emptySubtext}>\n Your app is looking good!\n </div>\n </div>\n )\n : null}\n\n {recommendations.length > 0 && (\n <>\n <div className={styles.improvementsHeader}>\n <span>\n {recommendations.length} potential improvement\n {recommendations.length !== 1 ? \"s\" : \"\"}\n </span>\n <Button\n size=\"small\"\n variant=\"minimal\"\n icon=\"refresh\"\n onClick={refresh}\n >\n Refresh\n </Button>\n </div>\n\n <div className={styles.improvementsList}>\n {recommendations.map((rec, index) => (\n <div\n key={rec.id}\n className={styles.improvementCard}\n style={{ \"--entrance-index\": index } as React.CSSProperties}\n >\n <div\n className={styles.improvementHeader}\n onClick={() => toggleExpanded(rec.id)}\n >\n <span className={styles.improvementIcon}>\n {levelIcon(rec.level)}\n </span>\n <span\n className={classNames(\n styles.improvementLevel,\n styles[`level-${rec.level}`],\n )}\n >\n {rec.level.toUpperCase()}\n </span>\n <span className={styles.improvementCategory}>\n {rec.category}\n </span>\n <span className={styles.improvementTitle}>{rec.title}</span>\n </div>\n\n <div className={styles.improvementSummary}>\n {rec.suggestion}\n </div>\n\n {rec.code && (\n <Collapse isOpen={expandedIds.has(rec.id)}>\n <div className={styles.improvementDetails}>\n <div className={styles.codeSection}>\n <Code className={styles.codeBlock}>{rec.code}</Code>\n </div>\n </div>\n </Collapse>\n )}\n\n <div className={styles.improvementActions}>\n {rec.code && (\n <Button\n size=\"small\"\n variant=\"minimal\"\n onClick={() => toggleExpanded(rec.id)}\n >\n {expandedIds.has(rec.id) ? \"Hide Code\" : \"Show Code\"}\n </Button>\n )}\n {rec.dismissible && (\n <Button\n size=\"small\"\n variant=\"minimal\"\n onClick={() => dismiss(rec.id)}\n >\n Dismiss\n </Button>\n )}\n </div>\n </div>\n ))}\n </div>\n </>\n )}\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// AUTO-GENERATED by scripts/build-css.mjs. Do not edit by hand.
|
|
2
|
+
const styles = {
|
|
3
|
+
"emptyState": "ImprovementsTab-module__emptyState___OtA9ww7c",
|
|
4
|
+
"emptyIcon": "ImprovementsTab-module__emptyIcon___vsuoq89k",
|
|
5
|
+
"emptySubtext": "ImprovementsTab-module__emptySubtext___gM82KiG8",
|
|
6
|
+
"improvementsTab": "ImprovementsTab-module__improvementsTab___Bz17w-mI",
|
|
7
|
+
"improvementsHeader": "ImprovementsTab-module__improvementsHeader___71b2336h",
|
|
8
|
+
"improvementsList": "ImprovementsTab-module__improvementsList___3kLjVKom",
|
|
9
|
+
"improvementCard": "ImprovementsTab-module__improvementCard___1PlSmmu5",
|
|
10
|
+
"dt-fade-up": "ImprovementsTab-module__dt-fade-up___kHLUfGv3",
|
|
11
|
+
"improvementHeader": "ImprovementsTab-module__improvementHeader___7zAujA9O",
|
|
12
|
+
"improvementIcon": "ImprovementsTab-module__improvementIcon___r8ebpKlp",
|
|
13
|
+
"improvementLevel": "ImprovementsTab-module__improvementLevel___xK9eX-nB",
|
|
14
|
+
"level-critical": "ImprovementsTab-module__level-critical___25Y81Qtb",
|
|
15
|
+
"level-high": "ImprovementsTab-module__level-high___S2uXkBSl",
|
|
16
|
+
"level-medium": "ImprovementsTab-module__level-medium___iDI9ZUoo",
|
|
17
|
+
"level-low": "ImprovementsTab-module__level-low___Inz3m2RA",
|
|
18
|
+
"improvementCategory": "ImprovementsTab-module__improvementCategory___BYY7vSyD",
|
|
19
|
+
"improvementTitle": "ImprovementsTab-module__improvementTitle___ZSHJyBzk",
|
|
20
|
+
"improvementSummary": "ImprovementsTab-module__improvementSummary___6sI2T6kN",
|
|
21
|
+
"improvementDetails": "ImprovementsTab-module__improvementDetails___Zm5VzWB9",
|
|
22
|
+
"detailRow": "ImprovementsTab-module__detailRow___g-UdJBus",
|
|
23
|
+
"detailLabel": "ImprovementsTab-module__detailLabel___FpEao9nT",
|
|
24
|
+
"detailValue": "ImprovementsTab-module__detailValue___h1ffYlgA",
|
|
25
|
+
"codeSection": "ImprovementsTab-module__codeSection___dkXDoCoo",
|
|
26
|
+
"codeBlock": "ImprovementsTab-module__codeBlock___gZupdfQD",
|
|
27
|
+
"improvementActions": "ImprovementsTab-module__improvementActions___Nuok-p58",
|
|
28
|
+
"dt-shimmer": "ImprovementsTab-module__dt-shimmer___pfcVot2P"
|
|
29
|
+
};
|
|
30
|
+
export default styles;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2025 Palantir Technologies, Inc. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { Button, Callout, Icon, Tooltip } from "@blueprintjs/core";
|
|
18
|
+
import React from "react";
|
|
19
|
+
import styles from "./InterceptTab.module.scss.js";
|
|
20
|
+
export const InspectorSelectionHeader = ({
|
|
21
|
+
error,
|
|
22
|
+
onDismissError,
|
|
23
|
+
isSelectionActive,
|
|
24
|
+
onActivateSelection,
|
|
25
|
+
infoText,
|
|
26
|
+
activeWarningText,
|
|
27
|
+
buttonLabel,
|
|
28
|
+
showHelpTooltip
|
|
29
|
+
}) => {
|
|
30
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
31
|
+
className: styles.header
|
|
32
|
+
}, error && /*#__PURE__*/React.createElement(Callout, {
|
|
33
|
+
intent: "danger",
|
|
34
|
+
icon: "error",
|
|
35
|
+
className: styles.error
|
|
36
|
+
}, error, /*#__PURE__*/React.createElement(Button, {
|
|
37
|
+
variant: "minimal",
|
|
38
|
+
size: "small",
|
|
39
|
+
icon: "cross",
|
|
40
|
+
"aria-label": "Dismiss error",
|
|
41
|
+
onClick: onDismissError,
|
|
42
|
+
className: styles.dismissButton
|
|
43
|
+
})), /*#__PURE__*/React.createElement(Callout, {
|
|
44
|
+
intent: "primary",
|
|
45
|
+
icon: "info-sign",
|
|
46
|
+
className: styles.info
|
|
47
|
+
}, infoText, showHelpTooltip && /*#__PURE__*/React.createElement(React.Fragment, null, " ", /*#__PURE__*/React.createElement(Tooltip, {
|
|
48
|
+
content: "If you're unable to find OSDK usage where you expect try hovering over a related component"
|
|
49
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
50
|
+
icon: "info-sign",
|
|
51
|
+
size: 12,
|
|
52
|
+
className: styles.helpIcon
|
|
53
|
+
})))), /*#__PURE__*/React.createElement(Button, {
|
|
54
|
+
size: "large",
|
|
55
|
+
intent: isSelectionActive ? "warning" : "primary",
|
|
56
|
+
icon: "style",
|
|
57
|
+
onClick: onActivateSelection,
|
|
58
|
+
disabled: isSelectionActive,
|
|
59
|
+
className: styles.activateButton
|
|
60
|
+
}, isSelectionActive ? "Selection Mode Active" : buttonLabel), isSelectionActive && /*#__PURE__*/React.createElement(Callout, {
|
|
61
|
+
intent: "warning",
|
|
62
|
+
icon: "hand"
|
|
63
|
+
}, activeWarningText, " Press ", /*#__PURE__*/React.createElement("kbd", null, "Esc"), " to cancel."));
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=InspectorSelectionHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InspectorSelectionHeader.js","names":["Button","Callout","Icon","Tooltip","React","styles","InspectorSelectionHeader","error","onDismissError","isSelectionActive","onActivateSelection","infoText","activeWarningText","buttonLabel","showHelpTooltip","createElement","className","header","intent","icon","variant","size","onClick","dismissButton","info","Fragment","content","helpIcon","disabled","activateButton"],"sources":["InspectorSelectionHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, Callout, Icon, Tooltip } from \"@blueprintjs/core\";\nimport React from \"react\";\nimport styles from \"./InterceptTab.module.scss\";\n\nexport interface InspectorSelectionHeaderProps {\n error: string | null;\n onDismissError: () => void;\n isSelectionActive: boolean;\n onActivateSelection: () => void;\n infoText: React.ReactNode;\n activeWarningText: string;\n buttonLabel: string;\n showHelpTooltip?: boolean;\n}\n\nexport const InspectorSelectionHeader: React.FC<\n InspectorSelectionHeaderProps\n> = ({\n error,\n onDismissError,\n isSelectionActive,\n onActivateSelection,\n infoText,\n activeWarningText,\n buttonLabel,\n showHelpTooltip,\n}) => {\n return (\n <div className={styles.header}>\n {error && (\n <Callout intent=\"danger\" icon=\"error\" className={styles.error}>\n {error}\n <Button\n variant=\"minimal\"\n size=\"small\"\n icon=\"cross\"\n aria-label=\"Dismiss error\"\n onClick={onDismissError}\n className={styles.dismissButton}\n />\n </Callout>\n )}\n\n <Callout intent=\"primary\" icon=\"info-sign\" className={styles.info}>\n {infoText}\n {showHelpTooltip && (\n <>\n {\" \"}\n <Tooltip content=\"If you're unable to find OSDK usage where you expect try hovering over a related component\">\n <Icon\n icon=\"info-sign\"\n size={12}\n className={styles.helpIcon}\n />\n </Tooltip>\n </>\n )}\n </Callout>\n\n <Button\n size=\"large\"\n intent={isSelectionActive ? \"warning\" : \"primary\"}\n icon=\"style\"\n onClick={onActivateSelection}\n disabled={isSelectionActive}\n className={styles.activateButton}\n >\n {isSelectionActive ? \"Selection Mode Active\" : buttonLabel}\n </Button>\n\n {isSelectionActive && (\n <Callout intent=\"warning\" icon=\"hand\">\n {activeWarningText} Press <kbd>Esc</kbd> to cancel.\n </Callout>\n )}\n </div>\n );\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAEC,OAAO,QAAQ,mBAAmB;AAClE,OAAOC,KAAK,MAAM,OAAO;AACzB,OAAOC,MAAM,MAAM,4BAA4B;AAa/C,OAAO,MAAMC,wBAEZ,GAAGA,CAAC;EACHC,KAAK;EACLC,cAAc;EACdC,iBAAiB;EACjBC,mBAAmB;EACnBC,QAAQ;EACRC,iBAAiB;EACjBC,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,oBACEV,KAAA,CAAAW,aAAA;IAAKC,SAAS,EAAEX,MAAM,CAACY;EAAO,GAC3BV,KAAK,iBACJH,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,QAAQ;IAACC,IAAI,EAAC,OAAO;IAACH,SAAS,EAAEX,MAAM,CAACE;EAAM,GAC3DA,KAAK,eACNH,KAAA,CAAAW,aAAA,CAACf,MAAM;IACLoB,OAAO,EAAC,SAAS;IACjBC,IAAI,EAAC,OAAO;IACZF,IAAI,EAAC,OAAO;IACZ,cAAW,eAAe;IAC1BG,OAAO,EAAEd,cAAe;IACxBQ,SAAS,EAAEX,MAAM,CAACkB;EAAc,CACjC,CACM,CACV,eAEDnB,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,SAAS;IAACC,IAAI,EAAC,WAAW;IAACH,SAAS,EAAEX,MAAM,CAACmB;EAAK,GAC/Db,QAAQ,EACRG,eAAe,iBACdV,KAAA,CAAAW,aAAA,CAAAX,KAAA,CAAAqB,QAAA,QACG,GAAG,eACJrB,KAAA,CAAAW,aAAA,CAACZ,OAAO;IAACuB,OAAO,EAAC;EAA4F,gBAC3GtB,KAAA,CAAAW,aAAA,CAACb,IAAI;IACHiB,IAAI,EAAC,WAAW;IAChBE,IAAI,EAAE,EAAG;IACTL,SAAS,EAAEX,MAAM,CAACsB;EAAS,CAC5B,CACM,CACT,CAEG,CAAC,eAEVvB,KAAA,CAAAW,aAAA,CAACf,MAAM;IACLqB,IAAI,EAAC,OAAO;IACZH,MAAM,EAAET,iBAAiB,GAAG,SAAS,GAAG,SAAU;IAClDU,IAAI,EAAC,OAAO;IACZG,OAAO,EAAEZ,mBAAoB;IAC7BkB,QAAQ,EAAEnB,iBAAkB;IAC5BO,SAAS,EAAEX,MAAM,CAACwB;EAAe,GAEhCpB,iBAAiB,GAAG,uBAAuB,GAAGI,WACzC,CAAC,EAERJ,iBAAiB,iBAChBL,KAAA,CAAAW,aAAA,CAACd,OAAO;IAACiB,MAAM,EAAC,SAAS;IAACC,IAAI,EAAC;EAAM,GAClCP,iBAAiB,EAAC,SAAO,eAAAR,KAAA,CAAAW,aAAA,cAAK,KAAQ,CAAC,eACjC,CAER,CAAC;AAEV,CAAC","ignoreList":[]}
|