@cccsaurora/howler-ui 2.18.0-dev.682 → 2.18.0-dev.683

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 (230) hide show
  1. package/api/index.d.ts +0 -2
  2. package/api/index.js +2 -4
  3. package/api/search/index.d.ts +1 -2
  4. package/api/search/index.js +1 -2
  5. package/commons/components/leftnav/LeftNavDrawer.js +1 -1
  6. package/components/app/App.js +7 -34
  7. package/components/app/hooks/useMatchers.js +2 -2
  8. package/components/app/hooks/useMatchers.test.js +22 -22
  9. package/components/app/hooks/useTitle.js +3 -3
  10. package/components/app/providers/FavouritesProvider.js +2 -2
  11. package/components/app/providers/HitProvider.d.ts +22 -0
  12. package/components/app/providers/{RecordProvider.js → HitProvider.js} +41 -41
  13. package/components/app/providers/{RecordSearchProvider.d.ts → HitSearchProvider.d.ts} +6 -6
  14. package/components/app/providers/{RecordSearchProvider.js → HitSearchProvider.js} +17 -12
  15. package/components/app/providers/{RecordSearchProvider.test.js → HitSearchProvider.test.js} +70 -51
  16. package/components/app/providers/ParameterProvider.d.ts +2 -9
  17. package/components/app/providers/ParameterProvider.js +240 -165
  18. package/components/app/providers/ParameterProvider.test.js +14 -307
  19. package/components/elements/PluginTypography.d.ts +1 -2
  20. package/components/elements/PluginTypography.js +2 -3
  21. package/components/elements/UserList.d.ts +2 -5
  22. package/components/elements/UserList.js +5 -14
  23. package/components/elements/addons/search/phrase/Phrase.js +1 -1
  24. package/components/elements/display/ChipPopper.d.ts +1 -1
  25. package/components/elements/display/HowlerCard.js +1 -1
  26. package/components/elements/display/Modal.js +0 -1
  27. package/components/elements/display/icons/BundleButton.d.ts +6 -0
  28. package/components/elements/display/icons/BundleButton.js +32 -0
  29. package/components/elements/hit/HitActions.js +4 -4
  30. package/components/elements/hit/HitBanner.js +48 -28
  31. package/components/elements/hit/HitCard.js +5 -5
  32. package/components/elements/{record/RecordComments.d.ts → hit/HitComments.d.ts} +4 -5
  33. package/components/elements/{record/RecordComments.js → hit/HitComments.js} +28 -29
  34. package/components/elements/{ObjectDetails.js → hit/HitDetails.js} +17 -17
  35. package/components/elements/hit/HitLabels.js +2 -2
  36. package/components/elements/hit/{HitPreview.d.ts → HitQuickSearch.d.ts} +3 -3
  37. package/components/elements/hit/{HitPreview.js → HitQuickSearch.js} +4 -10
  38. package/components/elements/hit/HitRelated.d.ts +6 -0
  39. package/components/elements/hit/HitRelated.js +7 -0
  40. package/components/elements/hit/HitSummary.d.ts +1 -2
  41. package/components/elements/hit/HitSummary.js +5 -6
  42. package/components/elements/{record/RecordWorklog.d.ts → hit/HitWorklog.d.ts} +3 -4
  43. package/components/elements/{record/RecordWorklog.js → hit/HitWorklog.js} +13 -15
  44. package/components/elements/hit/aggregate/HitGraph.js +8 -8
  45. package/components/elements/hit/outlines/DefaultOutline.js +1 -1
  46. package/components/elements/view/ViewTitle.js +1 -1
  47. package/components/hooks/useHitActions.d.ts +1 -1
  48. package/components/hooks/useHitActions.js +4 -4
  49. package/components/hooks/{useRecordSelection.d.ts → useHitSelection.d.ts} +2 -2
  50. package/components/hooks/{useRecordSelection.js → useHitSelection.js} +33 -12
  51. package/components/hooks/useMyPreferences.js +1 -10
  52. package/components/hooks/useMySearch.js +2 -2
  53. package/components/hooks/useMySitemap.js +1 -4
  54. package/components/hooks/useMyTheme.js +2 -9
  55. package/components/hooks/useParamState.test.js +4 -3
  56. package/components/routes/action/edit/ActionEditor.js +2 -2
  57. package/components/routes/action/view/ActionSearch.js +1 -1
  58. package/components/routes/advanced/QueryBuilder.js +1 -1
  59. package/components/routes/advanced/QueryEditor.js +3 -3
  60. package/components/routes/advanced/historyCompletionProvider.js +3 -3
  61. package/components/routes/analytics/AnalyticDetails.js +2 -2
  62. package/components/routes/analytics/AnalyticSearch.js +1 -1
  63. package/components/routes/dossiers/DossierEditor.js +2 -2
  64. package/components/routes/dossiers/DossierEditor.test.js +1 -1
  65. package/components/routes/help/ApiDocumentation.js +1 -1
  66. package/components/routes/help/BundleDocumentation.d.ts +3 -0
  67. package/components/routes/help/BundleDocumentation.js +12 -0
  68. package/components/routes/help/HitBannerDocumentation.js +0 -1
  69. package/components/routes/help/HitDocumentation.js +3 -1
  70. package/components/routes/help/markdown/en/bundles.md.js +1 -0
  71. package/components/routes/help/markdown/fr/bundles.md.js +1 -0
  72. package/components/routes/hits/search/BundleParentMenu.d.ts +6 -0
  73. package/components/routes/hits/search/BundleParentMenu.js +32 -0
  74. package/components/routes/hits/search/BundleScroller.d.ts +2 -0
  75. package/components/routes/hits/search/BundleScroller.js +6 -0
  76. package/components/routes/hits/search/{RecordBrowser.js → HitBrowser.js} +9 -9
  77. package/components/{elements/record/RecordContextMenu.d.ts → routes/hits/search/HitContextMenu.d.ts} +3 -3
  78. package/components/routes/hits/search/HitContextMenu.js +227 -0
  79. package/components/{elements/record/RecordContextMenu.test.js → routes/hits/search/HitContextMenu.test.js} +39 -39
  80. package/components/routes/hits/search/{RecordQuery.d.ts → HitQuery.d.ts} +2 -2
  81. package/components/routes/hits/search/{RecordQuery.js → HitQuery.js} +6 -6
  82. package/components/routes/hits/search/InformationPane.d.ts +0 -1
  83. package/components/routes/hits/search/InformationPane.js +60 -47
  84. package/components/routes/hits/search/LayoutSettings.js +3 -3
  85. package/components/routes/hits/search/QuerySettings.js +1 -2
  86. package/components/routes/hits/search/QuerySettings.test.js +9 -14
  87. package/components/routes/hits/search/SearchPane.js +49 -26
  88. package/components/routes/hits/search/ViewLink.js +3 -3
  89. package/components/routes/hits/search/ViewLink.test.js +8 -8
  90. package/components/routes/hits/search/grid/AddColumnModal.js +4 -5
  91. package/components/routes/hits/search/grid/EnhancedCell.d.ts +1 -2
  92. package/components/routes/hits/search/grid/EnhancedCell.js +2 -2
  93. package/components/routes/hits/search/grid/HitGrid.js +18 -20
  94. package/components/routes/hits/search/grid/{RecordRow.d.ts → HitRow.d.ts} +2 -3
  95. package/components/routes/hits/search/grid/{RecordRow.js → HitRow.js} +8 -10
  96. package/components/routes/hits/view/HitViewer.js +13 -12
  97. package/components/routes/home/ViewCard.js +4 -4
  98. package/components/{elements/MarkdownEditor.js → routes/overviews/OverviewEditor.js} +3 -3
  99. package/components/routes/overviews/OverviewViewer.js +2 -2
  100. package/components/routes/views/ViewComposer.js +4 -4
  101. package/locales/en/translation.json +3 -65
  102. package/locales/fr/translation.json +3 -63
  103. package/models/WithMetadata.d.ts +1 -2
  104. package/models/entities/generated/{ThreatEnrichment.d.ts → Enrichment.d.ts} +1 -1
  105. package/models/entities/generated/Hit.d.ts +0 -1
  106. package/models/entities/generated/Howler.d.ts +4 -0
  107. package/models/entities/generated/Rule.d.ts +10 -2
  108. package/models/entities/generated/Threat.d.ts +2 -2
  109. package/package.json +2 -19
  110. package/plugins/clue/components/ClueTypography.js +2 -2
  111. package/plugins/clue/utils.d.ts +1 -2
  112. package/tests/utils.d.ts +0 -2
  113. package/tests/utils.js +0 -8
  114. package/utils/constants.d.ts +3 -3
  115. package/utils/hitFunctions.d.ts +1 -2
  116. package/utils/hitFunctions.js +4 -4
  117. package/api/search/case.d.ts +0 -4
  118. package/api/search/case.js +0 -8
  119. package/api/v2/case/index.d.ts +0 -6
  120. package/api/v2/case/index.js +0 -18
  121. package/api/v2/index.d.ts +0 -4
  122. package/api/v2/index.js +0 -6
  123. package/api/v2/search/facet.d.ts +0 -3
  124. package/api/v2/search/facet.js +0 -12
  125. package/api/v2/search/index.d.ts +0 -5
  126. package/api/v2/search/index.js +0 -24
  127. package/components/app/providers/RecordProvider.d.ts +0 -23
  128. package/components/elements/ContextMenu.d.ts +0 -56
  129. package/components/elements/ContextMenu.js +0 -109
  130. package/components/elements/ContextMenu.test.js +0 -215
  131. package/components/elements/ObjectDetails.d.ts +0 -6
  132. package/components/elements/case/CaseCard.d.ts +0 -8
  133. package/components/elements/case/CaseCard.js +0 -39
  134. package/components/elements/case/CasePreview.d.ts +0 -6
  135. package/components/elements/case/CasePreview.js +0 -17
  136. package/components/elements/case/StatusIcon.d.ts +0 -5
  137. package/components/elements/case/StatusIcon.js +0 -13
  138. package/components/elements/hit/elements/AnalyticLink.d.ts +0 -8
  139. package/components/elements/hit/elements/AnalyticLink.js +0 -22
  140. package/components/elements/hit/related/RelatedRecords.js +0 -63
  141. package/components/elements/observable/ObservableCard.d.ts +0 -6
  142. package/components/elements/observable/ObservableCard.js +0 -23
  143. package/components/elements/observable/ObservablePreview.d.ts +0 -6
  144. package/components/elements/observable/ObservablePreview.js +0 -12
  145. package/components/elements/record/RecordContextMenu.js +0 -235
  146. package/components/elements/record/RecordContextMenu.test.d.ts +0 -1
  147. package/components/elements/record/RecordRelated.d.ts +0 -7
  148. package/components/elements/record/RecordRelated.js +0 -34
  149. package/components/hooks/useRelatedRecords.d.ts +0 -13
  150. package/components/hooks/useRelatedRecords.js +0 -32
  151. package/components/routes/cases/CaseViewer.d.ts +0 -2
  152. package/components/routes/cases/CaseViewer.js +0 -22
  153. package/components/routes/cases/Cases.d.ts +0 -2
  154. package/components/routes/cases/Cases.js +0 -101
  155. package/components/routes/cases/constants.d.ts +0 -5
  156. package/components/routes/cases/constants.js +0 -5
  157. package/components/routes/cases/detail/AlertPanel.d.ts +0 -6
  158. package/components/routes/cases/detail/AlertPanel.js +0 -33
  159. package/components/routes/cases/detail/CaseAssets.d.ts +0 -12
  160. package/components/routes/cases/detail/CaseAssets.js +0 -101
  161. package/components/routes/cases/detail/CaseAssets.test.d.ts +0 -1
  162. package/components/routes/cases/detail/CaseAssets.test.js +0 -163
  163. package/components/routes/cases/detail/CaseDashboard.d.ts +0 -7
  164. package/components/routes/cases/detail/CaseDashboard.js +0 -51
  165. package/components/routes/cases/detail/CaseDetails.d.ts +0 -6
  166. package/components/routes/cases/detail/CaseDetails.js +0 -61
  167. package/components/routes/cases/detail/CaseOverview.d.ts +0 -7
  168. package/components/routes/cases/detail/CaseOverview.js +0 -43
  169. package/components/routes/cases/detail/CaseSidebar.d.ts +0 -6
  170. package/components/routes/cases/detail/CaseSidebar.js +0 -61
  171. package/components/routes/cases/detail/CaseTask.d.ts +0 -11
  172. package/components/routes/cases/detail/CaseTask.js +0 -57
  173. package/components/routes/cases/detail/ItemPage.d.ts +0 -6
  174. package/components/routes/cases/detail/ItemPage.js +0 -99
  175. package/components/routes/cases/detail/RelatedCasePanel.d.ts +0 -6
  176. package/components/routes/cases/detail/RelatedCasePanel.js +0 -31
  177. package/components/routes/cases/detail/TaskPanel.d.ts +0 -7
  178. package/components/routes/cases/detail/TaskPanel.js +0 -52
  179. package/components/routes/cases/detail/aggregates/CaseAggregate.d.ts +0 -12
  180. package/components/routes/cases/detail/aggregates/CaseAggregate.js +0 -19
  181. package/components/routes/cases/detail/aggregates/SourceAggregate.d.ts +0 -6
  182. package/components/routes/cases/detail/aggregates/SourceAggregate.js +0 -27
  183. package/components/routes/cases/detail/assets/Asset.d.ts +0 -14
  184. package/components/routes/cases/detail/assets/Asset.js +0 -12
  185. package/components/routes/cases/detail/assets/Asset.test.d.ts +0 -1
  186. package/components/routes/cases/detail/assets/Asset.test.js +0 -72
  187. package/components/routes/cases/detail/sidebar/CaseFolder.d.ts +0 -13
  188. package/components/routes/cases/detail/sidebar/CaseFolder.js +0 -131
  189. package/components/routes/cases/detail/sidebar/types.d.ts +0 -3
  190. package/components/routes/cases/detail/sidebar/utils.d.ts +0 -3
  191. package/components/routes/cases/detail/sidebar/utils.js +0 -25
  192. package/components/routes/cases/hooks/useCase.d.ts +0 -13
  193. package/components/routes/cases/hooks/useCase.js +0 -38
  194. package/components/routes/cases/modals/ResolveModal.d.ts +0 -7
  195. package/components/routes/cases/modals/ResolveModal.js +0 -59
  196. package/components/routes/hits/search/shared/IndexPicker.d.ts +0 -2
  197. package/components/routes/hits/search/shared/IndexPicker.js +0 -20
  198. package/components/routes/observables/ObservableViewer.d.ts +0 -7
  199. package/components/routes/observables/ObservableViewer.js +0 -27
  200. package/models/entities/generated/AttachmentsFile.d.ts +0 -12
  201. package/models/entities/generated/Case.d.ts +0 -28
  202. package/models/entities/generated/DestinationOriginal.d.ts +0 -19
  203. package/models/entities/generated/EmailAttachment.d.ts +0 -8
  204. package/models/entities/generated/EmailParent.d.ts +0 -19
  205. package/models/entities/generated/Enrichments.d.ts +0 -7
  206. package/models/entities/generated/EnrichmentsIndicator.d.ts +0 -21
  207. package/models/entities/generated/HttpResponse.d.ts +0 -11
  208. package/models/entities/generated/Item.d.ts +0 -9
  209. package/models/entities/generated/Observable.d.ts +0 -85
  210. package/models/entities/generated/ObservableCloud.d.ts +0 -20
  211. package/models/entities/generated/ObservableDestination.d.ts +0 -23
  212. package/models/entities/generated/ObservableEmail.d.ts +0 -30
  213. package/models/entities/generated/ObservableFile.d.ts +0 -36
  214. package/models/entities/generated/ObservableHowler.d.ts +0 -43
  215. package/models/entities/generated/ObservableHttp.d.ts +0 -11
  216. package/models/entities/generated/ObservableObserver.d.ts +0 -21
  217. package/models/entities/generated/ObservableOrganization.d.ts +0 -7
  218. package/models/entities/generated/ObservableProcess.d.ts +0 -34
  219. package/models/entities/generated/ObservableSource.d.ts +0 -23
  220. package/models/entities/generated/ObservableThreat.d.ts +0 -21
  221. package/models/entities/generated/ObservableTls.d.ts +0 -12
  222. package/models/entities/generated/ObserverIngress.d.ts +0 -9
  223. package/models/entities/generated/Task.d.ts +0 -10
  224. package/utils/typeUtils.d.ts +0 -7
  225. package/utils/typeUtils.js +0 -27
  226. /package/components/app/providers/{RecordSearchProvider.test.d.ts → HitSearchProvider.test.d.ts} +0 -0
  227. /package/components/elements/hit/{related/RelatedRecords.d.ts → HitDetails.d.ts} +0 -0
  228. /package/components/routes/hits/search/{RecordBrowser.d.ts → HitBrowser.d.ts} +0 -0
  229. /package/components/{elements/ContextMenu.test.d.ts → routes/hits/search/HitContextMenu.test.d.ts} +0 -0
  230. /package/components/{elements/MarkdownEditor.d.ts → routes/overviews/OverviewEditor.d.ts} +0 -0
@@ -40,7 +40,6 @@ import type { Vulnerability } from './Vulnerability';
40
40
  * NOTE: This is an auto-generated file. Don't edit this manually.
41
41
  */
42
42
  export interface Hit {
43
- __index: 'hit';
44
43
  agent?: Agent;
45
44
  assemblyline?: Assemblyline;
46
45
  aws?: Aws;
@@ -14,6 +14,8 @@ export interface Howler {
14
14
  analytic: string;
15
15
  assessment?: string;
16
16
  assignment: string;
17
+ bundle_size?: number;
18
+ bundles?: string[];
17
19
  comment?: HowlerComment[];
18
20
  confidence?: number;
19
21
  data?: string[];
@@ -22,8 +24,10 @@ export interface Howler {
22
24
  escalation?: string;
23
25
  expiry?: string;
24
26
  hash: string;
27
+ hits?: string[];
25
28
  id: string;
26
29
  incidents?: Incident[];
30
+ is_bundle?: boolean;
27
31
  labels?: Labels;
28
32
  links?: Link[];
29
33
  log?: Log[];
@@ -2,6 +2,14 @@
2
2
  * NOTE: This is an auto-generated file. Don't edit this manually.
3
3
  */
4
4
  export interface Rule {
5
- destination?: string;
6
- query?: string;
5
+ author?: string;
6
+ category?: string;
7
+ description?: string;
8
+ id?: string;
9
+ license?: string;
10
+ name?: string;
11
+ reference?: string;
12
+ ruleset?: string;
13
+ uuid?: string;
14
+ version?: string;
7
15
  }
@@ -1,6 +1,6 @@
1
+ import type { Enrichment } from './Enrichment';
1
2
  import type { Feed } from './Feed';
2
3
  import type { Software } from './Software';
3
- import type { ThreatEnrichment } from './ThreatEnrichment';
4
4
  import type { ThreatGroup } from './ThreatGroup';
5
5
  import type { ThreatIndicator } from './ThreatIndicator';
6
6
  import type { ThreatTactic } from './ThreatTactic';
@@ -10,7 +10,7 @@ import type { ThreatTechnique } from './ThreatTechnique';
10
10
  * NOTE: This is an auto-generated file. Don't edit this manually.
11
11
  */
12
12
  export interface Threat {
13
- enrichments?: ThreatEnrichment[];
13
+ enrichments?: Enrichment[];
14
14
  feed?: Feed;
15
15
  framework?: string;
16
16
  group?: ThreatGroup;
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  ]
13
13
  },
14
14
  "dependencies": {
15
- "@cccsaurora/clue-ui": "1.2.3",
15
+ "@cccsaurora/clue-ui": "1.2.4",
16
16
  "@dnd-kit/core": "^6.3.1",
17
17
  "@dnd-kit/modifiers": "^7.0.0",
18
18
  "@dnd-kit/sortable": "^8.0.0",
@@ -101,7 +101,7 @@
101
101
  "internal-slot": "1.0.7"
102
102
  },
103
103
  "type": "module",
104
- "version": "2.18.0-dev.682",
104
+ "version": "2.18.0-dev.683",
105
105
  "exports": {
106
106
  "./i18n": "./i18n.js",
107
107
  "./index.css": "./index.css",
@@ -129,11 +129,8 @@
129
129
  "./components/app/providers/*": "./components/app/providers/*.js",
130
130
  "./components/app/hooks/*": "./components/app/hooks/*.js",
131
131
  "./components/elements/display/*": "./components/elements/display/*.js",
132
- "./components/elements/observable/*": "./components/elements/observable/*.js",
133
132
  "./components/elements/hit/*": "./components/elements/hit/*.js",
134
- "./components/elements/record/*": "./components/elements/record/*.js",
135
133
  "./components/elements/view/*": "./components/elements/view/*.js",
136
- "./components/elements/case/*": "./components/elements/case/*.js",
137
134
  "./components/elements/addons/*": "./components/elements/addons/*.js",
138
135
  "./components/elements/display/handlebars/*": "./components/elements/display/handlebars/*.js",
139
136
  "./components/elements/display/modals/*": "./components/elements/display/modals/*.js",
@@ -175,8 +172,6 @@
175
172
  "./components/routes/help/*": "./components/routes/help/*.js",
176
173
  "./components/routes/admin/*": "./components/routes/admin/*.js",
177
174
  "./components/routes/settings/*": "./components/routes/settings/*.js",
178
- "./components/routes/observables/*": "./components/routes/observables/*.js",
179
- "./components/routes/cases/*": "./components/routes/cases/*.js",
180
175
  "./components/routes/action/edit/*": "./components/routes/action/edit/*.js",
181
176
  "./components/routes/action/view/*": "./components/routes/action/view/*.js",
182
177
  "./components/routes/action/shared/*": "./components/routes/action/shared/*.js",
@@ -192,12 +187,6 @@
192
187
  "./components/routes/help/markdown/fr/*.md": "./components/routes/help/markdown/fr/*.md.js",
193
188
  "./components/routes/help/markdown/en/*.md": "./components/routes/help/markdown/en/*.md.js",
194
189
  "./components/routes/admin/users/*": "./components/routes/admin/users/*.js",
195
- "./components/routes/cases/modals/*": "./components/routes/cases/modals/*.js",
196
- "./components/routes/cases/hooks/*": "./components/routes/cases/hooks/*.js",
197
- "./components/routes/cases/detail/*": "./components/routes/cases/detail/*.js",
198
- "./components/routes/cases/detail/sidebar/*": "./components/routes/cases/detail/sidebar/*.js",
199
- "./components/routes/cases/detail/assets/*": "./components/routes/cases/detail/assets/*.js",
200
- "./components/routes/cases/detail/aggregates/*": "./components/routes/cases/detail/aggregates/*.js",
201
190
  "./commons/components/*": "./commons/components/*.js",
202
191
  "./commons/components/breadcrumbs/*": "./commons/components/breadcrumbs/*.js",
203
192
  "./commons/components/app/*": "./commons/components/app/*.js",
@@ -223,8 +212,6 @@
223
212
  "./locales/en/help/*.json": "./locales/en/help/*.json",
224
213
  "./api/overview/*": "./api/overview/*.js",
225
214
  "./api/overview": "./api/overview/index.js",
226
- "./api/v2/*": "./api/v2/*.js",
227
- "./api/v2": "./api/v2/index.js",
228
215
  "./api/action/*": "./api/action/*.js",
229
216
  "./api/action": "./api/action/index.js",
230
217
  "./api/auth/*": "./api/auth/*.js",
@@ -247,10 +234,6 @@
247
234
  "./api/hit": "./api/hit/index.js",
248
235
  "./api/view/*": "./api/view/*.js",
249
236
  "./api/view": "./api/view/index.js",
250
- "./api/v2/search/*": "./api/v2/search/*.js",
251
- "./api/v2/search": "./api/v2/search/index.js",
252
- "./api/v2/case/*": "./api/v2/case/*.js",
253
- "./api/v2/case": "./api/v2/case/index.js",
254
237
  "./api/analytic/comments/*": "./api/analytic/comments/*.js",
255
238
  "./api/analytic/comments": "./api/analytic/comments/index.js",
256
239
  "./api/analytic/notebooks/*": "./api/analytic/notebooks/*.js",
@@ -3,8 +3,8 @@ import EnrichedTypography from '@cccsaurora/clue-ui/components/EnrichedTypograph
3
3
  import { Typography } from '@mui/material';
4
4
  import { memo } from 'react';
5
5
  import { useType } from '../utils';
6
- const ClueTypography = ({ children, value, context, field, obj, ...props }) => {
7
- const type = useType(obj, field, value);
6
+ const ClueTypography = ({ children, value, context, field, hit, ...props }) => {
7
+ const type = useType(hit, field, value);
8
8
  if (!type) {
9
9
  return _jsx(Typography, { ...props, children: children ?? value });
10
10
  }
@@ -1,3 +1,2 @@
1
1
  import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
2
- import type { Observable } from '@cccsaurora/howler-ui/models/entities/generated/Observable';
3
- export declare const useType: (hit?: Hit | Observable, field?: string, value?: string) => any;
2
+ export declare const useType: (hit?: Hit, field?: string, value?: string) => any;
package/tests/utils.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import type { Action } from '@cccsaurora/howler-ui/models/entities/generated/Action';
2
2
  import type { Analytic } from '@cccsaurora/howler-ui/models/entities/generated/Analytic';
3
- import type { Case } from '@cccsaurora/howler-ui/models/entities/generated/Case';
4
3
  import type { Dossier } from '@cccsaurora/howler-ui/models/entities/generated/Dossier';
5
4
  import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
6
5
  import type { Template } from '@cccsaurora/howler-ui/models/entities/generated/Template';
@@ -13,6 +12,5 @@ export declare const createMockAnalytic: (overrides?: Partial<Analytic>) => Anal
13
12
  export declare const createMockTemplate: (overrides?: Partial<Template>) => Template;
14
13
  export declare const createMockAction: (overrides?: Partial<Action>) => Action;
15
14
  export declare const createMockView: (overrides?: Partial<View>) => View;
16
- export declare const createMockCase: (overrides?: Partial<Case>) => Case;
17
15
  export declare const createMockDossier: (overrides?: Partial<Dossier>) => Dossier;
18
16
  export {};
package/tests/utils.js CHANGED
@@ -1,6 +1,5 @@
1
1
  // Mock data factories
2
2
  export const createMockHit = (overrides) => ({
3
- __index: 'hit',
4
3
  howler: {
5
4
  id: 'test-hit-1',
6
5
  analytic: 'test-analytic',
@@ -53,13 +52,6 @@ export const createMockView = (overrides) => ({
53
52
  },
54
53
  ...overrides
55
54
  });
56
- export const createMockCase = (overrides) => ({
57
- case_id: 'test-case-id',
58
- title: 'Test Case',
59
- summary: 'Test case summary',
60
- items: [],
61
- ...overrides
62
- });
63
55
  // Helper function to create mock dossiers
64
56
  export const createMockDossier = (overrides) => ({
65
57
  dossier_id: 'test-dossier-id',
@@ -5,9 +5,9 @@ export declare const VERSION: any;
5
5
  export declare const MY_LOCAL_STORAGE_PREFIX = "howler.ui";
6
6
  export declare const MY_SESSION_STORAGE_PREFIX = "howler.ui.cache";
7
7
  export declare const ESCALATION_COLORS: {
8
- alert: "warning";
9
- evidence: "error";
10
- hit: "primary";
8
+ alert: string;
9
+ evidence: string;
10
+ hit: string;
11
11
  };
12
12
  export declare const STATUS_COLORS: {
13
13
  open: string;
@@ -1,3 +1,2 @@
1
1
  import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
2
- import type { Observable } from '@cccsaurora/howler-ui/models/entities/generated/Observable';
3
- export declare const getUserList: (record: Hit | Observable) => Set<string>;
2
+ export declare const getUserList: (hit: Hit) => Set<string>;
@@ -1,8 +1,8 @@
1
- export const getUserList = (record) => {
1
+ export const getUserList = (hit) => {
2
2
  const ids = new Set();
3
- if (record) {
4
- record.howler?.log?.forEach(l => ids.add(l.user));
5
- record.howler?.comment?.forEach(c => ids.add(c.user), ids);
3
+ if (hit) {
4
+ hit.howler?.log?.forEach(l => ids.add(l.user));
5
+ hit.howler?.comment?.forEach(c => ids.add(c.user), ids);
6
6
  }
7
7
  return ids;
8
8
  };
@@ -1,4 +0,0 @@
1
- import type { HowlerSearchRequest, HowlerSearchResponse } from '@cccsaurora/howler-ui/api/search';
2
- import type { Case } from '@cccsaurora/howler-ui/models/entities/generated/Case';
3
- export declare const uri: () => string;
4
- export declare const post: (request?: HowlerSearchRequest) => Promise<HowlerSearchResponse<Case>>;
@@ -1,8 +0,0 @@
1
- import { hpost, joinUri } from '@cccsaurora/howler-ui/api';
2
- import { uri as parentUri } from '@cccsaurora/howler-ui/api/search';
3
- export const uri = () => {
4
- return joinUri(parentUri(), 'case');
5
- };
6
- export const post = (request) => {
7
- return hpost(uri(), { ...(request || {}), query: request?.query || 'case_id:*' });
8
- };
@@ -1,6 +0,0 @@
1
- import type { Case } from '@cccsaurora/howler-ui/models/entities/generated/Case';
2
- export declare const uri: (id?: string) => string;
3
- export declare const get: (id: string) => Promise<Case>;
4
- export declare const post: (newData: Partial<Case>) => Promise<Case>;
5
- export declare const put: (id: string, _case: Partial<Case>) => Promise<Case>;
6
- export declare const del: (id: string) => Promise<void>;
@@ -1,18 +0,0 @@
1
- // eslint-disable-next-line import/no-cycle
2
- import { hdelete, hget, hpost, hput, joinAllUri, joinUri } from '@cccsaurora/howler-ui/api';
3
- import { uri as parentUri } from '@cccsaurora/howler-ui/api/v2';
4
- export const uri = (id) => {
5
- return id ? joinAllUri(parentUri(), 'case', id) : joinUri(parentUri(), 'case');
6
- };
7
- export const get = (id) => {
8
- return hget(uri(id));
9
- };
10
- export const post = (newData) => {
11
- return hpost(uri(), newData);
12
- };
13
- export const put = (id, _case) => {
14
- return hput(uri(id), _case);
15
- };
16
- export const del = (id) => {
17
- return hdelete(uri(id));
18
- };
package/api/v2/index.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import * as case_ from '@cccsaurora/howler-ui/api/v2/case';
2
- import * as search from '@cccsaurora/howler-ui/api/v2/search';
3
- export declare const uri: () => string;
4
- export { case_ as case, search };
package/api/v2/index.js DELETED
@@ -1,6 +0,0 @@
1
- import * as case_ from '@cccsaurora/howler-ui/api/v2/case';
2
- import * as search from '@cccsaurora/howler-ui/api/v2/search';
3
- export const uri = () => {
4
- return '/api/v2';
5
- };
6
- export { case_ as case, search };
@@ -1,3 +0,0 @@
1
- import type { HowlerFacetSearchRequest, HowlerFacetSearchResponse } from '@cccsaurora/howler-ui/api/search/facet';
2
- export declare const uri: (indexes: string[]) => string;
3
- export declare const post: (indexes: string | string[], request?: HowlerFacetSearchRequest) => Promise<HowlerFacetSearchResponse>;
@@ -1,12 +0,0 @@
1
- // eslint-disable-next-line import/no-cycle
2
- import { hpost, joinAllUri } from '@cccsaurora/howler-ui/api';
3
- import { uri as parentUri } from '@cccsaurora/howler-ui/api/v2';
4
- export const uri = (indexes) => {
5
- return joinAllUri(parentUri(), 'search', 'facet', indexes.join(','));
6
- };
7
- export const post = (indexes, request) => {
8
- if (typeof indexes === 'string') {
9
- indexes = indexes.split(',');
10
- }
11
- return hpost(uri(indexes), { ...(request || {}), query: request?.query || 'howler.id:*' });
12
- };
@@ -1,5 +0,0 @@
1
- import type { HowlerSearchRequest, HowlerSearchResponse } from '@cccsaurora/howler-ui/api/search';
2
- import * as facet from './facet';
3
- export declare const uri: (indexes: string[]) => string;
4
- export declare const post: <T = any>(indexes: string | string[], request?: HowlerSearchRequest) => Promise<HowlerSearchResponse<T>>;
5
- export { facet };
@@ -1,24 +0,0 @@
1
- // eslint-disable-next-line import/no-cycle
2
- import { hpost, joinAllUri } from '@cccsaurora/howler-ui/api';
3
- import { uri as parentUri } from '@cccsaurora/howler-ui/api/v2';
4
- import { identity, isNil } from 'lodash-es';
5
- import * as facet from './facet';
6
- export const uri = (indexes) => {
7
- return joinAllUri(parentUri(), 'search', indexes.join(','));
8
- };
9
- export const post = (indexes, request) => {
10
- if (isNil(indexes)) {
11
- throw new Error('Indexes cannot be null or undefined.');
12
- }
13
- if (typeof indexes === 'string') {
14
- indexes = indexes.split(',').filter(identity);
15
- }
16
- if (indexes.some(index => !['hit', 'observable', 'case'].includes(index))) {
17
- throw new Error('Only hit, case and observable indexes should be used currently.');
18
- }
19
- if (indexes.length < 1) {
20
- throw new Error('indexes must have length of at least 1.');
21
- }
22
- return hpost(uri(indexes), { ...(request || {}), query: request?.query || 'howler.id:*' });
23
- };
24
- export { facet };
@@ -1,23 +0,0 @@
1
- import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
2
- import type { Observable } from '@cccsaurora/howler-ui/models/entities/generated/Observable';
3
- import type { WithMetadata } from '@cccsaurora/howler-ui/models/WithMetadata';
4
- import type { FC, PropsWithChildren } from 'react';
5
- export interface RecordContextType {
6
- records: {
7
- [index: string]: Hit | Observable;
8
- };
9
- selectedRecords: (Hit | Observable)[];
10
- addRecordToSelection: (id: string) => void;
11
- removeRecordFromSelection: (id: string) => void;
12
- clearSelectedRecords: (except?: string) => void;
13
- loadRecords: (hits: (Hit | Observable)[]) => void;
14
- updateRecord: (newHit: Hit | Observable) => void;
15
- getRecord: (id: string, force?: boolean) => Promise<WithMetadata<Hit | Observable>>;
16
- }
17
- export declare const RecordContext: import("use-context-selector").Context<RecordContextType>;
18
- /**
19
- * Central repository for storing individual hit data across the application. Allows efficient retrieval of hits across componenents.
20
- */
21
- declare const RecordProvider: FC<PropsWithChildren>;
22
- export declare const useHitContextSelector: <Selected>(selector: (value: RecordContextType) => Selected) => Selected;
23
- export default RecordProvider;
@@ -1,56 +0,0 @@
1
- import { type SxProps } from '@mui/material';
2
- import type { ElementType, FC, MouseEventHandler, PropsWithChildren, ReactNode } from 'react';
3
- export type ContextMenuDivider = {
4
- kind: 'divider';
5
- id: string;
6
- sx?: SxProps;
7
- };
8
- export type ContextMenuLeafItem = {
9
- kind: 'item';
10
- id: string;
11
- icon?: ReactNode;
12
- label: ReactNode;
13
- disabled?: boolean;
14
- onClick?: () => void;
15
- /** When provided the item renders as a router Link instead of a button. */
16
- to?: string;
17
- };
18
- export type ContextMenuSubItem = {
19
- key: string;
20
- label: ReactNode;
21
- disabled?: boolean;
22
- onClick?: () => void;
23
- };
24
- export type ContextMenuSubmenuItem = {
25
- kind: 'submenu';
26
- /**
27
- * Identifier for this submenu. Used to derive:
28
- * - the MenuItem's DOM id (`${id}-menu-item`)
29
- * - the submenu Paper's DOM id (`${id}-submenu`)
30
- */
31
- id: string;
32
- icon?: ReactNode;
33
- label: ReactNode;
34
- disabled?: boolean;
35
- items: ContextMenuSubItem[];
36
- };
37
- export type ContextMenuEntry = ContextMenuDivider | ContextMenuLeafItem | ContextMenuSubmenuItem;
38
- interface ContextMenuProps {
39
- items: ContextMenuEntry[];
40
- /** Called after the menu opens, with the triggering event. */
41
- onOpen?: MouseEventHandler<HTMLElement>;
42
- /** Called when the menu closes. */
43
- onClose?: () => void;
44
- /** Wraps children + menu in this element. Defaults to Box. */
45
- Component?: ElementType;
46
- /** id applied to the wrapper element */
47
- id?: string;
48
- }
49
- /**
50
- * Generic context menu component that renders a MUI Menu from a declarative
51
- * items structure supporting leaf items, dividers, and single-level submenus.
52
- *
53
- * Submenus appear on hover and are positioned to avoid screen overflow.
54
- */
55
- declare const ContextMenu: FC<PropsWithChildren<ContextMenuProps>>;
56
- export default ContextMenu;
@@ -1,109 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { KeyboardArrowRight } from '@mui/icons-material';
3
- import { Box, Divider, Fade, ListItemIcon, ListItemText, Menu, MenuItem, MenuList, Paper, useTheme } from '@mui/material';
4
- import { useCallback, useEffect, useState } from 'react';
5
- import { Link } from 'react-router-dom';
6
- /**
7
- * The margin at the bottom of the screen by which a submenu should be inverted.
8
- * If hovering within this many pixels of the bottom, the submenu renders upward.
9
- */
10
- const CONTEXTMENU_MARGIN = 350;
11
- /**
12
- * Generic context menu component that renders a MUI Menu from a declarative
13
- * items structure supporting leaf items, dividers, and single-level submenus.
14
- *
15
- * Submenus appear on hover and are positioned to avoid screen overflow.
16
- */
17
- const ContextMenu = ({ items, onOpen, onClose, Component = Box, id, children }) => {
18
- const theme = useTheme();
19
- const [show, setShow] = useState({});
20
- const [anchorEl, setAnchorEl] = useState(null);
21
- const [transformProps, setTransformProps] = useState({});
22
- const handleClose = useCallback(() => {
23
- setAnchorEl(null);
24
- onClose?.();
25
- }, [onClose]);
26
- const handleContextMenu = useCallback(event => {
27
- if (anchorEl) {
28
- event.preventDefault();
29
- handleClose();
30
- return;
31
- }
32
- event.preventDefault();
33
- if (window.innerHeight - event.clientY < 300) {
34
- setTransformProps({
35
- position: 'fixed',
36
- bottom: `${window.innerHeight - event.clientY}px !important`,
37
- top: 'unset !important',
38
- left: `${event.clientX}px !important`
39
- });
40
- }
41
- else {
42
- setTransformProps({
43
- position: 'fixed',
44
- top: `${event.clientY}px !important`,
45
- left: `${event.clientX}px !important`
46
- });
47
- }
48
- setAnchorEl(event.target);
49
- onOpen?.(event);
50
- }, [anchorEl, handleClose, onOpen]);
51
- /**
52
- * Calculates positioning styles for a submenu based on the parent element's
53
- * position relative to the viewport bottom.
54
- */
55
- const calculateSubMenuStyles = useCallback((parent) => {
56
- const baseStyles = { position: 'absolute', maxHeight: '300px', overflow: 'auto' };
57
- const defaultStyles = { ...baseStyles, top: 0, left: '100%' };
58
- if (!parent) {
59
- return defaultStyles;
60
- }
61
- const parentBounds = parent.getBoundingClientRect();
62
- if (window.innerHeight - parentBounds.y < CONTEXTMENU_MARGIN) {
63
- return { ...baseStyles, bottom: 0, left: '100%' };
64
- }
65
- return defaultStyles;
66
- }, []);
67
- // Reset submenu visibility whenever the menu is closed
68
- useEffect(() => {
69
- if (!anchorEl) {
70
- setShow({});
71
- }
72
- }, [anchorEl]);
73
- return (_jsxs(Component, { id: id, onContextMenu: handleContextMenu, children: [children, _jsx(Menu, { id: "record-menu", open: !!anchorEl, anchorEl: anchorEl, onClose: handleClose, slotProps: {
74
- paper: {
75
- sx: {
76
- ...transformProps,
77
- overflow: 'visible !important'
78
- },
79
- elevation: 2
80
- }
81
- }, MenuListProps: {
82
- dense: true,
83
- sx: {
84
- minWidth: '250px',
85
- paddingY: '0 !important',
86
- '& > :first-child': {
87
- borderTopLeftRadius: theme.shape.borderRadius,
88
- borderTopRightRadius: theme.shape.borderRadius
89
- },
90
- '& > :last-child': {
91
- borderBottomLeftRadius: theme.shape.borderRadius,
92
- borderBottomRightRadius: theme.shape.borderRadius
93
- }
94
- }
95
- }, anchorOrigin: { vertical: 'top', horizontal: 'left' }, onClick: handleClose, children: items.map(entry => {
96
- if (entry.kind === 'divider') {
97
- return _jsx(Divider, { sx: { my: '0 !important' } }, entry.id);
98
- }
99
- if (entry.kind === 'item') {
100
- if (entry.to) {
101
- return (_jsxs(MenuItem, { component: Link, to: entry.to, disabled: entry.disabled, children: [entry.icon && _jsx(ListItemIcon, { children: entry.icon }), _jsx(ListItemText, { children: entry.label })] }, entry.id));
102
- }
103
- return (_jsxs(MenuItem, { disabled: entry.disabled, onClick: entry.onClick, children: [entry.icon && _jsx(ListItemIcon, { children: entry.icon }), _jsx(ListItemText, { children: entry.label })] }, entry.id));
104
- }
105
- const { id: entryId, icon, label, disabled, items: subItems } = entry;
106
- return (_jsxs(MenuItem, { id: `${entryId}-menu-item`, sx: { position: 'relative' }, onMouseEnter: ev => setShow(_show => ({ ..._show, [entryId]: ev.target })), onMouseLeave: () => setShow(_show => ({ ..._show, [entryId]: null })), disabled: disabled, children: [icon && _jsx(ListItemIcon, { children: icon }), _jsx(ListItemText, { sx: { flex: 1 }, children: label }), !disabled && _jsx(KeyboardArrowRight, { fontSize: "small", sx: { color: 'text.secondary', mr: -1 } }), _jsx(Fade, { in: !!show[entryId], unmountOnExit: true, children: _jsx(Paper, { id: `${entryId}-submenu`, sx: calculateSubMenuStyles(show[entryId]), elevation: 2, children: _jsx(MenuList, { sx: { p: 0, borderTopLeftRadius: 0 }, dense: true, role: "group", children: subItems.map(subItem => (_jsx(MenuItem, { onClick: subItem.onClick, disabled: subItem.disabled, children: _jsx(ListItemText, { children: subItem.label }) }, subItem.key))) }) }) })] }, entryId));
107
- }) })] }));
108
- };
109
- export default ContextMenu;