@oneuptime/common 12.0.30 → 12.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/Models/AnalyticsModels/SecurityEvent.ts +48 -16
  2. package/Models/AnalyticsModels/ThreatIntelIndicator.ts +10 -5
  3. package/Models/DatabaseModels/AlertSeverity.ts +44 -0
  4. package/Models/DatabaseModels/DetectionRule.ts +16 -5
  5. package/Models/DatabaseModels/GoogleSecOpsConnection.ts +14 -5
  6. package/Models/DatabaseModels/IncidentSeverity.ts +44 -0
  7. package/Models/DatabaseModels/Index.ts +2 -0
  8. package/Models/DatabaseModels/NetworkDevice.ts +113 -3
  9. package/Models/DatabaseModels/NetworkDeviceAutoImportRule.ts +88 -0
  10. package/Models/DatabaseModels/NetworkDeviceDiscoveryScan.ts +22 -0
  11. package/Models/DatabaseModels/NetworkDeviceOidTemplate.ts +499 -0
  12. package/Models/DatabaseModels/ThreatIntelFeed.ts +16 -5
  13. package/Server/API/GlobalConfigAPI.ts +362 -183
  14. package/Server/API/TelemetryAPI.ts +42 -4
  15. package/Server/EnvironmentConfig.ts +112 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.ts +59 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.ts +25 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  19. package/Server/Middleware/MultipartFormData.ts +118 -32
  20. package/Server/Services/AlertEpisodeLabelRuleEngineService.ts +9 -1
  21. package/Server/Services/AlertEpisodeOnCallRuleEngineService.ts +9 -1
  22. package/Server/Services/AlertEpisodeOwnerRuleEngineService.ts +9 -1
  23. package/Server/Services/AlertEpisodePrivacyRuleEngineService.ts +9 -1
  24. package/Server/Services/AlertGroupingEngineService.ts +9 -1
  25. package/Server/Services/AlertLabelRuleEngineService.ts +9 -1
  26. package/Server/Services/AlertOnCallRuleEngineService.ts +9 -1
  27. package/Server/Services/AlertOwnerRuleEngineService.ts +9 -1
  28. package/Server/Services/AlertPrivacyRuleEngineService.ts +9 -1
  29. package/Server/Services/AlertReminderRuleService.ts +9 -1
  30. package/Server/Services/AutoRemediationRuleEngineService.ts +9 -1
  31. package/Server/Services/CephClusterLabelRuleEngineService.ts +9 -1
  32. package/Server/Services/CephClusterOwnerRuleEngineService.ts +9 -1
  33. package/Server/Services/CloudResourceLabelRuleEngineService.ts +9 -1
  34. package/Server/Services/CloudResourceOwnerRuleEngineService.ts +9 -1
  35. package/Server/Services/DashboardLabelRuleEngineService.ts +9 -1
  36. package/Server/Services/DashboardOwnerRuleEngineService.ts +9 -1
  37. package/Server/Services/DockerHostLabelRuleEngineService.ts +9 -1
  38. package/Server/Services/DockerHostOwnerRuleEngineService.ts +9 -1
  39. package/Server/Services/DockerSwarmClusterLabelRuleEngineService.ts +9 -1
  40. package/Server/Services/DockerSwarmClusterOwnerRuleEngineService.ts +9 -1
  41. package/Server/Services/HostLabelRuleEngineService.ts +9 -1
  42. package/Server/Services/HostOwnerRuleEngineService.ts +9 -1
  43. package/Server/Services/IncidentEpisodeLabelRuleEngineService.ts +9 -1
  44. package/Server/Services/IncidentEpisodeOnCallRuleEngineService.ts +9 -1
  45. package/Server/Services/IncidentEpisodeOwnerRuleEngineService.ts +9 -1
  46. package/Server/Services/IncidentEpisodePrivacyRuleEngineService.ts +9 -1
  47. package/Server/Services/IncidentGroupingEngineService.ts +9 -1
  48. package/Server/Services/IncidentLabelRuleEngineService.ts +9 -1
  49. package/Server/Services/IncidentOnCallRuleEngineService.ts +9 -1
  50. package/Server/Services/IncidentOwnerRuleEngineService.ts +9 -1
  51. package/Server/Services/IncidentPrivacyRuleEngineService.ts +9 -1
  52. package/Server/Services/IncidentReminderRuleService.ts +9 -1
  53. package/Server/Services/IncidentSlaRuleService.ts +9 -1
  54. package/Server/Services/IncomingCallPolicyLabelRuleEngineService.ts +9 -1
  55. package/Server/Services/IncomingCallPolicyOwnerRuleEngineService.ts +9 -1
  56. package/Server/Services/Index.ts +2 -0
  57. package/Server/Services/IoTFleetLabelRuleEngineService.ts +9 -1
  58. package/Server/Services/IoTFleetOwnerRuleEngineService.ts +9 -1
  59. package/Server/Services/KubernetesClusterLabelRuleEngineService.ts +9 -1
  60. package/Server/Services/KubernetesClusterOwnerRuleEngineService.ts +9 -1
  61. package/Server/Services/KubernetesResourceService.ts +5 -1
  62. package/Server/Services/MonitorLabelRuleEngineService.ts +9 -1
  63. package/Server/Services/MonitorOwnerRuleEngineService.ts +9 -1
  64. package/Server/Services/NetworkDeviceAutoImportRuleEngineService.ts +35 -0
  65. package/Server/Services/NetworkDeviceAutoImportRuleService.ts +96 -0
  66. package/Server/Services/NetworkDeviceLabelRuleEngineService.ts +9 -1
  67. package/Server/Services/NetworkDeviceOidTemplateService.ts +201 -0
  68. package/Server/Services/NetworkDeviceOwnerRuleEngineService.ts +9 -1
  69. package/Server/Services/NetworkDeviceService.ts +209 -1
  70. package/Server/Services/OnCallDutyPolicyLabelRuleEngineService.ts +9 -1
  71. package/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.ts +9 -1
  72. package/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.ts +9 -1
  73. package/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.ts +9 -1
  74. package/Server/Services/PodmanHostLabelRuleEngineService.ts +9 -1
  75. package/Server/Services/PodmanHostOwnerRuleEngineService.ts +9 -1
  76. package/Server/Services/ProxmoxClusterLabelRuleEngineService.ts +9 -1
  77. package/Server/Services/ProxmoxClusterOwnerRuleEngineService.ts +9 -1
  78. package/Server/Services/RumApplicationLabelRuleEngineService.ts +9 -1
  79. package/Server/Services/RumApplicationOwnerRuleEngineService.ts +9 -1
  80. package/Server/Services/RunbookLabelRuleEngineService.ts +9 -1
  81. package/Server/Services/RunbookOwnerRuleEngineService.ts +9 -1
  82. package/Server/Services/RunbookRuleEngineService.ts +9 -1
  83. package/Server/Services/ScheduledMaintenanceLabelRuleEngineService.ts +9 -1
  84. package/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.ts +9 -1
  85. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +9 -1
  86. package/Server/Services/ServerlessFunctionLabelRuleEngineService.ts +9 -1
  87. package/Server/Services/ServerlessFunctionOwnerRuleEngineService.ts +9 -1
  88. package/Server/Services/ServiceLabelRuleEngineService.ts +9 -1
  89. package/Server/Services/ServiceOwnerRuleEngineService.ts +9 -1
  90. package/Server/Services/StatusPageLabelRuleEngineService.ts +9 -1
  91. package/Server/Services/StatusPageMonitorRuleEngineService.ts +7 -0
  92. package/Server/Services/StatusPageOwnerRuleEngineService.ts +9 -1
  93. package/Server/Services/TelemetrySourceMapService.ts +266 -23
  94. package/Server/Services/UserService.ts +27 -0
  95. package/Server/Services/WorkflowLabelRuleEngineService.ts +9 -1
  96. package/Server/Services/WorkflowOwnerRuleEngineService.ts +9 -1
  97. package/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.ts +186 -0
  98. package/Server/Utils/Monitor/CapturedMetricAttributeUtil.ts +245 -0
  99. package/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.ts +21 -2
  100. package/Server/Utils/Monitor/MonitorMetricUtil.ts +55 -21
  101. package/Server/Utils/Monitor/MonitorTemplateUtil.ts +32 -0
  102. package/Server/Utils/Monitor/NetworkDeviceMetricUtil.ts +15 -2
  103. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +18 -1
  104. package/Server/Utils/Monitor/NetworkInventoryUtil.ts +10 -0
  105. package/Server/Utils/Monitor/SeriesResourceLabels.ts +34 -0
  106. package/Server/Utils/Rules/RuleEngineRuleRead.ts +48 -0
  107. package/Server/Utils/Telemetry/ExceptionSanitizer.ts +14 -1
  108. package/Server/Utils/Telemetry/LogExceptionExtractor.ts +14 -2
  109. package/Server/Utils/Telemetry/SourceMapResolver.ts +16 -5
  110. package/Server/Utils/Telemetry/StackTraceParser.ts +399 -0
  111. package/Tests/App/Dashboard/EventOverlayHook.test.tsx +125 -0
  112. package/Tests/App/Dashboard/HeaderImageAssets.test.tsx +93 -0
  113. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +3 -3
  114. package/Tests/App/Dashboard/UserElementEmail.test.tsx +12 -4
  115. package/Tests/App/Dashboard/UserEmailCallSites.test.tsx +1 -1
  116. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +14 -0
  117. package/Tests/Models/DatabaseModels/ModelRegistryInvariants.test.ts +469 -0
  118. package/Tests/Models/SecurityDomainAccessControl.test.ts +429 -0
  119. package/Tests/Server/API/GlobalConfigLicense.test.ts +657 -0
  120. package/Tests/Server/API/SecurityEventAttributesAPI.test.ts +84 -6
  121. package/Tests/Server/API/TelemetryResolveStackTraceAPI.test.ts +805 -0
  122. package/Tests/Server/Infrastructure/Postgres/AddOnCallCalendarFeedsMigration.test.ts +32 -7
  123. package/Tests/Server/Middleware/IdentityRateLimit.test.ts +1144 -0
  124. package/Tests/Server/Middleware/MultipartFormData.test.ts +618 -3
  125. package/Tests/Server/Services/MonitorLabelRuleEngineScale.test.ts +520 -0
  126. package/Tests/Server/Services/NetworkDeviceOidTemplateService.test.ts +332 -0
  127. package/Tests/Server/Services/NetworkDeviceOidTemplateWriteGuards.test.ts +409 -0
  128. package/Tests/Server/Services/RuleEngineRuleFetchLimit.test.ts +239 -0
  129. package/Tests/Server/Services/TelemetrySourceMapService.test.ts +1210 -2
  130. package/Tests/Server/Services/UserServiceSeatLimit.test.ts +182 -0
  131. package/Tests/Server/Types/AnalyticsDatabase/SecurityEventModelPermission.test.ts +255 -0
  132. package/Tests/Server/Types/Database/Permissions/ReadBlockPermission.test.ts +212 -0
  133. package/Tests/Server/Types/Database/Permissions/SecurityRoleAccess.test.ts +413 -0
  134. package/Tests/Server/Utils/CodeRepository.test.ts +689 -0
  135. package/Tests/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.test.ts +495 -0
  136. package/Tests/Server/Utils/ExceptionSanitizer.test.ts +77 -0
  137. package/Tests/Server/Utils/Monitor/CapturedMetricAttributeUtil.test.ts +284 -0
  138. package/Tests/Server/Utils/Monitor/MonitorCustomMetricAttributes.test.ts +503 -0
  139. package/Tests/Server/Utils/Monitor/MonitorTemplatePrototypePollution.test.ts +106 -0
  140. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkLogWritePath.test.ts +33 -4
  141. package/Tests/Server/Utils/Monitor/NetworkDeviceWalkUtil.test.ts +14 -4
  142. package/Tests/Server/Utils/Monitor/NetworkInventoryUtil.test.ts +44 -0
  143. package/Tests/Server/Utils/OpenAPISpec.test.ts +536 -0
  144. package/Tests/Server/Utils/Rules/RuleEngineRuleRead.test.ts +115 -0
  145. package/Tests/Server/Utils/StackTraceParser.test.ts +610 -0
  146. package/Tests/Server/Utils/Telemetry/LogExceptionExtractor.test.ts +0 -0
  147. package/Tests/Server/Utils/Telemetry/SourceMapLimits.test.ts +656 -0
  148. package/Tests/Server/Utils/Telemetry/SourceMapResolver.test.ts +100 -0
  149. package/Tests/Types/Monitor/SnmpMonitor/SnmpOidListUtil.test.ts +454 -0
  150. package/Tests/Types/SecurityRolePermissions.test.ts +193 -0
  151. package/Tests/UI/Components/Charts/AnnotationLayout.test.ts +773 -0
  152. package/Tests/UI/Components/Charts/ChartAnnotationRail.test.tsx +789 -0
  153. package/Tests/UI/Components/Charts/ChartBucketIdentity.test.ts +254 -0
  154. package/Tests/UI/Components/Charts/TimeAnnotation.test.ts +471 -0
  155. package/Tests/UI/Components/EditionLabelLicenseRefresh.test.tsx +405 -0
  156. package/Tests/UI/Components/ErrorMessageRefreshControl.test.tsx +83 -0
  157. package/Tests/UI/Components/MarkdownConverters.test.ts +686 -0
  158. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +341 -0
  159. package/Tests/UI/Components/OrderedStatesList.test.tsx +5 -5
  160. package/Tests/UI/Components/PendingProjectInvitations.test.tsx +1 -1
  161. package/Tests/UI/Components/TableSortAndMobileColumns.test.tsx +195 -0
  162. package/Tests/UI/Components/XAxis.test.ts +270 -5
  163. package/Tests/UI/Components/XAxisDaylightSaving.test.ts +113 -0
  164. package/Tests/UI/Styles/ChartFocusRing.test.ts +153 -0
  165. package/Tests/UI/Styles/ChartFocusRingCoverage.test.tsx +377 -0
  166. package/Tests/UI/Styles/ThemeStylesheet.ts +162 -0
  167. package/Tests/Utils/EnterpriseLicenseSeats.test.ts +507 -0
  168. package/Tests/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.test.ts +951 -1
  169. package/Tests/Utils/NetworkDiscovery/DiscoveredHostUtil.test.ts +238 -0
  170. package/Tests/Utils/NetworkDiscovery/DiscoveryReverseDnsChain.test.ts +1056 -0
  171. package/Tests/Utils/NetworkDiscovery/ReverseDnsNameUtil.test.ts +882 -0
  172. package/Types/Date.ts +39 -0
  173. package/Types/Monitor/SnmpMonitor/SnmpOidListUtil.ts +333 -0
  174. package/Types/Permission.ts +96 -0
  175. package/Types/Rum/SessionReplay.ts +21 -0
  176. package/Types/Telemetry/SourceMap.ts +8 -0
  177. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +176 -0
  178. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.ts +745 -0
  179. package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +576 -0
  180. package/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.tsx +204 -0
  181. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +491 -544
  182. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +324 -372
  183. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +487 -540
  184. package/UI/Components/Charts/ChartLibrary/Types/FormattedReferenceRegion.ts +7 -3
  185. package/UI/Components/Charts/ChartLibrary/Types/FormattedTimeReferenceLine.ts +14 -3
  186. package/UI/Components/Charts/Types/ChartEventKind.ts +13 -0
  187. package/UI/Components/Charts/Types/ReferenceRegionProps.ts +6 -0
  188. package/UI/Components/Charts/Types/TimeReferenceLineProps.ts +20 -3
  189. package/UI/Components/Charts/Utils/TimeAnnotation.ts +69 -35
  190. package/UI/Components/Charts/Utils/XAxis.ts +125 -18
  191. package/UI/Components/EditionLabel/EditionLabel.tsx +280 -26
  192. package/UI/Components/ErrorMessage/ErrorMessage.tsx +21 -10
  193. package/UI/Components/Feed/FeedItem.tsx +4 -5
  194. package/UI/Components/Header/HeaderIconDropdownButton.tsx +1 -2
  195. package/UI/Components/Header/UserProfile/UserProfile.tsx +1 -2
  196. package/UI/Components/Image/Image.tsx +20 -3
  197. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +0 -0
  198. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +1 -2
  199. package/UI/Components/ModelTable/BaseModelTable.tsx +150 -24
  200. package/UI/Components/Table/TableHeader.tsx +64 -48
  201. package/UI/Components/Table/TableRow.tsx +13 -3
  202. package/UI/Styles/Theme.css +38 -0
  203. package/Utils/EnterpriseLicense/EnterpriseLicenseSeats.ts +271 -0
  204. package/Utils/NetworkDiscovery/AutoImportRuleMatcher.ts +6 -0
  205. package/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.ts +141 -10
  206. package/Utils/NetworkDiscovery/DiscoveredHostUtil.ts +55 -3
  207. package/Utils/NetworkDiscovery/ReverseDnsNameUtil.ts +151 -0
  208. package/Utils/Rules/RuleEngineLimits.ts +32 -0
  209. package/build/dist/Models/AnalyticsModels/SecurityEvent.js +48 -16
  210. package/build/dist/Models/AnalyticsModels/SecurityEvent.js.map +1 -1
  211. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js +10 -5
  212. package/build/dist/Models/AnalyticsModels/ThreatIntelIndicator.js.map +1 -1
  213. package/build/dist/Models/DatabaseModels/AlertSeverity.js +46 -1
  214. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  215. package/build/dist/Models/DatabaseModels/DetectionRule.js +16 -5
  216. package/build/dist/Models/DatabaseModels/DetectionRule.js.map +1 -1
  217. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js +14 -5
  218. package/build/dist/Models/DatabaseModels/GoogleSecOpsConnection.js.map +1 -1
  219. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +46 -1
  220. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  221. package/build/dist/Models/DatabaseModels/Index.js +2 -0
  222. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  223. package/build/dist/Models/DatabaseModels/NetworkDevice.js +115 -3
  224. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  225. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js +88 -0
  226. package/build/dist/Models/DatabaseModels/NetworkDeviceAutoImportRule.js.map +1 -1
  227. package/build/dist/Models/DatabaseModels/NetworkDeviceDiscoveryScan.js.map +1 -1
  228. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js +519 -0
  229. package/build/dist/Models/DatabaseModels/NetworkDeviceOidTemplate.js.map +1 -0
  230. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js +16 -5
  231. package/build/dist/Models/DatabaseModels/ThreatIntelFeed.js.map +1 -1
  232. package/build/dist/Server/API/GlobalConfigAPI.js +293 -176
  233. package/build/dist/Server/API/GlobalConfigAPI.js.map +1 -1
  234. package/build/dist/Server/API/TelemetryAPI.js +31 -3
  235. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  236. package/build/dist/Server/EnvironmentConfig.js +83 -0
  237. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  238. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js +26 -0
  239. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790500000000-AddNetworkDeviceOidTemplate.js.map +1 -0
  240. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js +14 -0
  241. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1790600000000-AddAutoImportRuleOidTemplate.js.map +1 -0
  242. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  243. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  244. package/build/dist/Server/Middleware/MultipartFormData.js +93 -28
  245. package/build/dist/Server/Middleware/MultipartFormData.js.map +1 -1
  246. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js +8 -1
  247. package/build/dist/Server/Services/AlertEpisodeLabelRuleEngineService.js.map +1 -1
  248. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js +8 -1
  249. package/build/dist/Server/Services/AlertEpisodeOnCallRuleEngineService.js.map +1 -1
  250. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js +8 -1
  251. package/build/dist/Server/Services/AlertEpisodeOwnerRuleEngineService.js.map +1 -1
  252. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js +8 -1
  253. package/build/dist/Server/Services/AlertEpisodePrivacyRuleEngineService.js.map +1 -1
  254. package/build/dist/Server/Services/AlertGroupingEngineService.js +8 -1
  255. package/build/dist/Server/Services/AlertGroupingEngineService.js.map +1 -1
  256. package/build/dist/Server/Services/AlertLabelRuleEngineService.js +8 -1
  257. package/build/dist/Server/Services/AlertLabelRuleEngineService.js.map +1 -1
  258. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js +8 -1
  259. package/build/dist/Server/Services/AlertOnCallRuleEngineService.js.map +1 -1
  260. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js +8 -1
  261. package/build/dist/Server/Services/AlertOwnerRuleEngineService.js.map +1 -1
  262. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js +8 -1
  263. package/build/dist/Server/Services/AlertPrivacyRuleEngineService.js.map +1 -1
  264. package/build/dist/Server/Services/AlertReminderRuleService.js +8 -1
  265. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  266. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +8 -1
  267. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  268. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js +8 -1
  269. package/build/dist/Server/Services/CephClusterLabelRuleEngineService.js.map +1 -1
  270. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js +8 -1
  271. package/build/dist/Server/Services/CephClusterOwnerRuleEngineService.js.map +1 -1
  272. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js +8 -1
  273. package/build/dist/Server/Services/CloudResourceLabelRuleEngineService.js.map +1 -1
  274. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js +8 -1
  275. package/build/dist/Server/Services/CloudResourceOwnerRuleEngineService.js.map +1 -1
  276. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js +8 -1
  277. package/build/dist/Server/Services/DashboardLabelRuleEngineService.js.map +1 -1
  278. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js +8 -1
  279. package/build/dist/Server/Services/DashboardOwnerRuleEngineService.js.map +1 -1
  280. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js +8 -1
  281. package/build/dist/Server/Services/DockerHostLabelRuleEngineService.js.map +1 -1
  282. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js +8 -1
  283. package/build/dist/Server/Services/DockerHostOwnerRuleEngineService.js.map +1 -1
  284. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js +8 -1
  285. package/build/dist/Server/Services/DockerSwarmClusterLabelRuleEngineService.js.map +1 -1
  286. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js +8 -1
  287. package/build/dist/Server/Services/DockerSwarmClusterOwnerRuleEngineService.js.map +1 -1
  288. package/build/dist/Server/Services/HostLabelRuleEngineService.js +8 -1
  289. package/build/dist/Server/Services/HostLabelRuleEngineService.js.map +1 -1
  290. package/build/dist/Server/Services/HostOwnerRuleEngineService.js +8 -1
  291. package/build/dist/Server/Services/HostOwnerRuleEngineService.js.map +1 -1
  292. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js +8 -1
  293. package/build/dist/Server/Services/IncidentEpisodeLabelRuleEngineService.js.map +1 -1
  294. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js +8 -1
  295. package/build/dist/Server/Services/IncidentEpisodeOnCallRuleEngineService.js.map +1 -1
  296. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js +8 -1
  297. package/build/dist/Server/Services/IncidentEpisodeOwnerRuleEngineService.js.map +1 -1
  298. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js +8 -1
  299. package/build/dist/Server/Services/IncidentEpisodePrivacyRuleEngineService.js.map +1 -1
  300. package/build/dist/Server/Services/IncidentGroupingEngineService.js +8 -1
  301. package/build/dist/Server/Services/IncidentGroupingEngineService.js.map +1 -1
  302. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js +8 -1
  303. package/build/dist/Server/Services/IncidentLabelRuleEngineService.js.map +1 -1
  304. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js +8 -1
  305. package/build/dist/Server/Services/IncidentOnCallRuleEngineService.js.map +1 -1
  306. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js +8 -1
  307. package/build/dist/Server/Services/IncidentOwnerRuleEngineService.js.map +1 -1
  308. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js +8 -1
  309. package/build/dist/Server/Services/IncidentPrivacyRuleEngineService.js.map +1 -1
  310. package/build/dist/Server/Services/IncidentReminderRuleService.js +8 -1
  311. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  312. package/build/dist/Server/Services/IncidentSlaRuleService.js +8 -1
  313. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  314. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js +8 -1
  315. package/build/dist/Server/Services/IncomingCallPolicyLabelRuleEngineService.js.map +1 -1
  316. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js +8 -1
  317. package/build/dist/Server/Services/IncomingCallPolicyOwnerRuleEngineService.js.map +1 -1
  318. package/build/dist/Server/Services/Index.js +2 -0
  319. package/build/dist/Server/Services/Index.js.map +1 -1
  320. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js +8 -1
  321. package/build/dist/Server/Services/IoTFleetLabelRuleEngineService.js.map +1 -1
  322. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js +8 -1
  323. package/build/dist/Server/Services/IoTFleetOwnerRuleEngineService.js.map +1 -1
  324. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js +8 -1
  325. package/build/dist/Server/Services/KubernetesClusterLabelRuleEngineService.js.map +1 -1
  326. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js +8 -1
  327. package/build/dist/Server/Services/KubernetesClusterOwnerRuleEngineService.js.map +1 -1
  328. package/build/dist/Server/Services/KubernetesResourceService.js +5 -1
  329. package/build/dist/Server/Services/KubernetesResourceService.js.map +1 -1
  330. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js +8 -1
  331. package/build/dist/Server/Services/MonitorLabelRuleEngineService.js.map +1 -1
  332. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js +8 -1
  333. package/build/dist/Server/Services/MonitorOwnerRuleEngineService.js.map +1 -1
  334. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js +30 -21
  335. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleEngineService.js.map +1 -1
  336. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js +64 -0
  337. package/build/dist/Server/Services/NetworkDeviceAutoImportRuleService.js.map +1 -1
  338. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js +8 -1
  339. package/build/dist/Server/Services/NetworkDeviceLabelRuleEngineService.js.map +1 -1
  340. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js +180 -0
  341. package/build/dist/Server/Services/NetworkDeviceOidTemplateService.js.map +1 -0
  342. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js +8 -1
  343. package/build/dist/Server/Services/NetworkDeviceOwnerRuleEngineService.js.map +1 -1
  344. package/build/dist/Server/Services/NetworkDeviceService.js +154 -1
  345. package/build/dist/Server/Services/NetworkDeviceService.js.map +1 -1
  346. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js +8 -1
  347. package/build/dist/Server/Services/OnCallDutyPolicyLabelRuleEngineService.js.map +1 -1
  348. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js +8 -1
  349. package/build/dist/Server/Services/OnCallDutyPolicyOwnerRuleEngineService.js.map +1 -1
  350. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js +8 -1
  351. package/build/dist/Server/Services/OnCallDutyPolicyScheduleLabelRuleEngineService.js.map +1 -1
  352. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js +8 -1
  353. package/build/dist/Server/Services/OnCallDutyPolicyScheduleOwnerRuleEngineService.js.map +1 -1
  354. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js +8 -1
  355. package/build/dist/Server/Services/PodmanHostLabelRuleEngineService.js.map +1 -1
  356. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js +8 -1
  357. package/build/dist/Server/Services/PodmanHostOwnerRuleEngineService.js.map +1 -1
  358. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js +8 -1
  359. package/build/dist/Server/Services/ProxmoxClusterLabelRuleEngineService.js.map +1 -1
  360. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js +8 -1
  361. package/build/dist/Server/Services/ProxmoxClusterOwnerRuleEngineService.js.map +1 -1
  362. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js +8 -1
  363. package/build/dist/Server/Services/RumApplicationLabelRuleEngineService.js.map +1 -1
  364. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js +8 -1
  365. package/build/dist/Server/Services/RumApplicationOwnerRuleEngineService.js.map +1 -1
  366. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js +8 -1
  367. package/build/dist/Server/Services/RunbookLabelRuleEngineService.js.map +1 -1
  368. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js +8 -1
  369. package/build/dist/Server/Services/RunbookOwnerRuleEngineService.js.map +1 -1
  370. package/build/dist/Server/Services/RunbookRuleEngineService.js +8 -1
  371. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  372. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js +8 -1
  373. package/build/dist/Server/Services/ScheduledMaintenanceLabelRuleEngineService.js.map +1 -1
  374. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js +8 -1
  375. package/build/dist/Server/Services/ScheduledMaintenanceOwnerRuleEngineService.js.map +1 -1
  376. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +8 -1
  377. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  378. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js +8 -1
  379. package/build/dist/Server/Services/ServerlessFunctionLabelRuleEngineService.js.map +1 -1
  380. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js +8 -1
  381. package/build/dist/Server/Services/ServerlessFunctionOwnerRuleEngineService.js.map +1 -1
  382. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js +8 -1
  383. package/build/dist/Server/Services/ServiceLabelRuleEngineService.js.map +1 -1
  384. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js +8 -1
  385. package/build/dist/Server/Services/ServiceOwnerRuleEngineService.js.map +1 -1
  386. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js +8 -1
  387. package/build/dist/Server/Services/StatusPageLabelRuleEngineService.js.map +1 -1
  388. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js +6 -0
  389. package/build/dist/Server/Services/StatusPageMonitorRuleEngineService.js.map +1 -1
  390. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js +8 -1
  391. package/build/dist/Server/Services/StatusPageOwnerRuleEngineService.js.map +1 -1
  392. package/build/dist/Server/Services/TelemetrySourceMapService.js +213 -19
  393. package/build/dist/Server/Services/TelemetrySourceMapService.js.map +1 -1
  394. package/build/dist/Server/Services/UserService.js +25 -0
  395. package/build/dist/Server/Services/UserService.js.map +1 -1
  396. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js +8 -1
  397. package/build/dist/Server/Services/WorkflowLabelRuleEngineService.js.map +1 -1
  398. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js +8 -1
  399. package/build/dist/Server/Services/WorkflowOwnerRuleEngineService.js.map +1 -1
  400. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js +145 -0
  401. package/build/dist/Server/Utils/EnterpriseLicense/EnterpriseLicenseSeatUtil.js.map +1 -0
  402. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js +201 -0
  403. package/build/dist/Server/Utils/Monitor/CapturedMetricAttributeUtil.js.map +1 -0
  404. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js +19 -2
  405. package/build/dist/Server/Utils/Monitor/Criteria/SnmpMonitorCriteria.js.map +1 -1
  406. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +42 -23
  407. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  408. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js +29 -0
  409. package/build/dist/Server/Utils/Monitor/MonitorTemplateUtil.js.map +1 -1
  410. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js +11 -2
  411. package/build/dist/Server/Utils/Monitor/NetworkDeviceMetricUtil.js.map +1 -1
  412. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +16 -1
  413. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  414. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js +10 -0
  415. package/build/dist/Server/Utils/Monitor/NetworkInventoryUtil.js.map +1 -1
  416. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js +33 -0
  417. package/build/dist/Server/Utils/Monitor/SeriesResourceLabels.js.map +1 -1
  418. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js +37 -0
  419. package/build/dist/Server/Utils/Rules/RuleEngineRuleRead.js.map +1 -0
  420. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js +12 -1
  421. package/build/dist/Server/Utils/Telemetry/ExceptionSanitizer.js.map +1 -1
  422. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js +14 -2
  423. package/build/dist/Server/Utils/Telemetry/LogExceptionExtractor.js.map +1 -1
  424. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js +15 -5
  425. package/build/dist/Server/Utils/Telemetry/SourceMapResolver.js.map +1 -1
  426. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js +307 -0
  427. package/build/dist/Server/Utils/Telemetry/StackTraceParser.js.map +1 -1
  428. package/build/dist/Types/Date.js +27 -0
  429. package/build/dist/Types/Date.js.map +1 -1
  430. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js +253 -0
  431. package/build/dist/Types/Monitor/SnmpMonitor/SnmpOidListUtil.js.map +1 -0
  432. package/build/dist/Types/Permission.js +86 -0
  433. package/build/dist/Types/Permission.js.map +1 -1
  434. package/build/dist/Types/Rum/SessionReplay.js +19 -0
  435. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  436. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +83 -0
  437. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -0
  438. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js +531 -0
  439. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationLayout.js.map +1 -0
  440. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +264 -0
  441. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -0
  442. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js +122 -0
  443. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/UseChartAnnotations.js.map +1 -0
  444. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +213 -233
  445. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  446. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +139 -152
  447. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  448. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +212 -232
  449. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  450. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js +14 -0
  451. package/build/dist/UI/Components/Charts/Types/ChartEventKind.js.map +1 -0
  452. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js +57 -28
  453. package/build/dist/UI/Components/Charts/Utils/TimeAnnotation.js.map +1 -1
  454. package/build/dist/UI/Components/Charts/Utils/XAxis.js +103 -17
  455. package/build/dist/UI/Components/Charts/Utils/XAxis.js.map +1 -1
  456. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +198 -23
  457. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  458. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +15 -5
  459. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  460. package/build/dist/UI/Components/Feed/FeedItem.js +4 -5
  461. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  462. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -2
  463. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  464. package/build/dist/UI/Components/Header/UserProfile/UserProfile.js.map +1 -1
  465. package/build/dist/UI/Components/Image/Image.js +6 -1
  466. package/build/dist/UI/Components/Image/Image.js.map +1 -1
  467. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +0 -0
  468. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  469. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +1 -2
  470. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  471. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +104 -23
  472. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  473. package/build/dist/UI/Components/Table/TableHeader.js +20 -22
  474. package/build/dist/UI/Components/Table/TableHeader.js.map +1 -1
  475. package/build/dist/UI/Components/Table/TableRow.js +13 -4
  476. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  477. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js +153 -0
  478. package/build/dist/Utils/EnterpriseLicense/EnterpriseLicenseSeats.js.map +1 -0
  479. package/build/dist/Utils/NetworkDiscovery/AutoImportRuleMatcher.js.map +1 -1
  480. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js +127 -7
  481. package/build/dist/Utils/NetworkDiscovery/DiscoveredDeviceBuilder.js.map +1 -1
  482. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js +50 -3
  483. package/build/dist/Utils/NetworkDiscovery/DiscoveredHostUtil.js.map +1 -1
  484. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js +132 -0
  485. package/build/dist/Utils/NetworkDiscovery/ReverseDnsNameUtil.js.map +1 -0
  486. package/build/dist/Utils/Rules/RuleEngineLimits.js +31 -0
  487. package/build/dist/Utils/Rules/RuleEngineLimits.js.map +1 -0
  488. package/jest.config.json +1 -0
  489. package/package.json +2 -2
@@ -0,0 +1,576 @@
1
+ import React from "react";
2
+ import {
3
+ ZIndexLayer,
4
+ useChartWidth,
5
+ usePlotArea,
6
+ useXAxisTicks,
7
+ } from "recharts";
8
+ import FormattedReferenceRegion from "../Types/FormattedReferenceRegion";
9
+ import FormattedTimeReferenceLine from "../Types/FormattedTimeReferenceLine";
10
+ import {
11
+ AxisTick,
12
+ CategoryScaleKind,
13
+ CategoryXResolver,
14
+ MARKER_RAIL_HEIGHT,
15
+ MarkerCluster,
16
+ PositionedMarker,
17
+ PositionedRegion,
18
+ REGION_RAIL_HEIGHT,
19
+ SINGLE_MARKER_CHIP_SIZE,
20
+ buildCategoryXResolver,
21
+ clusterMarkers,
22
+ getChipWidth,
23
+ getMarkerRailY,
24
+ getRegionRailY,
25
+ positionMarkers,
26
+ positionRegions,
27
+ truncateLabelToWidth,
28
+ } from "./AnnotationLayout";
29
+
30
+ /*
31
+ * What the chart needs to know to place the HTML hover card that goes with
32
+ * a hovered chip or region pill. All coordinates are in the chart's own
33
+ * pixel space: recharts renders its <svg> at an explicit width/height with
34
+ * no viewBox, so SVG user units and CSS pixels are the same thing here,
35
+ * and an absolutely positioned div can share them.
36
+ */
37
+ export interface AnnotationHover {
38
+ id: string;
39
+ /** Horizontal anchor — the chip's centre, or a region pill's centre. */
40
+ anchorX: number;
41
+ /** Vertical anchor — the bottom of the rail row the anchor sits on. */
42
+ anchorY: number;
43
+ chartWidth: number;
44
+ markers: Array<FormattedTimeReferenceLine>;
45
+ region?: FormattedReferenceRegion | undefined;
46
+ /** Heading for the card: the x-axis bucket, or the region's name. */
47
+ heading: string;
48
+ /**
49
+ * Set when a keyboard activated the card. A cluster's events live only
50
+ * in the card, so opening one from the keyboard has to move focus into
51
+ * it — otherwise Tab goes to the next chip and those events are simply
52
+ * unreachable without a pointer.
53
+ */
54
+ takeFocus?: boolean | undefined;
55
+ }
56
+
57
+ export interface ChartAnnotationLayerProps {
58
+ formattedTimeReferenceLines?: Array<FormattedTimeReferenceLine> | undefined;
59
+ formattedReferenceRegions?: Array<FormattedReferenceRegion> | undefined;
60
+ /** The x values recharts is drawing, in axis order. */
61
+ categoryLabels: Array<string>;
62
+ /** The chart's `XAxis padding`, needed by the no-ticks fallback. */
63
+ axisPaddingPx: number;
64
+ /** How recharts lays the categories out; see CategoryScaleKind. */
65
+ scaleKind: CategoryScaleKind;
66
+ hoveredId: string | null;
67
+ onHoverChange: (hover: AnnotationHover | null) => void;
68
+ /**
69
+ * True while a drag-to-select is settling. Annotation clicks are dropped
70
+ * then, so releasing a range selection over a chip never also navigates.
71
+ */
72
+ isClickSuppressed?: (() => boolean) | undefined;
73
+ }
74
+
75
+ /** Ring drawn around a chip so overlapping chips still read as separate. */
76
+ const CHIP_RING: string = "var(--ou-chart-marker-ring, #ffffff)";
77
+
78
+ const HAIRLINE_OPACITY: number = 0.34;
79
+ const HAIRLINE_OPACITY_HOVERED: number = 0.85;
80
+ const REGION_FILL_OPACITY: number = 0.1;
81
+ const REGION_FILL_OPACITY_HOVERED: number = 0.2;
82
+
83
+ /** Font size of the label inside a region pill. */
84
+ const REGION_LABEL_FONT_SIZE: number = 9;
85
+
86
+ /** Padding either side of a region pill's label. */
87
+ const REGION_LABEL_INSET: number = 6;
88
+
89
+ /** How far a chip's invisible hit area extends past the chip itself. */
90
+ const HIT_AREA_PADDING: number = 3;
91
+
92
+ /*
93
+ * SVG has no z-index, and recharts portals each layer into its own DOM
94
+ * node, so paint order comes from these rather than from where the JSX
95
+ * sits. Region bands go under every series (recharts draws areas at 100,
96
+ * bars at 300, lines at 400); hairlines go over the filled marks but under
97
+ * the lines, so the data stays the brightest thing on the chart; the rail
98
+ * itself goes above everything, including the active dot at 1200.
99
+ */
100
+ const REGION_BAND_Z_INDEX: number = 50;
101
+ const HAIRLINE_Z_INDEX: number = 350;
102
+ const RAIL_Z_INDEX: number = 1300;
103
+
104
+ function isActivationKey(key: string): boolean {
105
+ return key === "Enter" || key === " " || key === "Spacebar";
106
+ }
107
+
108
+ /*
109
+ * A press that reaches the chart starts a drag-to-select. Chips and pills
110
+ * are targets in their own right, so their presses stop there — otherwise
111
+ * clicking one both navigates and leaves a stray selection behind.
112
+ */
113
+ function stopPress(event: React.MouseEvent): void {
114
+ event.stopPropagation();
115
+ }
116
+
117
+ /**
118
+ * Everything the annotation rail draws inside the chart's SVG: shaded
119
+ * region bands and their pills, one hairline per marker cluster, and the
120
+ * clickable chips that top them.
121
+ *
122
+ * Rendered as a plain child of the recharts chart — recharts 3 hands any
123
+ * child the chart context, so the hooks here return the real geometry and
124
+ * the rail stays pinned to the plot through every resize, with no
125
+ * measurement round-trip through React state.
126
+ */
127
+ const ChartAnnotationLayer: React.FunctionComponent<
128
+ ChartAnnotationLayerProps
129
+ > = (props: ChartAnnotationLayerProps): React.ReactElement | null => {
130
+ const plotArea: ReturnType<typeof usePlotArea> = usePlotArea();
131
+ const ticks: ReturnType<typeof useXAxisTicks> = useXAxisTicks();
132
+ const chartWidth: number | undefined = useChartWidth();
133
+ /*
134
+ * clipPath ids are document-global. Two charts on one dashboard would
135
+ * otherwise both define `ou-region-clip-region-0-…`, and every region
136
+ * label on the page would be clipped to whichever chart rendered last.
137
+ */
138
+ const clipNamespace: string = React.useId();
139
+
140
+ const {
141
+ formattedTimeReferenceLines,
142
+ formattedReferenceRegions,
143
+ categoryLabels,
144
+ axisPaddingPx,
145
+ scaleKind,
146
+ hoveredId,
147
+ onHoverChange,
148
+ isClickSuppressed,
149
+ } = props;
150
+
151
+ const resolveX: CategoryXResolver | null =
152
+ React.useMemo((): CategoryXResolver | null => {
153
+ if (!plotArea) {
154
+ return null;
155
+ }
156
+ return buildCategoryXResolver({
157
+ ticks: ticks as ReadonlyArray<AxisTick> | undefined,
158
+ categoryLabels,
159
+ plotArea,
160
+ axisPaddingPx,
161
+ scaleKind,
162
+ });
163
+ }, [ticks, categoryLabels, plotArea, axisPaddingPx, scaleKind]);
164
+
165
+ const regions: Array<PositionedRegion> = React.useMemo(():
166
+ | Array<PositionedRegion>
167
+ | never => {
168
+ if (!formattedReferenceRegions?.length || !resolveX) {
169
+ return [];
170
+ }
171
+ return positionRegions({ regions: formattedReferenceRegions, resolveX });
172
+ }, [formattedReferenceRegions, resolveX]);
173
+
174
+ const clusters: Array<MarkerCluster> = React.useMemo(():
175
+ | Array<MarkerCluster>
176
+ | never => {
177
+ if (!formattedTimeReferenceLines?.length || !resolveX) {
178
+ return [];
179
+ }
180
+ const positioned: Array<PositionedMarker> = positionMarkers({
181
+ markers: formattedTimeReferenceLines,
182
+ resolveX,
183
+ });
184
+ return clusterMarkers({ positioned });
185
+ }, [formattedTimeReferenceLines, resolveX]);
186
+
187
+ if (!plotArea || !resolveX) {
188
+ return null;
189
+ }
190
+
191
+ const plotBottom: number = plotArea.y + plotArea.height;
192
+ const markerRailY: number = getMarkerRailY(plotArea.y);
193
+ /*
194
+ * Whether the rail reserved a marker strip, which is what the chart's
195
+ * margin/legend padding was sized from — not whether any marker survived
196
+ * positioning. Markers that all fall outside the window still bought
197
+ * their row, and measuring from a row that is not there would drop the
198
+ * region pill onto the plot.
199
+ */
200
+ const reservedMarkerStrip: boolean = Boolean(
201
+ formattedTimeReferenceLines?.length,
202
+ );
203
+ const regionRailY: number = getRegionRailY(plotArea.y, reservedMarkerStrip);
204
+ const width: number = chartWidth ?? plotArea.x + plotArea.width;
205
+
206
+ const canClick: () => boolean = (): boolean => {
207
+ return !isClickSuppressed?.();
208
+ };
209
+
210
+ return (
211
+ <>
212
+ {/*
213
+ * Bands only. They cover the whole plot, so they stay inert: a
214
+ * pointer over one has to reach the series for the value tooltip,
215
+ * and a drag across one has to reach the range selection. The pill
216
+ * on the rail is the region's affordance.
217
+ */}
218
+ <ZIndexLayer zIndex={REGION_BAND_Z_INDEX}>
219
+ <g
220
+ className="oneuptime-chart-annotation-bands"
221
+ style={{ pointerEvents: "none" }}
222
+ >
223
+ {regions.map((positioned: PositionedRegion): React.ReactElement => {
224
+ return (
225
+ <rect
226
+ key={positioned.id}
227
+ data-testid="chart-annotation-region-band"
228
+ x={positioned.x1}
229
+ y={plotArea.y}
230
+ width={positioned.x2 - positioned.x1}
231
+ height={plotArea.height}
232
+ fill={positioned.color}
233
+ fillOpacity={
234
+ hoveredId === positioned.id
235
+ ? REGION_FILL_OPACITY_HOVERED
236
+ : REGION_FILL_OPACITY
237
+ }
238
+ />
239
+ );
240
+ })}
241
+ </g>
242
+ </ZIndexLayer>
243
+
244
+ <ZIndexLayer zIndex={HAIRLINE_Z_INDEX}>
245
+ <g
246
+ className="oneuptime-chart-annotation-lines"
247
+ style={{ pointerEvents: "none" }}
248
+ >
249
+ {regions.map((positioned: PositionedRegion): React.ReactElement => {
250
+ const isHovered: boolean = hoveredId === positioned.id;
251
+ /*
252
+ * Edges rather than a full border: a boxed region reads as a
253
+ * second chart frame, two hairlines read as "this span".
254
+ */
255
+ return (
256
+ <g key={positioned.id}>
257
+ <line
258
+ x1={positioned.x1}
259
+ x2={positioned.x1}
260
+ y1={plotArea.y}
261
+ y2={plotBottom}
262
+ stroke={positioned.color}
263
+ strokeWidth={1}
264
+ strokeOpacity={isHovered ? 0.8 : 0.45}
265
+ />
266
+ <line
267
+ x1={positioned.x2}
268
+ x2={positioned.x2}
269
+ y1={plotArea.y}
270
+ y2={plotBottom}
271
+ stroke={positioned.color}
272
+ strokeWidth={1}
273
+ strokeOpacity={isHovered ? 0.8 : 0.45}
274
+ />
275
+ </g>
276
+ );
277
+ })}
278
+ {clusters.map((cluster: MarkerCluster): React.ReactElement => {
279
+ const isHovered: boolean = hoveredId === cluster.id;
280
+ return (
281
+ <line
282
+ key={cluster.id}
283
+ data-testid="chart-annotation-hairline"
284
+ x1={cluster.xPixel}
285
+ x2={cluster.xPixel}
286
+ y1={plotArea.y}
287
+ y2={plotBottom}
288
+ stroke={cluster.color}
289
+ strokeWidth={isHovered ? 1.5 : 1}
290
+ strokeOpacity={
291
+ isHovered ? HAIRLINE_OPACITY_HOVERED : HAIRLINE_OPACITY
292
+ }
293
+ {...(cluster.strokeDasharray
294
+ ? { strokeDasharray: cluster.strokeDasharray }
295
+ : {})}
296
+ />
297
+ );
298
+ })}
299
+ </g>
300
+ </ZIndexLayer>
301
+
302
+ <ZIndexLayer zIndex={RAIL_Z_INDEX}>
303
+ <g
304
+ className="oneuptime-chart-annotations"
305
+ data-testid="chart-annotation-layer"
306
+ >
307
+ {regions.map((positioned: PositionedRegion): React.ReactElement => {
308
+ const isHovered: boolean = hoveredId === positioned.id;
309
+ const regionWidth: number = positioned.x2 - positioned.x1;
310
+ const label: string | undefined = positioned.region.original.label;
311
+ const clipId: string = `ou-region-clip-${clipNamespace}-${positioned.id}`;
312
+ /*
313
+ * Cut to the pill rather than clipped by it: a hard edge
314
+ * mid-glyph reads as a rendering fault, an ellipsis reads as a
315
+ * name that did not fit. The clip path stays as a backstop for
316
+ * the estimate.
317
+ */
318
+ const shownLabel: string | null = label
319
+ ? truncateLabelToWidth({
320
+ label,
321
+ maxWidthPx: regionWidth - REGION_LABEL_INSET * 2,
322
+ fontSizePx: REGION_LABEL_FONT_SIZE,
323
+ })
324
+ : null;
325
+
326
+ const hover: AnnotationHover = {
327
+ id: positioned.id,
328
+ anchorX: positioned.x1 + regionWidth / 2,
329
+ anchorY: regionRailY + REGION_RAIL_HEIGHT,
330
+ chartWidth: width,
331
+ markers: [],
332
+ region: positioned.region,
333
+ heading: label || "Window",
334
+ };
335
+
336
+ const onActivate: (() => void) | undefined =
337
+ positioned.region.original.onClick;
338
+
339
+ return (
340
+ <g
341
+ key={positioned.id}
342
+ data-testid="chart-annotation-region"
343
+ data-annotation-label={label || ""}
344
+ role={onActivate ? "button" : "img"}
345
+ tabIndex={0}
346
+ aria-label={
347
+ label ? `Window: ${label}` : "Highlighted window on the chart"
348
+ }
349
+ style={{ cursor: onActivate ? "pointer" : "default" }}
350
+ onMouseEnter={(): void => {
351
+ onHoverChange(hover);
352
+ }}
353
+ onFocus={(): void => {
354
+ onHoverChange(hover);
355
+ }}
356
+ onMouseLeave={(): void => {
357
+ onHoverChange(null);
358
+ }}
359
+ onBlur={(): void => {
360
+ onHoverChange(null);
361
+ }}
362
+ onMouseDown={stopPress}
363
+ onClick={(event: React.MouseEvent): void => {
364
+ event.stopPropagation();
365
+ if (!canClick()) {
366
+ return;
367
+ }
368
+ onActivate?.();
369
+ }}
370
+ onKeyDown={(event: React.KeyboardEvent): void => {
371
+ if (!isActivationKey(event.key)) {
372
+ return;
373
+ }
374
+ event.preventDefault();
375
+ event.stopPropagation();
376
+ onActivate?.();
377
+ }}
378
+ >
379
+ <rect
380
+ x={positioned.x1}
381
+ y={regionRailY}
382
+ width={regionWidth}
383
+ height={REGION_RAIL_HEIGHT}
384
+ rx={3}
385
+ fill={positioned.color}
386
+ fillOpacity={isHovered ? 0.26 : 0.16}
387
+ stroke={positioned.color}
388
+ strokeOpacity={isHovered ? 0.9 : 0.55}
389
+ strokeWidth={1}
390
+ />
391
+ {shownLabel ? (
392
+ <>
393
+ <clipPath id={clipId}>
394
+ <rect
395
+ x={positioned.x1 + 3}
396
+ y={regionRailY}
397
+ width={Math.max(regionWidth - 6, 0)}
398
+ height={REGION_RAIL_HEIGHT}
399
+ />
400
+ </clipPath>
401
+ <text
402
+ clipPath={`url(#${clipId})`}
403
+ x={positioned.x1 + REGION_LABEL_INSET}
404
+ y={regionRailY + REGION_RAIL_HEIGHT - 3.5}
405
+ fontSize={REGION_LABEL_FONT_SIZE}
406
+ fontWeight={600}
407
+ fill={positioned.color}
408
+ style={{ pointerEvents: "none" }}
409
+ >
410
+ {shownLabel}
411
+ </text>
412
+ </>
413
+ ) : null}
414
+ </g>
415
+ );
416
+ })}
417
+
418
+ {clusters.map((cluster: MarkerCluster): React.ReactElement => {
419
+ const isHovered: boolean = hoveredId === cluster.id;
420
+ const count: number = cluster.markers.length;
421
+ const chipWidth: number = getChipWidth(count);
422
+ const chipX: number = cluster.xPixel - chipWidth / 2;
423
+ const chipCentreY: number = markerRailY + MARKER_RAIL_HEIGHT / 2;
424
+
425
+ const hover: AnnotationHover = {
426
+ id: cluster.id,
427
+ anchorX: cluster.xPixel,
428
+ anchorY: markerRailY + MARKER_RAIL_HEIGHT,
429
+ chartWidth: width,
430
+ markers: cluster.markers,
431
+ heading: cluster.formattedX,
432
+ };
433
+
434
+ const firstLabel: string =
435
+ cluster.markers[0]?.original.label || "Event";
436
+ const ariaLabel: string =
437
+ count > 1
438
+ ? `${count} events at ${cluster.formattedX}`
439
+ : `${firstLabel} at ${cluster.formattedX}`;
440
+
441
+ const activate: () => void = (): void => {
442
+ /*
443
+ * One event goes straight through; a cluster has no single
444
+ * destination, so it opens its card and lets the reader pick.
445
+ */
446
+ if (count === 1) {
447
+ cluster.markers[0]?.original.onClick?.();
448
+ return;
449
+ }
450
+ onHoverChange(hover);
451
+ };
452
+
453
+ return (
454
+ <g key={cluster.id} data-testid="chart-annotation-marker">
455
+ {/* Stem: ties the chip to its hairline across the rail gap. */}
456
+ <line
457
+ x1={cluster.xPixel}
458
+ x2={cluster.xPixel}
459
+ y1={markerRailY + MARKER_RAIL_HEIGHT}
460
+ y2={plotArea.y}
461
+ stroke={cluster.color}
462
+ strokeWidth={1}
463
+ strokeOpacity={isHovered ? 0.9 : 0.55}
464
+ style={{ pointerEvents: "none" }}
465
+ />
466
+ <g
467
+ data-testid="chart-annotation-chip"
468
+ data-annotation-count={String(count)}
469
+ data-annotation-kind={cluster.kind}
470
+ role="button"
471
+ tabIndex={0}
472
+ aria-label={ariaLabel}
473
+ style={{ cursor: "pointer" }}
474
+ onMouseEnter={(): void => {
475
+ onHoverChange(hover);
476
+ }}
477
+ onFocus={(): void => {
478
+ onHoverChange(hover);
479
+ }}
480
+ onMouseLeave={(): void => {
481
+ onHoverChange(null);
482
+ }}
483
+ onBlur={(): void => {
484
+ onHoverChange(null);
485
+ }}
486
+ onMouseDown={stopPress}
487
+ onClick={(event: React.MouseEvent): void => {
488
+ // An annotation click must never also pin a time bucket.
489
+ event.stopPropagation();
490
+ if (!canClick()) {
491
+ return;
492
+ }
493
+ activate();
494
+ }}
495
+ onKeyDown={(event: React.KeyboardEvent): void => {
496
+ if (!isActivationKey(event.key)) {
497
+ return;
498
+ }
499
+ event.preventDefault();
500
+ event.stopPropagation();
501
+ if (count === 1) {
502
+ cluster.markers[0]?.original.onClick?.();
503
+ return;
504
+ }
505
+ onHoverChange({ ...hover, takeFocus: true });
506
+ }}
507
+ >
508
+ {/*
509
+ * An invisible, generously sized hit area: a 13px chip is
510
+ * below the comfortable pointer target, and widening the
511
+ * visible chip to compensate would crowd the rail. It
512
+ * grows upward only as far as the chart's own edge — a
513
+ * negative y is not clickable, just invalid.
514
+ */}
515
+ <rect
516
+ x={chipX - 5}
517
+ y={Math.max(0, markerRailY - HIT_AREA_PADDING)}
518
+ width={chipWidth + 10}
519
+ height={
520
+ MARKER_RAIL_HEIGHT +
521
+ HIT_AREA_PADDING +
522
+ Math.min(HIT_AREA_PADDING, markerRailY)
523
+ }
524
+ fill="transparent"
525
+ />
526
+ <rect
527
+ x={chipX}
528
+ y={
529
+ markerRailY +
530
+ (MARKER_RAIL_HEIGHT - SINGLE_MARKER_CHIP_SIZE) / 2
531
+ }
532
+ width={chipWidth}
533
+ height={SINGLE_MARKER_CHIP_SIZE}
534
+ rx={SINGLE_MARKER_CHIP_SIZE / 2}
535
+ fill={cluster.color}
536
+ stroke={CHIP_RING}
537
+ strokeWidth={isHovered ? 2.5 : 1.5}
538
+ />
539
+ {count > 1 ? (
540
+ <text
541
+ x={cluster.xPixel}
542
+ y={chipCentreY + 3.2}
543
+ textAnchor="middle"
544
+ fontSize={9}
545
+ fontWeight={700}
546
+ fill="#ffffff"
547
+ style={{ pointerEvents: "none" }}
548
+ >
549
+ {count}
550
+ </text>
551
+ ) : (
552
+ /*
553
+ * Sits on the chip's own colour, not on the chart
554
+ * surface, so it must not follow the ring token that
555
+ * flips with the theme.
556
+ */
557
+ <circle
558
+ cx={cluster.xPixel}
559
+ cy={chipCentreY}
560
+ r={2.2}
561
+ fill="#ffffff"
562
+ fillOpacity={0.9}
563
+ style={{ pointerEvents: "none" }}
564
+ />
565
+ )}
566
+ </g>
567
+ </g>
568
+ );
569
+ })}
570
+ </g>
571
+ </ZIndexLayer>
572
+ </>
573
+ );
574
+ };
575
+
576
+ export default ChartAnnotationLayer;