@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
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Calls `onChange` when a chart is redrawn over other buckets (a zoom, a
|
|
5
|
+
* reset, a new range), before the browser paints, and never on the first
|
|
6
|
+
* render. The buckets are the labels the chart draws on its x-axis.
|
|
7
|
+
*
|
|
8
|
+
* A chart's click selections (a dot, a bar) point at the buckets they were
|
|
9
|
+
* made on; once those are gone the selection matches nothing, and a
|
|
10
|
+
* selection that dims the rest of the chart would dim all of it.
|
|
11
|
+
*/
|
|
12
|
+
export default function useChartBucketsChange(
|
|
13
|
+
categoryLabels: Array<string>,
|
|
14
|
+
onChange: () => void,
|
|
15
|
+
): void {
|
|
16
|
+
const bucketKey: string = React.useMemo((): string => {
|
|
17
|
+
return categoryLabels.join("\u0000");
|
|
18
|
+
}, [categoryLabels]);
|
|
19
|
+
const lastBucketKeyRef: React.MutableRefObject<string> =
|
|
20
|
+
React.useRef<string>(bucketKey);
|
|
21
|
+
const onChangeRef: React.MutableRefObject<() => void> =
|
|
22
|
+
React.useRef<() => void>(onChange);
|
|
23
|
+
onChangeRef.current = onChange;
|
|
24
|
+
|
|
25
|
+
React.useLayoutEffect(() => {
|
|
26
|
+
if (lastBucketKeyRef.current === bucketKey) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
lastBucketKeyRef.current = bucketKey;
|
|
30
|
+
onChangeRef.current();
|
|
31
|
+
}, [bucketKey]);
|
|
32
|
+
}
|
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { CHART_DATA_POINT_DATE_KEY } from "../Types/ChartDataPoint";
|
|
3
|
+
import {
|
|
4
|
+
ChartPointerEvent,
|
|
5
|
+
DoubleClickReset,
|
|
6
|
+
useDoubleClickReset,
|
|
7
|
+
} from "./DoubleClick";
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* How far the pointer may wander from where it was pressed and still be a
|
|
11
|
+
* pointer that has not moved: a hand on a mouse or a trackpad is never
|
|
12
|
+
* quite still, and a press that drifts a pixel or two across the edge of a
|
|
13
|
+
* bucket is still a click.
|
|
14
|
+
*/
|
|
15
|
+
export const CHART_PRESS_STILLNESS_PX: number = 3;
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* Subset of the recharts MouseHandlerDataParam passed to chart-level
|
|
19
|
+
* mouse handlers — just the fields range selection needs.
|
|
20
|
+
*/
|
|
21
|
+
export type RangeSelectionChartState = {
|
|
22
|
+
activeTooltipIndex?: number | string | null | undefined;
|
|
23
|
+
activeLabel?: string | number | undefined;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export interface ChartBucketWindow {
|
|
27
|
+
start: Date;
|
|
28
|
+
end: Date;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type ChartRows = Array<Record<string, unknown>>;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The row under the pointer: recharts' active tooltip index when it is a
|
|
35
|
+
* valid row, else the row whose label matches recharts' active label.
|
|
36
|
+
*/
|
|
37
|
+
export function getChartRowIndex(
|
|
38
|
+
data: ChartRows,
|
|
39
|
+
index: string,
|
|
40
|
+
chartState: RangeSelectionChartState | null | undefined,
|
|
41
|
+
): number | null {
|
|
42
|
+
const activeTooltipIndex: number | string | null | undefined =
|
|
43
|
+
chartState?.activeTooltipIndex;
|
|
44
|
+
const numericIndex: number =
|
|
45
|
+
typeof activeTooltipIndex === "number"
|
|
46
|
+
? activeTooltipIndex
|
|
47
|
+
: Number(activeTooltipIndex);
|
|
48
|
+
if (
|
|
49
|
+
activeTooltipIndex !== undefined &&
|
|
50
|
+
activeTooltipIndex !== null &&
|
|
51
|
+
activeTooltipIndex !== "" &&
|
|
52
|
+
Number.isInteger(numericIndex) &&
|
|
53
|
+
numericIndex >= 0 &&
|
|
54
|
+
numericIndex < data.length
|
|
55
|
+
) {
|
|
56
|
+
return numericIndex;
|
|
57
|
+
}
|
|
58
|
+
// Fall back to matching activeLabel against the row labels.
|
|
59
|
+
if (chartState?.activeLabel !== undefined) {
|
|
60
|
+
const rowIndex: number = data.findIndex((row: Record<string, unknown>) => {
|
|
61
|
+
return row[index] === chartState.activeLabel;
|
|
62
|
+
});
|
|
63
|
+
return rowIndex >= 0 ? rowIndex : null;
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** When a row's bucket starts, from the epoch ms every row carries. */
|
|
69
|
+
export function getChartBucketStart(
|
|
70
|
+
data: ChartRows,
|
|
71
|
+
rowIndex: number,
|
|
72
|
+
): Date | null {
|
|
73
|
+
const rawDate: unknown = data[rowIndex]?.[CHART_DATA_POINT_DATE_KEY];
|
|
74
|
+
return typeof rawDate === "number" ? new Date(rawDate) : null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* The time rows lowerIndex..upperIndex cover: from the start of the first
|
|
79
|
+
* bucket to the END of the last one. Its end is its start plus one bucket
|
|
80
|
+
* width, derived from the adjacent row (the rows are an evenly spaced
|
|
81
|
+
* grid). A single row with no neighbour has no known width.
|
|
82
|
+
*/
|
|
83
|
+
export function getChartBucketWindow(
|
|
84
|
+
data: ChartRows,
|
|
85
|
+
lowerIndex: number,
|
|
86
|
+
upperIndex: number,
|
|
87
|
+
): ChartBucketWindow | null {
|
|
88
|
+
const start: Date | null = getChartBucketStart(data, lowerIndex);
|
|
89
|
+
const lastBucketStart: Date | null = getChartBucketStart(data, upperIndex);
|
|
90
|
+
if (!start || !lastBucketStart) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const adjacentDate: Date | null =
|
|
95
|
+
upperIndex > 0
|
|
96
|
+
? getChartBucketStart(data, upperIndex - 1)
|
|
97
|
+
: getChartBucketStart(data, upperIndex + 1);
|
|
98
|
+
const bucketWidthInMs: number = adjacentDate
|
|
99
|
+
? Math.abs(lastBucketStart.getTime() - adjacentDate.getTime())
|
|
100
|
+
: 0;
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
start: start,
|
|
104
|
+
end: new Date(lastBucketStart.getTime() + bucketWidthInMs),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface UseChartRangeSelectionOptions {
|
|
109
|
+
data: ChartRows;
|
|
110
|
+
/** The row key recharts draws the x-axis from (the formatted label). */
|
|
111
|
+
index: string;
|
|
112
|
+
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
113
|
+
/*
|
|
114
|
+
* false turns selection off even with a handler: a vertical bar chart
|
|
115
|
+
* has its categories on the y-axis, so there is no time to drag across.
|
|
116
|
+
*/
|
|
117
|
+
enabled?: boolean | undefined;
|
|
118
|
+
/*
|
|
119
|
+
* What a double-click on the chart does while it offers one (a zoom to
|
|
120
|
+
* undo), including dropping any plot click it is holding back. With it,
|
|
121
|
+
* chartEventProps carries the chart's dblclick handler and the second
|
|
122
|
+
* press of a double-click is the reset, never a selection (see
|
|
123
|
+
* useDoubleClickReset).
|
|
124
|
+
*/
|
|
125
|
+
onTimeRangeReset?: (() => void) | undefined;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* The events recharts may hold for the next animation frame on a chart that
|
|
130
|
+
* offers a drag: its defaults, less "mousemove".
|
|
131
|
+
*
|
|
132
|
+
* recharts works out the bucket under the pointer a frame after each
|
|
133
|
+
* mousemove, but hands mousedown and mouseup to the chart at once, with
|
|
134
|
+
* the bucket it last worked out. So a drag released in the frame of its
|
|
135
|
+
* last move lost the buckets that move crossed, and a press in the frame
|
|
136
|
+
* the pointer arrived started one bucket early, or was dropped outright
|
|
137
|
+
* when the move queued before it (no button held yet) landed after it.
|
|
138
|
+
* Browsers already coalesce mousemove to about one a frame, so taking it
|
|
139
|
+
* at once costs no extra renders.
|
|
140
|
+
*/
|
|
141
|
+
export const RANGE_SELECTION_THROTTLED_EVENTS: ReadonlyArray<
|
|
142
|
+
keyof GlobalEventHandlersEventMap
|
|
143
|
+
> = ["touchmove", "pointermove", "scroll", "wheel"];
|
|
144
|
+
|
|
145
|
+
const RANGE_SELECTION_ROOT_STYLE: React.CSSProperties = {
|
|
146
|
+
cursor: "crosshair",
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export interface ChartRangeSelectionRootProps {
|
|
150
|
+
onMouseDown?: (
|
|
151
|
+
chartState: RangeSelectionChartState,
|
|
152
|
+
mouseEvent?: React.MouseEvent<SVGGraphicsElement>,
|
|
153
|
+
) => void;
|
|
154
|
+
onMouseMove?: (
|
|
155
|
+
chartState: RangeSelectionChartState,
|
|
156
|
+
mouseEvent: React.MouseEvent<SVGGraphicsElement>,
|
|
157
|
+
) => void;
|
|
158
|
+
onMouseUp?: (
|
|
159
|
+
chartState?: RangeSelectionChartState | null,
|
|
160
|
+
mouseEvent?: ChartPointerEvent | null,
|
|
161
|
+
) => void;
|
|
162
|
+
onDoubleClick?: () => void;
|
|
163
|
+
throttledEvents?: ReadonlyArray<keyof GlobalEventHandlersEventMap>;
|
|
164
|
+
style?: React.CSSProperties;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export interface ChartRangeSelection {
|
|
168
|
+
/** Whether the chart offers drag-to-select at all. */
|
|
169
|
+
canSelect: boolean;
|
|
170
|
+
/*
|
|
171
|
+
* Labels of the first and last bucket (in row order) the live selection
|
|
172
|
+
* band spans, or null.
|
|
173
|
+
*/
|
|
174
|
+
selectionStartLabel: string | null;
|
|
175
|
+
selectionEndLabel: string | null;
|
|
176
|
+
/*
|
|
177
|
+
* True for the click the browser delivers straight after a drag, which
|
|
178
|
+
* must not also toggle a legend, dot or bar selection.
|
|
179
|
+
*/
|
|
180
|
+
isClickSuppressed: () => boolean;
|
|
181
|
+
/*
|
|
182
|
+
* Spread onto the recharts chart root. Empty when the chart neither
|
|
183
|
+
* selects nor resets.
|
|
184
|
+
*/
|
|
185
|
+
chartEventProps: ChartRangeSelectionRootProps;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
interface LatestRangeSelectionInputs {
|
|
189
|
+
data: ChartRows;
|
|
190
|
+
index: string;
|
|
191
|
+
onTimeRangeSelect: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
192
|
+
canSelect: boolean;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Drag-to-select a time window on the line, area and bar charts.
|
|
197
|
+
*
|
|
198
|
+
* - A drag across buckets selects from the start of the first to the END
|
|
199
|
+
* of the last, as soon as the button is released.
|
|
200
|
+
* - A press and release on one bucket is a plain click and keeps its
|
|
201
|
+
* meaning (a bucket click, a legend toggle); only a real drag selects.
|
|
202
|
+
* A drag needs the pointer itself to move, by more than
|
|
203
|
+
* CHART_PRESS_STILLNESS_PX: a press whose bucket changes under a still
|
|
204
|
+
* pointer (new rows landing mid-press, a hand's drift across a bucket's
|
|
205
|
+
* edge) is still a plain click.
|
|
206
|
+
* - Nothing re-renders until the pointer leaves the bucket it pressed. A
|
|
207
|
+
* render under a press can replace the node it landed on (recharts
|
|
208
|
+
* re-keys a line's dots when it redraws them), and a press whose node
|
|
209
|
+
* is gone by the release gets no click and no dblclick - so a
|
|
210
|
+
* double-click on a line never reached the chart's zoom reset.
|
|
211
|
+
* - The release is resolved from the bucket recharts reports under the
|
|
212
|
+
* pointer at mouseup, falling back to the last move. The chart takes
|
|
213
|
+
* mousemove unthrottled (RANGE_SELECTION_THROTTLED_EVENTS), so that
|
|
214
|
+
* bucket is the one under the pointer now, not a frame ago.
|
|
215
|
+
* - A drag released outside the chart still selects: readers overshoot a
|
|
216
|
+
* 180px-tall chart all the time, and the chart's own mouseup never fires
|
|
217
|
+
* there. Before, the drag was abandoned and its band stayed painted until
|
|
218
|
+
* the pointer came back.
|
|
219
|
+
* - The click the browser fires after a drag is reported as suppressed.
|
|
220
|
+
* - With onTimeRangeReset, the second press of a double-click is the reset
|
|
221
|
+
* and never a selection, and it resets even when the browser drops the
|
|
222
|
+
* `dblclick` because the chart's new data re-keyed the node under the
|
|
223
|
+
* press (see useDoubleClickReset).
|
|
224
|
+
*/
|
|
225
|
+
const useChartRangeSelection: (
|
|
226
|
+
options: UseChartRangeSelectionOptions,
|
|
227
|
+
) => ChartRangeSelection = (
|
|
228
|
+
options: UseChartRangeSelectionOptions,
|
|
229
|
+
): ChartRangeSelection => {
|
|
230
|
+
const canSelect: boolean =
|
|
231
|
+
Boolean(options.onTimeRangeSelect) && options.enabled !== false;
|
|
232
|
+
const canReset: boolean = Boolean(options.onTimeRangeReset);
|
|
233
|
+
const doubleClickReset: DoubleClickReset = useDoubleClickReset(
|
|
234
|
+
options.onTimeRangeReset,
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
const [selectionStartLabel, setSelectionStartLabel] = React.useState<
|
|
238
|
+
string | null
|
|
239
|
+
>(null);
|
|
240
|
+
const [selectionEndLabel, setSelectionEndLabel] = React.useState<
|
|
241
|
+
string | null
|
|
242
|
+
>(null);
|
|
243
|
+
|
|
244
|
+
/*
|
|
245
|
+
* The refs, not render state, are the authority on a selection in
|
|
246
|
+
* progress: a release can be seen twice (the chart's own mouseup and the
|
|
247
|
+
* page-wide listener below) and must only commit once.
|
|
248
|
+
*/
|
|
249
|
+
const isSelecting: React.MutableRefObject<boolean> =
|
|
250
|
+
React.useRef<boolean>(false);
|
|
251
|
+
const startIndexRef: React.MutableRefObject<number | null> = React.useRef<
|
|
252
|
+
number | null
|
|
253
|
+
>(null);
|
|
254
|
+
const endIndexRef: React.MutableRefObject<number | null> = React.useRef<
|
|
255
|
+
number | null
|
|
256
|
+
>(null);
|
|
257
|
+
const suppressNextClickRef: React.MutableRefObject<boolean> =
|
|
258
|
+
React.useRef<boolean>(false);
|
|
259
|
+
// Whether the band is painted, i.e. the selection is in render state.
|
|
260
|
+
const isBandShownRef: React.MutableRefObject<boolean> =
|
|
261
|
+
React.useRef<boolean>(false);
|
|
262
|
+
// Where the press in progress went down, when recharts said.
|
|
263
|
+
const pressClientXRef: React.MutableRefObject<number | null> = React.useRef<
|
|
264
|
+
number | null
|
|
265
|
+
>(null);
|
|
266
|
+
// The page-wide mouseup listener of the press in progress, if any.
|
|
267
|
+
const releaseListenerRef: React.MutableRefObject<
|
|
268
|
+
((event: MouseEvent) => void) | null
|
|
269
|
+
> = React.useRef<((event: MouseEvent) => void) | null>(null);
|
|
270
|
+
|
|
271
|
+
/*
|
|
272
|
+
* A release outside the chart is handled by a window listener installed
|
|
273
|
+
* a render earlier, so it reads the latest rows and handler from here.
|
|
274
|
+
*/
|
|
275
|
+
const latest: React.MutableRefObject<LatestRangeSelectionInputs> =
|
|
276
|
+
React.useRef<LatestRangeSelectionInputs>({
|
|
277
|
+
data: options.data,
|
|
278
|
+
index: options.index,
|
|
279
|
+
onTimeRangeSelect: options.onTimeRangeSelect,
|
|
280
|
+
canSelect: canSelect,
|
|
281
|
+
});
|
|
282
|
+
latest.current = {
|
|
283
|
+
data: options.data,
|
|
284
|
+
index: options.index,
|
|
285
|
+
onTimeRangeSelect: options.onTimeRangeSelect,
|
|
286
|
+
canSelect: canSelect,
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
const stopListeningForRelease: () => void = React.useCallback((): void => {
|
|
290
|
+
if (releaseListenerRef.current) {
|
|
291
|
+
window.removeEventListener("mouseup", releaseListenerRef.current);
|
|
292
|
+
releaseListenerRef.current = null;
|
|
293
|
+
}
|
|
294
|
+
}, []);
|
|
295
|
+
|
|
296
|
+
const clearSelection: () => void = React.useCallback((): void => {
|
|
297
|
+
isSelecting.current = false;
|
|
298
|
+
startIndexRef.current = null;
|
|
299
|
+
endIndexRef.current = null;
|
|
300
|
+
stopListeningForRelease();
|
|
301
|
+
// A press that never became a drag painted nothing: leave render alone.
|
|
302
|
+
if (isBandShownRef.current) {
|
|
303
|
+
isBandShownRef.current = false;
|
|
304
|
+
setSelectionStartLabel(null);
|
|
305
|
+
setSelectionEndLabel(null);
|
|
306
|
+
}
|
|
307
|
+
}, [stopListeningForRelease]);
|
|
308
|
+
|
|
309
|
+
/*
|
|
310
|
+
* Whether the pointer has left the spot the press went down on. Without
|
|
311
|
+
* positions to go by (a caller that hands no event), it has: any change
|
|
312
|
+
* of bucket counts, as it always did.
|
|
313
|
+
*/
|
|
314
|
+
const hasPointerMoved: (event?: ChartPointerEvent | null) => boolean =
|
|
315
|
+
React.useCallback((event?: ChartPointerEvent | null): boolean => {
|
|
316
|
+
const clientX: number | undefined = event?.clientX;
|
|
317
|
+
|
|
318
|
+
if (pressClientXRef.current === null || typeof clientX !== "number") {
|
|
319
|
+
return true;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return (
|
|
323
|
+
Math.abs(clientX - pressClientXRef.current) > CHART_PRESS_STILLNESS_PX
|
|
324
|
+
);
|
|
325
|
+
}, []);
|
|
326
|
+
|
|
327
|
+
const getLabel: (rowIndex: number) => string | null = React.useCallback(
|
|
328
|
+
(rowIndex: number): string | null => {
|
|
329
|
+
const label: unknown =
|
|
330
|
+
latest.current.data[rowIndex]?.[latest.current.index];
|
|
331
|
+
return typeof label === "string" ? label : null;
|
|
332
|
+
},
|
|
333
|
+
[],
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
const onMouseMove: (
|
|
337
|
+
chartState: RangeSelectionChartState,
|
|
338
|
+
mouseEvent: React.MouseEvent<SVGGraphicsElement>,
|
|
339
|
+
) => void = React.useCallback(
|
|
340
|
+
(
|
|
341
|
+
chartState: RangeSelectionChartState,
|
|
342
|
+
mouseEvent: React.MouseEvent<SVGGraphicsElement>,
|
|
343
|
+
): void => {
|
|
344
|
+
if (!isSelecting.current) {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
/*
|
|
348
|
+
* No button held: it came up somewhere no mouseup could be heard
|
|
349
|
+
* (outside the browser window, say). Abandon the selection.
|
|
350
|
+
*/
|
|
351
|
+
if (mouseEvent && mouseEvent.buttons === 0) {
|
|
352
|
+
clearSelection();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
const rowIndex: number | null = getChartRowIndex(
|
|
356
|
+
latest.current.data,
|
|
357
|
+
latest.current.index,
|
|
358
|
+
chartState,
|
|
359
|
+
);
|
|
360
|
+
if (rowIndex === null) {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
const startIndex: number | null = startIndexRef.current;
|
|
364
|
+
if (startIndex === null || getLabel(rowIndex) === null) {
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
if (!isBandShownRef.current) {
|
|
368
|
+
// Still on the pressed bucket: a click so far, so paint nothing.
|
|
369
|
+
if (rowIndex === startIndex) {
|
|
370
|
+
endIndexRef.current = rowIndex;
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
/*
|
|
374
|
+
* Another bucket under a pointer that has not really moved: new
|
|
375
|
+
* rows landed under the press, or a hand's drift crossed the edge
|
|
376
|
+
* of the bucket it pressed. Not a drag.
|
|
377
|
+
*/
|
|
378
|
+
if (!hasPointerMoved(mouseEvent)) {
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
endIndexRef.current = rowIndex;
|
|
383
|
+
/*
|
|
384
|
+
* The band runs between its buckets in row order, whichever way the
|
|
385
|
+
* drag goes: a bar chart draws x1 from the left edge of its bar and
|
|
386
|
+
* x2 to the right edge of its own, so a right-to-left drag in drag
|
|
387
|
+
* order left both end bars unshaded (and two neighbours none).
|
|
388
|
+
*/
|
|
389
|
+
const lowerLabel: string | null = getLabel(
|
|
390
|
+
Math.min(startIndex, rowIndex),
|
|
391
|
+
);
|
|
392
|
+
const upperLabel: string | null = getLabel(
|
|
393
|
+
Math.max(startIndex, rowIndex),
|
|
394
|
+
);
|
|
395
|
+
if (lowerLabel === null || upperLabel === null) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
isBandShownRef.current = true;
|
|
399
|
+
setSelectionStartLabel(lowerLabel);
|
|
400
|
+
setSelectionEndLabel(upperLabel);
|
|
401
|
+
},
|
|
402
|
+
[clearSelection, getLabel, hasPointerMoved],
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
const onMouseUp: (
|
|
406
|
+
chartState?: RangeSelectionChartState | null,
|
|
407
|
+
mouseEvent?: ChartPointerEvent | null,
|
|
408
|
+
) => void = React.useCallback(
|
|
409
|
+
(
|
|
410
|
+
chartState?: RangeSelectionChartState | null,
|
|
411
|
+
mouseEvent?: ChartPointerEvent | null,
|
|
412
|
+
): void => {
|
|
413
|
+
// The end of a double-click's second press: the reset, nothing else.
|
|
414
|
+
if (doubleClickReset.onRelease(mouseEvent)) {
|
|
415
|
+
stopListeningForRelease();
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
if (!isSelecting.current) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const releaseIndex: number | null = chartState
|
|
424
|
+
? getChartRowIndex(
|
|
425
|
+
latest.current.data,
|
|
426
|
+
latest.current.index,
|
|
427
|
+
chartState,
|
|
428
|
+
)
|
|
429
|
+
: null;
|
|
430
|
+
const startIndex: number | null = startIndexRef.current;
|
|
431
|
+
const endIndex: number | null =
|
|
432
|
+
releaseIndex !== null ? releaseIndex : endIndexRef.current;
|
|
433
|
+
const wasDragging: boolean = isBandShownRef.current;
|
|
434
|
+
clearSelection();
|
|
435
|
+
|
|
436
|
+
/*
|
|
437
|
+
* A press whose pointer stayed put is a plain click, whatever bucket
|
|
438
|
+
* recharts reports under it by now: new rows can land during the
|
|
439
|
+
* press, and a hand drifts across a bucket's edge.
|
|
440
|
+
*/
|
|
441
|
+
if (!wasDragging && !hasPointerMoved(mouseEvent)) {
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/*
|
|
446
|
+
* A plain click (the pointer never left the starting bucket) must
|
|
447
|
+
* keep behaving exactly as before — only a real drag selects.
|
|
448
|
+
*/
|
|
449
|
+
if (startIndex === null || endIndex === null || startIndex === endIndex) {
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/*
|
|
454
|
+
* The browser fires a click right after mouseup; swallow it so a
|
|
455
|
+
* drag doesn't also toggle a legend, dot or bar selection. Cleared
|
|
456
|
+
* on a timeout so a never-delivered click can't suppress a later
|
|
457
|
+
* one.
|
|
458
|
+
*/
|
|
459
|
+
suppressNextClickRef.current = true;
|
|
460
|
+
setTimeout(() => {
|
|
461
|
+
suppressNextClickRef.current = false;
|
|
462
|
+
}, 0);
|
|
463
|
+
|
|
464
|
+
const selectedWindow: ChartBucketWindow | null = getChartBucketWindow(
|
|
465
|
+
latest.current.data,
|
|
466
|
+
Math.min(startIndex, endIndex),
|
|
467
|
+
Math.max(startIndex, endIndex),
|
|
468
|
+
);
|
|
469
|
+
if (!selectedWindow) {
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
latest.current.onTimeRangeSelect?.(
|
|
474
|
+
selectedWindow.start,
|
|
475
|
+
selectedWindow.end,
|
|
476
|
+
);
|
|
477
|
+
},
|
|
478
|
+
[clearSelection, doubleClickReset, stopListeningForRelease],
|
|
479
|
+
);
|
|
480
|
+
|
|
481
|
+
/*
|
|
482
|
+
* A press released outside the chart: the chart's own mouseup never
|
|
483
|
+
* fires, so listen on the window until the press ends. A release over
|
|
484
|
+
* the chart reaches the chart's handler first (React listens below the
|
|
485
|
+
* window), which ends the press and removes this listener before the
|
|
486
|
+
* window hears it. Added by the press rather than from render state so
|
|
487
|
+
* the press itself renders nothing (see above).
|
|
488
|
+
*/
|
|
489
|
+
const listenForReleaseOffChart: () => void = React.useCallback((): void => {
|
|
490
|
+
stopListeningForRelease();
|
|
491
|
+
// No bucket off the chart, but the pointer's place and the click count.
|
|
492
|
+
const finishPressOutsideChart: (event: MouseEvent) => void = (
|
|
493
|
+
event: MouseEvent,
|
|
494
|
+
): void => {
|
|
495
|
+
onMouseUp(null, event);
|
|
496
|
+
};
|
|
497
|
+
releaseListenerRef.current = finishPressOutsideChart;
|
|
498
|
+
window.addEventListener("mouseup", finishPressOutsideChart);
|
|
499
|
+
}, [onMouseUp, stopListeningForRelease]);
|
|
500
|
+
|
|
501
|
+
const onMouseDown: (
|
|
502
|
+
chartState: RangeSelectionChartState,
|
|
503
|
+
mouseEvent?: React.MouseEvent<SVGGraphicsElement>,
|
|
504
|
+
) => void = React.useCallback(
|
|
505
|
+
(
|
|
506
|
+
chartState: RangeSelectionChartState,
|
|
507
|
+
mouseEvent?: React.MouseEvent<SVGGraphicsElement>,
|
|
508
|
+
): void => {
|
|
509
|
+
/*
|
|
510
|
+
* The second press of a double-click is the reset, on its release,
|
|
511
|
+
* wherever that is: the window hears a release off the chart, as for
|
|
512
|
+
* a drag below.
|
|
513
|
+
*/
|
|
514
|
+
if (doubleClickReset.onPress(mouseEvent)) {
|
|
515
|
+
clearSelection();
|
|
516
|
+
listenForReleaseOffChart();
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
/*
|
|
520
|
+
* Also on a chart that only resets: it takes presses to spot that
|
|
521
|
+
* second one, and selects nothing.
|
|
522
|
+
*/
|
|
523
|
+
if (!latest.current.canSelect) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
// Only the main button drags; a right-click opens a context menu.
|
|
527
|
+
if (mouseEvent && mouseEvent.button > 0) {
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
const rowIndex: number | null = getChartRowIndex(
|
|
531
|
+
latest.current.data,
|
|
532
|
+
latest.current.index,
|
|
533
|
+
chartState,
|
|
534
|
+
);
|
|
535
|
+
if (rowIndex === null || getLabel(rowIndex) === null) {
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
clearSelection();
|
|
539
|
+
isSelecting.current = true;
|
|
540
|
+
startIndexRef.current = rowIndex;
|
|
541
|
+
endIndexRef.current = rowIndex;
|
|
542
|
+
pressClientXRef.current =
|
|
543
|
+
typeof mouseEvent?.clientX === "number" ? mouseEvent.clientX : null;
|
|
544
|
+
listenForReleaseOffChart();
|
|
545
|
+
},
|
|
546
|
+
[clearSelection, doubleClickReset, getLabel, listenForReleaseOffChart],
|
|
547
|
+
);
|
|
548
|
+
|
|
549
|
+
// A chart unmounted mid-press stops listening for its release.
|
|
550
|
+
React.useEffect(() => {
|
|
551
|
+
return () => {
|
|
552
|
+
stopListeningForRelease();
|
|
553
|
+
};
|
|
554
|
+
}, [stopListeningForRelease]);
|
|
555
|
+
|
|
556
|
+
const isClickSuppressed: () => boolean = React.useCallback((): boolean => {
|
|
557
|
+
return suppressNextClickRef.current;
|
|
558
|
+
}, []);
|
|
559
|
+
|
|
560
|
+
const resetEventProps: ChartRangeSelectionRootProps = canReset
|
|
561
|
+
? { onDoubleClick: doubleClickReset.onDoubleClick }
|
|
562
|
+
: {};
|
|
563
|
+
|
|
564
|
+
let chartEventProps: ChartRangeSelectionRootProps = {};
|
|
565
|
+
|
|
566
|
+
if (canSelect) {
|
|
567
|
+
chartEventProps = {
|
|
568
|
+
onMouseDown: onMouseDown,
|
|
569
|
+
onMouseMove: onMouseMove,
|
|
570
|
+
onMouseUp: onMouseUp,
|
|
571
|
+
throttledEvents: RANGE_SELECTION_THROTTLED_EVENTS,
|
|
572
|
+
/*
|
|
573
|
+
* The crosshair that says the plot can be dragged. It has to be on
|
|
574
|
+
* the chart root: recharts gives its wrapper, which fills the plot,
|
|
575
|
+
* an inline cursor: default that a class outside can't beat. Left
|
|
576
|
+
* off entirely otherwise - an explicit undefined would drop
|
|
577
|
+
* recharts' default too.
|
|
578
|
+
*/
|
|
579
|
+
style: RANGE_SELECTION_ROOT_STYLE,
|
|
580
|
+
...resetEventProps,
|
|
581
|
+
};
|
|
582
|
+
} else if (canReset) {
|
|
583
|
+
chartEventProps = {
|
|
584
|
+
onMouseDown: onMouseDown,
|
|
585
|
+
onMouseUp: onMouseUp,
|
|
586
|
+
...resetEventProps,
|
|
587
|
+
};
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
return {
|
|
591
|
+
canSelect: canSelect,
|
|
592
|
+
selectionStartLabel: selectionStartLabel,
|
|
593
|
+
selectionEndLabel: selectionEndLabel,
|
|
594
|
+
isClickSuppressed: isClickSuppressed,
|
|
595
|
+
chartEventProps: chartEventProps,
|
|
596
|
+
};
|
|
597
|
+
};
|
|
598
|
+
|
|
599
|
+
export default useChartRangeSelection;
|
|
@@ -26,7 +26,14 @@ import ChartReferenceRegionProps from "../Types/ReferenceRegionProps";
|
|
|
26
26
|
import ChartTimeReferenceLineProps from "../Types/TimeReferenceLineProps";
|
|
27
27
|
import ExemplarPoint from "../Types/ExemplarPoint";
|
|
28
28
|
import XAxisUtil from "../Utils/XAxis";
|
|
29
|
+
import XAxisType from "../Types/XAxis/XAxisType";
|
|
29
30
|
import NoDataMessage from "../ChartGroup/NoDataMessage";
|
|
31
|
+
import {
|
|
32
|
+
ChartTimeRangeZoomContextValue,
|
|
33
|
+
ChartTimeRangeZoomHandlers,
|
|
34
|
+
resolveChartTimeRangeZoom,
|
|
35
|
+
useChartTimeRangeZoom,
|
|
36
|
+
} from "../TimeRangeZoom/TimeRangeZoomContext";
|
|
30
37
|
|
|
31
38
|
export const LineChartPalette: Array<AvailableChartColorsKeys> = [
|
|
32
39
|
"indigo",
|
|
@@ -60,6 +67,8 @@ export interface ComponentProps {
|
|
|
60
67
|
/*
|
|
61
68
|
* When provided, the chart supports drag-to-select: dragging across
|
|
62
69
|
* buckets calls back with the [start, end) of the selected time range.
|
|
70
|
+
* Left unset, the chart zooms the enclosing page instead, when the page
|
|
71
|
+
* offers that (TimeRangeZoomScope).
|
|
63
72
|
*/
|
|
64
73
|
onTimeRangeSelect?: ((startTime: Date, endTime: Date) => void) | undefined;
|
|
65
74
|
/*
|
|
@@ -68,6 +77,11 @@ export interface ComponentProps {
|
|
|
68
77
|
* onTimeRangeReset for why an idle handler costs click latency.
|
|
69
78
|
*/
|
|
70
79
|
onTimeRangeReset?: (() => void) | undefined;
|
|
80
|
+
/*
|
|
81
|
+
* Keeps this chart out of drag-to-zoom altogether, including the page's:
|
|
82
|
+
* for a chart whose window is not the page's time range.
|
|
83
|
+
*/
|
|
84
|
+
disableTimeRangeZoom?: boolean | undefined;
|
|
71
85
|
// Plain click on a bucket — see ChartLibrary onBucketClick.
|
|
72
86
|
onBucketClick?:
|
|
73
87
|
| ((
|
|
@@ -105,6 +119,22 @@ const LineChartElement: FunctionComponent<LineInternalProps> = (
|
|
|
105
119
|
): ReactElement => {
|
|
106
120
|
const [records, setRecords] = React.useState<Array<ChartDataPoint>>([]);
|
|
107
121
|
|
|
122
|
+
/*
|
|
123
|
+
* Drag-to-zoom: the host's own handlers, or else the enclosing page's
|
|
124
|
+
* (TimeRangeZoomScope), so a drag here retimes every chart on the page.
|
|
125
|
+
*/
|
|
126
|
+
const pageZoom: ChartTimeRangeZoomContextValue | null =
|
|
127
|
+
useChartTimeRangeZoom();
|
|
128
|
+
const timeRangeZoom: ChartTimeRangeZoomHandlers = resolveChartTimeRangeZoom({
|
|
129
|
+
onTimeRangeSelect: props.onTimeRangeSelect,
|
|
130
|
+
onTimeRangeReset: props.onTimeRangeReset,
|
|
131
|
+
isTimeAxis:
|
|
132
|
+
props.xAxis.options.type === XAxisType.Time ||
|
|
133
|
+
props.xAxis.options.type === XAxisType.Date,
|
|
134
|
+
disableTimeRangeZoom: props.disableTimeRangeZoom,
|
|
135
|
+
pageZoom: pageZoom,
|
|
136
|
+
});
|
|
137
|
+
|
|
108
138
|
const categories: Array<string> = props.data.map((item: SeriesPoint) => {
|
|
109
139
|
return item.seriesName;
|
|
110
140
|
});
|
|
@@ -244,8 +274,8 @@ const LineChartElement: FunctionComponent<LineInternalProps> = (
|
|
|
244
274
|
formattedExemplars.length > 0 ? formattedExemplars : undefined
|
|
245
275
|
}
|
|
246
276
|
onExemplarClick={props.onExemplarClick}
|
|
247
|
-
onTimeRangeSelect={
|
|
248
|
-
onTimeRangeReset={
|
|
277
|
+
onTimeRangeSelect={timeRangeZoom.onTimeRangeSelect}
|
|
278
|
+
onTimeRangeReset={timeRangeZoom.onTimeRangeReset}
|
|
249
279
|
onBucketClick={props.onBucketClick}
|
|
250
280
|
ghostCategories={props.ghostSeriesNames}
|
|
251
281
|
/>
|