@oneuptime/common 14.0.12 → 14.0.13

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 (2060) hide show
  1. package/Models/DatabaseModels/AlertGroupingRule.ts +4 -3
  2. package/Models/DatabaseModels/AlertMeasurement.ts +16 -9
  3. package/Models/DatabaseModels/AlertReminderRule.ts +4 -3
  4. package/Models/DatabaseModels/AlertSeverity.ts +5 -2
  5. package/Models/DatabaseModels/AlertState.ts +5 -2
  6. package/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.ts +17 -0
  7. package/Models/DatabaseModels/{IncidentForm.ts → Form.ts} +97 -205
  8. package/Models/DatabaseModels/{IncidentFormSubmission.ts → FormSubmission.ts} +158 -76
  9. package/Models/DatabaseModels/Incident.ts +1 -1
  10. package/Models/DatabaseModels/IncidentCustomField.ts +7 -3
  11. package/Models/DatabaseModels/IncidentGroupingRule.ts +4 -3
  12. package/Models/DatabaseModels/IncidentMeasurement.ts +15 -8
  13. package/Models/DatabaseModels/IncidentReminderRule.ts +4 -3
  14. package/Models/DatabaseModels/IncidentSeverity.ts +5 -2
  15. package/Models/DatabaseModels/IncidentSlaRule.ts +4 -3
  16. package/Models/DatabaseModels/IncidentState.ts +5 -2
  17. package/Models/DatabaseModels/IncidentTemplate.ts +1 -1
  18. package/Models/DatabaseModels/IncomingCallPolicyEscalationRule.ts +5 -1
  19. package/Models/DatabaseModels/Index.ts +4 -4
  20. package/Models/DatabaseModels/LogDropFilter.ts +4 -3
  21. package/Models/DatabaseModels/LogPipeline.ts +4 -3
  22. package/Models/DatabaseModels/LogPipelineProcessor.ts +4 -3
  23. package/Models/DatabaseModels/LogScrubRule.ts +3 -2
  24. package/Models/DatabaseModels/MetricPipelineRule.ts +3 -2
  25. package/Models/DatabaseModels/MetricRecordingRule.ts +7 -2
  26. package/Models/DatabaseModels/MonitorStatus.ts +4 -1
  27. package/Models/DatabaseModels/NetworkDeviceRole.ts +3 -1
  28. package/Models/DatabaseModels/NetworkSiteAssignmentRule.ts +9 -3
  29. package/Models/DatabaseModels/Project.ts +18 -11
  30. package/Models/DatabaseModels/RunbookRule.ts +343 -0
  31. package/Models/DatabaseModels/ScheduledMaintenance.ts +3 -1
  32. package/Models/DatabaseModels/ScheduledMaintenanceMeasurement.ts +15 -8
  33. package/Models/DatabaseModels/ScheduledMaintenanceReminderRule.ts +4 -3
  34. package/Models/DatabaseModels/ScheduledMaintenanceState.ts +5 -2
  35. package/Models/DatabaseModels/ScheduledMaintenanceTemplate.ts +1 -2
  36. package/Models/DatabaseModels/StatusPageFooterLink.ts +5 -1
  37. package/Models/DatabaseModels/StatusPageHeaderLink.ts +5 -1
  38. package/Models/DatabaseModels/StatusPageHistoryChartBarColorRule.ts +5 -1
  39. package/Models/DatabaseModels/TraceDropFilter.ts +4 -3
  40. package/Models/DatabaseModels/TracePipeline.ts +4 -3
  41. package/Models/DatabaseModels/TracePipelineProcessor.ts +4 -3
  42. package/Models/DatabaseModels/TraceRecordingRule.ts +7 -2
  43. package/Models/DatabaseModels/TraceScrubRule.ts +3 -2
  44. package/Models/DatabaseModels/UserNotificationEmailRollupItem.ts +49 -1
  45. package/Server/API/BaseAnalyticsAPI.ts +17 -0
  46. package/Server/API/{IncidentFormAPI.ts → FormAPI.ts} +77 -83
  47. package/Server/Infrastructure/Postgres/SchemaMigrations/1797300000000-TurnOnLinkedAlertSwitchesByDefault.ts +40 -0
  48. package/Server/Infrastructure/Postgres/SchemaMigrations/1797400000000-MigrateIncidentFormsToForms.ts +348 -0
  49. package/Server/Infrastructure/Postgres/SchemaMigrations/1797500000000-AddRunbookRuleMatchCriteria.ts +178 -0
  50. package/Server/Infrastructure/Postgres/SchemaMigrations/1797600000000-AddSeverityAndStateColorsToNotificationEmailRollup.ts +26 -0
  51. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  52. package/Server/Middleware/{IncidentFormRateLimit.ts → FormRateLimit.ts} +186 -194
  53. package/Server/Services/AlertEpisodeService.ts +5 -3
  54. package/Server/Services/AlertMeasurementService.ts +120 -23
  55. package/Server/Services/AlertReminderRuleService.ts +0 -31
  56. package/Server/Services/AlertService.ts +5 -3
  57. package/Server/Services/AlertSeverityService.ts +15 -109
  58. package/Server/Services/AlertStateService.ts +28 -119
  59. package/Server/Services/AnalyticsDatabaseService.ts +102 -9
  60. package/Server/Services/DatabaseService.ts +302 -0
  61. package/Server/Services/FormService.ts +1161 -0
  62. package/Server/Services/FormSubmissionService.ts +22 -0
  63. package/Server/Services/IncidentAlertService.ts +57 -24
  64. package/Server/Services/IncidentCustomFieldService.ts +4 -113
  65. package/Server/Services/IncidentEpisodeService.ts +5 -3
  66. package/Server/Services/IncidentMeasurementService.ts +123 -23
  67. package/Server/Services/IncidentReminderRuleService.ts +0 -31
  68. package/Server/Services/IncidentService.ts +5 -3
  69. package/Server/Services/IncidentSeverityService.ts +15 -114
  70. package/Server/Services/IncidentSlaRuleService.ts +0 -32
  71. package/Server/Services/IncidentStateService.ts +28 -119
  72. package/Server/Services/IncidentStateTimelineService.ts +2 -2
  73. package/Server/Services/IncomingCallPolicyEscalationRuleService.ts +22 -190
  74. package/Server/Services/Index.ts +4 -4
  75. package/Server/Services/LogService.ts +13 -0
  76. package/Server/Services/MetricRecordingRuleService.ts +106 -0
  77. package/Server/Services/MonitorStatusService.ts +27 -131
  78. package/Server/Services/OnCallDutyPolicyEscalationRuleService.ts +41 -0
  79. package/Server/Services/OnCallDutyPolicyService.ts +343 -0
  80. package/Server/Services/ProjectService.ts +62 -73
  81. package/Server/Services/RunbookRuleEngineService.ts +413 -41
  82. package/Server/Services/RunbookRuleService.ts +97 -0
  83. package/Server/Services/ScheduledMaintenanceMeasurementService.ts +126 -23
  84. package/Server/Services/ScheduledMaintenanceReminderRuleService.ts +0 -31
  85. package/Server/Services/ScheduledMaintenanceService.ts +5 -3
  86. package/Server/Services/ScheduledMaintenanceStateService.ts +28 -129
  87. package/Server/Services/SpanService.ts +21 -2
  88. package/Server/Services/StatusPageFooterLinkService.ts +9 -198
  89. package/Server/Services/StatusPageHeaderLinkService.ts +8 -197
  90. package/Server/Services/StatusPageHistoryChartBarColorRuleService.ts +9 -198
  91. package/Server/Services/StatusPageSubscriberNotificationTemplateService.ts +17 -5
  92. package/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.ts +7 -6
  93. package/Server/Services/TraceRecordingRuleService.ts +15 -2
  94. package/Server/Services/UserNotificationRuleService.ts +41 -0
  95. package/Server/Types/AnalyticsDatabase/CountBy.ts +14 -0
  96. package/Server/Utils/Database/ListOrderMaintainer.ts +465 -0
  97. package/Server/Utils/Database/StateOrderGuard.ts +390 -0
  98. package/Server/Utils/EmailRollup/EmailRollupFlushRunner.ts +2 -0
  99. package/Server/Utils/EmailRollup/EmailRollupRenderer.ts +86 -3
  100. package/Server/Utils/EmailRollup/EmailRollupWriter.ts +41 -0
  101. package/Server/Utils/Form/FormRecordOptions.ts +147 -0
  102. package/Server/Utils/Form/FormSubmissionNote.ts +215 -0
  103. package/Server/Utils/Form/FormTargetHandler.ts +410 -0
  104. package/Server/Utils/Form/FormTargets.ts +28 -0
  105. package/Server/Utils/Form/IncidentFormTarget.ts +580 -0
  106. package/Server/Utils/Form/ScheduledMaintenanceFormTarget.ts +401 -0
  107. package/Server/Utils/Measurement/MeasurementDefinitionChange.ts +81 -0
  108. package/Server/Utils/Measurement/MeasurementDefinitionValidator.ts +9 -4
  109. package/Server/Utils/Measurement/MeasurementKeyAssigner.ts +50 -0
  110. package/Server/Utils/Measurement/MeasurementMetricWriter.ts +22 -2
  111. package/Server/Utils/Measurement/MeasurementStateReference.ts +95 -0
  112. package/Server/Utils/Slo/SloOwnerReferenceValidator.ts +1 -1
  113. package/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.ts +8 -7
  114. package/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.ts +24 -16
  115. package/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.ts +9 -1
  116. package/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.ts +4 -0
  117. package/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.ts +7 -5
  118. package/Tests/App/Accounts/FormPage.test.tsx +761 -0
  119. package/Tests/App/Accounts/FormServerMessages.test.ts +115 -0
  120. package/Tests/App/Accounts/FormUtils.test.ts +557 -0
  121. package/Tests/App/AdminDashboard/AdminMenusFolded.test.tsx +299 -0
  122. package/Tests/App/AdminDashboard/AdminProductsMenuUnfolded.test.tsx +133 -0
  123. package/Tests/App/ArchivedEntriesInAdvancedSection.test.tsx +662 -0
  124. package/Tests/App/Dashboard/AIInsightsKubernetesClusterPage.test.tsx +5 -4
  125. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +58 -0
  126. package/Tests/App/Dashboard/AlertEpisodeViewFields.test.tsx +25 -3
  127. package/Tests/App/Dashboard/AlertsSideMenu.test.tsx +108 -4
  128. package/Tests/App/Dashboard/ApiKeyCreateForm.test.ts +652 -0
  129. package/Tests/App/Dashboard/ApiKeyViewPermissions.test.tsx +756 -0
  130. package/Tests/App/Dashboard/ApiKeysCreateAccess.test.tsx +797 -0
  131. package/Tests/App/Dashboard/ArchivedResourceNavigation.test.tsx +50 -2
  132. package/Tests/App/Dashboard/BulkChangeStateModalColors.test.tsx +136 -0
  133. package/Tests/App/Dashboard/ClusterAccessNotice.test.tsx +7 -2
  134. package/Tests/App/Dashboard/ConnectedWorkspaces.test.tsx +771 -0
  135. package/Tests/App/Dashboard/CoreListEmptyStates.test.tsx +77 -20
  136. package/Tests/App/Dashboard/CreateOAuthWorkflowVariableFormSteps.test.tsx +6 -4
  137. package/Tests/App/Dashboard/CreateReviewStepRoleSummary.test.tsx +2 -2
  138. package/Tests/App/Dashboard/CreateReviewStepSelectionSummary.test.tsx +4 -4
  139. package/Tests/App/Dashboard/CreateWorkflowModal.test.tsx +549 -123
  140. package/Tests/App/Dashboard/CriteriaFilterDefaults.test.ts +64 -1
  141. package/Tests/App/Dashboard/CriteriaFilterMonitorTypeChange.test.ts +127 -0
  142. package/Tests/App/Dashboard/CriteriaName.test.ts +831 -0
  143. package/Tests/App/Dashboard/CustomFieldDefinitionTableRender.test.tsx +485 -0
  144. package/Tests/App/Dashboard/CustomFieldSimpleCreate.test.tsx +1070 -0
  145. package/Tests/App/Dashboard/CustomFieldSimpleCreateRender.test.tsx +747 -0
  146. package/Tests/App/Dashboard/CustomFieldTablesTwoColumns.test.tsx +523 -0
  147. package/Tests/App/Dashboard/CustomFieldsSettingsIncidentOptions.test.tsx +92 -59
  148. package/Tests/App/Dashboard/DashboardComponentsAToLHelpersTranslation.test.ts +256 -0
  149. package/Tests/App/Dashboard/DashboardComponentsAToLTranslation.test.tsx +482 -0
  150. package/Tests/App/Dashboard/DashboardComponentsMRTranslation.test.tsx +805 -0
  151. package/Tests/App/Dashboard/DashboardFrenchLocale.test.tsx +335 -0
  152. package/Tests/App/Dashboard/DashboardGermanLocale.test.tsx +250 -0
  153. package/Tests/App/Dashboard/DashboardJapaneseLocale.test.tsx +435 -0
  154. package/Tests/App/Dashboard/DashboardPagesTranslation.test.tsx +449 -0
  155. package/Tests/App/Dashboard/DashboardPagesUtilsTranslation.test.ts +487 -0
  156. package/Tests/App/Dashboard/DashboardPhoneProductsMenu.test.tsx +262 -0
  157. package/Tests/App/Dashboard/DashboardRuntimeLocales.test.tsx +635 -0
  158. package/Tests/App/Dashboard/DashboardSpanishLocale.test.tsx +405 -0
  159. package/Tests/App/Dashboard/DeclareFormsAdvancedRender.test.tsx +550 -0
  160. package/Tests/App/Dashboard/DefaultInviteTeam.test.ts +600 -0
  161. package/Tests/App/Dashboard/DeveloperDocsGuides.test.ts +569 -127
  162. package/Tests/App/Dashboard/DeveloperDocsPage.test.tsx +337 -51
  163. package/Tests/App/Dashboard/DiscoveryScanStatusMessage.test.tsx +10 -1
  164. package/Tests/App/Dashboard/EntityFilterDropdownColors.test.tsx +269 -0
  165. package/Tests/App/Dashboard/EntityFilterDropdownUnlistedSelection.test.tsx +23 -12
  166. package/Tests/App/Dashboard/EscalationRuleForm.test.ts +426 -0
  167. package/Tests/App/Dashboard/EscalationRuleFormGuard.test.ts +239 -0
  168. package/Tests/App/Dashboard/EscalationRuleOneStep.test.tsx +997 -0
  169. package/Tests/App/Dashboard/EscalationRuleRowActions.test.tsx +38 -10
  170. package/Tests/App/Dashboard/EventNotes.test.tsx +2 -2
  171. package/Tests/App/Dashboard/EventNotesUtil.test.ts +2 -2
  172. package/Tests/App/Dashboard/EventStatusPanel.test.tsx +87 -0
  173. package/Tests/App/Dashboard/FeedFilterSortIntegration.test.tsx +349 -145
  174. package/Tests/App/Dashboard/FeedOptionsLocales.test.ts +50 -18
  175. package/Tests/App/Dashboard/FeedOrdering.test.ts +116 -24
  176. package/Tests/App/Dashboard/FlameGraphLosesItsSpans.test.tsx +102 -0
  177. package/Tests/App/Dashboard/FormBuilderData.test.ts +280 -0
  178. package/Tests/App/Dashboard/FormBuilderParts.test.tsx +794 -0
  179. package/Tests/App/Dashboard/FormBuilderState.test.ts +630 -0
  180. package/Tests/App/Dashboard/FormBuilderUi.test.tsx +850 -0
  181. package/Tests/App/Dashboard/FormMappingCard.test.tsx +492 -0
  182. package/Tests/App/Dashboard/FormOnSubmit.test.ts +693 -0
  183. package/Tests/App/Dashboard/{IncidentFormPlan.test.ts → FormPlan.test.ts} +15 -15
  184. package/Tests/App/Dashboard/{IncidentFormShareLinkCard.test.tsx → FormShareLinkCard.test.tsx} +53 -73
  185. package/Tests/App/Dashboard/FormStatusCard.test.tsx +354 -0
  186. package/Tests/App/Dashboard/FormTargetCard.test.tsx +315 -0
  187. package/Tests/App/Dashboard/FormsMovedPagesAndSubmissions.test.tsx +270 -0
  188. package/Tests/App/Dashboard/FormsPages.test.tsx +574 -0
  189. package/Tests/App/Dashboard/GeneratedKeyForms.test.tsx +500 -0
  190. package/Tests/App/Dashboard/GroupingRuleComponents.test.tsx +792 -0
  191. package/Tests/App/Dashboard/GroupingRuleFormFlow.test.tsx +1109 -0
  192. package/Tests/App/Dashboard/GroupingRulePages.test.tsx +672 -0
  193. package/Tests/App/Dashboard/GroupingRuleTranslationRender.test.tsx +244 -0
  194. package/Tests/App/Dashboard/IncidentCreateAcknowledgeAlerts.test.tsx +7 -4
  195. package/Tests/App/Dashboard/IncidentCreateFromAlerts.test.tsx +33 -15
  196. package/Tests/App/Dashboard/IncidentCreateStatusPageScope.test.tsx +640 -23
  197. package/Tests/App/Dashboard/IncidentCreateTemplateCustomFieldSettings.test.tsx +2 -0
  198. package/Tests/App/Dashboard/IncidentCustomFieldCreateSettingsForm.test.ts +37 -345
  199. package/Tests/App/Dashboard/IncidentCustomFieldSettingsCard.test.tsx +6 -541
  200. package/Tests/App/Dashboard/IncidentCustomFieldTemplateVariables.test.tsx +188 -28
  201. package/Tests/App/Dashboard/IncidentEpisodeViewFields.test.tsx +25 -3
  202. package/Tests/App/Dashboard/IncidentLinkedAlertsSettingsPage.test.tsx +583 -0
  203. package/Tests/App/Dashboard/IncidentNoteTemplatePlaceholders.test.tsx +350 -52
  204. package/Tests/App/Dashboard/IncidentNoteTemplateVariablesLoader.test.ts +7 -2
  205. package/Tests/App/Dashboard/IncidentRoleFormField.test.tsx +405 -0
  206. package/Tests/App/Dashboard/IncidentRolesSettingsPage.test.tsx +659 -0
  207. package/Tests/App/Dashboard/IncidentRuleConditions.test.tsx +405 -0
  208. package/Tests/App/Dashboard/IncidentSettingsStatusPageScope.test.tsx +236 -21
  209. package/Tests/App/Dashboard/IncidentStatesPageTable.test.tsx +440 -0
  210. package/Tests/App/Dashboard/IncidentTemplateCustomFieldSettings.test.tsx +24 -4
  211. package/Tests/App/Dashboard/IncidentTemplateStatusPageScopeCard.test.tsx +135 -3
  212. package/Tests/App/Dashboard/IncidentsSideMenu.test.tsx +201 -14
  213. package/Tests/App/Dashboard/InventoryTypeAndStatusFacets.test.tsx +12 -5
  214. package/Tests/App/Dashboard/InvestigationConversationData.test.ts +36 -12
  215. package/Tests/App/Dashboard/InvestigationDrawer.test.tsx +56 -0
  216. package/Tests/App/Dashboard/InviteUserDefaultTeam.test.tsx +586 -0
  217. package/Tests/App/Dashboard/KubernetesClusterOverviewZoom.test.tsx +6 -3
  218. package/Tests/App/Dashboard/LabelsFormField.test.tsx +554 -0
  219. package/Tests/App/Dashboard/LogsResultTotal.test.tsx +827 -0
  220. package/Tests/App/Dashboard/MarkdownTemplateDialogsWide.test.tsx +306 -0
  221. package/Tests/App/Dashboard/MeasurementForms.test.tsx +927 -0
  222. package/Tests/App/Dashboard/MeasurementListAndChart.test.tsx +290 -0
  223. package/Tests/App/Dashboard/MeasurementPagesI18n.test.ts +148 -0
  224. package/Tests/App/Dashboard/MeasurementSetup.test.ts +618 -0
  225. package/Tests/App/Dashboard/MenuSpecificFoldedSections.test.tsx +494 -0
  226. package/Tests/App/Dashboard/MessageQueueOverviewPresentation.test.ts +4 -4
  227. package/Tests/App/Dashboard/MessageQueueRulePages.test.tsx +40 -17
  228. package/Tests/App/Dashboard/MessageQueueSideMenus.test.tsx +35 -10
  229. package/Tests/App/Dashboard/MessageQueueViewPages.test.tsx +3 -1
  230. package/Tests/App/Dashboard/MetricDescriptionsCatalog.test.ts +11 -2
  231. package/Tests/App/Dashboard/MonitorCriteriaActionToggles.test.tsx +0 -1
  232. package/Tests/App/Dashboard/MonitorCriteriaAdvancedOptions.test.tsx +0 -2
  233. package/Tests/App/Dashboard/MonitorCriteriaNameAndDescription.test.tsx +534 -0
  234. package/Tests/App/Dashboard/MonitorCriteriaOwners.test.tsx +281 -0
  235. package/Tests/App/Dashboard/MonitorCriteriaTemplateVariables.test.tsx +191 -0
  236. package/Tests/App/Dashboard/MonitorRecommendationSeverityColors.test.ts +73 -0
  237. package/Tests/App/Dashboard/MonitorStatusChangesCard.test.tsx +70 -6
  238. package/Tests/App/Dashboard/MonitorStepsCriteriaAlignmentWiring.test.tsx +168 -4
  239. package/Tests/App/Dashboard/MonitorStepsDefaultStatusAdvanced.test.tsx +448 -0
  240. package/Tests/App/Dashboard/NavigationSearchKeywords.test.tsx +54 -0
  241. package/Tests/App/Dashboard/NetworkMetricTooltips.test.ts +9 -4
  242. package/Tests/App/Dashboard/NetworkSideMenu.test.tsx +80 -7
  243. package/Tests/App/Dashboard/NotificationMethodTabsWorkspaces.test.tsx +280 -0
  244. package/Tests/App/Dashboard/NumberPrefixPageRedirects.test.tsx +365 -0
  245. package/Tests/App/Dashboard/NumberPrefixSettingsPages.test.tsx +1048 -0
  246. package/Tests/App/Dashboard/OnCallCalendarFeedSideMenus.test.tsx +11 -2
  247. package/Tests/App/Dashboard/OnCallPolicyCreateFormGuard.test.ts +328 -0
  248. package/Tests/App/Dashboard/OnCallPolicyFirstResponders.test.tsx +639 -0
  249. package/Tests/App/Dashboard/OnCallPolicySummaryNobodyPaged.test.tsx +293 -0
  250. package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +36 -18
  251. package/Tests/App/Dashboard/OnCallReadinessSurfaces.test.tsx +7 -1
  252. package/Tests/App/Dashboard/OnCallRulesDeleteGuard.test.tsx +1 -1
  253. package/Tests/App/Dashboard/OwnersCard.test.tsx +422 -0
  254. package/Tests/App/Dashboard/ProductOrientation.test.tsx +147 -9
  255. package/Tests/App/Dashboard/ProductSettingsSectionCollapsed.test.tsx +28 -14
  256. package/Tests/App/Dashboard/ResourceAiInsightsPage.test.tsx +3 -2
  257. package/Tests/App/Dashboard/ResourceFeed.test.tsx +162 -130
  258. package/Tests/App/Dashboard/ResourceFeedPageWiring.test.ts +1 -1
  259. package/Tests/App/Dashboard/ResourceFeedPagesFilterSort.test.tsx +115 -81
  260. package/Tests/App/Dashboard/RoleCardSelectOptions.test.ts +204 -0
  261. package/Tests/App/Dashboard/RunbookRuleConditions.test.tsx +773 -0
  262. package/Tests/App/Dashboard/RunnerKubernetesAgentForm.test.tsx +12 -1
  263. package/Tests/App/Dashboard/RunnerNavigation.test.tsx +32 -11
  264. package/Tests/App/Dashboard/ScheduledMaintenanceCreateForm.test.tsx +798 -0
  265. package/Tests/App/Dashboard/ScheduledMaintenanceFormsStructure.test.ts +517 -0
  266. package/Tests/App/Dashboard/ScheduledMaintenanceOverviewPage.test.tsx +183 -0
  267. package/Tests/App/Dashboard/ScheduledMaintenanceSideMenu.test.tsx +103 -4
  268. package/Tests/App/Dashboard/ScheduledMaintenanceTemplateForm.test.tsx +602 -0
  269. package/Tests/App/Dashboard/SearchEngineIndexingCard.test.tsx +436 -0
  270. package/Tests/App/Dashboard/SecurityEventsViewer.test.tsx +104 -0
  271. package/Tests/App/Dashboard/SetupGuideStepVariants.test.tsx +135 -0
  272. package/Tests/App/Dashboard/SideMenuHarness.tsx +20 -0
  273. package/Tests/App/Dashboard/SloFeed.test.tsx +33 -48
  274. package/Tests/App/Dashboard/SloListSideMenu.test.tsx +36 -1
  275. package/Tests/App/Dashboard/SloMonitorRuleCriteria.test.tsx +66 -7
  276. package/Tests/App/Dashboard/SloViewSideMenu.test.tsx +15 -4
  277. package/Tests/App/Dashboard/StateSettingsPages.test.tsx +581 -0
  278. package/Tests/App/Dashboard/StateTimelinePagesLiveState.test.tsx +373 -0
  279. package/Tests/App/Dashboard/StatusPageAdvancedOptionsRedirect.test.tsx +321 -0
  280. package/Tests/App/Dashboard/StatusPageAdvancedSettingsPage.test.tsx +271 -0
  281. package/Tests/App/Dashboard/StatusPageBrandingMenu.test.tsx +176 -0
  282. package/Tests/App/Dashboard/StatusPageBrandingPage.test.tsx +694 -0
  283. package/Tests/App/Dashboard/StatusPageBrandingRedirects.test.tsx +400 -0
  284. package/Tests/App/Dashboard/StatusPageDisplaySettingsCard.test.tsx +1439 -0
  285. package/Tests/App/Dashboard/StatusPageSubscriberSettingsPages.test.tsx +888 -0
  286. package/Tests/App/Dashboard/SubscriberAudienceSummary.test.tsx +382 -17
  287. package/Tests/App/Dashboard/SubscriberChannelOffPanel.test.tsx +393 -0
  288. package/Tests/App/Dashboard/SubscriberChannelsCard.test.tsx +832 -0
  289. package/Tests/App/Dashboard/SubscriberNotificationWarnings.test.tsx +215 -0
  290. package/Tests/App/Dashboard/SubscriberTemplateVariables.test.tsx +314 -0
  291. package/Tests/App/Dashboard/TemplateFormsNoInternalDataWarning.test.tsx +698 -0
  292. package/Tests/App/Dashboard/TracesResultTotal.test.tsx +543 -0
  293. package/Tests/App/Dashboard/TracesStatusChartAndFacet.test.tsx +2 -1
  294. package/Tests/App/Dashboard/TriggerRuleCriteriaNames.test.tsx +142 -0
  295. package/Tests/App/Dashboard/UserSettingsEmailPreferences.test.tsx +11 -3
  296. package/Tests/App/Dashboard/UserSettingsNotificationSettings.test.tsx +172 -1
  297. package/Tests/App/Dashboard/VMwareMetricTooltips.test.ts +12 -6
  298. package/Tests/App/Dashboard/WorkflowRunsLogsMenus.test.tsx +44 -7
  299. package/Tests/App/Dashboard/WorkflowRunsPages.test.tsx +5 -1
  300. package/Tests/App/Dashboard/WorkflowTemplatePicker.test.tsx +780 -755
  301. package/Tests/App/Dashboard/WorkflowVariableCreateFormSteps.test.tsx +37 -0
  302. package/Tests/App/Dashboard/WorkflowVariableListsGuard.test.ts +308 -0
  303. package/Tests/App/Dashboard/WorkflowVariablesTable.test.tsx +89 -55
  304. package/Tests/App/Dashboard/WorkflowVariablesTableRender.test.tsx +621 -0
  305. package/Tests/App/Dashboard/WorkspaceConnectionPages.test.tsx +628 -0
  306. package/Tests/App/Dashboard/WorkspaceConnectionsGuards.test.ts +398 -0
  307. package/Tests/App/Dashboard/WorkspaceConnectionsWiring.test.ts +213 -0
  308. package/Tests/App/Dashboard/WorkspaceDisconnectRefresh.test.tsx +318 -0
  309. package/Tests/App/Dashboard/WorkspaceMenusConnected.test.tsx +581 -0
  310. package/Tests/App/Dashboard/WorkspaceSideMenuSection.test.ts +433 -0
  311. package/Tests/App/PublicDashboard/AutoRefreshPickerTick.test.tsx +209 -0
  312. package/Tests/App/RarelyUsedMenuSectionsCollapsed.test.tsx +771 -0
  313. package/Tests/App/StatusPage/BulkAddStatusPageMonitorsModal.test.tsx +74 -5
  314. package/Tests/App/StatusPage/StatusPageSubscribeFromFirstStep.test.tsx +382 -0
  315. package/Tests/Helpers/FormStepsScan.ts +770 -55
  316. package/Tests/Helpers/HookOrderScan.ts +307 -0
  317. package/Tests/Helpers/ToggleUsageScan.ts +4 -2
  318. package/Tests/Models/DatabaseModels/{IncidentFormModel.test.ts → FormModel.test.ts} +433 -495
  319. package/Tests/Models/DatabaseModels/IncidentAlertModel.test.ts +76 -5
  320. package/Tests/Models/DatabaseModels/RunbookRuleCriteriaColumns.test.ts +117 -0
  321. package/Tests/Models/GeneratedKeyColumns.test.ts +145 -0
  322. package/Tests/Models/IncidentCustomFieldApiSchemaContract.test.ts +10 -1
  323. package/Tests/Models/ListOrderColumnModels.test.ts +332 -0
  324. package/Tests/Models/RelationColumnModelTypes.test.ts +135 -0
  325. package/Tests/ResponsiveSpacing.test.ts +627 -0
  326. package/Tests/ResponsiveSpacing.ts +508 -0
  327. package/Tests/ResponsiveVisibility.test.ts +65 -0
  328. package/Tests/ResponsiveVisibility.ts +34 -0
  329. package/Tests/Server/API/BaseAnalyticsAPICountExact.test.ts +185 -0
  330. package/Tests/Server/API/{IncidentFormAPI.test.ts → FormAPI.test.ts} +92 -93
  331. package/Tests/Server/API/{IncidentFormPublicRoutes.test.ts → FormPublicRoutes.test.ts} +182 -126
  332. package/Tests/Server/API/IncidentSubscriberAudienceAPI.test.ts +70 -3
  333. package/Tests/Server/Infrastructure/Postgres/AddIncidentFormsMigration.test.ts +48 -52
  334. package/Tests/Server/Infrastructure/Postgres/AddRunbookRuleMatchCriteriaMigration.test.ts +316 -0
  335. package/Tests/Server/Infrastructure/Postgres/MigrateIncidentFormsToFormsMigration.test.ts +688 -0
  336. package/Tests/Server/Infrastructure/Postgres/TurnOnLinkedAlertSwitchesByDefaultMigration.test.ts +229 -0
  337. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupColorMigration.test.ts +116 -0
  338. package/Tests/Server/Infrastructure/Postgres/UserNotificationEmailRollupTableMigration.test.ts +109 -22
  339. package/Tests/Server/Middleware/{IncidentFormRateLimit.test.ts → FormRateLimit.test.ts} +214 -227
  340. package/Tests/Server/Services/AlertMeasurementService.test.ts +62 -33
  341. package/Tests/Server/Services/AnalyticsDatabaseServiceExactCount.test.ts +397 -0
  342. package/Tests/Server/Services/DatabaseServiceListOrder.test.ts +713 -0
  343. package/Tests/Server/Services/{IncidentFormOwnersCreatedNotification.test.ts → FormOwnersCreatedNotification.test.ts} +44 -30
  344. package/Tests/Server/Services/FormPublicForm.test.ts +990 -0
  345. package/Tests/Server/Services/FormPublicSubmission.test.ts +1468 -0
  346. package/Tests/Server/Services/{IncidentFormRegistration.test.ts → FormRegistration.test.ts} +37 -45
  347. package/Tests/Server/Services/FormService.test.ts +709 -0
  348. package/Tests/Server/Services/{IncidentFormSubmissionTemplateBranch.test.ts → FormSubmissionTemplateBranch.test.ts} +100 -157
  349. package/Tests/Server/Services/GroupingRuleSimpleSetupEngine.test.ts +627 -0
  350. package/Tests/Server/Services/IncidentAlertPostgres.test.ts +26 -3
  351. package/Tests/Server/Services/IncidentAlertStateCascade.test.ts +169 -8
  352. package/Tests/Server/Services/IncidentFormPostgres.test.ts +250 -494
  353. package/Tests/Server/Services/IncidentMeasurementService.test.ts +37 -17
  354. package/Tests/Server/Services/IncidentSeverityDeletePausesComplianceRules.test.ts +19 -33
  355. package/Tests/Server/Services/IncomingCallPolicyEscalationRuleTarget.test.ts +14 -36
  356. package/Tests/Server/Services/MeasurementDashboardEdits.test.ts +390 -0
  357. package/Tests/Server/Services/MeasurementKeyGeneration.test.ts +484 -0
  358. package/Tests/Server/Services/MonitorStatusServiceValidation.test.ts +302 -105
  359. package/Tests/Server/Services/OnCallDutyPolicyEscalationRuleDefaultName.test.ts +339 -0
  360. package/Tests/Server/Services/OnCallDutyPolicyFirstResponders.test.ts +815 -0
  361. package/Tests/Server/Services/OnCallDutyPolicyFirstRespondersFreePlan.test.ts +270 -0
  362. package/Tests/Server/Services/ProjectServiceDefaultIncidentRoles.test.ts +392 -0
  363. package/Tests/Server/Services/ProjectServiceLinkedAlertDefaults.test.ts +188 -0
  364. package/Tests/Server/Services/ProjectServiceNumberPrefix.test.ts +327 -0
  365. package/Tests/Server/Services/RecordingRuleOutputMetricNameGeneration.test.ts +367 -0
  366. package/Tests/Server/Services/RunbookRuleEngineService.test.ts +1543 -0
  367. package/Tests/Server/Services/RunbookRuleService.test.ts +478 -0
  368. package/Tests/Server/Services/ScheduledMaintenanceMeasurementService.test.ts +73 -38
  369. package/Tests/Server/Services/SeverityCreationRuleBackfill.test.ts +52 -20
  370. package/Tests/Server/Services/StateListServicesOrder.test.ts +441 -0
  371. package/Tests/Server/Services/StatusPageSubscriberNotificationTemplateIncidentRecordAccess.test.ts +191 -27
  372. package/Tests/Server/Services/TeamComplianceSettingPostgres.test.ts +11 -3
  373. package/Tests/Server/Services/TelemetryExactCount.test.ts +410 -0
  374. package/Tests/Server/Types/Database/FeedEventTypeFilterQuery.test.ts +5 -4
  375. package/Tests/Server/Types/Database/Permissions/FormSubmissionRelationSelect.test.ts +201 -0
  376. package/Tests/Server/Utils/Database/ListOrderMaintainer.test.ts +157 -0
  377. package/Tests/Server/Utils/Database/StateOrderGuard.test.ts +720 -0
  378. package/Tests/Server/Utils/EmailRollup/EmailRollupMetadataIntegration.test.ts +92 -0
  379. package/Tests/Server/Utils/EmailRollup/EmailRollupRenderer.test.ts +373 -0
  380. package/Tests/Server/Utils/EmailRollup/EmailRollupTestHarness.ts +7 -0
  381. package/Tests/Server/Utils/EmailRollup/EmailRollupWriter.test.ts +252 -0
  382. package/Tests/Server/Utils/Form/FormSubmissionNote.test.ts +402 -0
  383. package/Tests/Server/Utils/Measurement/MeasurementDefinitionChange.test.ts +130 -0
  384. package/Tests/Server/Utils/Measurement/MeasurementMetricWriter.test.ts +86 -0
  385. package/Tests/Server/Utils/Measurement/MeasurementStateReference.test.ts +129 -0
  386. package/Tests/Server/Utils/Monitor/DefaultMonitorCriteriaOutcomes.test.ts +577 -0
  387. package/Tests/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.test.ts +223 -46
  388. package/Tests/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.test.ts +58 -45
  389. package/Tests/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.test.ts +76 -1
  390. package/Tests/Types/CustomField/CustomFieldCreateSettings.test.ts +5 -173
  391. package/Tests/Types/CustomField/CustomFieldVariableKey.test.ts +160 -17
  392. package/Tests/Types/Form/FormField.test.ts +1552 -0
  393. package/Tests/Types/{Incident/IncidentFormIpAllowlist.test.ts → Form/FormIpAllowlist.test.ts} +21 -23
  394. package/Tests/Types/Form/FormPublic.test.ts +1295 -0
  395. package/Tests/Types/Form/FormSubmissionAnswer.test.ts +206 -0
  396. package/Tests/Types/Form/FormTargetCatalog.test.ts +389 -0
  397. package/Tests/Types/Form/FormTargetSettings.test.ts +459 -0
  398. package/Tests/Types/Form/LegacyIncidentFormConversion.test.ts +341 -0
  399. package/Tests/Types/Measurement/MeasurementKey.test.ts +195 -0
  400. package/Tests/Types/Measurement/MeasurementUnit.test.ts +139 -0
  401. package/Tests/Types/Metrics/RecordingRuleOutputMetricName.test.ts +93 -0
  402. package/Tests/Types/Monitor/MonitorCriteria.test.ts +150 -0
  403. package/Tests/Types/Monitor/MonitorCriteriaActionValidation.test.ts +10 -4
  404. package/Tests/Types/Monitor/MonitorCriteriaInstance.test.ts +436 -7
  405. package/Tests/Types/OnCallDutyPolicy/EscalationRuleDefaults.test.ts +230 -0
  406. package/Tests/Types/OnCallDutyPolicy/FirstResponders.test.ts +218 -0
  407. package/Tests/Types/Rules/RuleCriteriaFieldRegistry.test.ts +82 -2
  408. package/Tests/Types/Rum/SessionReplayCustomEvents.test.ts +75 -1
  409. package/Tests/Types/Runbook/RunbookRuleCriteria.test.ts +343 -0
  410. package/Tests/Types/ScheduledMaintenance/MaintenanceWindow.test.ts +313 -0
  411. package/Tests/Types/StatusPage/SubscriberNotificationTemplateCompiler.test.ts +9 -5
  412. package/Tests/Types/StatusPage/SubscriberNotificationTemplatePreview.test.ts +42 -1
  413. package/Tests/Types/StatusPage/SubscriberNotificationTemplateVariables.test.ts +135 -23
  414. package/Tests/Types/Template/TemplateVariable.test.ts +385 -0
  415. package/Tests/Types/Workflow/ComponentDocumentation.test.ts +2 -2
  416. package/Tests/Types/Workspace/NotificationRules/NotificationRuleConditionColors.test.ts +216 -0
  417. package/Tests/UI/Components/ActionButton/RowActions.test.tsx +214 -14
  418. package/Tests/UI/Components/ActionButton/RowActionsAccessibility.test.tsx +9 -0
  419. package/Tests/UI/Components/ActionButton/RowActionsTrigger.test.tsx +3 -0
  420. package/Tests/UI/Components/ActionButton/SplitActionButtons.test.ts +2 -0
  421. package/Tests/UI/Components/AdvancedPageSection.test.tsx +211 -0
  422. package/Tests/UI/Components/AppliedFilters.test.tsx +187 -0
  423. package/Tests/UI/Components/BasicFormModalSteps.test.tsx +220 -4
  424. package/Tests/UI/Components/BulkOwnerActions.test.tsx +366 -174
  425. package/Tests/UI/Components/BulkUpdateForm.test.tsx +2 -0
  426. package/Tests/UI/Components/BulkUpdateFormConfirmDetails.test.tsx +4 -0
  427. package/Tests/UI/Components/CardModelDetailEditModalTitle.test.tsx +195 -0
  428. package/Tests/UI/Components/CardSelect.test.tsx +45 -0
  429. package/Tests/UI/Components/CollapsibleSection.test.tsx +85 -0
  430. package/Tests/UI/Components/CustomFields/MapFromCustomFieldInput.test.tsx +192 -1
  431. package/Tests/UI/Components/Detail/BooleanValue.test.tsx +97 -0
  432. package/Tests/UI/Components/Detail/DetailIdLine.test.tsx +464 -0
  433. package/Tests/UI/Components/Detail/DetailIdLineDarkMode.test.ts +230 -0
  434. package/Tests/UI/Components/Detail/DetailIdLineInLocale.test.tsx +212 -0
  435. package/Tests/UI/Components/Detail/DetailRecordId.test.ts +142 -0
  436. package/Tests/UI/Components/Detail/DetailRecordIdLine.test.tsx +647 -0
  437. package/Tests/UI/Components/Detail/PlaceholderText.test.tsx +249 -0
  438. package/Tests/UI/Components/EditionLabelLicenseStatus.test.tsx +14 -0
  439. package/Tests/UI/Components/FacetSidebarControls.test.tsx +3 -2
  440. package/Tests/UI/Components/FeedActionsMenu.test.tsx +192 -0
  441. package/Tests/UI/Components/FeedCard.test.tsx +467 -0
  442. package/Tests/UI/Components/FeedEventTypeChecklist.test.tsx +779 -0
  443. package/Tests/UI/Components/FeedFilterModal.test.tsx +232 -0
  444. package/Tests/UI/Components/FeedFilterSummary.test.tsx +335 -0
  445. package/Tests/UI/Components/FeedMoreMenu.test.tsx +488 -0
  446. package/Tests/UI/Components/FeedOptions.test.ts +79 -195
  447. package/Tests/UI/Components/Filters/FilterRowsChangeFilter.test.tsx +300 -0
  448. package/Tests/UI/Components/Forms/AdvancedStepsGuard.test.ts +231 -0
  449. package/Tests/UI/Components/Forms/BasicFormCollapsibleSections.test.tsx +332 -0
  450. package/Tests/UI/Components/Forms/BasicFormFinishFromAnyStep.test.tsx +729 -0
  451. package/Tests/UI/Components/Forms/BasicFormPeoplePicker.test.tsx +345 -0
  452. package/Tests/UI/Components/Forms/CreateFormDefaultsGuard.test.ts +818 -0
  453. package/Tests/UI/Components/Forms/DeclareAndCreateFormsGuard.test.ts +589 -0
  454. package/Tests/UI/Components/Forms/FinishFromAnyStep.test.ts +571 -0
  455. package/Tests/UI/Components/Forms/FinishFromAnyStepGuard.test.ts +566 -0
  456. package/Tests/UI/Components/Forms/FormFieldMarkdown.test.tsx +11 -5
  457. package/Tests/UI/Components/Forms/FormFieldPasswordManagers.test.tsx +301 -0
  458. package/Tests/UI/Components/Forms/FormFieldTemplateVariables.test.tsx +349 -0
  459. package/Tests/UI/Components/Forms/FormFieldToggleRow.test.tsx +76 -0
  460. package/Tests/UI/Components/Forms/FormModalWidth.test.tsx +424 -0
  461. package/Tests/UI/Components/Forms/FormSummary.test.tsx +428 -1
  462. package/Tests/UI/Components/Forms/GeneratedKeyField.test.tsx +527 -0
  463. package/Tests/UI/Components/Forms/GeneratedKeyFieldDarkMode.test.ts +157 -0
  464. package/Tests/UI/Components/Forms/GeneratedKeyFieldI18n.test.ts +182 -0
  465. package/Tests/UI/Components/Forms/GeneratedKeyGuard.test.ts +386 -0
  466. package/Tests/UI/Components/Forms/LabelsFormFieldGuard.test.ts +1237 -0
  467. package/Tests/UI/Components/Forms/LongFormStepsGuard.test.ts +307 -4
  468. package/Tests/UI/Components/Forms/MarkdownFormsAreWide.test.ts +458 -0
  469. package/Tests/UI/Components/Forms/ModelFormCreateDefaults.test.tsx +584 -0
  470. package/Tests/UI/Components/Forms/ModelFormDropdownOptionsRefused.test.tsx +3 -2
  471. package/Tests/UI/Components/Forms/ModelFormModalFormRef.test.tsx +188 -0
  472. package/Tests/UI/Components/Forms/ModelFormOnBeforeUpdate.test.tsx +332 -0
  473. package/Tests/UI/Components/Forms/ModelFormPeoplePicker.test.tsx +452 -0
  474. package/Tests/UI/Components/Forms/ModelFormRuleCriteria.test.tsx +205 -2
  475. package/Tests/UI/Components/Forms/ModelFormStateDropdownColors.test.tsx +558 -0
  476. package/Tests/UI/Components/Forms/OverloadedFormStepsGuard.test.ts +88 -32
  477. package/Tests/UI/Components/Forms/SteppedFormFooterTiming.test.tsx +193 -0
  478. package/Tests/UI/Components/Forms/Utils/AdvancedFormSection.test.ts +401 -0
  479. package/Tests/UI/Components/Forms/Utils/CreateFormDefaults.test.ts +246 -0
  480. package/Tests/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.test.ts +10 -1
  481. package/Tests/UI/Components/Icon.test.tsx +51 -3
  482. package/Tests/UI/Components/InputPasswordManagers.test.tsx +189 -0
  483. package/Tests/UI/Components/List.test.tsx +136 -3
  484. package/Tests/UI/Components/ListDragAndDrop.test.tsx +203 -0
  485. package/Tests/UI/Components/LogsViewerResultTotal.test.tsx +532 -0
  486. package/Tests/UI/Components/MarkdownEditor.test.tsx +3 -3
  487. package/Tests/UI/Components/MarkdownEditorToolbar.test.tsx +693 -0
  488. package/Tests/UI/Components/MarkdownEditorToolbarDarkMode.test.ts +287 -0
  489. package/Tests/UI/Components/MarkdownToolbarLayout.test.ts +366 -0
  490. package/Tests/UI/Components/MarkdownViewerCopy.test.tsx +40 -1
  491. package/Tests/UI/Components/MasterPageExtensionEvents.test.tsx +236 -0
  492. package/Tests/UI/Components/MenuItemIcons.tsx +152 -0
  493. package/Tests/UI/Components/ModelListEmptyState.test.tsx +107 -14
  494. package/Tests/UI/Components/ModelTable/BaseModelTableBulkDelete.test.tsx +3 -0
  495. package/Tests/UI/Components/ModelTable/BaseModelTableBulkSelectAll.test.tsx +2 -0
  496. package/Tests/UI/Components/ModelTable/BaseModelTableColumnCustomization.test.tsx +2 -0
  497. package/Tests/UI/Components/ModelTable/BaseModelTableCreateButtonTitle.test.tsx +78 -6
  498. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteAndEmptyStates.test.tsx +5 -4
  499. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteLock.test.tsx +425 -0
  500. package/Tests/UI/Components/ModelTable/BaseModelTableDeleteNames.test.tsx +2 -0
  501. package/Tests/UI/Components/ModelTable/BaseModelTableDragReorder.test.tsx +661 -0
  502. package/Tests/UI/Components/ModelTable/BaseModelTableEmptyStateAction.test.tsx +432 -92
  503. package/Tests/UI/Components/ModelTable/BaseModelTableFilterModalRows.test.tsx +286 -0
  504. package/Tests/UI/Components/ModelTable/BaseModelTableMenuIcons.test.tsx +682 -0
  505. package/Tests/UI/Components/ModelTable/BaseModelTablePermissionGating.test.tsx +2 -0
  506. package/Tests/UI/Components/ModelTable/BaseModelTableRowActions.test.tsx +4 -0
  507. package/Tests/UI/Components/ModelTable/ColumnCustomizationModal.test.tsx +2 -1
  508. package/Tests/UI/Components/ModelTable/FeedMoreMenuMatchesTable.test.tsx +321 -0
  509. package/Tests/UI/Components/ModelTable/ModelTableEmptyState.test.ts +741 -0
  510. package/Tests/UI/Components/ModelTable/ModelTableWrapContent.test.tsx +2 -0
  511. package/Tests/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.test.ts +70 -0
  512. package/Tests/UI/Components/MoreMenuCheckedItems.test.tsx +307 -0
  513. package/Tests/UI/Components/MoreMenuItemColor.test.tsx +187 -0
  514. package/Tests/UI/Components/MoreMenuPortal.test.tsx +3 -0
  515. package/Tests/UI/Components/NavBar.test.tsx +108 -1
  516. package/Tests/UI/Components/NavBarCategoryToggleDarkMode.test.ts +176 -0
  517. package/Tests/UI/Components/NavBarMenuCatalog.test.tsx +486 -0
  518. package/Tests/UI/Components/NavBarMenuFolding.test.tsx +757 -0
  519. package/Tests/UI/Components/NavBarMenuSearch.test.tsx +290 -213
  520. package/Tests/UI/Components/ObjectID/ObjectIDView.test.tsx +191 -0
  521. package/Tests/UI/Components/Pagination.test.tsx +1038 -1
  522. package/Tests/UI/Components/PaginationIntegration.test.tsx +120 -3
  523. package/Tests/UI/Components/PaginationSummary.test.ts +300 -0
  524. package/Tests/UI/Components/PaginationTranslation.test.tsx +310 -0
  525. package/Tests/UI/Components/PeoplePicker/OwnersFieldGuard.test.ts +420 -0
  526. package/Tests/UI/Components/PeoplePicker/OwnersFormField.test.ts +167 -0
  527. package/Tests/UI/Components/PeoplePicker/PeopleListAndAvatar.test.tsx +306 -0
  528. package/Tests/UI/Components/PeoplePicker/PeoplePicker.test.tsx +702 -0
  529. package/Tests/UI/Components/PeoplePicker/PeoplePickerKinds.test.ts +453 -0
  530. package/Tests/UI/Components/PeoplePicker/PeoplePickerOnCallScheduleKind.test.ts +371 -0
  531. package/Tests/UI/Components/PeoplePicker/PeoplePickerTypes.test.ts +251 -0
  532. package/Tests/UI/Components/Pill.test.tsx +128 -0
  533. package/Tests/UI/Components/PublicFormFields.test.ts +321 -0
  534. package/Tests/UI/Components/ResetObjectID.test.tsx +6 -6
  535. package/Tests/UI/Components/RowActionsLockedForRow.test.tsx +316 -0
  536. package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilder.test.tsx +900 -270
  537. package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilderDarkMode.test.ts +220 -0
  538. package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilderI18n.test.ts +259 -0
  539. package/Tests/UI/Components/RuleCriteria/RuleCriteriaBuilderTranslation.test.tsx +182 -0
  540. package/Tests/UI/Components/RuleCriteria/RuleCriteriaFields.test.ts +906 -0
  541. package/Tests/UI/Components/RuleCriteria/RuleCriteriaModelTable.test.tsx +181 -7
  542. package/Tests/UI/Components/RuleCriteria/RuleCriteriaNamesGuard.test.ts +391 -0
  543. package/Tests/UI/Components/RuleRun/RuleDetailFields.test.tsx +113 -31
  544. package/Tests/UI/Components/RuleRun/RuleEnabledField.test.ts +100 -0
  545. package/Tests/UI/Components/RuleRun/RuleTable.test.tsx +29 -0
  546. package/Tests/UI/Components/RuleRun/RuleTableCreateForm.test.tsx +308 -0
  547. package/Tests/UI/Components/SharedComponentsInLocale.test.tsx +286 -0
  548. package/Tests/UI/Components/SharedComponentsOwnWordsInLocale.test.tsx +487 -0
  549. package/Tests/UI/Components/SideMenuSection.test.tsx +75 -3
  550. package/Tests/UI/Components/SideMenuSectionState.test.tsx +99 -5
  551. package/Tests/UI/Components/SideOverSpacing.test.tsx +219 -0
  552. package/Tests/UI/Components/SrOnlyForeignRule.test.tsx +5 -23
  553. package/Tests/UI/Components/StateTimeline/CurrentlyActiveIndicator.test.tsx +227 -0
  554. package/Tests/UI/Components/StateTimeline/StateTimelineColumns.test.tsx +535 -0
  555. package/Tests/UI/Components/StateTimeline/StateTimelineDuration.test.tsx +236 -0
  556. package/Tests/UI/Components/StateTimeline/StateTimelineEndsAt.test.tsx +133 -0
  557. package/Tests/UI/Components/SteppedEditFormSave.test.tsx +100 -5
  558. package/Tests/UI/Components/Table/EmptyTableMessage.test.ts +422 -0
  559. package/Tests/UI/Components/Table/TableDragAndDrop.test.tsx +575 -0
  560. package/Tests/UI/Components/Table/TableEmptyState.test.tsx +300 -62
  561. package/Tests/UI/Components/Table/TableEmptyStateBuilders.test.ts +239 -0
  562. package/Tests/UI/Components/Table/TableEmptyStateComponent.test.tsx +492 -0
  563. package/Tests/UI/Components/Table/TableEmptyStateDarkMode.test.ts +239 -0
  564. package/Tests/UI/Components/TableBulkCsvExport.test.tsx +2 -0
  565. package/Tests/UI/Components/TableColumnList.test.tsx +108 -0
  566. package/Tests/UI/Components/TableLoadingStates.test.tsx +2 -0
  567. package/Tests/UI/Components/TableRowActions.test.tsx +6 -42
  568. package/Tests/UI/Components/TableRowSelectability.test.tsx +2 -0
  569. package/Tests/UI/Components/TelemetryViewer/TelemetryViewerResultTotal.test.tsx +371 -0
  570. package/Tests/UI/Components/TemplateVariables/InsertTemplateVariableButton.test.tsx +353 -0
  571. package/Tests/UI/Components/TemplateVariables/MarkdownConvertersTemplateVariables.test.ts +121 -0
  572. package/Tests/UI/Components/TemplateVariables/MarkdownEditorTemplateVariables.test.tsx +634 -0
  573. package/Tests/UI/Components/TemplateVariables/TemplateVariableMenu.test.tsx +371 -0
  574. package/Tests/UI/Components/TemplateVariables/TemplateVariableTextControl.test.tsx +438 -0
  575. package/Tests/UI/Components/TemplateVariables/TemplateVariablesList.test.tsx +352 -0
  576. package/Tests/UI/Components/TemplateVariables/TextControlUtil.test.tsx +206 -0
  577. package/Tests/UI/Components/Toggle.test.tsx +185 -30
  578. package/Tests/UI/Components/ToggleMatchesProduct.test.tsx +251 -0
  579. package/Tests/UI/Components/ToggleUsageGuard.test.ts +1 -1
  580. package/Tests/UI/Components/Workflow/ComponentPicker/ComponentPickerBottomSpacing.test.tsx +293 -0
  581. package/Tests/UI/Components/Workflow/RunModalSpacing.test.tsx +171 -0
  582. package/Tests/UI/Components/Workflow/WorkflowBuilderInLocale.test.tsx +719 -0
  583. package/Tests/UI/Components/Workflow/WorkflowSentencesInLocale.test.ts +444 -0
  584. package/Tests/UI/Components/useFeedOptions.test.tsx +1 -1
  585. package/Tests/UI/DeleteConfirmationNamesGuard.test.ts +64 -3
  586. package/Tests/UI/EsbuildConfig.test.ts +39 -0
  587. package/Tests/UI/EsbuildLocales.test.ts +1430 -0
  588. package/Tests/UI/ForeignHiddenRuleGuard.test.ts +5 -5
  589. package/Tests/UI/HookOrderGuard.test.ts +375 -0
  590. package/Tests/UI/Monitor/MonitorStepRetrySettings.test.tsx +0 -1
  591. package/Tests/UI/Monitor/MonitorSummaryResponseGoesMissing.test.tsx +147 -0
  592. package/Tests/UI/Rum/ChunkLoader.test.ts +441 -0
  593. package/Tests/UI/Rum/InactivityMap.test.ts +582 -1
  594. package/Tests/UI/Rum/ReplayEngine.test.ts +433 -0
  595. package/Tests/UI/Rum/ReplayPlaybackIntent.test.ts +27 -0
  596. package/Tests/UI/Rum/ReplayRail.test.tsx +106 -0
  597. package/Tests/UI/Rum/ReplayRailDetail.test.tsx +85 -0
  598. package/Tests/UI/Rum/ReplaySignals.test.ts +115 -0
  599. package/Tests/UI/Rum/ReplayStageOverlays.test.tsx +151 -0
  600. package/Tests/UI/Rum/ReplayTimeline.test.tsx +129 -0
  601. package/Tests/UI/Rum/ReplayUi.test.tsx +150 -1
  602. package/Tests/UI/Rum/SessionReplayUsersTable.test.tsx +7 -4
  603. package/Tests/UI/Styles/PaginationDarkTheme.test.tsx +274 -0
  604. package/Tests/UI/Styles/PillDarkTheme.test.tsx +22 -0
  605. package/Tests/UI/Styles/ToggleTheme.test.ts +425 -191
  606. package/Tests/UI/Styles/TopLayerBackdrop.test.ts +734 -0
  607. package/Tests/UI/Styles/TopLayerBackdropGuard.ts +789 -0
  608. package/Tests/UI/Utils/AnalyticsModelAPICountExact.test.ts +139 -0
  609. package/Tests/UI/Utils/Breadcrumb/fixtures/RealBreadcrumbTrails.ts +1 -37
  610. package/Tests/UI/Utils/Breadcrumb/fixtures/RealRoutePatterns.ts +3 -9
  611. package/Tests/UI/Utils/DropdownOptionColors.test.ts +398 -0
  612. package/Tests/UI/Utils/ForeignDomMutationGuard.test.tsx +711 -0
  613. package/Tests/UI/Utils/GlobalTranslation.test.ts +222 -0
  614. package/Tests/UI/Utils/GrantablePermission.test.ts +610 -0
  615. package/Tests/UI/Utils/Telemetry/ResultTotal.test.ts +234 -0
  616. package/Tests/UI/Utils/Telemetry/UseResultTotal.test.tsx +616 -0
  617. package/Tests/UI/Utils/Translator.test.ts +502 -0
  618. package/Tests/UI/Utils/UseClockTick.test.tsx +137 -2
  619. package/Tests/UI/Utils/UseLiveDuration.test.tsx +625 -0
  620. package/Tests/Utils/ColorContrast.test.ts +108 -0
  621. package/Tests/Utils/DeveloperDocs/AiAssistantExamples.test.ts +14 -0
  622. package/Tests/Utils/DeveloperDocs/ApiExamples.test.ts +10 -117
  623. package/Tests/Utils/DeveloperDocs/DeveloperDocsLiveFixture.ts +114 -0
  624. package/Tests/Utils/DeveloperDocs/ExampleBuilder.test.ts +851 -0
  625. package/Tests/Utils/DeveloperDocs/ExampleValues.test.ts +101 -0
  626. package/Tests/Utils/DeveloperDocs/Hcl.test.ts +204 -0
  627. package/Tests/Utils/DeveloperDocs/LiveData.test.ts +273 -0
  628. package/Tests/Utils/DeveloperDocs/PageLookups.test.ts +297 -0
  629. package/Tests/Utils/DeveloperDocs/ResourceProfiles.test.ts +582 -0
  630. package/Tests/Utils/DeveloperDocs/TerraformConfig.test.ts +216 -22
  631. package/Tests/Utils/DeveloperDocs/TerraformSchema.test.ts +94 -0
  632. package/Tests/Utils/Email/EmailColorUtil.test.ts +356 -0
  633. package/Tests/Utils/Episode/EpisodeTemplateVariables.test.ts +106 -0
  634. package/Tests/Utils/Incident/IncidentNoteTemplateVariables.test.ts +143 -21
  635. package/Tests/Utils/KeyFromName.test.ts +442 -0
  636. package/Tests/Utils/ListOrder.test.ts +889 -0
  637. package/Tests/Utils/Markdown/UntrustedMarkdown.test.ts +4 -6
  638. package/Tests/Utils/Measurement/MeasurementMoments.test.ts +531 -0
  639. package/Tests/Utils/Project/NumberPrefix.test.ts +452 -0
  640. package/Tests/Utils/StateOrder.test.ts +850 -0
  641. package/Types/CustomField/CustomFieldCreateSettings.ts +15 -123
  642. package/Types/CustomField/CustomFieldValueFormat.ts +3 -2
  643. package/Types/CustomField/CustomFieldVariableKey.ts +140 -111
  644. package/Types/Database/ListOrderColumn.ts +61 -0
  645. package/Types/Form/FormField.ts +1193 -0
  646. package/Types/{Incident/IncidentFormIpAllowlist.ts → Form/FormIpAllowlist.ts} +50 -50
  647. package/Types/Form/FormPublic.ts +1321 -0
  648. package/Types/Form/FormSubmissionAnswer.ts +159 -0
  649. package/Types/Form/FormTargetCatalog.ts +299 -0
  650. package/Types/Form/FormTargetSettings.ts +450 -0
  651. package/Types/Form/FormTargetType.ts +86 -0
  652. package/Types/Form/LegacyIncidentFormConversion.ts +249 -0
  653. package/Types/Measurement/MeasurementKey.ts +107 -0
  654. package/Types/Measurement/MeasurementUnit.ts +97 -0
  655. package/Types/Metrics/RecordingRuleOutputMetricName.ts +73 -0
  656. package/Types/Monitor/MonitorCriteria.ts +27 -0
  657. package/Types/Monitor/MonitorCriteriaInstance.ts +213 -28
  658. package/Types/Monitor/MonitorStep.ts +2 -0
  659. package/Types/Monitor/MonitorSteps.ts +2 -0
  660. package/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.ts +6 -3
  661. package/Types/OnCallDutyPolicy/EscalationRuleDefaults.ts +147 -0
  662. package/Types/OnCallDutyPolicy/FirstResponders.ts +161 -0
  663. package/Types/Permission.ts +41 -35
  664. package/Types/Rules/RuleCriteriaFieldRegistry.ts +46 -1
  665. package/Types/Rum/SessionReplay.ts +25 -0
  666. package/Types/Rum/SessionReplayCustomEvents.ts +60 -0
  667. package/Types/Runbook/RunbookRuleCriteria.ts +206 -0
  668. package/Types/ScheduledMaintenance/MaintenanceWindow.ts +167 -0
  669. package/Types/StatusPage/IncidentSubscriberAudience.ts +4 -3
  670. package/Types/StatusPage/SubscriberNotificationTemplatePreview.ts +8 -2
  671. package/Types/StatusPage/SubscriberNotificationTemplateVariables.ts +68 -27
  672. package/Types/Template/TemplateVariable.ts +297 -0
  673. package/Types/Workspace/NotificationRules/NotificationRuleCondition.ts +27 -56
  674. package/UI/Components/404.tsx +8 -2
  675. package/UI/Components/AI/GenerateFromAIModal.tsx +11 -6
  676. package/UI/Components/AIAgent/AIAgent.tsx +8 -2
  677. package/UI/Components/ActionButton/ActionButtonSchema.ts +17 -1
  678. package/UI/Components/ActionButton/RowActions.tsx +34 -19
  679. package/UI/Components/ActionButton/SplitActionButtons.ts +36 -3
  680. package/UI/Components/ActionCard/ActionCard.tsx +14 -2
  681. package/UI/Components/AdvancedPageSection/AdvancedPageSection.tsx +82 -0
  682. package/UI/Components/AttachmentList/EventAttachmentList.tsx +8 -4
  683. package/UI/Components/AttributesJSON/AttributesJSONPreferences.ts +5 -4
  684. package/UI/Components/AttributesJSON/AttributesJSONView.tsx +18 -4
  685. package/UI/Components/AttributesJSON/AttributesViewToggle.tsx +12 -3
  686. package/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.tsx +76 -23
  687. package/UI/Components/AutocompleteTextInput/AutocompleteTextInput.tsx +7 -2
  688. package/UI/Components/Breadcrumbs/Breadcrumbs.tsx +1 -1
  689. package/UI/Components/BulkUpdate/BulkOwnerActions.tsx +55 -150
  690. package/UI/Components/BulkUpdate/BulkUpdateForm.tsx +94 -30
  691. package/UI/Components/Button/Button.tsx +1 -1
  692. package/UI/Components/Button/DropdownButton.tsx +1 -1
  693. package/UI/Components/CSVFileUpload/CSVFileUpload.tsx +88 -20
  694. package/UI/Components/Captcha/Captcha.tsx +4 -1
  695. package/UI/Components/Card/CardMoreMenu.tsx +30 -0
  696. package/UI/Components/CardSelect/CardSelect.tsx +51 -17
  697. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +13 -8
  698. package/UI/Components/Charts/ChartGroup/NoDataMessage.tsx +5 -1
  699. package/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.tsx +9 -1
  700. package/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.tsx +26 -5
  701. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +11 -1
  702. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +11 -1
  703. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +11 -1
  704. package/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.tsx +12 -4
  705. package/UI/Components/Checkbox/Checkbox.tsx +6 -4
  706. package/UI/Components/CodeBlock/CodeBlock.tsx +9 -2
  707. package/UI/Components/CodeEditor/CodeEditor.tsx +82 -29
  708. package/UI/Components/CollapsibleSection/CollapsibleSection.tsx +38 -4
  709. package/UI/Components/ColorViewer/ColorViewer.tsx +13 -2
  710. package/UI/Components/CopyTextButton/CopyTextButton.tsx +7 -3
  711. package/UI/Components/CopyableButton/CopyableButton.tsx +7 -4
  712. package/UI/Components/CustomFields/CustomFieldsDetail.tsx +10 -1
  713. package/UI/Components/CustomFields/DropdownOptionsInput.tsx +22 -3
  714. package/UI/Components/CustomFields/MapFromCustomFieldInput.tsx +137 -25
  715. package/UI/Components/Dashboard/DashboardVariableControl.tsx +27 -6
  716. package/UI/Components/Date/CustomTimeRangeModal.tsx +17 -13
  717. package/UI/Components/Date/RangeStartAndEndDateEdit.tsx +36 -16
  718. package/UI/Components/Date/RangeStartAndEndDateView.tsx +9 -1
  719. package/UI/Components/Date/StartAndEndDate.tsx +9 -2
  720. package/UI/Components/Date/TimeRangePickerDropdown.tsx +21 -9
  721. package/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.tsx +50 -9
  722. package/UI/Components/Detail/BooleanValue.tsx +45 -0
  723. package/UI/Components/Detail/Detail.tsx +122 -55
  724. package/UI/Components/Detail/DetailIdLine.tsx +229 -0
  725. package/UI/Components/Detail/DetailRecordId.ts +96 -0
  726. package/UI/Components/Detail/Field.ts +10 -0
  727. package/UI/Components/Detail/PlaceholderText.tsx +22 -1
  728. package/UI/Components/Dictionary/Dictionary.tsx +11 -1
  729. package/UI/Components/Dictionary/DictionaryOfStingsViewer.tsx +9 -2
  730. package/UI/Components/Dropdown/Dropdown.tsx +6 -3
  731. package/UI/Components/DuplicateModel/DuplicateModel.tsx +31 -6
  732. package/UI/Components/EditionLabel/EditionLabel.tsx +333 -191
  733. package/UI/Components/EntityDropdown/EntityDropdown.tsx +65 -32
  734. package/UI/Components/ErrorBoundary.tsx +40 -21
  735. package/UI/Components/ErrorMessage/ErrorMessage.tsx +1 -1
  736. package/UI/Components/EventItem/EventItem.tsx +14 -4
  737. package/UI/Components/Events/RecurringViewElement.tsx +24 -3
  738. package/UI/Components/ExpandableText/ExpandableText.tsx +6 -1
  739. package/UI/Components/Feed/FeedActionsMenu.tsx +49 -0
  740. package/UI/Components/Feed/FeedCard.tsx +156 -0
  741. package/UI/Components/Feed/FeedEventTypeChecklist.tsx +239 -0
  742. package/UI/Components/Feed/FeedFilterModal.tsx +54 -0
  743. package/UI/Components/Feed/FeedFilterSummary.tsx +114 -0
  744. package/UI/Components/Feed/FeedItem.tsx +5 -1
  745. package/UI/Components/Feed/FeedMoreMenu.tsx +100 -0
  746. package/UI/Components/Feed/FeedOptions.ts +44 -114
  747. package/UI/Components/FilePicker/FilePicker.tsx +60 -44
  748. package/UI/Components/FilterButtons/FilterButtons.tsx +6 -2
  749. package/UI/Components/Filters/AppliedFilters.tsx +90 -0
  750. package/UI/Components/Filters/BooleanFilter.tsx +5 -1
  751. package/UI/Components/Filters/DateFilter.tsx +33 -6
  752. package/UI/Components/Filters/DropdownFilter.tsx +5 -1
  753. package/UI/Components/Filters/EntityFilter.tsx +55 -18
  754. package/UI/Components/Filters/FilterPlaceholder.ts +21 -0
  755. package/UI/Components/Filters/FilterViewer.tsx +205 -143
  756. package/UI/Components/Filters/FiltersForm.tsx +19 -4
  757. package/UI/Components/Filters/NumberFilter.tsx +34 -11
  758. package/UI/Components/Filters/TextFilter.tsx +29 -10
  759. package/UI/Components/FormModal/BasicFormModal.tsx +69 -6
  760. package/UI/Components/Forms/BasicForm.tsx +206 -20
  761. package/UI/Components/Forms/BasicModelForm.tsx +2 -0
  762. package/UI/Components/Forms/CollapsibleFormSection.tsx +32 -3
  763. package/UI/Components/Forms/Fields/ColorPicker.tsx +6 -3
  764. package/UI/Components/Forms/Fields/FormField.tsx +282 -136
  765. package/UI/Components/Forms/Fields/GeneratedKeyField.tsx +336 -0
  766. package/UI/Components/Forms/Fields/IconPicker.tsx +7 -4
  767. package/UI/Components/Forms/Fields/PermissionPicker.tsx +11 -4
  768. package/UI/Components/Forms/FormSummary.tsx +161 -15
  769. package/UI/Components/Forms/ModelForm.tsx +186 -14
  770. package/UI/Components/Forms/Steps/Steps.tsx +4 -1
  771. package/UI/Components/Forms/Types/Field.ts +110 -1
  772. package/UI/Components/Forms/Types/FormFieldSchemaType.ts +5 -0
  773. package/UI/Components/Forms/Utils/AdvancedFormSection.ts +262 -0
  774. package/UI/Components/Forms/Utils/CreateFormDefaults.ts +192 -0
  775. package/UI/Components/Forms/Utils/FinishFromAnyStep.ts +284 -0
  776. package/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.ts +2 -0
  777. package/UI/Components/Forms/Utils/FormModalWidth.ts +63 -0
  778. package/UI/Components/Forms/Validation.ts +84 -46
  779. package/UI/Components/FullPageModal/FullPageModal.tsx +4 -1
  780. package/UI/Components/Graphs/UptimeBarTooltip.tsx +10 -2
  781. package/UI/Components/Header/Notifications/Notifications.tsx +7 -4
  782. package/UI/Components/Header/ProjectPicker/CreateNewProjectButton.tsx +5 -1
  783. package/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.tsx +7 -1
  784. package/UI/Components/Header/SearchBox.tsx +5 -1
  785. package/UI/Components/HeaderAlert/HeaderModelAlert.tsx +6 -1
  786. package/UI/Components/HeaderAlert/NotificationBell/NotificationBell.tsx +6 -1
  787. package/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.tsx +5 -2
  788. package/UI/Components/HeaderAlert/NotificationBell/NotificationBellSection.tsx +4 -1
  789. package/UI/Components/HiddenText/HiddenText.tsx +4 -1
  790. package/UI/Components/Icon/Icon.tsx +7 -4
  791. package/UI/Components/ImportExport/ExportModelCard.tsx +21 -3
  792. package/UI/Components/ImportExport/ImportModelsModal.tsx +61 -13
  793. package/UI/Components/Input/Input.tsx +40 -2
  794. package/UI/Components/IpAddressList/IpAddressList.tsx +12 -4
  795. package/UI/Components/JSONTable/JSONTable.tsx +19 -5
  796. package/UI/Components/LabelRule/ImportLabelRulesModal.tsx +90 -28
  797. package/UI/Components/Link/Link.tsx +6 -3
  798. package/UI/Components/List/List.tsx +152 -19
  799. package/UI/Components/List/ListBody.tsx +15 -1
  800. package/UI/Components/List/ListRow.tsx +32 -19
  801. package/UI/Components/List/ListSkeleton.tsx +4 -1
  802. package/UI/Components/Loader/Loader.tsx +12 -4
  803. package/UI/Components/LogsViewer/LogsViewer.tsx +60 -3
  804. package/UI/Components/LogsViewer/components/ActiveFilterChips.tsx +16 -4
  805. package/UI/Components/LogsViewer/components/ColumnSelector.tsx +32 -17
  806. package/UI/Components/LogsViewer/components/FacetValueRow.tsx +13 -7
  807. package/UI/Components/LogsViewer/components/HistogramTooltip.tsx +6 -1
  808. package/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.tsx +18 -7
  809. package/UI/Components/LogsViewer/components/LiveLogsToggle.tsx +4 -1
  810. package/UI/Components/LogsViewer/components/LogDetailsPanel.tsx +43 -23
  811. package/UI/Components/LogsViewer/components/LogSearchBar.tsx +11 -3
  812. package/UI/Components/LogsViewer/components/LogSearchHelp.tsx +24 -14
  813. package/UI/Components/LogsViewer/components/LogSearchSuggestions.tsx +10 -2
  814. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +19 -5
  815. package/UI/Components/LogsViewer/components/LogsFacetSidebar.tsx +4 -1
  816. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +13 -6
  817. package/UI/Components/LogsViewer/components/LogsPagination.tsx +10 -0
  818. package/UI/Components/LogsViewer/components/LogsTable.tsx +44 -16
  819. package/UI/Components/LogsViewer/components/LogsViewerToolbar.tsx +65 -20
  820. package/UI/Components/LogsViewer/components/SavedViewsDropdown.tsx +18 -11
  821. package/UI/Components/Markdown.tsx/LazyMarkdownViewer.tsx +7 -1
  822. package/UI/Components/Markdown.tsx/MarkdownConverters.ts +18 -0
  823. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +1072 -249
  824. package/UI/Components/Markdown.tsx/MarkdownToolbarLayout.ts +260 -0
  825. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +37 -8
  826. package/UI/Components/MasterPage/MasterPage.tsx +4 -1
  827. package/UI/Components/MemberRoleAssignment/MemberRoleAssignment.tsx +56 -23
  828. package/UI/Components/ModelDelete/ModelDelete.tsx +22 -4
  829. package/UI/Components/ModelDetail/CardModelDetail.tsx +26 -3
  830. package/UI/Components/ModelDetail/ModelDetail.tsx +17 -6
  831. package/UI/Components/ModelFormModal/ModelFormModal.tsx +51 -14
  832. package/UI/Components/ModelList/ModelList.tsx +93 -11
  833. package/UI/Components/ModelList/StaticModelList.tsx +24 -10
  834. package/UI/Components/ModelTable/BaseModelTable.tsx +715 -338
  835. package/UI/Components/ModelTable/ColumnCustomizationModal.tsx +73 -29
  836. package/UI/Components/ModelTable/CustomFieldColumns.tsx +2 -1
  837. package/UI/Components/ModelTable/EmptyStateOptions.ts +47 -0
  838. package/UI/Components/ModelTable/ModelTable.tsx +40 -10
  839. package/UI/Components/ModelTable/ModelTableEmptyState.ts +337 -0
  840. package/UI/Components/ModelTable/TableView.tsx +13 -6
  841. package/UI/Components/Monitor/SeriesLabelsViewer.tsx +4 -1
  842. package/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.ts +39 -1
  843. package/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.tsx +63 -20
  844. package/UI/Components/MoreMenu/MoreMenu.tsx +27 -11
  845. package/UI/Components/MoreMenu/MoreMenuItem.tsx +63 -5
  846. package/UI/Components/Navbar/NavBar.tsx +25 -29
  847. package/UI/Components/Navbar/NavBarCategoryToggle.tsx +120 -0
  848. package/UI/Components/Navbar/NavBarMenuCatalog.ts +250 -0
  849. package/UI/Components/Navbar/NavBarMenuModal.tsx +391 -162
  850. package/UI/Components/Navbar/NavBarMobileMenu.tsx +140 -0
  851. package/UI/Components/ObjectID/ObjectIDView.tsx +54 -4
  852. package/UI/Components/OsVersionDisplay/OsVersionDisplay.tsx +8 -1
  853. package/UI/Components/Page/ModelPage.tsx +11 -5
  854. package/UI/Components/Page/Page.tsx +1 -1
  855. package/UI/Components/Pagination/Pagination.tsx +257 -112
  856. package/UI/Components/Pagination/PaginationCopy.ts +71 -0
  857. package/UI/Components/Pagination/PaginationSummary.ts +113 -0
  858. package/UI/Components/Pagination/Screenshots/README.md +11 -9
  859. package/UI/Components/Pagination/Screenshots/pagination-before-after.png +0 -0
  860. package/UI/Components/Pagination/Screenshots/pagination-dark.png +0 -0
  861. package/UI/Components/Pagination/Screenshots/pagination-go-to-page-modal.png +0 -0
  862. package/UI/Components/Pagination/Screenshots/pagination-long-list.png +0 -0
  863. package/UI/Components/Pagination/Screenshots/pagination-mobile.png +0 -0
  864. package/UI/Components/Pagination/Screenshots/pagination-telemetry.png +0 -0
  865. package/UI/Components/PeoplePicker/OwnersFormField.ts +95 -0
  866. package/UI/Components/PeoplePicker/OwnersPicker.tsx +74 -0
  867. package/UI/Components/PeoplePicker/PeopleAvatar.tsx +213 -0
  868. package/UI/Components/PeoplePicker/PeopleList.tsx +198 -0
  869. package/UI/Components/PeoplePicker/PeoplePicker.tsx +242 -0
  870. package/UI/Components/PeoplePicker/PeoplePickerKinds.ts +599 -0
  871. package/UI/Components/PeoplePicker/PeoplePickerTypes.ts +244 -0
  872. package/UI/Components/PeoplePicker/PeopleSearchPopup.tsx +537 -0
  873. package/UI/Components/PeoplePicker/usePeopleOptions.ts +264 -0
  874. package/UI/Components/Pill/Pill.tsx +35 -2
  875. package/UI/Components/Pill/PillColors.ts +22 -261
  876. package/UI/Components/Probe/Probe.tsx +5 -2
  877. package/UI/Components/ProgressBar/ProgressBar.tsx +17 -2
  878. package/UI/Components/ProgressButtons/ProgressButtons.tsx +8 -1
  879. package/UI/Components/ProjectInvitations/PendingProjectInvitations.tsx +49 -15
  880. package/UI/Components/PublicForm/PublicFormFields.ts +359 -0
  881. package/UI/Components/ResetObjectID/ResetObjectID.tsx +31 -4
  882. package/UI/Components/RuleCriteria/RuleCriteriaBuilder.tsx +500 -574
  883. package/UI/Components/RuleCriteria/RuleCriteriaFields.ts +895 -0
  884. package/UI/Components/RuleCriteria/RuleCriteriaModelForm.tsx +45 -7
  885. package/UI/Components/RuleCriteria/RuleCriteriaModelTable.tsx +105 -12
  886. package/UI/Components/RuleCriteria/RuleCriteriaSummary.tsx +34 -30
  887. package/UI/Components/RuleRun/RuleDetailFields.tsx +90 -2
  888. package/UI/Components/RuleRun/RuleEnabledField.ts +51 -0
  889. package/UI/Components/RuleRun/RuleTable.tsx +13 -1
  890. package/UI/Components/RuleRun/RuleView.tsx +22 -4
  891. package/UI/Components/RuleRun/RunRuleNowModal.tsx +11 -1
  892. package/UI/Components/Runbook/StepTimeoutInput.tsx +22 -11
  893. package/UI/Components/SavedViews/SavedViewsFacetSection.tsx +28 -10
  894. package/UI/Components/SavedViews/SavedViewsSearchInput.tsx +6 -2
  895. package/UI/Components/SavedViews/SavedViewsShowMoreButton.tsx +9 -1
  896. package/UI/Components/SideMenu/SideMenu.tsx +4 -6
  897. package/UI/Components/SideMenu/SideMenuSection.tsx +5 -3
  898. package/UI/Components/SideMenu/SideMenuSectionState.ts +52 -9
  899. package/UI/Components/SideOver/SideOver.tsx +24 -6
  900. package/UI/Components/SimpleLogViewer/SimpleLogViewer.tsx +4 -1
  901. package/UI/Components/StackedProgressBar/StackedProgressBar.tsx +4 -1
  902. package/UI/Components/StateTimeline/CurrentlyActiveIndicator.tsx +48 -0
  903. package/UI/Components/StateTimeline/StateTimelineColumns.tsx +134 -0
  904. package/UI/Components/StateTimeline/StateTimelineDuration.tsx +56 -0
  905. package/UI/Components/StateTimeline/StateTimelineEndsAt.tsx +37 -0
  906. package/UI/Components/StatusBadge/StatusBadge.tsx +3 -1
  907. package/UI/Components/StatusBubble/StatusBubble.tsx +8 -2
  908. package/UI/Components/StatusPage/ResourceGrid.tsx +55 -16
  909. package/UI/Components/StatusPage/ResourceGroupNavigator.tsx +67 -22
  910. package/UI/Components/StatusPage/ResourceList.tsx +46 -18
  911. package/UI/Components/Table/DragHandle.tsx +74 -0
  912. package/UI/Components/Table/EmptyTableMessage.ts +272 -34
  913. package/UI/Components/Table/Table.tsx +248 -68
  914. package/UI/Components/Table/TableBody.tsx +43 -2
  915. package/UI/Components/Table/TableEmptyState.tsx +250 -0
  916. package/UI/Components/Table/TableEmptyStateBuilders.ts +187 -0
  917. package/UI/Components/Table/TableRow.tsx +107 -32
  918. package/UI/Components/Table/TableSkeletonRows.tsx +9 -2
  919. package/UI/Components/TableColumnList/TableColumnListComponent.tsx +13 -3
  920. package/UI/Components/Tabs/Tabs.tsx +4 -1
  921. package/UI/Components/TelemetryViewer/FacetVisibility.ts +44 -9
  922. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +79 -10
  923. package/UI/Components/TelemetryViewer/components/FacetSearchInput.tsx +11 -4
  924. package/UI/Components/TelemetryViewer/components/FacetShowMoreButton.tsx +9 -1
  925. package/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.tsx +15 -7
  926. package/UI/Components/TelemetryViewer/components/LockedFilterChip.tsx +99 -33
  927. package/UI/Components/TelemetryViewer/components/SavedViewsDropdown.tsx +18 -11
  928. package/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.tsx +9 -3
  929. package/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.tsx +6 -3
  930. package/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.tsx +4 -1
  931. package/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.tsx +13 -7
  932. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +15 -8
  933. package/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.tsx +6 -1
  934. package/UI/Components/TelemetryViewer/components/TelemetryItemLabel.ts +18 -0
  935. package/UI/Components/TelemetryViewer/components/TelemetryPagination.tsx +17 -11
  936. package/UI/Components/TelemetryViewer/components/TelemetryResultTotal.tsx +132 -0
  937. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +9 -4
  938. package/UI/Components/TelemetryViewer/components/TelemetrySearchHelp.tsx +30 -17
  939. package/UI/Components/TelemetryViewer/components/TelemetrySearchSuggestions.tsx +10 -2
  940. package/UI/Components/TemplateVariables/InsertTemplateVariableButton.tsx +162 -0
  941. package/UI/Components/TemplateVariables/TemplateVariableIcons.tsx +55 -0
  942. package/UI/Components/TemplateVariables/TemplateVariableMenu.tsx +351 -0
  943. package/UI/Components/TemplateVariables/TemplateVariablePopup.tsx +255 -0
  944. package/UI/Components/TemplateVariables/TemplateVariableTextControl.tsx +128 -0
  945. package/UI/Components/TemplateVariables/TemplateVariablesCopy.ts +38 -0
  946. package/UI/Components/TemplateVariables/TemplateVariablesList.tsx +277 -0
  947. package/UI/Components/TemplateVariables/TextControlUtil.ts +295 -0
  948. package/UI/Components/TemplateVariables/useTemplateVariableTyping.tsx +350 -0
  949. package/UI/Components/TimePicker/TimePicker.tsx +36 -20
  950. package/UI/Components/Toggle/Toggle.tsx +39 -45
  951. package/UI/Components/Tooltip/InfoTooltip.tsx +6 -1
  952. package/UI/Components/Tooltip/Tooltip.tsx +4 -1
  953. package/UI/Components/TranslatedSentence/TranslatedSentence.tsx +76 -0
  954. package/UI/Components/Workflow/ArgumentsForm.tsx +51 -12
  955. package/UI/Components/Workflow/ColumnEditor/AddColumnPicker.tsx +20 -14
  956. package/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.tsx +19 -6
  957. package/UI/Components/Workflow/ColumnEditor/ColumnControl.ts +28 -14
  958. package/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.tsx +24 -10
  959. package/UI/Components/Workflow/ColumnEditor/ColumnOperators.ts +17 -14
  960. package/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.ts +2 -1
  961. package/UI/Components/Workflow/ColumnEditor/ColumnRowSerialization.ts +3 -2
  962. package/UI/Components/Workflow/ColumnEditor/ColumnValueInput.tsx +21 -8
  963. package/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.tsx +11 -6
  964. package/UI/Components/Workflow/ColumnEditor/ModelRecordForm.tsx +29 -9
  965. package/UI/Components/Workflow/Component.tsx +8 -3
  966. package/UI/Components/Workflow/ComponentArgumentsViewer.tsx +20 -2
  967. package/UI/Components/Workflow/ComponentPicker/PickerItems.tsx +46 -18
  968. package/UI/Components/Workflow/ComponentPortViewer.tsx +6 -1
  969. package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +10 -2
  970. package/UI/Components/Workflow/ComponentSettingsModal.tsx +30 -9
  971. package/UI/Components/Workflow/ComponentSettingsSection.tsx +7 -2
  972. package/UI/Components/Workflow/ComponentsModal.tsx +137 -54
  973. package/UI/Components/Workflow/Condition/ConditionEditor.tsx +52 -21
  974. package/UI/Components/Workflow/Condition/ConditionModel.ts +45 -17
  975. package/UI/Components/Workflow/CronScheduleField.tsx +54 -31
  976. package/UI/Components/Workflow/DocumentationViewer.tsx +10 -2
  977. package/UI/Components/Workflow/GraphLint.ts +78 -13
  978. package/UI/Components/Workflow/GraphLintSummary.ts +24 -11
  979. package/UI/Components/Workflow/ManualTriggerPanel.tsx +26 -6
  980. package/UI/Components/Workflow/ModelColumnEditor.tsx +95 -33
  981. package/UI/Components/Workflow/ModelFieldPicker.tsx +100 -34
  982. package/UI/Components/Workflow/RunForm.tsx +13 -3
  983. package/UI/Components/Workflow/RunStatusWatcher.ts +50 -8
  984. package/UI/Components/Workflow/StepTraceViewer.tsx +130 -42
  985. package/UI/Components/Workflow/UseRunWatch.ts +2 -1
  986. package/UI/Components/Workflow/Utils.ts +7 -1
  987. package/UI/Components/Workflow/ValuePicker/InsertValueButton.tsx +8 -5
  988. package/UI/Components/Workflow/ValuePicker/ValuePickerMenu.tsx +105 -39
  989. package/UI/Components/Workflow/ValuePicker/ValuePickerPopup.tsx +4 -1
  990. package/UI/Components/Workflow/ValuePicker/ValueSingleField.tsx +10 -5
  991. package/UI/Components/Workflow/ValuePicker/ValueTextField.tsx +11 -7
  992. package/UI/Components/Workflow/WorkflowIssuesModal.tsx +48 -16
  993. package/UI/Components/Workflow/WorkflowLogModal.tsx +9 -5
  994. package/UI/Components/Workflow/WorkflowStatusBar.tsx +26 -13
  995. package/UI/Styles/Theme.css +21 -26
  996. package/UI/Types/UseAnchoredFieldPopup.ts +8 -2
  997. package/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.ts +12 -0
  998. package/UI/Utils/Dropdown.ts +106 -5
  999. package/UI/Utils/ForeignDomMutationGuard.ts +225 -0
  1000. package/UI/Utils/GrantablePermission.ts +197 -0
  1001. package/UI/Utils/PermissionGate.ts +50 -4
  1002. package/UI/Utils/Rules/RuleRunClient.ts +14 -4
  1003. package/UI/Utils/Telemetry/ResultTotal.ts +150 -0
  1004. package/UI/Utils/Telemetry/UseResultTotal.ts +173 -0
  1005. package/UI/Utils/TranslateTemplate.ts +617 -19
  1006. package/UI/Utils/Translation.tsx +56 -2
  1007. package/UI/Utils/UseClockTick.ts +43 -3
  1008. package/UI/Utils/UseLiveDuration.ts +155 -0
  1009. package/UI/Utils/UseTranslator.ts +22 -0
  1010. package/UI/esbuild-config.js +3 -0
  1011. package/UI/esbuild-locales.d.ts +60 -0
  1012. package/UI/esbuild-locales.js +358 -0
  1013. package/Utils/ColorContrast.ts +274 -0
  1014. package/Utils/DeveloperDocs/AiAssistantExamples.ts +3 -2
  1015. package/Utils/DeveloperDocs/ApiExamples.ts +5 -271
  1016. package/Utils/DeveloperDocs/ExampleBuilder.ts +1775 -0
  1017. package/Utils/DeveloperDocs/ExampleValues.ts +82 -0
  1018. package/Utils/DeveloperDocs/Hcl.ts +153 -33
  1019. package/Utils/DeveloperDocs/LiveData.ts +292 -0
  1020. package/Utils/DeveloperDocs/PageLookups.ts +370 -0
  1021. package/Utils/DeveloperDocs/ResourceProfiles.ts +2025 -0
  1022. package/Utils/DeveloperDocs/TerraformConfig.ts +139 -143
  1023. package/Utils/DeveloperDocs/TerraformMonitorSteps.ts +63 -10
  1024. package/Utils/DeveloperDocs/TerraformSchema.ts +88 -1
  1025. package/Utils/Email/EmailColorUtil.ts +135 -0
  1026. package/Utils/Episode/EpisodeTemplateVariables.ts +75 -0
  1027. package/Utils/Incident/IncidentNoteTemplateVariables.ts +37 -6
  1028. package/Utils/Incident/IncidentSlaNoteTemplateVariables.ts +33 -0
  1029. package/Utils/KeyFromName.ts +230 -0
  1030. package/Utils/ListOrder.ts +417 -0
  1031. package/Utils/Measurement/MeasurementMoments.ts +699 -0
  1032. package/Utils/Project/NumberPrefix.ts +188 -0
  1033. package/Utils/Slo/SloBurnRateTemplate.ts +24 -0
  1034. package/Utils/StateOrder.ts +631 -0
  1035. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js +4 -3
  1036. package/build/dist/Models/DatabaseModels/AlertGroupingRule.js.map +1 -1
  1037. package/build/dist/Models/DatabaseModels/AlertMeasurement.js +17 -10
  1038. package/build/dist/Models/DatabaseModels/AlertMeasurement.js.map +1 -1
  1039. package/build/dist/Models/DatabaseModels/AlertReminderRule.js +4 -3
  1040. package/build/dist/Models/DatabaseModels/AlertReminderRule.js.map +1 -1
  1041. package/build/dist/Models/DatabaseModels/AlertSeverity.js +4 -2
  1042. package/build/dist/Models/DatabaseModels/AlertSeverity.js.map +1 -1
  1043. package/build/dist/Models/DatabaseModels/AlertState.js +4 -2
  1044. package/build/dist/Models/DatabaseModels/AlertState.js.map +1 -1
  1045. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js +8 -0
  1046. package/build/dist/Models/DatabaseModels/DatabaseBaseModel/DatabaseBaseModel.js.map +1 -1
  1047. package/build/dist/Models/DatabaseModels/{IncidentForm.js → Form.js} +113 -219
  1048. package/build/dist/Models/DatabaseModels/Form.js.map +1 -0
  1049. package/build/dist/Models/DatabaseModels/{IncidentFormSubmission.js → FormSubmission.js} +170 -89
  1050. package/build/dist/Models/DatabaseModels/FormSubmission.js.map +1 -0
  1051. package/build/dist/Models/DatabaseModels/Incident.js +1 -1
  1052. package/build/dist/Models/DatabaseModels/IncidentCustomField.js +7 -3
  1053. package/build/dist/Models/DatabaseModels/IncidentCustomField.js.map +1 -1
  1054. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js +4 -3
  1055. package/build/dist/Models/DatabaseModels/IncidentGroupingRule.js.map +1 -1
  1056. package/build/dist/Models/DatabaseModels/IncidentMeasurement.js +16 -9
  1057. package/build/dist/Models/DatabaseModels/IncidentMeasurement.js.map +1 -1
  1058. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js +4 -3
  1059. package/build/dist/Models/DatabaseModels/IncidentReminderRule.js.map +1 -1
  1060. package/build/dist/Models/DatabaseModels/IncidentSeverity.js +4 -2
  1061. package/build/dist/Models/DatabaseModels/IncidentSeverity.js.map +1 -1
  1062. package/build/dist/Models/DatabaseModels/IncidentSlaRule.js +4 -3
  1063. package/build/dist/Models/DatabaseModels/IncidentSlaRule.js.map +1 -1
  1064. package/build/dist/Models/DatabaseModels/IncidentState.js +4 -2
  1065. package/build/dist/Models/DatabaseModels/IncidentState.js.map +1 -1
  1066. package/build/dist/Models/DatabaseModels/IncidentTemplate.js +1 -1
  1067. package/build/dist/Models/DatabaseModels/IncomingCallPolicyEscalationRule.js +4 -1
  1068. package/build/dist/Models/DatabaseModels/IncomingCallPolicyEscalationRule.js.map +1 -1
  1069. package/build/dist/Models/DatabaseModels/Index.js +4 -4
  1070. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  1071. package/build/dist/Models/DatabaseModels/LogDropFilter.js +4 -3
  1072. package/build/dist/Models/DatabaseModels/LogDropFilter.js.map +1 -1
  1073. package/build/dist/Models/DatabaseModels/LogPipeline.js +4 -3
  1074. package/build/dist/Models/DatabaseModels/LogPipeline.js.map +1 -1
  1075. package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js +4 -3
  1076. package/build/dist/Models/DatabaseModels/LogPipelineProcessor.js.map +1 -1
  1077. package/build/dist/Models/DatabaseModels/LogScrubRule.js +3 -2
  1078. package/build/dist/Models/DatabaseModels/LogScrubRule.js.map +1 -1
  1079. package/build/dist/Models/DatabaseModels/MetricPipelineRule.js +3 -2
  1080. package/build/dist/Models/DatabaseModels/MetricPipelineRule.js.map +1 -1
  1081. package/build/dist/Models/DatabaseModels/MetricRecordingRule.js +9 -3
  1082. package/build/dist/Models/DatabaseModels/MetricRecordingRule.js.map +1 -1
  1083. package/build/dist/Models/DatabaseModels/MonitorStatus.js +4 -1
  1084. package/build/dist/Models/DatabaseModels/MonitorStatus.js.map +1 -1
  1085. package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js +3 -1
  1086. package/build/dist/Models/DatabaseModels/NetworkDeviceRole.js.map +1 -1
  1087. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js +9 -3
  1088. package/build/dist/Models/DatabaseModels/NetworkSiteAssignmentRule.js.map +1 -1
  1089. package/build/dist/Models/DatabaseModels/Project.js +22 -13
  1090. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  1091. package/build/dist/Models/DatabaseModels/RunbookRule.js +334 -0
  1092. package/build/dist/Models/DatabaseModels/RunbookRule.js.map +1 -1
  1093. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js +3 -1
  1094. package/build/dist/Models/DatabaseModels/ScheduledMaintenance.js.map +1 -1
  1095. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurement.js +16 -9
  1096. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceMeasurement.js.map +1 -1
  1097. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js +4 -3
  1098. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceReminderRule.js.map +1 -1
  1099. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js +4 -2
  1100. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceState.js.map +1 -1
  1101. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js +1 -2
  1102. package/build/dist/Models/DatabaseModels/ScheduledMaintenanceTemplate.js.map +1 -1
  1103. package/build/dist/Models/DatabaseModels/StatusPageFooterLink.js +4 -1
  1104. package/build/dist/Models/DatabaseModels/StatusPageFooterLink.js.map +1 -1
  1105. package/build/dist/Models/DatabaseModels/StatusPageHeaderLink.js +4 -1
  1106. package/build/dist/Models/DatabaseModels/StatusPageHeaderLink.js.map +1 -1
  1107. package/build/dist/Models/DatabaseModels/StatusPageHistoryChartBarColorRule.js +4 -1
  1108. package/build/dist/Models/DatabaseModels/StatusPageHistoryChartBarColorRule.js.map +1 -1
  1109. package/build/dist/Models/DatabaseModels/TraceDropFilter.js +4 -3
  1110. package/build/dist/Models/DatabaseModels/TraceDropFilter.js.map +1 -1
  1111. package/build/dist/Models/DatabaseModels/TracePipeline.js +4 -3
  1112. package/build/dist/Models/DatabaseModels/TracePipeline.js.map +1 -1
  1113. package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js +4 -3
  1114. package/build/dist/Models/DatabaseModels/TracePipelineProcessor.js.map +1 -1
  1115. package/build/dist/Models/DatabaseModels/TraceRecordingRule.js +9 -3
  1116. package/build/dist/Models/DatabaseModels/TraceRecordingRule.js.map +1 -1
  1117. package/build/dist/Models/DatabaseModels/TraceScrubRule.js +3 -2
  1118. package/build/dist/Models/DatabaseModels/TraceScrubRule.js.map +1 -1
  1119. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js +53 -1
  1120. package/build/dist/Models/DatabaseModels/UserNotificationEmailRollupItem.js.map +1 -1
  1121. package/build/dist/Server/API/BaseAnalyticsAPI.js +15 -0
  1122. package/build/dist/Server/API/BaseAnalyticsAPI.js.map +1 -1
  1123. package/build/dist/Server/API/{IncidentFormAPI.js → FormAPI.js} +57 -57
  1124. package/build/dist/Server/API/FormAPI.js.map +1 -0
  1125. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797300000000-TurnOnLinkedAlertSwitchesByDefault.js +29 -0
  1126. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797300000000-TurnOnLinkedAlertSwitchesByDefault.js.map +1 -0
  1127. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797400000000-MigrateIncidentFormsToForms.js +173 -0
  1128. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797400000000-MigrateIncidentFormsToForms.js.map +1 -0
  1129. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797500000000-AddRunbookRuleMatchCriteria.js +77 -0
  1130. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797500000000-AddRunbookRuleMatchCriteria.js.map +1 -0
  1131. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797600000000-AddSeverityAndStateColorsToNotificationEmailRollup.js +14 -0
  1132. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1797600000000-AddSeverityAndStateColorsToNotificationEmailRollup.js.map +1 -0
  1133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  1134. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  1135. package/build/dist/Server/Middleware/{IncidentFormRateLimit.js → FormRateLimit.js} +159 -146
  1136. package/build/dist/Server/Middleware/FormRateLimit.js.map +1 -0
  1137. package/build/dist/Server/Services/AlertEpisodeService.js +2 -3
  1138. package/build/dist/Server/Services/AlertEpisodeService.js.map +1 -1
  1139. package/build/dist/Server/Services/AlertMeasurementService.js +111 -20
  1140. package/build/dist/Server/Services/AlertMeasurementService.js.map +1 -1
  1141. package/build/dist/Server/Services/AlertReminderRuleService.js +0 -30
  1142. package/build/dist/Server/Services/AlertReminderRuleService.js.map +1 -1
  1143. package/build/dist/Server/Services/AlertService.js +2 -3
  1144. package/build/dist/Server/Services/AlertService.js.map +1 -1
  1145. package/build/dist/Server/Services/AlertSeverityService.js +14 -85
  1146. package/build/dist/Server/Services/AlertSeverityService.js.map +1 -1
  1147. package/build/dist/Server/Services/AlertStateService.js +28 -97
  1148. package/build/dist/Server/Services/AlertStateService.js.map +1 -1
  1149. package/build/dist/Server/Services/AnalyticsDatabaseService.js +82 -7
  1150. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  1151. package/build/dist/Server/Services/DatabaseService.js +216 -0
  1152. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  1153. package/build/dist/Server/Services/FormService.js +870 -0
  1154. package/build/dist/Server/Services/FormService.js.map +1 -0
  1155. package/build/dist/Server/Services/FormSubmissionService.js +21 -0
  1156. package/build/dist/Server/Services/FormSubmissionService.js.map +1 -0
  1157. package/build/dist/Server/Services/IncidentAlertService.js +30 -12
  1158. package/build/dist/Server/Services/IncidentAlertService.js.map +1 -1
  1159. package/build/dist/Server/Services/IncidentCustomFieldService.js +0 -83
  1160. package/build/dist/Server/Services/IncidentCustomFieldService.js.map +1 -1
  1161. package/build/dist/Server/Services/IncidentEpisodeService.js +2 -3
  1162. package/build/dist/Server/Services/IncidentEpisodeService.js.map +1 -1
  1163. package/build/dist/Server/Services/IncidentMeasurementService.js +114 -20
  1164. package/build/dist/Server/Services/IncidentMeasurementService.js.map +1 -1
  1165. package/build/dist/Server/Services/IncidentReminderRuleService.js +0 -30
  1166. package/build/dist/Server/Services/IncidentReminderRuleService.js.map +1 -1
  1167. package/build/dist/Server/Services/IncidentService.js +2 -3
  1168. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  1169. package/build/dist/Server/Services/IncidentSeverityService.js +14 -87
  1170. package/build/dist/Server/Services/IncidentSeverityService.js.map +1 -1
  1171. package/build/dist/Server/Services/IncidentSlaRuleService.js +0 -30
  1172. package/build/dist/Server/Services/IncidentSlaRuleService.js.map +1 -1
  1173. package/build/dist/Server/Services/IncidentStateService.js +28 -97
  1174. package/build/dist/Server/Services/IncidentStateService.js.map +1 -1
  1175. package/build/dist/Server/Services/IncidentStateTimelineService.js +2 -2
  1176. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js +14 -145
  1177. package/build/dist/Server/Services/IncomingCallPolicyEscalationRuleService.js.map +1 -1
  1178. package/build/dist/Server/Services/Index.js +4 -4
  1179. package/build/dist/Server/Services/Index.js.map +1 -1
  1180. package/build/dist/Server/Services/LogService.js +9 -0
  1181. package/build/dist/Server/Services/LogService.js.map +1 -1
  1182. package/build/dist/Server/Services/MetricRecordingRuleService.js +92 -0
  1183. package/build/dist/Server/Services/MetricRecordingRuleService.js.map +1 -1
  1184. package/build/dist/Server/Services/MonitorStatusService.js +25 -108
  1185. package/build/dist/Server/Services/MonitorStatusService.js.map +1 -1
  1186. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js +33 -0
  1187. package/build/dist/Server/Services/OnCallDutyPolicyEscalationRuleService.js.map +1 -1
  1188. package/build/dist/Server/Services/OnCallDutyPolicyService.js +261 -0
  1189. package/build/dist/Server/Services/OnCallDutyPolicyService.js.map +1 -1
  1190. package/build/dist/Server/Services/ProjectService.js +49 -62
  1191. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  1192. package/build/dist/Server/Services/RunbookRuleEngineService.js +289 -32
  1193. package/build/dist/Server/Services/RunbookRuleEngineService.js.map +1 -1
  1194. package/build/dist/Server/Services/RunbookRuleService.js +87 -0
  1195. package/build/dist/Server/Services/RunbookRuleService.js.map +1 -1
  1196. package/build/dist/Server/Services/ScheduledMaintenanceMeasurementService.js +117 -20
  1197. package/build/dist/Server/Services/ScheduledMaintenanceMeasurementService.js.map +1 -1
  1198. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js +0 -30
  1199. package/build/dist/Server/Services/ScheduledMaintenanceReminderRuleService.js.map +1 -1
  1200. package/build/dist/Server/Services/ScheduledMaintenanceService.js +2 -3
  1201. package/build/dist/Server/Services/ScheduledMaintenanceService.js.map +1 -1
  1202. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js +28 -99
  1203. package/build/dist/Server/Services/ScheduledMaintenanceStateService.js.map +1 -1
  1204. package/build/dist/Server/Services/SpanService.js +17 -2
  1205. package/build/dist/Server/Services/SpanService.js.map +1 -1
  1206. package/build/dist/Server/Services/StatusPageFooterLinkService.js +8 -169
  1207. package/build/dist/Server/Services/StatusPageFooterLinkService.js.map +1 -1
  1208. package/build/dist/Server/Services/StatusPageHeaderLinkService.js +7 -168
  1209. package/build/dist/Server/Services/StatusPageHeaderLinkService.js.map +1 -1
  1210. package/build/dist/Server/Services/StatusPageHistoryChartBarColorRuleService.js +8 -169
  1211. package/build/dist/Server/Services/StatusPageHistoryChartBarColorRuleService.js.map +1 -1
  1212. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js +14 -5
  1213. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateService.js.map +1 -1
  1214. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js +7 -6
  1215. package/build/dist/Server/Services/StatusPageSubscriberNotificationTemplateStatusPageService.js.map +1 -1
  1216. package/build/dist/Server/Services/TraceRecordingRuleService.js +11 -2
  1217. package/build/dist/Server/Services/TraceRecordingRuleService.js.map +1 -1
  1218. package/build/dist/Server/Services/UserNotificationRuleService.js +25 -59
  1219. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  1220. package/build/dist/Server/Utils/Database/ListOrderMaintainer.js +311 -0
  1221. package/build/dist/Server/Utils/Database/ListOrderMaintainer.js.map +1 -0
  1222. package/build/dist/Server/Utils/Database/StateOrderGuard.js +239 -0
  1223. package/build/dist/Server/Utils/Database/StateOrderGuard.js.map +1 -0
  1224. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js +2 -0
  1225. package/build/dist/Server/Utils/EmailRollup/EmailRollupFlushRunner.js.map +1 -1
  1226. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js +44 -3
  1227. package/build/dist/Server/Utils/EmailRollup/EmailRollupRenderer.js.map +1 -1
  1228. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js +29 -1
  1229. package/build/dist/Server/Utils/EmailRollup/EmailRollupWriter.js.map +1 -1
  1230. package/build/dist/Server/Utils/Form/FormRecordOptions.js +111 -0
  1231. package/build/dist/Server/Utils/Form/FormRecordOptions.js.map +1 -0
  1232. package/build/dist/Server/Utils/Form/FormSubmissionNote.js +154 -0
  1233. package/build/dist/Server/Utils/Form/FormSubmissionNote.js.map +1 -0
  1234. package/build/dist/Server/Utils/Form/FormTargetHandler.js +232 -0
  1235. package/build/dist/Server/Utils/Form/FormTargetHandler.js.map +1 -0
  1236. package/build/dist/Server/Utils/Form/FormTargets.js +13 -0
  1237. package/build/dist/Server/Utils/Form/FormTargets.js.map +1 -0
  1238. package/build/dist/Server/Utils/Form/IncidentFormTarget.js +400 -0
  1239. package/build/dist/Server/Utils/Form/IncidentFormTarget.js.map +1 -0
  1240. package/build/dist/Server/Utils/Form/ScheduledMaintenanceFormTarget.js +245 -0
  1241. package/build/dist/Server/Utils/Form/ScheduledMaintenanceFormTarget.js.map +1 -0
  1242. package/build/dist/Server/Utils/Measurement/MeasurementDefinitionChange.js +43 -0
  1243. package/build/dist/Server/Utils/Measurement/MeasurementDefinitionChange.js.map +1 -0
  1244. package/build/dist/Server/Utils/Measurement/MeasurementDefinitionValidator.js +6 -4
  1245. package/build/dist/Server/Utils/Measurement/MeasurementDefinitionValidator.js.map +1 -1
  1246. package/build/dist/Server/Utils/Measurement/MeasurementKeyAssigner.js +33 -0
  1247. package/build/dist/Server/Utils/Measurement/MeasurementKeyAssigner.js.map +1 -0
  1248. package/build/dist/Server/Utils/Measurement/MeasurementMetricWriter.js +15 -2
  1249. package/build/dist/Server/Utils/Measurement/MeasurementMetricWriter.js.map +1 -1
  1250. package/build/dist/Server/Utils/Measurement/MeasurementStateReference.js +72 -0
  1251. package/build/dist/Server/Utils/Measurement/MeasurementStateReference.js.map +1 -0
  1252. package/build/dist/Server/Utils/Slo/SloOwnerReferenceValidator.js +1 -1
  1253. package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js +7 -7
  1254. package/build/dist/Server/Utils/StatusPage/IncidentSubscriberAudienceBuilder.js.map +1 -1
  1255. package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js +14 -10
  1256. package/build/dist/Server/Utils/StatusPage/IncidentTemplateVariableBuilder.js.map +1 -1
  1257. package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js +9 -15
  1258. package/build/dist/Server/Utils/StatusPage/SubscriberIncidentEmailBuilder.js.map +1 -1
  1259. package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js +4 -0
  1260. package/build/dist/Server/Utils/StatusPage/SubscriberNotificationPreviewBuilder.js.map +1 -1
  1261. package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js +5 -4
  1262. package/build/dist/Server/Utils/StatusPage/SubscriberTemplateIncidentRecordAccess.js.map +1 -1
  1263. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js +15 -66
  1264. package/build/dist/Types/CustomField/CustomFieldCreateSettings.js.map +1 -1
  1265. package/build/dist/Types/CustomField/CustomFieldValueFormat.js +3 -2
  1266. package/build/dist/Types/CustomField/CustomFieldValueFormat.js.map +1 -1
  1267. package/build/dist/Types/CustomField/CustomFieldVariableKey.js +97 -88
  1268. package/build/dist/Types/CustomField/CustomFieldVariableKey.js.map +1 -1
  1269. package/build/dist/Types/Database/ListOrderColumn.js +12 -0
  1270. package/build/dist/Types/Database/ListOrderColumn.js.map +1 -0
  1271. package/build/dist/Types/Form/FormField.js +713 -0
  1272. package/build/dist/Types/Form/FormField.js.map +1 -0
  1273. package/build/dist/Types/{Incident/IncidentFormIpAllowlist.js → Form/FormIpAllowlist.js} +3 -3
  1274. package/build/dist/Types/Form/FormIpAllowlist.js.map +1 -0
  1275. package/build/dist/Types/Form/FormPublic.js +786 -0
  1276. package/build/dist/Types/Form/FormPublic.js.map +1 -0
  1277. package/build/dist/Types/Form/FormSubmissionAnswer.js +82 -0
  1278. package/build/dist/Types/Form/FormSubmissionAnswer.js.map +1 -0
  1279. package/build/dist/Types/Form/FormTargetCatalog.js +213 -0
  1280. package/build/dist/Types/Form/FormTargetCatalog.js.map +1 -0
  1281. package/build/dist/Types/Form/FormTargetSettings.js +276 -0
  1282. package/build/dist/Types/Form/FormTargetSettings.js.map +1 -0
  1283. package/build/dist/Types/Form/FormTargetType.js +56 -0
  1284. package/build/dist/Types/Form/FormTargetType.js.map +1 -0
  1285. package/build/dist/Types/Form/LegacyIncidentFormConversion.js +131 -0
  1286. package/build/dist/Types/Form/LegacyIncidentFormConversion.js.map +1 -0
  1287. package/build/dist/Types/Measurement/MeasurementKey.js +72 -0
  1288. package/build/dist/Types/Measurement/MeasurementKey.js.map +1 -0
  1289. package/build/dist/Types/Measurement/MeasurementUnit.js +74 -0
  1290. package/build/dist/Types/Measurement/MeasurementUnit.js.map +1 -0
  1291. package/build/dist/Types/Metrics/RecordingRuleOutputMetricName.js +48 -0
  1292. package/build/dist/Types/Metrics/RecordingRuleOutputMetricName.js.map +1 -0
  1293. package/build/dist/Types/Monitor/MonitorCriteria.js +22 -0
  1294. package/build/dist/Types/Monitor/MonitorCriteria.js.map +1 -1
  1295. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js +191 -25
  1296. package/build/dist/Types/Monitor/MonitorCriteriaInstance.js.map +1 -1
  1297. package/build/dist/Types/Monitor/MonitorStep.js.map +1 -1
  1298. package/build/dist/Types/Monitor/MonitorSteps.js.map +1 -1
  1299. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js +3 -3
  1300. package/build/dist/Types/Monitor/Recommendation/MonitorRecommendationSeverityMapper.js.map +1 -1
  1301. package/build/dist/Types/OnCallDutyPolicy/EscalationRuleDefaults.js +95 -0
  1302. package/build/dist/Types/OnCallDutyPolicy/EscalationRuleDefaults.js.map +1 -0
  1303. package/build/dist/Types/OnCallDutyPolicy/FirstResponders.js +87 -0
  1304. package/build/dist/Types/OnCallDutyPolicy/FirstResponders.js.map +1 -0
  1305. package/build/dist/Types/Permission.js +41 -34
  1306. package/build/dist/Types/Permission.js.map +1 -1
  1307. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js +38 -1
  1308. package/build/dist/Types/Rules/RuleCriteriaFieldRegistry.js.map +1 -1
  1309. package/build/dist/Types/Rum/SessionReplay.js +24 -0
  1310. package/build/dist/Types/Rum/SessionReplay.js.map +1 -1
  1311. package/build/dist/Types/Rum/SessionReplayCustomEvents.js +17 -0
  1312. package/build/dist/Types/Rum/SessionReplayCustomEvents.js.map +1 -1
  1313. package/build/dist/Types/Runbook/RunbookRuleCriteria.js +151 -0
  1314. package/build/dist/Types/Runbook/RunbookRuleCriteria.js.map +1 -0
  1315. package/build/dist/Types/ScheduledMaintenance/MaintenanceWindow.js +105 -0
  1316. package/build/dist/Types/ScheduledMaintenance/MaintenanceWindow.js.map +1 -0
  1317. package/build/dist/Types/StatusPage/IncidentSubscriberAudience.js.map +1 -1
  1318. package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js +3 -2
  1319. package/build/dist/Types/StatusPage/SubscriberNotificationTemplatePreview.js.map +1 -1
  1320. package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js +47 -22
  1321. package/build/dist/Types/StatusPage/SubscriberNotificationTemplateVariables.js.map +1 -1
  1322. package/build/dist/Types/Template/TemplateVariable.js +157 -0
  1323. package/build/dist/Types/Template/TemplateVariable.js.map +1 -0
  1324. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js +21 -54
  1325. package/build/dist/Types/Workspace/NotificationRules/NotificationRuleCondition.js.map +1 -1
  1326. package/build/dist/UI/Components/404.js +4 -2
  1327. package/build/dist/UI/Components/404.js.map +1 -1
  1328. package/build/dist/UI/Components/AI/GenerateFromAIModal.js +6 -4
  1329. package/build/dist/UI/Components/AI/GenerateFromAIModal.js.map +1 -1
  1330. package/build/dist/UI/Components/AIAgent/AIAgent.js +5 -2
  1331. package/build/dist/UI/Components/AIAgent/AIAgent.js.map +1 -1
  1332. package/build/dist/UI/Components/ActionButton/RowActions.js +23 -10
  1333. package/build/dist/UI/Components/ActionButton/RowActions.js.map +1 -1
  1334. package/build/dist/UI/Components/ActionButton/SplitActionButtons.js +19 -1
  1335. package/build/dist/UI/Components/ActionButton/SplitActionButtons.js.map +1 -1
  1336. package/build/dist/UI/Components/ActionCard/ActionCard.js +10 -1
  1337. package/build/dist/UI/Components/ActionCard/ActionCard.js.map +1 -1
  1338. package/build/dist/UI/Components/AdvancedPageSection/AdvancedPageSection.js +15 -0
  1339. package/build/dist/UI/Components/AdvancedPageSection/AdvancedPageSection.js.map +1 -0
  1340. package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js +8 -4
  1341. package/build/dist/UI/Components/AttachmentList/EventAttachmentList.js.map +1 -1
  1342. package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js +5 -4
  1343. package/build/dist/UI/Components/AttributesJSON/AttributesJSONPreferences.js.map +1 -1
  1344. package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js +11 -4
  1345. package/build/dist/UI/Components/AttributesJSON/AttributesJSONView.js.map +1 -1
  1346. package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js +8 -3
  1347. package/build/dist/UI/Components/AttributesJSON/AttributesViewToggle.js.map +1 -1
  1348. package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js +47 -23
  1349. package/build/dist/UI/Components/AttributesJSON/CopyAttributesAsJSONButton.js.map +1 -1
  1350. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js +4 -2
  1351. package/build/dist/UI/Components/AutocompleteTextInput/AutocompleteTextInput.js.map +1 -1
  1352. package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js +1 -1
  1353. package/build/dist/UI/Components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  1354. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js +35 -131
  1355. package/build/dist/UI/Components/BulkUpdate/BulkOwnerActions.js.map +1 -1
  1356. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js +57 -48
  1357. package/build/dist/UI/Components/BulkUpdate/BulkUpdateForm.js.map +1 -1
  1358. package/build/dist/UI/Components/Button/Button.js +1 -1
  1359. package/build/dist/UI/Components/Button/Button.js.map +1 -1
  1360. package/build/dist/UI/Components/Button/DropdownButton.js +1 -1
  1361. package/build/dist/UI/Components/Button/DropdownButton.js.map +1 -1
  1362. package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js +41 -28
  1363. package/build/dist/UI/Components/CSVFileUpload/CSVFileUpload.js.map +1 -1
  1364. package/build/dist/UI/Components/Captcha/Captcha.js +3 -1
  1365. package/build/dist/UI/Components/Captcha/Captcha.js.map +1 -1
  1366. package/build/dist/UI/Components/Card/CardMoreMenu.js +19 -0
  1367. package/build/dist/UI/Components/Card/CardMoreMenu.js.map +1 -0
  1368. package/build/dist/UI/Components/CardSelect/CardSelect.js +26 -16
  1369. package/build/dist/UI/Components/CardSelect/CardSelect.js.map +1 -1
  1370. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +10 -8
  1371. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  1372. package/build/dist/UI/Components/Charts/ChartGroup/NoDataMessage.js +3 -1
  1373. package/build/dist/UI/Components/Charts/ChartGroup/NoDataMessage.js.map +1 -1
  1374. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js +3 -3
  1375. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/AnnotationHoverCard.js.map +1 -1
  1376. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js +19 -5
  1377. package/build/dist/UI/Components/Charts/ChartLibrary/Annotations/ChartAnnotationLayer.js.map +1 -1
  1378. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +6 -4
  1379. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  1380. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +6 -4
  1381. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  1382. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +6 -4
  1383. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  1384. package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js +9 -4
  1385. package/build/dist/UI/Components/Charts/TimeRangeZoom/ResetTimeRangeZoomButton.js.map +1 -1
  1386. package/build/dist/UI/Components/Checkbox/Checkbox.js +5 -3
  1387. package/build/dist/UI/Components/Checkbox/Checkbox.js.map +1 -1
  1388. package/build/dist/UI/Components/CodeBlock/CodeBlock.js +3 -1
  1389. package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
  1390. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +52 -28
  1391. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  1392. package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js +11 -6
  1393. package/build/dist/UI/Components/CollapsibleSection/CollapsibleSection.js.map +1 -1
  1394. package/build/dist/UI/Components/ColorViewer/ColorViewer.js +10 -2
  1395. package/build/dist/UI/Components/ColorViewer/ColorViewer.js.map +1 -1
  1396. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js +5 -2
  1397. package/build/dist/UI/Components/CopyTextButton/CopyTextButton.js.map +1 -1
  1398. package/build/dist/UI/Components/CopyableButton/CopyableButton.js +4 -2
  1399. package/build/dist/UI/Components/CopyableButton/CopyableButton.js.map +1 -1
  1400. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js +7 -1
  1401. package/build/dist/UI/Components/CustomFields/CustomFieldsDetail.js.map +1 -1
  1402. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js +16 -7
  1403. package/build/dist/UI/Components/CustomFields/DropdownOptionsInput.js.map +1 -1
  1404. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js +63 -17
  1405. package/build/dist/UI/Components/CustomFields/MapFromCustomFieldInput.js.map +1 -1
  1406. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js +14 -11
  1407. package/build/dist/UI/Components/Dashboard/DashboardVariableControl.js.map +1 -1
  1408. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js +13 -12
  1409. package/build/dist/UI/Components/Date/CustomTimeRangeModal.js.map +1 -1
  1410. package/build/dist/UI/Components/Date/RangeStartAndEndDateEdit.js +18 -16
  1411. package/build/dist/UI/Components/Date/RangeStartAndEndDateEdit.js.map +1 -1
  1412. package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js +4 -1
  1413. package/build/dist/UI/Components/Date/RangeStartAndEndDateView.js.map +1 -1
  1414. package/build/dist/UI/Components/Date/StartAndEndDate.js +4 -2
  1415. package/build/dist/UI/Components/Date/StartAndEndDate.js.map +1 -1
  1416. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js +18 -8
  1417. package/build/dist/UI/Components/Date/TimeRangePickerDropdown.js.map +1 -1
  1418. package/build/dist/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.js +30 -5
  1419. package/build/dist/UI/Components/DeleteConfirmation/DeleteConfirmationMessage.js.map +1 -1
  1420. package/build/dist/UI/Components/Detail/BooleanValue.js +15 -0
  1421. package/build/dist/UI/Components/Detail/BooleanValue.js.map +1 -0
  1422. package/build/dist/UI/Components/Detail/Detail.js +75 -40
  1423. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  1424. package/build/dist/UI/Components/Detail/DetailIdLine.js +100 -0
  1425. package/build/dist/UI/Components/Detail/DetailIdLine.js.map +1 -0
  1426. package/build/dist/UI/Components/Detail/DetailRecordId.js +72 -0
  1427. package/build/dist/UI/Components/Detail/DetailRecordId.js.map +1 -0
  1428. package/build/dist/UI/Components/Detail/PlaceholderText.js +17 -1
  1429. package/build/dist/UI/Components/Detail/PlaceholderText.js.map +1 -1
  1430. package/build/dist/UI/Components/Dictionary/Dictionary.js +7 -1
  1431. package/build/dist/UI/Components/Dictionary/Dictionary.js.map +1 -1
  1432. package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js +4 -2
  1433. package/build/dist/UI/Components/Dictionary/DictionaryOfStingsViewer.js.map +1 -1
  1434. package/build/dist/UI/Components/Dropdown/Dropdown.js +5 -4
  1435. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  1436. package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js +19 -5
  1437. package/build/dist/UI/Components/DuplicateModel/DuplicateModel.js.map +1 -1
  1438. package/build/dist/UI/Components/EditionLabel/EditionLabel.js +177 -134
  1439. package/build/dist/UI/Components/EditionLabel/EditionLabel.js.map +1 -1
  1440. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +32 -26
  1441. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  1442. package/build/dist/UI/Components/ErrorBoundary.js +16 -13
  1443. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  1444. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js +2 -2
  1445. package/build/dist/UI/Components/ErrorMessage/ErrorMessage.js.map +1 -1
  1446. package/build/dist/UI/Components/EventItem/EventItem.js +8 -4
  1447. package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
  1448. package/build/dist/UI/Components/Events/RecurringViewElement.js +16 -5
  1449. package/build/dist/UI/Components/Events/RecurringViewElement.js.map +1 -1
  1450. package/build/dist/UI/Components/ExpandableText/ExpandableText.js +3 -1
  1451. package/build/dist/UI/Components/ExpandableText/ExpandableText.js.map +1 -1
  1452. package/build/dist/UI/Components/Feed/FeedActionsMenu.js +24 -0
  1453. package/build/dist/UI/Components/Feed/FeedActionsMenu.js.map +1 -0
  1454. package/build/dist/UI/Components/Feed/FeedCard.js +79 -0
  1455. package/build/dist/UI/Components/Feed/FeedCard.js.map +1 -0
  1456. package/build/dist/UI/Components/Feed/FeedEventTypeChecklist.js +122 -0
  1457. package/build/dist/UI/Components/Feed/FeedEventTypeChecklist.js.map +1 -0
  1458. package/build/dist/UI/Components/Feed/FeedFilterModal.js +23 -0
  1459. package/build/dist/UI/Components/Feed/FeedFilterModal.js.map +1 -0
  1460. package/build/dist/UI/Components/Feed/FeedFilterSummary.js +50 -0
  1461. package/build/dist/UI/Components/Feed/FeedFilterSummary.js.map +1 -0
  1462. package/build/dist/UI/Components/Feed/FeedItem.js +4 -1
  1463. package/build/dist/UI/Components/Feed/FeedItem.js.map +1 -1
  1464. package/build/dist/UI/Components/Feed/FeedMoreMenu.js +50 -0
  1465. package/build/dist/UI/Components/Feed/FeedMoreMenu.js.map +1 -0
  1466. package/build/dist/UI/Components/Feed/FeedOptions.js +29 -65
  1467. package/build/dist/UI/Components/Feed/FeedOptions.js.map +1 -1
  1468. package/build/dist/UI/Components/FilePicker/FilePicker.js +27 -27
  1469. package/build/dist/UI/Components/FilePicker/FilePicker.js.map +1 -1
  1470. package/build/dist/UI/Components/FilterButtons/FilterButtons.js +4 -2
  1471. package/build/dist/UI/Components/FilterButtons/FilterButtons.js.map +1 -1
  1472. package/build/dist/UI/Components/Filters/AppliedFilters.js +32 -0
  1473. package/build/dist/UI/Components/Filters/AppliedFilters.js.map +1 -0
  1474. package/build/dist/UI/Components/Filters/BooleanFilter.js +4 -1
  1475. package/build/dist/UI/Components/Filters/BooleanFilter.js.map +1 -1
  1476. package/build/dist/UI/Components/Filters/DateFilter.js +24 -5
  1477. package/build/dist/UI/Components/Filters/DateFilter.js.map +1 -1
  1478. package/build/dist/UI/Components/Filters/DropdownFilter.js +4 -1
  1479. package/build/dist/UI/Components/Filters/DropdownFilter.js.map +1 -1
  1480. package/build/dist/UI/Components/Filters/EntityFilter.js +28 -13
  1481. package/build/dist/UI/Components/Filters/EntityFilter.js.map +1 -1
  1482. package/build/dist/UI/Components/Filters/FilterPlaceholder.js +13 -0
  1483. package/build/dist/UI/Components/Filters/FilterPlaceholder.js.map +1 -0
  1484. package/build/dist/UI/Components/Filters/FilterViewer.js +81 -101
  1485. package/build/dist/UI/Components/Filters/FilterViewer.js.map +1 -1
  1486. package/build/dist/UI/Components/Filters/FiltersForm.js +15 -4
  1487. package/build/dist/UI/Components/Filters/FiltersForm.js.map +1 -1
  1488. package/build/dist/UI/Components/Filters/NumberFilter.js +26 -9
  1489. package/build/dist/UI/Components/Filters/NumberFilter.js.map +1 -1
  1490. package/build/dist/UI/Components/Filters/TextFilter.js +23 -8
  1491. package/build/dist/UI/Components/Filters/TextFilter.js.map +1 -1
  1492. package/build/dist/UI/Components/FormModal/BasicFormModal.js +51 -6
  1493. package/build/dist/UI/Components/FormModal/BasicFormModal.js.map +1 -1
  1494. package/build/dist/UI/Components/Forms/BasicForm.js +139 -23
  1495. package/build/dist/UI/Components/Forms/BasicForm.js.map +1 -1
  1496. package/build/dist/UI/Components/Forms/BasicModelForm.js +1 -1
  1497. package/build/dist/UI/Components/Forms/BasicModelForm.js.map +1 -1
  1498. package/build/dist/UI/Components/Forms/CollapsibleFormSection.js +16 -3
  1499. package/build/dist/UI/Components/Forms/CollapsibleFormSection.js.map +1 -1
  1500. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js +4 -2
  1501. package/build/dist/UI/Components/Forms/Fields/ColorPicker.js.map +1 -1
  1502. package/build/dist/UI/Components/Forms/Fields/FormField.js +124 -62
  1503. package/build/dist/UI/Components/Forms/Fields/FormField.js.map +1 -1
  1504. package/build/dist/UI/Components/Forms/Fields/GeneratedKeyField.js +146 -0
  1505. package/build/dist/UI/Components/Forms/Fields/GeneratedKeyField.js.map +1 -0
  1506. package/build/dist/UI/Components/Forms/Fields/IconPicker.js +5 -3
  1507. package/build/dist/UI/Components/Forms/Fields/IconPicker.js.map +1 -1
  1508. package/build/dist/UI/Components/Forms/Fields/PermissionPicker.js +5 -3
  1509. package/build/dist/UI/Components/Forms/Fields/PermissionPicker.js.map +1 -1
  1510. package/build/dist/UI/Components/Forms/FormSummary.js +97 -15
  1511. package/build/dist/UI/Components/Forms/FormSummary.js.map +1 -1
  1512. package/build/dist/UI/Components/Forms/ModelForm.js +110 -10
  1513. package/build/dist/UI/Components/Forms/ModelForm.js.map +1 -1
  1514. package/build/dist/UI/Components/Forms/Steps/Steps.js +3 -1
  1515. package/build/dist/UI/Components/Forms/Steps/Steps.js.map +1 -1
  1516. package/build/dist/UI/Components/Forms/Types/Field.js.map +1 -1
  1517. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js +5 -0
  1518. package/build/dist/UI/Components/Forms/Types/FormFieldSchemaType.js.map +1 -1
  1519. package/build/dist/UI/Components/Forms/Utils/AdvancedFormSection.js +151 -0
  1520. package/build/dist/UI/Components/Forms/Utils/AdvancedFormSection.js.map +1 -0
  1521. package/build/dist/UI/Components/Forms/Utils/CreateFormDefaults.js +92 -0
  1522. package/build/dist/UI/Components/Forms/Utils/CreateFormDefaults.js.map +1 -0
  1523. package/build/dist/UI/Components/Forms/Utils/FinishFromAnyStep.js +132 -0
  1524. package/build/dist/UI/Components/Forms/Utils/FinishFromAnyStep.js.map +1 -0
  1525. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js +2 -0
  1526. package/build/dist/UI/Components/Forms/Utils/FormFieldSchemaTypeUtil.js.map +1 -1
  1527. package/build/dist/UI/Components/Forms/Utils/FormModalWidth.js +43 -0
  1528. package/build/dist/UI/Components/Forms/Utils/FormModalWidth.js.map +1 -0
  1529. package/build/dist/UI/Components/Forms/Validation.js +51 -34
  1530. package/build/dist/UI/Components/Forms/Validation.js.map +1 -1
  1531. package/build/dist/UI/Components/FullPageModal/FullPageModal.js +3 -1
  1532. package/build/dist/UI/Components/FullPageModal/FullPageModal.js.map +1 -1
  1533. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +6 -5
  1534. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  1535. package/build/dist/UI/Components/Header/Notifications/Notifications.js +5 -5
  1536. package/build/dist/UI/Components/Header/Notifications/Notifications.js.map +1 -1
  1537. package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js +3 -1
  1538. package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js.map +1 -1
  1539. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js +3 -1
  1540. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js.map +1 -1
  1541. package/build/dist/UI/Components/Header/SearchBox.js +3 -1
  1542. package/build/dist/UI/Components/Header/SearchBox.js.map +1 -1
  1543. package/build/dist/UI/Components/HeaderAlert/HeaderModelAlert.js +3 -1
  1544. package/build/dist/UI/Components/HeaderAlert/HeaderModelAlert.js.map +1 -1
  1545. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBell.js +3 -1
  1546. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBell.js.map +1 -1
  1547. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js +4 -2
  1548. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellDropdown.js.map +1 -1
  1549. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellSection.js +3 -1
  1550. package/build/dist/UI/Components/HeaderAlert/NotificationBell/NotificationBellSection.js.map +1 -1
  1551. package/build/dist/UI/Components/HiddenText/HiddenText.js +3 -1
  1552. package/build/dist/UI/Components/HiddenText/HiddenText.js.map +1 -1
  1553. package/build/dist/UI/Components/Icon/Icon.js +5 -4
  1554. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  1555. package/build/dist/UI/Components/ImportExport/ExportModelCard.js +13 -2
  1556. package/build/dist/UI/Components/ImportExport/ExportModelCard.js.map +1 -1
  1557. package/build/dist/UI/Components/ImportExport/ImportModelsModal.js +38 -7
  1558. package/build/dist/UI/Components/ImportExport/ImportModelsModal.js.map +1 -1
  1559. package/build/dist/UI/Components/Input/Input.js +27 -3
  1560. package/build/dist/UI/Components/Input/Input.js.map +1 -1
  1561. package/build/dist/UI/Components/IpAddressList/IpAddressList.js +8 -5
  1562. package/build/dist/UI/Components/IpAddressList/IpAddressList.js.map +1 -1
  1563. package/build/dist/UI/Components/JSONTable/JSONTable.js +10 -8
  1564. package/build/dist/UI/Components/JSONTable/JSONTable.js.map +1 -1
  1565. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js +45 -32
  1566. package/build/dist/UI/Components/LabelRule/ImportLabelRulesModal.js.map +1 -1
  1567. package/build/dist/UI/Components/Link/Link.js +5 -2
  1568. package/build/dist/UI/Components/Link/Link.js.map +1 -1
  1569. package/build/dist/UI/Components/List/List.js +78 -14
  1570. package/build/dist/UI/Components/List/List.js.map +1 -1
  1571. package/build/dist/UI/Components/List/ListBody.js +11 -4
  1572. package/build/dist/UI/Components/List/ListBody.js.map +1 -1
  1573. package/build/dist/UI/Components/List/ListRow.js +10 -12
  1574. package/build/dist/UI/Components/List/ListRow.js.map +1 -1
  1575. package/build/dist/UI/Components/List/ListSkeleton.js +3 -1
  1576. package/build/dist/UI/Components/List/ListSkeleton.js.map +1 -1
  1577. package/build/dist/UI/Components/Loader/Loader.js +6 -4
  1578. package/build/dist/UI/Components/Loader/Loader.js.map +1 -1
  1579. package/build/dist/UI/Components/LogsViewer/LogsViewer.js +34 -5
  1580. package/build/dist/UI/Components/LogsViewer/LogsViewer.js.map +1 -1
  1581. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js +15 -7
  1582. package/build/dist/UI/Components/LogsViewer/components/ActiveFilterChips.js.map +1 -1
  1583. package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js +20 -16
  1584. package/build/dist/UI/Components/LogsViewer/components/ColumnSelector.js.map +1 -1
  1585. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js +8 -4
  1586. package/build/dist/UI/Components/LogsViewer/components/FacetValueRow.js.map +1 -1
  1587. package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js +3 -1
  1588. package/build/dist/UI/Components/LogsViewer/components/HistogramTooltip.js.map +1 -1
  1589. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js +8 -7
  1590. package/build/dist/UI/Components/LogsViewer/components/KeyboardShortcutsHelp.js.map +1 -1
  1591. package/build/dist/UI/Components/LogsViewer/components/LiveLogsToggle.js +3 -1
  1592. package/build/dist/UI/Components/LogsViewer/components/LiveLogsToggle.js.map +1 -1
  1593. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js +24 -22
  1594. package/build/dist/UI/Components/LogsViewer/components/LogDetailsPanel.js.map +1 -1
  1595. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js +7 -3
  1596. package/build/dist/UI/Components/LogsViewer/components/LogSearchBar.js.map +1 -1
  1597. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js +13 -15
  1598. package/build/dist/UI/Components/LogsViewer/components/LogSearchHelp.js.map +1 -1
  1599. package/build/dist/UI/Components/LogsViewer/components/LogSearchSuggestions.js +4 -5
  1600. package/build/dist/UI/Components/LogsViewer/components/LogSearchSuggestions.js.map +1 -1
  1601. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +13 -6
  1602. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  1603. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js +3 -1
  1604. package/build/dist/UI/Components/LogsViewer/components/LogsFacetSidebar.js.map +1 -1
  1605. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +7 -5
  1606. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  1607. package/build/dist/UI/Components/LogsViewer/components/LogsPagination.js +1 -1
  1608. package/build/dist/UI/Components/LogsViewer/components/LogsPagination.js.map +1 -1
  1609. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js +32 -18
  1610. package/build/dist/UI/Components/LogsViewer/components/LogsTable.js.map +1 -1
  1611. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js +32 -22
  1612. package/build/dist/UI/Components/LogsViewer/components/LogsViewerToolbar.js.map +1 -1
  1613. package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js +17 -11
  1614. package/build/dist/UI/Components/LogsViewer/components/SavedViewsDropdown.js.map +1 -1
  1615. package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js +3 -1
  1616. package/build/dist/UI/Components/Markdown.tsx/LazyMarkdownViewer.js.map +1 -1
  1617. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js +17 -0
  1618. package/build/dist/UI/Components/Markdown.tsx/MarkdownConverters.js.map +1 -1
  1619. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +674 -112
  1620. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js.map +1 -1
  1621. package/build/dist/UI/Components/Markdown.tsx/MarkdownToolbarLayout.js +150 -0
  1622. package/build/dist/UI/Components/Markdown.tsx/MarkdownToolbarLayout.js.map +1 -0
  1623. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +18 -7
  1624. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  1625. package/build/dist/UI/Components/MasterPage/MasterPage.js +3 -1
  1626. package/build/dist/UI/Components/MasterPage/MasterPage.js.map +1 -1
  1627. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js +30 -28
  1628. package/build/dist/UI/Components/MemberRoleAssignment/MemberRoleAssignment.js.map +1 -1
  1629. package/build/dist/UI/Components/ModelDelete/ModelDelete.js +19 -4
  1630. package/build/dist/UI/Components/ModelDelete/ModelDelete.js.map +1 -1
  1631. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js +15 -3
  1632. package/build/dist/UI/Components/ModelDetail/CardModelDetail.js.map +1 -1
  1633. package/build/dist/UI/Components/ModelDetail/ModelDetail.js +10 -5
  1634. package/build/dist/UI/Components/ModelDetail/ModelDetail.js.map +1 -1
  1635. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js +36 -12
  1636. package/build/dist/UI/Components/ModelFormModal/ModelFormModal.js.map +1 -1
  1637. package/build/dist/UI/Components/ModelList/ModelList.js +53 -7
  1638. package/build/dist/UI/Components/ModelList/ModelList.js.map +1 -1
  1639. package/build/dist/UI/Components/ModelList/StaticModelList.js +14 -7
  1640. package/build/dist/UI/Components/ModelList/StaticModelList.js.map +1 -1
  1641. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +451 -220
  1642. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  1643. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js +46 -39
  1644. package/build/dist/UI/Components/ModelTable/ColumnCustomizationModal.js.map +1 -1
  1645. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +2 -1
  1646. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
  1647. package/build/dist/UI/Components/ModelTable/EmptyStateOptions.js +2 -0
  1648. package/build/dist/UI/Components/ModelTable/EmptyStateOptions.js.map +1 -0
  1649. package/build/dist/UI/Components/ModelTable/ModelTable.js +29 -5
  1650. package/build/dist/UI/Components/ModelTable/ModelTable.js.map +1 -1
  1651. package/build/dist/UI/Components/ModelTable/ModelTableEmptyState.js +191 -0
  1652. package/build/dist/UI/Components/ModelTable/ModelTableEmptyState.js.map +1 -0
  1653. package/build/dist/UI/Components/ModelTable/TableView.js +9 -5
  1654. package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
  1655. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js +3 -1
  1656. package/build/dist/UI/Components/Monitor/SeriesLabelsViewer.js.map +1 -1
  1657. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js +23 -1
  1658. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesCatalog.js.map +1 -1
  1659. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js +28 -22
  1660. package/build/dist/UI/Components/MonitorTemplateVariables/TemplateVariablesModal.js.map +1 -1
  1661. package/build/dist/UI/Components/MoreMenu/MoreMenu.js +24 -11
  1662. package/build/dist/UI/Components/MoreMenu/MoreMenu.js.map +1 -1
  1663. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js +16 -4
  1664. package/build/dist/UI/Components/MoreMenu/MoreMenuItem.js.map +1 -1
  1665. package/build/dist/UI/Components/Navbar/NavBar.js +11 -19
  1666. package/build/dist/UI/Components/Navbar/NavBar.js.map +1 -1
  1667. package/build/dist/UI/Components/Navbar/NavBarCategoryToggle.js +44 -0
  1668. package/build/dist/UI/Components/Navbar/NavBarCategoryToggle.js.map +1 -0
  1669. package/build/dist/UI/Components/Navbar/NavBarMenuCatalog.js +154 -0
  1670. package/build/dist/UI/Components/Navbar/NavBarMenuCatalog.js.map +1 -0
  1671. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +210 -86
  1672. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  1673. package/build/dist/UI/Components/Navbar/NavBarMobileMenu.js +57 -0
  1674. package/build/dist/UI/Components/Navbar/NavBarMobileMenu.js.map +1 -0
  1675. package/build/dist/UI/Components/ObjectID/ObjectIDView.js +31 -5
  1676. package/build/dist/UI/Components/ObjectID/ObjectIDView.js.map +1 -1
  1677. package/build/dist/UI/Components/OsVersionDisplay/OsVersionDisplay.js +7 -1
  1678. package/build/dist/UI/Components/OsVersionDisplay/OsVersionDisplay.js.map +1 -1
  1679. package/build/dist/UI/Components/Page/ModelPage.js +8 -2
  1680. package/build/dist/UI/Components/Page/ModelPage.js.map +1 -1
  1681. package/build/dist/UI/Components/Page/Page.js +1 -1
  1682. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  1683. package/build/dist/UI/Components/Pagination/Pagination.js +143 -65
  1684. package/build/dist/UI/Components/Pagination/Pagination.js.map +1 -1
  1685. package/build/dist/UI/Components/Pagination/PaginationCopy.js +51 -0
  1686. package/build/dist/UI/Components/Pagination/PaginationCopy.js.map +1 -0
  1687. package/build/dist/UI/Components/Pagination/PaginationSummary.js +53 -0
  1688. package/build/dist/UI/Components/Pagination/PaginationSummary.js.map +1 -0
  1689. package/build/dist/UI/Components/PeoplePicker/OwnersFormField.js +59 -0
  1690. package/build/dist/UI/Components/PeoplePicker/OwnersFormField.js.map +1 -0
  1691. package/build/dist/UI/Components/PeoplePicker/OwnersPicker.js +30 -0
  1692. package/build/dist/UI/Components/PeoplePicker/OwnersPicker.js.map +1 -0
  1693. package/build/dist/UI/Components/PeoplePicker/PeopleAvatar.js +109 -0
  1694. package/build/dist/UI/Components/PeoplePicker/PeopleAvatar.js.map +1 -0
  1695. package/build/dist/UI/Components/PeoplePicker/PeopleList.js +72 -0
  1696. package/build/dist/UI/Components/PeoplePicker/PeopleList.js.map +1 -0
  1697. package/build/dist/UI/Components/PeoplePicker/PeoplePicker.js +93 -0
  1698. package/build/dist/UI/Components/PeoplePicker/PeoplePicker.js.map +1 -0
  1699. package/build/dist/UI/Components/PeoplePicker/PeoplePickerKinds.js +379 -0
  1700. package/build/dist/UI/Components/PeoplePicker/PeoplePickerKinds.js.map +1 -0
  1701. package/build/dist/UI/Components/PeoplePicker/PeoplePickerTypes.js +129 -0
  1702. package/build/dist/UI/Components/PeoplePicker/PeoplePickerTypes.js.map +1 -0
  1703. package/build/dist/UI/Components/PeoplePicker/PeopleSearchPopup.js +280 -0
  1704. package/build/dist/UI/Components/PeoplePicker/PeopleSearchPopup.js.map +1 -0
  1705. package/build/dist/UI/Components/PeoplePicker/usePeopleOptions.js +151 -0
  1706. package/build/dist/UI/Components/PeoplePicker/usePeopleOptions.js.map +1 -0
  1707. package/build/dist/UI/Components/Pill/Pill.js +14 -3
  1708. package/build/dist/UI/Components/Pill/Pill.js.map +1 -1
  1709. package/build/dist/UI/Components/Pill/PillColors.js +22 -181
  1710. package/build/dist/UI/Components/Pill/PillColors.js.map +1 -1
  1711. package/build/dist/UI/Components/Probe/Probe.js +4 -2
  1712. package/build/dist/UI/Components/Probe/Probe.js.map +1 -1
  1713. package/build/dist/UI/Components/ProgressBar/ProgressBar.js +14 -7
  1714. package/build/dist/UI/Components/ProgressBar/ProgressBar.js.map +1 -1
  1715. package/build/dist/UI/Components/ProgressButtons/ProgressButtons.js +3 -1
  1716. package/build/dist/UI/Components/ProgressButtons/ProgressButtons.js.map +1 -1
  1717. package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js +27 -8
  1718. package/build/dist/UI/Components/ProjectInvitations/PendingProjectInvitations.js.map +1 -1
  1719. package/build/dist/UI/Components/PublicForm/PublicFormFields.js +248 -0
  1720. package/build/dist/UI/Components/PublicForm/PublicFormFields.js.map +1 -0
  1721. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js +15 -2
  1722. package/build/dist/UI/Components/ResetObjectID/ResetObjectID.js.map +1 -1
  1723. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js +215 -335
  1724. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaBuilder.js.map +1 -1
  1725. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaFields.js +585 -0
  1726. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaFields.js.map +1 -0
  1727. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js +32 -6
  1728. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelForm.js.map +1 -1
  1729. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js +69 -16
  1730. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaModelTable.js.map +1 -1
  1731. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js +18 -19
  1732. package/build/dist/UI/Components/RuleCriteria/RuleCriteriaSummary.js.map +1 -1
  1733. package/build/dist/UI/Components/RuleRun/RuleDetailFields.js +53 -2
  1734. package/build/dist/UI/Components/RuleRun/RuleDetailFields.js.map +1 -1
  1735. package/build/dist/UI/Components/RuleRun/RuleEnabledField.js +41 -0
  1736. package/build/dist/UI/Components/RuleRun/RuleEnabledField.js.map +1 -0
  1737. package/build/dist/UI/Components/RuleRun/RuleTable.js +9 -1
  1738. package/build/dist/UI/Components/RuleRun/RuleTable.js.map +1 -1
  1739. package/build/dist/UI/Components/RuleRun/RuleView.js +11 -4
  1740. package/build/dist/UI/Components/RuleRun/RuleView.js.map +1 -1
  1741. package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js +8 -1
  1742. package/build/dist/UI/Components/RuleRun/RunRuleNowModal.js.map +1 -1
  1743. package/build/dist/UI/Components/Runbook/StepTimeoutInput.js +12 -13
  1744. package/build/dist/UI/Components/Runbook/StepTimeoutInput.js.map +1 -1
  1745. package/build/dist/UI/Components/SavedViews/SavedViewsFacetSection.js +19 -8
  1746. package/build/dist/UI/Components/SavedViews/SavedViewsFacetSection.js.map +1 -1
  1747. package/build/dist/UI/Components/SavedViews/SavedViewsSearchInput.js +5 -2
  1748. package/build/dist/UI/Components/SavedViews/SavedViewsSearchInput.js.map +1 -1
  1749. package/build/dist/UI/Components/SavedViews/SavedViewsShowMoreButton.js +5 -1
  1750. package/build/dist/UI/Components/SavedViews/SavedViewsShowMoreButton.js.map +1 -1
  1751. package/build/dist/UI/Components/SideMenu/SideMenu.js +4 -6
  1752. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  1753. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  1754. package/build/dist/UI/Components/SideMenu/SideMenuSectionState.js +52 -9
  1755. package/build/dist/UI/Components/SideMenu/SideMenuSectionState.js.map +1 -1
  1756. package/build/dist/UI/Components/SideOver/SideOver.js +9 -6
  1757. package/build/dist/UI/Components/SideOver/SideOver.js.map +1 -1
  1758. package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js +3 -1
  1759. package/build/dist/UI/Components/SimpleLogViewer/SimpleLogViewer.js.map +1 -1
  1760. package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js +3 -1
  1761. package/build/dist/UI/Components/StackedProgressBar/StackedProgressBar.js.map +1 -1
  1762. package/build/dist/UI/Components/StateTimeline/CurrentlyActiveIndicator.js +28 -0
  1763. package/build/dist/UI/Components/StateTimeline/CurrentlyActiveIndicator.js.map +1 -0
  1764. package/build/dist/UI/Components/StateTimeline/StateTimelineColumns.js +55 -0
  1765. package/build/dist/UI/Components/StateTimeline/StateTimelineColumns.js.map +1 -0
  1766. package/build/dist/UI/Components/StateTimeline/StateTimelineDuration.js +28 -0
  1767. package/build/dist/UI/Components/StateTimeline/StateTimelineDuration.js.map +1 -0
  1768. package/build/dist/UI/Components/StateTimeline/StateTimelineEndsAt.js +19 -0
  1769. package/build/dist/UI/Components/StateTimeline/StateTimelineEndsAt.js.map +1 -0
  1770. package/build/dist/UI/Components/StatusBadge/StatusBadge.js +4 -1
  1771. package/build/dist/UI/Components/StatusBadge/StatusBadge.js.map +1 -1
  1772. package/build/dist/UI/Components/StatusBubble/StatusBubble.js +7 -2
  1773. package/build/dist/UI/Components/StatusBubble/StatusBubble.js.map +1 -1
  1774. package/build/dist/UI/Components/StatusPage/ResourceGrid.js +31 -20
  1775. package/build/dist/UI/Components/StatusPage/ResourceGrid.js.map +1 -1
  1776. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js +34 -16
  1777. package/build/dist/UI/Components/StatusPage/ResourceGroupNavigator.js.map +1 -1
  1778. package/build/dist/UI/Components/StatusPage/ResourceList.js +28 -11
  1779. package/build/dist/UI/Components/StatusPage/ResourceList.js.map +1 -1
  1780. package/build/dist/UI/Components/Table/DragHandle.js +30 -0
  1781. package/build/dist/UI/Components/Table/DragHandle.js.map +1 -0
  1782. package/build/dist/UI/Components/Table/EmptyTableMessage.js +159 -35
  1783. package/build/dist/UI/Components/Table/EmptyTableMessage.js.map +1 -1
  1784. package/build/dist/UI/Components/Table/Table.js +140 -50
  1785. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  1786. package/build/dist/UI/Components/Table/TableBody.js +26 -2
  1787. package/build/dist/UI/Components/Table/TableBody.js.map +1 -1
  1788. package/build/dist/UI/Components/Table/TableEmptyState.js +118 -0
  1789. package/build/dist/UI/Components/Table/TableEmptyState.js.map +1 -0
  1790. package/build/dist/UI/Components/Table/TableEmptyStateBuilders.js +114 -0
  1791. package/build/dist/UI/Components/Table/TableEmptyStateBuilders.js.map +1 -0
  1792. package/build/dist/UI/Components/Table/TableRow.js +46 -20
  1793. package/build/dist/UI/Components/Table/TableRow.js.map +1 -1
  1794. package/build/dist/UI/Components/Table/TableSkeletonRows.js +4 -2
  1795. package/build/dist/UI/Components/Table/TableSkeletonRows.js.map +1 -1
  1796. package/build/dist/UI/Components/TableColumnList/TableColumnListComponent.js +11 -2
  1797. package/build/dist/UI/Components/TableColumnList/TableColumnListComponent.js.map +1 -1
  1798. package/build/dist/UI/Components/Tabs/Tabs.js +3 -1
  1799. package/build/dist/UI/Components/Tabs/Tabs.js.map +1 -1
  1800. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js +27 -8
  1801. package/build/dist/UI/Components/TelemetryViewer/FacetVisibility.js.map +1 -1
  1802. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +31 -9
  1803. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  1804. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js +9 -2
  1805. package/build/dist/UI/Components/TelemetryViewer/components/FacetSearchInput.js.map +1 -1
  1806. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js +5 -1
  1807. package/build/dist/UI/Components/TelemetryViewer/components/FacetShowMoreButton.js.map +1 -1
  1808. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js +8 -3
  1809. package/build/dist/UI/Components/TelemetryViewer/components/HiddenFacetsFooter.js.map +1 -1
  1810. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js +56 -27
  1811. package/build/dist/UI/Components/TelemetryViewer/components/LockedFilterChip.js.map +1 -1
  1812. package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js +17 -11
  1813. package/build/dist/UI/Components/TelemetryViewer/components/SavedViewsDropdown.js.map +1 -1
  1814. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js +9 -3
  1815. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryActiveFilterChips.js.map +1 -1
  1816. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js +4 -2
  1817. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryDetailPanel.js.map +1 -1
  1818. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js +3 -1
  1819. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetSidebar.js.map +1 -1
  1820. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js +8 -4
  1821. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryFacetValueRow.js.map +1 -1
  1822. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +9 -5
  1823. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  1824. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js +3 -1
  1825. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogramTooltip.js.map +1 -1
  1826. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryItemLabel.js +11 -0
  1827. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryItemLabel.js.map +1 -0
  1828. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryPagination.js +3 -10
  1829. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryPagination.js.map +1 -1
  1830. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryResultTotal.js +60 -0
  1831. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryResultTotal.js.map +1 -0
  1832. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +5 -3
  1833. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  1834. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchHelp.js +13 -13
  1835. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchHelp.js.map +1 -1
  1836. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchSuggestions.js +4 -5
  1837. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchSuggestions.js.map +1 -1
  1838. package/build/dist/UI/Components/TemplateVariables/InsertTemplateVariableButton.js +90 -0
  1839. package/build/dist/UI/Components/TemplateVariables/InsertTemplateVariableButton.js.map +1 -0
  1840. package/build/dist/UI/Components/TemplateVariables/TemplateVariableIcons.js +15 -0
  1841. package/build/dist/UI/Components/TemplateVariables/TemplateVariableIcons.js.map +1 -0
  1842. package/build/dist/UI/Components/TemplateVariables/TemplateVariableMenu.js +159 -0
  1843. package/build/dist/UI/Components/TemplateVariables/TemplateVariableMenu.js.map +1 -0
  1844. package/build/dist/UI/Components/TemplateVariables/TemplateVariablePopup.js +160 -0
  1845. package/build/dist/UI/Components/TemplateVariables/TemplateVariablePopup.js.map +1 -0
  1846. package/build/dist/UI/Components/TemplateVariables/TemplateVariableTextControl.js +73 -0
  1847. package/build/dist/UI/Components/TemplateVariables/TemplateVariableTextControl.js.map +1 -0
  1848. package/build/dist/UI/Components/TemplateVariables/TemplateVariablesCopy.js +28 -0
  1849. package/build/dist/UI/Components/TemplateVariables/TemplateVariablesCopy.js.map +1 -0
  1850. package/build/dist/UI/Components/TemplateVariables/TemplateVariablesList.js +98 -0
  1851. package/build/dist/UI/Components/TemplateVariables/TemplateVariablesList.js.map +1 -0
  1852. package/build/dist/UI/Components/TemplateVariables/TextControlUtil.js +197 -0
  1853. package/build/dist/UI/Components/TemplateVariables/TextControlUtil.js.map +1 -0
  1854. package/build/dist/UI/Components/TemplateVariables/useTemplateVariableTyping.js +184 -0
  1855. package/build/dist/UI/Components/TemplateVariables/useTemplateVariableTyping.js.map +1 -0
  1856. package/build/dist/UI/Components/TimePicker/TimePicker.js +22 -21
  1857. package/build/dist/UI/Components/TimePicker/TimePicker.js.map +1 -1
  1858. package/build/dist/UI/Components/Toggle/Toggle.js +39 -25
  1859. package/build/dist/UI/Components/Toggle/Toggle.js.map +1 -1
  1860. package/build/dist/UI/Components/Tooltip/InfoTooltip.js +6 -1
  1861. package/build/dist/UI/Components/Tooltip/InfoTooltip.js.map +1 -1
  1862. package/build/dist/UI/Components/Tooltip/Tooltip.js +5 -3
  1863. package/build/dist/UI/Components/Tooltip/Tooltip.js.map +1 -1
  1864. package/build/dist/UI/Components/TranslatedSentence/TranslatedSentence.js +22 -0
  1865. package/build/dist/UI/Components/TranslatedSentence/TranslatedSentence.js.map +1 -0
  1866. package/build/dist/UI/Components/Workflow/ArgumentsForm.js +23 -9
  1867. package/build/dist/UI/Components/Workflow/ArgumentsForm.js.map +1 -1
  1868. package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnPicker.js +15 -14
  1869. package/build/dist/UI/Components/Workflow/ColumnEditor/AddColumnPicker.js.map +1 -1
  1870. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.js +8 -6
  1871. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnConditionRow.js.map +1 -1
  1872. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnControl.js +22 -14
  1873. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnControl.js.map +1 -1
  1874. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.js +15 -12
  1875. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnFieldRow.js.map +1 -1
  1876. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnOperators.js +15 -14
  1877. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnOperators.js.map +1 -1
  1878. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.js +2 -1
  1879. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnPickerOptions.js.map +1 -1
  1880. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnRowSerialization.js +3 -2
  1881. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnRowSerialization.js.map +1 -1
  1882. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnValueInput.js +13 -6
  1883. package/build/dist/UI/Components/Workflow/ColumnEditor/ColumnValueInput.js.map +1 -1
  1884. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js +9 -6
  1885. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelQueryBuilder.js.map +1 -1
  1886. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelRecordForm.js +20 -10
  1887. package/build/dist/UI/Components/Workflow/ColumnEditor/ModelRecordForm.js.map +1 -1
  1888. package/build/dist/UI/Components/Workflow/Component.js +7 -3
  1889. package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
  1890. package/build/dist/UI/Components/Workflow/ComponentArgumentsViewer.js +10 -3
  1891. package/build/dist/UI/Components/Workflow/ComponentArgumentsViewer.js.map +1 -1
  1892. package/build/dist/UI/Components/Workflow/ComponentPicker/PickerItems.js +33 -15
  1893. package/build/dist/UI/Components/Workflow/ComponentPicker/PickerItems.js.map +1 -1
  1894. package/build/dist/UI/Components/Workflow/ComponentPortViewer.js +3 -1
  1895. package/build/dist/UI/Components/Workflow/ComponentPortViewer.js.map +1 -1
  1896. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +7 -2
  1897. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
  1898. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js +15 -6
  1899. package/build/dist/UI/Components/Workflow/ComponentSettingsModal.js.map +1 -1
  1900. package/build/dist/UI/Components/Workflow/ComponentSettingsSection.js +4 -2
  1901. package/build/dist/UI/Components/Workflow/ComponentSettingsSection.js.map +1 -1
  1902. package/build/dist/UI/Components/Workflow/ComponentsModal.js +67 -48
  1903. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  1904. package/build/dist/UI/Components/Workflow/Condition/ConditionEditor.js +35 -17
  1905. package/build/dist/UI/Components/Workflow/Condition/ConditionEditor.js.map +1 -1
  1906. package/build/dist/UI/Components/Workflow/Condition/ConditionModel.js +23 -11
  1907. package/build/dist/UI/Components/Workflow/Condition/ConditionModel.js.map +1 -1
  1908. package/build/dist/UI/Components/Workflow/CronScheduleField.js +25 -24
  1909. package/build/dist/UI/Components/Workflow/CronScheduleField.js.map +1 -1
  1910. package/build/dist/UI/Components/Workflow/DocumentationViewer.js +10 -2
  1911. package/build/dist/UI/Components/Workflow/DocumentationViewer.js.map +1 -1
  1912. package/build/dist/UI/Components/Workflow/GraphLint.js +40 -13
  1913. package/build/dist/UI/Components/Workflow/GraphLint.js.map +1 -1
  1914. package/build/dist/UI/Components/Workflow/GraphLintSummary.js +16 -7
  1915. package/build/dist/UI/Components/Workflow/GraphLintSummary.js.map +1 -1
  1916. package/build/dist/UI/Components/Workflow/ManualTriggerPanel.js +11 -8
  1917. package/build/dist/UI/Components/Workflow/ManualTriggerPanel.js.map +1 -1
  1918. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js +47 -38
  1919. package/build/dist/UI/Components/Workflow/ModelColumnEditor.js.map +1 -1
  1920. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js +54 -37
  1921. package/build/dist/UI/Components/Workflow/ModelFieldPicker.js.map +1 -1
  1922. package/build/dist/UI/Components/Workflow/RunForm.js +13 -5
  1923. package/build/dist/UI/Components/Workflow/RunForm.js.map +1 -1
  1924. package/build/dist/UI/Components/Workflow/RunStatusWatcher.js +27 -6
  1925. package/build/dist/UI/Components/Workflow/RunStatusWatcher.js.map +1 -1
  1926. package/build/dist/UI/Components/Workflow/StepTraceViewer.js +68 -44
  1927. package/build/dist/UI/Components/Workflow/StepTraceViewer.js.map +1 -1
  1928. package/build/dist/UI/Components/Workflow/UseRunWatch.js +2 -2
  1929. package/build/dist/UI/Components/Workflow/UseRunWatch.js.map +1 -1
  1930. package/build/dist/UI/Components/Workflow/Utils.js +4 -1
  1931. package/build/dist/UI/Components/Workflow/Utils.js.map +1 -1
  1932. package/build/dist/UI/Components/Workflow/ValuePicker/InsertValueButton.js +4 -2
  1933. package/build/dist/UI/Components/Workflow/ValuePicker/InsertValueButton.js.map +1 -1
  1934. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerMenu.js +60 -48
  1935. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerMenu.js.map +1 -1
  1936. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerPopup.js +3 -1
  1937. package/build/dist/UI/Components/Workflow/ValuePicker/ValuePickerPopup.js.map +1 -1
  1938. package/build/dist/UI/Components/Workflow/ValuePicker/ValueSingleField.js +6 -3
  1939. package/build/dist/UI/Components/Workflow/ValuePicker/ValueSingleField.js.map +1 -1
  1940. package/build/dist/UI/Components/Workflow/ValuePicker/ValueTextField.js +7 -4
  1941. package/build/dist/UI/Components/Workflow/ValuePicker/ValueTextField.js.map +1 -1
  1942. package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js +21 -20
  1943. package/build/dist/UI/Components/Workflow/WorkflowIssuesModal.js.map +1 -1
  1944. package/build/dist/UI/Components/Workflow/WorkflowLogModal.js +9 -5
  1945. package/build/dist/UI/Components/Workflow/WorkflowLogModal.js.map +1 -1
  1946. package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js +16 -9
  1947. package/build/dist/UI/Components/Workflow/WorkflowStatusBar.js.map +1 -1
  1948. package/build/dist/UI/Types/UseAnchoredFieldPopup.js +2 -2
  1949. package/build/dist/UI/Types/UseAnchoredFieldPopup.js.map +1 -1
  1950. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js +2 -4
  1951. package/build/dist/UI/Utils/AnalyticsModelAPI/AnalyticsModelAPI.js.map +1 -1
  1952. package/build/dist/UI/Utils/Dropdown.js +74 -2
  1953. package/build/dist/UI/Utils/Dropdown.js.map +1 -1
  1954. package/build/dist/UI/Utils/ForeignDomMutationGuard.js +111 -0
  1955. package/build/dist/UI/Utils/ForeignDomMutationGuard.js.map +1 -0
  1956. package/build/dist/UI/Utils/GrantablePermission.js +108 -0
  1957. package/build/dist/UI/Utils/GrantablePermission.js.map +1 -0
  1958. package/build/dist/UI/Utils/PermissionGate.js +30 -2
  1959. package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
  1960. package/build/dist/UI/Utils/Rules/RuleRunClient.js +10 -2
  1961. package/build/dist/UI/Utils/Rules/RuleRunClient.js.map +1 -1
  1962. package/build/dist/UI/Utils/Telemetry/ResultTotal.js +102 -0
  1963. package/build/dist/UI/Utils/Telemetry/ResultTotal.js.map +1 -0
  1964. package/build/dist/UI/Utils/Telemetry/UseResultTotal.js +94 -0
  1965. package/build/dist/UI/Utils/Telemetry/UseResultTotal.js.map +1 -0
  1966. package/build/dist/UI/Utils/TranslateTemplate.js +353 -13
  1967. package/build/dist/UI/Utils/TranslateTemplate.js.map +1 -1
  1968. package/build/dist/UI/Utils/Translation.js +23 -2
  1969. package/build/dist/UI/Utils/Translation.js.map +1 -1
  1970. package/build/dist/UI/Utils/UseClockTick.js +20 -2
  1971. package/build/dist/UI/Utils/UseClockTick.js.map +1 -1
  1972. package/build/dist/UI/Utils/UseLiveDuration.js +66 -0
  1973. package/build/dist/UI/Utils/UseLiveDuration.js.map +1 -0
  1974. package/build/dist/UI/Utils/UseTranslator.js +20 -0
  1975. package/build/dist/UI/Utils/UseTranslator.js.map +1 -0
  1976. package/build/dist/Utils/ColorContrast.js +182 -0
  1977. package/build/dist/Utils/ColorContrast.js.map +1 -0
  1978. package/build/dist/Utils/DeveloperDocs/AiAssistantExamples.js +3 -3
  1979. package/build/dist/Utils/DeveloperDocs/AiAssistantExamples.js.map +1 -1
  1980. package/build/dist/Utils/DeveloperDocs/ApiExamples.js +1 -177
  1981. package/build/dist/Utils/DeveloperDocs/ApiExamples.js.map +1 -1
  1982. package/build/dist/Utils/DeveloperDocs/ExampleBuilder.js +1116 -0
  1983. package/build/dist/Utils/DeveloperDocs/ExampleBuilder.js.map +1 -0
  1984. package/build/dist/Utils/DeveloperDocs/ExampleValues.js +67 -0
  1985. package/build/dist/Utils/DeveloperDocs/ExampleValues.js.map +1 -1
  1986. package/build/dist/Utils/DeveloperDocs/Hcl.js +93 -17
  1987. package/build/dist/Utils/DeveloperDocs/Hcl.js.map +1 -1
  1988. package/build/dist/Utils/DeveloperDocs/LiveData.js +142 -0
  1989. package/build/dist/Utils/DeveloperDocs/LiveData.js.map +1 -0
  1990. package/build/dist/Utils/DeveloperDocs/PageLookups.js +224 -0
  1991. package/build/dist/Utils/DeveloperDocs/PageLookups.js.map +1 -0
  1992. package/build/dist/Utils/DeveloperDocs/ResourceProfiles.js +1447 -0
  1993. package/build/dist/Utils/DeveloperDocs/ResourceProfiles.js.map +1 -0
  1994. package/build/dist/Utils/DeveloperDocs/TerraformConfig.js +82 -79
  1995. package/build/dist/Utils/DeveloperDocs/TerraformConfig.js.map +1 -1
  1996. package/build/dist/Utils/DeveloperDocs/TerraformMonitorSteps.js +35 -12
  1997. package/build/dist/Utils/DeveloperDocs/TerraformMonitorSteps.js.map +1 -1
  1998. package/build/dist/Utils/DeveloperDocs/TerraformSchema.js +54 -0
  1999. package/build/dist/Utils/DeveloperDocs/TerraformSchema.js.map +1 -1
  2000. package/build/dist/Utils/Email/EmailColorUtil.js +101 -0
  2001. package/build/dist/Utils/Email/EmailColorUtil.js.map +1 -0
  2002. package/build/dist/Utils/Episode/EpisodeTemplateVariables.js +60 -0
  2003. package/build/dist/Utils/Episode/EpisodeTemplateVariables.js.map +1 -0
  2004. package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js +26 -5
  2005. package/build/dist/Utils/Incident/IncidentNoteTemplateVariables.js.map +1 -1
  2006. package/build/dist/Utils/Incident/IncidentSlaNoteTemplateVariables.js +26 -0
  2007. package/build/dist/Utils/Incident/IncidentSlaNoteTemplateVariables.js.map +1 -0
  2008. package/build/dist/Utils/KeyFromName.js +139 -0
  2009. package/build/dist/Utils/KeyFromName.js.map +1 -0
  2010. package/build/dist/Utils/ListOrder.js +242 -0
  2011. package/build/dist/Utils/ListOrder.js.map +1 -0
  2012. package/build/dist/Utils/Measurement/MeasurementMoments.js +477 -0
  2013. package/build/dist/Utils/Measurement/MeasurementMoments.js.map +1 -0
  2014. package/build/dist/Utils/Project/NumberPrefix.js +126 -0
  2015. package/build/dist/Utils/Project/NumberPrefix.js.map +1 -0
  2016. package/build/dist/Utils/Slo/SloBurnRateTemplate.js +17 -0
  2017. package/build/dist/Utils/Slo/SloBurnRateTemplate.js.map +1 -1
  2018. package/build/dist/Utils/StateOrder.js +384 -0
  2019. package/build/dist/Utils/StateOrder.js.map +1 -0
  2020. package/package.json +1 -1
  2021. package/Server/Services/IncidentFormService.ts +0 -1566
  2022. package/Server/Services/IncidentFormSubmissionService.ts +0 -97
  2023. package/Tests/App/Accounts/IncidentFormPage.test.tsx +0 -2036
  2024. package/Tests/App/Accounts/IncidentFormServerMessages.test.ts +0 -119
  2025. package/Tests/App/Accounts/IncidentFormUtils.test.ts +0 -1157
  2026. package/Tests/App/Dashboard/IncidentFormsPages.test.tsx +0 -1324
  2027. package/Tests/Server/Services/IncidentCustomFieldDeleteFormQuestions.test.ts +0 -297
  2028. package/Tests/Server/Services/IncidentFormPublicForm.test.ts +0 -1260
  2029. package/Tests/Server/Services/IncidentFormPublicSubmission.test.ts +0 -2520
  2030. package/Tests/Server/Services/IncidentFormService.test.ts +0 -663
  2031. package/Tests/Server/Services/IncidentFormSubmissionService.test.ts +0 -430
  2032. package/Tests/Types/Incident/IncidentFormPublic.test.ts +0 -1916
  2033. package/Tests/UI/Components/FeedOptionsButton.test.tsx +0 -2610
  2034. package/Tests/UI/Components/Item.test.tsx +0 -72
  2035. package/Tests/UI/Components/OrderedStatesList.test.tsx +0 -148
  2036. package/Tests/UI/Components/OrderedStatesListCreateGate.test.tsx +0 -174
  2037. package/Types/Incident/IncidentFormPublic.ts +0 -1145
  2038. package/UI/Components/EventHistoryList/NoEventDay.tsx +0 -27
  2039. package/UI/Components/Feed/FeedOptionsButton.tsx +0 -692
  2040. package/UI/Components/OrderedStatesList/Item.tsx +0 -76
  2041. package/UI/Components/OrderedStatesList/OrderedStatesList.tsx +0 -261
  2042. package/build/dist/Models/DatabaseModels/IncidentForm.js.map +0 -1
  2043. package/build/dist/Models/DatabaseModels/IncidentFormSubmission.js.map +0 -1
  2044. package/build/dist/Server/API/IncidentFormAPI.js.map +0 -1
  2045. package/build/dist/Server/Middleware/IncidentFormRateLimit.js.map +0 -1
  2046. package/build/dist/Server/Services/IncidentFormService.js +0 -1202
  2047. package/build/dist/Server/Services/IncidentFormService.js.map +0 -1
  2048. package/build/dist/Server/Services/IncidentFormSubmissionService.js +0 -91
  2049. package/build/dist/Server/Services/IncidentFormSubmissionService.js.map +0 -1
  2050. package/build/dist/Types/Incident/IncidentFormIpAllowlist.js.map +0 -1
  2051. package/build/dist/Types/Incident/IncidentFormPublic.js +0 -678
  2052. package/build/dist/Types/Incident/IncidentFormPublic.js.map +0 -1
  2053. package/build/dist/UI/Components/EventHistoryList/NoEventDay.js +0 -16
  2054. package/build/dist/UI/Components/EventHistoryList/NoEventDay.js.map +0 -1
  2055. package/build/dist/UI/Components/Feed/FeedOptionsButton.js +0 -346
  2056. package/build/dist/UI/Components/Feed/FeedOptionsButton.js.map +0 -1
  2057. package/build/dist/UI/Components/OrderedStatesList/Item.js +0 -29
  2058. package/build/dist/UI/Components/OrderedStatesList/Item.js.map +0 -1
  2059. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js +0 -101
  2060. package/build/dist/UI/Components/OrderedStatesList/OrderedStatesList.js.map +0 -1
@@ -18,9 +18,11 @@ import {
18
18
  test,
19
19
  } from "@jest/globals";
20
20
  import WorkflowTemplatePicker, {
21
+ WORKFLOW_START_FROM_SCRATCH_ID,
21
22
  WORKFLOW_TEMPLATE_LISTBOX_ID,
23
+ WORKFLOW_TEMPLATE_SEARCH_INPUT_ID,
24
+ WORKFLOW_TEMPLATE_VIEW_SELECT_ID,
22
25
  workflowTemplateOptionDomId,
23
- workflowTemplateViewDomId,
24
26
  } from "../../../../App/FeatureSet/Dashboard/src/Components/Workflow/WorkflowTemplatePicker";
25
27
  import {
26
28
  INITIAL_WORKFLOW_TEMPLATE_PICKER_STATE,
@@ -29,6 +31,7 @@ import {
29
31
  WorkflowTemplatePickerView,
30
32
  WorkflowTemplatePickerViewInfo,
31
33
  getWorkflowTemplateCategoryLabel,
34
+ getWorkflowTemplatePickerCounts,
32
35
  getWorkflowTemplatePickerViews,
33
36
  } from "../../../../App/FeatureSet/Dashboard/src/Utils/Workflow/WorkflowTemplatePickerUtil";
34
37
  import {
@@ -36,27 +39,40 @@ import {
36
39
  WorkflowTemplate,
37
40
  WorkflowTemplateCategories,
38
41
  WorkflowTemplateCategory,
42
+ WorkflowTemplateVariable,
39
43
  getWorkflowTemplate,
40
- getWorkflowTemplateCategoryInfo,
41
44
  getWorkflowTemplates,
42
45
  getWorkflowTemplatesByCategory,
43
46
  } from "../../../Types/Workflow/Templates";
44
47
  import getJestMockFunction, { MockFunction } from "../../../Tests/MockType";
45
48
 
46
49
  /*
47
- * The template picker on its own: the "Start from" step of Create a
48
- * workflow. It replaced a grid of every template at once, as equally large
49
- * cards, that the maintainer called decision paralysis. These tests hold the
50
- * new shape to what it promises: a handful of recommended templates first,
51
- * the rest one click away under categories with counts, compact rows, a
52
- * preview of what a template does before it is chosen, a search that reads
53
- * every word, a keyboard that works like the command palette's, and a
54
- * narrow-screen layout where the preview takes the list's place. The wizard
55
- * around it is covered in CreateWorkflowModal.test.tsx.
50
+ * The template picker on its own: the first step of Create a workflow.
51
+ *
52
+ * The maintainer, about the version before this one: "This select template
53
+ * for workflow is extremely hard to use because it shows a lot of
54
+ * information on the modal. Can you please make sure the modal is very
55
+ * simple to use? ... 'Start from scratch' should be more visible as well
56
+ * because that's the most commonly used option." That version had a column
57
+ * of twelve categories with counts, the list, a preview column that was
58
+ * always open, keyboard hints, and Start from scratch as a small button
59
+ * beside the search.
60
+ *
61
+ * These tests hold the new shape to what it promises: Start from scratch
62
+ * first, prominent and one click away; a few recommended templates as
63
+ * one-line rows; a quiet search and a category select with no counts; a
64
+ * template's details only once it is picked, inside its own row; and the
65
+ * keyboard of the command palette, unchanged. The wizard around it is
66
+ * covered in CreateWorkflowModal.test.tsx, and the dialog in a real
67
+ * browser in packages/E2E/WorkflowBuilder/CreateWorkflowDialog.spec.ts.
56
68
  */
57
69
 
58
70
  const ALL_TEMPLATES: Array<WorkflowTemplate> = getWorkflowTemplates();
59
71
  const OPTION_PREFIX: string = "workflow-template-option-";
72
+ const RECOMMENDED: Array<string> = [...RECOMMENDED_WORKFLOW_TEMPLATE_IDS];
73
+
74
+ // Named: eslint's wrap-regex and prettier disagree on a bare /re/.test().
75
+ const DIGIT: RegExp = /\d/;
60
76
 
61
77
  interface Harness {
62
78
  view: RenderResult;
@@ -129,6 +145,16 @@ const renderPicker: RenderPickerFunction = (
129
145
  };
130
146
  };
131
147
 
148
+ type StateFunction = (
149
+ changes: Partial<WorkflowTemplatePickerState>,
150
+ ) => WorkflowTemplatePickerState;
151
+
152
+ const stateWith: StateFunction = (
153
+ changes: Partial<WorkflowTemplatePickerState>,
154
+ ): WorkflowTemplatePickerState => {
155
+ return { ...INITIAL_WORKFLOW_TEMPLATE_PICKER_STATE, ...changes };
156
+ };
157
+
132
158
  type TemplateFunction = (templateId: string) => WorkflowTemplate;
133
159
 
134
160
  const template: TemplateFunction = (templateId: string): WorkflowTemplate => {
@@ -143,20 +169,26 @@ const template: TemplateFunction = (templateId: string): WorkflowTemplate => {
143
169
 
144
170
  type ElementFunction = () => HTMLElement;
145
171
 
172
+ const getScratch: ElementFunction = (): HTMLElement => {
173
+ return screen.getByTestId("workflow-start-from-scratch");
174
+ };
175
+
146
176
  const getSearch: ElementFunction = (): HTMLElement => {
147
177
  return screen.getByTestId("workflow-template-search");
148
178
  };
149
179
 
180
+ const getSelect: ElementFunction = (): HTMLElement => {
181
+ return screen.getByTestId("workflow-template-view-select");
182
+ };
183
+
150
184
  const getListbox: ElementFunction = (): HTMLElement => {
151
185
  return screen.getByRole("listbox");
152
186
  };
153
187
 
154
- const getCategories: ElementFunction = (): HTMLElement => {
155
- return screen.getByRole("radiogroup", { name: "Template categories" });
156
- };
188
+ type RowFunction = (templateId: string) => HTMLElement;
157
189
 
158
- const getPreview: ElementFunction = (): HTMLElement => {
159
- return screen.getByTestId("workflow-template-preview");
190
+ const row: RowFunction = (templateId: string): HTMLElement => {
191
+ return screen.getByTestId(workflowTemplateOptionDomId(templateId));
160
192
  };
161
193
 
162
194
  type ListedIdsFunction = (container?: HTMLElement) => Array<string>;
@@ -174,9 +206,10 @@ const listedIds: ListedIdsFunction = (
174
206
  });
175
207
  };
176
208
 
177
- type ActiveIdFunction = () => string | null;
209
+ type PickedIdFunction = () => string | null;
178
210
 
179
- const activeId: ActiveIdFunction = (): string | null => {
211
+ /** The template picked: the one row marked selected. */
212
+ const pickedId: PickedIdFunction = (): string | null => {
180
213
  const selected: Array<HTMLElement> = within(getListbox())
181
214
  .queryAllByRole("option")
182
215
  .filter((option: HTMLElement) => {
@@ -192,18 +225,17 @@ const activeId: ActiveIdFunction = (): string | null => {
192
225
  : null;
193
226
  };
194
227
 
195
- type CategoryRadioFunction = (view: WorkflowTemplatePickerView) => HTMLElement;
228
+ type DetailsFunction = () => Array<HTMLElement>;
196
229
 
197
- const categoryRadio: CategoryRadioFunction = (
198
- view: WorkflowTemplatePickerView,
199
- ): HTMLElement => {
200
- return screen.getByTestId(workflowTemplateViewDomId(view));
230
+ /** Every open details panel. There is never more than one. */
231
+ const openDetails: DetailsFunction = (): Array<HTMLElement> => {
232
+ return screen.queryAllByTestId("workflow-template-details");
201
233
  };
202
234
 
203
235
  type ShowViewFunction = (view: WorkflowTemplatePickerView) => void;
204
236
 
205
237
  const showView: ShowViewFunction = (view: WorkflowTemplatePickerView): void => {
206
- fireEvent.click(categoryRadio(view));
238
+ fireEvent.change(getSelect(), { target: { value: String(view) } });
207
239
  };
208
240
 
209
241
  type TypeFunction = (text: string) => void;
@@ -212,12 +244,17 @@ const typeSearch: TypeFunction = (text: string): void => {
212
244
  fireEvent.change(getSearch(), { target: { value: text } });
213
245
  };
214
246
 
215
- type PreviewTitleFunction = () => string;
247
+ type PickFunction = (templateId: string) => HTMLElement;
216
248
 
217
- const previewTitle: PreviewTitleFunction = (): string => {
218
- return (
219
- within(getPreview()).getByRole("heading", { level: 3 }).textContent || ""
220
- );
249
+ /** Click a template's row, opening All templates first if it is not listed. */
250
+ const pick: PickFunction = (templateId: string): HTMLElement => {
251
+ if (!screen.queryByTestId(workflowTemplateOptionDomId(templateId))) {
252
+ showView(WorkflowTemplateCollection.All);
253
+ }
254
+
255
+ fireEvent.click(row(templateId));
256
+
257
+ return row(templateId);
221
258
  };
222
259
 
223
260
  type KeyFunction = (element: HTMLElement, key: string) => boolean;
@@ -227,6 +264,16 @@ const press: KeyFunction = (element: HTMLElement, key: string): boolean => {
227
264
  return !fireEvent.keyDown(element, { key: key });
228
265
  };
229
266
 
267
+ type OptionTextsFunction = () => Array<string>;
268
+
269
+ const selectOptionTexts: OptionTextsFunction = (): Array<string> => {
270
+ return Array.from((getSelect() as HTMLSelectElement).options).map(
271
+ (option: HTMLOptionElement): string => {
272
+ return option.textContent || "";
273
+ },
274
+ );
275
+ };
276
+
230
277
  const scrollIntoView: MockFunction = getJestMockFunction();
231
278
 
232
279
  beforeEach(() => {
@@ -241,157 +288,262 @@ afterEach(() => {
241
288
  jest.restoreAllMocks();
242
289
  });
243
290
 
244
- describe("the two ways to start", () => {
245
- test("Start from scratch is a plain button beside the search, and starts with an empty canvas", () => {
246
- const harness: Harness = renderPicker();
247
- const scratch: HTMLElement = screen.getByTestId(
248
- "workflow-start-from-scratch",
249
- );
291
+ describe("Start from scratch, the first and most visible choice", () => {
292
+ test("it comes first: before the search, the categories and the templates", () => {
293
+ renderPicker();
250
294
 
251
- expect(scratch).toHaveTextContent("Start from scratch");
295
+ const scratch: HTMLElement = getScratch();
296
+ const follows: (later: HTMLElement) => boolean = (
297
+ later: HTMLElement,
298
+ ): boolean => {
299
+ return Boolean(
300
+ scratch.compareDocumentPosition(later) &
301
+ Node.DOCUMENT_POSITION_FOLLOWING,
302
+ );
303
+ };
304
+
305
+ expect(follows(getSearch())).toBe(true);
306
+ expect(follows(getSelect())).toBe(true);
307
+ expect(follows(getListbox())).toBe(true);
308
+
309
+ // The first control in the step.
310
+ const firstControl: Element | null = screen
311
+ .getByTestId("workflow-template-picker")
312
+ .querySelector("button, input, select, [tabindex]");
313
+
314
+ expect(firstControl).toBe(scratch);
315
+ });
316
+
317
+ test("it is a button that says what it is and what it gives you", () => {
318
+ renderPicker();
319
+
320
+ const scratch: HTMLElement = getScratch();
321
+
322
+ expect(scratch.tagName).toBe("BUTTON");
252
323
  expect(scratch).toHaveAttribute("type", "button");
253
- // Plain, never filled: the dialog's one primary button is Use this template.
254
- expect(scratch.className).toContain("bg-white");
255
- expect(scratch.className).not.toMatch(/\bbg-indigo-\d+/);
324
+ expect(scratch).toHaveAttribute("id", WORKFLOW_START_FROM_SCRATCH_ID);
325
+ expect(scratch).toHaveTextContent("Start from scratch");
326
+ expect(
327
+ screen.getByRole("button", {
328
+ name: "Start from scratch Begin with an empty canvas and add your own trigger and steps.",
329
+ }),
330
+ ).toBe(scratch);
331
+ expect(scratch).toHaveAccessibleDescription(
332
+ "Begin with an empty canvas and add your own trigger and steps.",
333
+ );
334
+ });
335
+
336
+ test("one click starts from scratch, and uses no template", () => {
337
+ const harness: Harness = renderPicker();
256
338
 
257
- fireEvent.click(scratch);
339
+ fireEvent.click(getScratch());
258
340
 
259
341
  expect(harness.onStartFromScratch).toHaveBeenCalledTimes(1);
260
342
  expect(harness.onUseTemplate).not.toHaveBeenCalled();
261
343
  });
262
344
 
263
- test("Start from scratch shows when it is the start already chosen", () => {
345
+ test("it works with a template picked too: it is always one click away", () => {
346
+ const harness: Harness = renderPicker();
347
+
348
+ pick(RECOMMENDED[1]!);
349
+ fireEvent.click(getScratch());
350
+
351
+ expect(harness.onStartFromScratch).toHaveBeenCalledTimes(1);
352
+ expect(harness.onUseTemplate).not.toHaveBeenCalled();
353
+ });
354
+
355
+ test("it has the focus when the step opens, so Enter takes the most common way in", () => {
356
+ renderPicker();
357
+
358
+ expect(getScratch()).toHaveFocus();
359
+ });
360
+
361
+ /*
362
+ * The step's one card, with the brand colour on its icon; the template
363
+ * rows below it are neutral until one is picked. Not a filled button: the
364
+ * dialog's one primary button is Use this template, in its footer.
365
+ */
366
+ test("it stands out as a card with the brand's colour, without being a filled button", () => {
367
+ renderPicker();
368
+
369
+ const scratch: HTMLElement = getScratch();
370
+
371
+ expect(scratch.className).toContain("rounded-xl");
372
+ expect(scratch.className).toContain("border");
373
+ expect(scratch.className).toContain("shadow-sm");
374
+ expect(scratch.className).not.toMatch(/\bbg-indigo-(?:5|6|7)00\b/);
375
+ expect(scratch.querySelector(".text-indigo-600")).not.toBeNull();
376
+
377
+ for (const templateId of RECOMMENDED) {
378
+ expect({
379
+ templateId: templateId,
380
+ tinted: row(templateId).querySelector(".text-indigo-600") !== null,
381
+ }).toEqual({ templateId: templateId, tinted: false });
382
+ }
383
+ });
384
+
385
+ test("it says when it is the start already chosen, as after Back from Name", () => {
264
386
  renderPicker({ isStartFromScratchChosen: true });
265
387
 
266
- const scratch: HTMLElement = screen.getByTestId(
267
- "workflow-start-from-scratch",
268
- );
388
+ const scratch: HTMLElement = getScratch();
269
389
 
270
- expect(scratch).toHaveAttribute("aria-pressed", "true");
390
+ expect(scratch).toHaveAttribute("aria-current", "true");
271
391
  expect(scratch.className).toContain("border-indigo-500");
392
+ expect(scratch.className).toContain("ring-indigo-500");
272
393
  });
273
394
 
274
- test("it is not pressed otherwise", () => {
395
+ test("otherwise it is not marked", () => {
275
396
  renderPicker();
276
397
 
277
- expect(screen.getByTestId("workflow-start-from-scratch")).toHaveAttribute(
278
- "aria-pressed",
279
- "false",
280
- );
398
+ expect(getScratch()).not.toHaveAttribute("aria-current");
399
+ expect(getScratch().className).not.toContain("border-indigo-500");
281
400
  });
282
401
  });
283
402
 
284
- describe("what the picker opens on", () => {
403
+ describe("what the step opens on", () => {
285
404
  test("the recommended handful, in their order, and nothing else", () => {
286
405
  renderPicker();
287
406
 
288
- expect(listedIds()).toEqual([...RECOMMENDED_WORKFLOW_TEMPLATE_IDS]);
407
+ expect(listedIds()).toEqual(RECOMMENDED);
289
408
  expect(listedIds().length).toBeLessThanOrEqual(8);
290
409
  expect(ALL_TEMPLATES.length).toBeGreaterThan(listedIds().length * 5);
291
410
  });
292
411
 
293
- test("headed Recommended, with a line saying what they are", () => {
412
+ test("under one heading, which names the list", () => {
294
413
  renderPicker();
295
414
 
296
415
  expect(
297
- screen.getByRole("heading", { level: 3, name: "Recommended" }),
416
+ screen.getByRole("heading", {
417
+ level: 3,
418
+ name: "Or start from a template",
419
+ }),
298
420
  ).toBeInTheDocument();
299
- expect(screen.getByText("A few good places to start.")).toBeInTheDocument();
300
- expect(getListbox()).toHaveAccessibleName("Recommended");
421
+ expect(getListbox()).toHaveAccessibleName("Or start from a template");
422
+ expect(screen.getAllByRole("heading")).toHaveLength(1);
301
423
  });
302
424
 
303
- test("compact rows: no subheadings and no category tags", () => {
425
+ test("nothing picked, and no template's details open", () => {
304
426
  renderPicker();
305
427
 
306
- expect(within(getListbox()).queryAllByRole("group")).toEqual([]);
307
- expect(screen.queryAllByTestId("workflow-template-row-category")).toEqual(
308
- [],
309
- );
428
+ expect(pickedId()).toBeNull();
429
+ expect(openDetails()).toEqual([]);
430
+ expect(getSearch()).not.toHaveAttribute("aria-activedescendant");
431
+ expect(getListbox()).not.toHaveAttribute("aria-activedescendant");
310
432
  });
311
433
 
312
- test("each row shows the template's name and description, and nothing else to read", () => {
434
+ test("each row is its template's name and one line of description, and nothing else", () => {
313
435
  renderPicker();
314
436
 
315
- for (const templateId of RECOMMENDED_WORKFLOW_TEMPLATE_IDS) {
316
- const row: HTMLElement = screen.getByTestId(
317
- workflowTemplateOptionDomId(templateId),
318
- );
437
+ for (const templateId of RECOMMENDED) {
438
+ const option: HTMLElement = row(templateId);
319
439
 
320
- expect(row).toHaveTextContent(
440
+ expect(option.textContent).toBe(
321
441
  `${template(templateId).name}${template(templateId).description}`,
322
442
  );
443
+ expect(option).toHaveAccessibleName(template(templateId).name);
444
+ expect(option).toHaveAccessibleDescription(
445
+ template(templateId).description,
446
+ );
447
+
448
+ const description: HTMLElement = document.getElementById(
449
+ `${workflowTemplateOptionDomId(templateId)}-description`,
450
+ ) as HTMLElement;
451
+
452
+ // One line: cut short with an ellipsis rather than wrapped.
453
+ expect(description.className).toContain("truncate");
323
454
  }
324
455
  });
325
456
 
326
- test("the first one highlighted and previewed, with the search box focused", () => {
457
+ test("one list, with no headings inside it, though Recommended holds a Jira template", () => {
327
458
  renderPicker();
328
459
 
329
- expect(activeId()).toBe(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[0]);
330
- expect(previewTitle()).toBe(
331
- template(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[0]!).name,
332
- );
333
- expect(getSearch()).toHaveFocus();
460
+ expect(
461
+ RECOMMENDED.some((templateId: string) => {
462
+ return template(templateId).category === WorkflowTemplateCategory.Jira;
463
+ }),
464
+ ).toBe(true);
465
+ expect(within(getListbox()).queryAllByRole("group")).toEqual([]);
334
466
  });
335
467
 
336
- test("a hint for the keyboard under the list", () => {
468
+ /*
469
+ * What the version before this one drew, and the maintainer found too much:
470
+ * a column of categories with counts, a preview that was always open, a
471
+ * keyboard hint under the list, and a category tag on search results.
472
+ */
473
+ test("none of what made the old step crowded", () => {
337
474
  renderPicker();
338
475
 
339
- expect(screen.getByText("to move")).toBeInTheDocument();
340
- expect(screen.getByText("to use")).toBeInTheDocument();
476
+ expect(screen.queryByRole("radiogroup")).not.toBeInTheDocument();
477
+ expect(
478
+ screen.queryByTestId("workflow-template-categories"),
479
+ ).not.toBeInTheDocument();
480
+ expect(
481
+ screen.queryByTestId("workflow-template-preview"),
482
+ ).not.toBeInTheDocument();
483
+ expect(
484
+ screen.queryByTestId("workflow-template-preview-column"),
485
+ ).not.toBeInTheDocument();
486
+ expect(screen.queryByText("to move")).not.toBeInTheDocument();
487
+ expect(screen.queryByText("to use")).not.toBeInTheDocument();
488
+ expect(
489
+ screen.queryByText("A few good places to start."),
490
+ ).not.toBeInTheDocument();
491
+
492
+ typeSearch("slack");
493
+
494
+ expect(screen.queryAllByTestId("workflow-template-row-category")).toEqual(
495
+ [],
496
+ );
341
497
  });
342
- });
343
498
 
344
- describe("the categories", () => {
345
- test("Recommended, every category, then All templates, each with its count", () => {
499
+ test("no counts anywhere: not beside the categories, not in the heading", () => {
346
500
  renderPicker();
347
501
 
348
- const radios: Array<HTMLElement> =
349
- within(getCategories()).getAllByRole("radio");
502
+ for (const text of selectOptionTexts()) {
503
+ expect({ text: text, hasDigit: DIGIT.test(text) }).toEqual({
504
+ text: text,
505
+ hasDigit: false,
506
+ });
507
+ }
350
508
 
351
509
  expect(
352
- radios.map((radio: HTMLElement): string => {
353
- return radio.getAttribute("aria-label") || "";
354
- }),
355
- ).toEqual([
356
- `Recommended (${RECOMMENDED_WORKFLOW_TEMPLATE_IDS.length})`,
357
- ...WorkflowTemplateCategories.map(
358
- (category: WorkflowTemplateCategory): string => {
359
- return `${getWorkflowTemplateCategoryInfo(category).label} (${
360
- getWorkflowTemplatesByCategory(category).length
361
- })`;
362
- },
363
- ),
364
- `All templates (${ALL_TEMPLATES.length})`,
365
- ]);
510
+ screen.getByRole("heading", { level: 3 }).textContent || "",
511
+ ).not.toMatch(DIGIT);
366
512
  });
367
513
 
368
- test("a name cut short for room can still be read whole, on hover", () => {
514
+ test("the only controls are Start from scratch, the search, the category select and the list", () => {
369
515
  renderPicker();
370
516
 
371
- for (const info of getWorkflowTemplatePickerViews()) {
372
- expect(categoryRadio(info.view)).toHaveAttribute("title", info.label);
373
- }
517
+ const picker: HTMLElement = screen.getByTestId("workflow-template-picker");
518
+
519
+ expect(within(picker).getAllByRole("button")).toEqual([getScratch()]);
520
+ expect(
521
+ Array.from(
522
+ picker.querySelectorAll("input, select, textarea, [tabindex]"),
523
+ ),
524
+ ).toEqual([getSearch(), getSelect(), getListbox()]);
374
525
  });
526
+ });
375
527
 
376
- test("one is chosen at a time, and only it is in the tab order", () => {
528
+ describe("the category select", () => {
529
+ test("offers Recommended, every category, then All templates, by name alone", () => {
377
530
  renderPicker();
378
531
 
379
- const radios: Array<HTMLElement> =
380
- within(getCategories()).getAllByRole("radio");
381
- const checked: Array<HTMLElement> = radios.filter((radio: HTMLElement) => {
382
- return radio.getAttribute("aria-checked") === "true";
383
- });
384
-
385
- expect(checked).toEqual([
386
- categoryRadio(WorkflowTemplateCollection.Recommended),
387
- ]);
388
-
389
- for (const radio of radios) {
390
- expect(radio).toHaveAttribute(
391
- "tabindex",
392
- radio === checked[0] ? "0" : "-1",
393
- );
394
- }
532
+ expect(getSelect().tagName).toBe("SELECT");
533
+ expect(getSelect()).toHaveAttribute("id", WORKFLOW_TEMPLATE_VIEW_SELECT_ID);
534
+ expect(getSelect()).toHaveAccessibleName("Template categories");
535
+ expect(selectOptionTexts()).toEqual(
536
+ getWorkflowTemplatePickerViews().map(
537
+ (info: WorkflowTemplatePickerViewInfo): string => {
538
+ return info.label;
539
+ },
540
+ ),
541
+ );
542
+ expect(selectOptionTexts()[0]).toBe("Recommended");
543
+ expect(selectOptionTexts()[selectOptionTexts().length - 1]).toBe(
544
+ "All templates",
545
+ );
546
+ expect(getSelect()).toHaveValue(WorkflowTemplateCollection.Recommended);
395
547
  });
396
548
 
397
549
  test.each(
@@ -399,34 +551,25 @@ describe("the categories", () => {
399
551
  return [category];
400
552
  }),
401
553
  )(
402
- "%s lists its own templates, under its label and description",
554
+ "%s lists its own templates, in the catalog's order",
403
555
  (category: WorkflowTemplateCategory) => {
404
556
  renderPicker();
405
557
  showView(category);
406
558
 
407
- const expectedIds: Array<string> = getWorkflowTemplatesByCategory(
408
- category,
409
- ).map((candidate: WorkflowTemplate): string => {
410
- return candidate.id;
411
- });
412
-
413
- expect(listedIds()).toEqual(expectedIds);
414
- expect(categoryRadio(category)).toHaveAttribute("aria-checked", "true");
415
- expect(
416
- screen.getByRole("heading", {
417
- level: 3,
418
- name: getWorkflowTemplateCategoryInfo(category).label,
419
- }),
420
- ).toBeInTheDocument();
421
- expect(
422
- screen.getByText(getWorkflowTemplateCategoryInfo(category).description),
423
- ).toBeInTheDocument();
424
- // The first of them is highlighted.
425
- expect(activeId()).toBe(expectedIds[0]);
559
+ expect(getSelect()).toHaveValue(category);
560
+ expect(listedIds()).toEqual(
561
+ getWorkflowTemplatesByCategory(category).map(
562
+ (candidate: WorkflowTemplate): string => {
563
+ return candidate.id;
564
+ },
565
+ ),
566
+ );
567
+ expect(pickedId()).toBeNull();
568
+ expect(openDetails()).toEqual([]);
426
569
  },
427
570
  );
428
571
 
429
- test("Jira's seventeen are split into its incident and its alert templates", () => {
572
+ test("Jira's seventeen come in two parts, its incident and its alert templates", () => {
430
573
  renderPicker();
431
574
  showView(WorkflowTemplateCategory.Jira);
432
575
 
@@ -434,340 +577,447 @@ describe("the categories", () => {
434
577
  within(getListbox()).getAllByRole("group");
435
578
 
436
579
  expect(
437
- groups.map((group: HTMLElement) => {
438
- return [group.getAttribute("aria-label"), listedIds(group).length];
580
+ groups.map((group: HTMLElement): string => {
581
+ return group.getAttribute("aria-label") || "";
439
582
  }),
440
- ).toEqual([
441
- ["Incidents", 9],
442
- ["Alerts", 8],
443
- ]);
583
+ ).toEqual(["Incidents", "Alerts"]);
584
+ expect(listedIds()).toHaveLength(17);
444
585
 
445
586
  for (const group of groups) {
446
- const noun: string =
447
- group.getAttribute("aria-label") === "Incidents" ? "incident" : "alert";
587
+ const part: string = group.getAttribute("aria-label") || "";
588
+
589
+ // The part's heading is drawn over its rows.
590
+ expect(group).toHaveTextContent(part);
448
591
 
449
592
  for (const templateId of listedIds(group)) {
450
- expect(template(templateId).subcategory).toBe(
451
- group.getAttribute("aria-label"),
452
- );
453
- expect(templateId).toContain(`-${noun}`);
593
+ expect(template(templateId).subcategory).toBe(part);
454
594
  }
455
595
  }
456
596
  });
457
597
 
458
- /*
459
- * Nothing may go missing in the new layout: All templates is the one place
460
- * where every template is listed, each under its category's heading.
461
- */
462
598
  test("All templates lists every template exactly once, under its category", () => {
463
599
  renderPicker();
464
600
  showView(WorkflowTemplateCollection.All);
465
601
 
466
- expect(listedIds().sort()).toEqual(
467
- ALL_TEMPLATES.map((candidate: WorkflowTemplate): string => {
468
- return candidate.id;
469
- }).sort(),
470
- );
602
+ const groups: Array<HTMLElement> =
603
+ within(getListbox()).getAllByRole("group");
604
+
605
+ expect(listedIds()).toHaveLength(ALL_TEMPLATES.length);
606
+ expect(new Set(listedIds()).size).toBe(ALL_TEMPLATES.length);
607
+
608
+ for (const group of groups) {
609
+ const label: string = group.getAttribute("aria-label") || "";
471
610
 
472
- for (const group of within(getListbox()).getAllByRole("group")) {
473
611
  for (const templateId of listedIds(group)) {
474
612
  expect(
475
613
  getWorkflowTemplateCategoryLabel(template(templateId).category),
476
- ).toBe(group.getAttribute("aria-label"));
614
+ ).toBe(label);
477
615
  }
478
616
  }
479
-
480
- expect(
481
- within(getListbox())
482
- .getAllByRole("group")
483
- .map((group: HTMLElement) => {
484
- return group.getAttribute("aria-label");
485
- }),
486
- ).toEqual(
487
- WorkflowTemplateCategories.map((category: WorkflowTemplateCategory) => {
488
- return getWorkflowTemplateCategoryInfo(category).label;
489
- }),
490
- );
491
617
  });
492
618
 
493
- test("a group's heading says how many templates are under it", () => {
619
+ test("a group's heading carries no count", () => {
494
620
  renderPicker();
495
- showView(WorkflowTemplateCategory.Jira);
621
+ showView(WorkflowTemplateCollection.All);
496
622
 
497
- const incidents: HTMLElement = screen.getByTestId(
498
- "workflow-template-section-incidents",
499
- );
623
+ for (const group of within(getListbox()).getAllByRole("group")) {
624
+ const heading: Element | null = group.querySelector(
625
+ "[aria-hidden='true']",
626
+ );
500
627
 
501
- expect(incidents.firstElementChild).toHaveTextContent("Incidents9");
502
- expect(incidents.firstElementChild).toHaveAttribute("aria-hidden", "true");
628
+ expect(heading?.textContent).toBe(group.getAttribute("aria-label"));
629
+ }
503
630
  });
504
631
 
505
- test("the arrow keys move between categories, choosing as they go, and wrap round", () => {
632
+ test("choosing another category closes the details of the template picked", () => {
506
633
  renderPicker();
634
+ pick(RECOMMENDED[0]!);
507
635
 
508
- const recommended: HTMLElement = categoryRadio(
509
- WorkflowTemplateCollection.Recommended,
510
- );
511
- const views: Array<WorkflowTemplatePickerViewInfo> =
512
- getWorkflowTemplatePickerViews();
636
+ expect(openDetails()).toHaveLength(1);
513
637
 
514
- recommended.focus();
638
+ showView(WorkflowTemplateCategory.Incidents);
515
639
 
516
- expect(press(recommended, "ArrowDown")).toBe(true);
517
- expect(categoryRadio(views[1]!.view)).toHaveAttribute(
518
- "aria-checked",
519
- "true",
520
- );
521
- expect(categoryRadio(views[1]!.view)).toHaveFocus();
522
- expect(listedIds()).toEqual(
523
- getWorkflowTemplatesByCategory(
524
- views[1]!.view as WorkflowTemplateCategory,
525
- ).map((candidate: WorkflowTemplate) => {
526
- return candidate.id;
527
- }),
528
- );
640
+ expect(listedIds()).toContain(RECOMMENDED[0]);
641
+ expect(pickedId()).toBeNull();
642
+ expect(openDetails()).toEqual([]);
643
+ });
529
644
 
530
- press(categoryRadio(views[1]!.view), "ArrowRight");
531
- expect(categoryRadio(views[2]!.view)).toHaveAttribute(
532
- "aria-checked",
533
- "true",
534
- );
645
+ test("it follows a search: All templates while searching, back to what was browsed after", () => {
646
+ renderPicker();
647
+ showView(WorkflowTemplateCategory.OnCall);
648
+ typeSearch("slack");
535
649
 
536
- press(categoryRadio(views[2]!.view), "ArrowLeft");
537
- press(categoryRadio(views[1]!.view), "ArrowUp");
538
- expect(recommended).toHaveAttribute("aria-checked", "true");
650
+ expect(getSelect()).toHaveValue(WorkflowTemplateCollection.All);
539
651
 
540
- // Up from the first goes round to the last.
541
- press(recommended, "ArrowUp");
542
- expect(categoryRadio(WorkflowTemplateCollection.All)).toHaveAttribute(
543
- "aria-checked",
544
- "true",
545
- );
546
- expect(categoryRadio(WorkflowTemplateCollection.All)).toHaveFocus();
652
+ typeSearch("");
547
653
 
548
- press(categoryRadio(WorkflowTemplateCollection.All), "Home");
549
- expect(recommended).toHaveAttribute("aria-checked", "true");
654
+ expect(getSelect()).toHaveValue(WorkflowTemplateCategory.OnCall);
655
+ });
656
+ });
657
+
658
+ describe("picking a template", () => {
659
+ test("a click picks it and opens its details inside its own row", () => {
660
+ const harness: Harness = renderPicker();
661
+ const option: HTMLElement = pick(RECOMMENDED[3]!);
550
662
 
551
- press(recommended, "End");
552
- expect(categoryRadio(WorkflowTemplateCollection.All)).toHaveAttribute(
553
- "aria-checked",
554
- "true",
663
+ expect(pickedId()).toBe(RECOMMENDED[3]);
664
+ expect(openDetails()).toHaveLength(1);
665
+ expect(within(option).getByTestId("workflow-template-details")).toBe(
666
+ openDetails()[0],
555
667
  );
668
+ // A click looks; it does not create anything.
669
+ expect(harness.onUseTemplate).not.toHaveBeenCalled();
556
670
  });
557
671
 
558
- test("other keys are left alone", () => {
672
+ test("the picked row shows its whole description, the others one line", () => {
559
673
  renderPicker();
674
+ pick(RECOMMENDED[2]!);
560
675
 
561
- expect(
562
- press(categoryRadio(WorkflowTemplateCollection.Recommended), "a"),
563
- ).toBe(false);
676
+ const description: (templateId: string) => HTMLElement = (
677
+ templateId: string,
678
+ ): HTMLElement => {
679
+ return document.getElementById(
680
+ `${workflowTemplateOptionDomId(templateId)}-description`,
681
+ ) as HTMLElement;
682
+ };
683
+
684
+ expect(description(RECOMMENDED[2]!).className).not.toContain("truncate");
685
+ expect(description(RECOMMENDED[1]!).className).toContain("truncate");
564
686
  });
565
687
 
566
- /*
567
- * Below the widest screens the categories are a select over the list: as
568
- * a wrapping row of twelve chips they took three lines.
569
- */
570
- test("narrower screens choose the category from a select, which says the same", () => {
688
+ test("picking another moves the details: one row is open at a time", () => {
571
689
  renderPicker();
690
+ pick(RECOMMENDED[0]!);
691
+ pick(RECOMMENDED[4]!);
572
692
 
573
- const select: HTMLSelectElement = screen.getByTestId(
574
- "workflow-template-view-select",
575
- ) as HTMLSelectElement;
576
-
577
- expect(select).toHaveAccessibleName("Template categories");
693
+ expect(pickedId()).toBe(RECOMMENDED[4]);
694
+ expect(openDetails()).toHaveLength(1);
578
695
  expect(
579
- Array.from(select.options).map((option: HTMLOptionElement) => {
580
- return option.textContent;
581
- }),
582
- ).toEqual(
583
- within(getCategories())
584
- .getAllByRole("radio")
585
- .map((radio: HTMLElement) => {
586
- return radio.getAttribute("aria-label");
587
- }),
588
- );
589
- expect(select.value).toBe(WorkflowTemplateCollection.Recommended);
590
-
591
- fireEvent.change(select, {
592
- target: { value: WorkflowTemplateCategory.Monitors },
593
- });
594
-
595
- expect(listedIds()).toEqual(
596
- getWorkflowTemplatesByCategory(WorkflowTemplateCategory.Monitors).map(
597
- (candidate: WorkflowTemplate) => {
598
- return candidate.id;
599
- },
600
- ),
601
- );
602
- expect(categoryRadio(WorkflowTemplateCategory.Monitors)).toHaveAttribute(
603
- "aria-checked",
604
- "true",
605
- );
696
+ within(row(RECOMMENDED[4]!)).getByTestId("workflow-template-details"),
697
+ ).toBeInTheDocument();
698
+ expect(
699
+ within(row(RECOMMENDED[0]!)).queryByTestId("workflow-template-details"),
700
+ ).not.toBeInTheDocument();
606
701
  });
607
702
 
608
- test("the list of categories is a column only on wide screens, and the select is the rest of the time", () => {
703
+ test("a click on the template already picked keeps it picked", () => {
609
704
  renderPicker();
705
+ pick(RECOMMENDED[1]!);
706
+ fireEvent.click(row(RECOMMENDED[1]!));
610
707
 
611
- expect(getCategories().className).toContain("max-xl:hidden");
612
- expect(getCategories().className).toContain("xl:flex");
613
- expect(
614
- screen.getByTestId("workflow-template-view-select").parentElement
615
- ?.className,
616
- ).toContain("xl:hidden");
708
+ expect(pickedId()).toBe(RECOMMENDED[1]);
709
+ expect(openDetails()).toHaveLength(1);
617
710
  });
618
- });
619
711
 
620
- describe("the search", () => {
621
- test("is a combobox over the list", () => {
622
- renderPicker();
712
+ test("a double-click uses the template", () => {
713
+ const harness: Harness = renderPicker();
623
714
 
624
- const search: HTMLElement = getSearch();
715
+ fireEvent.doubleClick(row(RECOMMENDED[2]!));
625
716
 
626
- expect(search).toHaveAttribute("role", "combobox");
627
- expect(search).toHaveAttribute(
628
- "aria-controls",
629
- WORKFLOW_TEMPLATE_LISTBOX_ID,
630
- );
631
- expect(search).toHaveAttribute("aria-expanded", "true");
632
- expect(search).toHaveAttribute("aria-autocomplete", "list");
633
- expect(search).toHaveAttribute("autocomplete", "off");
634
- expect(search).toHaveAccessibleName("Search templates…");
635
- expect(search).toHaveAttribute(
636
- "aria-activedescendant",
637
- workflowTemplateOptionDomId(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[0]!),
717
+ expect(harness.onUseTemplate).toHaveBeenCalledTimes(1);
718
+ expect(harness.onUseTemplate.mock.calls[0]?.[0]).toEqual(
719
+ template(RECOMMENDED[2]!),
638
720
  );
639
- expect(getListbox()).toHaveAttribute("id", WORKFLOW_TEMPLATE_LISTBOX_ID);
721
+ expect(harness.onStartFromScratch).not.toHaveBeenCalled();
640
722
  });
641
723
 
642
- test("looks through every template, whichever category was open", () => {
724
+ test("the pick is a tint on the row, not a filled button", () => {
643
725
  renderPicker();
644
- showView(WorkflowTemplateCategory.Alerts);
645
- typeSearch("discord");
726
+ pick(RECOMMENDED[0]!);
646
727
 
647
- expect(listedIds()).toEqual(["incident-created-discord"]);
648
- expect(categoryRadio(WorkflowTemplateCollection.All)).toHaveAttribute(
649
- "aria-checked",
650
- "true",
651
- );
728
+ const picked: HTMLElement = row(RECOMMENDED[0]!);
729
+ const other: HTMLElement = row(RECOMMENDED[1]!);
730
+
731
+ expect(picked.className).toContain("bg-indigo-50/60");
732
+ expect(picked.className).not.toMatch(/\bbg-indigo-(?:5|6|7)00\b/);
733
+ expect(other.className).toContain("hover:bg-gray-50");
734
+ expect(other.className).not.toContain("bg-indigo-50");
735
+ // The picked row's icon takes the brand colour; the others stay grey.
736
+ expect(picked.querySelector(".text-indigo-600")).not.toBeNull();
737
+ expect(other.querySelector(".text-indigo-600")).toBeNull();
652
738
  });
653
739
 
654
- test("says how many it found, and where", () => {
740
+ test("the search box and the list name the picked row as the active one", () => {
655
741
  renderPicker();
656
- typeSearch("slack");
742
+ pick(RECOMMENDED[3]!);
657
743
 
658
- const results: number = listedIds().length;
659
-
660
- expect(results).toBeGreaterThan(1);
661
- expect(
662
- screen.getByRole("heading", { level: 3, name: `${results} results` }),
663
- ).toBeInTheDocument();
664
- expect(
665
- screen.getByTestId("workflow-template-result-count"),
666
- ).toHaveTextContent(`${results} results`);
667
- expect(
668
- screen.getByTestId("workflow-template-result-count"),
669
- ).toHaveAttribute("aria-live", "polite");
670
- expect(categoryRadio(WorkflowTemplateCategory.Jira)).toHaveAttribute(
671
- "aria-label",
672
- "Jira (0)",
744
+ expect(getSearch()).toHaveAttribute(
745
+ "aria-activedescendant",
746
+ workflowTemplateOptionDomId(RECOMMENDED[3]!),
673
747
  );
674
- expect(categoryRadio(WorkflowTemplateCollection.All)).toHaveAttribute(
675
- "aria-label",
676
- `All templates (${results})`,
748
+ expect(getListbox()).toHaveAttribute(
749
+ "aria-activedescendant",
750
+ workflowTemplateOptionDomId(RECOMMENDED[3]!),
677
751
  );
678
752
  });
753
+ });
679
754
 
680
- test("one result is a result, not results", () => {
681
- renderPicker();
682
- typeSearch("discord");
755
+ describe("a picked template's details", () => {
756
+ type DetailsOfFunction = (templateId: string) => HTMLElement;
683
757
 
684
- expect(
685
- screen.getByRole("heading", { level: 3, name: "1 result" }),
686
- ).toBeInTheDocument();
687
- });
758
+ const detailsOf: DetailsOfFunction = (templateId: string): HTMLElement => {
759
+ return within(pick(templateId)).getByTestId("workflow-template-details");
760
+ };
688
761
 
689
- test("dims the categories it found nothing in", () => {
762
+ test("how it works: the trigger, then the other blocks, as the canvas names them", () => {
690
763
  renderPicker();
691
- typeSearch("slack");
692
764
 
693
- expect(categoryRadio(WorkflowTemplateCategory.Jira).className).toContain(
694
- "text-gray-400",
765
+ const details: HTMLElement = detailsOf("scheduled-check-alert-slack");
766
+ const blocks: HTMLElement = within(details).getByTestId(
767
+ "workflow-template-details-blocks",
695
768
  );
769
+
770
+ // Drawn in capitals; the text is the product's existing "How It Works".
771
+ expect(within(details).getByText("How It Works")).toBeInTheDocument();
772
+ expect(
773
+ within(blocks).getByTestId("workflow-template-details-trigger"),
774
+ ).toHaveTextContent("Schedule");
696
775
  expect(
697
- categoryRadio(WorkflowTemplateCategory.Incidents).className,
698
- ).toContain("text-gray-700");
776
+ within(blocks)
777
+ .getAllByTestId("workflow-template-details-step")
778
+ .map((step: HTMLElement) => {
779
+ return step.textContent;
780
+ }),
781
+ ).toEqual(["API Get (JSON)", "Send Message to Slack", "Log"]);
699
782
  });
700
783
 
701
- test("tags each result with its category, where the results mix them", () => {
784
+ test("the trigger comes first, and says it is the trigger to a screen reader", () => {
702
785
  renderPicker();
703
- typeSearch("slack");
704
786
 
705
- const tags: Array<string> = screen
706
- .getAllByTestId("workflow-template-row-category")
707
- .map((tag: HTMLElement) => {
708
- return tag.textContent || "";
709
- });
787
+ const blocks: HTMLElement = within(
788
+ detailsOf("incident-created-slack"),
789
+ ).getByTestId("workflow-template-details-blocks");
790
+ const items: Array<HTMLElement> = within(blocks).getAllByRole("listitem");
791
+ const trigger: HTMLElement = within(blocks).getByTestId(
792
+ "workflow-template-details-trigger",
793
+ );
710
794
 
711
- expect(tags).toHaveLength(listedIds().length);
712
- expect(tags).toEqual(
713
- listedIds().map((templateId: string): string => {
714
- return getWorkflowTemplateCategoryLabel(template(templateId).category);
715
- }),
795
+ expect(items[0]).toContainElement(trigger);
796
+ expect(trigger).toHaveTextContent("Trigger: On Create Incident");
797
+ expect(within(trigger).getByText("Trigger:").className).toContain(
798
+ "sr-only",
716
799
  );
800
+ expect(items).toHaveLength(3);
717
801
  });
718
802
 
719
- test("narrowed to one category, the results need no tags", () => {
803
+ test("what you'll need: each setting in order, the secret and the optional ones said so", () => {
720
804
  renderPicker();
721
- typeSearch("slack");
722
- showView(WorkflowTemplateCategory.Monitors);
723
805
 
724
- expect(screen.queryAllByTestId("workflow-template-row-category")).toEqual(
725
- [],
806
+ const details: HTMLElement = detailsOf("scheduled-email-digest");
807
+ const settings: HTMLElement = within(details).getByTestId(
808
+ "workflow-template-details-settings",
726
809
  );
727
- expect(listedIds().length).toBeGreaterThan(0);
810
+ const variables: Array<WorkflowTemplateVariable> = template(
811
+ "scheduled-email-digest",
812
+ ).variables;
728
813
 
729
- for (const templateId of listedIds()) {
730
- expect(template(templateId).category).toBe(
731
- WorkflowTemplateCategory.Monitors,
814
+ expect(within(details).getByText("What you'll need")).toBeInTheDocument();
815
+ expect(
816
+ within(settings)
817
+ .getAllByRole("listitem")
818
+ .map((item: HTMLElement): string => {
819
+ return (item.getAttribute("data-testid") || "").replace(
820
+ "workflow-template-details-setting-",
821
+ "",
822
+ );
823
+ }),
824
+ ).toEqual(
825
+ variables.map((variable: WorkflowTemplateVariable): string => {
826
+ return variable.name;
827
+ }),
828
+ );
829
+
830
+ for (const variable of variables) {
831
+ const item: HTMLElement = within(settings).getByTestId(
832
+ `workflow-template-details-setting-${variable.name}`,
732
833
  );
733
- }
734
- });
735
834
 
736
- test("marks the words it matched", () => {
737
- renderPicker();
738
- typeSearch("teams incident");
835
+ expect(item).toHaveTextContent(variable.title);
836
+ expect({
837
+ variable: variable.name,
838
+ optional: (item.textContent || "").includes("(Optional)"),
839
+ secret: (item.textContent || "").includes(", Secret"),
840
+ }).toEqual({
841
+ variable: variable.name,
842
+ optional: !variable.required,
843
+ secret: variable.isSecret,
844
+ });
845
+ }
846
+ });
847
+
848
+ test("a Jira template that calls Jira asks for its site and its token, and only the token is secret", () => {
849
+ renderPicker();
850
+
851
+ const settings: HTMLElement = within(
852
+ detailsOf("jira-create-issue-for-incident"),
853
+ ).getByTestId("workflow-template-details-settings");
854
+
855
+ expect(
856
+ within(settings).getByTestId(
857
+ "workflow-template-details-setting-jiraBasicAuthToken",
858
+ ),
859
+ ).toHaveTextContent("Secret");
860
+ expect(
861
+ within(settings).getByTestId(
862
+ "workflow-template-details-setting-jiraBaseUrl",
863
+ ),
864
+ ).not.toHaveTextContent("Secret");
865
+ });
866
+
867
+ test("a template that asks for nothing says so", () => {
868
+ renderPicker();
869
+
870
+ const details: HTMLElement = detailsOf("manual-log");
871
+
872
+ expect(
873
+ within(details).getByTestId("workflow-template-details-no-settings"),
874
+ ).toHaveTextContent("Nothing to fill in.");
875
+ expect(
876
+ within(details).queryByTestId("workflow-template-details-settings"),
877
+ ).not.toBeInTheDocument();
878
+ });
879
+
880
+ test("every template's details open, with its trigger and every setting it asks for", () => {
881
+ renderPicker();
882
+ showView(WorkflowTemplateCollection.All);
883
+
884
+ for (const candidate of ALL_TEMPLATES) {
885
+ const details: HTMLElement = within(pick(candidate.id)).getByTestId(
886
+ "workflow-template-details",
887
+ );
888
+
889
+ expect({
890
+ template: candidate.id,
891
+ trigger: within(details).queryAllByTestId(
892
+ "workflow-template-details-trigger",
893
+ ).length,
894
+ settings: within(details)
895
+ .queryAllByTestId(/^workflow-template-details-setting-/)
896
+ .map((item: HTMLElement): string => {
897
+ return (item.getAttribute("data-testid") || "").replace(
898
+ "workflow-template-details-setting-",
899
+ "",
900
+ );
901
+ }),
902
+ }).toEqual({
903
+ template: candidate.id,
904
+ trigger: 1,
905
+ settings: candidate.variables.map(
906
+ (variable: WorkflowTemplateVariable): string => {
907
+ return variable.name;
908
+ },
909
+ ),
910
+ });
911
+ }
912
+ });
913
+ });
914
+
915
+ describe("the search", () => {
916
+ test("is a quiet combobox over the list", () => {
917
+ renderPicker();
918
+
919
+ const search: HTMLElement = getSearch();
920
+
921
+ expect(search).toHaveAttribute("id", WORKFLOW_TEMPLATE_SEARCH_INPUT_ID);
922
+ expect(search).toHaveAttribute("role", "combobox");
923
+ expect(search).toHaveAttribute(
924
+ "aria-controls",
925
+ WORKFLOW_TEMPLATE_LISTBOX_ID,
926
+ );
927
+ expect(search).toHaveAttribute("aria-expanded", "true");
928
+ expect(search).toHaveAttribute("aria-autocomplete", "list");
929
+ expect(search).toHaveAttribute("autocomplete", "off");
930
+ expect(search).toHaveAttribute("placeholder", "Search templates…");
931
+ expect(search).toHaveAccessibleName("Search templates…");
932
+ expect(getListbox()).toHaveAttribute("id", WORKFLOW_TEMPLATE_LISTBOX_ID);
933
+ // Not focused on its own: the step opens on Start from scratch.
934
+ expect(search).not.toHaveFocus();
935
+ });
739
936
 
740
- const row: HTMLElement = screen.getByTestId(
741
- workflowTemplateOptionDomId("incident-created-teams"),
937
+ test("looks through every template, whichever category was open", () => {
938
+ renderPicker();
939
+ showView(WorkflowTemplateCategory.Alerts);
940
+ typeSearch("discord");
941
+
942
+ expect(listedIds()).toEqual(["incident-created-discord"]);
943
+ expect(getSelect()).toHaveValue(WorkflowTemplateCollection.All);
944
+ });
945
+
946
+ test("picks its best match and opens its details, so Enter takes it", () => {
947
+ renderPicker();
948
+ typeSearch("heartbeat");
949
+
950
+ expect(pickedId()).toBe("scheduled-heartbeat");
951
+ expect(
952
+ within(row("scheduled-heartbeat")).getByTestId(
953
+ "workflow-template-details",
954
+ ),
955
+ ).toBeInTheDocument();
956
+ expect(getSearch()).toHaveAttribute(
957
+ "aria-activedescendant",
958
+ workflowTemplateOptionDomId("scheduled-heartbeat"),
742
959
  );
743
- const marks: Array<string> = Array.from(row.querySelectorAll("mark")).map(
744
- (mark: Element) => {
745
- return mark.textContent || "";
746
- },
960
+ });
961
+
962
+ test("narrowed to a category, it finds only that category's matches", () => {
963
+ renderPicker();
964
+ typeSearch("slack");
965
+ showView(WorkflowTemplateCategory.Monitors);
966
+
967
+ expect(listedIds().length).toBeGreaterThan(0);
968
+
969
+ for (const templateId of listedIds()) {
970
+ expect(template(templateId).category).toBe(
971
+ WorkflowTemplateCategory.Monitors,
972
+ );
973
+ }
974
+ });
975
+
976
+ test("tells a screen reader how many it found, and says nothing while browsing", () => {
977
+ renderPicker();
978
+
979
+ const count: HTMLElement = screen.getByTestId(
980
+ "workflow-template-result-count",
747
981
  );
748
982
 
983
+ expect(count).toHaveAttribute("aria-live", "polite");
984
+ expect(count.className).toContain("sr-only");
985
+ expect(count.textContent).toBe("");
986
+
987
+ typeSearch("slack");
988
+
989
+ expect(count).toHaveTextContent(`${listedIds().length} results`);
990
+
991
+ typeSearch("discord");
992
+
993
+ expect(count).toHaveTextContent("1 result");
994
+ });
995
+
996
+ test("marks the words it matched", () => {
997
+ renderPicker();
998
+ typeSearch("teams incident");
999
+
1000
+ const marks: Array<string> = Array.from(
1001
+ row("incident-created-teams").querySelectorAll("mark"),
1002
+ ).map((mark: Element) => {
1003
+ return mark.textContent || "";
1004
+ });
1005
+
749
1006
  expect(marks).toContain("Teams");
750
1007
  expect(marks).toContain("incident");
751
1008
  });
752
1009
 
753
- /*
754
- * Read as the Add Component picker reads it: a word that matches nothing as
755
- * typed is taken for a typo, and the word it was read as is marked whole.
756
- */
757
1010
  test("forgives a typo, and marks the word it was read as", () => {
758
1011
  renderPicker();
759
1012
  typeSearch("incidnet");
760
1013
 
761
1014
  expect(listedIds()).toContain("incident-created-slack");
762
-
763
- const row: HTMLElement = screen.getByTestId(
764
- workflowTemplateOptionDomId("incident-created-slack"),
765
- );
766
-
767
1015
  expect(
768
- Array.from(row.querySelectorAll("mark")).map((mark: Element) => {
769
- return mark.textContent;
770
- }),
1016
+ Array.from(row("incident-created-slack").querySelectorAll("mark")).map(
1017
+ (mark: Element) => {
1018
+ return mark.textContent;
1019
+ },
1020
+ ),
771
1021
  ).toContain("incident");
772
1022
  });
773
1023
 
@@ -778,14 +1028,6 @@ describe("the search", () => {
778
1028
  expect(listedIds()).toContain("webhook-relay");
779
1029
  });
780
1030
 
781
- test("highlights the best match", () => {
782
- renderPicker();
783
- typeSearch("heartbeat");
784
-
785
- expect(activeId()).toBe("scheduled-heartbeat");
786
- expect(previewTitle()).toBe(template("scheduled-heartbeat").name);
787
- });
788
-
789
1031
  test("a clear button takes the search away and gives the focus back to the box", () => {
790
1032
  renderPicker();
791
1033
 
@@ -794,27 +1036,23 @@ describe("the search", () => {
794
1036
  ).not.toBeInTheDocument();
795
1037
 
796
1038
  typeSearch("slack");
797
- fireEvent.click(screen.getByTestId("workflow-template-search-clear"));
798
1039
 
799
- expect(getSearch()).toHaveValue("");
800
- expect(getSearch()).toHaveFocus();
801
- expect(listedIds()).toEqual([...RECOMMENDED_WORKFLOW_TEMPLATE_IDS]);
802
- });
1040
+ const clear: HTMLElement = screen.getByTestId(
1041
+ "workflow-template-search-clear",
1042
+ );
803
1043
 
804
- test("clearing the search goes back to the category that was being browsed", () => {
805
- renderPicker();
806
- showView(WorkflowTemplateCategory.OnCall);
807
- typeSearch("slack");
808
- typeSearch("");
1044
+ expect(clear).toHaveAccessibleName("Clear search");
809
1045
 
810
- expect(categoryRadio(WorkflowTemplateCategory.OnCall)).toHaveAttribute(
811
- "aria-checked",
812
- "true",
813
- );
1046
+ fireEvent.click(clear);
1047
+
1048
+ expect(getSearch()).toHaveValue("");
1049
+ expect(getSearch()).toHaveFocus();
1050
+ expect(listedIds()).toEqual(RECOMMENDED);
1051
+ expect(pickedId()).toBeNull();
814
1052
  });
815
1053
 
816
1054
  describe("when nothing matches", () => {
817
- test("it says so, offers to clear the search, and previews nothing", () => {
1055
+ test("it says so, offers to clear the search, and picks nothing", () => {
818
1056
  renderPicker();
819
1057
  typeSearch("pagerduty");
820
1058
 
@@ -825,9 +1063,7 @@ describe("the search", () => {
825
1063
  "Try other words, or start from scratch.",
826
1064
  );
827
1065
  expect(listedIds()).toEqual([]);
828
- expect(
829
- screen.queryByTestId("workflow-template-preview"),
830
- ).not.toBeInTheDocument();
1066
+ expect(openDetails()).toEqual([]);
831
1067
  expect(getSearch()).not.toHaveAttribute("aria-activedescendant");
832
1068
  // There is nothing else to search.
833
1069
  expect(
@@ -837,10 +1073,21 @@ describe("the search", () => {
837
1073
  fireEvent.click(screen.getByTestId("workflow-template-empty-clear"));
838
1074
 
839
1075
  expect(getSearch()).toHaveValue("");
840
- expect(listedIds()).toEqual([...RECOMMENDED_WORKFLOW_TEMPLATE_IDS]);
1076
+ expect(getSearch()).toHaveFocus();
1077
+ expect(listedIds()).toEqual(RECOMMENDED);
841
1078
  });
842
1079
 
843
- test("narrowed to a category, it offers the matches elsewhere", () => {
1080
+ test("the empty list draws no frame of its own; the message does", () => {
1081
+ renderPicker();
1082
+ typeSearch("pagerduty");
1083
+
1084
+ expect(getListbox().className).not.toContain("border-gray-200");
1085
+ expect(screen.getByTestId("workflow-template-empty").className).toContain(
1086
+ "border-dashed",
1087
+ );
1088
+ });
1089
+
1090
+ test("narrowed to a category, it offers the matches elsewhere, with how many", () => {
844
1091
  renderPicker();
845
1092
  typeSearch("slack");
846
1093
  showView(WorkflowTemplateCategory.Jira);
@@ -850,86 +1097,91 @@ describe("the search", () => {
850
1097
  const everywhere: HTMLElement = screen.getByTestId(
851
1098
  "workflow-template-search-everywhere",
852
1099
  );
853
- const allCount: string = (
854
- categoryRadio(WorkflowTemplateCollection.All).getAttribute(
855
- "aria-label",
856
- ) || ""
857
- ).replace(/^All templates /, "");
1100
+ const matches: number =
1101
+ getWorkflowTemplatePickerCounts("slack").get(
1102
+ WorkflowTemplateCollection.All,
1103
+ ) || 0;
1104
+
1105
+ expect(matches).toBeGreaterThan(1);
858
1106
 
859
- expect(everywhere).toHaveTextContent(`Search all templates ${allCount}`);
1107
+ expect(everywhere).toHaveTextContent(`Search all templates (${matches})`);
860
1108
 
861
1109
  fireEvent.click(everywhere);
862
1110
 
863
- expect(categoryRadio(WorkflowTemplateCollection.All)).toHaveAttribute(
864
- "aria-checked",
865
- "true",
866
- );
867
- expect(listedIds().length).toBeGreaterThan(0);
1111
+ expect(getSelect()).toHaveValue(WorkflowTemplateCollection.All);
1112
+ expect(listedIds()).toHaveLength(matches);
868
1113
  expect(getSearch()).toHaveValue("slack");
869
1114
  });
870
-
871
- test("no keyboard hint, since there is nothing to move to", () => {
872
- renderPicker();
873
- typeSearch("pagerduty");
874
-
875
- expect(screen.queryByText("to move")).not.toBeInTheDocument();
876
- });
877
1115
  });
878
1116
  });
879
1117
 
880
1118
  describe("the keyboard, from the search box", () => {
881
- test("the arrow keys move the highlight, and the preview follows", () => {
1119
+ test("with nothing picked, down picks the first template and opens its details", () => {
882
1120
  renderPicker();
883
-
884
- const recommended: Array<string> = [...RECOMMENDED_WORKFLOW_TEMPLATE_IDS];
1121
+ getSearch().focus();
885
1122
 
886
1123
  expect(press(getSearch(), "ArrowDown")).toBe(true);
887
- expect(activeId()).toBe(recommended[1]);
1124
+ expect(pickedId()).toBe(RECOMMENDED[0]);
1125
+ expect(openDetails()).toHaveLength(1);
888
1126
  expect(getSearch()).toHaveAttribute(
889
1127
  "aria-activedescendant",
890
- workflowTemplateOptionDomId(recommended[1]!),
1128
+ workflowTemplateOptionDomId(RECOMMENDED[0]!),
891
1129
  );
892
- expect(previewTitle()).toBe(template(recommended[1]!).name);
1130
+ // The focus stays in the box, so typing goes on.
1131
+ expect(getSearch()).toHaveFocus();
1132
+ });
1133
+
1134
+ test("with nothing picked, up picks the last template", () => {
1135
+ renderPicker();
893
1136
 
1137
+ expect(press(getSearch(), "ArrowUp")).toBe(true);
1138
+ expect(pickedId()).toBe(RECOMMENDED[RECOMMENDED.length - 1]);
1139
+ });
1140
+
1141
+ test("the arrow keys then move the pick, one row at a time", () => {
1142
+ renderPicker();
1143
+
1144
+ press(getSearch(), "ArrowDown");
1145
+ press(getSearch(), "ArrowDown");
894
1146
  press(getSearch(), "ArrowDown");
895
1147
  press(getSearch(), "ArrowUp");
896
1148
 
897
- expect(activeId()).toBe(recommended[1]);
898
- // The focus stays in the box, so typing goes on.
899
- expect(getSearch()).toHaveFocus();
1149
+ expect(pickedId()).toBe(RECOMMENDED[1]);
900
1150
  });
901
1151
 
902
- test("the highlight is scrolled into view as it moves", () => {
1152
+ test("the picked row is scrolled into view as the pick moves", () => {
903
1153
  renderPicker();
904
1154
  press(getSearch(), "ArrowDown");
905
1155
 
906
1156
  expect(scrollIntoView).toHaveBeenCalledWith({ block: "nearest" });
907
1157
  });
908
1158
 
909
- test("it stops at the top and the bottom of the list", () => {
1159
+ test("a click does not scroll: the row is where the pointer is", () => {
910
1160
  renderPicker();
1161
+ pick(RECOMMENDED[2]!);
911
1162
 
912
- const recommended: Array<string> = [...RECOMMENDED_WORKFLOW_TEMPLATE_IDS];
1163
+ expect(scrollIntoView).not.toHaveBeenCalled();
1164
+ });
913
1165
 
914
- press(getSearch(), "ArrowUp");
915
- expect(activeId()).toBe(recommended[0]);
1166
+ test("it stops at the bottom of the list", () => {
1167
+ renderPicker();
916
1168
 
917
- for (let i: number = 0; i < recommended.length + 3; i++) {
1169
+ for (let i: number = 0; i < RECOMMENDED.length + 3; i++) {
918
1170
  press(getSearch(), "ArrowDown");
919
1171
  }
920
1172
 
921
- expect(activeId()).toBe(recommended[recommended.length - 1]);
1173
+ expect(pickedId()).toBe(RECOMMENDED[RECOMMENDED.length - 1]);
922
1174
  });
923
1175
 
924
- test("Home and End move the caret in the box, not the highlight", () => {
1176
+ test("Home and End move the caret in the box, not the pick", () => {
925
1177
  renderPicker();
926
1178
 
927
1179
  expect(press(getSearch(), "End")).toBe(false);
928
1180
  expect(press(getSearch(), "Home")).toBe(false);
929
- expect(activeId()).toBe(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[0]);
1181
+ expect(pickedId()).toBeNull();
930
1182
  });
931
1183
 
932
- test("Enter uses the highlighted template", () => {
1184
+ test("Enter uses the template picked, which after typing is the best match", () => {
933
1185
  const harness: Harness = renderPicker();
934
1186
 
935
1187
  typeSearch("telegram");
@@ -941,9 +1193,19 @@ describe("the keyboard, from the search box", () => {
941
1193
  );
942
1194
  });
943
1195
 
1196
+ test("Enter with nothing picked does nothing", () => {
1197
+ const harness: Harness = renderPicker();
1198
+
1199
+ expect(press(getSearch(), "Enter")).toBe(true);
1200
+
1201
+ expect(harness.onUseTemplate).not.toHaveBeenCalled();
1202
+ expect(harness.onStartFromScratch).not.toHaveBeenCalled();
1203
+ });
1204
+
944
1205
  test("Enter while an input method is still composing does nothing", () => {
945
1206
  const harness: Harness = renderPicker();
946
1207
 
1208
+ typeSearch("telegram");
947
1209
  fireEvent.keyDown(getSearch(), { key: "Enter", isComposing: true });
948
1210
 
949
1211
  expect(harness.onUseTemplate).not.toHaveBeenCalled();
@@ -980,30 +1242,33 @@ describe("the keyboard, in the list", () => {
980
1242
  renderPicker();
981
1243
 
982
1244
  const listbox: HTMLElement = getListbox();
983
- const recommended: Array<string> = [...RECOMMENDED_WORKFLOW_TEMPLATE_IDS];
984
1245
 
985
1246
  expect(listbox).toHaveAttribute("tabindex", "0");
986
1247
 
987
1248
  listbox.focus();
988
1249
 
989
1250
  press(listbox, "ArrowDown");
990
- expect(activeId()).toBe(recommended[1]);
1251
+ expect(pickedId()).toBe(RECOMMENDED[0]);
1252
+
1253
+ press(listbox, "ArrowDown");
1254
+ expect(pickedId()).toBe(RECOMMENDED[1]);
991
1255
  expect(listbox).toHaveAttribute(
992
1256
  "aria-activedescendant",
993
- workflowTemplateOptionDomId(recommended[1]!),
1257
+ workflowTemplateOptionDomId(RECOMMENDED[1]!),
994
1258
  );
995
1259
 
996
1260
  expect(press(listbox, "End")).toBe(true);
997
- expect(activeId()).toBe(recommended[recommended.length - 1]);
1261
+ expect(pickedId()).toBe(RECOMMENDED[RECOMMENDED.length - 1]);
998
1262
 
999
1263
  expect(press(listbox, "Home")).toBe(true);
1000
- expect(activeId()).toBe(recommended[0]);
1264
+ expect(pickedId()).toBe(RECOMMENDED[0]);
1001
1265
  });
1002
1266
 
1003
- test("Enter uses the highlighted template, and Space does not scroll the dialog", () => {
1267
+ test("Enter uses the template picked, and Space does not scroll the dialog", () => {
1004
1268
  const harness: Harness = renderPicker();
1005
1269
  const listbox: HTMLElement = getListbox();
1006
1270
 
1271
+ press(listbox, "ArrowDown");
1007
1272
  press(listbox, "ArrowDown");
1008
1273
  expect(press(listbox, " ")).toBe(true);
1009
1274
  expect(harness.onUseTemplate).not.toHaveBeenCalled();
@@ -1011,7 +1276,7 @@ describe("the keyboard, in the list", () => {
1011
1276
  press(listbox, "Enter");
1012
1277
 
1013
1278
  expect(harness.onUseTemplate.mock.calls[0]?.[0]).toEqual(
1014
- template(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[1]!),
1279
+ template(RECOMMENDED[1]!),
1015
1280
  );
1016
1281
  });
1017
1282
 
@@ -1024,12 +1289,10 @@ describe("the keyboard, in the list", () => {
1024
1289
  const lastIncident: string = listedIds(groups[0]).pop() as string;
1025
1290
  const firstAlert: string = listedIds(groups[1])[0] as string;
1026
1291
 
1027
- fireEvent.click(
1028
- screen.getByTestId(workflowTemplateOptionDomId(lastIncident)),
1029
- );
1292
+ pick(lastIncident);
1030
1293
  press(listbox, "ArrowDown");
1031
1294
 
1032
- expect(activeId()).toBe(firstAlert);
1295
+ expect(pickedId()).toBe(firstAlert);
1033
1296
  });
1034
1297
 
1035
1298
  test("Escape in the list is left to the dialog", () => {
@@ -1038,17 +1301,28 @@ describe("the keyboard, in the list", () => {
1038
1301
  expect(press(getListbox(), "Escape")).toBe(false);
1039
1302
  });
1040
1303
 
1041
- test("a slash anywhere outside a text box goes back to the search", () => {
1304
+ test("a slash anywhere outside a text box goes to the search", () => {
1042
1305
  renderPicker();
1043
1306
 
1044
- const listbox: HTMLElement = getListbox();
1307
+ expect(getScratch()).toHaveFocus();
1308
+ expect(press(getScratch(), "/")).toBe(true);
1309
+ expect(getSearch()).toHaveFocus();
1045
1310
 
1046
- listbox.focus();
1311
+ getListbox().focus();
1047
1312
 
1048
- expect(press(listbox, "/")).toBe(true);
1313
+ expect(press(getListbox(), "/")).toBe(true);
1049
1314
  expect(getSearch()).toHaveFocus();
1050
1315
  });
1051
1316
 
1317
+ test("a slash in the category select is the select's", () => {
1318
+ renderPicker();
1319
+
1320
+ getSelect().focus();
1321
+
1322
+ expect(press(getSelect(), "/")).toBe(false);
1323
+ expect(getSelect()).toHaveFocus();
1324
+ });
1325
+
1052
1326
  test("a slash with a modifier is not taken", () => {
1053
1327
  renderPicker();
1054
1328
 
@@ -1076,281 +1350,6 @@ describe("the keyboard, in the list", () => {
1076
1350
  });
1077
1351
  });
1078
1352
 
1079
- describe("the mouse", () => {
1080
- test("a click highlights a template and previews it, without using it", () => {
1081
- const harness: Harness = renderPicker();
1082
- const pick: string = RECOMMENDED_WORKFLOW_TEMPLATE_IDS[3]!;
1083
-
1084
- fireEvent.click(screen.getByTestId(workflowTemplateOptionDomId(pick)));
1085
-
1086
- expect(activeId()).toBe(pick);
1087
- expect(previewTitle()).toBe(template(pick).name);
1088
- expect(harness.onUseTemplate).not.toHaveBeenCalled();
1089
- });
1090
-
1091
- test("a double-click uses the template", () => {
1092
- const harness: Harness = renderPicker();
1093
- const pick: string = RECOMMENDED_WORKFLOW_TEMPLATE_IDS[2]!;
1094
-
1095
- fireEvent.doubleClick(
1096
- screen.getByTestId(workflowTemplateOptionDomId(pick)),
1097
- );
1098
-
1099
- expect(harness.onUseTemplate).toHaveBeenCalledTimes(1);
1100
- expect(harness.onUseTemplate.mock.calls[0]?.[0]).toEqual(template(pick));
1101
- });
1102
-
1103
- test("the highlight is a tint on the row, not a filled button", () => {
1104
- renderPicker();
1105
-
1106
- const active: HTMLElement = screen.getByTestId(
1107
- workflowTemplateOptionDomId(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[0]!),
1108
- );
1109
- const other: HTMLElement = screen.getByTestId(
1110
- workflowTemplateOptionDomId(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[1]!),
1111
- );
1112
-
1113
- expect(active.className).toContain("bg-indigo-50");
1114
- expect(other.className).toContain("hover:bg-gray-50");
1115
- expect(other.className).not.toContain("bg-indigo-50");
1116
- });
1117
- });
1118
-
1119
- describe("the preview", () => {
1120
- type ShowFunction = (templateId: string) => HTMLElement;
1121
-
1122
- const show: ShowFunction = (templateId: string): HTMLElement => {
1123
- showView(WorkflowTemplateCollection.All);
1124
- fireEvent.click(
1125
- screen.getByTestId(workflowTemplateOptionDomId(templateId)),
1126
- );
1127
-
1128
- return getPreview();
1129
- };
1130
-
1131
- test("names the template, its category and its size, and says what it does", () => {
1132
- renderPicker();
1133
-
1134
- const preview: HTMLElement = show("incident-created-slack");
1135
-
1136
- expect(
1137
- within(preview).getByRole("heading", { level: 3 }),
1138
- ).toHaveTextContent("Tell Slack when an incident opens");
1139
- expect(preview).toHaveAccessibleName("Tell Slack when an incident opens");
1140
- expect(
1141
- within(preview).getByTestId("workflow-template-preview-meta"),
1142
- ).toHaveTextContent("Incidents · 3 blocks");
1143
- expect(preview).toHaveTextContent(
1144
- template("incident-created-slack").description,
1145
- );
1146
- });
1147
-
1148
- test("a Jira template's size line says which part it is from", () => {
1149
- renderPicker();
1150
-
1151
- expect(
1152
- within(show("jira-create-issue-for-alert")).getByTestId(
1153
- "workflow-template-preview-meta",
1154
- ),
1155
- ).toHaveTextContent("Jira · Alerts · 8 blocks");
1156
- });
1157
-
1158
- test("how it works: the trigger, then the other blocks, as the canvas names them", () => {
1159
- renderPicker();
1160
-
1161
- const preview: HTMLElement = show("scheduled-check-alert-slack");
1162
- const blocks: HTMLElement = within(preview).getByTestId(
1163
- "workflow-template-preview-blocks",
1164
- );
1165
-
1166
- // Drawn in capitals; the text is the product's existing "How It Works".
1167
- expect(within(preview).getByText("How It Works")).toBeInTheDocument();
1168
- expect(within(blocks).getByText("Trigger")).toBeInTheDocument();
1169
- expect(within(blocks).getByText("Steps")).toBeInTheDocument();
1170
- expect(
1171
- within(blocks).getByTestId("workflow-template-preview-trigger"),
1172
- ).toHaveTextContent("Schedule");
1173
- expect(
1174
- within(blocks)
1175
- .getAllByTestId("workflow-template-preview-step")
1176
- .map((step: HTMLElement) => {
1177
- return step.textContent;
1178
- }),
1179
- ).toEqual(["API Get (JSON)", "Send Message to Slack", "Log"]);
1180
- });
1181
-
1182
- test("what you'll need: each setting, the secret ones and the optional ones said so", () => {
1183
- renderPicker();
1184
-
1185
- const preview: HTMLElement = show("scheduled-email-digest");
1186
- const settings: HTMLElement = within(preview).getByTestId(
1187
- "workflow-template-preview-settings",
1188
- );
1189
- const variables: Array<{
1190
- name: string;
1191
- title: string;
1192
- required: boolean;
1193
- isSecret: boolean;
1194
- }> = template("scheduled-email-digest").variables;
1195
-
1196
- expect(within(preview).getByText("What you'll need")).toBeInTheDocument();
1197
- expect(within(settings).getAllByRole("listitem")).toHaveLength(
1198
- variables.length,
1199
- );
1200
-
1201
- for (const variable of variables) {
1202
- const row: HTMLElement = within(settings).getByTestId(
1203
- `workflow-template-preview-setting-${variable.name}`,
1204
- );
1205
-
1206
- expect(row).toHaveTextContent(variable.title);
1207
- expect({
1208
- variable: variable.name,
1209
- optional: (row.textContent || "").includes("(Optional)"),
1210
- secret: (row.textContent || "").includes("Secret"),
1211
- }).toEqual({
1212
- variable: variable.name,
1213
- optional: !variable.required,
1214
- secret: variable.isSecret,
1215
- });
1216
- }
1217
- });
1218
-
1219
- test("a template that asks for nothing says so", () => {
1220
- renderPicker();
1221
-
1222
- const preview: HTMLElement = show("manual-log");
1223
-
1224
- expect(
1225
- within(preview).getByTestId("workflow-template-preview-no-settings"),
1226
- ).toHaveTextContent("Nothing to fill in.");
1227
- expect(
1228
- within(preview).queryByTestId("workflow-template-preview-settings"),
1229
- ).not.toBeInTheDocument();
1230
- });
1231
- });
1232
-
1233
- describe("on a narrow screen", () => {
1234
- test("opening a template shows its preview in the list's place, and Back to templates returns", () => {
1235
- renderPicker();
1236
-
1237
- const listColumn: HTMLElement = screen.getByTestId(
1238
- "workflow-template-list-column",
1239
- );
1240
- const previewColumn: HTMLElement = screen.getByTestId(
1241
- "workflow-template-preview-column",
1242
- );
1243
-
1244
- // Before: the list shows, the preview waits.
1245
- expect(listColumn.className).not.toContain("max-md:hidden");
1246
- expect(previewColumn.className).toContain("max-md:hidden");
1247
-
1248
- fireEvent.click(
1249
- screen.getByTestId(
1250
- workflowTemplateOptionDomId(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[1]!),
1251
- ),
1252
- );
1253
-
1254
- expect(listColumn.className).toContain("max-md:hidden");
1255
- expect(previewColumn.className).not.toContain("max-md:hidden");
1256
-
1257
- const back: HTMLElement = screen.getByTestId(
1258
- "workflow-template-preview-back",
1259
- );
1260
-
1261
- expect(back).toHaveTextContent("Back to templates");
1262
- // Only drawn where the preview takes the list's place.
1263
- expect(back.className).toContain("md:hidden");
1264
-
1265
- fireEvent.click(back);
1266
-
1267
- expect(listColumn.className).not.toContain("max-md:hidden");
1268
- expect(previewColumn.className).toContain("max-md:hidden");
1269
- // The template stays highlighted.
1270
- expect(activeId()).toBe(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[1]);
1271
- });
1272
-
1273
- /*
1274
- * jsdom draws nothing, so the list column is made to report what a phone's
1275
- * browser would once the preview has taken its place.
1276
- */
1277
- test("the focus follows: to Back to templates, then to the list again", () => {
1278
- renderPicker();
1279
-
1280
- const listColumn: HTMLElement = screen.getByTestId(
1281
- "workflow-template-list-column",
1282
- );
1283
- const realGetComputedStyle: typeof window.getComputedStyle =
1284
- window.getComputedStyle.bind(window);
1285
-
1286
- jest
1287
- .spyOn(window, "getComputedStyle")
1288
- .mockImplementation((element: Element): CSSStyleDeclaration => {
1289
- const style: CSSStyleDeclaration = realGetComputedStyle(element);
1290
-
1291
- if (
1292
- element === listColumn &&
1293
- listColumn.className.includes("max-md:hidden")
1294
- ) {
1295
- return { ...style, display: "none" } as CSSStyleDeclaration;
1296
- }
1297
-
1298
- return style;
1299
- });
1300
-
1301
- fireEvent.click(
1302
- screen.getByTestId(
1303
- workflowTemplateOptionDomId(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[2]!),
1304
- ),
1305
- );
1306
-
1307
- expect(screen.getByTestId("workflow-template-preview-back")).toHaveFocus();
1308
-
1309
- fireEvent.click(screen.getByTestId("workflow-template-preview-back"));
1310
-
1311
- expect(getListbox()).toHaveFocus();
1312
- });
1313
-
1314
- test("where the list and the preview sit side by side, a click leaves the focus where it was", () => {
1315
- renderPicker();
1316
-
1317
- const listbox: HTMLElement = getListbox();
1318
-
1319
- listbox.focus();
1320
- fireEvent.click(
1321
- screen.getByTestId(
1322
- workflowTemplateOptionDomId(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[2]!),
1323
- ),
1324
- );
1325
-
1326
- expect(listbox).toHaveFocus();
1327
- });
1328
-
1329
- test("a new search or another category closes the preview again", () => {
1330
- renderPicker();
1331
-
1332
- fireEvent.click(
1333
- screen.getByTestId(
1334
- workflowTemplateOptionDomId(RECOMMENDED_WORKFLOW_TEMPLATE_IDS[1]!),
1335
- ),
1336
- );
1337
- typeSearch("slack");
1338
-
1339
- expect(
1340
- screen.getByTestId("workflow-template-list-column").className,
1341
- ).not.toContain("max-md:hidden");
1342
-
1343
- fireEvent.click(
1344
- screen.getByTestId(workflowTemplateOptionDomId("incident-created-slack")),
1345
- );
1346
- showView(WorkflowTemplateCategory.Jira);
1347
-
1348
- expect(
1349
- screen.getByTestId("workflow-template-list-column").className,
1350
- ).not.toContain("max-md:hidden");
1351
- });
1352
- });
1353
-
1354
1353
  describe("the state it reports", () => {
1355
1354
  test("is the whole state, as the wizard keeps it", () => {
1356
1355
  const harness: Harness = renderPicker();
@@ -1361,8 +1360,7 @@ describe("the state it reports", () => {
1361
1360
  search: "slack",
1362
1361
  browseView: WorkflowTemplateCollection.Recommended,
1363
1362
  searchView: WorkflowTemplateCollection.All,
1364
- activeTemplateId: null,
1365
- isPreviewOpen: false,
1363
+ selectedTemplateId: null,
1366
1364
  });
1367
1365
 
1368
1366
  showView(WorkflowTemplateCategory.Monitors);
@@ -1371,55 +1369,82 @@ describe("the state it reports", () => {
1371
1369
  search: "slack",
1372
1370
  browseView: WorkflowTemplateCollection.Recommended,
1373
1371
  searchView: WorkflowTemplateCategory.Monitors,
1374
- activeTemplateId: null,
1375
- isPreviewOpen: false,
1372
+ selectedTemplateId: null,
1376
1373
  });
1377
1374
 
1378
- fireEvent.click(
1379
- screen.getByTestId(
1380
- workflowTemplateOptionDomId("monitor-offline-only-slack"),
1381
- ),
1382
- );
1375
+ fireEvent.click(row("monitor-offline-only-slack"));
1383
1376
 
1384
1377
  expect(harness.onStateChange).toHaveBeenLastCalledWith({
1385
1378
  search: "slack",
1386
1379
  browseView: WorkflowTemplateCollection.Recommended,
1387
1380
  searchView: WorkflowTemplateCategory.Monitors,
1388
- activeTemplateId: "monitor-offline-only-slack",
1389
- isPreviewOpen: true,
1381
+ selectedTemplateId: "monitor-offline-only-slack",
1390
1382
  });
1391
1383
  });
1392
1384
 
1385
+ test("moving with the keyboard reports only the new pick", () => {
1386
+ const harness: Harness = renderPicker();
1387
+
1388
+ act(() => {
1389
+ press(getSearch(), "ArrowDown");
1390
+ });
1391
+
1392
+ expect(harness.onStateChange).toHaveBeenLastCalledWith({
1393
+ ...INITIAL_WORKFLOW_TEMPLATE_PICKER_STATE,
1394
+ selectedTemplateId: RECOMMENDED[0],
1395
+ });
1396
+ });
1397
+
1398
+ test("Start from scratch changes nothing in the picker itself", () => {
1399
+ const harness: Harness = renderPicker();
1400
+
1401
+ fireEvent.click(getScratch());
1402
+
1403
+ expect(harness.onStateChange).not.toHaveBeenCalled();
1404
+ });
1405
+
1393
1406
  test("a picker given a state shows it: the search, the category and the template", () => {
1394
1407
  renderPicker({
1395
- initialState: {
1408
+ initialState: stateWith({
1396
1409
  search: "slack",
1397
1410
  browseView: WorkflowTemplateCategory.Jira,
1398
1411
  searchView: WorkflowTemplateCategory.Monitors,
1399
- activeTemplateId: "monitor-offline-only-slack",
1400
- isPreviewOpen: false,
1401
- },
1412
+ selectedTemplateId: "monitor-offline-only-slack",
1413
+ }),
1402
1414
  });
1403
1415
 
1404
1416
  expect(getSearch()).toHaveValue("slack");
1405
- expect(categoryRadio(WorkflowTemplateCategory.Monitors)).toHaveAttribute(
1406
- "aria-checked",
1407
- "true",
1408
- );
1409
- expect(activeId()).toBe("monitor-offline-only-slack");
1410
- expect(previewTitle()).toBe(template("monitor-offline-only-slack").name);
1417
+ expect(getSelect()).toHaveValue(WorkflowTemplateCategory.Monitors);
1418
+ expect(pickedId()).toBe("monitor-offline-only-slack");
1419
+ expect(
1420
+ within(row("monitor-offline-only-slack")).getByTestId(
1421
+ "workflow-template-details",
1422
+ ),
1423
+ ).toBeInTheDocument();
1411
1424
  });
1412
1425
 
1413
- test("moving with the keyboard reports only the new highlight", () => {
1414
- const harness: Harness = renderPicker();
1415
-
1416
- act(() => {
1417
- press(getSearch(), "ArrowDown");
1426
+ /*
1427
+ * Back from Name puts the focus on what was chosen: the list, with the
1428
+ * template open, or Start from scratch.
1429
+ */
1430
+ test("coming back to a picked template, the focus is on the list", () => {
1431
+ renderPicker({
1432
+ initialState: stateWith({ selectedTemplateId: RECOMMENDED[2]! }),
1418
1433
  });
1419
1434
 
1420
- expect(harness.onStateChange).toHaveBeenLastCalledWith({
1421
- ...INITIAL_WORKFLOW_TEMPLATE_PICKER_STATE,
1422
- activeTemplateId: RECOMMENDED_WORKFLOW_TEMPLATE_IDS[1],
1435
+ expect(getListbox()).toHaveFocus();
1436
+ expect(getListbox()).toHaveAttribute(
1437
+ "aria-activedescendant",
1438
+ workflowTemplateOptionDomId(RECOMMENDED[2]!),
1439
+ );
1440
+ });
1441
+
1442
+ test("coming back to Start from scratch, the focus is on it", () => {
1443
+ renderPicker({
1444
+ initialState: stateWith({ selectedTemplateId: RECOMMENDED[2]! }),
1445
+ isStartFromScratchChosen: true,
1423
1446
  });
1447
+
1448
+ expect(getScratch()).toHaveFocus();
1424
1449
  });
1425
1450
  });