@memberjunction/ng-dashboards 5.39.0 → 5.40.0
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/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +128 -4
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +548 -145
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts +56 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js +423 -0
- package/dist/AI/components/autotagging/components/classify-item-drilldown.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts +70 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +308 -0
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts +29 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +186 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts +69 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js +278 -0
- package/dist/AI/components/autotagging/components/classify-overview-analytics.component.js.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts +73 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js +393 -0
- package/dist/AI/components/autotagging/components/classify-seed-taxonomy.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts +122 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.d.ts.map +1 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js +908 -0
- package/dist/AI/components/autotagging/dialogs/classify-setup-wizard.component.js.map +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts +100 -2
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +603 -213
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
- package/dist/AI/components/autotagging/shared/classify.format.d.ts +15 -0
- package/dist/AI/components/autotagging/shared/classify.format.d.ts.map +1 -1
- package/dist/AI/components/autotagging/shared/classify.format.js +51 -0
- package/dist/AI/components/autotagging/shared/classify.format.js.map +1 -1
- package/dist/AI/components/autotagging/shared/classify.types.d.ts +43 -0
- package/dist/AI/components/autotagging/shared/classify.types.d.ts.map +1 -1
- package/dist/AI/components/autotagging/shared/classify.types.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts +38 -1
- package/dist/AI/components/autotagging/tabs/history-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/history-tab.component.js +185 -68
- package/dist/AI/components/autotagging/tabs/history-tab.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts +10 -1
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js +249 -188
- package/dist/AI/components/autotagging/tabs/pipeline-tab.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts +12 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +377 -296
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts +8 -0
- package/dist/AI/components/autotagging/tabs/tags-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js +112 -68
- package/dist/AI/components/autotagging/tabs/tags-tab.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts +9 -0
- package/dist/AI/components/autotagging/tabs/types-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/types-tab.component.js +87 -36
- package/dist/AI/components/autotagging/tabs/types-tab.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +3 -0
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -3
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +1 -1
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +28 -6
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +3 -0
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +330 -302
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/APIKeys/api-applications-panel.component.js +2 -2
- package/dist/APIKeys/api-key-create-dialog.component.js +2 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +31 -340
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +468 -1958
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-resource.component.js +10 -0
- package/dist/DataExplorer/data-explorer-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +12 -9
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts +27 -2
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +244 -120
- package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts +65 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js +176 -0
- package/dist/KnowledgeHub/components/visualize/record-drilldown/record-drilldown.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts +81 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js +308 -0
- package/dist/KnowledgeHub/components/visualize/tag-cloud/tag-cloud.component.js.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +85 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +362 -0
- package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -0
- package/dist/KnowledgeHub/index.d.ts +3 -0
- package/dist/KnowledgeHub/index.d.ts.map +1 -1
- package/dist/KnowledgeHub/index.js +3 -0
- package/dist/KnowledgeHub/index.js.map +1 -1
- package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
- package/dist/QueryBrowser/query-browser-resource.component.js +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +48 -38
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +41 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/data-explorer-dashboards.module.d.ts +12 -14
- package/dist/data-explorer-dashboards.module.d.ts.map +1 -1
- package/dist/data-explorer-dashboards.module.js +5 -14
- package/dist/data-explorer-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +3 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +57 -55
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts +0 -79
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +0 -195
- package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +0 -226
- package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +0 -1
- package/dist/DataExplorer/components/view-selector/view-selector.component.js +0 -861
- package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-dashboards",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.40.0",
|
|
4
4
|
"description": "MemberJunction Dashboards",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -93,60 +93,62 @@
|
|
|
93
93
|
"@codemirror/merge": "^6.11.2",
|
|
94
94
|
"@codemirror/state": "^6.5.4",
|
|
95
95
|
"@codemirror/view": "^6.39.12",
|
|
96
|
-
"@memberjunction/actions-base": "5.
|
|
97
|
-
"@memberjunction/ai-core-plus": "5.
|
|
98
|
-
"@memberjunction/ai-engine-base": "5.
|
|
99
|
-
"@memberjunction/api-keys-base": "5.
|
|
100
|
-
"@memberjunction/core": "5.
|
|
101
|
-
"@memberjunction/core-entities": "5.
|
|
102
|
-
"@memberjunction/credentials": "5.
|
|
103
|
-
"@memberjunction/export-engine": "5.
|
|
104
|
-
"@memberjunction/tag-engine-base": "5.
|
|
105
|
-
"@memberjunction/global": "5.
|
|
106
|
-
"@memberjunction/graphql-dataprovider": "5.
|
|
107
|
-
"@memberjunction/integration-engine-base": "5.
|
|
108
|
-
"@memberjunction/interactive-component-types": "5.
|
|
109
|
-
"@memberjunction/lists-base": "5.
|
|
110
|
-
"@memberjunction/ng-action-gallery": "5.
|
|
111
|
-
"@memberjunction/ng-actions": "5.
|
|
112
|
-
"@memberjunction/ng-agent-requests": "5.
|
|
113
|
-
"@memberjunction/ng-agents": "5.
|
|
114
|
-
"@memberjunction/ng-ai-test-harness": "5.
|
|
115
|
-
"@memberjunction/ng-archive-manager": "5.
|
|
116
|
-
"@memberjunction/ng-base-application": "5.
|
|
117
|
-
"@memberjunction/ng-base-types": "5.
|
|
118
|
-
"@memberjunction/ng-clustering": "5.
|
|
119
|
-
"@memberjunction/ng-code-editor": "5.
|
|
120
|
-
"@memberjunction/ng-container-directives": "5.
|
|
121
|
-
"@memberjunction/ng-conversations": "5.
|
|
122
|
-
"@memberjunction/ng-core-entity-forms": "5.
|
|
123
|
-
"@memberjunction/ng-credentials": "5.
|
|
124
|
-
"@memberjunction/ng-dashboard-viewer": "5.
|
|
125
|
-
"@memberjunction/ng-entity-relationship-diagram": "5.
|
|
126
|
-
"@memberjunction/ng-entity-viewer": "5.
|
|
127
|
-
"@memberjunction/ng-explorer-settings": "5.
|
|
128
|
-
"@memberjunction/ng-export-service": "5.
|
|
129
|
-
"@memberjunction/ng-filter-builder": "5.
|
|
130
|
-
"@memberjunction/ng-list-management": "5.
|
|
131
|
-
"@memberjunction/ng-map-view": "5.
|
|
132
|
-
"@memberjunction/ng-markdown": "5.
|
|
133
|
-
"@memberjunction/ng-notifications": "5.
|
|
134
|
-
"@memberjunction/ng-query-viewer": "5.
|
|
135
|
-
"@memberjunction/ng-base-forms": "5.
|
|
136
|
-
"@memberjunction/ng-react": "5.
|
|
137
|
-
"@memberjunction/ng-resource-permissions": "5.
|
|
138
|
-
"@memberjunction/ng-scheduling": "5.
|
|
139
|
-
"@memberjunction/ng-search": "5.
|
|
140
|
-
"@memberjunction/ng-shared": "5.
|
|
141
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
142
|
-
"@memberjunction/ng-testing": "5.
|
|
143
|
-
"@memberjunction/ng-trees": "5.
|
|
144
|
-
"@memberjunction/ng-ui-components": "5.
|
|
145
|
-
"@memberjunction/ng-versions": "5.
|
|
146
|
-
"@memberjunction/ng-word-cloud": "5.
|
|
147
|
-
"@memberjunction/skip-types": "5.
|
|
148
|
-
"@memberjunction/templates-base-types": "5.
|
|
149
|
-
"@memberjunction/testing-engine-base": "5.
|
|
96
|
+
"@memberjunction/actions-base": "5.40.0",
|
|
97
|
+
"@memberjunction/ai-core-plus": "5.40.0",
|
|
98
|
+
"@memberjunction/ai-engine-base": "5.40.0",
|
|
99
|
+
"@memberjunction/api-keys-base": "5.40.0",
|
|
100
|
+
"@memberjunction/core": "5.40.0",
|
|
101
|
+
"@memberjunction/core-entities": "5.40.0",
|
|
102
|
+
"@memberjunction/credentials": "5.40.0",
|
|
103
|
+
"@memberjunction/export-engine": "5.40.0",
|
|
104
|
+
"@memberjunction/tag-engine-base": "5.40.0",
|
|
105
|
+
"@memberjunction/global": "5.40.0",
|
|
106
|
+
"@memberjunction/graphql-dataprovider": "5.40.0",
|
|
107
|
+
"@memberjunction/integration-engine-base": "5.40.0",
|
|
108
|
+
"@memberjunction/interactive-component-types": "5.40.0",
|
|
109
|
+
"@memberjunction/lists-base": "5.40.0",
|
|
110
|
+
"@memberjunction/ng-action-gallery": "5.40.0",
|
|
111
|
+
"@memberjunction/ng-actions": "5.40.0",
|
|
112
|
+
"@memberjunction/ng-agent-requests": "5.40.0",
|
|
113
|
+
"@memberjunction/ng-agents": "5.40.0",
|
|
114
|
+
"@memberjunction/ng-ai-test-harness": "5.40.0",
|
|
115
|
+
"@memberjunction/ng-archive-manager": "5.40.0",
|
|
116
|
+
"@memberjunction/ng-base-application": "5.40.0",
|
|
117
|
+
"@memberjunction/ng-base-types": "5.40.0",
|
|
118
|
+
"@memberjunction/ng-clustering": "5.40.0",
|
|
119
|
+
"@memberjunction/ng-code-editor": "5.40.0",
|
|
120
|
+
"@memberjunction/ng-container-directives": "5.40.0",
|
|
121
|
+
"@memberjunction/ng-conversations": "5.40.0",
|
|
122
|
+
"@memberjunction/ng-core-entity-forms": "5.40.0",
|
|
123
|
+
"@memberjunction/ng-credentials": "5.40.0",
|
|
124
|
+
"@memberjunction/ng-dashboard-viewer": "5.40.0",
|
|
125
|
+
"@memberjunction/ng-entity-relationship-diagram": "5.40.0",
|
|
126
|
+
"@memberjunction/ng-entity-viewer": "5.40.0",
|
|
127
|
+
"@memberjunction/ng-explorer-settings": "5.40.0",
|
|
128
|
+
"@memberjunction/ng-export-service": "5.40.0",
|
|
129
|
+
"@memberjunction/ng-filter-builder": "5.40.0",
|
|
130
|
+
"@memberjunction/ng-list-management": "5.40.0",
|
|
131
|
+
"@memberjunction/ng-map-view": "5.40.0",
|
|
132
|
+
"@memberjunction/ng-markdown": "5.40.0",
|
|
133
|
+
"@memberjunction/ng-notifications": "5.40.0",
|
|
134
|
+
"@memberjunction/ng-query-viewer": "5.40.0",
|
|
135
|
+
"@memberjunction/ng-base-forms": "5.40.0",
|
|
136
|
+
"@memberjunction/ng-react": "5.40.0",
|
|
137
|
+
"@memberjunction/ng-resource-permissions": "5.40.0",
|
|
138
|
+
"@memberjunction/ng-scheduling": "5.40.0",
|
|
139
|
+
"@memberjunction/ng-search": "5.40.0",
|
|
140
|
+
"@memberjunction/ng-shared": "5.40.0",
|
|
141
|
+
"@memberjunction/ng-shared-generic": "5.40.0",
|
|
142
|
+
"@memberjunction/ng-testing": "5.40.0",
|
|
143
|
+
"@memberjunction/ng-trees": "5.40.0",
|
|
144
|
+
"@memberjunction/ng-ui-components": "5.40.0",
|
|
145
|
+
"@memberjunction/ng-versions": "5.40.0",
|
|
146
|
+
"@memberjunction/ng-word-cloud": "5.40.0",
|
|
147
|
+
"@memberjunction/skip-types": "5.40.0",
|
|
148
|
+
"@memberjunction/templates-base-types": "5.40.0",
|
|
149
|
+
"@memberjunction/testing-engine-base": "5.40.0",
|
|
150
|
+
"ag-grid-angular": "^35.0.1",
|
|
151
|
+
"ag-grid-community": "^35.0.1",
|
|
150
152
|
"angular-split": "^20.0.0",
|
|
151
153
|
"codemirror": "^6.0.2",
|
|
152
154
|
"d3": "^7.8.5",
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import { EventEmitter, OnInit } from '@angular/core';
|
|
2
|
-
import { CompositeFilterDescriptor, FilterFieldInfo } from '@memberjunction/ng-filter-builder';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
/**
|
|
5
|
-
* FilterDialogComponent - Modal dialog for editing filters
|
|
6
|
-
*
|
|
7
|
-
* Provides a full-width editing experience for the filter builder,
|
|
8
|
-
* suitable for complex filter expressions.
|
|
9
|
-
*/
|
|
10
|
-
export declare class FilterDialogComponent implements OnInit {
|
|
11
|
-
/**
|
|
12
|
-
* Whether the dialog is open
|
|
13
|
-
*/
|
|
14
|
-
isOpen: boolean;
|
|
15
|
-
/**
|
|
16
|
-
* Available fields to filter on
|
|
17
|
-
*/
|
|
18
|
-
fields: FilterFieldInfo[];
|
|
19
|
-
/**
|
|
20
|
-
* Current filter state
|
|
21
|
-
*/
|
|
22
|
-
filter: CompositeFilterDescriptor;
|
|
23
|
-
/**
|
|
24
|
-
* Whether the filter builder is disabled (read-only mode)
|
|
25
|
-
*/
|
|
26
|
-
disabled: boolean;
|
|
27
|
-
/**
|
|
28
|
-
* Emitted when the dialog should close
|
|
29
|
-
*/
|
|
30
|
-
close: EventEmitter<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Emitted when the filter is applied
|
|
33
|
-
*/
|
|
34
|
-
apply: EventEmitter<CompositeFilterDescriptor>;
|
|
35
|
-
/**
|
|
36
|
-
* Internal working copy of the filter
|
|
37
|
-
*/
|
|
38
|
-
workingFilter: CompositeFilterDescriptor;
|
|
39
|
-
/**
|
|
40
|
-
* Handle Escape key to close dialog
|
|
41
|
-
*/
|
|
42
|
-
handleEscape(): void;
|
|
43
|
-
ngOnInit(): void;
|
|
44
|
-
/**
|
|
45
|
-
* Initialize working filter when input changes
|
|
46
|
-
*/
|
|
47
|
-
ngOnChanges(): void;
|
|
48
|
-
/**
|
|
49
|
-
* Create a working copy of the filter
|
|
50
|
-
*/
|
|
51
|
-
private initializeWorkingFilter;
|
|
52
|
-
/**
|
|
53
|
-
* Handle filter changes from the filter builder
|
|
54
|
-
*/
|
|
55
|
-
onFilterChange(filter: CompositeFilterDescriptor): void;
|
|
56
|
-
/**
|
|
57
|
-
* Apply the filter and close
|
|
58
|
-
*/
|
|
59
|
-
onApply(): void;
|
|
60
|
-
/**
|
|
61
|
-
* Cancel and close without saving
|
|
62
|
-
*/
|
|
63
|
-
onCancel(): void;
|
|
64
|
-
/**
|
|
65
|
-
* Clear all filters
|
|
66
|
-
*/
|
|
67
|
-
onClear(): void;
|
|
68
|
-
/**
|
|
69
|
-
* Get filter count for display
|
|
70
|
-
*/
|
|
71
|
-
getFilterCount(): number;
|
|
72
|
-
/**
|
|
73
|
-
* Count filters recursively
|
|
74
|
-
*/
|
|
75
|
-
private countFilters;
|
|
76
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<FilterDialogComponent, never>;
|
|
77
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<FilterDialogComponent, "mj-filter-dialog", never, { "isOpen": { "alias": "isOpen"; "required": false; }; "fields": { "alias": "fields"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "close": "close"; "apply": "apply"; }, never, never, false, never>;
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=filter-dialog.component.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/DataExplorer/components/filter-dialog/filter-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAqB,MAAM,mCAAmC,CAAC;;AAElH;;;;;GAKG;AACH,qBAMa,qBAAsB,YAAW,MAAM;IAClD;;OAEG;IACM,MAAM,EAAE,OAAO,CAAS;IAEjC;;OAEG;IACM,MAAM,EAAE,eAAe,EAAE,CAAM;IAExC;;OAEG;IACM,MAAM,EAAE,yBAAyB,CAAuB;IAEjE;;OAEG;IACM,QAAQ,EAAE,OAAO,CAAS;IAEnC;;OAEG;IACO,KAAK,qBAA4B;IAE3C;;OAEG;IACO,KAAK,0CAAiD;IAEhE;;OAEG;IACI,aAAa,EAAE,yBAAyB,CAAuB;IAEtE;;OAEG;IAEH,YAAY,IAAI,IAAI;IAMpB,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAK/B;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI;IAIvD;;OAEG;IACH,OAAO,IAAI,IAAI;IAKf;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,OAAO,CAAC,YAAY;yCA1GT,qBAAqB;2CAArB,qBAAqB;CAqHjC"}
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
|
|
2
|
-
import { createEmptyFilter } from '@memberjunction/ng-filter-builder';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@memberjunction/ng-filter-builder";
|
|
5
|
-
const _c0 = () => ({ showClearButton: false, applyOnChange: true });
|
|
6
|
-
function FilterDialogComponent_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
7
|
-
i0.ɵɵelementStart(0, "span", 5);
|
|
8
|
-
i0.ɵɵtext(1);
|
|
9
|
-
i0.ɵɵelementEnd();
|
|
10
|
-
} if (rf & 2) {
|
|
11
|
-
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
12
|
-
i0.ɵɵadvance();
|
|
13
|
-
i0.ɵɵtextInterpolate(ctx_r1.getFilterCount());
|
|
14
|
-
} }
|
|
15
|
-
function FilterDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
-
const _r1 = i0.ɵɵgetCurrentView();
|
|
17
|
-
i0.ɵɵelementStart(0, "div", 0);
|
|
18
|
-
i0.ɵɵlistener("click", function FilterDialogComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
19
|
-
i0.ɵɵelementEnd();
|
|
20
|
-
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2)(3, "div", 3);
|
|
21
|
-
i0.ɵɵelement(4, "i", 4);
|
|
22
|
-
i0.ɵɵelementStart(5, "span");
|
|
23
|
-
i0.ɵɵtext(6, "Edit Filters");
|
|
24
|
-
i0.ɵɵelementEnd();
|
|
25
|
-
i0.ɵɵconditionalCreate(7, FilterDialogComponent_Conditional_0_Conditional_7_Template, 2, 1, "span", 5);
|
|
26
|
-
i0.ɵɵelementEnd();
|
|
27
|
-
i0.ɵɵelementStart(8, "button", 6);
|
|
28
|
-
i0.ɵɵlistener("click", function FilterDialogComponent_Conditional_0_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
29
|
-
i0.ɵɵelement(9, "i", 7);
|
|
30
|
-
i0.ɵɵelementEnd()();
|
|
31
|
-
i0.ɵɵelementStart(10, "div", 8)(11, "mj-filter-builder", 9);
|
|
32
|
-
i0.ɵɵlistener("filterChange", function FilterDialogComponent_Conditional_0_Template_mj_filter_builder_filterChange_11_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFilterChange($event)); });
|
|
33
|
-
i0.ɵɵelementEnd()();
|
|
34
|
-
i0.ɵɵelementStart(12, "div", 10)(13, "button", 11);
|
|
35
|
-
i0.ɵɵlistener("click", function FilterDialogComponent_Conditional_0_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onClear()); });
|
|
36
|
-
i0.ɵɵelement(14, "i", 12);
|
|
37
|
-
i0.ɵɵtext(15, " Clear All ");
|
|
38
|
-
i0.ɵɵelementEnd();
|
|
39
|
-
i0.ɵɵelementStart(16, "div", 13)(17, "button", 14);
|
|
40
|
-
i0.ɵɵlistener("click", function FilterDialogComponent_Conditional_0_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
|
|
41
|
-
i0.ɵɵtext(18, " Cancel ");
|
|
42
|
-
i0.ɵɵelementEnd();
|
|
43
|
-
i0.ɵɵelementStart(19, "button", 15);
|
|
44
|
-
i0.ɵɵlistener("click", function FilterDialogComponent_Conditional_0_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onApply()); });
|
|
45
|
-
i0.ɵɵelement(20, "i", 16);
|
|
46
|
-
i0.ɵɵtext(21, " Apply Filters ");
|
|
47
|
-
i0.ɵɵelementEnd()()()();
|
|
48
|
-
} if (rf & 2) {
|
|
49
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
50
|
-
i0.ɵɵadvance(7);
|
|
51
|
-
i0.ɵɵconditional(ctx_r1.getFilterCount() > 0 ? 7 : -1);
|
|
52
|
-
i0.ɵɵadvance(4);
|
|
53
|
-
i0.ɵɵproperty("fields", ctx_r1.fields)("filter", ctx_r1.workingFilter)("disabled", ctx_r1.disabled)("showSummary", true)("config", i0.ɵɵpureFunction0(8, _c0));
|
|
54
|
-
i0.ɵɵadvance(2);
|
|
55
|
-
i0.ɵɵproperty("disabled", ctx_r1.disabled || ctx_r1.getFilterCount() === 0);
|
|
56
|
-
i0.ɵɵadvance(6);
|
|
57
|
-
i0.ɵɵproperty("disabled", ctx_r1.disabled);
|
|
58
|
-
} }
|
|
59
|
-
/**
|
|
60
|
-
* FilterDialogComponent - Modal dialog for editing filters
|
|
61
|
-
*
|
|
62
|
-
* Provides a full-width editing experience for the filter builder,
|
|
63
|
-
* suitable for complex filter expressions.
|
|
64
|
-
*/
|
|
65
|
-
export class FilterDialogComponent {
|
|
66
|
-
/**
|
|
67
|
-
* Whether the dialog is open
|
|
68
|
-
*/
|
|
69
|
-
isOpen = false;
|
|
70
|
-
/**
|
|
71
|
-
* Available fields to filter on
|
|
72
|
-
*/
|
|
73
|
-
fields = [];
|
|
74
|
-
/**
|
|
75
|
-
* Current filter state
|
|
76
|
-
*/
|
|
77
|
-
filter = createEmptyFilter();
|
|
78
|
-
/**
|
|
79
|
-
* Whether the filter builder is disabled (read-only mode)
|
|
80
|
-
*/
|
|
81
|
-
disabled = false;
|
|
82
|
-
/**
|
|
83
|
-
* Emitted when the dialog should close
|
|
84
|
-
*/
|
|
85
|
-
close = new EventEmitter();
|
|
86
|
-
/**
|
|
87
|
-
* Emitted when the filter is applied
|
|
88
|
-
*/
|
|
89
|
-
apply = new EventEmitter();
|
|
90
|
-
/**
|
|
91
|
-
* Internal working copy of the filter
|
|
92
|
-
*/
|
|
93
|
-
workingFilter = createEmptyFilter();
|
|
94
|
-
/**
|
|
95
|
-
* Handle Escape key to close dialog
|
|
96
|
-
*/
|
|
97
|
-
handleEscape() {
|
|
98
|
-
if (this.isOpen) {
|
|
99
|
-
this.onCancel();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
ngOnInit() {
|
|
103
|
-
this.initializeWorkingFilter();
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Initialize working filter when input changes
|
|
107
|
-
*/
|
|
108
|
-
ngOnChanges() {
|
|
109
|
-
if (this.isOpen) {
|
|
110
|
-
this.initializeWorkingFilter();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Create a working copy of the filter
|
|
115
|
-
*/
|
|
116
|
-
initializeWorkingFilter() {
|
|
117
|
-
// Deep clone to avoid mutating the original
|
|
118
|
-
this.workingFilter = JSON.parse(JSON.stringify(this.filter || createEmptyFilter()));
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Handle filter changes from the filter builder
|
|
122
|
-
*/
|
|
123
|
-
onFilterChange(filter) {
|
|
124
|
-
this.workingFilter = filter;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Apply the filter and close
|
|
128
|
-
*/
|
|
129
|
-
onApply() {
|
|
130
|
-
this.apply.emit(this.workingFilter);
|
|
131
|
-
this.close.emit();
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Cancel and close without saving
|
|
135
|
-
*/
|
|
136
|
-
onCancel() {
|
|
137
|
-
this.close.emit();
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Clear all filters
|
|
141
|
-
*/
|
|
142
|
-
onClear() {
|
|
143
|
-
this.workingFilter = createEmptyFilter();
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Get filter count for display
|
|
147
|
-
*/
|
|
148
|
-
getFilterCount() {
|
|
149
|
-
return this.countFilters(this.workingFilter);
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Count filters recursively
|
|
153
|
-
*/
|
|
154
|
-
countFilters(filter) {
|
|
155
|
-
let count = 0;
|
|
156
|
-
for (const item of filter.filters || []) {
|
|
157
|
-
if ('logic' in item && 'filters' in item) {
|
|
158
|
-
count += this.countFilters(item);
|
|
159
|
-
}
|
|
160
|
-
else if ('field' in item) {
|
|
161
|
-
count++;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return count;
|
|
165
|
-
}
|
|
166
|
-
static ɵfac = function FilterDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FilterDialogComponent)(); };
|
|
167
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: FilterDialogComponent, selectors: [["mj-filter-dialog"]], hostBindings: function FilterDialogComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
168
|
-
i0.ɵɵlistener("keydown.escape", function FilterDialogComponent_keydown_escape_HostBindingHandler() { return ctx.handleEscape(); }, i0.ɵɵresolveDocument);
|
|
169
|
-
} }, inputs: { isOpen: "isOpen", fields: "fields", filter: "filter", disabled: "disabled" }, outputs: { close: "close", apply: "apply" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[1, "dialog-backdrop", 3, "click"], [1, "filter-dialog"], [1, "dialog-header"], [1, "header-title"], [1, "fa-solid", "fa-filter"], [1, "filter-badge"], ["title", "Close", 1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "dialog-content"], [3, "filterChange", "fields", "filter", "disabled", "showSummary", "config"], [1, "dialog-footer"], [1, "footer-btn", "clear-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-eraser"], [1, "footer-right"], [1, "footer-btn", "cancel-btn", 3, "click"], [1, "footer-btn", "apply-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-check"]], template: function FilterDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
170
|
-
i0.ɵɵconditionalCreate(0, FilterDialogComponent_Conditional_0_Template, 22, 9);
|
|
171
|
-
} if (rf & 2) {
|
|
172
|
-
i0.ɵɵconditional(ctx.isOpen ? 0 : -1);
|
|
173
|
-
} }, dependencies: [i1.FilterBuilderComponent], styles: ["\n\n.dialog-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 2000; \n\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease;\n}\n\n\n\n.filter-dialog[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 90%;\n max-width: 800px;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n z-index: 2001; \n\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_slideIn 0.2s ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes _ngcontent-%COMP%_slideIn {\n from {\n opacity: 0;\n transform: translate(-50%, -48%);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%);\n }\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.header-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.header-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.filter-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 12px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 6px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 16px;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n\n\n.dialog-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n min-height: 200px;\n}\n\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 0 0 12px 12px;\n flex-shrink: 0;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.footer-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 16px;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.footer-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.footer-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.clear-btn[_ngcontent-%COMP%] {\n background: transparent;\n color: var(--mj-status-error);\n border: 1px solid var(--mj-border-default);\n}\n\n.clear-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n}\n\n.cancel-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n}\n\n.cancel-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.apply-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.apply-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n\n\n@media (max-width: 600px) {\n .filter-dialog[_ngcontent-%COMP%] {\n width: 95%;\n max-height: 90vh;\n border-radius: 8px;\n }\n\n .dialog-header[_ngcontent-%COMP%] {\n padding: 14px 16px;\n }\n\n .header-title[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .dialog-content[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .dialog-footer[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n padding: 14px 16px;\n }\n\n .footer-right[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: stretch;\n }\n\n .footer-btn[_ngcontent-%COMP%] {\n flex: 1;\n justify-content: center;\n }\n\n .clear-btn[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n }\n}"] });
|
|
174
|
-
}
|
|
175
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FilterDialogComponent, [{
|
|
176
|
-
type: Component,
|
|
177
|
-
args: [{ standalone: false, selector: 'mj-filter-dialog', template: "@if (isOpen) {\n <!-- Backdrop -->\n <div class=\"dialog-backdrop\" (click)=\"onCancel()\"></div>\n\n <!-- Dialog -->\n <div class=\"filter-dialog\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>Edit Filters</span>\n @if (getFilterCount() > 0) {\n <span class=\"filter-badge\">{{ getFilterCount() }}</span>\n }\n </div>\n <button class=\"close-btn\" (click)=\"onCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"dialog-content\">\n <mj-filter-builder\n [fields]=\"fields\"\n [filter]=\"workingFilter\"\n [disabled]=\"disabled\"\n [showSummary]=\"true\"\n [config]=\"{ showClearButton: false, applyOnChange: true }\"\n (filterChange)=\"onFilterChange($event)\">\n </mj-filter-builder>\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <button class=\"footer-btn clear-btn\" (click)=\"onClear()\" [disabled]=\"disabled || getFilterCount() === 0\">\n <i class=\"fa-solid fa-eraser\"></i>\n Clear All\n </button>\n <div class=\"footer-right\">\n <button class=\"footer-btn cancel-btn\" (click)=\"onCancel()\">\n Cancel\n </button>\n <button class=\"footer-btn apply-btn\" (click)=\"onApply()\" [disabled]=\"disabled\">\n <i class=\"fa-solid fa-check\"></i>\n Apply Filters\n </button>\n </div>\n </div>\n </div>\n}\n", styles: ["/* Backdrop */\n.dialog-backdrop {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-bg-overlay);\n z-index: 2000; /* Above view-config-panel (1201) and Leaflet map (1000) */\n animation: fadeIn 0.15s ease;\n}\n\n/* Dialog */\n.filter-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 90%;\n max-width: 800px;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\n z-index: 2001; /* Above backdrop (2000) */\n display: flex;\n flex-direction: column;\n animation: slideIn 0.2s ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translate(-50%, -48%);\n }\n to {\n opacity: 1;\n transform: translate(-50%, -50%);\n }\n}\n\n/* Header */\n.dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.header-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.header-title i {\n color: var(--mj-brand-primary);\n}\n\n.filter-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n font-size: 12px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.close-btn {\n width: 36px;\n height: 36px;\n border: none;\n background: transparent;\n border-radius: 6px;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 16px;\n transition: all 0.15s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.close-btn:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n/* Content */\n.dialog-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n min-height: 200px;\n}\n\n/* Footer */\n.dialog-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n border-radius: 0 0 12px 12px;\n flex-shrink: 0;\n}\n\n.footer-right {\n display: flex;\n gap: 8px;\n}\n\n.footer-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 10px 16px;\n border: none;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.footer-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.footer-btn i {\n font-size: 12px;\n}\n\n.clear-btn {\n background: transparent;\n color: var(--mj-status-error);\n border: 1px solid var(--mj-border-default);\n}\n\n.clear-btn:hover:not(:disabled) {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error);\n}\n\n.cancel-btn {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n}\n\n.cancel-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.apply-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.apply-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n/* Responsive */\n@media (max-width: 600px) {\n .filter-dialog {\n width: 95%;\n max-height: 90vh;\n border-radius: 8px;\n }\n\n .dialog-header {\n padding: 14px 16px;\n }\n\n .header-title {\n font-size: 16px;\n }\n\n .dialog-content {\n padding: 16px;\n }\n\n .dialog-footer {\n flex-direction: column;\n gap: 12px;\n padding: 14px 16px;\n }\n\n .footer-right {\n width: 100%;\n justify-content: stretch;\n }\n\n .footer-btn {\n flex: 1;\n justify-content: center;\n }\n\n .clear-btn {\n width: 100%;\n justify-content: center;\n }\n}\n"] }]
|
|
178
|
-
}], null, { isOpen: [{
|
|
179
|
-
type: Input
|
|
180
|
-
}], fields: [{
|
|
181
|
-
type: Input
|
|
182
|
-
}], filter: [{
|
|
183
|
-
type: Input
|
|
184
|
-
}], disabled: [{
|
|
185
|
-
type: Input
|
|
186
|
-
}], close: [{
|
|
187
|
-
type: Output
|
|
188
|
-
}], apply: [{
|
|
189
|
-
type: Output
|
|
190
|
-
}], handleEscape: [{
|
|
191
|
-
type: HostListener,
|
|
192
|
-
args: ['document:keydown.escape']
|
|
193
|
-
}] }); })();
|
|
194
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FilterDialogComponent, { className: "FilterDialogComponent", filePath: "src/DataExplorer/components/filter-dialog/filter-dialog.component.ts", lineNumber: 16 }); })();
|
|
195
|
-
//# sourceMappingURL=filter-dialog.component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-dialog.component.js","sourceRoot":"","sources":["../../../../src/DataExplorer/components/filter-dialog/filter-dialog.component.ts","../../../../src/DataExplorer/components/filter-dialog/filter-dialog.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, HostListener } from '@angular/core';\nimport { CompositeFilterDescriptor, FilterFieldInfo, createEmptyFilter } from '@memberjunction/ng-filter-builder';\n\n/**\n * FilterDialogComponent - Modal dialog for editing filters\n *\n * Provides a full-width editing experience for the filter builder,\n * suitable for complex filter expressions.\n */\n@Component({\n standalone: false,\n selector: 'mj-filter-dialog',\n templateUrl: './filter-dialog.component.html',\n styleUrls: ['./filter-dialog.component.css']\n})\nexport class FilterDialogComponent implements OnInit {\n /**\n * Whether the dialog is open\n */\n @Input() isOpen: boolean = false;\n\n /**\n * Available fields to filter on\n */\n @Input() fields: FilterFieldInfo[] = [];\n\n /**\n * Current filter state\n */\n @Input() filter: CompositeFilterDescriptor = createEmptyFilter();\n\n /**\n * Whether the filter builder is disabled (read-only mode)\n */\n @Input() disabled: boolean = false;\n\n /**\n * Emitted when the dialog should close\n */\n @Output() close = new EventEmitter<void>();\n\n /**\n * Emitted when the filter is applied\n */\n @Output() apply = new EventEmitter<CompositeFilterDescriptor>();\n\n /**\n * Internal working copy of the filter\n */\n public workingFilter: CompositeFilterDescriptor = createEmptyFilter();\n\n /**\n * Handle Escape key to close dialog\n */\n @HostListener('document:keydown.escape')\n handleEscape(): void {\n if (this.isOpen) {\n this.onCancel();\n }\n }\n\n ngOnInit(): void {\n this.initializeWorkingFilter();\n }\n\n /**\n * Initialize working filter when input changes\n */\n ngOnChanges(): void {\n if (this.isOpen) {\n this.initializeWorkingFilter();\n }\n }\n\n /**\n * Create a working copy of the filter\n */\n private initializeWorkingFilter(): void {\n // Deep clone to avoid mutating the original\n this.workingFilter = JSON.parse(JSON.stringify(this.filter || createEmptyFilter()));\n }\n\n /**\n * Handle filter changes from the filter builder\n */\n onFilterChange(filter: CompositeFilterDescriptor): void {\n this.workingFilter = filter;\n }\n\n /**\n * Apply the filter and close\n */\n onApply(): void {\n this.apply.emit(this.workingFilter);\n this.close.emit();\n }\n\n /**\n * Cancel and close without saving\n */\n onCancel(): void {\n this.close.emit();\n }\n\n /**\n * Clear all filters\n */\n onClear(): void {\n this.workingFilter = createEmptyFilter();\n }\n\n /**\n * Get filter count for display\n */\n getFilterCount(): number {\n return this.countFilters(this.workingFilter);\n }\n\n /**\n * Count filters recursively\n */\n private countFilters(filter: CompositeFilterDescriptor): number {\n let count = 0;\n for (const item of filter.filters || []) {\n if ('logic' in item && 'filters' in item) {\n count += this.countFilters(item as CompositeFilterDescriptor);\n } else if ('field' in item) {\n count++;\n }\n }\n return count;\n }\n}\n","@if (isOpen) {\n <!-- Backdrop -->\n <div class=\"dialog-backdrop\" (click)=\"onCancel()\"></div>\n\n <!-- Dialog -->\n <div class=\"filter-dialog\">\n <!-- Header -->\n <div class=\"dialog-header\">\n <div class=\"header-title\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>Edit Filters</span>\n @if (getFilterCount() > 0) {\n <span class=\"filter-badge\">{{ getFilterCount() }}</span>\n }\n </div>\n <button class=\"close-btn\" (click)=\"onCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"dialog-content\">\n <mj-filter-builder\n [fields]=\"fields\"\n [filter]=\"workingFilter\"\n [disabled]=\"disabled\"\n [showSummary]=\"true\"\n [config]=\"{ showClearButton: false, applyOnChange: true }\"\n (filterChange)=\"onFilterChange($event)\">\n </mj-filter-builder>\n </div>\n\n <!-- Footer -->\n <div class=\"dialog-footer\">\n <button class=\"footer-btn clear-btn\" (click)=\"onClear()\" [disabled]=\"disabled || getFilterCount() === 0\">\n <i class=\"fa-solid fa-eraser\"></i>\n Clear All\n </button>\n <div class=\"footer-right\">\n <button class=\"footer-btn cancel-btn\" (click)=\"onCancel()\">\n Cancel\n </button>\n <button class=\"footer-btn apply-btn\" (click)=\"onApply()\" [disabled]=\"disabled\">\n <i class=\"fa-solid fa-check\"></i>\n Apply Filters\n </button>\n </div>\n </div>\n </div>\n}\n"]}
|