@oneuptime/common 14.0.8 → 14.0.9
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/Models/DatabaseModels/Index.ts +2 -0
- package/Models/DatabaseModels/KubernetesAiAgent.ts +364 -0
- package/Models/DatabaseModels/KubernetesCluster.ts +3 -3
- package/Models/DatabaseModels/Project.ts +55 -5
- package/Models/DatabaseModels/ProxmoxResource.ts +49 -1
- package/Models/DatabaseModels/RunnerJob.ts +75 -0
- package/Models/DatabaseModels/TeamComplianceSetting.ts +143 -2
- package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +17 -0
- package/Server/API/AIChatAPI.ts +6 -3
- package/Server/API/AIInvestigationAPI.ts +17 -10
- package/Server/API/AutoRemediationAPI.ts +207 -25
- package/Server/API/KubernetesClusterAiAccessAPI.ts +623 -21
- package/Server/API/MicrosoftTeamsAPI.ts +93 -14
- package/Server/API/ProxmoxResourceAPI.ts +244 -14
- package/Server/Infrastructure/GlobalCache.ts +32 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.ts +99 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.ts +137 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.ts +42 -0
- package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
- package/Server/Middleware/TelemetryIngest.ts +41 -18
- package/Server/Services/AIService.ts +70 -1
- package/Server/Services/AlertService.ts +352 -11
- package/Server/Services/AlertSeverityService.ts +65 -15
- package/Server/Services/AutoRemediationRuleService.ts +1 -1
- package/Server/Services/IncidentService.ts +280 -104
- package/Server/Services/IncidentSeverityService.ts +66 -15
- package/Server/Services/KubernetesAiAgentJobService.ts +185 -0
- package/Server/Services/KubernetesAiAgentService.ts +1634 -0
- package/Server/Services/KubernetesClusterAiAccessService.ts +1118 -451
- package/Server/Services/KubernetesClusterService.ts +129 -21
- package/Server/Services/ProjectService.ts +32 -0
- package/Server/Services/ProxmoxResourceService.ts +322 -5
- package/Server/Services/RunnerJobService.ts +241 -104
- package/Server/Services/RunnerService.ts +1 -1
- package/Server/Services/ScheduledMaintenanceService.ts +737 -1
- package/Server/Services/ScheduledMaintenanceStateTimelineService.ts +414 -56
- package/Server/Services/TeamComplianceSettingService.ts +1125 -9
- package/Server/Utils/AI/ClusterAccess/ClusterAccessContext.ts +67 -9
- package/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.ts +39 -10
- package/Server/Utils/AI/ClusterAccess/KubectlJobRunner.ts +14 -3
- package/Server/Utils/AI/Remediation/RemediationCommandTools.ts +37 -15
- package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +67 -24
- package/Server/Utils/AI/SRE/AIInvestigationEngine.ts +48 -5
- package/Server/Utils/AI/SRE/IncidentPostmortemRunner.ts +40 -8
- package/Server/Utils/AI/SRE/InvestigationEligibility.ts +13 -2
- package/Server/Utils/AI/SRE/InvestigationGrader.ts +1 -1
- package/Server/Utils/AutoRemediation/CommandPlanExecutor.ts +6 -1
- package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +133 -7
- package/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.ts +58 -4
- package/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.ts +447 -0
- package/Server/Utils/Telemetry/ProxmoxNativePush.ts +903 -0
- package/Server/Utils/Telemetry/TelemetryEntity.ts +87 -27
- package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +684 -47
- package/Tests/App/AdminDashboard/RowActionPlacementOverrides.test.tsx +278 -0
- package/Tests/App/Dashboard/AIChatChartWidgetZoom.test.tsx +738 -0
- package/Tests/App/Dashboard/AIFeaturesSettingsPointers.test.tsx +147 -0
- package/Tests/App/Dashboard/AIInsightsKubernetesClusterPage.test.tsx +1523 -0
- package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +463 -3
- package/Tests/App/Dashboard/AffectedResourcesPickerDropdownPlacement.test.tsx +958 -0
- package/Tests/App/Dashboard/AffectedResourcesPickerFocusLeave.test.tsx +595 -0
- package/Tests/App/Dashboard/AskAiAvailability.test.ts +20 -3
- package/Tests/App/Dashboard/AskAiDisabled.test.tsx +8 -3
- package/Tests/App/Dashboard/CephRateChartReload.test.tsx +1456 -0
- package/Tests/App/Dashboard/CephTimeRangeZoom.test.tsx +1229 -0
- package/Tests/App/Dashboard/ChartCardTimeRangeZoom.test.tsx +151 -0
- package/Tests/App/Dashboard/ChartCardZoomAffordances.test.tsx +257 -0
- package/Tests/App/Dashboard/ChartRefetchFrame.test.tsx +141 -0
- package/Tests/App/Dashboard/ChartZoomHarness.tsx +249 -0
- package/Tests/App/Dashboard/ChartZoomStandIn.tsx +131 -0
- package/Tests/App/Dashboard/CloudServerlessSlowLoads.test.tsx +628 -0
- package/Tests/App/Dashboard/CloudServerlessTimeRangeZoom.test.tsx +607 -0
- package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +91 -19
- package/Tests/App/Dashboard/CompanionMetricsTabZoom.test.tsx +632 -0
- package/Tests/App/Dashboard/ContainerChartZoomStandIn.tsx +195 -0
- package/Tests/App/Dashboard/ContainerHostOverviewSlowLoads.test.tsx +542 -0
- package/Tests/App/Dashboard/ContainerHostOverviewTimeRangeZoom.test.tsx +848 -0
- package/Tests/App/Dashboard/ContainerMetricsTimeRangeZoom.test.tsx +561 -0
- package/Tests/App/Dashboard/DashboardBoardWideZoomShell.test.tsx +1147 -0
- package/Tests/App/Dashboard/DashboardEditPermissions.test.tsx +3 -2
- package/Tests/App/Dashboard/DashboardHistogramWidgetDragCursor.test.tsx +399 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoom.test.tsx +985 -0
- package/Tests/App/Dashboard/DashboardHistogramWidgetZoomHint.test.tsx +803 -0
- package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +1 -0
- package/Tests/App/Dashboard/DashboardSettingsPreviewZoom.test.tsx +679 -0
- package/Tests/App/Dashboard/DashboardSloAndDataSourceChartZoom.test.tsx +881 -0
- package/Tests/App/Dashboard/DashboardTraceStatusWidgets.test.tsx +878 -0
- package/Tests/App/Dashboard/DatabaseMetricChartModalTimeRangeZoom.test.tsx +442 -0
- package/Tests/App/Dashboard/DatabaseOverviewTimeRangeZoom.test.tsx +831 -0
- package/Tests/App/Dashboard/DatabaseServerComponents.test.tsx +43 -0
- package/Tests/App/Dashboard/DockerSwarmInsightsTimeRangeZoom.test.tsx +524 -0
- package/Tests/App/Dashboard/DockerSwarmRateChartRefresh.test.tsx +259 -0
- package/Tests/App/Dashboard/EdgeDetailPanelHistory.test.tsx +763 -0
- package/Tests/App/Dashboard/EdgeDetailPanelTimeRangeZoom.test.tsx +547 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsCases.tsx +565 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKathmandu.test.tsx +73 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsKolkata.test.tsx +74 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsNewYork.test.tsx +72 -0
- package/Tests/App/Dashboard/EdgeHistoryBucketsUtc.test.tsx +72 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardRefresh.test.tsx +310 -0
- package/Tests/App/Dashboard/EmbeddedMetricCardTimeRangeZoom.test.tsx +536 -0
- package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +3 -1
- package/Tests/App/Dashboard/EscalationRuleRowActions.test.tsx +660 -0
- package/Tests/App/Dashboard/EventNotes.test.tsx +2 -2
- package/Tests/App/Dashboard/EventOverviewPages.test.tsx +587 -13
- package/Tests/App/Dashboard/EventOverviewSnapshotExplorerZoom.test.tsx +1139 -0
- package/Tests/App/Dashboard/EventOverviewSnapshotZoomAcrossTabs.test.tsx +1057 -0
- package/Tests/App/Dashboard/EventOverviewTelemetrySnapshotZoom.test.tsx +757 -0
- package/Tests/App/Dashboard/ExceptionOccurrenceTrendZoom.test.tsx +675 -0
- package/Tests/App/Dashboard/ExceptionOccurrencesZoomSurvivesViewSwitch.test.tsx +405 -0
- package/Tests/App/Dashboard/ExceptionSignalPages.test.tsx +67 -3
- package/Tests/App/Dashboard/ExceptionTablesSpanStatus.test.tsx +515 -0
- package/Tests/App/Dashboard/ExplorerOwnZoomRegression.test.tsx +739 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisCases.tsx +461 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKathmandu.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisKolkata.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisNewYork.test.tsx +25 -0
- package/Tests/App/Dashboard/FlowBandwidthAxisUtc.test.tsx +24 -0
- package/Tests/App/Dashboard/FlowTopTalkersZoomRefetch.test.tsx +722 -0
- package/Tests/App/Dashboard/FlowViewportGuard.test.tsx +2526 -0
- package/Tests/App/Dashboard/HostPagesSlowLoads.test.tsx +872 -0
- package/Tests/App/Dashboard/HostPagesTimeRangeZoom.test.tsx +1208 -0
- package/Tests/App/Dashboard/IncidentRootCauseTimeRangeZoom.test.tsx +358 -0
- package/Tests/App/Dashboard/InfrastructureGraph.test.tsx +100 -9
- package/Tests/App/Dashboard/InfrastructureMetricsTabTimeRangeZoom.test.tsx +485 -0
- package/Tests/App/Dashboard/InvestigationDrawerCompanionZoom.test.tsx +655 -0
- package/Tests/App/Dashboard/InvestigationDrawerZoom.test.tsx +830 -0
- package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +338 -2
- package/Tests/App/Dashboard/InvoicesPayInvoice.test.tsx +454 -16
- package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +799 -819
- package/Tests/App/Dashboard/KubernetesClusterAiAgentOverviewCard.test.tsx +367 -0
- package/Tests/App/Dashboard/KubernetesClusterAiAgentStatus.test.ts +1202 -0
- package/Tests/App/Dashboard/KubernetesClusterAiDocumentationMarkdown.test.ts +106 -0
- package/Tests/App/Dashboard/KubernetesClusterAiNavigation.test.tsx +354 -0
- package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +1884 -2054
- package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +478 -179
- package/Tests/App/Dashboard/KubernetesClusterMetricTooltips.test.ts +50 -0
- package/Tests/App/Dashboard/KubernetesClusterOverviewTooltips.test.tsx +2 -1
- package/Tests/App/Dashboard/KubernetesClusterOverviewZoom.test.tsx +1217 -0
- package/Tests/App/Dashboard/KubernetesClusterPagesZoom.test.tsx +731 -0
- package/Tests/App/Dashboard/KubernetesCostsLoadRecovery.test.tsx +869 -0
- package/Tests/App/Dashboard/KubernetesCostsZoom.test.tsx +1214 -0
- package/Tests/App/Dashboard/KubernetesCostsZoomExactHours.test.tsx +692 -0
- package/Tests/App/Dashboard/KubernetesNetworkThroughputReload.test.tsx +902 -0
- package/Tests/App/Dashboard/KubernetesNetworkZoomBucketEdges.test.tsx +571 -0
- package/Tests/App/Dashboard/KubernetesOverviewZoomBucketEdges.test.tsx +697 -0
- package/Tests/App/Dashboard/KubernetesResourceMetricsTabZoom.test.tsx +633 -0
- package/Tests/App/Dashboard/LogsExplorerTimeRangeZoom.test.tsx +470 -0
- package/Tests/App/Dashboard/LogsInsightsTimeRangeZoom.test.tsx +948 -0
- package/Tests/App/Dashboard/LogsViewerPinnedWindowZoom.test.tsx +486 -0
- package/Tests/App/Dashboard/MetricChartsBucketInspectorDoubleClick.test.tsx +1001 -0
- package/Tests/App/Dashboard/MetricExplorerInvestigationAutoRefresh.test.tsx +514 -0
- package/Tests/App/Dashboard/MetricExplorerSavedViewZoomRoundTrip.test.tsx +581 -0
- package/Tests/App/Dashboard/MetricExplorerTimeRangeZoom.test.tsx +1162 -0
- package/Tests/App/Dashboard/MetricMonitorPreviewZoomLabel.test.ts +72 -0
- package/Tests/App/Dashboard/MetricRowSparklineTimeRangeZoom.test.tsx +204 -0
- package/Tests/App/Dashboard/MetricViewFirstResultLands.test.tsx +408 -0
- package/Tests/App/Dashboard/MetricViewOwnZoomResetPlacement.test.tsx +952 -0
- package/Tests/App/Dashboard/MetricViewTimeRange.test.ts +139 -0
- package/Tests/App/Dashboard/MetricViewTimeRangeZoom.test.tsx +556 -0
- package/Tests/App/Dashboard/MonitorMetricsChartWrappersZoom.test.tsx +552 -0
- package/Tests/App/Dashboard/MonitorMetricsTabsTimeRangeZoom.test.tsx +740 -0
- package/Tests/App/Dashboard/MonitorOverviewChartsTimeRangeZoom.test.tsx +735 -0
- package/Tests/App/Dashboard/MonitorStepPreviewsTimeRangeZoom.test.tsx +835 -0
- package/Tests/App/Dashboard/NetworkDeviceTimeRangeZoom.test.tsx +1115 -0
- package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +186 -17
- package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +155 -46
- package/Tests/App/Dashboard/PasskeySettings.test.tsx +87 -2
- package/Tests/App/Dashboard/ProjectAISettingsPages.test.tsx +884 -0
- package/Tests/App/Dashboard/ProxmoxNodeRemove.test.tsx +621 -0
- package/Tests/App/Dashboard/ProxmoxOverviewSlowLoads.test.tsx +584 -0
- package/Tests/App/Dashboard/ProxmoxPagesTimeRangeZoom.test.tsx +823 -0
- package/Tests/App/Dashboard/ProxmoxRateChartReload.test.tsx +1253 -0
- package/Tests/App/Dashboard/PublicDashboardBoardWideZoom.test.tsx +605 -0
- package/Tests/App/Dashboard/RealRowsLineChart.tsx +250 -0
- package/Tests/App/Dashboard/RechartsHostsPlotCursor.test.tsx +513 -0
- package/Tests/App/Dashboard/RowActionPlacementOverrides.test.tsx +865 -0
- package/Tests/App/Dashboard/RumOverviewTimeRangeZoom.test.tsx +877 -0
- package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +20 -4
- package/Tests/App/Dashboard/RunnerSupersededByAiAgentNote.test.tsx +296 -0
- package/Tests/App/Dashboard/SecurityEventConnectionsTable.test.tsx +146 -36
- package/Tests/App/Dashboard/ServiceDatabaseSlowLoads.test.tsx +1166 -0
- package/Tests/App/Dashboard/ServiceMapGraph.test.tsx +1243 -104
- package/Tests/App/Dashboard/ServiceOverviewTimeRangeZoom.test.tsx +792 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoom.test.tsx +771 -0
- package/Tests/App/Dashboard/SloBudgetBurnDownZoomAffordances.test.tsx +380 -0
- package/Tests/App/Dashboard/SloEventMetricsBarChartZoom.test.tsx +369 -0
- package/Tests/App/Dashboard/SloHistoryChartsTimeRangeZoom.test.tsx +694 -0
- package/Tests/App/Dashboard/SloHistoryChartsZoomAffordances.test.tsx +497 -0
- package/Tests/App/Dashboard/SloMetricsTimeRangeZoom.test.tsx +541 -0
- package/Tests/App/Dashboard/SlowLoadHarness.ts +123 -0
- package/Tests/App/Dashboard/SnapshotExplorerPrimaryZoom.test.tsx +1194 -0
- package/Tests/App/Dashboard/SnapshotViewerPinnedWindow.test.tsx +620 -0
- package/Tests/App/Dashboard/TelemetrySnapshotPanelTimeRangeZoom.test.tsx +765 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoom.test.tsx +516 -0
- package/Tests/App/Dashboard/TelemetrySnapshotZoomAcrossTabs.test.tsx +827 -0
- package/Tests/App/Dashboard/TimeRangeZoomPageHarness.tsx +463 -0
- package/Tests/App/Dashboard/TraceChartEditorStatusSplit.test.tsx +543 -0
- package/Tests/App/Dashboard/TraceStatusPresentation.test.tsx +967 -0
- package/Tests/App/Dashboard/TraceTimelineMinimapZoom.test.tsx +315 -0
- package/Tests/App/Dashboard/TracesAnalyticsStatusSplit.test.tsx +778 -0
- package/Tests/App/Dashboard/TracesAnalyticsViewZoom.test.tsx +349 -0
- package/Tests/App/Dashboard/TracesExplorerTimeRangeZoom.test.tsx +551 -0
- package/Tests/App/Dashboard/TracesStatusChartAndFacet.test.tsx +687 -0
- package/Tests/App/Dashboard/TracesViewerStaleResponses.test.tsx +458 -0
- package/Tests/App/Dashboard/UptimeStripsExcludedFromZoom.test.tsx +406 -0
- package/Tests/App/Dashboard/VMwareOverviewSlowLoads.test.tsx +535 -0
- package/Tests/App/Dashboard/VMwarePagesTimeRangeZoom.test.tsx +606 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineStaleHover.test.tsx +1292 -0
- package/Tests/App/Dashboard/ValueWidgetSparklineZoom.test.tsx +765 -0
- package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +98 -0
- package/Tests/Models/DatabaseModels/KubernetesAiAgentModel.test.ts +295 -0
- package/Tests/Models/DatabaseModels/TeamComplianceSettingModel.test.ts +347 -0
- package/Tests/Server/API/AIChatRouteAuthorization.test.ts +58 -0
- package/Tests/Server/API/AIGenerationProjectAIToggle.test.ts +1 -1
- package/Tests/Server/API/AIInvestigationAPI.test.ts +123 -45
- package/Tests/Server/API/AutoRemediationApproveClusterRound.test.ts +1329 -0
- package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +25 -2
- package/Tests/Server/API/KubernetesClusterAiAccessAPI.test.ts +2 -0
- package/Tests/Server/API/KubernetesClusterAiAccessAPIAgent.test.ts +903 -0
- package/Tests/Server/API/MicrosoftTeamsChatsRefreshRoute.test.ts +667 -0
- package/Tests/Server/API/MicrosoftTeamsManifest.test.ts +294 -6
- package/Tests/Server/API/ProxmoxResourceAPIRemoveNode.test.ts +1932 -0
- package/Tests/Server/Infrastructure/GlobalCache.test.ts +195 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesAiAgentAndAiDefaultsMigration.test.ts +623 -0
- package/Tests/Server/Infrastructure/Postgres/AddKubernetesClusterAiAccessMigration.test.ts +87 -10
- package/Tests/Server/Infrastructure/Postgres/AddTeamComplianceRuleScopeMigration.test.ts +622 -0
- package/Tests/Server/Middleware/TelemetryIngestBrowserKey.test.ts +61 -4
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerPinnedKey.test.ts +98 -2
- package/Tests/Server/Middleware/TelemetryIngestKubernetesAgentRunnerRateLimit.test.ts +105 -2
- package/Tests/Server/Services/AIServiceBalanceBlocker.test.ts +282 -0
- package/Tests/Server/Services/AlertMonitorClearWritesNull.test.ts +409 -0
- package/Tests/Server/Services/AlertMonitorEditFeed.test.ts +474 -0
- package/Tests/Server/Services/AlertMonitorEditGuard.test.ts +610 -0
- package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +2 -0
- package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +2 -1
- package/Tests/Server/Services/IncidentAffectedMonitorsEdit.test.ts +1360 -0
- package/Tests/Server/Services/IncidentAlertSloLinkSurvivesEdit.test.ts +3 -1
- package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +488 -0
- package/Tests/Server/Services/KubernetesAiAgentJobService.test.ts +329 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceHelpers.test.ts +618 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceLifecycle.test.ts +1444 -0
- package/Tests/Server/Services/KubernetesAiAgentServiceRegister.test.ts +1666 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +140 -111
- package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +267 -105
- package/Tests/Server/Services/KubernetesClusterAiAccessLegacySuperseded.test.ts +440 -0
- package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +567 -411
- package/Tests/Server/Services/KubernetesClusterAiAccessTarget.test.ts +1168 -0
- package/Tests/Server/Services/KubernetesClusterAiSettingsPermission.test.ts +410 -12
- package/Tests/Server/Services/KubernetesClusterServiceAiAccessFeed.test.ts +55 -0
- package/Tests/Server/Services/ProjectServiceNewProjectAiDefaults.test.ts +288 -0
- package/Tests/Server/Services/ProxmoxResourcePostgres.test.ts +5633 -0
- package/Tests/Server/Services/ProxmoxResourceService.test.ts +6458 -5
- package/Tests/Server/Services/RunnerJobEnqueueKubectl.test.ts +48 -15
- package/Tests/Server/Services/RunnerJobEnqueueKubectlAiAgent.test.ts +620 -0
- package/Tests/Server/Services/RunnerJobKubectlWriteScope.test.ts +170 -3
- package/Tests/Server/Services/RunnerJobTimeoutReason.test.ts +72 -0
- package/Tests/Server/Services/RunnerServiceAgentName.test.ts +6 -4
- package/Tests/Server/Services/ScheduledMaintenanceAttachmentEdit.test.ts +2113 -0
- package/Tests/Server/Services/ScheduledMaintenanceMonitorRelease.test.ts +972 -0
- package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +2237 -0
- package/Tests/Server/Services/TeamComplianceSettingService.test.ts +3988 -138
- package/Tests/Server/Utils/AI/ClusterAccessContext.test.ts +107 -1
- package/Tests/Server/Utils/AI/IncidentPostmortemRunner.test.ts +351 -0
- package/Tests/Server/Utils/AI/InvestigationClusterAccessWiring.test.ts +2 -0
- package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +310 -0
- package/Tests/Server/Utils/AI/KubectlInvestigationToolkit.test.ts +70 -0
- package/Tests/Server/Utils/AI/KubectlJobRunnerFinishedJob.test.ts +58 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectl.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsKubectlOutcome.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationCommandToolsRunnerScope.test.ts +125 -1
- package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +252 -3
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerClusterMode.test.ts +2 -0
- package/Tests/Server/Utils/AI/RemediationExecutionRunnerProjectGates.test.ts +240 -0
- package/Tests/Server/Utils/AI/RemediationKubectlCopyParity.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutor.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanExecutorUnknownRun.test.ts +2 -0
- package/Tests/Server/Utils/AutoRemediation/CommandPlanVerification.test.ts +2 -0
- package/Tests/Server/Utils/Telemetry/HostAssetAttributesFromOtlp.test.ts +68 -0
- package/Tests/Server/Utils/Telemetry/InventoryMirrorPostgres.test.ts +370 -0
- package/Tests/Server/Utils/Telemetry/NetworkDeviceInventoryAttributes.test.ts +522 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.test.ts +155 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.test.ts +8631 -0
- package/Tests/Server/Utils/Telemetry/ProxmoxNativePush.test.ts +2852 -0
- package/Tests/Server/Utils/Telemetry/TelemetryEntity.test.ts +367 -1
- package/Tests/Server/Utils/Telemetry/TelemetryIngestionKeyGuard.test.ts +45 -3
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsChats.test.ts +25 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNames.test.ts +3119 -0
- package/Tests/Server/Utils/Workspace/MicrosoftTeamsGroupChatNamesPostgres.test.ts +1721 -0
- package/Tests/Types/Kubernetes/KubernetesAgentChartAiAccess.test.ts +581 -113
- package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +510 -0
- package/Tests/Types/Team/ComplianceRule.test.ts +1029 -0
- package/Tests/Types/Team/TeamComplianceStatus.test.ts +176 -0
- package/Tests/UI/Components/ActionButton/RowActions.test.tsx +641 -0
- package/Tests/UI/Components/ActionButton/RowActionsAccessibility.test.tsx +414 -0
- package/Tests/UI/Components/ActionButton/SplitActionButtons.test.ts +565 -0
- package/Tests/UI/Components/Charts/BarChartDragToSelect.test.tsx +386 -0
- package/Tests/UI/Components/Charts/ChartDoubleClickResetWithoutDblclick.test.tsx +1025 -0
- package/Tests/UI/Components/Charts/ChartGroupPageZoomHint.test.tsx +196 -0
- package/Tests/UI/Components/Charts/ChartPlaceholdersTakeDoubleClick.test.tsx +1861 -0
- package/Tests/UI/Components/Charts/ChartPlotClicksWhileResetArmed.test.tsx +382 -0
- package/Tests/UI/Components/Charts/ChartRangeSelection.test.tsx +704 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionDoubleClickReset.test.tsx +1481 -0
- package/Tests/UI/Components/Charts/ChartRangeSelectionRealRecharts.test.tsx +918 -0
- package/Tests/UI/Components/Charts/ChartRowBucketStart.test.ts +350 -0
- package/Tests/UI/Components/Charts/DoubleClickReset.test.tsx +996 -0
- package/Tests/UI/Components/Charts/HistogramDoubleClickResetRealRecharts.test.tsx +965 -0
- package/Tests/UI/Components/Charts/HistogramDriftThenRefetch.test.tsx +277 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionDataChange.test.tsx +1757 -0
- package/Tests/UI/Components/Charts/HistogramRangeSelectionRealRecharts.test.tsx +560 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ChartPageTimeRangeZoom.test.tsx +513 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.test.tsx +845 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.test.tsx +119 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHintTailwind.test.tsx +274 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.test.ts +433 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.test.tsx +863 -0
- package/Tests/UI/Components/Charts/TimeRangeZoom/ZoomDocsPromises.test.tsx +1147 -0
- package/Tests/UI/Components/DisabledButtonTooltip.test.tsx +14 -3
- package/Tests/UI/Components/EntityDropdownEscape.test.tsx +454 -0
- package/Tests/UI/Components/EntityDropdownFocusLeave.test.tsx +420 -0
- package/Tests/UI/Components/Forms/FormFieldDropdownDisabled.test.tsx +233 -0
- package/Tests/UI/Components/Input.test.tsx +80 -1
- package/Tests/UI/Components/LogsAnalyticsViewZoom.test.tsx +947 -0
- package/Tests/UI/Components/LogsHistogramDragTooltip.test.tsx +17 -5
- package/Tests/UI/Components/LogsViewerAnalyticsZoom.test.tsx +501 -0
- package/Tests/UI/Components/LogsViewerHistogramZoom.test.tsx +1 -1
- package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +6 -4
- package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +60 -8
- package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +476 -0
- package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +7 -5
- package/Tests/UI/Components/MoreMenuPortal.test.tsx +623 -0
- package/Tests/UI/Components/StatusPage/ResourceGridActions.test.tsx +538 -0
- package/Tests/UI/Components/StatusPage/ResourceGridSelection.test.tsx +14 -4
- package/Tests/UI/Components/TableCellWrapping.test.tsx +3 -3
- package/Tests/UI/Components/TableRowActions.test.tsx +472 -0
- package/Tests/UI/Components/TelemetryHistogramDragTooltip.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerHistogramClickZoom.test.tsx +1 -1
- package/Tests/UI/Components/TelemetryViewer/TelemetryViewerZoomScope.test.tsx +470 -0
- package/Tests/UI/Components/TelemetryViewer/UseViewerTimeRangeZoom.test.tsx +571 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerDoubleClickResetUnderDataChange.test.tsx +928 -0
- package/Tests/UI/Components/TelemetryViewer/ViewerFollowsEnclosingZoom.test.tsx +1569 -0
- package/Tests/UI/Components/Toggle.test.tsx +66 -0
- package/Tests/UI/MicrosoftTeams/MicrosoftTeamsChatsCardRefreshNames.test.tsx +1023 -0
- package/Tests/UI/Rum/ChunkLoader.test.ts +201 -0
- package/Tests/UI/Rum/FidelityNotices.test.ts +54 -0
- package/Tests/UI/Rum/ReplayCorrelationPanel.test.tsx +72 -0
- package/Tests/UI/Rum/ReplayFrameCapture.test.ts +1009 -9
- package/Tests/UI/Rum/ReplayRecordedAssets.test.ts +1069 -0
- package/Tests/UI/Rum/ReplayStage.test.tsx +913 -2
- package/Tests/UI/Rum/SessionReplayTable.test.tsx +443 -8
- package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +439 -9
- package/Tests/UI/Rum/UserFlowTablesRowActions.test.tsx +501 -0
- package/Tests/Utils/AiRemediation/KubectlPolicyChartRbacParity.test.ts +47 -19
- package/Tests/Utils/AiRemediation/KubectlWriteScopeCallerParity.test.ts +2 -0
- package/Tests/Utils/AiRemediation/KubernetesAiAgentPolicyCopyParity.test.ts +396 -0
- package/Tests/Utils/Dashboard/DashboardTimeRangeZoom.test.ts +104 -1
- package/Types/AI/AIRunType.ts +9 -4
- package/Types/AI/InvestigationNotStartedReason.ts +6 -0
- package/Types/AutoRemediation/AiRemediationCommandPlan.ts +14 -16
- package/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.ts +28 -0
- package/Types/Dashboard/DashboardComponents/DashboardTraceChartComponent.ts +4 -2
- package/Types/Kubernetes/KubernetesClusterAiAccess.ts +263 -32
- package/Types/Kubernetes/KubernetesClusterAiAccessPermissions.ts +20 -16
- package/Types/Kubernetes/KubernetesClusterAiInsights.ts +81 -0
- package/Types/Monitor/ProxmoxAlertTemplates.ts +4 -4
- package/Types/Team/ComplianceNotificationChannel.ts +22 -0
- package/Types/Team/ComplianceRule.ts +434 -0
- package/Types/Team/ComplianceRuleType.ts +21 -0
- package/Types/Team/TeamComplianceStatus.ts +81 -0
- package/Types/Telemetry/TelemetryIngestSurface.ts +28 -0
- package/UI/Components/ActionButton/ActionButtonSchema.ts +21 -0
- package/UI/Components/ActionButton/RowActions.tsx +238 -0
- package/UI/Components/ActionButton/SplitActionButtons.ts +173 -0
- package/UI/Components/Charts/Area/AreaChart.tsx +32 -2
- package/UI/Components/Charts/Bar/BarChart.tsx +40 -3
- package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +37 -11
- package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +80 -243
- package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +122 -31
- package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +95 -244
- package/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts +214 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.ts +32 -0
- package/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.ts +599 -0
- package/UI/Components/Charts/Line/LineChart.tsx +32 -2
- package/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx +70 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.tsx +226 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.tsx +73 -0
- package/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.ts +163 -0
- package/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.ts +215 -0
- package/UI/Components/Charts/Utils/DataPoint.ts +20 -8
- package/UI/Components/Charts/Utils/XAxis.ts +75 -0
- package/UI/Components/Charts/Utils/useHistogramRangeSelection.ts +493 -59
- package/UI/Components/EntityDropdown/EntityDropdown.tsx +107 -11
- package/UI/Components/Forms/Fields/FormField.tsx +10 -0
- package/UI/Components/Input/Input.tsx +90 -57
- package/UI/Components/List/ListRow.tsx +8 -74
- package/UI/Components/LogsViewer/LogsViewer.tsx +40 -11
- package/UI/Components/LogsViewer/components/LogTimeRangePicker.tsx +22 -6
- package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +209 -6
- package/UI/Components/LogsViewer/components/LogsHistogram.tsx +127 -84
- package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +3 -0
- package/UI/Components/ModelTable/BaseModelTable.tsx +12 -1
- package/UI/Components/MoreMenu/MoreMenu.tsx +365 -30
- package/UI/Components/MoreMenu/MoreMenuItem.tsx +70 -17
- package/UI/Components/OrderedStatesList/Item.tsx +7 -72
- package/UI/Components/StatusPage/ResourceGrid.tsx +126 -77
- package/UI/Components/Table/TableBody.tsx +8 -2
- package/UI/Components/Table/TableRow.tsx +20 -140
- package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +41 -10
- package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +47 -9
- package/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.tsx +25 -6
- package/UI/Components/TelemetryViewer/types.ts +2 -0
- package/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.ts +448 -0
- package/UI/Components/Toggle/Toggle.tsx +26 -0
- package/UI/Components/Tooltip/Tooltip.tsx +8 -1
- package/UI/Styles/Theme.css +14 -2
- package/Utils/AiRemediation/CommandPolicy.ts +1 -1
- package/Utils/AiRemediation/KubectlPolicy.ts +1 -1
- package/Utils/Dashboard/DashboardTimeRangeZoom.ts +46 -2
- package/build/dist/Models/DatabaseModels/Index.js +2 -0
- package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
- package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js +385 -0
- package/build/dist/Models/DatabaseModels/KubernetesAiAgent.js.map +1 -0
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js +3 -3
- package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
- package/build/dist/Models/DatabaseModels/Project.js +56 -5
- package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js +51 -1
- package/build/dist/Models/DatabaseModels/ProxmoxResource.js.map +1 -1
- package/build/dist/Models/DatabaseModels/RunnerJob.js +74 -0
- package/build/dist/Models/DatabaseModels/RunnerJob.js.map +1 -1
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js +134 -3
- package/build/dist/Models/DatabaseModels/TeamComplianceSetting.js.map +1 -1
- package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
- package/build/dist/Server/API/AIChatAPI.js +6 -1
- package/build/dist/Server/API/AIChatAPI.js.map +1 -1
- package/build/dist/Server/API/AIInvestigationAPI.js +17 -10
- package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -1
- package/build/dist/Server/API/AutoRemediationAPI.js +144 -24
- package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js +436 -22
- package/build/dist/Server/API/KubernetesClusterAiAccessAPI.js.map +1 -1
- package/build/dist/Server/API/MicrosoftTeamsAPI.js +69 -13
- package/build/dist/Server/API/MicrosoftTeamsAPI.js.map +1 -1
- package/build/dist/Server/API/ProxmoxResourceAPI.js +187 -14
- package/build/dist/Server/API/ProxmoxResourceAPI.js.map +1 -1
- package/build/dist/Server/Infrastructure/GlobalCache.js +27 -0
- package/build/dist/Server/Infrastructure/GlobalCache.js.map +1 -1
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js +50 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796000000000-AddTeamComplianceRuleScope.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js +84 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796100000000-AddKubernetesAiAgentAndAiDefaults.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js +31 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796200000000-AddProxmoxResourceNativePushColumns.js.map +1 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
- package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
- package/build/dist/Server/Middleware/TelemetryIngest.js +34 -19
- package/build/dist/Server/Middleware/TelemetryIngest.js.map +1 -1
- package/build/dist/Server/Services/AIService.js +59 -1
- package/build/dist/Server/Services/AIService.js.map +1 -1
- package/build/dist/Server/Services/AlertService.js +248 -13
- package/build/dist/Server/Services/AlertService.js.map +1 -1
- package/build/dist/Server/Services/AlertSeverityService.js +51 -15
- package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js +1 -1
- package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
- package/build/dist/Server/Services/IncidentService.js +199 -72
- package/build/dist/Server/Services/IncidentService.js.map +1 -1
- package/build/dist/Server/Services/IncidentSeverityService.js +51 -15
- package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js +158 -0
- package/build/dist/Server/Services/KubernetesAiAgentJobService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js +1145 -0
- package/build/dist/Server/Services/KubernetesAiAgentService.js.map +1 -0
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +842 -371
- package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -1
- package/build/dist/Server/Services/KubernetesClusterService.js +86 -17
- package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
- package/build/dist/Server/Services/ProjectService.js +22 -0
- package/build/dist/Server/Services/ProjectService.js.map +1 -1
- package/build/dist/Server/Services/ProxmoxResourceService.js +258 -3
- package/build/dist/Server/Services/ProxmoxResourceService.js.map +1 -1
- package/build/dist/Server/Services/RunnerJobService.js +178 -92
- package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
- package/build/dist/Server/Services/RunnerService.js +1 -1
- package/build/dist/Server/Services/RunnerService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceService.js +535 -3
- package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js +316 -46
- package/build/dist/Server/Services/ScheduledMaintenanceStateTimelineService.js.map +1 -1
- package/build/dist/Server/Services/TeamComplianceSettingService.js +833 -7
- package/build/dist/Server/Services/TeamComplianceSettingService.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js +52 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/ClusterAccessContext.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js +13 -9
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlInvestigationToolkit.js.map +1 -1
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js +7 -3
- package/build/dist/Server/Utils/AI/ClusterAccess/KubectlJobRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js +29 -15
- package/build/dist/Server/Utils/AI/Remediation/RemediationCommandTools.js.map +1 -1
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +56 -20
- package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js +39 -5
- package/build/dist/Server/Utils/AI/SRE/AIInvestigationEngine.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js +30 -3
- package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +13 -2
- package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -1
- package/build/dist/Server/Utils/AI/SRE/InvestigationGrader.js +1 -1
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js +4 -2
- package/build/dist/Server/Utils/AutoRemediation/CommandPlanExecutor.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +111 -6
- package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js +40 -4
- package/build/dist/Server/Utils/Telemetry/ProxmoxCephSnapshotScan.js.map +1 -1
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js +296 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativeNodeLiveness.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js +699 -0
- package/build/dist/Server/Utils/Telemetry/ProxmoxNativePush.js.map +1 -0
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js +77 -19
- package/build/dist/Server/Utils/Telemetry/TelemetryEntity.js.map +1 -1
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +505 -42
- package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
- package/build/dist/Types/AI/AIRunType.js +9 -4
- package/build/dist/Types/AI/AIRunType.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js +10 -16
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPlan.js.map +1 -1
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js +28 -0
- package/build/dist/Types/AutoRemediation/AiRemediationCommandPolicyVerdict.js.map +1 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js +72 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js +20 -16
- package/build/dist/Types/Kubernetes/KubernetesClusterAiAccessPermissions.js.map +1 -1
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js +17 -0
- package/build/dist/Types/Kubernetes/KubernetesClusterAiInsights.js.map +1 -0
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js +4 -4
- package/build/dist/Types/Monitor/ProxmoxAlertTemplates.js.map +1 -1
- package/build/dist/Types/Team/ComplianceNotificationChannel.js +23 -0
- package/build/dist/Types/Team/ComplianceNotificationChannel.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRule.js +304 -0
- package/build/dist/Types/Team/ComplianceRule.js.map +1 -0
- package/build/dist/Types/Team/ComplianceRuleType.js +21 -0
- package/build/dist/Types/Team/ComplianceRuleType.js.map +1 -1
- package/build/dist/Types/Team/TeamComplianceStatus.js +2 -0
- package/build/dist/Types/Team/TeamComplianceStatus.js.map +1 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js +25 -0
- package/build/dist/Types/Telemetry/TelemetryIngestSurface.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js +20 -1
- package/build/dist/UI/Components/ActionButton/ActionButtonSchema.js.map +1 -1
- package/build/dist/UI/Components/ActionButton/RowActions.js +113 -0
- package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js +71 -0
- package/build/dist/UI/Components/ActionButton/SplitActionButtons.js.map +1 -0
- package/build/dist/UI/Components/Charts/Area/AreaChart.js +16 -1
- package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js +16 -1
- package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +27 -5
- package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +61 -194
- package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +84 -26
- package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +75 -196
- package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js +133 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/DoubleClick.js.map +1 -1
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js +26 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.js.map +1 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js +371 -0
- package/build/dist/UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.js.map +1 -0
- package/build/dist/UI/Components/Charts/Line/LineChart.js +16 -1
- package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js +35 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js +107 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js +41 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomHint.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js +117 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/TimeRangeZoomUtil.js.map +1 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js +121 -0
- package/build/dist/UI/Components/Charts/TimeRangeZoom/UseTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js +15 -7
- package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/XAxis.js +70 -0
- package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js +305 -38
- package/build/dist/UI/Components/Charts/Utils/useHistogramRangeSelection.js.map +1 -1
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +89 -14
- package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
- package/build/dist/UI/Components/Forms/Fields/FormField.js +11 -2
- package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
- package/build/dist/UI/Components/Input/Input.js +69 -54
- package/build/dist/UI/Components/Input/Input.js.map +1 -1
- package/build/dist/UI/Components/List/ListRow.js +4 -39
- package/build/dist/UI/Components/List/ListRow.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js +31 -8
- package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js +10 -1
- package/build/dist/UI/Components/LogsViewer/components/LogTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +139 -21
- package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +30 -8
- package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +1 -1
- package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js +10 -0
- package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js +253 -14
- package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +43 -13
- package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
- package/build/dist/UI/Components/OrderedStatesList/Item.js +2 -38
- package/build/dist/UI/Components/OrderedStatesList/Item.js.map +1 -1
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js +53 -15
- package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
- package/build/dist/UI/Components/Table/TableBody.js +6 -2
- package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
- package/build/dist/UI/Components/Table/TableRow.js +12 -75
- package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +32 -7
- package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +27 -9
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js +11 -1
- package/build/dist/UI/Components/TelemetryViewer/components/TelemetryTimeRangePicker.js.map +1 -1
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js +272 -0
- package/build/dist/UI/Components/TelemetryViewer/useViewerTimeRangeZoom.js.map +1 -0
- package/build/dist/UI/Components/Toggle/Toggle.js +14 -1
- package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js +1 -1
- package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/CommandPolicy.js.map +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js +1 -1
- package/build/dist/Utils/AiRemediation/KubectlPolicy.js.map +1 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js +27 -1
- package/build/dist/Utils/Dashboard/DashboardTimeRangeZoom.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DoubleClick.js","sourceRoot":"","sources":["../../../../../../../UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAW,GAAG,CAAC"}
|
|
1
|
+
{"version":3,"file":"DoubleClick.js","sourceRoot":"","sources":["../../../../../../../UI/Components/Charts/ChartLibrary/Utils/DoubleClick.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Calls `onChange` when a chart is redrawn over other buckets (a zoom, a
|
|
4
|
+
* reset, a new range), before the browser paints, and never on the first
|
|
5
|
+
* render. The buckets are the labels the chart draws on its x-axis.
|
|
6
|
+
*
|
|
7
|
+
* A chart's click selections (a dot, a bar) point at the buckets they were
|
|
8
|
+
* made on; once those are gone the selection matches nothing, and a
|
|
9
|
+
* selection that dims the rest of the chart would dim all of it.
|
|
10
|
+
*/
|
|
11
|
+
export default function useChartBucketsChange(categoryLabels, onChange) {
|
|
12
|
+
const bucketKey = React.useMemo(() => {
|
|
13
|
+
return categoryLabels.join("\u0000");
|
|
14
|
+
}, [categoryLabels]);
|
|
15
|
+
const lastBucketKeyRef = React.useRef(bucketKey);
|
|
16
|
+
const onChangeRef = React.useRef(onChange);
|
|
17
|
+
onChangeRef.current = onChange;
|
|
18
|
+
React.useLayoutEffect(() => {
|
|
19
|
+
if (lastBucketKeyRef.current === bucketKey) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
lastBucketKeyRef.current = bucketKey;
|
|
23
|
+
onChangeRef.current();
|
|
24
|
+
}, [bucketKey]);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=UseChartBucketsChange.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseChartBucketsChange.js","sourceRoot":"","sources":["../../../../../../../UI/Components/Charts/ChartLibrary/Utils/UseChartBucketsChange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAC3C,cAA6B,EAC7B,QAAoB;IAEpB,MAAM,SAAS,GAAW,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE;QACnD,OAAO,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IACrB,MAAM,gBAAgB,GACpB,KAAK,CAAC,MAAM,CAAS,SAAS,CAAC,CAAC;IAClC,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,CAAa,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAE/B,KAAK,CAAC,eAAe,CAAC,GAAG,EAAE;QACzB,IAAI,gBAAgB,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;QACrC,WAAW,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { CHART_DATA_POINT_DATE_KEY } from "../Types/ChartDataPoint";
|
|
3
|
+
import { useDoubleClickReset, } from "./DoubleClick";
|
|
4
|
+
/*
|
|
5
|
+
* How far the pointer may wander from where it was pressed and still be a
|
|
6
|
+
* pointer that has not moved: a hand on a mouse or a trackpad is never
|
|
7
|
+
* quite still, and a press that drifts a pixel or two across the edge of a
|
|
8
|
+
* bucket is still a click.
|
|
9
|
+
*/
|
|
10
|
+
export const CHART_PRESS_STILLNESS_PX = 3;
|
|
11
|
+
/**
|
|
12
|
+
* The row under the pointer: recharts' active tooltip index when it is a
|
|
13
|
+
* valid row, else the row whose label matches recharts' active label.
|
|
14
|
+
*/
|
|
15
|
+
export function getChartRowIndex(data, index, chartState) {
|
|
16
|
+
const activeTooltipIndex = chartState === null || chartState === void 0 ? void 0 : chartState.activeTooltipIndex;
|
|
17
|
+
const numericIndex = typeof activeTooltipIndex === "number"
|
|
18
|
+
? activeTooltipIndex
|
|
19
|
+
: Number(activeTooltipIndex);
|
|
20
|
+
if (activeTooltipIndex !== undefined &&
|
|
21
|
+
activeTooltipIndex !== null &&
|
|
22
|
+
activeTooltipIndex !== "" &&
|
|
23
|
+
Number.isInteger(numericIndex) &&
|
|
24
|
+
numericIndex >= 0 &&
|
|
25
|
+
numericIndex < data.length) {
|
|
26
|
+
return numericIndex;
|
|
27
|
+
}
|
|
28
|
+
// Fall back to matching activeLabel against the row labels.
|
|
29
|
+
if ((chartState === null || chartState === void 0 ? void 0 : chartState.activeLabel) !== undefined) {
|
|
30
|
+
const rowIndex = data.findIndex((row) => {
|
|
31
|
+
return row[index] === chartState.activeLabel;
|
|
32
|
+
});
|
|
33
|
+
return rowIndex >= 0 ? rowIndex : null;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/** When a row's bucket starts, from the epoch ms every row carries. */
|
|
38
|
+
export function getChartBucketStart(data, rowIndex) {
|
|
39
|
+
var _a;
|
|
40
|
+
const rawDate = (_a = data[rowIndex]) === null || _a === void 0 ? void 0 : _a[CHART_DATA_POINT_DATE_KEY];
|
|
41
|
+
return typeof rawDate === "number" ? new Date(rawDate) : null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The time rows lowerIndex..upperIndex cover: from the start of the first
|
|
45
|
+
* bucket to the END of the last one. Its end is its start plus one bucket
|
|
46
|
+
* width, derived from the adjacent row (the rows are an evenly spaced
|
|
47
|
+
* grid). A single row with no neighbour has no known width.
|
|
48
|
+
*/
|
|
49
|
+
export function getChartBucketWindow(data, lowerIndex, upperIndex) {
|
|
50
|
+
const start = getChartBucketStart(data, lowerIndex);
|
|
51
|
+
const lastBucketStart = getChartBucketStart(data, upperIndex);
|
|
52
|
+
if (!start || !lastBucketStart) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const adjacentDate = upperIndex > 0
|
|
56
|
+
? getChartBucketStart(data, upperIndex - 1)
|
|
57
|
+
: getChartBucketStart(data, upperIndex + 1);
|
|
58
|
+
const bucketWidthInMs = adjacentDate
|
|
59
|
+
? Math.abs(lastBucketStart.getTime() - adjacentDate.getTime())
|
|
60
|
+
: 0;
|
|
61
|
+
return {
|
|
62
|
+
start: start,
|
|
63
|
+
end: new Date(lastBucketStart.getTime() + bucketWidthInMs),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/*
|
|
67
|
+
* The events recharts may hold for the next animation frame on a chart that
|
|
68
|
+
* offers a drag: its defaults, less "mousemove".
|
|
69
|
+
*
|
|
70
|
+
* recharts works out the bucket under the pointer a frame after each
|
|
71
|
+
* mousemove, but hands mousedown and mouseup to the chart at once, with
|
|
72
|
+
* the bucket it last worked out. So a drag released in the frame of its
|
|
73
|
+
* last move lost the buckets that move crossed, and a press in the frame
|
|
74
|
+
* the pointer arrived started one bucket early, or was dropped outright
|
|
75
|
+
* when the move queued before it (no button held yet) landed after it.
|
|
76
|
+
* Browsers already coalesce mousemove to about one a frame, so taking it
|
|
77
|
+
* at once costs no extra renders.
|
|
78
|
+
*/
|
|
79
|
+
export const RANGE_SELECTION_THROTTLED_EVENTS = ["touchmove", "pointermove", "scroll", "wheel"];
|
|
80
|
+
const RANGE_SELECTION_ROOT_STYLE = {
|
|
81
|
+
cursor: "crosshair",
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Drag-to-select a time window on the line, area and bar charts.
|
|
85
|
+
*
|
|
86
|
+
* - A drag across buckets selects from the start of the first to the END
|
|
87
|
+
* of the last, as soon as the button is released.
|
|
88
|
+
* - A press and release on one bucket is a plain click and keeps its
|
|
89
|
+
* meaning (a bucket click, a legend toggle); only a real drag selects.
|
|
90
|
+
* A drag needs the pointer itself to move, by more than
|
|
91
|
+
* CHART_PRESS_STILLNESS_PX: a press whose bucket changes under a still
|
|
92
|
+
* pointer (new rows landing mid-press, a hand's drift across a bucket's
|
|
93
|
+
* edge) is still a plain click.
|
|
94
|
+
* - Nothing re-renders until the pointer leaves the bucket it pressed. A
|
|
95
|
+
* render under a press can replace the node it landed on (recharts
|
|
96
|
+
* re-keys a line's dots when it redraws them), and a press whose node
|
|
97
|
+
* is gone by the release gets no click and no dblclick - so a
|
|
98
|
+
* double-click on a line never reached the chart's zoom reset.
|
|
99
|
+
* - The release is resolved from the bucket recharts reports under the
|
|
100
|
+
* pointer at mouseup, falling back to the last move. The chart takes
|
|
101
|
+
* mousemove unthrottled (RANGE_SELECTION_THROTTLED_EVENTS), so that
|
|
102
|
+
* bucket is the one under the pointer now, not a frame ago.
|
|
103
|
+
* - A drag released outside the chart still selects: readers overshoot a
|
|
104
|
+
* 180px-tall chart all the time, and the chart's own mouseup never fires
|
|
105
|
+
* there. Before, the drag was abandoned and its band stayed painted until
|
|
106
|
+
* the pointer came back.
|
|
107
|
+
* - The click the browser fires after a drag is reported as suppressed.
|
|
108
|
+
* - With onTimeRangeReset, the second press of a double-click is the reset
|
|
109
|
+
* and never a selection, and it resets even when the browser drops the
|
|
110
|
+
* `dblclick` because the chart's new data re-keyed the node under the
|
|
111
|
+
* press (see useDoubleClickReset).
|
|
112
|
+
*/
|
|
113
|
+
const useChartRangeSelection = (options) => {
|
|
114
|
+
const canSelect = Boolean(options.onTimeRangeSelect) && options.enabled !== false;
|
|
115
|
+
const canReset = Boolean(options.onTimeRangeReset);
|
|
116
|
+
const doubleClickReset = useDoubleClickReset(options.onTimeRangeReset);
|
|
117
|
+
const [selectionStartLabel, setSelectionStartLabel] = React.useState(null);
|
|
118
|
+
const [selectionEndLabel, setSelectionEndLabel] = React.useState(null);
|
|
119
|
+
/*
|
|
120
|
+
* The refs, not render state, are the authority on a selection in
|
|
121
|
+
* progress: a release can be seen twice (the chart's own mouseup and the
|
|
122
|
+
* page-wide listener below) and must only commit once.
|
|
123
|
+
*/
|
|
124
|
+
const isSelecting = React.useRef(false);
|
|
125
|
+
const startIndexRef = React.useRef(null);
|
|
126
|
+
const endIndexRef = React.useRef(null);
|
|
127
|
+
const suppressNextClickRef = React.useRef(false);
|
|
128
|
+
// Whether the band is painted, i.e. the selection is in render state.
|
|
129
|
+
const isBandShownRef = React.useRef(false);
|
|
130
|
+
// Where the press in progress went down, when recharts said.
|
|
131
|
+
const pressClientXRef = React.useRef(null);
|
|
132
|
+
// The page-wide mouseup listener of the press in progress, if any.
|
|
133
|
+
const releaseListenerRef = React.useRef(null);
|
|
134
|
+
/*
|
|
135
|
+
* A release outside the chart is handled by a window listener installed
|
|
136
|
+
* a render earlier, so it reads the latest rows and handler from here.
|
|
137
|
+
*/
|
|
138
|
+
const latest = React.useRef({
|
|
139
|
+
data: options.data,
|
|
140
|
+
index: options.index,
|
|
141
|
+
onTimeRangeSelect: options.onTimeRangeSelect,
|
|
142
|
+
canSelect: canSelect,
|
|
143
|
+
});
|
|
144
|
+
latest.current = {
|
|
145
|
+
data: options.data,
|
|
146
|
+
index: options.index,
|
|
147
|
+
onTimeRangeSelect: options.onTimeRangeSelect,
|
|
148
|
+
canSelect: canSelect,
|
|
149
|
+
};
|
|
150
|
+
const stopListeningForRelease = React.useCallback(() => {
|
|
151
|
+
if (releaseListenerRef.current) {
|
|
152
|
+
window.removeEventListener("mouseup", releaseListenerRef.current);
|
|
153
|
+
releaseListenerRef.current = null;
|
|
154
|
+
}
|
|
155
|
+
}, []);
|
|
156
|
+
const clearSelection = React.useCallback(() => {
|
|
157
|
+
isSelecting.current = false;
|
|
158
|
+
startIndexRef.current = null;
|
|
159
|
+
endIndexRef.current = null;
|
|
160
|
+
stopListeningForRelease();
|
|
161
|
+
// A press that never became a drag painted nothing: leave render alone.
|
|
162
|
+
if (isBandShownRef.current) {
|
|
163
|
+
isBandShownRef.current = false;
|
|
164
|
+
setSelectionStartLabel(null);
|
|
165
|
+
setSelectionEndLabel(null);
|
|
166
|
+
}
|
|
167
|
+
}, [stopListeningForRelease]);
|
|
168
|
+
/*
|
|
169
|
+
* Whether the pointer has left the spot the press went down on. Without
|
|
170
|
+
* positions to go by (a caller that hands no event), it has: any change
|
|
171
|
+
* of bucket counts, as it always did.
|
|
172
|
+
*/
|
|
173
|
+
const hasPointerMoved = React.useCallback((event) => {
|
|
174
|
+
const clientX = event === null || event === void 0 ? void 0 : event.clientX;
|
|
175
|
+
if (pressClientXRef.current === null || typeof clientX !== "number") {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
return (Math.abs(clientX - pressClientXRef.current) > CHART_PRESS_STILLNESS_PX);
|
|
179
|
+
}, []);
|
|
180
|
+
const getLabel = React.useCallback((rowIndex) => {
|
|
181
|
+
var _a;
|
|
182
|
+
const label = (_a = latest.current.data[rowIndex]) === null || _a === void 0 ? void 0 : _a[latest.current.index];
|
|
183
|
+
return typeof label === "string" ? label : null;
|
|
184
|
+
}, []);
|
|
185
|
+
const onMouseMove = React.useCallback((chartState, mouseEvent) => {
|
|
186
|
+
if (!isSelecting.current) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
/*
|
|
190
|
+
* No button held: it came up somewhere no mouseup could be heard
|
|
191
|
+
* (outside the browser window, say). Abandon the selection.
|
|
192
|
+
*/
|
|
193
|
+
if (mouseEvent && mouseEvent.buttons === 0) {
|
|
194
|
+
clearSelection();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const rowIndex = getChartRowIndex(latest.current.data, latest.current.index, chartState);
|
|
198
|
+
if (rowIndex === null) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const startIndex = startIndexRef.current;
|
|
202
|
+
if (startIndex === null || getLabel(rowIndex) === null) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (!isBandShownRef.current) {
|
|
206
|
+
// Still on the pressed bucket: a click so far, so paint nothing.
|
|
207
|
+
if (rowIndex === startIndex) {
|
|
208
|
+
endIndexRef.current = rowIndex;
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
/*
|
|
212
|
+
* Another bucket under a pointer that has not really moved: new
|
|
213
|
+
* rows landed under the press, or a hand's drift crossed the edge
|
|
214
|
+
* of the bucket it pressed. Not a drag.
|
|
215
|
+
*/
|
|
216
|
+
if (!hasPointerMoved(mouseEvent)) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
endIndexRef.current = rowIndex;
|
|
221
|
+
/*
|
|
222
|
+
* The band runs between its buckets in row order, whichever way the
|
|
223
|
+
* drag goes: a bar chart draws x1 from the left edge of its bar and
|
|
224
|
+
* x2 to the right edge of its own, so a right-to-left drag in drag
|
|
225
|
+
* order left both end bars unshaded (and two neighbours none).
|
|
226
|
+
*/
|
|
227
|
+
const lowerLabel = getLabel(Math.min(startIndex, rowIndex));
|
|
228
|
+
const upperLabel = getLabel(Math.max(startIndex, rowIndex));
|
|
229
|
+
if (lowerLabel === null || upperLabel === null) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
isBandShownRef.current = true;
|
|
233
|
+
setSelectionStartLabel(lowerLabel);
|
|
234
|
+
setSelectionEndLabel(upperLabel);
|
|
235
|
+
}, [clearSelection, getLabel, hasPointerMoved]);
|
|
236
|
+
const onMouseUp = React.useCallback((chartState, mouseEvent) => {
|
|
237
|
+
var _a, _b;
|
|
238
|
+
// The end of a double-click's second press: the reset, nothing else.
|
|
239
|
+
if (doubleClickReset.onRelease(mouseEvent)) {
|
|
240
|
+
stopListeningForRelease();
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (!isSelecting.current) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
const releaseIndex = chartState
|
|
247
|
+
? getChartRowIndex(latest.current.data, latest.current.index, chartState)
|
|
248
|
+
: null;
|
|
249
|
+
const startIndex = startIndexRef.current;
|
|
250
|
+
const endIndex = releaseIndex !== null ? releaseIndex : endIndexRef.current;
|
|
251
|
+
const wasDragging = isBandShownRef.current;
|
|
252
|
+
clearSelection();
|
|
253
|
+
/*
|
|
254
|
+
* A press whose pointer stayed put is a plain click, whatever bucket
|
|
255
|
+
* recharts reports under it by now: new rows can land during the
|
|
256
|
+
* press, and a hand drifts across a bucket's edge.
|
|
257
|
+
*/
|
|
258
|
+
if (!wasDragging && !hasPointerMoved(mouseEvent)) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
/*
|
|
262
|
+
* A plain click (the pointer never left the starting bucket) must
|
|
263
|
+
* keep behaving exactly as before — only a real drag selects.
|
|
264
|
+
*/
|
|
265
|
+
if (startIndex === null || endIndex === null || startIndex === endIndex) {
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
/*
|
|
269
|
+
* The browser fires a click right after mouseup; swallow it so a
|
|
270
|
+
* drag doesn't also toggle a legend, dot or bar selection. Cleared
|
|
271
|
+
* on a timeout so a never-delivered click can't suppress a later
|
|
272
|
+
* one.
|
|
273
|
+
*/
|
|
274
|
+
suppressNextClickRef.current = true;
|
|
275
|
+
setTimeout(() => {
|
|
276
|
+
suppressNextClickRef.current = false;
|
|
277
|
+
}, 0);
|
|
278
|
+
const selectedWindow = getChartBucketWindow(latest.current.data, Math.min(startIndex, endIndex), Math.max(startIndex, endIndex));
|
|
279
|
+
if (!selectedWindow) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
(_b = (_a = latest.current).onTimeRangeSelect) === null || _b === void 0 ? void 0 : _b.call(_a, selectedWindow.start, selectedWindow.end);
|
|
283
|
+
}, [clearSelection, doubleClickReset, stopListeningForRelease]);
|
|
284
|
+
/*
|
|
285
|
+
* A press released outside the chart: the chart's own mouseup never
|
|
286
|
+
* fires, so listen on the window until the press ends. A release over
|
|
287
|
+
* the chart reaches the chart's handler first (React listens below the
|
|
288
|
+
* window), which ends the press and removes this listener before the
|
|
289
|
+
* window hears it. Added by the press rather than from render state so
|
|
290
|
+
* the press itself renders nothing (see above).
|
|
291
|
+
*/
|
|
292
|
+
const listenForReleaseOffChart = React.useCallback(() => {
|
|
293
|
+
stopListeningForRelease();
|
|
294
|
+
// No bucket off the chart, but the pointer's place and the click count.
|
|
295
|
+
const finishPressOutsideChart = (event) => {
|
|
296
|
+
onMouseUp(null, event);
|
|
297
|
+
};
|
|
298
|
+
releaseListenerRef.current = finishPressOutsideChart;
|
|
299
|
+
window.addEventListener("mouseup", finishPressOutsideChart);
|
|
300
|
+
}, [onMouseUp, stopListeningForRelease]);
|
|
301
|
+
const onMouseDown = React.useCallback((chartState, mouseEvent) => {
|
|
302
|
+
/*
|
|
303
|
+
* The second press of a double-click is the reset, on its release,
|
|
304
|
+
* wherever that is: the window hears a release off the chart, as for
|
|
305
|
+
* a drag below.
|
|
306
|
+
*/
|
|
307
|
+
if (doubleClickReset.onPress(mouseEvent)) {
|
|
308
|
+
clearSelection();
|
|
309
|
+
listenForReleaseOffChart();
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
/*
|
|
313
|
+
* Also on a chart that only resets: it takes presses to spot that
|
|
314
|
+
* second one, and selects nothing.
|
|
315
|
+
*/
|
|
316
|
+
if (!latest.current.canSelect) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
// Only the main button drags; a right-click opens a context menu.
|
|
320
|
+
if (mouseEvent && mouseEvent.button > 0) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
const rowIndex = getChartRowIndex(latest.current.data, latest.current.index, chartState);
|
|
324
|
+
if (rowIndex === null || getLabel(rowIndex) === null) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
clearSelection();
|
|
328
|
+
isSelecting.current = true;
|
|
329
|
+
startIndexRef.current = rowIndex;
|
|
330
|
+
endIndexRef.current = rowIndex;
|
|
331
|
+
pressClientXRef.current =
|
|
332
|
+
typeof (mouseEvent === null || mouseEvent === void 0 ? void 0 : mouseEvent.clientX) === "number" ? mouseEvent.clientX : null;
|
|
333
|
+
listenForReleaseOffChart();
|
|
334
|
+
}, [clearSelection, doubleClickReset, getLabel, listenForReleaseOffChart]);
|
|
335
|
+
// A chart unmounted mid-press stops listening for its release.
|
|
336
|
+
React.useEffect(() => {
|
|
337
|
+
return () => {
|
|
338
|
+
stopListeningForRelease();
|
|
339
|
+
};
|
|
340
|
+
}, [stopListeningForRelease]);
|
|
341
|
+
const isClickSuppressed = React.useCallback(() => {
|
|
342
|
+
return suppressNextClickRef.current;
|
|
343
|
+
}, []);
|
|
344
|
+
const resetEventProps = canReset
|
|
345
|
+
? { onDoubleClick: doubleClickReset.onDoubleClick }
|
|
346
|
+
: {};
|
|
347
|
+
let chartEventProps = {};
|
|
348
|
+
if (canSelect) {
|
|
349
|
+
chartEventProps = Object.assign({ onMouseDown: onMouseDown, onMouseMove: onMouseMove, onMouseUp: onMouseUp, throttledEvents: RANGE_SELECTION_THROTTLED_EVENTS,
|
|
350
|
+
/*
|
|
351
|
+
* The crosshair that says the plot can be dragged. It has to be on
|
|
352
|
+
* the chart root: recharts gives its wrapper, which fills the plot,
|
|
353
|
+
* an inline cursor: default that a class outside can't beat. Left
|
|
354
|
+
* off entirely otherwise - an explicit undefined would drop
|
|
355
|
+
* recharts' default too.
|
|
356
|
+
*/
|
|
357
|
+
style: RANGE_SELECTION_ROOT_STYLE }, resetEventProps);
|
|
358
|
+
}
|
|
359
|
+
else if (canReset) {
|
|
360
|
+
chartEventProps = Object.assign({ onMouseDown: onMouseDown, onMouseUp: onMouseUp }, resetEventProps);
|
|
361
|
+
}
|
|
362
|
+
return {
|
|
363
|
+
canSelect: canSelect,
|
|
364
|
+
selectionStartLabel: selectionStartLabel,
|
|
365
|
+
selectionEndLabel: selectionEndLabel,
|
|
366
|
+
isClickSuppressed: isClickSuppressed,
|
|
367
|
+
chartEventProps: chartEventProps,
|
|
368
|
+
};
|
|
369
|
+
};
|
|
370
|
+
export default useChartRangeSelection;
|
|
371
|
+
//# sourceMappingURL=UseChartRangeSelection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseChartRangeSelection.js","sourceRoot":"","sources":["../../../../../../../UI/Components/Charts/ChartLibrary/Utils/UseChartRangeSelection.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,9 @@ import { CHART_DATA_POINT_X_AXIS_KEY, } from "../ChartLibrary/Types/ChartDataPoi
|
|
|
4
4
|
import DataPointUtil from "../Utils/DataPoint";
|
|
5
5
|
import TimeAnnotationUtil from "../Utils/TimeAnnotation";
|
|
6
6
|
import XAxisUtil from "../Utils/XAxis";
|
|
7
|
+
import XAxisType from "../Types/XAxis/XAxisType";
|
|
7
8
|
import NoDataMessage from "../ChartGroup/NoDataMessage";
|
|
9
|
+
import { resolveChartTimeRangeZoom, useChartTimeRangeZoom, } from "../TimeRangeZoom/TimeRangeZoomContext";
|
|
8
10
|
export const LineChartPalette = [
|
|
9
11
|
"indigo",
|
|
10
12
|
"rose",
|
|
@@ -18,6 +20,19 @@ export const LineChartPalette = [
|
|
|
18
20
|
];
|
|
19
21
|
const LineChartElement = (props) => {
|
|
20
22
|
const [records, setRecords] = React.useState([]);
|
|
23
|
+
/*
|
|
24
|
+
* Drag-to-zoom: the host's own handlers, or else the enclosing page's
|
|
25
|
+
* (TimeRangeZoomScope), so a drag here retimes every chart on the page.
|
|
26
|
+
*/
|
|
27
|
+
const pageZoom = useChartTimeRangeZoom();
|
|
28
|
+
const timeRangeZoom = resolveChartTimeRangeZoom({
|
|
29
|
+
onTimeRangeSelect: props.onTimeRangeSelect,
|
|
30
|
+
onTimeRangeReset: props.onTimeRangeReset,
|
|
31
|
+
isTimeAxis: props.xAxis.options.type === XAxisType.Time ||
|
|
32
|
+
props.xAxis.options.type === XAxisType.Date,
|
|
33
|
+
disableTimeRangeZoom: props.disableTimeRangeZoom,
|
|
34
|
+
pageZoom: pageZoom,
|
|
35
|
+
});
|
|
21
36
|
const categories = props.data.map((item) => {
|
|
22
37
|
return item.seriesName;
|
|
23
38
|
});
|
|
@@ -108,7 +123,7 @@ const LineChartElement = (props) => {
|
|
|
108
123
|
? formattedTimeReferenceLines
|
|
109
124
|
: undefined, formattedReferenceRegions: formattedReferenceRegions.length > 0
|
|
110
125
|
? formattedReferenceRegions
|
|
111
|
-
: undefined, formattedExemplarPoints: formattedExemplars.length > 0 ? formattedExemplars : undefined, onExemplarClick: props.onExemplarClick, onTimeRangeSelect:
|
|
126
|
+
: undefined, formattedExemplarPoints: formattedExemplars.length > 0 ? formattedExemplars : undefined, onExemplarClick: props.onExemplarClick, onTimeRangeSelect: timeRangeZoom.onTimeRangeSelect, onTimeRangeReset: timeRangeZoom.onTimeRangeReset, onBucketClick: props.onBucketClick, ghostCategories: props.ghostSeriesNames })),
|
|
112
127
|
hasNoData && React.createElement(NoDataMessage, null)));
|
|
113
128
|
};
|
|
114
129
|
export default LineChartElement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineChart.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/Line/LineChart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAKhE,OAAO,KAAK,EAAE,EAGZ,SAAS,EACT,OAAO,GACR,MAAM,OAAO,CAAC;AAKf,OAAuB,EACrB,2BAA2B,GAC5B,MAAM,sCAAsC,CAAC;AAI9C,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AAKzD,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,aAAa,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"LineChart.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/Line/LineChart.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import IconProp from "../../../../Types/Icon/IconProp";
|
|
3
|
+
import TimeRange from "../../../../Types/Time/TimeRange";
|
|
4
|
+
import Icon from "../../Icon/Icon";
|
|
5
|
+
import { isTimeRangeZoomFor, useChartTimeRangeZoom, } from "./TimeRangeZoomContext";
|
|
6
|
+
export const RESET_TIME_RANGE_ZOOM_BUTTON_TEST_ID = "reset-time-range-zoom";
|
|
7
|
+
/**
|
|
8
|
+
* "Reset zoom", shown only while the enclosing page is zoomed. The same
|
|
9
|
+
* thing a double-click on any chart does, for readers who do not know that
|
|
10
|
+
* gesture and for keyboard users, who cannot perform it.
|
|
11
|
+
*
|
|
12
|
+
* Renders nothing outside a zoomable page or while the page is not zoomed.
|
|
13
|
+
*/
|
|
14
|
+
const ResetTimeRangeZoomButton = (props) => {
|
|
15
|
+
var _a;
|
|
16
|
+
const zoom = useChartTimeRangeZoom();
|
|
17
|
+
if (!zoom || !zoom.isZoomed || !zoom.onTimeRangeReset) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
if (props.forTimeRange && !isTimeRangeZoomFor(zoom, props.forTimeRange)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const onTimeRangeReset = zoom.onTimeRangeReset;
|
|
24
|
+
const previousRange = (_a = zoom.rangeBeforeZoom) === null || _a === void 0 ? void 0 : _a.range;
|
|
25
|
+
const title = previousRange && previousRange !== TimeRange.CUSTOM
|
|
26
|
+
? `Go back to ${previousRange}, the time range before the zoom`
|
|
27
|
+
: "Go back to the time range before the zoom";
|
|
28
|
+
return (React.createElement("button", { type: "button", "data-testid": RESET_TIME_RANGE_ZOOM_BUTTON_TEST_ID, className: `inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-md px-1.5 py-1 text-xs font-medium text-indigo-600 transition-colors hover:bg-indigo-50 hover:text-indigo-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-400 ${props.className || ""}`, title: title, "aria-label": "Reset zoom", onClick: () => {
|
|
29
|
+
onTimeRangeReset();
|
|
30
|
+
} },
|
|
31
|
+
React.createElement(Icon, { icon: IconProp.MagnifyingGlassMinus, className: "h-3.5 w-3.5" }),
|
|
32
|
+
"Reset zoom"));
|
|
33
|
+
};
|
|
34
|
+
export default ResetTimeRangeZoomButton;
|
|
35
|
+
//# sourceMappingURL=ResetTimeRangeZoomButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResetTimeRangeZoomButton.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAC/D,OAAO,QAAQ,MAAM,iCAAiC,CAAC;AAEvD,OAAO,SAAS,MAAM,kCAAkC,CAAC;AACzD,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,EAEL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,oCAAoC,GAC/C,uBAAuB,CAAC;AAa1B;;;;;;GAMG;AACH,MAAM,wBAAwB,GAAsC,CAClE,KAAqB,EACA,EAAE;;IACvB,MAAM,IAAI,GAA0C,qBAAqB,EAAE,CAAC;IAE5E,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,gBAAgB,GAAe,IAAI,CAAC,gBAAgB,CAAC;IAC3D,MAAM,aAAa,GAA0B,MAAA,IAAI,CAAC,eAAe,0CAAE,KAAK,CAAC;IACzE,MAAM,KAAK,GACT,aAAa,IAAI,aAAa,KAAK,SAAS,CAAC,MAAM;QACjD,CAAC,CAAC,cAAc,aAAa,kCAAkC;QAC/D,CAAC,CAAC,2CAA2C,CAAC;IAElD,OAAO,CACL,gCACE,IAAI,EAAC,QAAQ,iBACA,oCAAoC,EACjD,SAAS,EAAE,yPAAyP,KAAK,CAAC,SAAS,IAAI,EAAE,EAAE,EAC3R,KAAK,EAAE,KAAK,gBACD,YAAY,EACvB,OAAO,EAAE,GAAG,EAAE;YACZ,gBAAgB,EAAE,CAAC;QACrB,CAAC;QAED,oBAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,CAAC,oBAAoB,EAAE,SAAS,EAAC,aAAa,GAAG;qBAE9D,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import React, { useContext, useMemo, useRef, } from "react";
|
|
2
|
+
import useTimeRangeZoom from "./UseTimeRangeZoom";
|
|
3
|
+
import TimeRangeZoomUtil from "./TimeRangeZoomUtil";
|
|
4
|
+
const ChartTimeRangeZoomContext = React.createContext(null);
|
|
5
|
+
/** The zoom the nearest page (or panel) offers, or null when none does. */
|
|
6
|
+
export const useChartTimeRangeZoom = () => {
|
|
7
|
+
return useContext(ChartTimeRangeZoomContext);
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Offers a zoom (from useTimeRangeZoom) to every chart below. Use it when
|
|
11
|
+
* the page needs the zoom itself too, e.g. to show a reset button of its
|
|
12
|
+
* own; otherwise TimeRangeZoomScope is the one-liner.
|
|
13
|
+
*/
|
|
14
|
+
export const TimeRangeZoomProvider = (props) => {
|
|
15
|
+
const zoom = props.zoom;
|
|
16
|
+
const onTimeRangeSelect = zoom ? zoom.zoomToTimeRange : null;
|
|
17
|
+
const resetZoom = zoom ? zoom.resetZoom : null;
|
|
18
|
+
const isZoomed = Boolean(zoom === null || zoom === void 0 ? void 0 : zoom.isZoomed);
|
|
19
|
+
const rangeBeforeZoom = (zoom === null || zoom === void 0 ? void 0 : zoom.rangeBeforeZoom) || null;
|
|
20
|
+
/*
|
|
21
|
+
* Kept by value: a page that builds its range inline would otherwise
|
|
22
|
+
* hand every chart a new context on every render.
|
|
23
|
+
*/
|
|
24
|
+
const stableTimeRange = useRef((zoom === null || zoom === void 0 ? void 0 : zoom.timeRange) || null);
|
|
25
|
+
if (!TimeRangeZoomUtil.isSameRange(stableTimeRange.current, (zoom === null || zoom === void 0 ? void 0 : zoom.timeRange) || null)) {
|
|
26
|
+
stableTimeRange.current = (zoom === null || zoom === void 0 ? void 0 : zoom.timeRange) || null;
|
|
27
|
+
}
|
|
28
|
+
const timeRange = stableTimeRange.current;
|
|
29
|
+
const value = useMemo(() => {
|
|
30
|
+
if (!onTimeRangeSelect || !resetZoom) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
onTimeRangeSelect: onTimeRangeSelect,
|
|
35
|
+
onTimeRangeReset: isZoomed ? resetZoom : undefined,
|
|
36
|
+
isZoomed: isZoomed,
|
|
37
|
+
rangeBeforeZoom: rangeBeforeZoom,
|
|
38
|
+
timeRange: timeRange,
|
|
39
|
+
};
|
|
40
|
+
}, [onTimeRangeSelect, resetZoom, isZoomed, rangeBeforeZoom, timeRange]);
|
|
41
|
+
return (React.createElement(ChartTimeRangeZoomContext.Provider, { value: value }, props.children));
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Makes every time-series chart inside it zoom the page: a drag on any of
|
|
45
|
+
* them sets the page's range to the window dragged out, a double-click on
|
|
46
|
+
* any of them puts the previous range back, and the page's time picker
|
|
47
|
+
* offers a "Reset zoom" button while it is zoomed.
|
|
48
|
+
*
|
|
49
|
+
* <TimeRangeZoomScope timeRange={timeRange} onTimeRangeChange={setTimeRange}>
|
|
50
|
+
* ...the page...
|
|
51
|
+
* </TimeRangeZoomScope>
|
|
52
|
+
*
|
|
53
|
+
* Wrap the page's picker too, so it can show the reset button.
|
|
54
|
+
*/
|
|
55
|
+
export const TimeRangeZoomScope = (props) => {
|
|
56
|
+
const zoom = useTimeRangeZoom({
|
|
57
|
+
timeRange: props.timeRange,
|
|
58
|
+
onTimeRangeChange: props.onTimeRangeChange,
|
|
59
|
+
});
|
|
60
|
+
return (React.createElement(TimeRangeZoomProvider, { zoom: zoom }, props.children));
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Whether a zoom is over the given range. A zoom that did not say which
|
|
64
|
+
* range it works over is taken to be over any; see
|
|
65
|
+
* ChartTimeRangeZoomContextValue.timeRange.
|
|
66
|
+
*/
|
|
67
|
+
export const isTimeRangeZoomFor = (zoom, timeRange) => {
|
|
68
|
+
if (!zoom) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
if (!zoom.timeRange) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return TimeRangeZoomUtil.isSameRange(zoom.timeRange, timeRange);
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Which zoom handlers a chart ends up with.
|
|
78
|
+
*
|
|
79
|
+
* - disableTimeRangeZoom: none at all.
|
|
80
|
+
* - A host that passes either handler owns zooming for that chart: it gets
|
|
81
|
+
* exactly what the host passed. A host that zooms its own way also resets
|
|
82
|
+
* its own way; borrowing the page's reset would undo a zoom the chart did
|
|
83
|
+
* not make, and borrowing the page's zoom would make a reset-only chart
|
|
84
|
+
* (a dashboard bar panel) retime something its host does not know about.
|
|
85
|
+
* - Otherwise a time-axis chart takes the page's zoom, if the page offers
|
|
86
|
+
* one.
|
|
87
|
+
*/
|
|
88
|
+
export const resolveChartTimeRangeZoom = (input) => {
|
|
89
|
+
if (input.disableTimeRangeZoom) {
|
|
90
|
+
return { onTimeRangeSelect: undefined, onTimeRangeReset: undefined };
|
|
91
|
+
}
|
|
92
|
+
if (input.onTimeRangeSelect || input.onTimeRangeReset) {
|
|
93
|
+
return {
|
|
94
|
+
onTimeRangeSelect: input.onTimeRangeSelect,
|
|
95
|
+
onTimeRangeReset: input.onTimeRangeReset,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (input.isTimeAxis && input.pageZoom) {
|
|
99
|
+
return {
|
|
100
|
+
onTimeRangeSelect: input.pageZoom.onTimeRangeSelect,
|
|
101
|
+
onTimeRangeReset: input.pageZoom.onTimeRangeReset,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return { onTimeRangeSelect: undefined, onTimeRangeReset: undefined };
|
|
105
|
+
};
|
|
106
|
+
export default ChartTimeRangeZoomContext;
|
|
107
|
+
//# sourceMappingURL=TimeRangeZoomContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeRangeZoomContext.js","sourceRoot":"","sources":["../../../../../../UI/Components/Charts/TimeRangeZoom/TimeRangeZoomContext.tsx"],"names":[],"mappings":"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"}
|