@cccsaurora/howler-ui 2.18.0-dev.794 → 2.18.0-dev.802

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 (298) hide show
  1. package/api/index.d.ts +0 -2
  2. package/api/index.js +2 -4
  3. package/api/search/facet/hit.d.ts +3 -1
  4. package/api/search/facet/index.d.ts +1 -3
  5. package/api/search/index.d.ts +1 -2
  6. package/api/search/index.js +1 -2
  7. package/commons/components/leftnav/LeftNavDrawer.js +1 -1
  8. package/components/app/App.js +8 -36
  9. package/components/app/hooks/useMatchers.d.ts +1 -1
  10. package/components/app/hooks/useMatchers.js +11 -23
  11. package/components/app/hooks/useMatchers.test.js +22 -22
  12. package/components/app/hooks/useTitle.js +3 -3
  13. package/components/app/providers/FavouritesProvider.js +2 -2
  14. package/components/app/providers/HitProvider.d.ts +22 -0
  15. package/components/app/providers/{RecordProvider.js → HitProvider.js} +41 -41
  16. package/components/app/providers/{RecordSearchProvider.d.ts → HitSearchProvider.d.ts} +6 -6
  17. package/components/app/providers/{RecordSearchProvider.js → HitSearchProvider.js} +17 -12
  18. package/components/app/providers/{RecordSearchProvider.test.js → HitSearchProvider.test.js} +71 -52
  19. package/components/app/providers/ModalProvider.d.ts +0 -1
  20. package/components/app/providers/ParameterProvider.d.ts +2 -9
  21. package/components/app/providers/ParameterProvider.js +240 -165
  22. package/components/app/providers/ParameterProvider.test.js +94 -346
  23. package/components/app/providers/UserListProvider.js +8 -28
  24. package/components/elements/PluginTypography.d.ts +1 -2
  25. package/components/elements/PluginTypography.js +2 -3
  26. package/components/elements/UserList.d.ts +2 -5
  27. package/components/elements/UserList.js +8 -18
  28. package/components/elements/addons/search/phrase/Phrase.js +1 -1
  29. package/components/elements/display/ChipPopper.d.ts +1 -1
  30. package/components/elements/display/HowlerCard.js +1 -1
  31. package/components/elements/display/Modal.js +0 -2
  32. package/components/elements/display/icons/BundleButton.d.ts +6 -0
  33. package/components/elements/display/icons/BundleButton.js +32 -0
  34. package/components/elements/hit/HitActions.js +4 -4
  35. package/components/elements/hit/HitBanner.d.ts +0 -1
  36. package/components/elements/hit/HitBanner.js +49 -29
  37. package/components/elements/hit/HitCard.d.ts +0 -2
  38. package/components/elements/hit/HitCard.js +7 -7
  39. package/components/elements/{record/RecordComments.d.ts → hit/HitComments.d.ts} +4 -5
  40. package/components/elements/{record/RecordComments.js → hit/HitComments.js} +28 -29
  41. package/components/elements/{ObjectDetails.js → hit/HitDetails.js} +17 -17
  42. package/components/elements/hit/HitLabels.js +2 -2
  43. package/components/elements/hit/HitLinks.js +1 -1
  44. package/components/elements/hit/HitOutline.d.ts +0 -1
  45. package/components/elements/hit/HitOutline.js +3 -3
  46. package/components/elements/hit/{HitPreview.d.ts → HitQuickSearch.d.ts} +3 -3
  47. package/components/elements/hit/{HitPreview.js → HitQuickSearch.js} +4 -10
  48. package/components/elements/hit/HitRelated.d.ts +6 -0
  49. package/components/elements/hit/HitRelated.js +7 -0
  50. package/components/elements/hit/HitSummary.d.ts +1 -2
  51. package/components/elements/hit/HitSummary.js +5 -6
  52. package/components/elements/{record/RecordWorklog.d.ts → hit/HitWorklog.d.ts} +3 -4
  53. package/components/elements/{record/RecordWorklog.js → hit/HitWorklog.js} +13 -15
  54. package/components/elements/hit/aggregate/HitGraph.js +8 -8
  55. package/components/elements/hit/outlines/DefaultOutline.js +1 -1
  56. package/components/elements/view/ViewTitle.d.ts +0 -1
  57. package/components/elements/view/ViewTitle.js +2 -9
  58. package/components/hooks/useHitActions.d.ts +1 -1
  59. package/components/hooks/useHitActions.js +4 -4
  60. package/components/hooks/{useRecordSelection.d.ts → useHitSelection.d.ts} +2 -2
  61. package/components/hooks/{useRecordSelection.js → useHitSelection.js} +33 -12
  62. package/components/hooks/useMyPreferences.js +1 -10
  63. package/components/hooks/useMySearch.js +2 -2
  64. package/components/hooks/useMySitemap.js +1 -4
  65. package/components/hooks/useMyTheme.js +2 -9
  66. package/components/routes/action/edit/ActionEditor.js +2 -2
  67. package/components/routes/action/useMyActionFunctions.js +22 -4
  68. package/components/routes/action/view/ActionSearch.js +1 -1
  69. package/components/routes/advanced/QueryBuilder.js +1 -1
  70. package/components/routes/advanced/QueryEditor.js +3 -3
  71. package/components/routes/advanced/historyCompletionProvider.js +3 -3
  72. package/components/routes/analytics/AnalyticDetails.js +2 -2
  73. package/components/routes/analytics/AnalyticSearch.js +1 -1
  74. package/components/routes/dossiers/DossierEditor.js +2 -2
  75. package/components/routes/dossiers/DossierEditor.test.js +1 -1
  76. package/components/routes/help/ApiDocumentation.js +1 -1
  77. package/components/routes/help/BundleDocumentation.d.ts +3 -0
  78. package/components/routes/help/BundleDocumentation.js +12 -0
  79. package/components/routes/help/HitBannerDocumentation.js +0 -1
  80. package/components/routes/help/HitDocumentation.js +3 -1
  81. package/components/routes/help/markdown/en/bundles.md.js +1 -0
  82. package/components/routes/help/markdown/fr/bundles.md.js +1 -0
  83. package/components/routes/hits/search/BundleParentMenu.d.ts +6 -0
  84. package/components/routes/hits/search/BundleParentMenu.js +32 -0
  85. package/components/routes/hits/search/BundleScroller.d.ts +2 -0
  86. package/components/routes/hits/search/BundleScroller.js +6 -0
  87. package/components/routes/hits/search/{RecordBrowser.js → HitBrowser.js} +9 -9
  88. package/components/{elements/record/RecordContextMenu.d.ts → routes/hits/search/HitContextMenu.d.ts} +3 -3
  89. package/components/routes/hits/search/HitContextMenu.js +227 -0
  90. package/components/{elements/record/RecordContextMenu.test.js → routes/hits/search/HitContextMenu.test.js} +39 -94
  91. package/components/routes/hits/search/{RecordQuery.d.ts → HitQuery.d.ts} +2 -2
  92. package/components/routes/hits/search/{RecordQuery.js → HitQuery.js} +6 -6
  93. package/components/routes/hits/search/InformationPane.d.ts +0 -1
  94. package/components/routes/hits/search/InformationPane.js +60 -47
  95. package/components/routes/hits/search/LayoutSettings.js +3 -3
  96. package/components/routes/hits/search/QuerySettings.js +1 -2
  97. package/components/routes/hits/search/QuerySettings.test.js +9 -14
  98. package/components/routes/hits/search/SearchPane.js +49 -26
  99. package/components/routes/hits/search/ViewLink.js +3 -3
  100. package/components/routes/hits/search/ViewLink.test.js +8 -8
  101. package/components/routes/hits/search/grid/AddColumnModal.js +4 -5
  102. package/components/routes/hits/search/grid/EnhancedCell.d.ts +1 -2
  103. package/components/routes/hits/search/grid/EnhancedCell.js +2 -2
  104. package/components/routes/hits/search/grid/HitGrid.js +18 -20
  105. package/components/routes/hits/search/grid/{RecordRow.d.ts → HitRow.d.ts} +2 -3
  106. package/components/routes/hits/search/grid/{RecordRow.js → HitRow.js} +8 -10
  107. package/components/routes/hits/view/HitViewer.js +13 -12
  108. package/components/routes/home/ViewCard.js +41 -47
  109. package/components/{elements/MarkdownEditor.js → routes/overviews/OverviewEditor.js} +3 -3
  110. package/components/routes/overviews/OverviewViewer.js +2 -2
  111. package/components/routes/views/ViewComposer.js +19 -46
  112. package/locales/en/translation.json +5 -109
  113. package/locales/fr/translation.json +5 -107
  114. package/models/WithMetadata.d.ts +1 -2
  115. package/models/entities/generated/{ThreatEnrichment.d.ts → Enrichment.d.ts} +1 -1
  116. package/models/entities/generated/Hit.d.ts +0 -1
  117. package/models/entities/generated/Howler.d.ts +4 -0
  118. package/models/entities/generated/Rule.d.ts +10 -2
  119. package/models/entities/generated/Threat.d.ts +2 -2
  120. package/models/entities/generated/View.d.ts +0 -1
  121. package/package.json +91 -109
  122. package/plugins/clue/components/ClueTypography.js +2 -2
  123. package/plugins/clue/utils.d.ts +1 -2
  124. package/tests/mocks.d.ts +1 -11
  125. package/tests/mocks.js +7 -12
  126. package/tests/server-handlers.js +1 -6
  127. package/tests/utils.d.ts +0 -4
  128. package/tests/utils.js +0 -20
  129. package/utils/constants.d.ts +3 -4
  130. package/utils/constants.js +0 -6
  131. package/utils/hitFunctions.d.ts +1 -2
  132. package/utils/hitFunctions.js +4 -4
  133. package/utils/viewUtils.js +0 -3
  134. package/api/search/case.d.ts +0 -4
  135. package/api/search/case.js +0 -8
  136. package/api/v2/case/index.d.ts +0 -8
  137. package/api/v2/case/index.js +0 -20
  138. package/api/v2/case/items.d.ts +0 -6
  139. package/api/v2/case/items.js +0 -18
  140. package/api/v2/index.d.ts +0 -4
  141. package/api/v2/index.js +0 -6
  142. package/api/v2/search/facet.d.ts +0 -3
  143. package/api/v2/search/facet.js +0 -12
  144. package/api/v2/search/index.d.ts +0 -5
  145. package/api/v2/search/index.js +0 -24
  146. package/components/app/providers/RecordProvider.d.ts +0 -23
  147. package/components/elements/ContextMenu.d.ts +0 -56
  148. package/components/elements/ContextMenu.js +0 -109
  149. package/components/elements/ContextMenu.test.js +0 -215
  150. package/components/elements/ObjectDetails.d.ts +0 -6
  151. package/components/elements/case/CaseCard.d.ts +0 -12
  152. package/components/elements/case/CaseCard.js +0 -42
  153. package/components/elements/case/CasePreview.d.ts +0 -6
  154. package/components/elements/case/CasePreview.js +0 -17
  155. package/components/elements/case/StatusIcon.d.ts +0 -5
  156. package/components/elements/case/StatusIcon.js +0 -13
  157. package/components/elements/hit/elements/AnalyticLink.d.ts +0 -9
  158. package/components/elements/hit/elements/AnalyticLink.js +0 -22
  159. package/components/elements/hit/related/RelatedRecords.js +0 -63
  160. package/components/elements/observable/ObservableCard.d.ts +0 -6
  161. package/components/elements/observable/ObservableCard.js +0 -22
  162. package/components/elements/observable/ObservablePreview.d.ts +0 -6
  163. package/components/elements/observable/ObservablePreview.js +0 -12
  164. package/components/elements/record/RecordContextMenu.js +0 -256
  165. package/components/elements/record/RecordContextMenu.test.d.ts +0 -1
  166. package/components/elements/record/RecordRelated.d.ts +0 -7
  167. package/components/elements/record/RecordRelated.js +0 -34
  168. package/components/hooks/useRelatedRecords.d.ts +0 -13
  169. package/components/hooks/useRelatedRecords.js +0 -32
  170. package/components/routes/cases/CaseViewer.d.ts +0 -2
  171. package/components/routes/cases/CaseViewer.js +0 -22
  172. package/components/routes/cases/Cases.d.ts +0 -2
  173. package/components/routes/cases/Cases.js +0 -148
  174. package/components/routes/cases/constants.d.ts +0 -6
  175. package/components/routes/cases/constants.js +0 -6
  176. package/components/routes/cases/detail/AlertPanel.d.ts +0 -6
  177. package/components/routes/cases/detail/AlertPanel.js +0 -33
  178. package/components/routes/cases/detail/CaseAssets.d.ts +0 -11
  179. package/components/routes/cases/detail/CaseAssets.js +0 -104
  180. package/components/routes/cases/detail/CaseAssets.test.d.ts +0 -1
  181. package/components/routes/cases/detail/CaseAssets.test.js +0 -167
  182. package/components/routes/cases/detail/CaseDashboard.d.ts +0 -7
  183. package/components/routes/cases/detail/CaseDashboard.js +0 -66
  184. package/components/routes/cases/detail/CaseDetails.d.ts +0 -6
  185. package/components/routes/cases/detail/CaseDetails.js +0 -61
  186. package/components/routes/cases/detail/CaseOverview.d.ts +0 -7
  187. package/components/routes/cases/detail/CaseOverview.js +0 -43
  188. package/components/routes/cases/detail/CaseSidebar.d.ts +0 -8
  189. package/components/routes/cases/detail/CaseSidebar.js +0 -107
  190. package/components/routes/cases/detail/CaseSidebar.test.d.ts +0 -1
  191. package/components/routes/cases/detail/CaseSidebar.test.js +0 -246
  192. package/components/routes/cases/detail/CaseTask.d.ts +0 -11
  193. package/components/routes/cases/detail/CaseTask.js +0 -57
  194. package/components/routes/cases/detail/CaseTimeline.d.ts +0 -12
  195. package/components/routes/cases/detail/CaseTimeline.js +0 -106
  196. package/components/routes/cases/detail/CaseTimeline.test.d.ts +0 -1
  197. package/components/routes/cases/detail/CaseTimeline.test.js +0 -320
  198. package/components/routes/cases/detail/ItemPage.d.ts +0 -6
  199. package/components/routes/cases/detail/ItemPage.js +0 -95
  200. package/components/routes/cases/detail/RelatedCasePanel.d.ts +0 -6
  201. package/components/routes/cases/detail/RelatedCasePanel.js +0 -34
  202. package/components/routes/cases/detail/TaskPanel.d.ts +0 -7
  203. package/components/routes/cases/detail/TaskPanel.js +0 -52
  204. package/components/routes/cases/detail/aggregates/CaseAggregate.d.ts +0 -11
  205. package/components/routes/cases/detail/aggregates/CaseAggregate.js +0 -24
  206. package/components/routes/cases/detail/aggregates/SourceAggregate.d.ts +0 -6
  207. package/components/routes/cases/detail/aggregates/SourceAggregate.js +0 -26
  208. package/components/routes/cases/detail/assets/Asset.d.ts +0 -14
  209. package/components/routes/cases/detail/assets/Asset.js +0 -12
  210. package/components/routes/cases/detail/assets/Asset.test.d.ts +0 -1
  211. package/components/routes/cases/detail/assets/Asset.test.js +0 -72
  212. package/components/routes/cases/detail/sidebar/CaseFolder.d.ts +0 -20
  213. package/components/routes/cases/detail/sidebar/CaseFolder.js +0 -83
  214. package/components/routes/cases/detail/sidebar/CaseFolder.test.d.ts +0 -1
  215. package/components/routes/cases/detail/sidebar/CaseFolder.test.js +0 -295
  216. package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.d.ts +0 -34
  217. package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.js +0 -103
  218. package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.test.d.ts +0 -1
  219. package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.test.js +0 -363
  220. package/components/routes/cases/detail/sidebar/FolderEntry.d.ts +0 -25
  221. package/components/routes/cases/detail/sidebar/FolderEntry.js +0 -88
  222. package/components/routes/cases/detail/sidebar/FolderEntry.test.d.ts +0 -1
  223. package/components/routes/cases/detail/sidebar/FolderEntry.test.js +0 -206
  224. package/components/routes/cases/detail/sidebar/RootDropZone.d.ts +0 -5
  225. package/components/routes/cases/detail/sidebar/RootDropZone.js +0 -33
  226. package/components/routes/cases/detail/sidebar/types.d.ts +0 -9
  227. package/components/routes/cases/detail/sidebar/utils.d.ts +0 -3
  228. package/components/routes/cases/detail/sidebar/utils.js +0 -29
  229. package/components/routes/cases/detail/sidebar/utils.test.d.ts +0 -1
  230. package/components/routes/cases/detail/sidebar/utils.test.js +0 -82
  231. package/components/routes/cases/hooks/useCase.d.ts +0 -13
  232. package/components/routes/cases/hooks/useCase.js +0 -51
  233. package/components/routes/cases/modals/AddToCaseModal.d.ts +0 -7
  234. package/components/routes/cases/modals/AddToCaseModal.js +0 -59
  235. package/components/routes/cases/modals/AddToCaseModal.test.d.ts +0 -1
  236. package/components/routes/cases/modals/AddToCaseModal.test.js +0 -313
  237. package/components/routes/cases/modals/CaseRecordRow.d.ts +0 -9
  238. package/components/routes/cases/modals/CaseRecordRow.js +0 -15
  239. package/components/routes/cases/modals/CreateCaseModal.d.ts +0 -7
  240. package/components/routes/cases/modals/CreateCaseModal.js +0 -55
  241. package/components/routes/cases/modals/CreateCaseModal.test.d.ts +0 -1
  242. package/components/routes/cases/modals/CreateCaseModal.test.js +0 -358
  243. package/components/routes/cases/modals/RenameItemModal.d.ts +0 -9
  244. package/components/routes/cases/modals/RenameItemModal.js +0 -48
  245. package/components/routes/cases/modals/ResolveModal.d.ts +0 -7
  246. package/components/routes/cases/modals/ResolveModal.js +0 -115
  247. package/components/routes/cases/modals/ResolveModal.test.d.ts +0 -1
  248. package/components/routes/cases/modals/ResolveModal.test.js +0 -384
  249. package/components/routes/cases/modals/hooks.d.ts +0 -7
  250. package/components/routes/cases/modals/hooks.js +0 -44
  251. package/components/routes/cases/modals/types.d.ts +0 -5
  252. package/components/routes/cases/search/CaseAssigneeFilter.d.ts +0 -6
  253. package/components/routes/cases/search/CaseAssigneeFilter.js +0 -33
  254. package/components/routes/cases/search/CaseAssigneeFilter.test.d.ts +0 -1
  255. package/components/routes/cases/search/CaseAssigneeFilter.test.js +0 -127
  256. package/components/routes/cases/search/CaseDateFilter.d.ts +0 -13
  257. package/components/routes/cases/search/CaseDateFilter.js +0 -26
  258. package/components/routes/cases/search/CaseDateFilter.test.d.ts +0 -1
  259. package/components/routes/cases/search/CaseDateFilter.test.js +0 -115
  260. package/components/routes/cases/search/CaseStatusFilter.d.ts +0 -6
  261. package/components/routes/cases/search/CaseStatusFilter.js +0 -13
  262. package/components/routes/cases/search/CaseStatusFilter.test.d.ts +0 -1
  263. package/components/routes/cases/search/CaseStatusFilter.test.js +0 -86
  264. package/components/routes/hits/search/shared/IndexPicker.d.ts +0 -2
  265. package/components/routes/hits/search/shared/IndexPicker.js +0 -20
  266. package/components/routes/observables/ObservableViewer.d.ts +0 -7
  267. package/components/routes/observables/ObservableViewer.js +0 -27
  268. package/models/entities/generated/AttachmentsFile.d.ts +0 -12
  269. package/models/entities/generated/Case.d.ts +0 -28
  270. package/models/entities/generated/DestinationOriginal.d.ts +0 -19
  271. package/models/entities/generated/EmailAttachment.d.ts +0 -8
  272. package/models/entities/generated/EmailParent.d.ts +0 -19
  273. package/models/entities/generated/Enrichments.d.ts +0 -7
  274. package/models/entities/generated/EnrichmentsIndicator.d.ts +0 -21
  275. package/models/entities/generated/HttpResponse.d.ts +0 -11
  276. package/models/entities/generated/Item.d.ts +0 -9
  277. package/models/entities/generated/Observable.d.ts +0 -85
  278. package/models/entities/generated/ObservableCloud.d.ts +0 -20
  279. package/models/entities/generated/ObservableDestination.d.ts +0 -23
  280. package/models/entities/generated/ObservableEmail.d.ts +0 -30
  281. package/models/entities/generated/ObservableFile.d.ts +0 -36
  282. package/models/entities/generated/ObservableHowler.d.ts +0 -43
  283. package/models/entities/generated/ObservableHttp.d.ts +0 -11
  284. package/models/entities/generated/ObservableObserver.d.ts +0 -21
  285. package/models/entities/generated/ObservableOrganization.d.ts +0 -7
  286. package/models/entities/generated/ObservableProcess.d.ts +0 -34
  287. package/models/entities/generated/ObservableSource.d.ts +0 -23
  288. package/models/entities/generated/ObservableThreat.d.ts +0 -21
  289. package/models/entities/generated/ObservableTls.d.ts +0 -12
  290. package/models/entities/generated/ObserverIngress.d.ts +0 -9
  291. package/models/entities/generated/Task.d.ts +0 -10
  292. package/utils/typeUtils.d.ts +0 -7
  293. package/utils/typeUtils.js +0 -27
  294. /package/components/app/providers/{RecordSearchProvider.test.d.ts → HitSearchProvider.test.d.ts} +0 -0
  295. /package/components/elements/hit/{related/RelatedRecords.d.ts → HitDetails.d.ts} +0 -0
  296. /package/components/routes/hits/search/{RecordBrowser.d.ts → HitBrowser.d.ts} +0 -0
  297. /package/components/{elements/ContextMenu.test.d.ts → routes/hits/search/HitContextMenu.test.d.ts} +0 -0
  298. /package/components/{elements/MarkdownEditor.d.ts → routes/overviews/OverviewEditor.d.ts} +0 -0
@@ -4,11 +4,10 @@ import { useTranslation } from 'react-i18next';
4
4
  import { HelpOutline, Save } from '@mui/icons-material';
5
5
  import { Alert, Checkbox, CircularProgress, LinearProgress, Stack, TextField, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@mui/material';
6
6
  import api from '@cccsaurora/howler-ui/api';
7
- import {} from '@cccsaurora/howler-ui/api/search';
8
7
  import AppListEmpty from '@cccsaurora/howler-ui/commons/components/display/AppListEmpty';
9
8
  import PageCenter from '@cccsaurora/howler-ui/commons/components/pages/PageCenter';
9
+ import { HitContext } from '@cccsaurora/howler-ui/components/app/providers/HitProvider';
10
10
  import { ParameterContext } from '@cccsaurora/howler-ui/components/app/providers/ParameterProvider';
11
- import { RecordContext } from '@cccsaurora/howler-ui/components/app/providers/RecordProvider';
12
11
  import { ViewContext } from '@cccsaurora/howler-ui/components/app/providers/ViewProvider';
13
12
  import CustomButton from '@cccsaurora/howler-ui/components/elements/addons/buttons/CustomButton';
14
13
  import FlexPort from '@cccsaurora/howler-ui/components/elements/addons/layout/FlexPort';
@@ -18,7 +17,6 @@ import VSBoxHeader from '@cccsaurora/howler-ui/components/elements/addons/layout
18
17
  import SearchTotal from '@cccsaurora/howler-ui/components/elements/addons/search/SearchTotal';
19
18
  import HitCard from '@cccsaurora/howler-ui/components/elements/hit/HitCard';
20
19
  import { HitLayout } from '@cccsaurora/howler-ui/components/elements/hit/HitLayout';
21
- import ObservableCard from '@cccsaurora/howler-ui/components/elements/observable/ObservableCard';
22
20
  import useMyApi from '@cccsaurora/howler-ui/components/hooks/useMyApi';
23
21
  import { useMyLocalStorageItem } from '@cccsaurora/howler-ui/components/hooks/useMyLocalStorage';
24
22
  import useMySnackbar from '@cccsaurora/howler-ui/components/hooks/useMySnackbar';
@@ -28,9 +26,8 @@ import { DEFAULT_QUERY, StorageKey } from '@cccsaurora/howler-ui/utils/constants
28
26
  import { convertDateToLucene } from '@cccsaurora/howler-ui/utils/utils';
29
27
  import { buildViewUrl } from '@cccsaurora/howler-ui/utils/viewUtils';
30
28
  import ErrorBoundary from '../ErrorBoundary';
31
- import RecordQuery from '../hits/search/RecordQuery';
29
+ import HitQuery from '../hits/search/HitQuery';
32
30
  import HitSort from '../hits/search/shared/HitSort';
33
- import IndexPicker from '../hits/search/shared/IndexPicker';
34
31
  import SearchSpan from '../hits/search/shared/SearchSpan';
35
32
  const ViewComposer = () => {
36
33
  const { t } = useTranslation();
@@ -41,10 +38,8 @@ const ViewComposer = () => {
41
38
  const addView = useContextSelector(ViewContext, ctx => ctx.addView);
42
39
  const editView = useContextSelector(ViewContext, ctx => ctx.editView);
43
40
  const getCurrentViews = useContextSelector(ViewContext, ctx => ctx.getCurrentViews);
44
- const indexes = useContextSelector(ParameterContext, ctx => ctx.indexes);
45
- const setIndexes = useContextSelector(ParameterContext, ctx => ctx.setIndexes);
46
41
  const pageCount = useMyLocalStorageItem(StorageKey.PAGE_COUNT, 25)[0];
47
- const loadRecords = useContextSelector(RecordContext, ctx => ctx.loadRecords);
42
+ const loadHits = useContextSelector(HitContext, ctx => ctx.loadHits);
48
43
  // view state
49
44
  const [title, setTitle] = useState('');
50
45
  const [type, setType] = useState('global');
@@ -61,17 +56,14 @@ const ViewComposer = () => {
61
56
  const [searching, setSearching] = useState(false);
62
57
  const [error, setError] = useState(null);
63
58
  const [response, setResponse] = useState();
64
- const [isLoadingView, setIsLoadingView] = useState(!!routeParams.id);
65
59
  const onSave = useCallback(async () => {
66
60
  setLoading(true);
67
61
  try {
68
- const normalizedIndexes = indexes?.length > 0 ? indexes : ['hit'];
69
62
  if (!routeParams.id) {
70
63
  const newView = await addView({
71
64
  title,
72
65
  type,
73
66
  query,
74
- indexes: normalizedIndexes,
75
67
  sort: sort || null,
76
68
  span: span || null,
77
69
  settings: {
@@ -85,7 +77,6 @@ const ViewComposer = () => {
85
77
  title,
86
78
  type,
87
79
  query,
88
- indexes: normalizedIndexes,
89
80
  sort,
90
81
  span,
91
82
  settings: { advance_on_triage: advanceOnTriage }
@@ -110,24 +101,23 @@ const ViewComposer = () => {
110
101
  sort,
111
102
  span,
112
103
  advanceOnTriage,
113
- indexes,
114
104
  navigate,
115
105
  editView,
116
106
  showErrorMessage
117
107
  ]);
118
- const performSearch = useCallback(async (searchQuery, searchIndexes, searchSort, searchSpan) => {
108
+ const search = useCallback(async (_query) => {
109
+ setQuery(_query);
119
110
  setSearching(true);
120
111
  setError(null);
121
112
  try {
122
- const normalizedIndexes = searchIndexes?.length > 0 ? searchIndexes : ['hit'];
123
- const _response = await dispatchApi(api.v2.search.post(normalizedIndexes, {
113
+ const _response = await dispatchApi(api.search.hit.post({
124
114
  rows: pageCount,
125
- query: searchQuery,
126
- sort: searchSort,
127
- filters: searchSpan ? [`event.created:${convertDateToLucene(searchSpan)}`] : [],
115
+ query: _query,
116
+ sort,
117
+ filters: span ? [`event.created:${convertDateToLucene(span)}`] : [],
128
118
  metadata: ['template', 'analytic']
129
119
  }), { showError: false, throwError: true });
130
- loadRecords(_response.items);
120
+ loadHits(_response.items);
131
121
  setResponse(_response);
132
122
  }
133
123
  catch (e) {
@@ -136,25 +126,18 @@ const ViewComposer = () => {
136
126
  finally {
137
127
  setSearching(false);
138
128
  }
139
- }, [dispatchApi, loadRecords, pageCount]);
140
- const search = useCallback(async (_query) => {
141
- setQuery(_query);
142
- await performSearch(_query, indexes, sort, span);
143
- }, [performSearch, indexes, sort, span, setQuery]);
129
+ }, [dispatchApi, loadHits, pageCount, setQuery, sort, span]);
144
130
  useEffect(() => {
145
- // Only run initial search if we're NOT editing an existing view
146
- if (!routeParams.id) {
147
- search(query || DEFAULT_QUERY);
148
- }
131
+ search(query || DEFAULT_QUERY);
149
132
  // eslint-disable-next-line react-hooks/exhaustive-deps
150
- }, [routeParams.id]);
133
+ }, []);
151
134
  // We only run this when ancillary properties (i.e. filters, sorting) change
152
135
  useEffect(() => {
153
- if (query && !isLoadingView) {
136
+ if (query) {
154
137
  search(query);
155
138
  }
156
139
  // eslint-disable-next-line react-hooks/exhaustive-deps
157
- }, [sort, span, indexes, isLoadingView]);
140
+ }, [sort, span]);
158
141
  useEffect(() => {
159
142
  if (!routeParams.id) {
160
143
  return;
@@ -170,23 +153,13 @@ const ViewComposer = () => {
170
153
  }
171
154
  setTitle(viewToEdit.title);
172
155
  setAdvanceOnTriage(viewToEdit.settings?.advance_on_triage ?? false);
173
- const loadedQuery = viewToEdit.query || DEFAULT_QUERY;
174
- const loadedIndexes = viewToEdit.indexes || indexes;
175
- const loadedSort = viewToEdit.sort || sort;
176
- const loadedSpan = viewToEdit.span || span;
177
- setQuery(loadedQuery);
178
- if (viewToEdit.indexes) {
179
- setIndexes(loadedIndexes);
180
- }
156
+ setQuery(viewToEdit.query);
181
157
  if (viewToEdit.sort) {
182
- setSort(loadedSort);
158
+ setSort(viewToEdit.sort);
183
159
  }
184
160
  if (viewToEdit.span) {
185
- setSpan(loadedSpan);
161
+ setSpan(viewToEdit.span);
186
162
  }
187
- // Perform search with the loaded values to avoid using stale state
188
- await performSearch(loadedQuery, loadedIndexes, loadedSort, loadedSpan);
189
- setIsLoadingView(false);
190
163
  })();
191
164
  // eslint-disable-next-line react-hooks/exhaustive-deps
192
165
  }, [routeParams.id]);
@@ -199,6 +172,6 @@ const ViewComposer = () => {
199
172
  fontSize: '0.9em',
200
173
  fontStyle: 'italic',
201
174
  mb: 0.5
202
- }), variant: "body2", children: t('hit.search.prompt') }), _jsx(RecordQuery, { triggerSearch: search, searching: searching, onChange: (_query, isDirty) => setIsSearchDirty(isDirty) }), _jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(IndexPicker, {}), _jsx(HitSort, {}), _jsx(SearchSpan, { omitCustom: true }), _jsx("div", { style: { flex: 1 } }), _jsxs(Stack, { spacing: 1, direction: "row", alignItems: "center", sx: { flex: '0 !important', minWidth: '300px' }, children: [_jsx(Typography, { component: "span", children: t('view.settings.advance_on_triage') }), _jsx(Tooltip, { title: t('view.settings.advance_on_triage.description'), children: _jsx(HelpOutline, { sx: { fontSize: '16px' } }) }), _jsx(Checkbox, { size: "small", checked: advanceOnTriage, onChange: (_event, checked) => setAdvanceOnTriage(checked) })] })] }), response?.total ? (_jsx(SearchTotal, { total: response.total, pageLength: response.items.length, offset: response.offset, sx: theme => ({ color: theme.palette.text.secondary, fontSize: '0.9em', fontStyle: 'italic' }) })) : null, _jsx(LinearProgress, { sx: [!searching && { opacity: 0 }] })] }) }), _jsx(VSBoxContent, { children: _jsxs(Stack, { spacing: 1, children: [!response?.total && _jsx(AppListEmpty, {}), response?.items.map(record => record.__index === 'hit' ? (_jsx(HitCard, { id: record.howler.id, layout: HitLayout.DENSE }, record.howler.id)) : (_jsx(ObservableCard, { observable: record }, record.howler.id)))] }) })] }) }) }) }));
175
+ }), variant: "body2", children: t('hit.search.prompt') }), _jsx(HitQuery, { triggerSearch: search, searching: searching, onChange: (_query, isDirty) => setIsSearchDirty(isDirty) }), _jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(HitSort, {}), _jsx(SearchSpan, { omitCustom: true }), _jsx("div", { style: { flex: 1 } }), _jsxs(Stack, { spacing: 1, direction: "row", alignItems: "center", sx: { flex: '0 !important', minWidth: '300px' }, children: [_jsx(Typography, { component: "span", children: t('view.settings.advance_on_triage') }), _jsx(Tooltip, { title: t('view.settings.advance_on_triage.description'), children: _jsx(HelpOutline, { sx: { fontSize: '16px' } }) }), _jsx(Checkbox, { size: "small", checked: advanceOnTriage, onChange: (_event, checked) => setAdvanceOnTriage(checked) })] })] }), response?.total ? (_jsx(SearchTotal, { total: response.total, pageLength: response.items.length, offset: response.offset, sx: theme => ({ color: theme.palette.text.secondary, fontSize: '0.9em', fontStyle: 'italic' }) })) : null, _jsx(LinearProgress, { sx: [!searching && { opacity: 0 }] })] }) }), _jsx(VSBoxContent, { children: _jsxs(Stack, { spacing: 1, children: [!response?.total && _jsx(AppListEmpty, {}), response?.items.map(hit => (_jsx(HitCard, { id: hit.howler.id, layout: HitLayout.DENSE }, hit.howler.id)))] }) })] }) }) }) }));
203
176
  };
204
177
  export default ViewComposer;
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "*": "All values",
3
- "Protected B": "Protected B",
4
- "Unclassified//Official Use Only": "Unclassified//Official Use Only",
5
3
  "actions.running": "Action \"{{action}}\" is executing.",
6
4
  "actions.succeeded": "Action \"{{action}}\" completed successfully.",
5
+ "actions.skipped": "Action \"{{action}}\" was skipped: {{messages}}",
6
+ "actions.error": "Action \"{{action}}\" had error(s): {{messages}}",
7
7
  "add": "Add",
8
8
  "adminmenu": "Admin menu",
9
9
  "adminmenu.config": "Configuration",
@@ -13,7 +13,6 @@
13
13
  "analytic.notebook.error.minFields": "Name and link are required.",
14
14
  "analytic.notebook.link": "Link",
15
15
  "analytic.notebook.name": "Name",
16
- "analytic.open": "Open Analytic",
17
16
  "any": "Any",
18
17
  "api.user.apikey.removed": "API key removed successfully.",
19
18
  "api.user.apikey.updated": "New API key added successfully.",
@@ -82,8 +81,6 @@
82
81
  "comments.edit.stop": "Stop Editing",
83
82
  "comments.edited": "Edited",
84
83
  "comments.quote": "Quote Reply",
85
- "complete": "Complete",
86
- "crisis": "Crisis",
87
84
  "custom": "Custom",
88
85
  "date.range.1.day": "The last day",
89
86
  "date.range.1.month": "The last month",
@@ -109,11 +106,8 @@
109
106
  "drawer.expand": "Expand Menu",
110
107
  "duplicates.omitted": "Some duplicate entries have been omitted.",
111
108
  "edit": "Edit",
112
- "event.module": "Event Module",
113
- "event.type": "Event Type",
114
109
  "features.warning.description": "This feature is undergoing active development, and is not yet in a finished state. You may encounter bugs or instability.",
115
110
  "features.warning.title": "Feature In Active Development",
116
- "focus": "Main focus",
117
111
  "global": "Global",
118
112
  "help.actions.introduction": "Introduction to Actions",
119
113
  "help.hit.banner.description": "See the below hit banner example for the hit keys necessary to properly populate it. If you have any additional questions, ask in the HOWLER support channel.",
@@ -170,20 +164,16 @@
170
164
  "hit.header.assignment": "Assignment: {{user}}",
171
165
  "hit.header.assignment.add": "Assign to a user",
172
166
  "hit.header.assignment.change": "Change assignment",
167
+ "hit.header.bundlesize": "{{hits}} hits",
173
168
  "hit.header.escalation": "Escalation Level: ",
174
169
  "hit.header.indicators": "Indicators",
175
170
  "hit.header.rationale": "Rationale",
176
- "hit.header.related": "{{count}} related records",
177
171
  "hit.header.scrutiny": "Scrutiny: ",
178
172
  "hit.header.status": "Status: ",
179
173
  "hit.header.summary": "Summary",
180
174
  "hit.header.target": "Target",
181
175
  "hit.header.threat": "Threat",
182
- "hit.header.view.case": "View case {{id}}",
183
- "hit.header.view.hit": "View hit {{id}}",
184
- "hit.header.view.observable": "View observable {{id}}",
185
176
  "hit.header.votes": "Votes: ",
186
- "hit.howler.related": "{{count}} related records",
187
177
  "hit.label": "Labels",
188
178
  "hit.label.category.assignments": "Category: Assignments - Specifies what analyst or team of analysts is assigned to triaging this hit.",
189
179
  "hit.label.category.campaign": "Catergory: Campaign - Identifies ongoing campaigns from specific malware families or phishing initiatives. They should only be considered correct attributions if the hit is promoted to evidence.",
@@ -199,16 +189,15 @@
199
189
  "hit.label.edit.add.error.duplicate": "Duplicated label not allowed",
200
190
  "hit.label.edit.add.error.empty": "Can't add an empty label",
201
191
  "hit.label.edit.add.label": "New label value",
202
- "hit.label.edit.desc": "Add or remove labels",
203
192
  "hit.notebook.confirm.dialog": "A notebook with that name already exists in your environment, do you wish to overwrite it?",
204
193
  "hit.notebook.confirm.title": "Overwrite existing notebook?",
205
194
  "hit.notebook.error.failToPost": "Failed to send notebook to Jupyterhub, make sure your user environment is running.",
206
195
  "hit.notebook.goTo": "Go to Jupyterhub",
207
196
  "hit.notebook.select": "Please Select a notebook",
208
197
  "hit.notebook.tooltip": "Open in Jupyterhub",
209
- "hit.open": "Open Hit",
210
198
  "hit.overview.missing": "No overview has been created for this hit. In order to create an overview, press the add button to the right.",
211
199
  "hit.panel.aggregation.run": "Create Summary",
200
+ "hit.panel.analytic.open": "Open Analytic",
212
201
  "hit.panel.bundles.open": "Parent Bundles",
213
202
  "hit.panel.bundles.open.prompt": "Open Parent Bundle",
214
203
  "hit.panel.close": "Close",
@@ -221,12 +210,9 @@
221
210
  "hit.panel.exclude": "Exclude By",
222
211
  "hit.panel.hit.noselection": "No hit has been selected",
223
212
  "hit.panel.include": "Include By",
213
+ "hit.panel.open": "Open Hit Viewer",
224
214
  "hit.panel.view.layout": "Change View Panel",
225
215
  "hit.quicksearch": "Search by assignment, analytic, detection or status",
226
- "hit.related.tab.case": "Cases",
227
- "hit.related.tab.hit": "Hits",
228
- "hit.related.tab.links": "Links",
229
- "hit.related.tab.observable": "Observables",
230
216
  "hit.search.aggregate.button": "Create Summary",
231
217
  "hit.search.button": "Perform search",
232
218
  "hit.search.custom": "Custom Sort",
@@ -235,8 +221,6 @@
235
221
  "hit.search.filter.fields": "Fields",
236
222
  "hit.search.filter.label": "Lookup Filters",
237
223
  "hit.search.filter.values": "Values",
238
- "hit.search.index.hit": "Hits",
239
- "hit.search.index.observable": "Observables",
240
224
  "hit.search.invalid": "Invalid Query",
241
225
  "hit.search.keyboard": "Keyboard shortcuts",
242
226
  "hit.search.keyboard.no_shortcuts": "No shortcuts",
@@ -274,7 +258,6 @@
274
258
  "hit.summary.subtitle": "Limited to a maximum of 10 000 hits.",
275
259
  "hit.summary.title": "Summary of Hits Over Time",
276
260
  "hit.summary.zoom.reset": "Reset Zoom",
277
- "hit.view.overview": "Overview",
278
261
  "hit.viewer.aggregate": "Summary",
279
262
  "hit.viewer.comments": "Comments",
280
263
  "hit.viewer.data": "Raw Data",
@@ -310,31 +293,6 @@
310
293
  "modal.action.empty": "Action Name cannot be empty.",
311
294
  "modal.action.label": "Action Name",
312
295
  "modal.action.title": "Save Action",
313
- "modal.cases.add_to_case": "Add to Case",
314
- "modal.cases.add_to_case.full_path": "Full path: {{path}}",
315
- "modal.cases.add_to_case.items_section": "Alert Placement",
316
- "modal.cases.add_to_case.path_invalid": "Path must not start or end with a /",
317
- "modal.cases.add_to_case.select_case": "Search Cases",
318
- "modal.cases.add_to_case.select_path": "Select Folder Path",
319
- "modal.cases.add_to_case.title": "Item Title",
320
- "modal.cases.alerts.resolved": "Resolved Alerts",
321
- "modal.cases.create_case": "Create Case",
322
- "modal.cases.create_case.escalation": "Escalation",
323
- "modal.cases.create_case.full_path": "Full path: {{path}}",
324
- "modal.cases.create_case.item.path": "Folder Path (optional)",
325
- "modal.cases.create_case.item.title": "Item Title",
326
- "modal.cases.create_case.items_section": "Alert Placement",
327
- "modal.cases.create_case.overview": "Case Overview (Markdown, optional)",
328
- "modal.cases.create_case.summary": "Short Case Summary",
329
- "modal.cases.create_case.title": "Case Title",
330
- "modal.cases.rename_item": "Rename Item",
331
- "modal.cases.rename_item.error.empty": "Name cannot be empty",
332
- "modal.cases.rename_item.error.slash": "Name cannot contain '/'",
333
- "modal.cases.rename_item.error.taken": "An item already exists at this path",
334
- "modal.cases.rename_item.folder_path": "Folder: {{path}}",
335
- "modal.cases.rename_item.new_name": "New Name",
336
- "modal.cases.resolve": "Resolve Case",
337
- "modal.cases.resolve.description": "When resolving a case, you must either assess all open alerts, or add an assessment to the alerts.",
338
296
  "modal.confirm.delete.description": "Are you sure you want to delete this item?",
339
297
  "modal.confirm.delete.title": "Confirm Deletion",
340
298
  "modal.rationale.description": "Provide a rationale that succinctly explains to other analysts why you are confident in this assessment.",
@@ -356,8 +314,6 @@
356
314
  "modal.rule.title": "Create a New Rule",
357
315
  "no.data": "No Data",
358
316
  "none": "None",
359
- "normal": "Normal Priority",
360
- "observable.open": "Open Observable",
361
317
  "on": "on",
362
318
  "open": "Open",
363
319
  "operations.add_label": "Add Label",
@@ -377,49 +333,6 @@
377
333
  "owner": "Owner",
378
334
  "page.404.description": "The page you are looking for cannot be found...",
379
335
  "page.404.title": "404: Not found",
380
- "page.cases.assets": "Assets",
381
- "page.cases.assets.empty": "No assets found.",
382
- "page.cases.assets.filter_by_type": "Filter by type:",
383
- "page.cases.assets.seen_in": "Seen in",
384
- "page.cases.assets.type.hash": "Hash",
385
- "page.cases.assets.type.hosts": "Host",
386
- "page.cases.assets.type.id": "ID",
387
- "page.cases.assets.type.ids": "ID",
388
- "page.cases.assets.type.ip": "IP",
389
- "page.cases.assets.type.signature": "Signature",
390
- "page.cases.assets.type.uri": "URI",
391
- "page.cases.assets.type.user": "User",
392
- "page.cases.created": "Created",
393
- "page.cases.dashboard": "Dashboard",
394
- "page.cases.dashboard.alerts": "Alerts",
395
- "page.cases.dashboard.cases": "Related Cases",
396
- "page.cases.dashboard.duration": "Duration",
397
- "page.cases.dashboard.indicators": "Indicators",
398
- "page.cases.dashboard.target": "Targets",
399
- "page.cases.dashboard.tasks": "Tasks",
400
- "page.cases.dashboard.threat": "Threats",
401
- "page.cases.detail.participants": "Participants",
402
- "page.cases.detail.properties": "Properties",
403
- "page.cases.detail.status": "Status",
404
- "page.cases.escalation": "Escalation",
405
- "page.cases.folder.drop.root": "Place here to move to root",
406
- "page.cases.sidebar.folder.remove": "Remove folder",
407
- "page.cases.sidebar.item.open": "Open item",
408
- "page.cases.sidebar.item.remove": "Remove item",
409
- "page.cases.sidebar.item.rename": "Rename item",
410
- "page.cases.sources": "Sources",
411
- "page.cases.status.in-progress": "In Progress",
412
- "page.cases.status.on-hold": "On Hold",
413
- "page.cases.status.open": "Open",
414
- "page.cases.status.resolved": "Resolved",
415
- "page.cases.timeline": "Timeline",
416
- "page.cases.timeline.empty": "No events match the selected filters.",
417
- "page.cases.timeline.filter.escalation": "Escalation",
418
- "page.cases.timeline.filter.escalation.empty": "No escalation levels found.",
419
- "page.cases.timeline.filter.label": "Show only",
420
- "page.cases.timeline.filter.mitre": "MITRE ATT&CK",
421
- "page.cases.timeline.filter.mitre.empty": "No tactics or techniques found.",
422
- "page.cases.updated": "Updated",
423
336
  "page.dashboard.settings.edit": "Edit Dashboard",
424
337
  "page.dashboard.settings.refreshRate": "Refresh Rate",
425
338
  "page.dashboard.title": "Dashboard",
@@ -444,7 +357,6 @@
444
357
  "page.help": "Help",
445
358
  "page.help.title": "Help Dashboard",
446
359
  "page.login.button": "Sign in",
447
- "page.login.error": "Just type anything in the username and password fields...",
448
360
  "page.login.password": "Password",
449
361
  "page.login.username": "Username",
450
362
  "page.logout": "Logging out current user ... ",
@@ -491,8 +403,6 @@
491
403
  "page.user.search.column.groups": "Groups",
492
404
  "page.user.search.column.username": "Username",
493
405
  "page.user.search.prompt": "Search by username, fullname, email or group",
494
- "pages.cases.detail.participants": "Participants",
495
- "pages.cases.detail.status": "Status",
496
406
  "password": "New Password",
497
407
  "password.confirm": "Confirm Password",
498
408
  "password.match": "Password and Confirm Password must match",
@@ -506,7 +416,6 @@
506
416
  "personalization.showbreadcrumbs": "Show Breadcrumbs",
507
417
  "personalization.sticky": "Sticky Topbar",
508
418
  "query": "Query",
509
- "query.invalid": "Invalid query",
510
419
  "quicksearch.aria": "search",
511
420
  "quicksearch.placeholder": "Search ...",
512
421
  "rationale.default": "Hit assessed as {{assessment}}",
@@ -622,16 +531,6 @@
622
531
  "route.analytics.triage.title": "Triage Settings",
623
532
  "route.analytics.updated": "Analytic Updated!",
624
533
  "route.analytics.view": "View Analytic",
625
- "route.cases": "Cases",
626
- "route.cases.create": "Create Case",
627
- "route.cases.filter.assignee": "Assignee",
628
- "route.cases.filter.assignees": "Assignees",
629
- "route.cases.filter.date": "Date Range",
630
- "route.cases.filter.myself": "Myself",
631
- "route.cases.filter.status": "Status",
632
- "route.cases.manager.search": "Search Cases",
633
- "route.cases.search.prompt": "Search cases by title, summary, description, participants or task details",
634
- "route.cases.view": "View Case",
635
534
  "route.clear": "Clear query",
636
535
  "route.dossiers": "Dossiers",
637
536
  "route.dossiers.create": "New Dossier",
@@ -694,10 +593,8 @@
694
593
  "route.help.actions": "Action Documentation",
695
594
  "route.help.api": "API Documentation",
696
595
  "route.help.auth": "Authentication",
697
- "route.help.bundles": "Hit Bundles",
698
596
  "route.help.client": "Howler Client",
699
597
  "route.help.hit": "Hit Documentation",
700
- "route.help.hit.banner": "Hit Banner Documentation",
701
598
  "route.help.main": "Dashboard",
702
599
  "route.help.notebook": "Notebook Documentation",
703
600
  "route.help.overviews": "Overviews",
@@ -810,7 +707,6 @@
810
707
  "search.result.showing": "Showing {{offset}} to {{length}} of {{total}} results",
811
708
  "search.result.showing.single": "No results",
812
709
  "search.total": "There are a total of {{count}} hits matching this query.",
813
- "started": "Started",
814
710
  "templates.edit.analytic": "Edit analytic template",
815
711
  "templates.edit.detection": "Edit detection template",
816
712
  "to": "to",