@oneuptime/common 14.0.11 → 14.0.12

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 (1406) hide show
  1. package/Models/AnalyticsModels/AuditLog.ts +63 -0
  2. package/Models/AnalyticsModels/Log.ts +26 -3
  3. package/Models/AnalyticsModels/Metric.ts +28 -3
  4. package/Models/AnalyticsModels/MetricItemAggMV1m.ts +21 -3
  5. package/Models/AnalyticsModels/SloHistory.ts +6 -4
  6. package/Models/DatabaseModels/AutoRemediationRule.ts +1 -1
  7. package/Models/DatabaseModels/CodeRepository.ts +1 -1
  8. package/Models/DatabaseModels/Dashboard.ts +148 -0
  9. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +11 -0
  10. package/Models/DatabaseModels/DatabaseServerEndpoint.ts +1 -0
  11. package/Models/DatabaseModels/EnterpriseLicense.ts +2 -0
  12. package/Models/DatabaseModels/EnterpriseLicenseInstance.ts +1 -0
  13. package/Models/DatabaseModels/IncomingCallLog.ts +13 -0
  14. package/Models/DatabaseModels/Index.ts +6 -0
  15. package/Models/DatabaseModels/LlmModelPrice.ts +1 -0
  16. package/Models/DatabaseModels/McpOAuthClient.ts +191 -0
  17. package/Models/DatabaseModels/McpOAuthGrant.ts +464 -0
  18. package/Models/DatabaseModels/McpOAuthToken.ts +228 -0
  19. package/Models/DatabaseModels/Monitor.ts +157 -0
  20. package/Models/DatabaseModels/MonitorSecret.ts +93 -1
  21. package/Models/DatabaseModels/NetworkEndpoint.ts +1 -0
  22. package/Models/DatabaseModels/OnCallDutyPolicy.ts +155 -0
  23. package/Models/DatabaseModels/Project.ts +44 -101
  24. package/Models/DatabaseModels/StatusPage.ts +155 -0
  25. package/Models/DatabaseModels/TelemetrySourceMap.ts +1 -0
  26. package/Models/DatabaseModels/Workflow.ts +226 -7
  27. package/Server/API/AIAgentDataAPI.ts +1 -1
  28. package/Server/API/AutoRemediationAPI.ts +9 -41
  29. package/Server/API/CommonAPI.ts +19 -0
  30. package/Server/API/DashboardAPI.ts +7 -3
  31. package/Server/API/StatusPageAPI.ts +143 -89
  32. package/Server/EnvironmentConfig.ts +27 -0
  33. package/Server/Infrastructure/Postgres/SchemaMigrations/1796800000000-FoldAiSwitchesIntoEnableAi.ts +105 -0
  34. package/Server/Infrastructure/Postgres/SchemaMigrations/1796900000000-AddMcpOAuthTables.ts +97 -0
  35. package/Server/Infrastructure/Postgres/SchemaMigrations/1797000000000-AddWorkflowIncomingEmailSecretKey.ts +36 -0
  36. package/Server/Infrastructure/Postgres/SchemaMigrations/1797100000000-AddMonitorSecretAccess.ts +55 -0
  37. package/Server/Infrastructure/Postgres/SchemaMigrations/1797200000000-AddArchiveToMoreResources.ts +167 -0
  38. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +10 -0
  39. package/Server/Middleware/McpDelegationAuthorization.ts +204 -0
  40. package/Server/Middleware/McpOAuthRateLimit.ts +287 -0
  41. package/Server/Middleware/ProjectAuthorization.ts +23 -2
  42. package/Server/Middleware/UserAuthorization.ts +12 -0
  43. package/Server/Services/AIService.ts +2 -2
  44. package/Server/Services/AnalyticsDatabaseService.ts +22 -5
  45. package/Server/Services/ApiKeyService.ts +31 -7
  46. package/Server/Services/AutoRemediationRuleEngineService.ts +15 -27
  47. package/Server/Services/AutoRemediationRuleService.ts +1 -1
  48. package/Server/Services/DashboardService.ts +7 -2
  49. package/Server/Services/DatabaseServerService.ts +219 -0
  50. package/Server/Services/DatabaseService.ts +29 -32
  51. package/Server/Services/InboundEmail/InboundEmailProvider.ts +44 -0
  52. package/Server/Services/InboundEmail/Providers/SendGridInboundProvider.ts +57 -1
  53. package/Server/Services/IncomingCallMissedCallNotificationService.ts +280 -0
  54. package/Server/Services/IncomingCallPolicyService.ts +118 -0
  55. package/Server/Services/Index.ts +8 -0
  56. package/Server/Services/KubernetesClusterAiAccessService.ts +10 -47
  57. package/Server/Services/KubernetesClusterService.ts +3 -3
  58. package/Server/Services/LogAggregationService.ts +38 -5
  59. package/Server/Services/McpOAuthClientService.ts +148 -0
  60. package/Server/Services/McpOAuthGrantService.ts +275 -0
  61. package/Server/Services/McpOAuthTokenService.ts +213 -0
  62. package/Server/Services/MetricAggregationService.ts +4 -4
  63. package/Server/Services/MonitorGroupService.ts +49 -28
  64. package/Server/Services/MonitorProbeService.ts +1 -0
  65. package/Server/Services/MonitorSecretService.ts +425 -0
  66. package/Server/Services/MonitorService.ts +15 -1
  67. package/Server/Services/OnCallDutyPolicyService.ts +36 -2
  68. package/Server/Services/ProjectService.ts +53 -24
  69. package/Server/Services/ResourceAiAccessService.ts +3 -14
  70. package/Server/Services/RunnerJobService.ts +2 -2
  71. package/Server/Services/RunnerService.ts +2 -2
  72. package/Server/Services/StatusPageService.ts +66 -8
  73. package/Server/Services/StatusPageSubscriberService.ts +23 -0
  74. package/Server/Services/TeamMemberService.ts +352 -84
  75. package/Server/Services/UserNotificationSettingService.ts +20 -0
  76. package/Server/Services/WorkflowService.ts +31 -0
  77. package/Server/Types/AnalyticsDatabase/ModelPermission.ts +6 -0
  78. package/Server/Types/Database/Permissions/Index.ts +10 -0
  79. package/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.ts +2 -0
  80. package/Server/Types/Workflow/Components/Conditions/IfElse.ts +36 -138
  81. package/Server/Types/Workflow/Components/IncomingEmail.ts +216 -0
  82. package/Server/Types/Workflow/Components/Index.ts +32 -18
  83. package/Server/Types/Workflow/Components/Schedule.ts +25 -4
  84. package/Server/Utils/AI/CodeFix/CodeFixReadiness.ts +1 -1
  85. package/Server/Utils/AI/CodeFix/CodeFixRunQueue.ts +1 -1
  86. package/Server/Utils/AI/CodeFix/FixRunBudget.ts +58 -50
  87. package/Server/Utils/AI/CodeFix/OpenPullRequestCap.ts +25 -19
  88. package/Server/Utils/AI/Remediation/RemediationExecutionRunner.ts +15 -68
  89. package/Server/Utils/AI/SRE/AlertInvestigationRunner.ts +37 -53
  90. package/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.ts +8 -8
  91. package/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.ts +1 -1
  92. package/Server/Utils/AI/SRE/IncidentInvestigationRunner.ts +12 -19
  93. package/Server/Utils/AI/SRE/IncidentPostmortemRunner.ts +6 -5
  94. package/Server/Utils/AI/SRE/Insights/FixRouting.ts +3 -3
  95. package/Server/Utils/AI/SRE/Insights/InsightScanner.ts +5 -5
  96. package/Server/Utils/AI/SRE/Insights/Triage.ts +6 -5
  97. package/Server/Utils/AI/SRE/InstrumentationTaskTrigger.ts +8 -7
  98. package/Server/Utils/AI/SRE/InvestigationEligibility.ts +1 -1
  99. package/Server/Utils/AI/SRE/InvestigationQueue.ts +65 -57
  100. package/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.ts +1 -1
  101. package/Server/Utils/AI/Toolbox/AIActionTools.ts +11 -1
  102. package/Server/Utils/AI/Toolbox/AIMetaTools.ts +14 -8
  103. package/Server/Utils/AI/Toolbox/MonitorTools.ts +21 -3
  104. package/Server/Utils/AI/Toolbox/OnCallTools.ts +43 -9
  105. package/Server/Utils/AI/Toolbox/StatusPageTools.ts +36 -7
  106. package/Server/Utils/AI/Toolbox/WorkflowProbeTools.ts +26 -7
  107. package/Server/Utils/AnalyticsDatabase/ClusterConfig.ts +3 -1
  108. package/Server/Utils/Express.ts +23 -0
  109. package/Server/Utils/IncomingCall/MissedCallNotification.ts +322 -0
  110. package/Server/Utils/Mcp/McpDelegationToken.ts +171 -0
  111. package/Server/Utils/Mcp/McpOAuthConfig.ts +191 -0
  112. package/Server/Utils/Mcp/McpOAuthGrantAccess.ts +303 -0
  113. package/Server/Utils/Mcp/McpOAuthSecret.ts +149 -0
  114. package/Server/Utils/Mcp/McpOAuthSignedToken.ts +225 -0
  115. package/Server/Utils/Mcp/McpOAuthSso.ts +274 -0
  116. package/Server/Utils/Monitor/MonitorPayloadRedaction.ts +43 -0
  117. package/Server/Utils/Monitor/MonitorResource.ts +16 -3
  118. package/Server/Utils/Monitor/NetworkDeviceWalkUtil.ts +5 -8
  119. package/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.ts +3 -3
  120. package/Server/Utils/Slo/SloMetricUtil.ts +3 -3
  121. package/Server/Utils/Telemetry/DatabaseEndpointDiscovery.ts +11 -3
  122. package/Server/Utils/Telemetry/MessageQueueDiscovery.ts +7 -0
  123. package/Server/Utils/Telemetry/ServiceDependencyDiscovery.ts +171 -17
  124. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.ts +2 -0
  125. package/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.ts +2 -0
  126. package/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.ts +2 -0
  127. package/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.ts +2 -0
  128. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.ts +4 -0
  129. package/Server/Utils/Workspace/Slack/Actions/Alert.ts +2 -0
  130. package/Server/Utils/Workspace/Slack/Actions/AlertEpisode.ts +2 -0
  131. package/Server/Utils/Workspace/Slack/Actions/Incident.ts +4 -0
  132. package/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.ts +2 -0
  133. package/Tests/App/Accounts/LoginPasskey.test.tsx +27 -0
  134. package/Tests/App/Accounts/McpAuthorizePage.test.tsx +2034 -0
  135. package/Tests/App/AdvancedMenuSectionsCollapsed.test.tsx +446 -0
  136. package/Tests/App/Dashboard/AIFeaturesSettingsPointers.test.tsx +55 -19
  137. package/Tests/App/Dashboard/AIInvestigationSettingsLimits.test.tsx +451 -0
  138. package/Tests/App/Dashboard/AIInvestigationStage.test.ts +141 -0
  139. package/Tests/App/Dashboard/AiAccessModes.test.ts +261 -0
  140. package/Tests/App/Dashboard/AiAccessRow.test.tsx +401 -0
  141. package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +19 -6
  142. package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +76 -33
  143. package/Tests/App/Dashboard/AnswerSources.test.tsx +359 -0
  144. package/Tests/App/Dashboard/ArchivableResourceListPages.test.tsx +655 -0
  145. package/Tests/App/Dashboard/ArchivedResourceBanner.test.tsx +543 -0
  146. package/Tests/App/Dashboard/ArchivedResourceNavigation.test.tsx +634 -0
  147. package/Tests/App/Dashboard/ArchivedResourceViewLayouts.test.tsx +321 -0
  148. package/Tests/App/Dashboard/BulkChangeStateModalSteps.test.ts +109 -0
  149. package/Tests/App/Dashboard/CodeProduct.test.tsx +194 -0
  150. package/Tests/App/Dashboard/ConversationComposer.test.tsx +439 -0
  151. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +5 -3
  152. package/Tests/App/Dashboard/CorrelateResultSummary.test.tsx +15 -3
  153. package/Tests/App/Dashboard/CreateOAuthWorkflowVariableFormSteps.test.tsx +925 -0
  154. package/Tests/App/Dashboard/CreateOAuthWorkflowVariableModal.test.tsx +267 -20
  155. package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +493 -100
  156. package/Tests/App/Dashboard/DangerZone.test.tsx +146 -3
  157. package/Tests/App/Dashboard/DashboardLazyPages.test.tsx +0 -3
  158. package/Tests/App/Dashboard/DeleteDialogsNameTheResource.test.tsx +257 -0
  159. package/Tests/App/Dashboard/DeveloperDocsGuides.test.ts +458 -0
  160. package/Tests/App/Dashboard/DeveloperDocsLocales.test.ts +124 -0
  161. package/Tests/App/Dashboard/DeveloperDocsPage.test.tsx +471 -0
  162. package/Tests/App/Dashboard/DeveloperMenuSections.test.tsx +657 -0
  163. package/Tests/App/Dashboard/DisabledWarningArchived.test.tsx +196 -0
  164. package/Tests/App/Dashboard/DiscoveryScanEditForm.test.tsx +52 -82
  165. package/Tests/App/Dashboard/EnterpriseFeatureUpgrade.test.tsx +67 -0
  166. package/Tests/App/Dashboard/EscalationRuleReadiness.test.tsx +47 -0
  167. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +2 -1
  168. package/Tests/App/Dashboard/HomeOverviewStatsFirstRun.test.tsx +19 -2
  169. package/Tests/App/Dashboard/IncidentAlertLinkSideMenus.test.tsx +3 -1
  170. package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +19 -6
  171. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +82 -49
  172. package/Tests/App/Dashboard/InventoryItemSideMenu.test.tsx +1 -0
  173. package/Tests/App/Dashboard/InvestigationConversation.test.tsx +1401 -43
  174. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +452 -0
  175. package/Tests/App/Dashboard/InvestigationNotStarted.test.tsx +134 -1
  176. package/Tests/App/Dashboard/InvestigationNotice.test.tsx +300 -0
  177. package/Tests/App/Dashboard/InvestigationPanel.test.tsx +525 -53
  178. package/Tests/App/Dashboard/KubernetesClusterAiAccessSettings.test.ts +106 -30
  179. package/Tests/App/Dashboard/KubernetesClusterAiAgentStatus.test.ts +743 -9
  180. package/Tests/App/Dashboard/KubernetesClusterAiPage.test.tsx +838 -81
  181. package/Tests/App/Dashboard/KubernetesClusterAiPageServerParity.test.ts +958 -7
  182. package/Tests/App/Dashboard/McpAuthorizationResume.test.tsx +495 -0
  183. package/Tests/App/Dashboard/McpServerPage.test.tsx +1106 -0
  184. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +16 -4
  185. package/Tests/App/Dashboard/MonitorCriteriaAdvancedOptions.test.tsx +267 -0
  186. package/Tests/App/Dashboard/MonitorOverviewInput.test.ts +3 -0
  187. package/Tests/App/Dashboard/MonitorSecretsAccessForm.test.tsx +727 -0
  188. package/Tests/App/Dashboard/MonitorViewLayout.test.tsx +37 -0
  189. package/Tests/App/Dashboard/MovedRunnerSettingsRedirects.test.tsx +345 -0
  190. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +4 -1
  191. package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +36 -4
  192. package/Tests/App/Dashboard/NotificationRuleFormParts.test.tsx +247 -0
  193. package/Tests/App/Dashboard/OAuthIdentityProviders.test.tsx +589 -0
  194. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +12 -1
  195. package/Tests/App/Dashboard/PermissionModePicker.test.tsx +316 -0
  196. package/Tests/App/Dashboard/ProductMenuBreadcrumbs.test.tsx +83 -39
  197. package/Tests/App/Dashboard/ProductOrientation.test.tsx +37 -4
  198. package/Tests/App/Dashboard/ProjectAISettingsPages.test.tsx +244 -76
  199. package/Tests/App/Dashboard/RecommendationsLoadedContext.test.tsx +57 -1
  200. package/Tests/App/Dashboard/ResourceAiAccessSettingsUtil.test.ts +190 -23
  201. package/Tests/App/Dashboard/ResourceAiAgentAttentionServerParity.test.ts +5 -11
  202. package/Tests/App/Dashboard/ResourceAiAgentPage.test.tsx +458 -103
  203. package/Tests/App/Dashboard/ResourceAiAgentStatus.test.ts +8 -4
  204. package/Tests/App/Dashboard/ResourceArchiveCopy.test.ts +218 -0
  205. package/Tests/App/Dashboard/ResourceAuditLogsSideMenus.test.tsx +16 -2
  206. package/Tests/App/Dashboard/RumSessionReplaySideMenu.test.tsx +1 -0
  207. package/Tests/App/Dashboard/RunbookRunnerRoutes.test.tsx +403 -0
  208. package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +26 -17
  209. package/Tests/App/Dashboard/RunnerNavigation.test.tsx +577 -0
  210. package/Tests/App/Dashboard/RunnerPagesInRunbooksFlow.test.tsx +581 -0
  211. package/Tests/App/Dashboard/RunnerProductSearch.test.tsx +195 -0
  212. package/Tests/App/Dashboard/RunnerSupersededByAiAgentNote.test.tsx +19 -6
  213. package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +2 -1
  214. package/Tests/App/Dashboard/SecurityEventSeverityPill.test.tsx +39 -15
  215. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +2 -1
  216. package/Tests/App/Dashboard/SloNavigationWiring.test.tsx +20 -1
  217. package/Tests/App/Dashboard/SloViewSideMenu.test.tsx +14 -2
  218. package/Tests/App/Dashboard/TelemetryIngestionKeyEdit.test.tsx +107 -13
  219. package/Tests/App/Dashboard/UserElementEmail.test.tsx +50 -0
  220. package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +42 -8
  221. package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +51 -1
  222. package/Tests/App/Dashboard/WorkflowBuilderArchived.test.tsx +490 -0
  223. package/Tests/App/Dashboard/WorkflowBuilderIncomingEmailSecretKey.test.tsx +436 -0
  224. package/Tests/App/Dashboard/WorkflowBuilderRunDownload.test.tsx +416 -0
  225. package/Tests/App/Dashboard/WorkflowBuilderTurnOn.test.tsx +828 -0
  226. package/Tests/App/Dashboard/WorkflowBuilderWebhookSecretKey.test.tsx +499 -0
  227. package/Tests/App/Dashboard/WorkflowRunsLogsMenus.test.tsx +758 -0
  228. package/Tests/App/Dashboard/WorkflowRunsPages.test.tsx +507 -0
  229. package/Tests/App/Dashboard/WorkflowSettingsPage.test.tsx +172 -0
  230. package/Tests/App/Dashboard/WorkflowTemplatePicker.test.tsx +1425 -0
  231. package/Tests/App/Dashboard/WorkflowVariableCreateFormSteps.test.tsx +473 -0
  232. package/Tests/App/Dashboard/WorkflowVariableOAuthSettingsEditSteps.test.tsx +390 -0
  233. package/Tests/App/Dashboard/WorkflowVariableUtil.test.ts +357 -30
  234. package/Tests/App/Dashboard/WorkflowVariableView.test.tsx +49 -0
  235. package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +72 -2
  236. package/Tests/App/Dashboard/WorkspaceNotificationRuleFormSteps.test.tsx +499 -0
  237. package/Tests/App/StatusPage/StatusPageResourceExplorer.test.tsx +31 -0
  238. package/Tests/DialogActionRules.ts +1696 -0
  239. package/Tests/Helpers/FormStepsScan.ts +1917 -0
  240. package/Tests/Helpers/ToggleUsageScan.ts +302 -0
  241. package/Tests/Models/AnalyticsModels/TelemetryTtlSettings.test.ts +164 -0
  242. package/Tests/Models/DatabaseModels/ArchivableResourceModels.test.ts +475 -0
  243. package/Tests/Models/DatabaseModels/IncomingCallLogWorkflow.test.ts +130 -0
  244. package/Tests/Models/DatabaseModels/PermissionCatalogueCoverage.test.ts +0 -1
  245. package/Tests/Models/DatabaseModels/WorkflowIncomingEmailSecretKeyAccessControl.test.ts +252 -0
  246. package/Tests/Models/DatabaseModels/WorkflowWebhookSecretKeyAccessControl.test.ts +223 -0
  247. package/Tests/Models/McpOAuthModels.test.ts +951 -0
  248. package/Tests/Server/API/AIInvestigationAPI.test.ts +6 -4
  249. package/Tests/Server/API/ArchivedPublicRoutes.test.ts +481 -0
  250. package/Tests/Server/API/AutoRemediationApproveClusterRound.test.ts +144 -105
  251. package/Tests/Server/API/AutoRemediationApproveEnableAiGate.test.ts +816 -0
  252. package/Tests/Server/API/AutoRemediationApproveKubectlRecheck.test.ts +37 -5
  253. package/Tests/Server/API/AutoRemediationApproveResourceRound.test.ts +68 -57
  254. package/Tests/Server/API/CommonAPIAuditIdentityProps.test.ts +468 -0
  255. package/Tests/Server/API/ResourceAiAccessAPI.test.ts +0 -4
  256. package/Tests/Server/API/StatusPagePublicReadsLeaveOutArchivedMonitors.test.ts +126 -0
  257. package/Tests/Server/Infrastructure/Postgres/AddArchiveToMoreResourcesMigration.test.ts +200 -0
  258. package/Tests/Server/Infrastructure/Postgres/FoldAiSwitchesIntoEnableAiMigration.test.ts +543 -0
  259. package/Tests/Server/Infrastructure/Postgres/FoldAiSwitchesIntoEnableAiPostgres.test.ts +862 -0
  260. package/Tests/Server/Middleware/McpDelegationAuthorization.test.ts +862 -0
  261. package/Tests/Server/Middleware/McpOAuthRateLimit.test.ts +959 -0
  262. package/Tests/Server/Middleware/ProjectAuthorizationApiKeyIdentity.test.ts +361 -0
  263. package/Tests/Server/Middleware/UserAuthorizationMcpDelegation.test.ts +568 -0
  264. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +60 -0
  265. package/Tests/Server/Services/AddMcpOAuthTablesMigration.test.ts +616 -0
  266. package/Tests/Server/Services/AiAccessEnableAiMasterSwitch.test.ts +761 -0
  267. package/Tests/Server/Services/AnalyticsDatabaseServiceReadOnlyCredentialBeforeHooks.test.ts +224 -0
  268. package/Tests/Server/Services/ApiKeyServiceResolvedName.test.ts +307 -0
  269. package/Tests/Server/Services/ArchivedStatusPageAndDashboardAccess.test.ts +505 -0
  270. package/Tests/Server/Services/AutoRemediationClusterRuleEngine.test.ts +61 -4
  271. package/Tests/Server/Services/AutoRemediationCommandRuleEngine.test.ts +64 -13
  272. package/Tests/Server/Services/AutoRemediationEnableAiMasterSwitch.test.ts +767 -0
  273. package/Tests/Server/Services/AutoRemediationResourceRuleEngine.test.ts +47 -8
  274. package/Tests/Server/Services/AutoRemediationRuleCommandRunners.test.ts +1 -1
  275. package/Tests/Server/Services/AutoRemediationRuleEngineService.test.ts +48 -6
  276. package/Tests/Server/Services/DatabaseServerService.test.ts +420 -0
  277. package/Tests/Server/Services/DatabaseServerSqlPostgres.test.ts +296 -2
  278. package/Tests/Server/Services/DatabaseServiceReadOnlyCredentialBeforeHooks.test.ts +396 -0
  279. package/Tests/Server/Services/InboundEmail/SendGridInboundProviderRecipients.test.ts +172 -0
  280. package/Tests/Server/Services/IncomingCallMissedCallNotificationService.test.ts +690 -0
  281. package/Tests/Server/Services/IncomingCallPolicyFindOwners.test.ts +287 -0
  282. package/Tests/Server/Services/InstrumentationTaskTrigger.test.ts +4 -3
  283. package/Tests/Server/Services/KubernetesClusterAiAccessAgentRunnerAssignments.test.ts +1 -1
  284. package/Tests/Server/Services/KubernetesClusterAiAccessDeletedRunnerRemedy.test.ts +2 -4
  285. package/Tests/Server/Services/KubernetesClusterAiAccessGapNextSteps.test.ts +26 -13
  286. package/Tests/Server/Services/KubernetesClusterAiAccessService.test.ts +180 -44
  287. package/Tests/Server/Services/KubernetesClusterAiAccessTarget.test.ts +14 -10
  288. package/Tests/Server/Services/LogAggregationService.test.ts +101 -1
  289. package/Tests/Server/Services/McpOAuthClientService.test.ts +562 -0
  290. package/Tests/Server/Services/McpOAuthGrantService.test.ts +899 -0
  291. package/Tests/Server/Services/McpOAuthPostgres.test.ts +942 -0
  292. package/Tests/Server/Services/McpOAuthTokenService.test.ts +782 -0
  293. package/Tests/Server/Services/MonitorGroupServiceBatchedStatuses.test.ts +35 -1
  294. package/Tests/Server/Services/MonitorPayAsYouGoBilling.test.ts +35 -0
  295. package/Tests/Server/Services/MonitorSecretAccessPostgres.test.ts +883 -0
  296. package/Tests/Server/Services/MonitorSecretService.test.ts +1097 -0
  297. package/Tests/Server/Services/OnCallDutyPolicyArchive.test.ts +157 -0
  298. package/Tests/Server/Services/ProjectServiceNewProjectAiDefaults.test.ts +132 -82
  299. package/Tests/Server/Services/ResourceAiAccessService.test.ts +28 -14
  300. package/Tests/Server/Services/RunnerJobEnqueueKubectlAiAgent.test.ts +0 -2
  301. package/Tests/Server/Services/ScimPushGroupsTeamLocksEdition.test.ts +5 -0
  302. package/Tests/Server/Services/TeamMemberAutoAcceptInvitation.test.ts +13 -1
  303. package/Tests/Server/Services/TeamMemberInvitationAcceptancePostgres.test.ts +942 -0
  304. package/Tests/Server/Services/TeamMemberInviteRegistrationToken.test.ts +6 -1
  305. package/Tests/Server/Services/TeamMemberProjectInvitationAcceptance.test.ts +1256 -0
  306. package/Tests/Server/Services/TeamMemberSeatLimitExistingMember.test.ts +498 -0
  307. package/Tests/Server/Services/UserNotificationSettingIncomingCallDefaults.test.ts +190 -0
  308. package/Tests/Server/Services/WorkflowIncomingEmailSecretKeyPostgres.test.ts +323 -0
  309. package/Tests/Server/Services/WorkflowService.test.ts +188 -0
  310. package/Tests/Server/Types/Workflow/Components/CustomCodeScriptError.test.ts +19 -20
  311. package/Tests/Server/Types/Workflow/Components/IfElse.test.ts +357 -66
  312. package/Tests/Server/Types/Workflow/Components/IncomingEmailTrigger.test.ts +670 -0
  313. package/Tests/Server/Types/Workflow/Components/TriggersSkipArchivedWorkflows.test.ts +257 -0
  314. package/Tests/Server/Utils/AI/AIAlertGating.test.ts +317 -184
  315. package/Tests/Server/Utils/AI/AIIncidentGating.test.ts +47 -23
  316. package/Tests/Server/Utils/AI/AIInvestigationQueue.test.ts +142 -12
  317. package/Tests/Server/Utils/AI/AIMetaTools.test.ts +31 -0
  318. package/Tests/Server/Utils/AI/AlertMonitorFilters.test.ts +2 -0
  319. package/Tests/Server/Utils/AI/ArchivedResourcesInAITools.test.ts +622 -0
  320. package/Tests/Server/Utils/AI/CodeWriteTools.test.ts +30 -1
  321. package/Tests/Server/Utils/AI/FixFromIncidentAutoTrigger.test.ts +5 -4
  322. package/Tests/Server/Utils/AI/FixRunBudget.test.ts +202 -98
  323. package/Tests/Server/Utils/AI/Insights/InsightFixRouting.test.ts +1 -1
  324. package/Tests/Server/Utils/AI/Insights/InsightTriage.test.ts +1 -1
  325. package/Tests/Server/Utils/AI/Insights/InvestigationQueueInsightSubject.test.ts +102 -58
  326. package/Tests/Server/Utils/AI/InvestigationEligibility.test.ts +24 -0
  327. package/Tests/Server/Utils/AI/InvestigationQueueRemediationExecution.test.ts +41 -5
  328. package/Tests/Server/Utils/AI/OpenPullRequestCap.test.ts +62 -22
  329. package/Tests/Server/Utils/AI/RemediationCommandToolsLiveCluster.test.ts +14 -10
  330. package/Tests/Server/Utils/AI/RemediationExecutionRunner.test.ts +205 -104
  331. package/Tests/Server/Utils/AI/RemediationExecutionRunnerEnableAiGate.test.ts +598 -0
  332. package/Tests/Server/Utils/AI/RemediationExecutionRunnerProjectGates.test.ts +94 -158
  333. package/Tests/Server/Utils/AI/RemediationExecutionRunnerResourceMode.test.ts +48 -66
  334. package/Tests/Server/Utils/AI/ResourceAccess/ResourceAccessContext.test.ts +0 -4
  335. package/Tests/Server/Utils/AnalyticsDatabase/ClusterAwareSchema.test.ts +8 -1
  336. package/Tests/Server/Utils/IncomingCall/MissedCallNotification.test.ts +555 -0
  337. package/Tests/Server/Utils/Mcp/McpDelegationToken.test.ts +677 -0
  338. package/Tests/Server/Utils/Mcp/McpOAuthConfig.test.ts +549 -0
  339. package/Tests/Server/Utils/Mcp/McpOAuthGrantAccess.test.ts +1476 -0
  340. package/Tests/Server/Utils/Mcp/McpOAuthSecret.test.ts +721 -0
  341. package/Tests/Server/Utils/Mcp/McpOAuthSignedToken.test.ts +1042 -0
  342. package/Tests/Server/Utils/Mcp/McpOAuthSso.test.ts +1399 -0
  343. package/Tests/Server/Utils/Monitor/GeneratedInboundAddressRedaction.test.ts +109 -0
  344. package/Tests/Server/Utils/Monitor/MonitorPauseFlagsGuard.test.ts +237 -0
  345. package/Tests/Server/Utils/Monitor/MonitorResourceArchived.test.ts +165 -0
  346. package/Tests/Server/Utils/Telemetry/DatabaseEndpointDiscovery.test.ts +262 -0
  347. package/Tests/Server/Utils/Telemetry/ServiceDependencyDiscovery.test.ts +976 -77
  348. package/Tests/Server/Utils/Topology/TopologyConcurrencyLimiter.test.ts +94 -39
  349. package/Tests/Server/Utils/Workspace/ArchivedOnCallPoliciesNotOffered.test.ts +133 -0
  350. package/Tests/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.test.ts +10 -3
  351. package/Tests/Types/AI/AIWorkloadLimits.test.ts +101 -0
  352. package/Tests/Types/BaseDatabase/ReadOnlyCredential.test.ts +931 -0
  353. package/Tests/Types/Call/CallProvider.test.ts +54 -1
  354. package/Tests/Types/DatabaseServer/DatabaseEndpoint.test.ts +227 -1
  355. package/Tests/Types/IncomingCall/MissedIncomingCall.test.ts +137 -0
  356. package/Tests/Types/Kubernetes/KubernetesAiAgentAccessContract.test.ts +23 -0
  357. package/Tests/Types/Mcp/McpOAuthScope.test.ts +491 -0
  358. package/Tests/Types/Monitor/MonitorSecretAccess.test.ts +347 -0
  359. package/Tests/Types/NotificationSetting/IncomingCallMissedNotificationEvent.test.ts +77 -0
  360. package/Tests/Types/NotificationSetting/NotificationEmailRollupPolicy.test.ts +5 -5
  361. package/Tests/Types/Workflow/BaseModelComponents.test.ts +56 -50
  362. package/Tests/Types/Workflow/ComponentDocumentation.test.ts +1396 -0
  363. package/Tests/Types/Workflow/Components/BaseModelWriteSteps.test.ts +158 -0
  364. package/Tests/Types/Workflow/Components/JSON.test.ts +6 -2
  365. package/Tests/Types/Workflow/ConditionEvaluation.test.ts +793 -0
  366. package/Tests/Types/Workflow/DocumentationText.test.ts +169 -0
  367. package/Tests/Types/Workflow/IncomingEmailTrigger.test.ts +446 -0
  368. package/Tests/Types/Workflow/IncomingEmailTriggerDocumentation.test.ts +174 -0
  369. package/Tests/Types/Workflow/StepSamples.test.ts +846 -0
  370. package/Tests/Types/Workflow/StepTrace.test.ts +128 -0
  371. package/Tests/Types/Workflow/StepTraceValueSample.test.ts +205 -0
  372. package/Tests/Types/Workflow/SystemColumns.test.ts +114 -0
  373. package/Tests/Types/Workflow/Templates.test.ts +345 -0
  374. package/Tests/Types/Workflow/WebhookTrigger.test.ts +221 -0
  375. package/Tests/Types/Workflow/WorkflowEnabled.test.ts +107 -0
  376. package/Tests/Types/Workspace/NotificationRuleValidationHalves.test.ts +217 -0
  377. package/Tests/UI/Components/ActionButton/RowActionsTrigger.test.tsx +748 -0
  378. package/Tests/UI/Components/BasicFormModalSteps.test.tsx +113 -0
  379. package/Tests/UI/Components/BulkUpdateFormConfirmDetails.test.tsx +148 -0
  380. package/Tests/UI/Components/Button.test.tsx +52 -13
  381. package/Tests/UI/Components/Card.test.tsx +211 -2
  382. package/Tests/UI/Components/CodeEditor/CodeEditorToolbarActions.test.tsx +121 -0
  383. package/Tests/UI/Components/CollapsibleSection.test.tsx +152 -0
  384. package/Tests/UI/Components/ComponentsModal.test.tsx +555 -930
  385. package/Tests/UI/Components/ComponentsModalUsability.test.tsx +279 -401
  386. package/Tests/UI/Components/ConfirmModal.test.tsx +195 -0
  387. package/Tests/UI/Components/DeleteConfirmation/DeleteConfirmation.test.tsx +524 -0
  388. package/Tests/UI/Components/Detail/DropdownColors.test.tsx +11 -9
  389. package/Tests/UI/Components/Detail/EntityFields.test.tsx +10 -4
  390. package/Tests/UI/Components/DictionaryRenderTextValueInput.test.tsx +94 -0
  391. package/Tests/UI/Components/Dropdown/DropdownValueBadge.test.tsx +79 -10
  392. package/Tests/UI/Components/Forms/BasicFormSubmitAllSteps.test.tsx +293 -0
  393. package/Tests/UI/Components/Forms/FormFieldCheckboxTranslation.test.tsx +14 -12
  394. package/Tests/UI/Components/Forms/FormFieldCustomElementLabel.test.tsx +156 -0
  395. package/Tests/UI/Components/Forms/FormFieldDictionaryError.test.tsx +198 -0
  396. package/Tests/UI/Components/Forms/FormFieldLongText.test.tsx +200 -0
  397. package/Tests/UI/Components/Forms/FormFieldToggleRow.test.tsx +388 -0
  398. package/Tests/UI/Components/Forms/LongFormStepsGuard.test.ts +586 -0
  399. package/Tests/UI/Components/Forms/ModelFormFormOnlyFields.test.tsx +254 -0
  400. package/Tests/UI/Components/Forms/OverloadedFormStepsGuard.test.ts +505 -0
  401. package/Tests/UI/Components/Forms/ValidationRequiredWhen.test.ts +122 -0
  402. package/Tests/UI/Components/Icon.test.tsx +43 -0
  403. package/Tests/UI/Components/Modal.test.tsx +495 -1
  404. package/Tests/UI/Components/ModalSecondaryButton.test.tsx +122 -0
  405. package/Tests/UI/Components/ModelCardPermissionGating.test.tsx +13 -9
  406. package/Tests/UI/Components/ModelDelete.test.tsx +7 -0
  407. package/Tests/UI/Components/ModelDeleteNames.test.tsx +784 -0
  408. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +9 -2
  409. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteConfirmation.test.tsx +4 -1
  410. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteNames.test.tsx +573 -0
  411. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +30 -9
  412. package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +6 -3
  413. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +20 -14
  414. package/Tests/UI/Components/NavBar.test.tsx +45 -0
  415. package/Tests/UI/Components/Pill.test.tsx +369 -50
  416. package/Tests/UI/Components/PillColors.test.ts +524 -0
  417. package/Tests/UI/Components/SideMenu.test.tsx +461 -0
  418. package/Tests/UI/Components/SideMenuSection.test.tsx +200 -0
  419. package/Tests/UI/Components/SideMenuSectionState.test.tsx +362 -0
  420. package/Tests/UI/Components/SteppedEditFormSave.test.tsx +499 -0
  421. package/Tests/UI/Components/TableRowActions.test.tsx +110 -0
  422. package/Tests/UI/Components/TextAreaAutoGrow.test.tsx +387 -0
  423. package/Tests/UI/Components/Toggle.test.tsx +846 -6
  424. package/Tests/UI/Components/ToggleUsageGuard.test.ts +274 -0
  425. package/Tests/UI/Components/Workflow/ArgumentInputTypes.test.ts +710 -0
  426. package/Tests/UI/Components/Workflow/ArgumentsForm.test.tsx +934 -0
  427. package/Tests/UI/Components/Workflow/ArgumentsFormAdvancedSettings.test.tsx +207 -0
  428. package/Tests/UI/Components/Workflow/BreakableCode.test.tsx +153 -0
  429. package/Tests/UI/Components/Workflow/ColumnEditor/AddColumnPicker.test.tsx +685 -0
  430. package/Tests/UI/Components/Workflow/ColumnEditor/AddColumnPickerDarkMode.test.ts +252 -0
  431. package/Tests/UI/Components/Workflow/ColumnEditor/ColumnControl.test.ts +207 -5
  432. package/Tests/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.test.ts +570 -0
  433. package/Tests/UI/Components/Workflow/ColumnEditor/ColumnUse.test.ts +248 -0
  434. package/Tests/UI/Components/Workflow/ColumnEditor/ColumnValueInputLongText.test.tsx +90 -0
  435. package/Tests/UI/Components/Workflow/ColumnEditor/ColumnValueInputValuePicker.test.tsx +282 -0
  436. package/Tests/UI/Components/Workflow/Component.test.tsx +465 -0
  437. package/Tests/UI/Components/Workflow/ComponentPicker/ComponentPickerDarkMode.test.ts +239 -0
  438. package/Tests/UI/Components/Workflow/ComponentPicker/ComponentPickerRealCatalog.test.tsx +399 -0
  439. package/Tests/UI/Components/Workflow/ComponentPicker/ComponentSearch.test.ts +660 -0
  440. package/Tests/UI/Components/Workflow/ComponentPicker/PickerCatalog.test.ts +352 -0
  441. package/Tests/UI/Components/Workflow/ComponentPicker/PickerFixtures.ts +240 -0
  442. package/Tests/UI/Components/Workflow/ComponentPortViewer.test.tsx +91 -0
  443. package/Tests/UI/Components/Workflow/ComponentReturnValueViewer.test.tsx +248 -0
  444. package/Tests/UI/Components/Workflow/ComponentSettingsDeleteConfirmation.test.tsx +245 -0
  445. package/Tests/UI/Components/Workflow/ComponentSettingsModal.test.tsx +1033 -0
  446. package/Tests/UI/Components/Workflow/ComponentSettingsModalDarkMode.test.ts +276 -0
  447. package/Tests/UI/Components/Workflow/ComponentSettingsModalDocumentation.test.tsx +478 -0
  448. package/Tests/UI/Components/Workflow/ComponentSettingsModalIncomingEmail.test.tsx +606 -0
  449. package/Tests/UI/Components/Workflow/ComponentSettingsModalLayout.test.tsx +478 -0
  450. package/Tests/UI/Components/Workflow/ComponentSettingsModalStepSamples.test.tsx +343 -0
  451. package/Tests/UI/Components/Workflow/ComponentSettingsModalValidity.test.tsx +223 -0
  452. package/Tests/UI/Components/Workflow/ComponentSettingsRunStepConfirmation.test.tsx +286 -0
  453. package/Tests/UI/Components/Workflow/Condition/ConditionCanvasCard.test.tsx +208 -0
  454. package/Tests/UI/Components/Workflow/Condition/ConditionEditor.test.tsx +906 -0
  455. package/Tests/UI/Components/Workflow/Condition/ConditionGraphLint.test.ts +204 -0
  456. package/Tests/UI/Components/Workflow/Condition/ConditionModel.test.ts +986 -0
  457. package/Tests/UI/Components/Workflow/CronScheduleFieldVariable.test.tsx +115 -0
  458. package/Tests/UI/Components/Workflow/DocumentationViewer.test.tsx +592 -0
  459. package/Tests/UI/Components/Workflow/GraphLintSummary.test.ts +467 -0
  460. package/Tests/UI/Components/Workflow/IncomingEmailTriggerPanel.test.tsx +865 -0
  461. package/Tests/UI/Components/Workflow/IncomingEmailTriggerPanelI18n.test.ts +164 -0
  462. package/Tests/UI/Components/Workflow/ModelColumnEditor.render.test.tsx +35 -19
  463. package/Tests/UI/Components/Workflow/ModelColumnEditorFieldLists.render.test.tsx +660 -0
  464. package/Tests/UI/Components/Workflow/ModelFieldPicker.test.tsx +230 -0
  465. package/Tests/UI/Components/Workflow/NodePlacement.test.ts +379 -1
  466. package/Tests/UI/Components/Workflow/StepTracePresentation.test.ts +705 -0
  467. package/Tests/UI/Components/Workflow/StepTraceViewer.test.tsx +1039 -35
  468. package/Tests/UI/Components/Workflow/StepTraceViewerDarkMode.test.ts +275 -0
  469. package/Tests/UI/Components/Workflow/UseRunWatch.test.tsx +131 -0
  470. package/Tests/UI/Components/Workflow/UseWorkflowEnabled.test.tsx +612 -0
  471. package/Tests/UI/Components/Workflow/ValuePicker/ArgumentControl.test.ts +80 -0
  472. package/Tests/UI/Components/Workflow/ValuePicker/InsertValueButton.test.tsx +114 -0
  473. package/Tests/UI/Components/Workflow/ValuePicker/NoPickThisValueLinks.test.ts +111 -0
  474. package/Tests/UI/Components/Workflow/ValuePicker/ReferenceDescription.test.ts +257 -0
  475. package/Tests/UI/Components/Workflow/ValuePicker/StepGraph.test.ts +271 -0
  476. package/Tests/UI/Components/Workflow/ValuePicker/StepSampleSource.test.ts +763 -0
  477. package/Tests/UI/Components/Workflow/ValuePicker/StepSampleSourceIncomingEmail.test.ts +234 -0
  478. package/Tests/UI/Components/Workflow/ValuePicker/StepValueSource.test.ts +366 -0
  479. package/Tests/UI/Components/Workflow/ValuePicker/TemplateText.test.ts +256 -0
  480. package/Tests/UI/Components/Workflow/ValuePicker/TemplateTextDom.test.ts +264 -0
  481. package/Tests/UI/Components/Workflow/ValuePicker/TemplateTextEditor.test.tsx +740 -0
  482. package/Tests/UI/Components/Workflow/ValuePicker/TemplateTextHistory.test.ts +139 -0
  483. package/Tests/UI/Components/Workflow/ValuePicker/ValuePickerContext.test.tsx +473 -0
  484. package/Tests/UI/Components/Workflow/ValuePicker/ValuePickerContextRefresh.test.tsx +444 -0
  485. package/Tests/UI/Components/Workflow/ValuePicker/ValuePickerDarkMode.test.ts +231 -0
  486. package/Tests/UI/Components/Workflow/ValuePicker/ValuePickerMenu.test.tsx +612 -0
  487. package/Tests/UI/Components/Workflow/ValuePicker/ValuePickerMenuSamples.test.tsx +784 -0
  488. package/Tests/UI/Components/Workflow/ValuePicker/ValuePickerPopupPosition.test.ts +113 -0
  489. package/Tests/UI/Components/Workflow/ValuePicker/ValuePickerTestUtils.tsx +171 -0
  490. package/Tests/UI/Components/Workflow/ValuePicker/ValueSingleField.test.tsx +350 -0
  491. package/Tests/UI/Components/Workflow/ValuePicker/ValueSuggestion.test.ts +377 -0
  492. package/Tests/UI/Components/Workflow/ValuePicker/ValueSuggestionSamples.test.ts +357 -0
  493. package/Tests/UI/Components/Workflow/ValuePicker/ValueTextField.test.tsx +430 -0
  494. package/Tests/UI/Components/Workflow/ValuePicker/VariableValueSource.test.ts +101 -0
  495. package/Tests/UI/Components/Workflow/WebhookTriggerPanel.test.tsx +833 -0
  496. package/Tests/UI/Components/Workflow/WebhookTriggerPanelI18n.test.ts +193 -0
  497. package/Tests/UI/Components/Workflow/Workflow.test.tsx +716 -86
  498. package/Tests/UI/Components/Workflow/WorkflowEnabledDarkMode.test.ts +178 -0
  499. package/Tests/UI/Components/Workflow/WorkflowEnabledI18n.test.tsx +319 -0
  500. package/Tests/UI/Components/Workflow/WorkflowEnabledSwitch.test.tsx +144 -0
  501. package/Tests/UI/Components/Workflow/WorkflowIncomingEmailSecretKey.test.ts +393 -0
  502. package/Tests/UI/Components/Workflow/WorkflowLogModal.test.tsx +598 -1
  503. package/Tests/UI/Components/Workflow/WorkflowRunExport.test.ts +750 -0
  504. package/Tests/UI/Components/Workflow/WorkflowRunExportActions.test.tsx +556 -0
  505. package/Tests/UI/Components/Workflow/WorkflowRunExportI18n.test.ts +200 -0
  506. package/Tests/UI/Components/Workflow/WorkflowStatusLabel.test.tsx +75 -0
  507. package/Tests/UI/Components/Workflow/WorkflowTurnOnModal.test.tsx +256 -0
  508. package/Tests/UI/Components/Workflow/WorkflowTurnedOffNotice.test.tsx +99 -0
  509. package/Tests/UI/Components/Workflow/WorkflowWebhookSecretKey.test.ts +422 -0
  510. package/Tests/UI/DeleteConfirmationNamesGuard.test.ts +643 -0
  511. package/Tests/UI/DialogActionRules.test.ts +716 -0
  512. package/Tests/UI/DialogPrimaryActionGuard.test.ts +528 -0
  513. package/Tests/UI/Styles/PillDarkTheme.test.tsx +177 -0
  514. package/Tests/UI/Styles/ToggleTheme.test.ts +685 -0
  515. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +17 -2
  516. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +3 -2
  517. package/Tests/UI/Utils/McpOAuthPendingAuthorization.test.ts +825 -0
  518. package/Tests/UI/Utils/McpOAuthPendingAuthorizationHttps.test.ts +88 -0
  519. package/Tests/UI/Utils/ModelDisplayName.test.ts +450 -0
  520. package/Tests/UI/Utils/TranslateTemplate.test.ts +149 -0
  521. package/Tests/Utils/AiRemediation/KubectlWriteScopeParityCases.ts +1 -1
  522. package/Tests/Utils/DeveloperDocs/AiAssistantExamples.test.ts +228 -0
  523. package/Tests/Utils/DeveloperDocs/ApiExamples.test.ts +252 -0
  524. package/Tests/Utils/DeveloperDocs/Hcl.test.ts +358 -0
  525. package/Tests/Utils/DeveloperDocs/HclTestValue.ts +56 -0
  526. package/Tests/Utils/DeveloperDocs/TerraformConfig.test.ts +590 -0
  527. package/Tests/Utils/DeveloperDocs/TerraformMonitorSteps.test.ts +608 -0
  528. package/Tests/Utils/DeveloperDocs/TerraformProviderSchemaContract.test.ts +250 -0
  529. package/Tests/Utils/DeveloperDocs/TerraformSchema.test.ts +284 -0
  530. package/Tests/Utils/Email/EmailAddressList.test.ts +149 -0
  531. package/Tests/Utils/Monitor/IncomingEmailMonitorAddress.test.ts +131 -0
  532. package/Tests/Utils/Monitor/MonitorOverviewArchived.test.ts +266 -0
  533. package/Tests/Utils/Monitor/MonitorPauseState.test.ts +143 -0
  534. package/Tests/Utils/Rum/SessionIdentity.test.ts +146 -0
  535. package/Tests/Utils/StatusPage/ArchivedMonitorResources.test.ts +99 -0
  536. package/Types/AI/AIRunType.ts +7 -6
  537. package/Types/AI/AIWorkloadLimits.ts +82 -0
  538. package/Types/AnalyticsDatabase/AnalyticsTableName.ts +2 -2
  539. package/Types/AnalyticsDatabase/RetentionTtl.ts +57 -0
  540. package/Types/BaseDatabase/DatabaseCommonInteractionProps.ts +21 -0
  541. package/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.ts +24 -0
  542. package/Types/BaseDatabase/EnableWorkflowOn.ts +8 -0
  543. package/Types/Call/CallProvider.ts +7 -0
  544. package/Types/Database/TableMetadata.ts +10 -0
  545. package/Types/DatabaseServer/DatabaseEndpoint.ts +43 -0
  546. package/Types/Email/EmailTemplateType.ts +2 -0
  547. package/Types/Exception/ExceptionMessages.ts +1 -0
  548. package/Types/IncomingCall/MissedIncomingCall.ts +72 -0
  549. package/Types/Kubernetes/KubernetesClusterAiAccess.ts +5 -0
  550. package/Types/Mcp/McpOAuthClientAuthMethod.ts +17 -0
  551. package/Types/Mcp/McpOAuthScope.ts +180 -0
  552. package/Types/Mcp/McpOAuthTicket.ts +21 -0
  553. package/Types/Mcp/McpOAuthTokenType.ts +18 -0
  554. package/Types/Monitor/MonitorSecretAccess.ts +185 -0
  555. package/Types/NotificationSetting/NotificationEmailRollupCategory.ts +13 -2
  556. package/Types/NotificationSetting/NotificationEmailRollupPolicy.ts +1 -1
  557. package/Types/NotificationSetting/NotificationSettingEventType.ts +3 -0
  558. package/Types/OnCallDutyPolicy/OnCallDutyPolicyArchive.ts +19 -0
  559. package/Types/Permission.ts +44 -0
  560. package/Types/ResourceAiAgent/ResourceAiAccess.ts +7 -2
  561. package/Types/StatusPage/StatusPageArchive.ts +20 -0
  562. package/Types/Workflow/Component.ts +61 -2
  563. package/Types/Workflow/ComponentID.ts +1 -0
  564. package/Types/Workflow/Components/AI.ts +2 -4
  565. package/Types/Workflow/Components/API.ts +46 -26
  566. package/Types/Workflow/Components/BaseModel.ts +28 -37
  567. package/Types/Workflow/Components/Condition.ts +82 -30
  568. package/Types/Workflow/Components/ConditionComparison.ts +348 -0
  569. package/Types/Workflow/Components/ConditionEvaluation.ts +438 -0
  570. package/Types/Workflow/Components/Email.ts +1 -1
  571. package/Types/Workflow/Components/IncomingEmail.ts +140 -0
  572. package/Types/Workflow/Components/JSON.ts +11 -3
  573. package/Types/Workflow/Components/JavaScript.ts +0 -2
  574. package/Types/Workflow/Components/Manual.ts +2 -3
  575. package/Types/Workflow/Components/Schedule.ts +1 -2
  576. package/Types/Workflow/Components/Slack.ts +12 -4
  577. package/Types/Workflow/Components/Sleep.ts +4 -4
  578. package/Types/Workflow/Components/Webhook.ts +5 -7
  579. package/Types/Workflow/Components.ts +4 -2
  580. package/Types/Workflow/DatabaseOperation.ts +67 -0
  581. package/Types/Workflow/Documentation/AIDocumentation.ts +94 -0
  582. package/Types/Workflow/Documentation/APIDocumentation.ts +94 -0
  583. package/Types/Workflow/Documentation/ComponentDocumentation.ts +92 -0
  584. package/Types/Workflow/Documentation/DatabaseDocumentation.ts +666 -0
  585. package/Types/Workflow/Documentation/DocumentationContext.ts +245 -0
  586. package/Types/Workflow/Documentation/DocumentationLinks.ts +117 -0
  587. package/Types/Workflow/Documentation/DocumentationText.ts +141 -0
  588. package/Types/Workflow/Documentation/Index.ts +114 -0
  589. package/Types/Workflow/Documentation/MessagingDocumentation.ts +316 -0
  590. package/Types/Workflow/Documentation/ModelExamples.ts +333 -0
  591. package/Types/Workflow/Documentation/TriggerDocumentation.ts +217 -0
  592. package/Types/Workflow/Documentation/UtilityDocumentation.ts +338 -0
  593. package/Types/Workflow/IncomingEmailTrigger.ts +384 -0
  594. package/Types/Workflow/StepSamples.ts +965 -0
  595. package/Types/Workflow/StepTrace.ts +311 -6
  596. package/Types/Workflow/SystemColumns.ts +84 -0
  597. package/Types/Workflow/Templates.ts +279 -2
  598. package/Types/Workflow/WebhookTrigger.ts +87 -0
  599. package/Types/Workflow/WorkflowArchive.ts +45 -0
  600. package/Types/Workflow/WorkflowEnabled.ts +51 -0
  601. package/Types/Workflow/WorkflowStatus.ts +36 -0
  602. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +32 -2
  603. package/UI/Components/ActionButton/RowActions.tsx +8 -5
  604. package/UI/Components/ActionCard/ActionCard.tsx +22 -2
  605. package/UI/Components/BulkUpdate/BulkLabelActions.tsx +1 -0
  606. package/UI/Components/BulkUpdate/BulkOwnerActions.tsx +1 -0
  607. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +6 -0
  608. package/UI/Components/Button/Button.tsx +19 -11
  609. package/UI/Components/Card/Card.tsx +64 -19
  610. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +1 -4
  611. package/UI/Components/CodeEditor/CodeEditor.tsx +69 -0
  612. package/UI/Components/CollapsibleSection/CollapsibleSection.tsx +19 -3
  613. package/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.tsx +175 -0
  614. package/UI/Components/DeleteConfirmation/DeleteItemNames.tsx +71 -0
  615. package/UI/Components/DeleteConfirmation/NamedSentence.tsx +55 -0
  616. package/UI/Components/DeleteConfirmation/TypeToConfirmDelete.tsx +90 -0
  617. package/UI/Components/Dictionary/Dictionary.tsx +31 -1
  618. package/UI/Components/Dropdown/DropdownValueBadge.tsx +21 -13
  619. package/UI/Components/EditionLabel/EditionLabel.tsx +6 -1
  620. package/UI/Components/Error/PageError.tsx +1 -1
  621. package/UI/Components/EventItem/EventItem.tsx +1 -11
  622. package/UI/Components/FormModal/BasicFormModal.tsx +23 -0
  623. package/UI/Components/Forms/BasicForm.tsx +188 -78
  624. package/UI/Components/Forms/BasicModelForm.tsx +2 -0
  625. package/UI/Components/Forms/Fields/FormField.tsx +70 -5
  626. package/UI/Components/Forms/ModelForm.tsx +8 -0
  627. package/UI/Components/Forms/Steps/Step.tsx +29 -6
  628. package/UI/Components/Forms/Steps/Steps.tsx +10 -0
  629. package/UI/Components/Forms/Types/Field.ts +41 -1
  630. package/UI/Components/Forms/Validation.ts +18 -4
  631. package/UI/Components/Icon/Icon.tsx +7 -2
  632. package/UI/Components/Label/Label.tsx +0 -2
  633. package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +1 -2
  634. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +8 -0
  635. package/UI/Components/Modal/ConfirmModal.tsx +39 -8
  636. package/UI/Components/Modal/Modal.tsx +136 -10
  637. package/UI/Components/Modal/ModalFooter.tsx +28 -10
  638. package/UI/Components/ModelDelete/ModelDelete.tsx +168 -6
  639. package/UI/Components/ModelFormModal/ModelFormModal.tsx +47 -9
  640. package/UI/Components/ModelTable/BaseModelTable.tsx +58 -91
  641. package/UI/Components/ModelTable/TableView.tsx +14 -2
  642. package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +1 -2
  643. package/UI/Components/Navbar/NavBar.tsx +3 -2
  644. package/UI/Components/Pill/Pill.tsx +53 -43
  645. package/UI/Components/Pill/PillColors.ts +464 -0
  646. package/UI/Components/RuleRun/RunRuleNowModal.tsx +6 -0
  647. package/UI/Components/SideMenu/SideMenu.tsx +136 -12
  648. package/UI/Components/SideMenu/SideMenuSection.tsx +43 -4
  649. package/UI/Components/SideMenu/SideMenuSectionState.ts +200 -0
  650. package/UI/Components/TextArea/TextArea.tsx +174 -3
  651. package/UI/Components/Toggle/Toggle.tsx +256 -43
  652. package/UI/Components/Workflow/ArgumentsForm.tsx +496 -359
  653. package/UI/Components/Workflow/BreakableCode.tsx +88 -0
  654. package/UI/Components/Workflow/ColumnEditor/AddColumnPicker.tsx +577 -0
  655. package/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.tsx +20 -5
  656. package/UI/Components/Workflow/ColumnEditor/ColumnControl.ts +63 -4
  657. package/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.tsx +21 -4
  658. package/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.ts +387 -0
  659. package/UI/Components/Workflow/ColumnEditor/ColumnUse.ts +126 -0
  660. package/UI/Components/Workflow/ColumnEditor/ColumnValueInput.tsx +151 -84
  661. package/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.tsx +13 -9
  662. package/UI/Components/Workflow/ColumnEditor/ModelRecordForm.tsx +36 -27
  663. package/UI/Components/Workflow/Component.tsx +129 -12
  664. package/UI/Components/Workflow/ComponentPicker/ComponentSearch.ts +1259 -0
  665. package/UI/Components/Workflow/ComponentPicker/PickerCatalog.ts +419 -0
  666. package/UI/Components/Workflow/ComponentPicker/PickerItems.tsx +300 -0
  667. package/UI/Components/Workflow/ComponentPortViewer.tsx +24 -60
  668. package/UI/Components/Workflow/ComponentPrimaryPanel.tsx +171 -0
  669. package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +67 -88
  670. package/UI/Components/Workflow/ComponentSettingsModal.tsx +345 -105
  671. package/UI/Components/Workflow/ComponentSettingsSection.tsx +103 -0
  672. package/UI/Components/Workflow/ComponentsModal.tsx +958 -601
  673. package/UI/Components/Workflow/Condition/ConditionEditor.tsx +484 -0
  674. package/UI/Components/Workflow/Condition/ConditionModel.ts +785 -0
  675. package/UI/Components/Workflow/CronScheduleField.tsx +53 -37
  676. package/UI/Components/Workflow/DocumentationViewer.tsx +399 -118
  677. package/UI/Components/Workflow/DownloadWorkflowRun.ts +137 -0
  678. package/UI/Components/Workflow/GraphLint.ts +9 -1
  679. package/UI/Components/Workflow/GraphLintSummary.ts +142 -2
  680. package/UI/Components/Workflow/IncomingEmailTriggerPanel.tsx +502 -0
  681. package/UI/Components/Workflow/ManualTriggerPanel.tsx +41 -0
  682. package/UI/Components/Workflow/ModelColumnEditor.tsx +7 -10
  683. package/UI/Components/Workflow/ModelFieldPicker.tsx +66 -2
  684. package/UI/Components/Workflow/ModelSchema.ts +19 -24
  685. package/UI/Components/Workflow/NodePlacement.ts +235 -1
  686. package/UI/Components/Workflow/RunModal.tsx +1 -1
  687. package/UI/Components/Workflow/StepTracePresentation.ts +537 -0
  688. package/UI/Components/Workflow/StepTraceViewer.tsx +644 -83
  689. package/UI/Components/Workflow/UseRunWatch.ts +17 -0
  690. package/UI/Components/Workflow/UseWorkflowEnabled.ts +275 -0
  691. package/UI/Components/Workflow/Utils.ts +119 -103
  692. package/UI/Components/Workflow/ValuePicker/ArgumentControl.ts +146 -0
  693. package/UI/Components/Workflow/ValuePicker/DefaultValueSources.ts +148 -0
  694. package/UI/Components/Workflow/ValuePicker/InsertValueButton.tsx +116 -0
  695. package/UI/Components/Workflow/ValuePicker/ReferenceChip.tsx +162 -0
  696. package/UI/Components/Workflow/ValuePicker/ReferenceDescription.ts +303 -0
  697. package/UI/Components/Workflow/ValuePicker/StepGraph.ts +240 -0
  698. package/UI/Components/Workflow/ValuePicker/StepSampleSource.ts +537 -0
  699. package/UI/Components/Workflow/ValuePicker/StepValueSource.ts +291 -0
  700. package/UI/Components/Workflow/ValuePicker/TemplateText.ts +303 -0
  701. package/UI/Components/Workflow/ValuePicker/TemplateTextDom.ts +563 -0
  702. package/UI/Components/Workflow/ValuePicker/TemplateTextEditor.tsx +1233 -0
  703. package/UI/Components/Workflow/ValuePicker/TemplateTextHistory.ts +138 -0
  704. package/UI/Components/Workflow/ValuePicker/ValuePickerContext.tsx +529 -0
  705. package/UI/Components/Workflow/ValuePicker/ValuePickerMenu.tsx +1003 -0
  706. package/UI/Components/Workflow/ValuePicker/ValuePickerPopup.tsx +310 -0
  707. package/UI/Components/Workflow/ValuePicker/ValueSingleField.tsx +274 -0
  708. package/UI/Components/Workflow/ValuePicker/ValueSuggestion.ts +694 -0
  709. package/UI/Components/Workflow/ValuePicker/ValueTextField.tsx +334 -0
  710. package/UI/Components/Workflow/ValuePicker/VariableValueSource.ts +132 -0
  711. package/UI/Components/Workflow/WebhookTriggerPanel.tsx +522 -0
  712. package/UI/Components/Workflow/Workflow.tsx +381 -36
  713. package/UI/Components/Workflow/WorkflowEnabledCopy.ts +55 -0
  714. package/UI/Components/Workflow/WorkflowEnabledSwitch.tsx +44 -0
  715. package/UI/Components/Workflow/WorkflowIncomingEmailSecretKey.ts +156 -0
  716. package/UI/Components/Workflow/WorkflowLogModal.tsx +98 -17
  717. package/UI/Components/Workflow/WorkflowRunExport.ts +435 -0
  718. package/UI/Components/Workflow/WorkflowRunExportActions.tsx +242 -0
  719. package/UI/Components/Workflow/WorkflowStatus.tsx +25 -26
  720. package/UI/Components/Workflow/WorkflowTurnOnModal.tsx +119 -0
  721. package/UI/Components/Workflow/WorkflowTurnedOffNotice.tsx +91 -0
  722. package/UI/Components/Workflow/WorkflowWebhookSecretKey.ts +184 -0
  723. package/UI/Styles/Theme.css +74 -3
  724. package/UI/Utils/McpOAuthPendingAuthorization.ts +132 -0
  725. package/UI/Utils/ModelDisplayName.ts +294 -0
  726. package/UI/Utils/TranslateTemplate.ts +123 -0
  727. package/Utils/DeveloperDocs/AiAssistantExamples.ts +383 -0
  728. package/Utils/DeveloperDocs/ApiExamples.ts +355 -0
  729. package/Utils/DeveloperDocs/ExampleValues.ts +111 -0
  730. package/Utils/DeveloperDocs/Hcl.ts +697 -0
  731. package/Utils/DeveloperDocs/TerraformConfig.ts +805 -0
  732. package/Utils/DeveloperDocs/TerraformMonitorSteps.ts +583 -0
  733. package/Utils/DeveloperDocs/TerraformSchema.ts +565 -0
  734. package/Utils/DeveloperDocs/TerraformValues.ts +375 -0
  735. package/Utils/Email/EmailAddressList.ts +165 -0
  736. package/Utils/ModelImportExport.ts +17 -0
  737. package/Utils/Monitor/IncomingEmailMonitorAddress.ts +73 -4
  738. package/Utils/Monitor/MonitorOverviewPresentationUtil.ts +27 -1
  739. package/Utils/Monitor/MonitorPauseState.ts +90 -0
  740. package/Utils/Rum/SessionIdentity.ts +88 -0
  741. package/Utils/StatusPage/ArchivedMonitorResources.ts +38 -0
  742. package/build/dist/Models/AnalyticsModels/AuditLog.js +56 -0
  743. package/build/dist/Models/AnalyticsModels/AuditLog.js.map +1 -1
  744. package/build/dist/Models/AnalyticsModels/Log.js +26 -2
  745. package/build/dist/Models/AnalyticsModels/Log.js.map +1 -1
  746. package/build/dist/Models/AnalyticsModels/Metric.js +28 -2
  747. package/build/dist/Models/AnalyticsModels/Metric.js.map +1 -1
  748. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js +21 -2
  749. package/build/dist/Models/AnalyticsModels/MetricItemAggMV1m.js.map +1 -1
  750. package/build/dist/Models/AnalyticsModels/SloHistory.js +6 -4
  751. package/build/dist/Models/AnalyticsModels/SloHistory.js.map +1 -1
  752. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js +1 -1
  753. package/build/dist/Models/DatabaseModels/AutoRemediationRule.js.map +1 -1
  754. package/build/dist/Models/DatabaseModels/CodeRepository.js +1 -1
  755. package/build/dist/Models/DatabaseModels/CodeRepository.js.map +1 -1
  756. package/build/dist/Models/DatabaseModels/Dashboard.js +151 -1
  757. package/build/dist/Models/DatabaseModels/Dashboard.js.map +1 -1
  758. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +8 -0
  759. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  760. package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js +1 -0
  761. package/build/dist/Models/DatabaseModels/DatabaseServerEndpoint.js.map +1 -1
  762. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +2 -0
  763. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
  764. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js +1 -0
  765. package/build/dist/Models/DatabaseModels/EnterpriseLicenseInstance.js.map +1 -1
  766. package/build/dist/Models/DatabaseModels/IncomingCallLog.js +15 -1
  767. package/build/dist/Models/DatabaseModels/IncomingCallLog.js.map +1 -1
  768. package/build/dist/Models/DatabaseModels/Index.js +6 -0
  769. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  770. package/build/dist/Models/DatabaseModels/LlmModelPrice.js +1 -0
  771. package/build/dist/Models/DatabaseModels/LlmModelPrice.js.map +1 -1
  772. package/build/dist/Models/DatabaseModels/McpOAuthClient.js +215 -0
  773. package/build/dist/Models/DatabaseModels/McpOAuthClient.js.map +1 -0
  774. package/build/dist/Models/DatabaseModels/McpOAuthGrant.js +494 -0
  775. package/build/dist/Models/DatabaseModels/McpOAuthGrant.js.map +1 -0
  776. package/build/dist/Models/DatabaseModels/McpOAuthToken.js +256 -0
  777. package/build/dist/Models/DatabaseModels/McpOAuthToken.js.map +1 -0
  778. package/build/dist/Models/DatabaseModels/Monitor.js +160 -1
  779. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  780. package/build/dist/Models/DatabaseModels/MonitorSecret.js +89 -1
  781. package/build/dist/Models/DatabaseModels/MonitorSecret.js.map +1 -1
  782. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js +1 -0
  783. package/build/dist/Models/DatabaseModels/NetworkEndpoint.js.map +1 -1
  784. package/build/dist/Models/DatabaseModels/OnCallDutyPolicy.js +158 -1
  785. package/build/dist/Models/DatabaseModels/OnCallDutyPolicy.js.map +1 -1
  786. package/build/dist/Models/DatabaseModels/Project.js +42 -102
  787. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  788. package/build/dist/Models/DatabaseModels/StatusPage.js +158 -1
  789. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  790. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js +1 -0
  791. package/build/dist/Models/DatabaseModels/TelemetrySourceMap.js.map +1 -1
  792. package/build/dist/Models/DatabaseModels/Workflow.js +230 -8
  793. package/build/dist/Models/DatabaseModels/Workflow.js.map +1 -1
  794. package/build/dist/Server/API/AIAgentDataAPI.js +1 -1
  795. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -1
  796. package/build/dist/Server/API/AutoRemediationAPI.js +9 -31
  797. package/build/dist/Server/API/AutoRemediationAPI.js.map +1 -1
  798. package/build/dist/Server/API/CommonAPI.js +15 -0
  799. package/build/dist/Server/API/CommonAPI.js.map +1 -1
  800. package/build/dist/Server/API/DashboardAPI.js +7 -3
  801. package/build/dist/Server/API/DashboardAPI.js.map +1 -1
  802. package/build/dist/Server/API/StatusPageAPI.js +54 -13
  803. package/build/dist/Server/API/StatusPageAPI.js.map +1 -1
  804. package/build/dist/Server/EnvironmentConfig.js +23 -0
  805. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  806. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796800000000-FoldAiSwitchesIntoEnableAi.js +79 -0
  807. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796800000000-FoldAiSwitchesIntoEnableAi.js.map +1 -0
  808. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796900000000-AddMcpOAuthTables.js +50 -0
  809. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1796900000000-AddMcpOAuthTables.js.map +1 -0
  810. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797000000000-AddWorkflowIncomingEmailSecretKey.js +25 -0
  811. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797000000000-AddWorkflowIncomingEmailSecretKey.js.map +1 -0
  812. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797100000000-AddMonitorSecretAccess.js +32 -0
  813. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797100000000-AddMonitorSecretAccess.js.map +1 -0
  814. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797200000000-AddArchiveToMoreResources.js +76 -0
  815. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797200000000-AddArchiveToMoreResources.js.map +1 -0
  816. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +10 -0
  817. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  818. package/build/dist/Server/Middleware/McpDelegationAuthorization.js +138 -0
  819. package/build/dist/Server/Middleware/McpDelegationAuthorization.js.map +1 -0
  820. package/build/dist/Server/Middleware/McpOAuthRateLimit.js +191 -0
  821. package/build/dist/Server/Middleware/McpOAuthRateLimit.js.map +1 -0
  822. package/build/dist/Server/Middleware/ProjectAuthorization.js +20 -1
  823. package/build/dist/Server/Middleware/ProjectAuthorization.js.map +1 -1
  824. package/build/dist/Server/Middleware/UserAuthorization.js +11 -0
  825. package/build/dist/Server/Middleware/UserAuthorization.js.map +1 -1
  826. package/build/dist/Server/Services/AIService.js +2 -2
  827. package/build/dist/Server/Services/AIService.js.map +1 -1
  828. package/build/dist/Server/Services/AnalyticsDatabaseService.js +15 -5
  829. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  830. package/build/dist/Server/Services/ApiKeyService.js +11 -8
  831. package/build/dist/Server/Services/ApiKeyService.js.map +1 -1
  832. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js +19 -27
  833. package/build/dist/Server/Services/AutoRemediationRuleEngineService.js.map +1 -1
  834. package/build/dist/Server/Services/AutoRemediationRuleService.js +1 -1
  835. package/build/dist/Server/Services/AutoRemediationRuleService.js.map +1 -1
  836. package/build/dist/Server/Services/DashboardService.js +7 -2
  837. package/build/dist/Server/Services/DashboardService.js.map +1 -1
  838. package/build/dist/Server/Services/DatabaseServerService.js +161 -1
  839. package/build/dist/Server/Services/DatabaseServerService.js.map +1 -1
  840. package/build/dist/Server/Services/DatabaseService.js +28 -17
  841. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  842. package/build/dist/Server/Services/InboundEmail/InboundEmailProvider.js +17 -0
  843. package/build/dist/Server/Services/InboundEmail/InboundEmailProvider.js.map +1 -1
  844. package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js +45 -5
  845. package/build/dist/Server/Services/InboundEmail/Providers/SendGridInboundProvider.js.map +1 -1
  846. package/build/dist/Server/Services/IncomingCallMissedCallNotificationService.js +227 -0
  847. package/build/dist/Server/Services/IncomingCallMissedCallNotificationService.js.map +1 -0
  848. package/build/dist/Server/Services/IncomingCallPolicyService.js +97 -0
  849. package/build/dist/Server/Services/IncomingCallPolicyService.js.map +1 -1
  850. package/build/dist/Server/Services/Index.js +8 -0
  851. package/build/dist/Server/Services/Index.js.map +1 -1
  852. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js +5 -36
  853. package/build/dist/Server/Services/KubernetesClusterAiAccessService.js.map +1 -1
  854. package/build/dist/Server/Services/KubernetesClusterService.js +3 -3
  855. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  856. package/build/dist/Server/Services/LogAggregationService.js +31 -5
  857. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  858. package/build/dist/Server/Services/McpOAuthClientService.js +134 -0
  859. package/build/dist/Server/Services/McpOAuthClientService.js.map +1 -0
  860. package/build/dist/Server/Services/McpOAuthGrantService.js +256 -0
  861. package/build/dist/Server/Services/McpOAuthGrantService.js.map +1 -0
  862. package/build/dist/Server/Services/McpOAuthTokenService.js +175 -0
  863. package/build/dist/Server/Services/McpOAuthTokenService.js.map +1 -0
  864. package/build/dist/Server/Services/MetricAggregationService.js +4 -4
  865. package/build/dist/Server/Services/MonitorGroupService.js +20 -5
  866. package/build/dist/Server/Services/MonitorGroupService.js.map +1 -1
  867. package/build/dist/Server/Services/MonitorProbeService.js +1 -0
  868. package/build/dist/Server/Services/MonitorProbeService.js.map +1 -1
  869. package/build/dist/Server/Services/MonitorSecretService.js +346 -0
  870. package/build/dist/Server/Services/MonitorSecretService.js.map +1 -1
  871. package/build/dist/Server/Services/MonitorService.js +15 -1
  872. package/build/dist/Server/Services/MonitorService.js.map +1 -1
  873. package/build/dist/Server/Services/OnCallDutyPolicyService.js +29 -2
  874. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  875. package/build/dist/Server/Services/ProjectService.js +26 -15
  876. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  877. package/build/dist/Server/Services/ResourceAiAccessService.js +0 -9
  878. package/build/dist/Server/Services/ResourceAiAccessService.js.map +1 -1
  879. package/build/dist/Server/Services/RunnerJobService.js +2 -2
  880. package/build/dist/Server/Services/RunnerJobService.js.map +1 -1
  881. package/build/dist/Server/Services/RunnerService.js +2 -2
  882. package/build/dist/Server/Services/RunnerService.js.map +1 -1
  883. package/build/dist/Server/Services/StatusPageService.js +59 -2
  884. package/build/dist/Server/Services/StatusPageService.js.map +1 -1
  885. package/build/dist/Server/Services/StatusPageSubscriberService.js +17 -0
  886. package/build/dist/Server/Services/StatusPageSubscriberService.js.map +1 -1
  887. package/build/dist/Server/Services/TeamMemberService.js +306 -72
  888. package/build/dist/Server/Services/TeamMemberService.js.map +1 -1
  889. package/build/dist/Server/Services/UserNotificationSettingService.js +18 -0
  890. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  891. package/build/dist/Server/Services/WorkflowService.js +27 -0
  892. package/build/dist/Server/Services/WorkflowService.js.map +1 -1
  893. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js +3 -0
  894. package/build/dist/Server/Types/AnalyticsDatabase/ModelPermission.js.map +1 -1
  895. package/build/dist/Server/Types/Database/Permissions/Index.js +5 -0
  896. package/build/dist/Server/Types/Database/Permissions/Index.js.map +1 -1
  897. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js +2 -0
  898. package/build/dist/Server/Types/Workflow/Components/BaseModel/OnTriggerBaseModel.js.map +1 -1
  899. package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js +28 -106
  900. package/build/dist/Server/Types/Workflow/Components/Conditions/IfElse.js.map +1 -1
  901. package/build/dist/Server/Types/Workflow/Components/IncomingEmail.js +166 -0
  902. package/build/dist/Server/Types/Workflow/Components/IncomingEmail.js.map +1 -0
  903. package/build/dist/Server/Types/Workflow/Components/Index.js +16 -6
  904. package/build/dist/Server/Types/Workflow/Components/Index.js.map +1 -1
  905. package/build/dist/Server/Types/Workflow/Components/Schedule.js +20 -4
  906. package/build/dist/Server/Types/Workflow/Components/Schedule.js.map +1 -1
  907. package/build/dist/Server/Utils/AI/CodeFix/CodeFixReadiness.js +1 -1
  908. package/build/dist/Server/Utils/AI/CodeFix/CodeFixRunQueue.js +1 -1
  909. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js +43 -57
  910. package/build/dist/Server/Utils/AI/CodeFix/FixRunBudget.js.map +1 -1
  911. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js +17 -28
  912. package/build/dist/Server/Utils/AI/CodeFix/OpenPullRequestCap.js.map +1 -1
  913. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js +18 -50
  914. package/build/dist/Server/Utils/AI/Remediation/RemediationExecutionRunner.js.map +1 -1
  915. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js +27 -52
  916. package/build/dist/Server/Utils/AI/SRE/AlertInvestigationRunner.js.map +1 -1
  917. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js +4 -4
  918. package/build/dist/Server/Utils/AI/SRE/FixFromIncidentTaskTrigger.js.map +1 -1
  919. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js +1 -1
  920. package/build/dist/Server/Utils/AI/SRE/FixPerformanceTaskTrigger.js.map +1 -1
  921. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js +8 -24
  922. package/build/dist/Server/Utils/AI/SRE/IncidentInvestigationRunner.js.map +1 -1
  923. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js +6 -5
  924. package/build/dist/Server/Utils/AI/SRE/IncidentPostmortemRunner.js.map +1 -1
  925. package/build/dist/Server/Utils/AI/SRE/Insights/FixRouting.js +2 -2
  926. package/build/dist/Server/Utils/AI/SRE/Insights/InsightScanner.js +5 -5
  927. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js +4 -3
  928. package/build/dist/Server/Utils/AI/SRE/Insights/Triage.js.map +1 -1
  929. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js +4 -4
  930. package/build/dist/Server/Utils/AI/SRE/InstrumentationTaskTrigger.js.map +1 -1
  931. package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js +1 -1
  932. package/build/dist/Server/Utils/AI/SRE/InvestigationEligibility.js.map +1 -1
  933. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js +52 -45
  934. package/build/dist/Server/Utils/AI/SRE/InvestigationQueue.js.map +1 -1
  935. package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js +1 -1
  936. package/build/dist/Server/Utils/AI/SRE/TelemetryImprovementTaskTrigger.js.map +1 -1
  937. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js +9 -1
  938. package/build/dist/Server/Utils/AI/Toolbox/AIActionTools.js.map +1 -1
  939. package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js +13 -8
  940. package/build/dist/Server/Utils/AI/Toolbox/AIMetaTools.js.map +1 -1
  941. package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js +18 -3
  942. package/build/dist/Server/Utils/AI/Toolbox/MonitorTools.js.map +1 -1
  943. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js +45 -14
  944. package/build/dist/Server/Utils/AI/Toolbox/OnCallTools.js.map +1 -1
  945. package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js +31 -7
  946. package/build/dist/Server/Utils/AI/Toolbox/StatusPageTools.js.map +1 -1
  947. package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js +22 -7
  948. package/build/dist/Server/Utils/AI/Toolbox/WorkflowProbeTools.js.map +1 -1
  949. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js +3 -1
  950. package/build/dist/Server/Utils/AnalyticsDatabase/ClusterConfig.js.map +1 -1
  951. package/build/dist/Server/Utils/Express.js.map +1 -1
  952. package/build/dist/Server/Utils/IncomingCall/MissedCallNotification.js +204 -0
  953. package/build/dist/Server/Utils/IncomingCall/MissedCallNotification.js.map +1 -0
  954. package/build/dist/Server/Utils/Mcp/McpDelegationToken.js +92 -0
  955. package/build/dist/Server/Utils/Mcp/McpDelegationToken.js.map +1 -0
  956. package/build/dist/Server/Utils/Mcp/McpOAuthConfig.js +159 -0
  957. package/build/dist/Server/Utils/Mcp/McpOAuthConfig.js.map +1 -0
  958. package/build/dist/Server/Utils/Mcp/McpOAuthGrantAccess.js +204 -0
  959. package/build/dist/Server/Utils/Mcp/McpOAuthGrantAccess.js.map +1 -0
  960. package/build/dist/Server/Utils/Mcp/McpOAuthSecret.js +118 -0
  961. package/build/dist/Server/Utils/Mcp/McpOAuthSecret.js.map +1 -0
  962. package/build/dist/Server/Utils/Mcp/McpOAuthSignedToken.js +126 -0
  963. package/build/dist/Server/Utils/Mcp/McpOAuthSignedToken.js.map +1 -0
  964. package/build/dist/Server/Utils/Mcp/McpOAuthSso.js +159 -0
  965. package/build/dist/Server/Utils/Mcp/McpOAuthSso.js.map +1 -0
  966. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js +25 -0
  967. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js.map +1 -1
  968. package/build/dist/Server/Utils/Monitor/MonitorResource.js +16 -18
  969. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  970. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js +3 -11
  971. package/build/dist/Server/Utils/Monitor/NetworkDeviceWalkUtil.js.map +1 -1
  972. package/build/dist/Server/Utils/SessionReplay/SessionReplayBudgetMetrics.js +3 -3
  973. package/build/dist/Server/Utils/Slo/SloMetricUtil.js +3 -3
  974. package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js +11 -4
  975. package/build/dist/Server/Utils/Telemetry/DatabaseEndpointDiscovery.js.map +1 -1
  976. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js +7 -0
  977. package/build/dist/Server/Utils/Telemetry/MessageQueueDiscovery.js.map +1 -1
  978. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js +133 -16
  979. package/build/dist/Server/Utils/Telemetry/ServiceDependencyDiscovery.js.map +1 -1
  980. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js +2 -0
  981. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Alert.js.map +1 -1
  982. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js +2 -0
  983. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/AlertEpisode.js.map +1 -1
  984. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js +2 -0
  985. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/Incident.js.map +1 -1
  986. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js +2 -0
  987. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/Actions/IncidentEpisode.js.map +1 -1
  988. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js +4 -0
  989. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeamsCardChoices.js.map +1 -1
  990. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js +2 -0
  991. package/build/dist/Server/Utils/Workspace/Slack/Actions/Alert.js.map +1 -1
  992. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js +2 -0
  993. package/build/dist/Server/Utils/Workspace/Slack/Actions/AlertEpisode.js.map +1 -1
  994. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js +4 -0
  995. package/build/dist/Server/Utils/Workspace/Slack/Actions/Incident.js.map +1 -1
  996. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js +2 -0
  997. package/build/dist/Server/Utils/Workspace/Slack/Actions/IncidentEpisode.js.map +1 -1
  998. package/build/dist/Types/AI/AIRunType.js +7 -6
  999. package/build/dist/Types/AI/AIRunType.js.map +1 -1
  1000. package/build/dist/Types/AI/AIWorkloadLimits.js +59 -0
  1001. package/build/dist/Types/AI/AIWorkloadLimits.js.map +1 -0
  1002. package/build/dist/Types/AnalyticsDatabase/AnalyticsTableName.js +2 -2
  1003. package/build/dist/Types/AnalyticsDatabase/RetentionTtl.js +55 -0
  1004. package/build/dist/Types/AnalyticsDatabase/RetentionTtl.js.map +1 -0
  1005. package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js +17 -0
  1006. package/build/dist/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.js.map +1 -1
  1007. package/build/dist/Types/Database/TableMetadata.js +3 -0
  1008. package/build/dist/Types/Database/TableMetadata.js.map +1 -1
  1009. package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js +36 -0
  1010. package/build/dist/Types/DatabaseServer/DatabaseEndpoint.js.map +1 -1
  1011. package/build/dist/Types/Email/EmailTemplateType.js +1 -0
  1012. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  1013. package/build/dist/Types/Exception/ExceptionMessages.js +1 -0
  1014. package/build/dist/Types/Exception/ExceptionMessages.js.map +1 -1
  1015. package/build/dist/Types/IncomingCall/MissedIncomingCall.js +61 -0
  1016. package/build/dist/Types/IncomingCall/MissedIncomingCall.js.map +1 -0
  1017. package/build/dist/Types/Kubernetes/KubernetesClusterAiAccess.js.map +1 -1
  1018. package/build/dist/Types/Mcp/McpOAuthClientAuthMethod.js +18 -0
  1019. package/build/dist/Types/Mcp/McpOAuthClientAuthMethod.js.map +1 -0
  1020. package/build/dist/Types/Mcp/McpOAuthScope.js +140 -0
  1021. package/build/dist/Types/Mcp/McpOAuthScope.js.map +1 -0
  1022. package/build/dist/Types/Mcp/McpOAuthTicket.js +20 -0
  1023. package/build/dist/Types/Mcp/McpOAuthTicket.js.map +1 -0
  1024. package/build/dist/Types/Mcp/McpOAuthTokenType.js +17 -0
  1025. package/build/dist/Types/Mcp/McpOAuthTokenType.js.map +1 -0
  1026. package/build/dist/Types/Monitor/MonitorSecretAccess.js +111 -0
  1027. package/build/dist/Types/Monitor/MonitorSecretAccess.js.map +1 -0
  1028. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js +11 -2
  1029. package/build/dist/Types/NotificationSetting/NotificationEmailRollupCategory.js.map +1 -1
  1030. package/build/dist/Types/NotificationSetting/NotificationEmailRollupPolicy.js +1 -1
  1031. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +2 -0
  1032. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  1033. package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyArchive.js +16 -0
  1034. package/build/dist/Types/OnCallDutyPolicy/OnCallDutyPolicyArchive.js.map +1 -0
  1035. package/build/dist/Types/Permission.js +40 -0
  1036. package/build/dist/Types/Permission.js.map +1 -1
  1037. package/build/dist/Types/ResourceAiAgent/ResourceAiAccess.js.map +1 -1
  1038. package/build/dist/Types/StatusPage/StatusPageArchive.js +16 -0
  1039. package/build/dist/Types/StatusPage/StatusPageArchive.js.map +1 -0
  1040. package/build/dist/Types/Workflow/Component.js +19 -0
  1041. package/build/dist/Types/Workflow/Component.js.map +1 -1
  1042. package/build/dist/Types/Workflow/ComponentID.js +1 -0
  1043. package/build/dist/Types/Workflow/ComponentID.js.map +1 -1
  1044. package/build/dist/Types/Workflow/Components/AI.js +2 -4
  1045. package/build/dist/Types/Workflow/Components/AI.js.map +1 -1
  1046. package/build/dist/Types/Workflow/Components/API.js +26 -26
  1047. package/build/dist/Types/Workflow/Components/API.js.map +1 -1
  1048. package/build/dist/Types/Workflow/Components/BaseModel.js +22 -28
  1049. package/build/dist/Types/Workflow/Components/BaseModel.js.map +1 -1
  1050. package/build/dist/Types/Workflow/Components/Condition.js +70 -29
  1051. package/build/dist/Types/Workflow/Components/Condition.js.map +1 -1
  1052. package/build/dist/Types/Workflow/Components/ConditionComparison.js +256 -0
  1053. package/build/dist/Types/Workflow/Components/ConditionComparison.js.map +1 -0
  1054. package/build/dist/Types/Workflow/Components/ConditionEvaluation.js +279 -0
  1055. package/build/dist/Types/Workflow/Components/ConditionEvaluation.js.map +1 -0
  1056. package/build/dist/Types/Workflow/Components/Email.js +1 -1
  1057. package/build/dist/Types/Workflow/Components/Email.js.map +1 -1
  1058. package/build/dist/Types/Workflow/Components/IncomingEmail.js +129 -0
  1059. package/build/dist/Types/Workflow/Components/IncomingEmail.js.map +1 -0
  1060. package/build/dist/Types/Workflow/Components/JSON.js +10 -3
  1061. package/build/dist/Types/Workflow/Components/JSON.js.map +1 -1
  1062. package/build/dist/Types/Workflow/Components/JavaScript.js +0 -2
  1063. package/build/dist/Types/Workflow/Components/JavaScript.js.map +1 -1
  1064. package/build/dist/Types/Workflow/Components/Manual.js +2 -2
  1065. package/build/dist/Types/Workflow/Components/Manual.js.map +1 -1
  1066. package/build/dist/Types/Workflow/Components/Schedule.js +1 -1
  1067. package/build/dist/Types/Workflow/Components/Schedule.js.map +1 -1
  1068. package/build/dist/Types/Workflow/Components/Slack.js +11 -3
  1069. package/build/dist/Types/Workflow/Components/Slack.js.map +1 -1
  1070. package/build/dist/Types/Workflow/Components/Sleep.js +4 -4
  1071. package/build/dist/Types/Workflow/Components/Sleep.js.map +1 -1
  1072. package/build/dist/Types/Workflow/Components/Webhook.js +4 -6
  1073. package/build/dist/Types/Workflow/Components/Webhook.js.map +1 -1
  1074. package/build/dist/Types/Workflow/Components.js +4 -2
  1075. package/build/dist/Types/Workflow/Components.js.map +1 -1
  1076. package/build/dist/Types/Workflow/DatabaseOperation.js +50 -0
  1077. package/build/dist/Types/Workflow/DatabaseOperation.js.map +1 -0
  1078. package/build/dist/Types/Workflow/Documentation/AIDocumentation.js +78 -0
  1079. package/build/dist/Types/Workflow/Documentation/AIDocumentation.js.map +1 -0
  1080. package/build/dist/Types/Workflow/Documentation/APIDocumentation.js +69 -0
  1081. package/build/dist/Types/Workflow/Documentation/APIDocumentation.js.map +1 -0
  1082. package/build/dist/Types/Workflow/Documentation/ComponentDocumentation.js +44 -0
  1083. package/build/dist/Types/Workflow/Documentation/ComponentDocumentation.js.map +1 -0
  1084. package/build/dist/Types/Workflow/Documentation/DatabaseDocumentation.js +488 -0
  1085. package/build/dist/Types/Workflow/Documentation/DatabaseDocumentation.js.map +1 -0
  1086. package/build/dist/Types/Workflow/Documentation/DocumentationContext.js +139 -0
  1087. package/build/dist/Types/Workflow/Documentation/DocumentationContext.js.map +1 -0
  1088. package/build/dist/Types/Workflow/Documentation/DocumentationLinks.js +62 -0
  1089. package/build/dist/Types/Workflow/Documentation/DocumentationLinks.js.map +1 -0
  1090. package/build/dist/Types/Workflow/Documentation/DocumentationText.js +104 -0
  1091. package/build/dist/Types/Workflow/Documentation/DocumentationText.js.map +1 -0
  1092. package/build/dist/Types/Workflow/Documentation/Index.js +58 -0
  1093. package/build/dist/Types/Workflow/Documentation/Index.js.map +1 -0
  1094. package/build/dist/Types/Workflow/Documentation/MessagingDocumentation.js +247 -0
  1095. package/build/dist/Types/Workflow/Documentation/MessagingDocumentation.js.map +1 -0
  1096. package/build/dist/Types/Workflow/Documentation/ModelExamples.js +210 -0
  1097. package/build/dist/Types/Workflow/Documentation/ModelExamples.js.map +1 -0
  1098. package/build/dist/Types/Workflow/Documentation/TriggerDocumentation.js +184 -0
  1099. package/build/dist/Types/Workflow/Documentation/TriggerDocumentation.js.map +1 -0
  1100. package/build/dist/Types/Workflow/Documentation/UtilityDocumentation.js +290 -0
  1101. package/build/dist/Types/Workflow/Documentation/UtilityDocumentation.js.map +1 -0
  1102. package/build/dist/Types/Workflow/IncomingEmailTrigger.js +275 -0
  1103. package/build/dist/Types/Workflow/IncomingEmailTrigger.js.map +1 -0
  1104. package/build/dist/Types/Workflow/StepSamples.js +601 -0
  1105. package/build/dist/Types/Workflow/StepSamples.js.map +1 -0
  1106. package/build/dist/Types/Workflow/StepTrace.js +135 -4
  1107. package/build/dist/Types/Workflow/StepTrace.js.map +1 -1
  1108. package/build/dist/Types/Workflow/SystemColumns.js +65 -0
  1109. package/build/dist/Types/Workflow/SystemColumns.js.map +1 -0
  1110. package/build/dist/Types/Workflow/Templates.js +178 -2
  1111. package/build/dist/Types/Workflow/Templates.js.map +1 -1
  1112. package/build/dist/Types/Workflow/WebhookTrigger.js +55 -0
  1113. package/build/dist/Types/Workflow/WebhookTrigger.js.map +1 -0
  1114. package/build/dist/Types/Workflow/WorkflowArchive.js +29 -0
  1115. package/build/dist/Types/Workflow/WorkflowArchive.js.map +1 -0
  1116. package/build/dist/Types/Workflow/WorkflowEnabled.js +39 -0
  1117. package/build/dist/Types/Workflow/WorkflowEnabled.js.map +1 -0
  1118. package/build/dist/Types/Workflow/WorkflowStatus.js +24 -0
  1119. package/build/dist/Types/Workflow/WorkflowStatus.js.map +1 -1
  1120. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +23 -3
  1121. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  1122. package/build/dist/UI/Components/ActionButton/RowActions.js +8 -5
  1123. package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -1
  1124. package/build/dist/UI/Components/ActionCard/ActionCard.js +20 -2
  1125. package/build/dist/UI/Components/ActionCard/ActionCard.js.map +1 -1
  1126. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js +1 -1
  1127. package/build/dist/UI/Components/BulkUpdate/BulkLabelActions.js.map +1 -1
  1128. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js +1 -1
  1129. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js.map +1 -1
  1130. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +2 -0
  1131. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  1132. package/build/dist/UI/Components/Button/Button.js +19 -11
  1133. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  1134. package/build/dist/UI/Components/Card/Card.js +23 -3
  1135. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  1136. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +1 -3
  1137. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  1138. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +37 -0
  1139. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  1140. package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js +7 -3
  1141. package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js.map +1 -1
  1142. package/build/dist/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.js +97 -0
  1143. package/build/dist/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.js.map +1 -0
  1144. package/build/dist/UI/Components/DeleteConfirmation/DeleteItemNames.js +34 -0
  1145. package/build/dist/UI/Components/DeleteConfirmation/DeleteItemNames.js.map +1 -0
  1146. package/build/dist/UI/Components/DeleteConfirmation/NamedSentence.js +11 -0
  1147. package/build/dist/UI/Components/DeleteConfirmation/NamedSentence.js.map +1 -0
  1148. package/build/dist/UI/Components/DeleteConfirmation/TypeToConfirmDelete.js +44 -0
  1149. package/build/dist/UI/Components/DeleteConfirmation/TypeToConfirmDelete.js.map +1 -0
  1150. package/build/dist/UI/Components/Dictionary/Dictionary.js +17 -1
  1151. package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
  1152. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js +12 -10
  1153. package/build/dist/UI/Components/Dropdown/DropdownValueBadge.js.map +1 -1
  1154. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +1 -1
  1155. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1156. package/build/dist/UI/Components/Error/PageError.js +1 -1
  1157. package/build/dist/UI/Components/Error/PageError.js.map +1 -1
  1158. package/build/dist/UI/Components/EventItem/EventItem.js +1 -4
  1159. package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
  1160. package/build/dist/UI/Components/FormModal/BasicFormModal.js +17 -3
  1161. package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
  1162. package/build/dist/UI/Components/Forms/BasicForm.js +115 -54
  1163. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  1164. package/build/dist/UI/Components/Forms/BasicModelForm.js +1 -1
  1165. package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
  1166. package/build/dist/UI/Components/Forms/Fields/FormField.js +40 -9
  1167. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1168. package/build/dist/UI/Components/Forms/ModelForm.js +5 -1
  1169. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  1170. package/build/dist/UI/Components/Forms/Steps/Step.js +16 -5
  1171. package/build/dist/UI/Components/Forms/Steps/Step.js.map +1 -1
  1172. package/build/dist/UI/Components/Forms/Steps/Steps.js +3 -1
  1173. package/build/dist/UI/Components/Forms/Steps/Steps.js.map +1 -1
  1174. package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
  1175. package/build/dist/UI/Components/Forms/Validation.js +13 -4
  1176. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  1177. package/build/dist/UI/Components/Icon/Icon.js +7 -2
  1178. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1179. package/build/dist/UI/Components/Label/Label.js +0 -2
  1180. package/build/dist/UI/Components/Label/Label.js.map +1 -1
  1181. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +1 -1
  1182. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -1
  1183. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +8 -0
  1184. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  1185. package/build/dist/UI/Components/Modal/ConfirmModal.js +22 -3
  1186. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  1187. package/build/dist/UI/Components/Modal/Modal.js +76 -9
  1188. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  1189. package/build/dist/UI/Components/Modal/ModalFooter.js +22 -6
  1190. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  1191. package/build/dist/UI/Components/ModelDelete/ModelDelete.js +84 -7
  1192. package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
  1193. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +38 -13
  1194. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  1195. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +41 -69
  1196. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1197. package/build/dist/UI/Components/ModelTable/TableView.js +13 -1
  1198. package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
  1199. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +1 -1
  1200. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js.map +1 -1
  1201. package/build/dist/UI/Components/Navbar/NavBar.js +3 -2
  1202. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  1203. package/build/dist/UI/Components/Pill/Pill.js +25 -22
  1204. package/build/dist/UI/Components/Pill/Pill.js.map +1 -1
  1205. package/build/dist/UI/Components/Pill/PillColors.js +297 -0
  1206. package/build/dist/UI/Components/Pill/PillColors.js.map +1 -0
  1207. package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js +7 -1
  1208. package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js.map +1 -1
  1209. package/build/dist/UI/Components/SideMenu/SideMenu.js +81 -9
  1210. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  1211. package/build/dist/UI/Components/SideMenu/SideMenuSection.js +21 -4
  1212. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  1213. package/build/dist/UI/Components/SideMenu/SideMenuSectionState.js +150 -0
  1214. package/build/dist/UI/Components/SideMenu/SideMenuSectionState.js.map +1 -0
  1215. package/build/dist/UI/Components/TextArea/TextArea.js +122 -4
  1216. package/build/dist/UI/Components/TextArea/TextArea.js.map +1 -1
  1217. package/build/dist/UI/Components/Toggle/Toggle.js +115 -22
  1218. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  1219. package/build/dist/UI/Components/Workflow/ArgumentsForm.js +272 -257
  1220. package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
  1221. package/build/dist/UI/Components/Workflow/BreakableCode.js +33 -0
  1222. package/build/dist/UI/Components/Workflow/BreakableCode.js.map +1 -0
  1223. package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnPicker.js +293 -0
  1224. package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnPicker.js.map +1 -0
  1225. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.js +17 -2
  1226. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.js.map +1 -1
  1227. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnControl.js +42 -4
  1228. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnControl.js.map +1 -1
  1229. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.js +9 -4
  1230. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.js.map +1 -1
  1231. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.js +252 -0
  1232. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.js.map +1 -0
  1233. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnUse.js +88 -0
  1234. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnUse.js.map +1 -0
  1235. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnValueInput.js +79 -44
  1236. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnValueInput.js.map +1 -1
  1237. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js +13 -8
  1238. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js.map +1 -1
  1239. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelRecordForm.js +19 -21
  1240. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelRecordForm.js.map +1 -1
  1241. package/build/dist/UI/Components/Workflow/Component.js +74 -8
  1242. package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
  1243. package/build/dist/UI/Components/Workflow/ComponentPicker/ComponentSearch.js +864 -0
  1244. package/build/dist/UI/Components/Workflow/ComponentPicker/ComponentSearch.js.map +1 -0
  1245. package/build/dist/UI/Components/Workflow/ComponentPicker/PickerCatalog.js +254 -0
  1246. package/build/dist/UI/Components/Workflow/ComponentPicker/PickerCatalog.js.map +1 -0
  1247. package/build/dist/UI/Components/Workflow/ComponentPicker/PickerItems.js +105 -0
  1248. package/build/dist/UI/Components/Workflow/ComponentPicker/PickerItems.js.map +1 -0
  1249. package/build/dist/UI/Components/Workflow/ComponentPortViewer.js +15 -45
  1250. package/build/dist/UI/Components/Workflow/ComponentPortViewer.js.map +1 -1
  1251. package/build/dist/UI/Components/Workflow/ComponentPrimaryPanel.js +88 -0
  1252. package/build/dist/UI/Components/Workflow/ComponentPrimaryPanel.js.map +1 -0
  1253. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +24 -57
  1254. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
  1255. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +196 -55
  1256. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
  1257. package/build/dist/UI/Components/Workflow/ComponentSettingsSection.js +34 -0
  1258. package/build/dist/UI/Components/Workflow/ComponentSettingsSection.js.map +1 -0
  1259. package/build/dist/UI/Components/Workflow/ComponentsModal.js +523 -329
  1260. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  1261. package/build/dist/UI/Components/Workflow/Condition/ConditionEditor.js +199 -0
  1262. package/build/dist/UI/Components/Workflow/Condition/ConditionEditor.js.map +1 -0
  1263. package/build/dist/UI/Components/Workflow/Condition/ConditionModel.js +458 -0
  1264. package/build/dist/UI/Components/Workflow/Condition/ConditionModel.js.map +1 -0
  1265. package/build/dist/UI/Components/Workflow/CronScheduleField.js +25 -19
  1266. package/build/dist/UI/Components/Workflow/CronScheduleField.js.map +1 -1
  1267. package/build/dist/UI/Components/Workflow/DocumentationViewer.js +107 -61
  1268. package/build/dist/UI/Components/Workflow/DocumentationViewer.js.map +1 -1
  1269. package/build/dist/UI/Components/Workflow/DownloadWorkflowRun.js +78 -0
  1270. package/build/dist/UI/Components/Workflow/DownloadWorkflowRun.js.map +1 -0
  1271. package/build/dist/UI/Components/Workflow/GraphLint.js +7 -2
  1272. package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -1
  1273. package/build/dist/UI/Components/Workflow/GraphLintSummary.js +59 -1
  1274. package/build/dist/UI/Components/Workflow/GraphLintSummary.js.map +1 -1
  1275. package/build/dist/UI/Components/Workflow/IncomingEmailTriggerPanel.js +215 -0
  1276. package/build/dist/UI/Components/Workflow/IncomingEmailTriggerPanel.js.map +1 -0
  1277. package/build/dist/UI/Components/Workflow/ManualTriggerPanel.js +27 -0
  1278. package/build/dist/UI/Components/Workflow/ManualTriggerPanel.js.map +1 -0
  1279. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +5 -1
  1280. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -1
  1281. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +44 -2
  1282. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  1283. package/build/dist/UI/Components/Workflow/ModelSchema.js +7 -8
  1284. package/build/dist/UI/Components/Workflow/ModelSchema.js.map +1 -1
  1285. package/build/dist/UI/Components/Workflow/NodePlacement.js +123 -1
  1286. package/build/dist/UI/Components/Workflow/NodePlacement.js.map +1 -1
  1287. package/build/dist/UI/Components/Workflow/RunModal.js +1 -1
  1288. package/build/dist/UI/Components/Workflow/StepTracePresentation.js +318 -0
  1289. package/build/dist/UI/Components/Workflow/StepTracePresentation.js.map +1 -0
  1290. package/build/dist/UI/Components/Workflow/StepTraceViewer.js +282 -42
  1291. package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
  1292. package/build/dist/UI/Components/Workflow/UseRunWatch.js +4 -0
  1293. package/build/dist/UI/Components/Workflow/UseRunWatch.js.map +1 -1
  1294. package/build/dist/UI/Components/Workflow/UseWorkflowEnabled.js +171 -0
  1295. package/build/dist/UI/Components/Workflow/UseWorkflowEnabled.js.map +1 -0
  1296. package/build/dist/UI/Components/Workflow/Utils.js +95 -88
  1297. package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
  1298. package/build/dist/UI/Components/Workflow/ValuePicker/ArgumentControl.js +113 -0
  1299. package/build/dist/UI/Components/Workflow/ValuePicker/ArgumentControl.js.map +1 -0
  1300. package/build/dist/UI/Components/Workflow/ValuePicker/DefaultValueSources.js +95 -0
  1301. package/build/dist/UI/Components/Workflow/ValuePicker/DefaultValueSources.js.map +1 -0
  1302. package/build/dist/UI/Components/Workflow/ValuePicker/InsertValueButton.js +46 -0
  1303. package/build/dist/UI/Components/Workflow/ValuePicker/InsertValueButton.js.map +1 -0
  1304. package/build/dist/UI/Components/Workflow/ValuePicker/ReferenceChip.js +88 -0
  1305. package/build/dist/UI/Components/Workflow/ValuePicker/ReferenceChip.js.map +1 -0
  1306. package/build/dist/UI/Components/Workflow/ValuePicker/ReferenceDescription.js +187 -0
  1307. package/build/dist/UI/Components/Workflow/ValuePicker/ReferenceDescription.js.map +1 -0
  1308. package/build/dist/UI/Components/Workflow/ValuePicker/StepGraph.js +147 -0
  1309. package/build/dist/UI/Components/Workflow/ValuePicker/StepGraph.js.map +1 -0
  1310. package/build/dist/UI/Components/Workflow/ValuePicker/StepSampleSource.js +345 -0
  1311. package/build/dist/UI/Components/Workflow/ValuePicker/StepSampleSource.js.map +1 -0
  1312. package/build/dist/UI/Components/Workflow/ValuePicker/StepValueSource.js +181 -0
  1313. package/build/dist/UI/Components/Workflow/ValuePicker/StepValueSource.js.map +1 -0
  1314. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateText.js +172 -0
  1315. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateText.js.map +1 -0
  1316. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateTextDom.js +342 -0
  1317. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateTextDom.js.map +1 -0
  1318. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateTextEditor.js +701 -0
  1319. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateTextEditor.js.map +1 -0
  1320. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateTextHistory.js +104 -0
  1321. package/build/dist/UI/Components/Workflow/ValuePicker/TemplateTextHistory.js.map +1 -0
  1322. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerContext.js +319 -0
  1323. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerContext.js.map +1 -0
  1324. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerMenu.js +502 -0
  1325. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerMenu.js.map +1 -0
  1326. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerPopup.js +176 -0
  1327. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerPopup.js.map +1 -0
  1328. package/build/dist/UI/Components/Workflow/ValuePicker/ValueSingleField.js +111 -0
  1329. package/build/dist/UI/Components/Workflow/ValuePicker/ValueSingleField.js.map +1 -0
  1330. package/build/dist/UI/Components/Workflow/ValuePicker/ValueSuggestion.js +356 -0
  1331. package/build/dist/UI/Components/Workflow/ValuePicker/ValueSuggestion.js.map +1 -0
  1332. package/build/dist/UI/Components/Workflow/ValuePicker/ValueTextField.js +168 -0
  1333. package/build/dist/UI/Components/Workflow/ValuePicker/ValueTextField.js.map +1 -0
  1334. package/build/dist/UI/Components/Workflow/ValuePicker/VariableValueSource.js +80 -0
  1335. package/build/dist/UI/Components/Workflow/ValuePicker/VariableValueSource.js.map +1 -0
  1336. package/build/dist/UI/Components/Workflow/WebhookTriggerPanel.js +225 -0
  1337. package/build/dist/UI/Components/Workflow/WebhookTriggerPanel.js.map +1 -0
  1338. package/build/dist/UI/Components/Workflow/Workflow.js +256 -39
  1339. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  1340. package/build/dist/UI/Components/Workflow/WorkflowEnabledCopy.js +33 -0
  1341. package/build/dist/UI/Components/Workflow/WorkflowEnabledCopy.js.map +1 -0
  1342. package/build/dist/UI/Components/Workflow/WorkflowEnabledSwitch.js +18 -0
  1343. package/build/dist/UI/Components/Workflow/WorkflowEnabledSwitch.js.map +1 -0
  1344. package/build/dist/UI/Components/Workflow/WorkflowIncomingEmailSecretKey.js +97 -0
  1345. package/build/dist/UI/Components/Workflow/WorkflowIncomingEmailSecretKey.js.map +1 -0
  1346. package/build/dist/UI/Components/Workflow/WorkflowLogModal.js +41 -7
  1347. package/build/dist/UI/Components/Workflow/WorkflowLogModal.js.map +1 -1
  1348. package/build/dist/UI/Components/Workflow/WorkflowRunExport.js +258 -0
  1349. package/build/dist/UI/Components/Workflow/WorkflowRunExport.js.map +1 -0
  1350. package/build/dist/UI/Components/Workflow/WorkflowRunExportActions.js +124 -0
  1351. package/build/dist/UI/Components/Workflow/WorkflowRunExportActions.js.map +1 -0
  1352. package/build/dist/UI/Components/Workflow/WorkflowStatus.js +16 -23
  1353. package/build/dist/UI/Components/Workflow/WorkflowStatus.js.map +1 -1
  1354. package/build/dist/UI/Components/Workflow/WorkflowTurnOnModal.js +60 -0
  1355. package/build/dist/UI/Components/Workflow/WorkflowTurnOnModal.js.map +1 -0
  1356. package/build/dist/UI/Components/Workflow/WorkflowTurnedOffNotice.js +34 -0
  1357. package/build/dist/UI/Components/Workflow/WorkflowTurnedOffNotice.js.map +1 -0
  1358. package/build/dist/UI/Components/Workflow/WorkflowWebhookSecretKey.js +112 -0
  1359. package/build/dist/UI/Components/Workflow/WorkflowWebhookSecretKey.js.map +1 -0
  1360. package/build/dist/UI/Utils/McpOAuthPendingAuthorization.js +111 -0
  1361. package/build/dist/UI/Utils/McpOAuthPendingAuthorization.js.map +1 -0
  1362. package/build/dist/UI/Utils/ModelDisplayName.js +197 -0
  1363. package/build/dist/UI/Utils/ModelDisplayName.js.map +1 -0
  1364. package/build/dist/UI/Utils/TranslateTemplate.js +63 -0
  1365. package/build/dist/UI/Utils/TranslateTemplate.js.map +1 -0
  1366. package/build/dist/Utils/DeveloperDocs/AiAssistantExamples.js +278 -0
  1367. package/build/dist/Utils/DeveloperDocs/AiAssistantExamples.js.map +1 -0
  1368. package/build/dist/Utils/DeveloperDocs/ApiExamples.js +225 -0
  1369. package/build/dist/Utils/DeveloperDocs/ApiExamples.js.map +1 -0
  1370. package/build/dist/Utils/DeveloperDocs/ExampleValues.js +90 -0
  1371. package/build/dist/Utils/DeveloperDocs/ExampleValues.js.map +1 -0
  1372. package/build/dist/Utils/DeveloperDocs/Hcl.js +449 -0
  1373. package/build/dist/Utils/DeveloperDocs/Hcl.js.map +1 -0
  1374. package/build/dist/Utils/DeveloperDocs/TerraformConfig.js +503 -0
  1375. package/build/dist/Utils/DeveloperDocs/TerraformConfig.js.map +1 -0
  1376. package/build/dist/Utils/DeveloperDocs/TerraformMonitorSteps.js +332 -0
  1377. package/build/dist/Utils/DeveloperDocs/TerraformMonitorSteps.js.map +1 -0
  1378. package/build/dist/Utils/DeveloperDocs/TerraformSchema.js +420 -0
  1379. package/build/dist/Utils/DeveloperDocs/TerraformSchema.js.map +1 -0
  1380. package/build/dist/Utils/DeveloperDocs/TerraformValues.js +280 -0
  1381. package/build/dist/Utils/DeveloperDocs/TerraformValues.js.map +1 -0
  1382. package/build/dist/Utils/Email/EmailAddressList.js +132 -0
  1383. package/build/dist/Utils/Email/EmailAddressList.js.map +1 -0
  1384. package/build/dist/Utils/ModelImportExport.js +15 -0
  1385. package/build/dist/Utils/ModelImportExport.js.map +1 -1
  1386. package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js +54 -3
  1387. package/build/dist/Utils/Monitor/IncomingEmailMonitorAddress.js.map +1 -1
  1388. package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js +19 -1
  1389. package/build/dist/Utils/Monitor/MonitorOverviewPresentationUtil.js.map +1 -1
  1390. package/build/dist/Utils/Monitor/MonitorPauseState.js +66 -0
  1391. package/build/dist/Utils/Monitor/MonitorPauseState.js.map +1 -0
  1392. package/build/dist/Utils/Rum/SessionIdentity.js +73 -0
  1393. package/build/dist/Utils/Rum/SessionIdentity.js.map +1 -1
  1394. package/build/dist/Utils/StatusPage/ArchivedMonitorResources.js +31 -0
  1395. package/build/dist/Utils/StatusPage/ArchivedMonitorResources.js.map +1 -0
  1396. package/package.json +1 -1
  1397. package/test-setup.sh +15 -1
  1398. package/UI/Components/Workflow/ColumnEditor/AddColumnDropdown.tsx +0 -177
  1399. package/UI/Components/Workflow/ComponentValuePickerModal.tsx +0 -325
  1400. package/UI/Components/Workflow/VariableModal.tsx +0 -59
  1401. package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnDropdown.js +0 -86
  1402. package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnDropdown.js.map +0 -1
  1403. package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js +0 -144
  1404. package/build/dist/UI/Components/Workflow/ComponentValuePickerModal.js.map +0 -1
  1405. package/build/dist/UI/Components/Workflow/VariableModal.js +0 -31
  1406. package/build/dist/UI/Components/Workflow/VariableModal.js.map +0 -1
@@ -1,16 +1,71 @@
1
- // Show a large modal full of components.
2
- import ErrorMessage from "../ErrorMessage/ErrorMessage";
1
+ /*
2
+ * The Add Component and Add Trigger picker.
3
+ *
4
+ * About two thousand steps can be added to a workflow, and all but some
5
+ * twenty of them are the eight actions and three triggers generated for each
6
+ * database model. This panel used to list every one of them, a card each,
7
+ * grouped by model in registration order, and re-rendered the lot on every
8
+ * keystroke; it took seconds to open on a slow machine, froze while typing,
9
+ * and drew a search's results model by model in that same order, so
10
+ * "incident" showed Incident State above Incident.
11
+ *
12
+ * Now it leads with what people use and asks one small question at a time:
13
+ *
14
+ * - Popular: the handful of steps most workflows are built from.
15
+ * - More: the rest of the hand-written steps.
16
+ * - OneUptime resources: pick Incident, then what to do with it. The
17
+ * common resources are shown; every other one is behind "Browse all".
18
+ *
19
+ * Search covers everything (ComponentPicker/ComponentSearch.ts): every word
20
+ * counts, the resource named comes first, plurals and typos are forgiven,
21
+ * and only the best results are drawn. It runs on a deferred copy of what
22
+ * was typed, so typing never waits for the list.
23
+ *
24
+ * Picking is one click (or Enter): the panel exists to choose a step, so
25
+ * there is no second "Add to Workflow" button to find at the bottom.
26
+ */
27
+ import KeyboardShortcut, {
28
+ KeyboardKey,
29
+ KeyboardShortcutSize,
30
+ } from "../KeyboardShortcut/KeyboardShortcut";
3
31
  import Icon from "../Icon/Icon";
4
32
  import SideOver from "../SideOver/SideOver";
5
- import Dictionary from "../../../Types/Dictionary";
6
33
  import IconProp from "../../../Types/Icon/IconProp";
7
34
  import ComponentMetadata, {
8
35
  ComponentCategory,
9
36
  ComponentType,
10
37
  } from "../../../Types/Workflow/Component";
38
+ import {
39
+ ComponentSearchOutcome,
40
+ ComponentSearchResult,
41
+ getComponentSearchIndex,
42
+ getHighlightSegments,
43
+ getSearchTokens,
44
+ searchComponents,
45
+ } from "./ComponentPicker/ComponentSearch";
46
+ import {
47
+ PickerBuiltInGroup,
48
+ PickerCatalog,
49
+ PickerResource,
50
+ getPickerCatalog,
51
+ } from "./ComponentPicker/PickerCatalog";
52
+ import {
53
+ ALL_RESOURCES_ITEM_KEY,
54
+ BackButton,
55
+ ComponentTile,
56
+ HighlightedText,
57
+ IconBox,
58
+ PICKER_ITEM_ATTRIBUTE,
59
+ ResourceRow,
60
+ ResourceTile,
61
+ SectionHeading,
62
+ getPickerItemProps,
63
+ resourceItemKey,
64
+ } from "./ComponentPicker/PickerItems";
11
65
  import React, {
12
66
  FunctionComponent,
13
67
  ReactElement,
68
+ useDeferredValue,
14
69
  useEffect,
15
70
  useMemo,
16
71
  useRef,
@@ -20,239 +75,233 @@ import React, {
20
75
  export interface ComponentProps {
21
76
  componentsType: ComponentType;
22
77
  onCloseModal: () => void;
78
+ // Called once, with the step that was picked.
23
79
  onComponentClick: (componentMetadata: ComponentMetadata) => void;
24
80
  components: Array<ComponentMetadata>;
25
81
  categories: Array<ComponentCategory>;
26
82
  }
27
83
 
28
- const escapeRegExp: (value: string) => string = (value: string): string => {
29
- return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
30
- };
84
+ // How many search results are drawn at first, and added by "Show more".
85
+ export const SEARCH_RESULTS_PAGE_SIZE: number = 50;
31
86
 
32
- /**
33
- * The words of a search, in lower case. Empty when nothing was typed.
34
- */
35
- export type SearchTokensFunction = (search: string) => Array<string>;
36
-
37
- export const getSearchTokens: SearchTokensFunction = (
38
- search: string,
39
- ): Array<string> => {
40
- return search
41
- .trim()
42
- .toLowerCase()
43
- .split(/\s+/)
44
- .filter((token: string) => {
45
- return token.length > 0;
46
- });
87
+ export const SEARCH_INPUT_ID: string = "workflow-component-search";
88
+ export const SEARCH_RESULTS_ID: string = "workflow-component-results";
89
+
90
+ export type SearchOptionIdFunction = (index: number) => string;
91
+
92
+ export const getSearchOptionId: SearchOptionIdFunction = (
93
+ index: number,
94
+ ): string => {
95
+ return `workflow-component-option-${index}`;
47
96
  };
48
97
 
49
- /**
50
- * Does this component match every word typed?
51
- *
52
- * Every word, anywhere across title, description and category — not the whole
53
- * search string as one substring. The database components are generated as
54
- * "Create One Monitor" / "Database query to create one Monitor" / "Monitor",
55
- * so a plain substring search answered "create one monitor secret" with one
56
- * result and "create monitor" with none at all — and the empty state then told
57
- * the builder the integration did not exist. In a palette holding a component
58
- * per operation per model, browsing is not a fallback.
59
- */
60
- export type MatchesSearchFunction = (
61
- componentMetadata: ComponentMetadata,
62
- tokens: Array<string>,
63
- ) => boolean;
64
-
65
- export const matchesSearch: MatchesSearchFunction = (
66
- componentMetadata: ComponentMetadata,
67
- tokens: Array<string>,
68
- ): boolean => {
69
- if (tokens.length === 0) {
70
- return true;
71
- }
98
+ export enum PickerViewKind {
99
+ Home = "Home",
100
+ AllResources = "AllResources",
101
+ Resource = "Resource",
102
+ }
72
103
 
73
- const haystack: string =
74
- `${componentMetadata.title} ${componentMetadata.description} ${componentMetadata.category}`.toLowerCase();
104
+ interface PickerView {
105
+ kind: PickerViewKind;
106
+ resourceKey?: string | undefined;
107
+ }
75
108
 
76
- return tokens.every((token: string) => {
77
- return haystack.includes(token);
78
- });
79
- };
109
+ interface ViewEntry {
110
+ view: PickerView;
111
+ // What had the focus, and how far the panel was scrolled, when it was left.
112
+ returnFocusKey: string | null;
113
+ scrollTop: number;
114
+ }
80
115
 
81
- const getSearchScoreForToken: (
82
- componentMetadata: ComponentMetadata,
83
- searchTerm: string,
84
- ) => number = (
85
- componentMetadata: ComponentMetadata,
86
- searchTerm: string,
87
- ): number => {
88
- const title: string = componentMetadata.title.toLowerCase();
89
- const description: string = componentMetadata.description.toLowerCase();
90
- const category: string = componentMetadata.category.toLowerCase();
91
-
92
- let score: number = 0;
93
-
94
- if (title.startsWith(searchTerm)) {
95
- score += 140;
96
- } else if (title.includes(searchTerm)) {
97
- score += 100;
98
- }
116
+ type PendingFocus =
117
+ | { kind: "first-item" }
118
+ | { kind: "restore"; key: string | null; scrollTop: number }
119
+ | { kind: "search" };
99
120
 
100
- if (category.startsWith(searchTerm)) {
101
- score += 75;
102
- } else if (category.includes(searchTerm)) {
103
- score += 55;
104
- }
121
+ const EMPTY_OUTCOME: ComponentSearchOutcome = {
122
+ tokens: [],
123
+ typoTokens: [],
124
+ results: [],
125
+ };
105
126
 
106
- if (description.includes(searchTerm)) {
107
- score += 35;
108
- }
127
+ const HOME_ENTRY: ViewEntry = {
128
+ view: { kind: PickerViewKind.Home },
129
+ returnFocusKey: null,
130
+ scrollTop: 0,
131
+ };
109
132
 
110
- if (
111
- title.split(" ").some((word: string) => {
112
- return word.trim().startsWith(searchTerm);
113
- })
114
- ) {
115
- score += 15;
116
- }
133
+ type IsTypingTargetFunction = (target: EventTarget | null) => boolean;
134
+
135
+ const isTypingTarget: IsTypingTargetFunction = (
136
+ target: EventTarget | null,
137
+ ): boolean => {
138
+ const element: HTMLElement | null = target as HTMLElement | null;
117
139
 
118
- return score;
140
+ return Boolean(
141
+ element &&
142
+ (element.tagName === "INPUT" ||
143
+ element.tagName === "TEXTAREA" ||
144
+ element.isContentEditable ||
145
+ element.getAttribute?.("contenteditable") === "true"),
146
+ );
119
147
  };
120
148
 
121
- /**
122
- * Ranking, summed over the words typed.
123
- *
124
- * Every branch of the per-word score tests one whole token, so scoring the
125
- * search as a single string gave every multi-word search a score of zero and
126
- * left the order to the tie-breaker alone.
149
+ type PrefersTouchFunction = () => boolean;
150
+
151
+ /*
152
+ * On a phone, focusing the search box on open throws the keyboard over half
153
+ * of what the panel offers. There the panel opens for browsing; a tap on the
154
+ * box searches.
127
155
  */
128
- export type GetSearchScoreFunction = (
129
- componentMetadata: ComponentMetadata,
130
- tokens: Array<string>,
131
- ) => number;
132
-
133
- export const getSearchScore: GetSearchScoreFunction = (
134
- componentMetadata: ComponentMetadata,
135
- tokens: Array<string>,
136
- ): number => {
137
- return tokens.reduce((total: number, token: string) => {
138
- return total + getSearchScoreForToken(componentMetadata, token);
139
- }, 0);
156
+ const prefersTouch: PrefersTouchFunction = (): boolean => {
157
+ try {
158
+ return Boolean(
159
+ typeof window !== "undefined" &&
160
+ window.matchMedia &&
161
+ window.matchMedia("(pointer: coarse)").matches,
162
+ );
163
+ } catch {
164
+ return false;
165
+ }
140
166
  };
141
167
 
142
168
  const ComponentsModal: FunctionComponent<ComponentProps> = (
143
169
  props: ComponentProps,
144
170
  ): ReactElement => {
145
- const [search, setSearch] = useState<string>("");
146
- const searchInputRef: React.RefObject<HTMLInputElement> =
147
- useRef<HTMLInputElement>(null);
171
+ const typeLabel: string =
172
+ props.componentsType === ComponentType.Trigger ? "trigger" : "component";
173
+ const typePlural: string = `${typeLabel}s`;
148
174
 
149
- const [selectedComponentId, setSelectedComponentId] = useState<string | null>(
150
- null,
151
- );
152
- const categories: Array<ComponentCategory> = props.categories;
153
- const searchTokens: Array<string> = useMemo(() => {
154
- return getSearchTokens(search);
155
- }, [search]);
156
- const components: Array<ComponentMetadata> = useMemo(() => {
157
- return props.components.filter((componentMetadata: ComponentMetadata) => {
158
- return componentMetadata.componentType === props.componentsType;
159
- });
160
- }, [props.components, props.componentsType]);
161
- const componentsToShow: Array<ComponentMetadata> = useMemo(() => {
162
- return components
163
- .filter((componentMetadata: ComponentMetadata) => {
164
- return matchesSearch(componentMetadata, searchTokens);
165
- })
166
- .sort((componentA: ComponentMetadata, componentB: ComponentMetadata) => {
167
- if (searchTokens.length === 0) {
168
- return componentA.title.localeCompare(componentB.title);
169
- }
170
-
171
- const scoreDifference: number =
172
- getSearchScore(componentB, searchTokens) -
173
- getSearchScore(componentA, searchTokens);
174
-
175
- if (scoreDifference !== 0) {
176
- return scoreDifference;
177
- }
178
-
179
- return componentA.title.localeCompare(componentB.title);
180
- });
181
- }, [components, searchTokens]);
182
- const selectedComponentMetadata: ComponentMetadata | undefined =
183
- componentsToShow.find((componentMetadata: ComponentMetadata) => {
184
- return componentMetadata.id === selectedComponentId;
175
+ const catalog: PickerCatalog = useMemo(() => {
176
+ return getPickerCatalog({
177
+ components: props.components,
178
+ categories: props.categories,
179
+ componentsType: props.componentsType,
185
180
  });
181
+ }, [props.components, props.categories, props.componentsType]);
186
182
 
187
- useEffect(() => {
188
- // A hidden selection must not be submitted or reappear when search clears.
189
- if (!selectedComponentMetadata) {
190
- setSelectedComponentId(null);
191
- }
192
- }, [selectedComponentMetadata]);
183
+ const [query, setQuery] = useState<string>("");
184
+ // What was typed, a render behind while the list catches up.
185
+ const deferredQuery: string = useDeferredValue(query);
193
186
 
194
- const searchHighlightPattern: RegExp | null = useMemo(() => {
195
- if (searchTokens.length === 0) {
196
- return null;
187
+ const outcome: ComponentSearchOutcome = useMemo(() => {
188
+ if (getSearchTokens(deferredQuery).length === 0) {
189
+ return EMPTY_OUTCOME;
197
190
  }
198
191
 
199
- const alternatives: string = [...new Set(searchTokens)]
200
- .sort((tokenA: string, tokenB: string) => {
201
- return tokenB.length - tokenA.length;
202
- })
203
- .map(escapeRegExp)
204
- .join("|");
192
+ return searchComponents(getComponentSearchIndex(catalog), deferredQuery);
193
+ }, [catalog, deferredQuery]);
194
+
195
+ const isSearching: boolean = outcome.tokens.length > 0;
196
+ // The list is a render behind what was typed, for a moment.
197
+ const isCatchingUp: boolean = query !== deferredQuery;
198
+
199
+ // How many results are drawn, and which one Enter adds, for this search.
200
+ const [shown, setShown] = useState<{ query: string; count: number }>({
201
+ query: "",
202
+ count: SEARCH_RESULTS_PAGE_SIZE,
203
+ });
204
+ const shownCount: number =
205
+ shown.query === deferredQuery ? shown.count : SEARCH_RESULTS_PAGE_SIZE;
206
+ const visibleResults: Array<ComponentSearchResult> = outcome.results.slice(
207
+ 0,
208
+ shownCount,
209
+ );
210
+
211
+ const [active, setActive] = useState<{ query: string; index: number }>({
212
+ query: "",
213
+ index: 0,
214
+ });
215
+ const activeIndex: number =
216
+ active.query === deferredQuery
217
+ ? Math.min(active.index, Math.max(visibleResults.length - 1, 0))
218
+ : 0;
219
+ // Only keyboard moves scroll the list; a pointer resting on it must not.
220
+ const scrollActiveIntoViewRef: React.MutableRefObject<boolean> =
221
+ useRef<boolean>(false);
222
+
223
+ const [viewStack, setViewStack] = useState<Array<ViewEntry>>([HOME_ENTRY]);
224
+ const currentEntry: ViewEntry = viewStack[viewStack.length - 1] || HOME_ENTRY;
225
+ const pendingFocusRef: React.MutableRefObject<PendingFocus | null> =
226
+ useRef<PendingFocus | null>(null);
227
+
228
+ const rootRef: React.RefObject<HTMLDivElement> = useRef<HTMLDivElement>(null);
229
+ const searchInputRef: React.RefObject<HTMLInputElement> =
230
+ useRef<HTMLInputElement>(null);
231
+
232
+ type GetScrollContainerFunction = () => HTMLElement | null;
233
+
234
+ // The SideOver's scrolling body, which the sticky search box sits in.
235
+ const getScrollContainer: GetScrollContainerFunction =
236
+ (): HTMLElement | null => {
237
+ return (
238
+ (rootRef.current?.closest(
239
+ "[data-testid='side-over-content']",
240
+ ) as HTMLElement | null) || null
241
+ );
242
+ };
243
+
244
+ const openedResource: PickerResource | undefined =
245
+ currentEntry.view.kind === PickerViewKind.Resource &&
246
+ currentEntry.view.resourceKey
247
+ ? catalog.resourcesByKey.get(currentEntry.view.resourceKey)
248
+ : undefined;
249
+
250
+ // A resource that is no longer in the catalog cannot stay open.
251
+ const view: PickerViewKind =
252
+ currentEntry.view.kind === PickerViewKind.Resource && !openedResource
253
+ ? PickerViewKind.Home
254
+ : currentEntry.view.kind;
205
255
 
206
- return new RegExp(`(${alternatives})`, "ig");
207
- }, [searchTokens]);
256
+ useEffect(() => {
257
+ if (!prefersTouch()) {
258
+ searchInputRef.current?.focus();
259
+ }
260
+ }, []);
208
261
 
209
262
  /*
210
- * Grouped once per search rather than re-filtered inside the render loop.
211
- * That loop ran once per category — around four hundred of them, each
212
- * scanning every component still on screen — on every keystroke, with no
213
- * debounce and no windowing.
263
+ * Index the catalog while the panel sits idle, so the first key typed does
264
+ * not wait for it. It is kept per catalog, so this happens once a page.
214
265
  */
215
- const componentsByCategory: Dictionary<Array<ComponentMetadata>> =
216
- useMemo(() => {
217
- const grouped: Dictionary<Array<ComponentMetadata>> = {};
218
-
219
- for (const componentMetadata of componentsToShow) {
220
- const bucket: Array<ComponentMetadata> | undefined =
221
- grouped[componentMetadata.category];
222
-
223
- if (bucket) {
224
- bucket.push(componentMetadata);
225
- } else {
226
- grouped[componentMetadata.category] = [componentMetadata];
227
- }
266
+ useEffect(() => {
267
+ let isCancelled: boolean = false;
268
+
269
+ const build: () => void = (): void => {
270
+ if (!isCancelled) {
271
+ getComponentSearchIndex(catalog);
228
272
  }
273
+ };
229
274
 
230
- return grouped;
231
- }, [componentsToShow]);
275
+ if (typeof window.requestIdleCallback === "function") {
276
+ const handle: number = window.requestIdleCallback(build, {
277
+ timeout: 1500,
278
+ });
232
279
 
233
- useEffect(() => {
234
- searchInputRef.current?.focus();
235
- }, []);
280
+ return () => {
281
+ isCancelled = true;
282
+ window.cancelIdleCallback?.(handle);
283
+ };
284
+ }
285
+
286
+ const timer: ReturnType<typeof setTimeout> = setTimeout(build, 300);
236
287
 
288
+ return () => {
289
+ isCancelled = true;
290
+ clearTimeout(timer);
291
+ };
292
+ }, [catalog]);
293
+
294
+ // "/" jumps to the search box from anywhere in the panel.
237
295
  useEffect(() => {
238
296
  const handleKeyDown: (event: KeyboardEvent) => void = (
239
297
  event: KeyboardEvent,
240
298
  ): void => {
241
- const target: HTMLElement | null = event.target as HTMLElement | null;
242
-
243
- const isTypingContext: boolean = Boolean(
244
- target &&
245
- (target.tagName === "INPUT" ||
246
- target.tagName === "TEXTAREA" ||
247
- target.getAttribute("contenteditable") === "true"),
248
- );
249
-
250
299
  if (
251
300
  event.key === "/" &&
252
301
  !event.metaKey &&
253
302
  !event.ctrlKey &&
254
303
  !event.altKey &&
255
- !isTypingContext
304
+ !isTypingTarget(event.target)
256
305
  ) {
257
306
  event.preventDefault();
258
307
  searchInputRef.current?.focus();
@@ -266,438 +315,746 @@ const ComponentsModal: FunctionComponent<ComponentProps> = (
266
315
  };
267
316
  }, []);
268
317
 
269
- const hasSearchTerm: boolean = search.trim().length > 0;
270
- const normalizedSearch: string = search.trim().toLowerCase();
271
- const totalComponentCount: number = components.length;
272
- const componentTypeLabel: string = `${props.componentsType.toLowerCase()}${
273
- totalComponentCount === 1 ? "" : "s"
274
- }`;
275
- const suggestedCategories: Array<ComponentCategory> = categories
276
- .filter((category: ComponentCategory) => {
277
- return components.some((componentMetadata: ComponentMetadata) => {
278
- return componentMetadata.category === category.name;
279
- });
280
- })
281
- .slice(0, 4);
282
-
283
- const renderHighlightedText: (
284
- text: string,
285
- markClassName?: string,
286
- ) => React.ReactNode = (
287
- text: string,
288
- markClassName?: string,
289
- ): React.ReactNode => {
290
- if (!searchHighlightPattern) {
291
- return text;
318
+ // A new search starts at the top of the panel.
319
+ useEffect(() => {
320
+ if (isSearching) {
321
+ const container: HTMLElement | null = getScrollContainer();
322
+
323
+ if (container) {
324
+ container.scrollTop = 0;
325
+ }
326
+ }
327
+ }, [deferredQuery]);
328
+
329
+ // Keep the option Enter would add in sight while the arrows move it.
330
+ useEffect(() => {
331
+ if (!scrollActiveIntoViewRef.current) {
332
+ return;
292
333
  }
293
334
 
294
- const highlightedParts: Array<string> = text.split(searchHighlightPattern);
335
+ scrollActiveIntoViewRef.current = false;
336
+ const option: HTMLElement | null = document.getElementById(
337
+ getSearchOptionId(activeIndex),
338
+ );
339
+ option?.scrollIntoView?.({ block: "nearest" });
340
+ }, [activeIndex]);
295
341
 
296
- return (
297
- <>
298
- {highlightedParts.map((part: string, index: number) => {
299
- if (searchTokens.includes(part.toLowerCase())) {
300
- return (
301
- <mark
302
- key={`${part}-${index}`}
303
- className={
304
- markClassName || "rounded bg-amber-100 px-0.5 text-current"
305
- }
306
- >
307
- {part}
308
- </mark>
309
- );
310
- }
342
+ // Focus and scroll for a view that was just opened or returned to.
343
+ useEffect(() => {
344
+ const pending: PendingFocus | null = pendingFocusRef.current;
345
+ pendingFocusRef.current = null;
311
346
 
312
- return (
313
- <React.Fragment key={`${part}-${index}`}>{part}</React.Fragment>
314
- );
315
- })}
316
- </>
347
+ if (!pending) {
348
+ return;
349
+ }
350
+
351
+ const container: HTMLElement | null = getScrollContainer();
352
+
353
+ if (pending.kind === "search") {
354
+ searchInputRef.current?.focus();
355
+ return;
356
+ }
357
+
358
+ if (pending.kind === "first-item") {
359
+ if (container) {
360
+ container.scrollTop = 0;
361
+ }
362
+
363
+ rootRef.current
364
+ ?.querySelector<HTMLElement>(`[${PICKER_ITEM_ATTRIBUTE}]`)
365
+ ?.focus({ preventScroll: true });
366
+ return;
367
+ }
368
+
369
+ if (container) {
370
+ container.scrollTop = pending.scrollTop;
371
+ }
372
+
373
+ const returnTo: HTMLElement | undefined = pending.key
374
+ ? Array.from(
375
+ rootRef.current?.querySelectorAll<HTMLElement>(
376
+ `[${PICKER_ITEM_ATTRIBUTE}]`,
377
+ ) || [],
378
+ ).find((element: HTMLElement): boolean => {
379
+ return element.getAttribute(PICKER_ITEM_ATTRIBUTE) === pending.key;
380
+ })
381
+ : undefined;
382
+
383
+ (returnTo || searchInputRef.current)?.focus({ preventScroll: true });
384
+ }, [viewStack]);
385
+
386
+ type OpenViewFunction = (view: PickerView, fromKey: string) => void;
387
+
388
+ const openView: OpenViewFunction = (
389
+ nextView: PickerView,
390
+ fromKey: string,
391
+ ): void => {
392
+ const scrollTop: number = getScrollContainer()?.scrollTop || 0;
393
+
394
+ pendingFocusRef.current = { kind: "first-item" };
395
+ setViewStack((stack: Array<ViewEntry>): Array<ViewEntry> => {
396
+ const top: ViewEntry = stack[stack.length - 1] || HOME_ENTRY;
397
+
398
+ return [
399
+ ...stack.slice(0, -1),
400
+ { ...top, returnFocusKey: fromKey, scrollTop: scrollTop },
401
+ { view: nextView, returnFocusKey: null, scrollTop: 0 },
402
+ ];
403
+ });
404
+ };
405
+
406
+ type GoBackFunction = (focusSearch: boolean) => void;
407
+
408
+ const goBack: GoBackFunction = (focusSearch: boolean): void => {
409
+ if (viewStack.length <= 1) {
410
+ return;
411
+ }
412
+
413
+ const previous: ViewEntry = viewStack[viewStack.length - 2] || HOME_ENTRY;
414
+
415
+ pendingFocusRef.current = focusSearch
416
+ ? { kind: "search" }
417
+ : {
418
+ kind: "restore",
419
+ key: previous.returnFocusKey,
420
+ scrollTop: previous.scrollTop,
421
+ };
422
+ setViewStack((stack: Array<ViewEntry>): Array<ViewEntry> => {
423
+ return stack.length > 1 ? stack.slice(0, -1) : stack;
424
+ });
425
+ };
426
+
427
+ type OpenResourceFunction = (resource: PickerResource) => void;
428
+
429
+ const openResource: OpenResourceFunction = (
430
+ resource: PickerResource,
431
+ ): void => {
432
+ openView(
433
+ { kind: PickerViewKind.Resource, resourceKey: resource.key },
434
+ resourceItemKey(resource),
317
435
  );
318
436
  };
319
437
 
320
- return (
321
- <SideOver
322
- submitButtonText="Add to Workflow"
323
- title={`Add ${props.componentsType}`}
324
- description={`Choose a ${props.componentsType.toLowerCase()} to add to your workflow.`}
325
- onClose={props.onCloseModal}
326
- submitButtonDisabled={!selectedComponentMetadata}
327
- onSubmit={() => {
328
- return (
329
- selectedComponentMetadata &&
330
- props.onComponentClick(selectedComponentMetadata)
331
- );
332
- }}
333
- >
438
+ type PickFunction = (componentMetadata: ComponentMetadata) => void;
439
+
440
+ const pick: PickFunction = (componentMetadata: ComponentMetadata): void => {
441
+ props.onComponentClick(componentMetadata);
442
+ };
443
+
444
+ type ClearSearchFunction = () => void;
445
+
446
+ const clearSearch: ClearSearchFunction = (): void => {
447
+ setQuery("");
448
+ searchInputRef.current?.focus();
449
+ };
450
+
451
+ type MoveActiveFunction = (delta: number) => void;
452
+
453
+ const moveActive: MoveActiveFunction = (delta: number): void => {
454
+ if (visibleResults.length === 0) {
455
+ return;
456
+ }
457
+
458
+ scrollActiveIntoViewRef.current = true;
459
+ setActive({
460
+ query: deferredQuery,
461
+ index: Math.min(
462
+ Math.max(activeIndex + delta, 0),
463
+ visibleResults.length - 1,
464
+ ),
465
+ });
466
+ };
467
+
468
+ type OnSearchKeyDownFunction = (
469
+ event: React.KeyboardEvent<HTMLInputElement>,
470
+ ) => void;
471
+
472
+ const onSearchKeyDown: OnSearchKeyDownFunction = (
473
+ event: React.KeyboardEvent<HTMLInputElement>,
474
+ ): void => {
475
+ if (event.key === "Escape") {
476
+ if (query.length > 0) {
477
+ event.preventDefault();
478
+ event.stopPropagation();
479
+ setQuery("");
480
+ } else if (viewStack.length > 1) {
481
+ event.preventDefault();
482
+ event.stopPropagation();
483
+ goBack(true);
484
+ }
485
+
486
+ return;
487
+ }
488
+
489
+ if (event.key === "ArrowDown") {
490
+ event.preventDefault();
491
+
492
+ if (isSearching) {
493
+ moveActive(1);
494
+ } else {
495
+ rootRef.current
496
+ ?.querySelector<HTMLElement>(`[${PICKER_ITEM_ATTRIBUTE}]`)
497
+ ?.focus();
498
+ }
499
+
500
+ return;
501
+ }
502
+
503
+ if (event.key === "ArrowUp") {
504
+ if (isSearching) {
505
+ event.preventDefault();
506
+ moveActive(-1);
507
+ }
508
+
509
+ return;
510
+ }
511
+
512
+ if (event.key === "Enter") {
513
+ if (getSearchTokens(query).length === 0) {
514
+ return;
515
+ }
516
+
517
+ event.preventDefault();
518
+
519
+ /*
520
+ * Typed and entered faster than the list caught up: add the best match
521
+ * for what is in the box, not for what the list still shows.
522
+ */
523
+ const result: ComponentSearchResult | undefined =
524
+ query === deferredQuery
525
+ ? visibleResults[activeIndex]
526
+ : searchComponents(getComponentSearchIndex(catalog), query)
527
+ .results[0];
528
+
529
+ if (result) {
530
+ pick(result.component);
531
+ }
532
+ }
533
+ };
534
+
535
+ type OnBrowseKeyDownFunction = (
536
+ event: React.KeyboardEvent<HTMLDivElement>,
537
+ ) => void;
538
+
539
+ /*
540
+ * Arrow keys move between the entries of a browse view, the first one up
541
+ * goes back to the search box, Escape goes back a view, and typing a
542
+ * letter on an entry starts a search with it.
543
+ */
544
+ const onBrowseKeyDown: OnBrowseKeyDownFunction = (
545
+ event: React.KeyboardEvent<HTMLDivElement>,
546
+ ): void => {
547
+ if (event.defaultPrevented) {
548
+ return;
549
+ }
550
+
551
+ const items: Array<HTMLElement> = Array.from(
552
+ event.currentTarget.querySelectorAll<HTMLElement>(
553
+ `[${PICKER_ITEM_ATTRIBUTE}]`,
554
+ ),
555
+ );
556
+ const position: number = items.indexOf(event.target as HTMLElement);
557
+
558
+ if (event.key === "Escape" && viewStack.length > 1) {
559
+ event.preventDefault();
560
+ event.stopPropagation();
561
+ goBack(false);
562
+ return;
563
+ }
564
+
565
+ if (position === -1) {
566
+ return;
567
+ }
568
+
569
+ if (event.key === "ArrowDown" || event.key === "ArrowRight") {
570
+ event.preventDefault();
571
+ items[Math.min(position + 1, items.length - 1)]?.focus();
572
+ return;
573
+ }
574
+
575
+ if (event.key === "ArrowUp" || event.key === "ArrowLeft") {
576
+ event.preventDefault();
577
+
578
+ if (position === 0) {
579
+ searchInputRef.current?.focus();
580
+ } else {
581
+ items[position - 1]?.focus();
582
+ }
583
+
584
+ return;
585
+ }
586
+
587
+ if (
588
+ event.key.length === 1 &&
589
+ event.key !== " " &&
590
+ event.key !== "/" &&
591
+ !event.metaKey &&
592
+ !event.ctrlKey &&
593
+ !event.altKey
594
+ ) {
595
+ event.preventDefault();
596
+ setQuery((current: string): string => {
597
+ return current + event.key;
598
+ });
599
+ searchInputRef.current?.focus();
600
+ }
601
+ };
602
+
603
+ const searchHasMore: boolean = outcome.results.length > visibleResults.length;
604
+
605
+ let statusText: string = "";
606
+
607
+ if (isSearching) {
608
+ if (outcome.results.length === 0) {
609
+ statusText = `No ${typePlural} match.`;
610
+ } else if (searchHasMore) {
611
+ statusText = `Best ${visibleResults.length} of ${outcome.results.length} matches.`;
612
+ } else {
613
+ statusText = `${outcome.results.length} ${
614
+ outcome.results.length === 1 ? "match" : "matches"
615
+ }.`;
616
+ }
617
+ }
618
+
619
+ const renderSearchResults: () => ReactElement = (): ReactElement => {
620
+ if (outcome.results.length === 0) {
621
+ return (
622
+ <div className="px-4 py-12 text-center">
623
+ <div className="mx-auto flex h-10 w-10 items-center justify-center rounded-full bg-gray-100">
624
+ <Icon icon={IconProp.Search} className="h-5 w-5 text-gray-400" />
625
+ </div>
626
+ <p className="mt-3 text-sm font-medium text-gray-900">
627
+ No {typePlural} match &ldquo;{deferredQuery.trim()}&rdquo;
628
+ </p>
629
+ <p className="mx-auto mt-1 max-w-md text-sm text-gray-500">
630
+ {props.componentsType === ComponentType.Trigger
631
+ ? "Check the spelling, or try fewer or different words. To start this workflow from another tool, use the Webhook trigger."
632
+ : "Check the spelling, or try fewer or different words. For anything that is not here, the API components and Run Custom JavaScript can work with any service."}
633
+ </p>
634
+ <button
635
+ type="button"
636
+ onClick={clearSearch}
637
+ className="mt-4 inline-flex items-center gap-1.5 rounded-lg border border-gray-300 bg-white px-3 py-1.5 text-sm font-medium text-gray-700 transition-colors duration-150 hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
638
+ >
639
+ <Icon icon={IconProp.Close} className="h-3.5 w-3.5" />
640
+ Clear search
641
+ </button>
642
+ </div>
643
+ );
644
+ }
645
+
646
+ return (
334
647
  <>
335
- <div className="flex flex-col h-full">
336
- {/* Search box */}
337
- <div className="mt-4 mb-5">
338
- <div className="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-indigo-50 to-slate-50 p-3 shadow-sm">
339
- <div className="mb-3 flex items-start justify-between gap-3">
340
- <div className="min-w-0">
341
- <label
342
- htmlFor="workflow-component-search"
343
- className="block text-xs font-semibold uppercase tracking-wide text-slate-500"
344
- >
345
- Search {componentTypeLabel}
346
- </label>
347
- <p className="mt-1 text-sm text-slate-600">
348
- {hasSearchTerm
349
- ? "Showing the closest matches first across title, description, and category."
350
- : `Find the right ${props.componentsType.toLowerCase()} by name, category, or the job you need it to do.`}
351
- </p>
352
- </div>
353
- <div className="inline-flex flex-shrink-0 items-center rounded-full bg-white/90 px-3 py-1 text-xs font-semibold text-slate-500 ring-1 ring-slate-200">
354
- {hasSearchTerm
355
- ? `${componentsToShow.length} match${
356
- componentsToShow.length === 1 ? "" : "es"
357
- }`
358
- : `${totalComponentCount} available`}
359
- </div>
360
- </div>
648
+ <ul
649
+ id={SEARCH_RESULTS_ID}
650
+ role="listbox"
651
+ aria-label={`Matching ${typePlural}`}
652
+ className="space-y-0.5"
653
+ >
654
+ {visibleResults.map(
655
+ (result: ComponentSearchResult, index: number): ReactElement => {
656
+ const componentMetadata: ComponentMetadata = result.component;
657
+ const isActive: boolean = index === activeIndex;
658
+ const resource: PickerResource | undefined =
659
+ componentMetadata.tableName
660
+ ? catalog.resourcesByKey.get(componentMetadata.tableName)
661
+ : undefined;
662
+ const optionId: string = getSearchOptionId(index);
663
+ const label: string = resource
664
+ ? resource.disambiguation || resource.name
665
+ : componentMetadata.category;
361
666
 
362
- <div className="relative flex items-center gap-3 rounded-2xl border border-slate-200 bg-white/90 px-3 py-3 shadow-sm transition-all duration-200 hover:border-slate-300 focus-within:border-indigo-500 focus-within:ring-4 focus-within:ring-indigo-100">
363
- <div className="flex h-11 w-11 flex-shrink-0 items-center justify-center rounded-2xl bg-gradient-to-br from-white via-indigo-50 to-sky-100 text-indigo-600 ring-1 ring-indigo-100 shadow-sm">
364
- <Icon icon={IconProp.Search} className="h-4 w-4" />
365
- </div>
366
- <div className="min-w-0 flex-1">
367
- <input
368
- id="workflow-component-search"
369
- ref={searchInputRef}
370
- type="text"
371
- value={search}
372
- placeholder={`Search ${componentTypeLabel} by name, description, or category`}
373
- autoComplete="off"
374
- className="block w-full border-0 bg-transparent p-0 text-base font-semibold text-slate-900 placeholder:text-slate-400 focus:outline-none focus:ring-0"
375
- onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
376
- setSearch(event.target.value);
377
- }}
378
- onKeyDown={(
379
- event: React.KeyboardEvent<HTMLInputElement>,
380
- ) => {
381
- if (event.key === "Escape" && hasSearchTerm) {
382
- setSearch("");
383
- searchInputRef.current?.focus();
384
- }
385
- }}
386
- />
387
- <div className="mt-1 flex flex-wrap items-center gap-2 text-xs text-slate-500">
388
- <span>
389
- {hasSearchTerm
390
- ? `Showing ${componentsToShow.length} of ${totalComponentCount} ${componentTypeLabel}.`
391
- : "Searches title, description, and category."}
392
- </span>
393
- {!hasSearchTerm && (
394
- <span className="max-sm:hidden items-center gap-1 rounded-full bg-slate-100 px-2 py-1 font-medium text-slate-500 sm:inline-flex">
395
- <kbd className="rounded bg-white px-1.5 py-0.5 text-[10px] font-semibold text-slate-500 ring-1 ring-slate-200">
396
- /
397
- </kbd>
398
- Quick focus
399
- </span>
400
- )}
401
- {hasSearchTerm && (
402
- <span className="max-sm:hidden items-center gap-1 rounded-full bg-indigo-50 px-2 py-1 font-medium text-indigo-600 sm:inline-flex">
403
- <kbd className="rounded bg-white px-1.5 py-0.5 text-[10px] font-semibold text-indigo-600 ring-1 ring-indigo-100">
404
- Esc
405
- </kbd>
406
- Clear search
407
- </span>
408
- )}
409
- </div>
410
- </div>
411
-
412
- {hasSearchTerm && (
413
- <div className="flex flex-shrink-0 items-center gap-2">
414
- <button
415
- type="button"
416
- className="inline-flex items-center gap-1 rounded-full bg-slate-900 px-3 py-1.5 text-xs font-medium text-white shadow-sm transition-colors duration-150 hover:bg-slate-700"
417
- onClick={() => {
418
- setSearch("");
419
- searchInputRef.current?.focus();
420
- }}
667
+ return (
668
+ <li
669
+ key={componentMetadata.id}
670
+ id={optionId}
671
+ role="option"
672
+ aria-selected={isActive}
673
+ /*
674
+ * Named by the plain title: the marks drawn over the
675
+ * matched words must never change what is read out.
676
+ */
677
+ aria-label={componentMetadata.title}
678
+ aria-describedby={`${optionId}-description`}
679
+ data-component-id={componentMetadata.id}
680
+ onMouseMove={() => {
681
+ if (!isActive) {
682
+ setActive({ query: deferredQuery, index: index });
683
+ }
684
+ }}
685
+ onClick={() => {
686
+ pick(componentMetadata);
687
+ }}
688
+ className={`flex scroll-mt-28 cursor-pointer items-center gap-3 rounded-lg px-2.5 py-2 transition-colors duration-100 ${
689
+ isActive ? "bg-indigo-50" : ""
690
+ }`}
691
+ >
692
+ <IconBox icon={componentMetadata.iconProp} size="small" />
693
+ <div className="min-w-0 flex-1">
694
+ <div className="truncate text-sm text-gray-900">
695
+ <HighlightedText
696
+ segments={getHighlightSegments(
697
+ componentMetadata.title,
698
+ outcome.tokens,
699
+ outcome.typoTokens,
700
+ )}
701
+ />
702
+ </div>
703
+ <div
704
+ id={`${optionId}-description`}
705
+ className="truncate text-xs text-gray-500"
421
706
  >
422
- <Icon icon={IconProp.Close} className="h-3 w-3" />
423
- Clear
424
- </button>
707
+ {componentMetadata.description}
708
+ </div>
425
709
  </div>
426
- )}
427
- </div>
428
-
429
- {suggestedCategories.length > 0 && (
430
- <div className="mt-3 flex flex-wrap items-center gap-2">
431
- <span className="text-xs font-medium text-slate-500">
432
- Quick filters:
710
+ <span className="max-sm:hidden max-w-[40%] flex-shrink-0 truncate rounded-md bg-gray-100 px-2 py-0.5 text-xs text-gray-600 sm:inline-block">
711
+ {label}
433
712
  </span>
434
- {suggestedCategories.map((category: ComponentCategory) => {
435
- const isActive: boolean =
436
- normalizedSearch === category.name.toLowerCase();
713
+ </li>
714
+ );
715
+ },
716
+ )}
717
+ </ul>
718
+ {searchHasMore && (
719
+ <button
720
+ type="button"
721
+ onClick={() => {
722
+ setShown({
723
+ query: deferredQuery,
724
+ count: shownCount + SEARCH_RESULTS_PAGE_SIZE,
725
+ });
726
+ }}
727
+ className="mt-3 w-full rounded-lg border border-gray-200 bg-white px-3 py-2 text-sm font-medium text-gray-700 transition-colors duration-150 hover:bg-gray-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
728
+ >
729
+ Show{" "}
730
+ {Math.min(
731
+ SEARCH_RESULTS_PAGE_SIZE,
732
+ outcome.results.length - visibleResults.length,
733
+ )}{" "}
734
+ more
735
+ </button>
736
+ )}
737
+ </>
738
+ );
739
+ };
437
740
 
438
- return (
439
- <button
440
- key={category.name}
441
- type="button"
442
- aria-pressed={isActive}
443
- onClick={() => {
444
- setSearch(category.name);
445
- searchInputRef.current?.focus();
446
- }}
447
- className={`inline-flex items-center gap-1 rounded-full border px-3 py-1.5 text-xs font-medium transition-colors duration-150 ${
448
- isActive
449
- ? "border-indigo-200 bg-indigo-50 text-indigo-700"
450
- : "border-slate-200 bg-white text-slate-600 hover:border-slate-300 hover:bg-slate-50"
451
- }`}
452
- >
453
- <Icon icon={category.icon} className="h-3 w-3" />
454
- {category.name}
455
- </button>
456
- );
457
- })}
458
- </div>
741
+ const renderHome: () => ReactElement = (): ReactElement => {
742
+ const otherBuiltIns: Array<ComponentMetadata> =
743
+ catalog.otherBuiltInGroups.flatMap(
744
+ (group: PickerBuiltInGroup): Array<ComponentMetadata> => {
745
+ return group.components;
746
+ },
747
+ );
748
+
749
+ if (catalog.components.length === 0) {
750
+ return (
751
+ <p className="px-1 py-12 text-center text-sm text-gray-500">
752
+ No {typePlural} to show.
753
+ </p>
754
+ );
755
+ }
756
+
757
+ return (
758
+ <div className="space-y-6">
759
+ {catalog.popular.length > 0 && (
760
+ <section aria-labelledby="workflow-picker-popular">
761
+ <SectionHeading id="workflow-picker-popular" title="Popular" />
762
+ <div className="grid grid-cols-1 gap-2 sm:grid-cols-2">
763
+ {catalog.popular.map(
764
+ (componentMetadata: ComponentMetadata): ReactElement => {
765
+ return (
766
+ <ComponentTile
767
+ key={componentMetadata.id}
768
+ componentMetadata={componentMetadata}
769
+ onSelect={pick}
770
+ />
771
+ );
772
+ },
459
773
  )}
460
774
  </div>
461
- </div>
775
+ </section>
776
+ )}
462
777
 
463
- <div className="overflow-y-auto overflow-x-hidden flex-1">
464
- {!componentsToShow ||
465
- (componentsToShow.length === 0 && (
466
- <div className="mt-20 flex w-full flex-col items-center justify-center gap-4 px-4">
467
- <div className="max-w-2xl">
468
- {/*
469
- * Says what actually happened. A search only fails now when
470
- * no component contains every word typed, and the fix is
471
- * usually to type fewer words — not to conclude that the
472
- * component does not exist and go and build it by hand.
473
- */}
474
- <ErrorMessage
475
- message={
476
- hasSearchTerm
477
- ? "No components match every word you typed. Try fewer words. If what you need really does not exist, the Custom Code and API components can build anything you like."
478
- : "No components to show."
479
- }
778
+ {otherBuiltIns.length > 0 && (
779
+ <section aria-labelledby="workflow-picker-more">
780
+ <SectionHeading
781
+ id="workflow-picker-more"
782
+ title={
783
+ catalog.popular.length > 0
784
+ ? `More ${typePlural}`
785
+ : `${typeLabel.charAt(0).toUpperCase()}${typeLabel.slice(1)}s`
786
+ }
787
+ />
788
+ <div className="grid grid-cols-1 gap-2 sm:grid-cols-2">
789
+ {otherBuiltIns.map(
790
+ (componentMetadata: ComponentMetadata): ReactElement => {
791
+ return (
792
+ <ComponentTile
793
+ key={componentMetadata.id}
794
+ componentMetadata={componentMetadata}
795
+ onSelect={pick}
480
796
  />
481
- </div>
482
- {hasSearchTerm && (
483
- <button
484
- type="button"
485
- className="inline-flex items-center gap-2 rounded-full border border-slate-200 bg-white px-4 py-2 text-sm font-medium text-slate-600 shadow-sm transition-colors duration-150 hover:bg-slate-50 hover:text-slate-800"
486
- onClick={() => {
487
- setSearch("");
488
- searchInputRef.current?.focus();
489
- }}
490
- >
491
- <Icon icon={IconProp.Close} className="h-3.5 w-3.5" />
492
- Reset search
493
- </button>
494
- )}
495
- </div>
496
- ))}
497
-
498
- {categories &&
499
- categories.length > 0 &&
500
- categories.map((category: ComponentCategory, i: number) => {
501
- const categoryComponents: Array<ComponentMetadata> =
502
- componentsByCategory[category.name] || [];
503
-
504
- if (categoryComponents.length === 0) {
505
- return <div key={i}></div>;
506
- }
507
-
508
- return (
509
- <div key={i} className="mb-6">
510
- {/* Category header */}
511
- <div className="flex items-center gap-2 mb-3 px-1">
512
- <div
513
- className="flex items-center justify-center rounded-md"
514
- style={{
515
- width: "28px",
516
- height: "28px",
517
- backgroundColor:
518
- "var(--ou-surface-tertiary, #f1f5f9)",
519
- }}
520
- >
521
- <Icon
522
- icon={category.icon}
523
- className="h-4 w-4 text-gray-500"
524
- />
525
- </div>
526
- <div>
527
- <h4 className="text-sm font-semibold text-gray-700 leading-tight">
528
- {category.name}
529
- </h4>
530
- <p className="text-xs text-gray-400 leading-tight">
531
- {category.description}
532
- </p>
533
- </div>
534
- </div>
797
+ );
798
+ },
799
+ )}
800
+ </div>
801
+ </section>
802
+ )}
535
803
 
536
- {/* Component cards grid */}
537
- <div className="grid grid-cols-1 gap-2">
538
- {categoryComponents.map(
539
- (componentMetadata: ComponentMetadata) => {
540
- const isSelected: boolean =
541
- selectedComponentMetadata !== undefined &&
542
- selectedComponentMetadata.id ===
543
- componentMetadata.id;
544
-
545
- return (
546
- <button
547
- key={componentMetadata.id}
548
- type="button"
549
- aria-label={componentMetadata.title}
550
- aria-describedby={`workflow-component-description-${componentMetadata.id}`}
551
- aria-pressed={isSelected}
552
- onClick={() => {
553
- setSelectedComponentId(componentMetadata.id);
554
- }}
555
- className="w-full cursor-pointer text-left transition-all duration-150 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
556
- style={{
557
- padding: "0.75rem",
558
- borderRadius: "10px",
559
- border: isSelected
560
- ? "2px solid #6366f1"
561
- : "1px solid var(--ou-border-default, #e2e8f0)",
562
- backgroundColor: isSelected
563
- ? "var(--ou-accent-soft, #eef2ff)"
564
- : "var(--ou-surface-primary, #ffffff)",
565
- display: "flex",
566
- alignItems: "flex-start",
567
- gap: "0.75rem",
568
- boxShadow: isSelected
569
- ? "0 0 0 3px rgba(99, 102, 241, 0.1)"
570
- : "var(--ou-card-shadow, 0 1px 2px 0 rgba(0, 0, 0, 0.03))",
571
- }}
572
- >
573
- {/* Icon */}
574
- <div
575
- style={{
576
- width: "36px",
577
- height: "36px",
578
- borderRadius: "8px",
579
- backgroundColor: isSelected
580
- ? "#6366f1"
581
- : "var(--ou-surface-tertiary, #f1f5f9)",
582
- display: "flex",
583
- alignItems: "center",
584
- justifyContent: "center",
585
- flexShrink: 0,
586
- transition: "all 0.15s ease",
587
- }}
588
- >
589
- <Icon
590
- icon={componentMetadata.iconProp}
591
- style={{
592
- color: isSelected
593
- ? "#ffffff"
594
- : "var(--ou-text-muted, #64748b)",
595
- width: "1rem",
596
- height: "1rem",
597
- }}
598
- />
599
- </div>
600
-
601
- {/* Text */}
602
- <div style={{ minWidth: 0, flex: 1 }}>
603
- <div className="flex items-start justify-between gap-2">
604
- <p
605
- style={{
606
- fontSize: "0.8125rem",
607
- fontWeight: 600,
608
- color: isSelected
609
- ? "var(--ou-accent-text, #4338ca)"
610
- : "var(--ou-text-primary, #1e293b)",
611
- margin: 0,
612
- lineHeight: "1.25rem",
613
- }}
614
- >
615
- {renderHighlightedText(
616
- componentMetadata.title,
617
- isSelected
618
- ? "rounded bg-white/80 px-0.5 text-current"
619
- : "rounded bg-amber-100 px-0.5 text-current",
620
- )}
621
- </p>
622
-
623
- {hasSearchTerm && (
624
- <span
625
- className={`mt-0.5 inline-flex flex-shrink-0 rounded-full px-2 py-0.5 text-[11px] font-medium ${
626
- isSelected
627
- ? "bg-white/80 text-indigo-700"
628
- : "bg-slate-100 text-slate-500"
629
- }`}
630
- >
631
- {renderHighlightedText(
632
- componentMetadata.category,
633
- isSelected
634
- ? "rounded bg-indigo-100 px-0.5 text-current"
635
- : "rounded bg-white px-0.5 text-current",
636
- )}
637
- </span>
638
- )}
639
- </div>
640
- <p
641
- id={`workflow-component-description-${componentMetadata.id}`}
642
- style={{
643
- fontSize: "0.75rem",
644
- color: isSelected
645
- ? "var(--ou-link, #6366f1)"
646
- : "var(--ou-text-subtle, #94a3b8)",
647
- margin: 0,
648
- marginTop: "2px",
649
- lineHeight: "1rem",
650
- display: "-webkit-box",
651
- WebkitLineClamp: 2,
652
- WebkitBoxOrient: "vertical",
653
- overflow: "hidden",
654
- }}
655
- >
656
- {renderHighlightedText(
657
- componentMetadata.description,
658
- isSelected
659
- ? "rounded bg-white/80 px-0.5 text-current"
660
- : "rounded bg-amber-100 px-0.5 text-current",
661
- )}
662
- </p>
663
- </div>
664
-
665
- {/* Selection indicator */}
666
- {isSelected && (
667
- <div
668
- style={{
669
- width: "20px",
670
- height: "20px",
671
- borderRadius: "50%",
672
- backgroundColor: "#6366f1",
673
- display: "flex",
674
- alignItems: "center",
675
- justifyContent: "center",
676
- flexShrink: 0,
677
- marginTop: "2px",
678
- }}
679
- >
680
- <Icon
681
- icon={IconProp.Check}
682
- style={{
683
- color: "#ffffff",
684
- width: "0.625rem",
685
- height: "0.625rem",
686
- }}
687
- />
688
- </div>
689
- )}
690
- </button>
691
- );
692
- },
693
- )}
694
- </div>
695
- </div>
804
+ {catalog.resources.length > 0 && (
805
+ <section aria-labelledby="workflow-picker-resources">
806
+ <SectionHeading
807
+ id="workflow-picker-resources"
808
+ title="OneUptime resources"
809
+ description={
810
+ props.componentsType === ComponentType.Trigger
811
+ ? "Start this workflow when an incident, alert, monitor or any other record in this project is created, updated or deleted."
812
+ : "Create, find, update or delete incidents, alerts, monitors and every other record in this project."
813
+ }
814
+ />
815
+ {catalog.commonResources.length > 0 && (
816
+ <div className="mb-2 grid grid-cols-1 gap-2 sm:grid-cols-2">
817
+ {catalog.commonResources.map(
818
+ (resource: PickerResource): ReactElement => {
819
+ return (
820
+ <ResourceTile
821
+ key={resource.key}
822
+ resource={resource}
823
+ componentsType={props.componentsType}
824
+ onOpen={openResource}
825
+ />
826
+ );
827
+ },
828
+ )}
829
+ </div>
830
+ )}
831
+ <button
832
+ type="button"
833
+ {...getPickerItemProps(ALL_RESOURCES_ITEM_KEY)}
834
+ aria-label={`Browse all resources, ${catalog.resources.length}`}
835
+ onClick={() => {
836
+ openView(
837
+ { kind: PickerViewKind.AllResources },
838
+ ALL_RESOURCES_ITEM_KEY,
696
839
  );
697
- })}
840
+ }}
841
+ className="flex w-full items-center gap-3 rounded-lg border border-gray-200 bg-white px-3 py-2.5 text-left text-sm font-medium text-gray-700 transition-colors duration-150 hover:border-indigo-300 hover:bg-indigo-50 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
842
+ >
843
+ <span className="min-w-0 flex-1">Browse all resources</span>
844
+ <span className="flex-shrink-0 rounded-md bg-gray-100 px-2 py-0.5 text-xs font-normal text-gray-600">
845
+ {catalog.resources.length}
846
+ </span>
847
+ <Icon
848
+ icon={IconProp.ChevronRight}
849
+ className="h-4 w-4 flex-shrink-0 text-gray-400"
850
+ />
851
+ </button>
852
+ </section>
853
+ )}
854
+ </div>
855
+ );
856
+ };
857
+
858
+ const renderResource: (resource: PickerResource) => ReactElement = (
859
+ resource: PickerResource,
860
+ ): ReactElement => {
861
+ return (
862
+ <div>
863
+ <BackButton
864
+ label="Back"
865
+ onBack={() => {
866
+ goBack(false);
867
+ }}
868
+ />
869
+ <div className="mt-3 flex items-start gap-3">
870
+ <IconBox icon={resource.icon} size="large" />
871
+ <div className="min-w-0">
872
+ <h3 className="text-base font-semibold text-gray-900">
873
+ {resource.name}
874
+ </h3>
875
+ {resource.disambiguation && (
876
+ <p className="text-xs text-gray-500">{resource.disambiguation}</p>
877
+ )}
878
+ {resource.description && (
879
+ <p className="mt-0.5 text-sm text-gray-500">
880
+ {resource.description}
881
+ </p>
882
+ )}
698
883
  </div>
699
884
  </div>
700
- </>
885
+ <div
886
+ role="group"
887
+ aria-label={`${resource.name} ${typePlural}`}
888
+ className="mt-4 grid grid-cols-1 gap-2"
889
+ >
890
+ {resource.components.map(
891
+ (componentMetadata: ComponentMetadata): ReactElement => {
892
+ return (
893
+ <ComponentTile
894
+ key={componentMetadata.id}
895
+ componentMetadata={componentMetadata}
896
+ onSelect={pick}
897
+ />
898
+ );
899
+ },
900
+ )}
901
+ </div>
902
+ </div>
903
+ );
904
+ };
905
+
906
+ const renderAllResources: () => ReactElement = (): ReactElement => {
907
+ return (
908
+ <div>
909
+ <BackButton
910
+ label="Back"
911
+ onBack={() => {
912
+ goBack(false);
913
+ }}
914
+ />
915
+ <h3 className="mt-3 text-base font-semibold text-gray-900">
916
+ All resources
917
+ </h3>
918
+ <p className="mt-0.5 text-sm text-gray-500">
919
+ {catalog.resources.length} resources, A to Z. Search above to find one
920
+ by name.
921
+ </p>
922
+ <div
923
+ role="group"
924
+ aria-label="All resources"
925
+ className="mt-3 divide-y divide-gray-100 overflow-hidden rounded-lg border border-gray-200"
926
+ >
927
+ {catalog.resources.map((resource: PickerResource): ReactElement => {
928
+ return (
929
+ <ResourceRow
930
+ key={resource.key}
931
+ resource={resource}
932
+ componentsType={props.componentsType}
933
+ onOpen={openResource}
934
+ />
935
+ );
936
+ })}
937
+ </div>
938
+ </div>
939
+ );
940
+ };
941
+
942
+ let body: ReactElement;
943
+
944
+ if (isSearching) {
945
+ body = renderSearchResults();
946
+ } else if (view === PickerViewKind.Resource && openedResource) {
947
+ body = renderResource(openedResource);
948
+ } else if (view === PickerViewKind.AllResources) {
949
+ body = renderAllResources();
950
+ } else {
951
+ body = renderHome();
952
+ }
953
+
954
+ return (
955
+ <SideOver
956
+ title={`Add ${typeLabel.charAt(0).toUpperCase()}${typeLabel.slice(1)}`}
957
+ description={`Click a ${typeLabel} to add it to your workflow.`}
958
+ onClose={props.onCloseModal}
959
+ leftFooterElement={
960
+ <div className="max-md:hidden items-center gap-4 text-xs text-gray-500 md:flex">
961
+ <span className="inline-flex items-center gap-1.5">
962
+ <KeyboardShortcut
963
+ keys={[KeyboardKey.ArrowUp]}
964
+ size={KeyboardShortcutSize.ExtraSmall}
965
+ />
966
+ <KeyboardShortcut
967
+ keys={[KeyboardKey.ArrowDown]}
968
+ size={KeyboardShortcutSize.ExtraSmall}
969
+ />
970
+ to move
971
+ </span>
972
+ <span className="inline-flex items-center gap-1.5">
973
+ <KeyboardShortcut
974
+ keys={[KeyboardKey.Enter]}
975
+ size={KeyboardShortcutSize.ExtraSmall}
976
+ />
977
+ to add
978
+ </span>
979
+ <span className="inline-flex items-center gap-1.5">
980
+ <KeyboardShortcut
981
+ keys={["/"]}
982
+ size={KeyboardShortcutSize.ExtraSmall}
983
+ />
984
+ to search
985
+ </span>
986
+ </div>
987
+ }
988
+ >
989
+ <div ref={rootRef} data-testid="workflow-component-picker">
990
+ <div className="sticky top-0 z-10 -mx-5 border-b border-gray-100 bg-white px-5 pb-3 pt-1 sm:pt-5">
991
+ <div className="relative">
992
+ <div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
993
+ <Icon icon={IconProp.Search} className="h-4 w-4 text-gray-400" />
994
+ </div>
995
+ <input
996
+ ref={searchInputRef}
997
+ id={SEARCH_INPUT_ID}
998
+ type="text"
999
+ role="combobox"
1000
+ aria-label={`Search ${typePlural}`}
1001
+ aria-autocomplete="list"
1002
+ aria-expanded={isSearching && visibleResults.length > 0}
1003
+ aria-controls={isSearching ? SEARCH_RESULTS_ID : undefined}
1004
+ aria-activedescendant={
1005
+ isSearching && visibleResults.length > 0
1006
+ ? getSearchOptionId(activeIndex)
1007
+ : undefined
1008
+ }
1009
+ autoComplete="off"
1010
+ autoCorrect="off"
1011
+ autoCapitalize="off"
1012
+ spellCheck={false}
1013
+ value={query}
1014
+ placeholder={
1015
+ props.componentsType === ComponentType.Trigger
1016
+ ? "Search triggers, e.g. incident created"
1017
+ : "Search components, e.g. create incident"
1018
+ }
1019
+ onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
1020
+ setQuery(event.target.value);
1021
+ }}
1022
+ onKeyDown={onSearchKeyDown}
1023
+ className="block w-full rounded-lg border border-gray-300 bg-white py-2.5 pl-9 pr-10 text-sm text-gray-900 placeholder-gray-400 shadow-sm focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500"
1024
+ />
1025
+ {query.length > 0 && (
1026
+ <div className="absolute inset-y-0 right-0 flex items-center pr-1.5">
1027
+ <button
1028
+ type="button"
1029
+ aria-label="Clear search"
1030
+ onClick={clearSearch}
1031
+ className="flex h-7 w-7 items-center justify-center rounded-md text-gray-400 transition-colors duration-150 hover:bg-gray-100 hover:text-gray-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-indigo-500"
1032
+ >
1033
+ <Icon icon={IconProp.Close} className="h-4 w-4" />
1034
+ </button>
1035
+ </div>
1036
+ )}
1037
+ </div>
1038
+ <p
1039
+ role="status"
1040
+ aria-live="polite"
1041
+ className={`text-xs text-gray-500 ${statusText ? "mt-2" : ""}`}
1042
+ >
1043
+ {statusText}
1044
+ </p>
1045
+ </div>
1046
+
1047
+ <div
1048
+ data-testid="workflow-component-picker-body"
1049
+ aria-busy={isCatchingUp}
1050
+ className={`pt-4 transition-opacity duration-150 ${
1051
+ isCatchingUp ? "opacity-60" : ""
1052
+ }`}
1053
+ onKeyDown={onBrowseKeyDown}
1054
+ >
1055
+ {body}
1056
+ </div>
1057
+ </div>
701
1058
  </SideOver>
702
1059
  );
703
1060
  };