@cccsaurora/howler-ui 2.18.0-dev.736 → 2.18.0-dev.737
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.
- package/api/index.d.ts +0 -2
- package/api/index.js +2 -4
- package/api/search/facet/hit.d.ts +3 -1
- package/api/search/facet/index.d.ts +1 -3
- package/api/search/index.d.ts +1 -2
- package/api/search/index.js +1 -2
- package/commons/components/leftnav/LeftNavDrawer.js +1 -1
- package/components/app/App.js +7 -39
- package/components/app/hooks/useMatchers.d.ts +1 -1
- package/components/app/hooks/useMatchers.js +11 -23
- package/components/app/hooks/useMatchers.test.js +22 -22
- package/components/app/hooks/useTitle.js +3 -3
- package/components/app/providers/FavouritesProvider.js +2 -2
- package/components/app/providers/HitProvider.d.ts +22 -0
- package/components/app/providers/{RecordProvider.js → HitProvider.js} +41 -41
- package/components/app/providers/{RecordSearchProvider.d.ts → HitSearchProvider.d.ts} +6 -6
- package/components/app/providers/{RecordSearchProvider.js → HitSearchProvider.js} +17 -12
- package/components/app/providers/{RecordSearchProvider.test.js → HitSearchProvider.test.js} +70 -51
- package/components/app/providers/ModalProvider.d.ts +0 -1
- package/components/app/providers/ParameterProvider.d.ts +2 -9
- package/components/app/providers/ParameterProvider.js +240 -165
- package/components/app/providers/ParameterProvider.test.js +94 -346
- package/components/app/providers/UserListProvider.js +8 -28
- package/components/elements/PluginTypography.d.ts +1 -2
- package/components/elements/PluginTypography.js +2 -3
- package/components/elements/UserList.d.ts +2 -5
- package/components/elements/UserList.js +8 -18
- package/components/elements/addons/search/phrase/Phrase.js +1 -1
- package/components/elements/display/ChipPopper.d.ts +1 -1
- package/components/elements/display/HowlerCard.js +1 -1
- package/components/elements/display/Modal.js +0 -2
- package/components/elements/display/icons/BundleButton.d.ts +6 -0
- package/components/elements/display/icons/BundleButton.js +32 -0
- package/components/elements/hit/HitActions.js +4 -4
- package/components/elements/hit/HitBanner.d.ts +0 -1
- package/components/elements/hit/HitBanner.js +49 -29
- package/components/elements/hit/HitCard.d.ts +0 -2
- package/components/elements/hit/HitCard.js +7 -7
- package/components/elements/{record/RecordComments.d.ts → hit/HitComments.d.ts} +4 -5
- package/components/elements/{record/RecordComments.js → hit/HitComments.js} +28 -29
- package/components/elements/{ObjectDetails.js → hit/HitDetails.js} +17 -17
- package/components/elements/hit/HitLabels.js +2 -2
- package/components/elements/hit/HitOutline.d.ts +0 -1
- package/components/elements/hit/HitOutline.js +3 -3
- package/components/elements/hit/{HitPreview.d.ts → HitQuickSearch.d.ts} +3 -3
- package/components/elements/hit/{HitPreview.js → HitQuickSearch.js} +4 -10
- package/components/elements/hit/HitRelated.d.ts +6 -0
- package/components/elements/hit/HitRelated.js +7 -0
- package/components/elements/hit/HitSummary.d.ts +1 -2
- package/components/elements/hit/HitSummary.js +5 -6
- package/components/elements/{record/RecordWorklog.d.ts → hit/HitWorklog.d.ts} +3 -4
- package/components/elements/{record/RecordWorklog.js → hit/HitWorklog.js} +13 -15
- package/components/elements/hit/aggregate/HitGraph.js +8 -8
- package/components/elements/hit/outlines/DefaultOutline.js +1 -1
- package/components/elements/view/ViewTitle.d.ts +0 -1
- package/components/elements/view/ViewTitle.js +2 -9
- package/components/hooks/useHitActions.d.ts +1 -1
- package/components/hooks/useHitActions.js +4 -4
- package/components/hooks/{useRecordSelection.d.ts → useHitSelection.d.ts} +2 -2
- package/components/hooks/{useRecordSelection.js → useHitSelection.js} +33 -12
- package/components/hooks/useMyPreferences.js +1 -10
- package/components/hooks/useMySearch.js +2 -2
- package/components/hooks/useMySitemap.js +1 -4
- package/components/hooks/useMyTheme.js +2 -9
- package/components/hooks/useParamState.test.js +4 -3
- package/components/routes/action/edit/ActionEditor.js +2 -2
- package/components/routes/action/view/ActionSearch.js +1 -1
- package/components/routes/advanced/QueryBuilder.js +1 -1
- package/components/routes/advanced/QueryEditor.js +3 -3
- package/components/routes/advanced/historyCompletionProvider.js +3 -3
- package/components/routes/analytics/AnalyticDetails.js +2 -2
- package/components/routes/analytics/AnalyticSearch.js +1 -1
- package/components/routes/dossiers/DossierEditor.js +2 -2
- package/components/routes/dossiers/DossierEditor.test.js +1 -1
- package/components/routes/help/ApiDocumentation.js +1 -1
- package/components/routes/help/BundleDocumentation.d.ts +3 -0
- package/components/routes/help/BundleDocumentation.js +12 -0
- package/components/routes/help/HitBannerDocumentation.js +0 -1
- package/components/routes/help/HitDocumentation.js +3 -1
- package/components/routes/help/markdown/en/bundles.md.js +1 -0
- package/components/routes/help/markdown/fr/bundles.md.js +1 -0
- package/components/routes/hits/search/BundleParentMenu.d.ts +6 -0
- package/components/routes/hits/search/BundleParentMenu.js +32 -0
- package/components/routes/hits/search/BundleScroller.d.ts +2 -0
- package/components/routes/hits/search/BundleScroller.js +6 -0
- package/components/routes/hits/search/{RecordBrowser.js → HitBrowser.js} +9 -9
- package/components/{elements/record/RecordContextMenu.d.ts → routes/hits/search/HitContextMenu.d.ts} +3 -3
- package/components/routes/hits/search/HitContextMenu.js +227 -0
- package/components/{elements/record/RecordContextMenu.test.js → routes/hits/search/HitContextMenu.test.js} +39 -94
- package/components/routes/hits/search/{RecordQuery.d.ts → HitQuery.d.ts} +2 -2
- package/components/routes/hits/search/{RecordQuery.js → HitQuery.js} +6 -6
- package/components/routes/hits/search/InformationPane.d.ts +0 -1
- package/components/routes/hits/search/InformationPane.js +60 -47
- package/components/routes/hits/search/LayoutSettings.js +3 -3
- package/components/routes/hits/search/QuerySettings.js +1 -2
- package/components/routes/hits/search/QuerySettings.test.js +9 -14
- package/components/routes/hits/search/SearchPane.js +49 -26
- package/components/routes/hits/search/ViewLink.js +3 -3
- package/components/routes/hits/search/ViewLink.test.js +8 -8
- package/components/routes/hits/search/grid/AddColumnModal.js +4 -5
- package/components/routes/hits/search/grid/EnhancedCell.d.ts +1 -2
- package/components/routes/hits/search/grid/EnhancedCell.js +2 -2
- package/components/routes/hits/search/grid/HitGrid.js +18 -20
- package/components/routes/hits/search/grid/{RecordRow.d.ts → HitRow.d.ts} +2 -3
- package/components/routes/hits/search/grid/{RecordRow.js → HitRow.js} +8 -10
- package/components/routes/hits/view/HitViewer.js +13 -12
- package/components/routes/home/ViewCard.js +41 -47
- package/components/{elements/MarkdownEditor.js → routes/overviews/OverviewEditor.js} +3 -3
- package/components/routes/overviews/OverviewViewer.js +2 -2
- package/components/routes/views/ViewComposer.js +19 -46
- package/locales/en/translation.json +3 -89
- package/locales/fr/translation.json +3 -87
- package/models/WithMetadata.d.ts +1 -2
- package/models/entities/generated/{ThreatEnrichment.d.ts → Enrichment.d.ts} +1 -1
- package/models/entities/generated/Hit.d.ts +0 -1
- package/models/entities/generated/Howler.d.ts +4 -0
- package/models/entities/generated/Rule.d.ts +10 -2
- package/models/entities/generated/Threat.d.ts +2 -2
- package/models/entities/generated/View.d.ts +0 -1
- package/package.json +2 -19
- package/plugins/clue/components/ClueTypography.js +2 -2
- package/plugins/clue/utils.d.ts +1 -2
- package/tests/mocks.d.ts +1 -11
- package/tests/mocks.js +7 -12
- package/tests/server-handlers.js +1 -6
- package/tests/utils.d.ts +0 -4
- package/tests/utils.js +0 -20
- package/utils/constants.d.ts +3 -3
- package/utils/hitFunctions.d.ts +1 -2
- package/utils/hitFunctions.js +4 -4
- package/utils/viewUtils.js +0 -3
- package/api/search/case.d.ts +0 -4
- package/api/search/case.js +0 -8
- package/api/v2/case/index.d.ts +0 -8
- package/api/v2/case/index.js +0 -20
- package/api/v2/case/items.d.ts +0 -6
- package/api/v2/case/items.js +0 -18
- package/api/v2/index.d.ts +0 -4
- package/api/v2/index.js +0 -6
- package/api/v2/search/facet.d.ts +0 -3
- package/api/v2/search/facet.js +0 -12
- package/api/v2/search/index.d.ts +0 -5
- package/api/v2/search/index.js +0 -24
- package/components/app/providers/RecordProvider.d.ts +0 -23
- package/components/elements/ContextMenu.d.ts +0 -56
- package/components/elements/ContextMenu.js +0 -109
- package/components/elements/ContextMenu.test.js +0 -215
- package/components/elements/ObjectDetails.d.ts +0 -6
- package/components/elements/case/CaseCard.d.ts +0 -12
- package/components/elements/case/CaseCard.js +0 -42
- package/components/elements/case/CasePreview.d.ts +0 -6
- package/components/elements/case/CasePreview.js +0 -17
- package/components/elements/case/StatusIcon.d.ts +0 -5
- package/components/elements/case/StatusIcon.js +0 -13
- package/components/elements/hit/elements/AnalyticLink.d.ts +0 -9
- package/components/elements/hit/elements/AnalyticLink.js +0 -22
- package/components/elements/hit/related/RelatedRecords.js +0 -63
- package/components/elements/observable/ObservableCard.d.ts +0 -6
- package/components/elements/observable/ObservableCard.js +0 -22
- package/components/elements/observable/ObservablePreview.d.ts +0 -6
- package/components/elements/observable/ObservablePreview.js +0 -12
- package/components/elements/record/RecordContextMenu.js +0 -247
- package/components/elements/record/RecordContextMenu.test.d.ts +0 -1
- package/components/elements/record/RecordRelated.d.ts +0 -7
- package/components/elements/record/RecordRelated.js +0 -34
- package/components/hooks/useRelatedRecords.d.ts +0 -13
- package/components/hooks/useRelatedRecords.js +0 -32
- package/components/routes/cases/CaseViewer.d.ts +0 -2
- package/components/routes/cases/CaseViewer.js +0 -22
- package/components/routes/cases/Cases.d.ts +0 -2
- package/components/routes/cases/Cases.js +0 -101
- package/components/routes/cases/constants.d.ts +0 -5
- package/components/routes/cases/constants.js +0 -5
- package/components/routes/cases/detail/AlertPanel.d.ts +0 -6
- package/components/routes/cases/detail/AlertPanel.js +0 -33
- package/components/routes/cases/detail/CaseAssets.d.ts +0 -11
- package/components/routes/cases/detail/CaseAssets.js +0 -104
- package/components/routes/cases/detail/CaseAssets.test.d.ts +0 -1
- package/components/routes/cases/detail/CaseAssets.test.js +0 -167
- package/components/routes/cases/detail/CaseDashboard.d.ts +0 -7
- package/components/routes/cases/detail/CaseDashboard.js +0 -66
- package/components/routes/cases/detail/CaseDetails.d.ts +0 -6
- package/components/routes/cases/detail/CaseDetails.js +0 -61
- package/components/routes/cases/detail/CaseOverview.d.ts +0 -7
- package/components/routes/cases/detail/CaseOverview.js +0 -43
- package/components/routes/cases/detail/CaseSidebar.d.ts +0 -8
- package/components/routes/cases/detail/CaseSidebar.js +0 -107
- package/components/routes/cases/detail/CaseSidebar.test.d.ts +0 -1
- package/components/routes/cases/detail/CaseSidebar.test.js +0 -246
- package/components/routes/cases/detail/CaseTask.d.ts +0 -11
- package/components/routes/cases/detail/CaseTask.js +0 -57
- package/components/routes/cases/detail/CaseTimeline.d.ts +0 -12
- package/components/routes/cases/detail/CaseTimeline.js +0 -106
- package/components/routes/cases/detail/CaseTimeline.test.d.ts +0 -1
- package/components/routes/cases/detail/CaseTimeline.test.js +0 -227
- package/components/routes/cases/detail/ItemPage.d.ts +0 -6
- package/components/routes/cases/detail/ItemPage.js +0 -99
- package/components/routes/cases/detail/RelatedCasePanel.d.ts +0 -6
- package/components/routes/cases/detail/RelatedCasePanel.js +0 -34
- package/components/routes/cases/detail/TaskPanel.d.ts +0 -7
- package/components/routes/cases/detail/TaskPanel.js +0 -52
- package/components/routes/cases/detail/aggregates/CaseAggregate.d.ts +0 -11
- package/components/routes/cases/detail/aggregates/CaseAggregate.js +0 -24
- package/components/routes/cases/detail/aggregates/SourceAggregate.d.ts +0 -6
- package/components/routes/cases/detail/aggregates/SourceAggregate.js +0 -26
- package/components/routes/cases/detail/assets/Asset.d.ts +0 -14
- package/components/routes/cases/detail/assets/Asset.js +0 -12
- package/components/routes/cases/detail/assets/Asset.test.d.ts +0 -1
- package/components/routes/cases/detail/assets/Asset.test.js +0 -72
- package/components/routes/cases/detail/sidebar/CaseFolder.d.ts +0 -20
- package/components/routes/cases/detail/sidebar/CaseFolder.js +0 -83
- package/components/routes/cases/detail/sidebar/CaseFolder.test.d.ts +0 -1
- package/components/routes/cases/detail/sidebar/CaseFolder.test.js +0 -295
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.d.ts +0 -34
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.js +0 -103
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.test.d.ts +0 -1
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.test.js +0 -363
- package/components/routes/cases/detail/sidebar/FolderEntry.d.ts +0 -25
- package/components/routes/cases/detail/sidebar/FolderEntry.js +0 -88
- package/components/routes/cases/detail/sidebar/FolderEntry.test.d.ts +0 -1
- package/components/routes/cases/detail/sidebar/FolderEntry.test.js +0 -206
- package/components/routes/cases/detail/sidebar/RootDropZone.d.ts +0 -5
- package/components/routes/cases/detail/sidebar/RootDropZone.js +0 -33
- package/components/routes/cases/detail/sidebar/types.d.ts +0 -9
- package/components/routes/cases/detail/sidebar/utils.d.ts +0 -3
- package/components/routes/cases/detail/sidebar/utils.js +0 -29
- package/components/routes/cases/detail/sidebar/utils.test.d.ts +0 -1
- package/components/routes/cases/detail/sidebar/utils.test.js +0 -82
- package/components/routes/cases/hooks/useCase.d.ts +0 -13
- package/components/routes/cases/hooks/useCase.js +0 -51
- package/components/routes/cases/modals/AddToCaseModal.d.ts +0 -7
- package/components/routes/cases/modals/AddToCaseModal.js +0 -62
- package/components/routes/cases/modals/RenameItemModal.d.ts +0 -9
- package/components/routes/cases/modals/RenameItemModal.js +0 -48
- package/components/routes/cases/modals/ResolveModal.d.ts +0 -7
- package/components/routes/cases/modals/ResolveModal.js +0 -115
- package/components/routes/cases/modals/ResolveModal.test.d.ts +0 -1
- package/components/routes/cases/modals/ResolveModal.test.js +0 -384
- package/components/routes/hits/search/shared/IndexPicker.d.ts +0 -2
- package/components/routes/hits/search/shared/IndexPicker.js +0 -20
- package/components/routes/observables/ObservableViewer.d.ts +0 -7
- package/components/routes/observables/ObservableViewer.js +0 -27
- package/models/entities/generated/AttachmentsFile.d.ts +0 -12
- package/models/entities/generated/Case.d.ts +0 -28
- package/models/entities/generated/DestinationOriginal.d.ts +0 -19
- package/models/entities/generated/EmailAttachment.d.ts +0 -8
- package/models/entities/generated/EmailParent.d.ts +0 -19
- package/models/entities/generated/Enrichments.d.ts +0 -7
- package/models/entities/generated/EnrichmentsIndicator.d.ts +0 -21
- package/models/entities/generated/HttpResponse.d.ts +0 -11
- package/models/entities/generated/Item.d.ts +0 -9
- package/models/entities/generated/Observable.d.ts +0 -85
- package/models/entities/generated/ObservableCloud.d.ts +0 -20
- package/models/entities/generated/ObservableDestination.d.ts +0 -23
- package/models/entities/generated/ObservableEmail.d.ts +0 -30
- package/models/entities/generated/ObservableFile.d.ts +0 -36
- package/models/entities/generated/ObservableHowler.d.ts +0 -43
- package/models/entities/generated/ObservableHttp.d.ts +0 -11
- package/models/entities/generated/ObservableObserver.d.ts +0 -21
- package/models/entities/generated/ObservableOrganization.d.ts +0 -7
- package/models/entities/generated/ObservableProcess.d.ts +0 -34
- package/models/entities/generated/ObservableSource.d.ts +0 -23
- package/models/entities/generated/ObservableThreat.d.ts +0 -21
- package/models/entities/generated/ObservableTls.d.ts +0 -12
- package/models/entities/generated/ObserverIngress.d.ts +0 -9
- package/models/entities/generated/Task.d.ts +0 -10
- package/utils/typeUtils.d.ts +0 -7
- package/utils/typeUtils.js +0 -27
- /package/components/app/providers/{RecordSearchProvider.test.d.ts → HitSearchProvider.test.d.ts} +0 -0
- /package/components/elements/hit/{related/RelatedRecords.d.ts → HitDetails.d.ts} +0 -0
- /package/components/routes/hits/search/{RecordBrowser.d.ts → HitBrowser.d.ts} +0 -0
- /package/components/{elements/ContextMenu.test.d.ts → routes/hits/search/HitContextMenu.test.d.ts} +0 -0
- /package/components/{elements/MarkdownEditor.d.ts → routes/overviews/OverviewEditor.d.ts} +0 -0
|
@@ -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
|
-
|
|
6
|
-
|
|
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?:
|
|
13
|
+
enrichments?: Enrichment[];
|
|
14
14
|
feed?: Feed;
|
|
15
15
|
framework?: string;
|
|
16
16
|
group?: ThreatGroup;
|
package/package.json
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"i18next": "^23.16.8",
|
|
43
43
|
"i18next-browser-languagedetector": "^7.2.2",
|
|
44
44
|
"json-schema": "^0.4.0",
|
|
45
|
-
"lodash-es": "^4.
|
|
45
|
+
"lodash-es": "^4.18.1",
|
|
46
46
|
"md5": "^2.3.0",
|
|
47
47
|
"mermaid": "^11.13.0",
|
|
48
48
|
"monaco-editor": "0.49.0",
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"internal-slot": "1.0.7"
|
|
102
102
|
},
|
|
103
103
|
"type": "module",
|
|
104
|
-
"version": "2.18.0-dev.
|
|
104
|
+
"version": "2.18.0-dev.737",
|
|
105
105
|
"exports": {
|
|
106
106
|
"./i18n": "./i18n.js",
|
|
107
107
|
"./index.css": "./index.css",
|
|
@@ -148,11 +148,9 @@
|
|
|
148
148
|
"./components/routes/home": "./components/routes/home/index.js",
|
|
149
149
|
"./components/routes/dossiers/*": "./components/routes/dossiers/*.js",
|
|
150
150
|
"./components/routes/help/*": "./components/routes/help/*.js",
|
|
151
|
-
"./components/routes/observables/*": "./components/routes/observables/*.js",
|
|
152
151
|
"./components/routes/admin/*": "./components/routes/admin/*.js",
|
|
153
152
|
"./components/routes/action/*": "./components/routes/action/*.js",
|
|
154
153
|
"./components/routes/settings/*": "./components/routes/settings/*.js",
|
|
155
|
-
"./components/routes/cases/*": "./components/routes/cases/*.js",
|
|
156
154
|
"./components/routes/views/*": "./components/routes/views/*.js",
|
|
157
155
|
"./components/routes/overviews/*": "./components/routes/overviews/*.js",
|
|
158
156
|
"./components/routes/analytics/*": "./components/routes/analytics/*.js",
|
|
@@ -170,21 +168,12 @@
|
|
|
170
168
|
"./components/routes/action/shared/*": "./components/routes/action/shared/*.js",
|
|
171
169
|
"./components/routes/action/view/*": "./components/routes/action/view/*.js",
|
|
172
170
|
"./components/routes/action/view/markdown/*.md": "./components/routes/action/view/markdown/*.md.js",
|
|
173
|
-
"./components/routes/cases/modals/*": "./components/routes/cases/modals/*.js",
|
|
174
|
-
"./components/routes/cases/detail/*": "./components/routes/cases/detail/*.js",
|
|
175
|
-
"./components/routes/cases/hooks/*": "./components/routes/cases/hooks/*.js",
|
|
176
|
-
"./components/routes/cases/detail/assets/*": "./components/routes/cases/detail/assets/*.js",
|
|
177
|
-
"./components/routes/cases/detail/sidebar/*": "./components/routes/cases/detail/sidebar/*.js",
|
|
178
|
-
"./components/routes/cases/detail/aggregates/*": "./components/routes/cases/detail/aggregates/*.js",
|
|
179
171
|
"./components/routes/overviews/template/*": "./components/routes/overviews/template/*.js",
|
|
180
172
|
"./components/routes/analytics/widgets/*": "./components/routes/analytics/widgets/*.js",
|
|
181
173
|
"./components/logins/auth/*": "./components/logins/auth/*.js",
|
|
182
174
|
"./components/logins/hooks/*": "./components/logins/hooks/*.js",
|
|
183
175
|
"./components/elements/hit/*": "./components/elements/hit/*.js",
|
|
184
176
|
"./components/elements/addons/*": "./components/elements/addons/*.js",
|
|
185
|
-
"./components/elements/record/*": "./components/elements/record/*.js",
|
|
186
|
-
"./components/elements/observable/*": "./components/elements/observable/*.js",
|
|
187
|
-
"./components/elements/case/*": "./components/elements/case/*.js",
|
|
188
177
|
"./components/elements/view/*": "./components/elements/view/*.js",
|
|
189
178
|
"./components/elements/display/*": "./components/elements/display/*.js",
|
|
190
179
|
"./components/elements/hit/aggregate/*": "./components/elements/hit/aggregate/*.js",
|
|
@@ -235,8 +224,6 @@
|
|
|
235
224
|
"./api/template": "./api/template/index.js",
|
|
236
225
|
"./api/analytic/*": "./api/analytic/*.js",
|
|
237
226
|
"./api/analytic": "./api/analytic/index.js",
|
|
238
|
-
"./api/v2/*": "./api/v2/*.js",
|
|
239
|
-
"./api/v2": "./api/v2/index.js",
|
|
240
227
|
"./api/auth/*": "./api/auth/*.js",
|
|
241
228
|
"./api/auth": "./api/auth/index.js",
|
|
242
229
|
"./api/user/*": "./api/user/*.js",
|
|
@@ -257,10 +244,6 @@
|
|
|
257
244
|
"./api/analytic/comments": "./api/analytic/comments/index.js",
|
|
258
245
|
"./api/analytic/notebooks/*": "./api/analytic/notebooks/*.js",
|
|
259
246
|
"./api/analytic/notebooks": "./api/analytic/notebooks/index.js",
|
|
260
|
-
"./api/v2/case/*": "./api/v2/case/*.js",
|
|
261
|
-
"./api/v2/case": "./api/v2/case/index.js",
|
|
262
|
-
"./api/v2/search/*": "./api/v2/search/*.js",
|
|
263
|
-
"./api/v2/search": "./api/v2/search/index.js",
|
|
264
247
|
"./api/user/avatar/*": "./api/user/avatar/*.js",
|
|
265
248
|
"./api/user/avatar": "./api/user/avatar/index.js",
|
|
266
249
|
"./api/search/count/*": "./api/search/count/*.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,
|
|
7
|
-
const type = useType(
|
|
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
|
}
|
package/plugins/clue/utils.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
|
|
2
|
-
|
|
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/mocks.d.ts
CHANGED
|
@@ -7,17 +7,7 @@ export declare const setupContextSelectorMock: () => void;
|
|
|
7
7
|
* Sets up a mock for react-router-dom with common defaults
|
|
8
8
|
* @param options - Override specific router behavior
|
|
9
9
|
*/
|
|
10
|
-
export declare const setupReactRouterMock: () =>
|
|
11
|
-
mockSearchParams: URLSearchParams;
|
|
12
|
-
mockSetParams: import("vitest").Mock<(...args: any[]) => any>;
|
|
13
|
-
mockLocation: {
|
|
14
|
-
pathname: string;
|
|
15
|
-
search: string;
|
|
16
|
-
};
|
|
17
|
-
mockParams: {
|
|
18
|
-
id: any;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
10
|
+
export declare const setupReactRouterMock: () => void;
|
|
21
11
|
/**
|
|
22
12
|
* Sets up a mock localStorage instance
|
|
23
13
|
*/
|
package/tests/mocks.js
CHANGED
|
@@ -31,20 +31,15 @@ export const setupReactRouterMock = () => {
|
|
|
31
31
|
const mockSearchParams = vi.hoisted(() => new URLSearchParams());
|
|
32
32
|
const mockSetParams = vi.hoisted(() => vi.fn());
|
|
33
33
|
beforeAll(() => {
|
|
34
|
-
vi.mock('react-router-dom',
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
useSearchParams: vi.fn(() => [mockSearchParams, mockSetParams]),
|
|
42
|
-
useNavigate: () => vi.fn()
|
|
43
|
-
};
|
|
44
|
-
});
|
|
34
|
+
vi.mock('react-router-dom', () => ({
|
|
35
|
+
Link: forwardRef(({ to, children, ...props }, ref) => (_jsx("a", { ref: ref, href: to, ...props, children: children }))),
|
|
36
|
+
useLocation: vi.fn(() => mockLocation),
|
|
37
|
+
useParams: vi.fn(() => mockParams),
|
|
38
|
+
useSearchParams: vi.fn(() => [mockSearchParams, mockSetParams]),
|
|
39
|
+
useNavigate: () => vi.fn()
|
|
40
|
+
}));
|
|
45
41
|
});
|
|
46
42
|
afterAll(() => vi.resetModules());
|
|
47
|
-
return { mockSearchParams, mockSetParams, mockLocation, mockParams };
|
|
48
43
|
};
|
|
49
44
|
/**
|
|
50
45
|
* Sets up a mock localStorage instance
|
package/tests/server-handlers.js
CHANGED
|
@@ -30,12 +30,7 @@ export const MOCK_RESPONSES = {
|
|
|
30
30
|
total: 1,
|
|
31
31
|
rows: 1
|
|
32
32
|
},
|
|
33
|
-
'/api/v1/analytic': [createMockAnalytic()]
|
|
34
|
-
'/api/v2/search/hit,observable': {
|
|
35
|
-
items: [],
|
|
36
|
-
total: 0,
|
|
37
|
-
rows: 0
|
|
38
|
-
}
|
|
33
|
+
'/api/v1/analytic': [createMockAnalytic()]
|
|
39
34
|
};
|
|
40
35
|
const handlers = [
|
|
41
36
|
...Object.entries(MOCK_RESPONSES).map(([path, data]) => http.all(path, async () => HttpResponse.json({ api_response: data }))),
|
package/tests/utils.d.ts
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
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
|
-
import type { Observable } from '@cccsaurora/howler-ui/models/entities/generated/Observable';
|
|
7
5
|
import type { Template } from '@cccsaurora/howler-ui/models/entities/generated/Template';
|
|
8
6
|
import type { View } from '@cccsaurora/howler-ui/models/entities/generated/View';
|
|
9
7
|
type RecursivePartial<T> = {
|
|
10
8
|
[P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] : T[P] extends object | undefined ? RecursivePartial<T[P]> : T[P];
|
|
11
9
|
};
|
|
12
10
|
export declare const createMockHit: (overrides?: RecursivePartial<Hit>) => Hit;
|
|
13
|
-
export declare const createMockObservable: (overrides?: RecursivePartial<Observable>) => Observable;
|
|
14
11
|
export declare const createMockAnalytic: (overrides?: Partial<Analytic>) => Analytic;
|
|
15
12
|
export declare const createMockTemplate: (overrides?: Partial<Template>) => Template;
|
|
16
13
|
export declare const createMockAction: (overrides?: Partial<Action>) => Action;
|
|
17
14
|
export declare const createMockView: (overrides?: Partial<View>) => View;
|
|
18
|
-
export declare const createMockCase: (overrides?: Partial<Case>) => Case;
|
|
19
15
|
export declare const createMockDossier: (overrides?: Partial<Dossier>) => Dossier;
|
|
20
16
|
export {};
|
package/tests/utils.js
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
// Mock data factories
|
|
2
2
|
export const createMockHit = (overrides) => ({
|
|
3
|
-
...overrides,
|
|
4
|
-
__index: 'hit',
|
|
5
3
|
howler: {
|
|
6
4
|
id: 'test-hit-1',
|
|
7
5
|
analytic: 'test-analytic',
|
|
@@ -16,17 +14,6 @@ export const createMockHit = (overrides) => ({
|
|
|
16
14
|
...overrides?.event
|
|
17
15
|
}
|
|
18
16
|
});
|
|
19
|
-
export const createMockObservable = (overrides) => ({
|
|
20
|
-
...overrides,
|
|
21
|
-
__index: 'observable',
|
|
22
|
-
howler: {
|
|
23
|
-
id: 'test-observable-1',
|
|
24
|
-
analytic: 'test-analytic',
|
|
25
|
-
detection: 'Test Detection',
|
|
26
|
-
hash: '',
|
|
27
|
-
...overrides?.howler
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
17
|
export const createMockAnalytic = (overrides) => ({
|
|
31
18
|
analytic_id: 'test-analytic-id',
|
|
32
19
|
name: 'test-analytic',
|
|
@@ -65,13 +52,6 @@ export const createMockView = (overrides) => ({
|
|
|
65
52
|
},
|
|
66
53
|
...overrides
|
|
67
54
|
});
|
|
68
|
-
export const createMockCase = (overrides) => ({
|
|
69
|
-
case_id: 'test-case-id',
|
|
70
|
-
title: 'Test Case',
|
|
71
|
-
summary: 'Test case summary',
|
|
72
|
-
items: [],
|
|
73
|
-
...overrides
|
|
74
|
-
});
|
|
75
55
|
// Helper function to create mock dossiers
|
|
76
56
|
export const createMockDossier = (overrides) => ({
|
|
77
57
|
dossier_id: 'test-dossier-id',
|
package/utils/constants.d.ts
CHANGED
|
@@ -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:
|
|
9
|
-
evidence:
|
|
10
|
-
hit:
|
|
8
|
+
alert: string;
|
|
9
|
+
evidence: string;
|
|
10
|
+
hit: string;
|
|
11
11
|
};
|
|
12
12
|
export declare const STATUS_COLORS: {
|
|
13
13
|
open: string;
|
package/utils/hitFunctions.d.ts
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
|
|
2
|
-
|
|
3
|
-
export declare const getUserList: (record: Hit | Observable) => Set<string>;
|
|
2
|
+
export declare const getUserList: (hit: Hit) => Set<string>;
|
package/utils/hitFunctions.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export const getUserList = (
|
|
1
|
+
export const getUserList = (hit) => {
|
|
2
2
|
const ids = new Set();
|
|
3
|
-
if (
|
|
4
|
-
|
|
5
|
-
|
|
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
|
};
|
package/utils/viewUtils.js
CHANGED
package/api/search/case.d.ts
DELETED
|
@@ -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>>;
|
package/api/search/case.js
DELETED
|
@@ -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
|
-
};
|
package/api/v2/case/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import * as items from '@cccsaurora/howler-ui/api/v2/case/items';
|
|
2
|
-
import type { Case } from '@cccsaurora/howler-ui/models/entities/generated/Case';
|
|
3
|
-
export declare const uri: (id?: string) => string;
|
|
4
|
-
export declare const get: (id: string) => Promise<Case>;
|
|
5
|
-
export declare const post: (newData: Partial<Case>) => Promise<Case>;
|
|
6
|
-
export declare const put: (id: string, _case: Partial<Case>) => Promise<Case>;
|
|
7
|
-
export declare const del: (id: string) => Promise<void>;
|
|
8
|
-
export { items };
|
package/api/v2/case/index.js
DELETED
|
@@ -1,20 +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
|
-
import * as items from '@cccsaurora/howler-ui/api/v2/case/items';
|
|
5
|
-
export const uri = (id) => {
|
|
6
|
-
return id ? joinAllUri(parentUri(), 'case', id) : joinUri(parentUri(), 'case');
|
|
7
|
-
};
|
|
8
|
-
export const get = (id) => {
|
|
9
|
-
return hget(uri(id));
|
|
10
|
-
};
|
|
11
|
-
export const post = (newData) => {
|
|
12
|
-
return hpost(uri(), newData);
|
|
13
|
-
};
|
|
14
|
-
export const put = (id, _case) => {
|
|
15
|
-
return hput(uri(id), _case);
|
|
16
|
-
};
|
|
17
|
-
export const del = (id) => {
|
|
18
|
-
return hdelete(uri(id));
|
|
19
|
-
};
|
|
20
|
-
export { items };
|
package/api/v2/case/items.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Case } from '@cccsaurora/howler-ui/models/entities/generated/Case';
|
|
2
|
-
import type { Item } from '@cccsaurora/howler-ui/models/entities/generated/Item';
|
|
3
|
-
export declare const uri: (id: string) => string;
|
|
4
|
-
export declare const post: (id: string, newData: Item) => Promise<Case>;
|
|
5
|
-
export declare const del: (id: string, values: string | string[]) => Promise<Case>;
|
|
6
|
-
export declare const patch: (id: string, value: string, newPath: string) => Promise<Case>;
|
package/api/v2/case/items.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
// eslint-disable-next-line import/no-cycle
|
|
2
|
-
import { hdelete, hpatch, hpost, joinUri } from '@cccsaurora/howler-ui/api';
|
|
3
|
-
import { uri as parentUri } from '@cccsaurora/howler-ui/api/v2/case';
|
|
4
|
-
export const uri = (id) => {
|
|
5
|
-
return joinUri(parentUri(id), 'items');
|
|
6
|
-
};
|
|
7
|
-
export const post = (id, newData) => {
|
|
8
|
-
return hpost(uri(id), newData);
|
|
9
|
-
};
|
|
10
|
-
export const del = (id, values) => {
|
|
11
|
-
if (!Array.isArray(values)) {
|
|
12
|
-
values = [values];
|
|
13
|
-
}
|
|
14
|
-
return hdelete(uri(id), { values });
|
|
15
|
-
};
|
|
16
|
-
export const patch = (id, value, newPath) => {
|
|
17
|
-
return hpatch(uri(id), { value, new_path: newPath });
|
|
18
|
-
};
|
package/api/v2/index.d.ts
DELETED
package/api/v2/index.js
DELETED
package/api/v2/search/facet.d.ts
DELETED
|
@@ -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>;
|
package/api/v2/search/facet.js
DELETED
|
@@ -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
|
-
};
|
package/api/v2/search/index.d.ts
DELETED
|
@@ -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 };
|
package/api/v2/search/index.js
DELETED
|
@@ -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;
|