@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
|
@@ -0,0 +1,908 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Classify · Guided source setup wizard.
|
|
3
|
+
*
|
|
4
|
+
* A multi-step `mj-dialog` that walks an operator through standing up a new
|
|
5
|
+
* content source: Source Type → Entity → Entity Document → Content Type →
|
|
6
|
+
* Taxonomy Strategy → Domain Context → Review & Create. Steps whose prerequisite
|
|
7
|
+
* already exists (e.g. a content type is already configured, or the chosen
|
|
8
|
+
* entity already has an Entity Document) are auto-skipped.
|
|
9
|
+
*
|
|
10
|
+
* The wizard reuses the inline Entity Document create and the seed-taxonomy
|
|
11
|
+
* review components, and the domain-context fields. It owns no business logic
|
|
12
|
+
* beyond assembling the records — persistence is via the entity API
|
|
13
|
+
* (`GetEntityObject` + `Save()` with result checking) threaded through
|
|
14
|
+
* `ProviderToUse`.
|
|
15
|
+
*/
|
|
16
|
+
import { Component, ChangeDetectorRef, EventEmitter, Output, inject } from '@angular/core';
|
|
17
|
+
import { UUIDsEqual } from '@memberjunction/global';
|
|
18
|
+
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
19
|
+
import { MJNotificationService } from '@memberjunction/ng-notifications';
|
|
20
|
+
import { KnowledgeHubMetadataEngine, } from '@memberjunction/core-entities';
|
|
21
|
+
import * as i0 from "@angular/core";
|
|
22
|
+
import * as i1 from "@angular/forms";
|
|
23
|
+
import * as i2 from "@memberjunction/ng-ui-components";
|
|
24
|
+
import * as i3 from "../components/classify-seed-taxonomy.component";
|
|
25
|
+
const _forTrack0 = ($index, $item) => $item.ID;
|
|
26
|
+
const _forTrack1 = ($index, $item) => $item.Name;
|
|
27
|
+
function ClassifySetupWizardComponent_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "span", 14);
|
|
29
|
+
i0.ɵɵtext(2);
|
|
30
|
+
i0.ɵɵelementEnd()();
|
|
31
|
+
} if (rf & 2) {
|
|
32
|
+
const ɵ$index_7_r1 = ctx.$index;
|
|
33
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
34
|
+
i0.ɵɵclassProp("active", ɵ$index_7_r1 === ctx_r1.StepIndex)("done", ɵ$index_7_r1 < ctx_r1.StepIndex);
|
|
35
|
+
i0.ɵɵadvance(2);
|
|
36
|
+
i0.ɵɵtextInterpolate(ɵ$index_7_r1 + 1);
|
|
37
|
+
} }
|
|
38
|
+
function ClassifySetupWizardComponent_Conditional_10_For_11_Template(rf, ctx) { if (rf & 1) {
|
|
39
|
+
i0.ɵɵelementStart(0, "option", 20);
|
|
40
|
+
i0.ɵɵtext(1);
|
|
41
|
+
i0.ɵɵelementEnd();
|
|
42
|
+
} if (rf & 2) {
|
|
43
|
+
const opt_r4 = ctx.$implicit;
|
|
44
|
+
i0.ɵɵproperty("value", opt_r4.ID);
|
|
45
|
+
i0.ɵɵadvance();
|
|
46
|
+
i0.ɵɵtextInterpolate(opt_r4.Name);
|
|
47
|
+
} }
|
|
48
|
+
function ClassifySetupWizardComponent_Conditional_10_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
50
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "label", 16);
|
|
51
|
+
i0.ɵɵtext(2, "URL (if applicable)");
|
|
52
|
+
i0.ɵɵelementEnd();
|
|
53
|
+
i0.ɵɵelementStart(3, "input", 21);
|
|
54
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_10_Conditional_12_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.SourceURL, $event) || (ctx_r1.SourceURL = $event); return i0.ɵɵresetView($event); });
|
|
55
|
+
i0.ɵɵelementEnd()();
|
|
56
|
+
} if (rf & 2) {
|
|
57
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
58
|
+
i0.ɵɵadvance(3);
|
|
59
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SourceURL);
|
|
60
|
+
} }
|
|
61
|
+
function ClassifySetupWizardComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
63
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "label", 16);
|
|
64
|
+
i0.ɵɵtext(2, "Source name");
|
|
65
|
+
i0.ɵɵelementEnd();
|
|
66
|
+
i0.ɵɵelementStart(3, "input", 17);
|
|
67
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_10_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.SourceName, $event) || (ctx_r1.SourceName = $event); return i0.ɵɵresetView($event); });
|
|
68
|
+
i0.ɵɵelementEnd()();
|
|
69
|
+
i0.ɵɵelementStart(4, "div", 15)(5, "label", 16);
|
|
70
|
+
i0.ɵɵtext(6, "Source type");
|
|
71
|
+
i0.ɵɵelementEnd();
|
|
72
|
+
i0.ɵɵelementStart(7, "select", 18);
|
|
73
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_10_Template_select_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.SourceTypeID, $event) || (ctx_r1.SourceTypeID = $event); return i0.ɵɵresetView($event); });
|
|
74
|
+
i0.ɵɵelementStart(8, "option", 19);
|
|
75
|
+
i0.ɵɵtext(9, "Select source type\u2026");
|
|
76
|
+
i0.ɵɵelementEnd();
|
|
77
|
+
i0.ɵɵrepeaterCreate(10, ClassifySetupWizardComponent_Conditional_10_For_11_Template, 2, 2, "option", 20, _forTrack0);
|
|
78
|
+
i0.ɵɵelementEnd()();
|
|
79
|
+
i0.ɵɵconditionalCreate(12, ClassifySetupWizardComponent_Conditional_10_Conditional_12_Template, 4, 1, "div", 15);
|
|
80
|
+
} if (rf & 2) {
|
|
81
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
82
|
+
i0.ɵɵadvance(3);
|
|
83
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SourceName);
|
|
84
|
+
i0.ɵɵadvance(4);
|
|
85
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SourceTypeID);
|
|
86
|
+
i0.ɵɵadvance(3);
|
|
87
|
+
i0.ɵɵrepeater(ctx_r1.SourceTypeOptions);
|
|
88
|
+
i0.ɵɵadvance(2);
|
|
89
|
+
i0.ɵɵconditional(!ctx_r1.IsEntitySource && ctx_r1.SourceTypeID ? 12 : -1);
|
|
90
|
+
} }
|
|
91
|
+
function ClassifySetupWizardComponent_Conditional_11_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
i0.ɵɵelementStart(0, "option", 20);
|
|
93
|
+
i0.ɵɵtext(1);
|
|
94
|
+
i0.ɵɵelementEnd();
|
|
95
|
+
} if (rf & 2) {
|
|
96
|
+
const opt_r7 = ctx.$implicit;
|
|
97
|
+
i0.ɵɵproperty("value", opt_r7.ID);
|
|
98
|
+
i0.ɵɵadvance();
|
|
99
|
+
i0.ɵɵtextInterpolate(opt_r7.Name);
|
|
100
|
+
} }
|
|
101
|
+
function ClassifySetupWizardComponent_Conditional_11_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
+
i0.ɵɵelementStart(0, "div", 22);
|
|
103
|
+
i0.ɵɵelement(1, "i", 23);
|
|
104
|
+
i0.ɵɵelementStart(2, "strong");
|
|
105
|
+
i0.ɵɵtext(3);
|
|
106
|
+
i0.ɵɵelementEnd();
|
|
107
|
+
i0.ɵɵtext(4, " already has an Entity Document \u2014 the next step is skipped. ");
|
|
108
|
+
i0.ɵɵelementEnd();
|
|
109
|
+
} if (rf & 2) {
|
|
110
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
111
|
+
i0.ɵɵadvance(3);
|
|
112
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedEntityName);
|
|
113
|
+
} }
|
|
114
|
+
function ClassifySetupWizardComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
115
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
116
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "label", 16);
|
|
117
|
+
i0.ɵɵtext(2, "Entity");
|
|
118
|
+
i0.ɵɵelementEnd();
|
|
119
|
+
i0.ɵɵelementStart(3, "select", 18);
|
|
120
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_11_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.EntityID, $event) || (ctx_r1.EntityID = $event); return i0.ɵɵresetView($event); });
|
|
121
|
+
i0.ɵɵelementStart(4, "option", 19);
|
|
122
|
+
i0.ɵɵtext(5, "Select entity\u2026");
|
|
123
|
+
i0.ɵɵelementEnd();
|
|
124
|
+
i0.ɵɵrepeaterCreate(6, ClassifySetupWizardComponent_Conditional_11_For_7_Template, 2, 2, "option", 20, _forTrack0);
|
|
125
|
+
i0.ɵɵelementEnd()();
|
|
126
|
+
i0.ɵɵconditionalCreate(8, ClassifySetupWizardComponent_Conditional_11_Conditional_8_Template, 5, 1, "div", 22);
|
|
127
|
+
} if (rf & 2) {
|
|
128
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
129
|
+
i0.ɵɵadvance(3);
|
|
130
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EntityID);
|
|
131
|
+
i0.ɵɵadvance(3);
|
|
132
|
+
i0.ɵɵrepeater(ctx_r1.EntityOptions);
|
|
133
|
+
i0.ɵɵadvance(2);
|
|
134
|
+
i0.ɵɵconditional(ctx_r1.EntityID && !ctx_r1.SelectedEntityHasNoDocument ? 8 : -1);
|
|
135
|
+
} }
|
|
136
|
+
function ClassifySetupWizardComponent_Conditional_12_For_14_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
138
|
+
i0.ɵɵelementStart(0, "label", 28)(1, "input", 30);
|
|
139
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_12_For_14_Template_input_ngModelChange_1_listener($event) { const f_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntityDocSelectedFields[f_r10.Name], $event) || (ctx_r1.NewEntityDocSelectedFields[f_r10.Name] = $event); return i0.ɵɵresetView($event); });
|
|
140
|
+
i0.ɵɵelementEnd();
|
|
141
|
+
i0.ɵɵelementStart(2, "span");
|
|
142
|
+
i0.ɵɵtext(3);
|
|
143
|
+
i0.ɵɵelementEnd()();
|
|
144
|
+
} if (rf & 2) {
|
|
145
|
+
const f_r10 = ctx.$implicit;
|
|
146
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
147
|
+
i0.ɵɵadvance();
|
|
148
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewEntityDocSelectedFields[f_r10.Name]);
|
|
149
|
+
i0.ɵɵadvance(2);
|
|
150
|
+
i0.ɵɵtextInterpolate(f_r10.DisplayName);
|
|
151
|
+
} }
|
|
152
|
+
function ClassifySetupWizardComponent_Conditional_12_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
153
|
+
i0.ɵɵelement(0, "i", 31);
|
|
154
|
+
i0.ɵɵtext(1, " Creating\u2026 ");
|
|
155
|
+
} }
|
|
156
|
+
function ClassifySetupWizardComponent_Conditional_12_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
157
|
+
i0.ɵɵelement(0, "i", 32);
|
|
158
|
+
i0.ɵɵtext(1, " Create Entity Document ");
|
|
159
|
+
} }
|
|
160
|
+
function ClassifySetupWizardComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
161
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
162
|
+
i0.ɵɵelementStart(0, "div", 24);
|
|
163
|
+
i0.ɵɵelement(1, "i", 25);
|
|
164
|
+
i0.ɵɵelementStart(2, "strong");
|
|
165
|
+
i0.ɵɵtext(3);
|
|
166
|
+
i0.ɵɵelementEnd();
|
|
167
|
+
i0.ɵɵtext(4, " has no Entity Document. Create one to continue. ");
|
|
168
|
+
i0.ɵɵelementEnd();
|
|
169
|
+
i0.ɵɵelementStart(5, "div", 15)(6, "label", 16);
|
|
170
|
+
i0.ɵɵtext(7, "Document name");
|
|
171
|
+
i0.ɵɵelementEnd();
|
|
172
|
+
i0.ɵɵelementStart(8, "input", 26);
|
|
173
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_12_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntityDocName, $event) || (ctx_r1.NewEntityDocName = $event); return i0.ɵɵresetView($event); });
|
|
174
|
+
i0.ɵɵelementEnd()();
|
|
175
|
+
i0.ɵɵelementStart(9, "div", 15)(10, "label", 16);
|
|
176
|
+
i0.ɵɵtext(11);
|
|
177
|
+
i0.ɵɵelementEnd();
|
|
178
|
+
i0.ɵɵelementStart(12, "div", 27);
|
|
179
|
+
i0.ɵɵrepeaterCreate(13, ClassifySetupWizardComponent_Conditional_12_For_14_Template, 4, 2, "label", 28, _forTrack1);
|
|
180
|
+
i0.ɵɵelementEnd()();
|
|
181
|
+
i0.ɵɵelementStart(15, "button", 29);
|
|
182
|
+
i0.ɵɵlistener("click", function ClassifySetupWizardComponent_Conditional_12_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CreateEntityDocument()); });
|
|
183
|
+
i0.ɵɵconditionalCreate(16, ClassifySetupWizardComponent_Conditional_12_Conditional_16_Template, 2, 0)(17, ClassifySetupWizardComponent_Conditional_12_Conditional_17_Template, 2, 0);
|
|
184
|
+
i0.ɵɵelementEnd();
|
|
185
|
+
} if (rf & 2) {
|
|
186
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
187
|
+
i0.ɵɵadvance(3);
|
|
188
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedEntityName);
|
|
189
|
+
i0.ɵɵadvance(5);
|
|
190
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewEntityDocName);
|
|
191
|
+
i0.ɵɵadvance(3);
|
|
192
|
+
i0.ɵɵtextInterpolate1("Fields to include (", ctx_r1.SelectedEntityDocFieldCount, " selected)");
|
|
193
|
+
i0.ɵɵadvance(2);
|
|
194
|
+
i0.ɵɵrepeater(ctx_r1.SelectedEntityFields);
|
|
195
|
+
i0.ɵɵadvance(2);
|
|
196
|
+
i0.ɵɵproperty("disabled", ctx_r1.EntityDocSaving);
|
|
197
|
+
i0.ɵɵadvance();
|
|
198
|
+
i0.ɵɵconditional(ctx_r1.EntityDocSaving ? 16 : 17);
|
|
199
|
+
} }
|
|
200
|
+
function ClassifySetupWizardComponent_Conditional_13_Conditional_0_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
201
|
+
i0.ɵɵelementStart(0, "option", 20);
|
|
202
|
+
i0.ɵɵtext(1);
|
|
203
|
+
i0.ɵɵelementEnd();
|
|
204
|
+
} if (rf & 2) {
|
|
205
|
+
const opt_r12 = ctx.$implicit;
|
|
206
|
+
i0.ɵɵproperty("value", opt_r12.ID);
|
|
207
|
+
i0.ɵɵadvance();
|
|
208
|
+
i0.ɵɵtextInterpolate(opt_r12.Name);
|
|
209
|
+
} }
|
|
210
|
+
function ClassifySetupWizardComponent_Conditional_13_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
211
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
212
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "label", 16);
|
|
213
|
+
i0.ɵɵtext(2, "Content type");
|
|
214
|
+
i0.ɵɵelementEnd();
|
|
215
|
+
i0.ɵɵelementStart(3, "select", 18);
|
|
216
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_13_Conditional_0_Template_select_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ContentTypeID, $event) || (ctx_r1.ContentTypeID = $event); return i0.ɵɵresetView($event); });
|
|
217
|
+
i0.ɵɵelementStart(4, "option", 19);
|
|
218
|
+
i0.ɵɵtext(5, "Select content type\u2026");
|
|
219
|
+
i0.ɵɵelementEnd();
|
|
220
|
+
i0.ɵɵrepeaterCreate(6, ClassifySetupWizardComponent_Conditional_13_Conditional_0_For_7_Template, 2, 2, "option", 20, _forTrack0);
|
|
221
|
+
i0.ɵɵelementEnd()();
|
|
222
|
+
} if (rf & 2) {
|
|
223
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
224
|
+
i0.ɵɵadvance(3);
|
|
225
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ContentTypeID);
|
|
226
|
+
i0.ɵɵadvance(3);
|
|
227
|
+
i0.ɵɵrepeater(ctx_r1.ContentTypeOptions);
|
|
228
|
+
} }
|
|
229
|
+
function ClassifySetupWizardComponent_Conditional_13_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
230
|
+
i0.ɵɵelementStart(0, "div", 24);
|
|
231
|
+
i0.ɵɵelement(1, "i", 33);
|
|
232
|
+
i0.ɵɵtext(2, " No content types exist yet. Create one from the Content Types tab, then return to this wizard. ");
|
|
233
|
+
i0.ɵɵelementEnd();
|
|
234
|
+
} }
|
|
235
|
+
function ClassifySetupWizardComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
236
|
+
i0.ɵɵconditionalCreate(0, ClassifySetupWizardComponent_Conditional_13_Conditional_0_Template, 8, 1, "div", 15)(1, ClassifySetupWizardComponent_Conditional_13_Conditional_1_Template, 3, 0, "div", 24);
|
|
237
|
+
} if (rf & 2) {
|
|
238
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
239
|
+
i0.ɵɵconditional(ctx_r1.HasAnyContentType ? 0 : 1);
|
|
240
|
+
} }
|
|
241
|
+
function ClassifySetupWizardComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
242
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
243
|
+
i0.ɵɵelementStart(0, "p", 34);
|
|
244
|
+
i0.ɵɵtext(1, " Optionally generate a starter tag taxonomy by sampling this source's content. You can skip this and refine the taxonomy later. ");
|
|
245
|
+
i0.ɵɵelementEnd();
|
|
246
|
+
i0.ɵɵelementStart(2, "classify-seed-taxonomy", 35);
|
|
247
|
+
i0.ɵɵlistener("Accepted", function ClassifySetupWizardComponent_Conditional_14_Template_classify_seed_taxonomy_Accepted_2_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnTaxonomyAccepted($event)); });
|
|
248
|
+
i0.ɵɵelementEnd();
|
|
249
|
+
} if (rf & 2) {
|
|
250
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
251
|
+
i0.ɵɵadvance(2);
|
|
252
|
+
i0.ɵɵproperty("SourceID", ctx_r1.PendingSourceID)("Provider", ctx_r1.Provider);
|
|
253
|
+
} }
|
|
254
|
+
function ClassifySetupWizardComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
255
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
256
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "label", 16);
|
|
257
|
+
i0.ɵɵtext(2, "Source guidance");
|
|
258
|
+
i0.ɵɵelementEnd();
|
|
259
|
+
i0.ɵɵelementStart(3, "textarea", 36);
|
|
260
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_15_Template_textarea_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.ClassificationContext, $event) || (ctx_r1.ClassificationContext = $event); return i0.ɵɵresetView($event); });
|
|
261
|
+
i0.ɵɵelementEnd()();
|
|
262
|
+
i0.ɵɵelementStart(4, "div", 37)(5, "div")(6, "div", 38);
|
|
263
|
+
i0.ɵɵtext(7, "Substitutive mode");
|
|
264
|
+
i0.ɵɵelementEnd();
|
|
265
|
+
i0.ɵɵelementStart(8, "div", 39);
|
|
266
|
+
i0.ɵɵtext(9, "When on, this source's guidance replaces org/content-type context; off = added.");
|
|
267
|
+
i0.ɵɵelementEnd()();
|
|
268
|
+
i0.ɵɵelementStart(10, "mj-switch", 40);
|
|
269
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ClassifySetupWizardComponent_Conditional_15_Template_mj_switch_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.IsSubstitutiveMode, $event) || (ctx_r1.IsSubstitutiveMode = $event); return i0.ɵɵresetView($event); });
|
|
270
|
+
i0.ɵɵelementEnd()();
|
|
271
|
+
} if (rf & 2) {
|
|
272
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
273
|
+
i0.ɵɵadvance(3);
|
|
274
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ClassificationContext);
|
|
275
|
+
i0.ɵɵadvance(7);
|
|
276
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.IsSubstitutiveMode);
|
|
277
|
+
} }
|
|
278
|
+
function ClassifySetupWizardComponent_Conditional_16_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
279
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "span");
|
|
280
|
+
i0.ɵɵtext(2, "Entity");
|
|
281
|
+
i0.ɵɵelementEnd();
|
|
282
|
+
i0.ɵɵelementStart(3, "strong");
|
|
283
|
+
i0.ɵɵtext(4);
|
|
284
|
+
i0.ɵɵelementEnd()();
|
|
285
|
+
i0.ɵɵelementStart(5, "div", 41)(6, "span");
|
|
286
|
+
i0.ɵɵtext(7, "Entity document");
|
|
287
|
+
i0.ɵɵelementEnd();
|
|
288
|
+
i0.ɵɵelementStart(8, "strong");
|
|
289
|
+
i0.ɵɵtext(9);
|
|
290
|
+
i0.ɵɵelementEnd()();
|
|
291
|
+
} if (rf & 2) {
|
|
292
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
293
|
+
i0.ɵɵadvance(4);
|
|
294
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedEntityName || "\u2014");
|
|
295
|
+
i0.ɵɵadvance(5);
|
|
296
|
+
i0.ɵɵtextInterpolate(ctx_r1.EntityDocName);
|
|
297
|
+
} }
|
|
298
|
+
function ClassifySetupWizardComponent_Conditional_16_Conditional_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
299
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "span");
|
|
300
|
+
i0.ɵɵtext(2, "URL");
|
|
301
|
+
i0.ɵɵelementEnd();
|
|
302
|
+
i0.ɵɵelementStart(3, "strong");
|
|
303
|
+
i0.ɵɵtext(4);
|
|
304
|
+
i0.ɵɵelementEnd()();
|
|
305
|
+
} if (rf & 2) {
|
|
306
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
307
|
+
i0.ɵɵadvance(4);
|
|
308
|
+
i0.ɵɵtextInterpolate(ctx_r1.SourceURL);
|
|
309
|
+
} }
|
|
310
|
+
function ClassifySetupWizardComponent_Conditional_16_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
311
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "span");
|
|
312
|
+
i0.ɵɵtext(2, "Content type");
|
|
313
|
+
i0.ɵɵelementEnd();
|
|
314
|
+
i0.ɵɵelementStart(3, "strong");
|
|
315
|
+
i0.ɵɵtext(4);
|
|
316
|
+
i0.ɵɵelementEnd()();
|
|
317
|
+
i0.ɵɵconditionalCreate(5, ClassifySetupWizardComponent_Conditional_16_Conditional_12_Conditional_5_Template, 5, 1, "div", 41);
|
|
318
|
+
} if (rf & 2) {
|
|
319
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
320
|
+
i0.ɵɵadvance(4);
|
|
321
|
+
i0.ɵɵtextInterpolate(ctx_r1.ContentTypeName);
|
|
322
|
+
i0.ɵɵadvance();
|
|
323
|
+
i0.ɵɵconditional(ctx_r1.SourceURL ? 5 : -1);
|
|
324
|
+
} }
|
|
325
|
+
function ClassifySetupWizardComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
326
|
+
i0.ɵɵelementStart(0, "div", 7)(1, "div", 41)(2, "span");
|
|
327
|
+
i0.ɵɵtext(3, "Name");
|
|
328
|
+
i0.ɵɵelementEnd();
|
|
329
|
+
i0.ɵɵelementStart(4, "strong");
|
|
330
|
+
i0.ɵɵtext(5);
|
|
331
|
+
i0.ɵɵelementEnd()();
|
|
332
|
+
i0.ɵɵelementStart(6, "div", 41)(7, "span");
|
|
333
|
+
i0.ɵɵtext(8, "Source type");
|
|
334
|
+
i0.ɵɵelementEnd();
|
|
335
|
+
i0.ɵɵelementStart(9, "strong");
|
|
336
|
+
i0.ɵɵtext(10);
|
|
337
|
+
i0.ɵɵelementEnd()();
|
|
338
|
+
i0.ɵɵconditionalCreate(11, ClassifySetupWizardComponent_Conditional_16_Conditional_11_Template, 10, 2)(12, ClassifySetupWizardComponent_Conditional_16_Conditional_12_Template, 6, 2);
|
|
339
|
+
i0.ɵɵelementStart(13, "div", 41)(14, "span");
|
|
340
|
+
i0.ɵɵtext(15, "Domain context");
|
|
341
|
+
i0.ɵɵelementEnd();
|
|
342
|
+
i0.ɵɵelementStart(16, "strong");
|
|
343
|
+
i0.ɵɵtext(17);
|
|
344
|
+
i0.ɵɵelementEnd()()();
|
|
345
|
+
} if (rf & 2) {
|
|
346
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
347
|
+
i0.ɵɵadvance(5);
|
|
348
|
+
i0.ɵɵtextInterpolate(ctx_r1.SourceName || "\u2014");
|
|
349
|
+
i0.ɵɵadvance(5);
|
|
350
|
+
i0.ɵɵtextInterpolate(ctx_r1.SourceTypeName);
|
|
351
|
+
i0.ɵɵadvance();
|
|
352
|
+
i0.ɵɵconditional(ctx_r1.IsEntitySource ? 11 : 12);
|
|
353
|
+
i0.ɵɵadvance(6);
|
|
354
|
+
i0.ɵɵtextInterpolate(ctx_r1.ClassificationContext.trim() ? ctx_r1.ClassificationContextMode + " \u00B7 set" : "none");
|
|
355
|
+
} }
|
|
356
|
+
function ClassifySetupWizardComponent_Conditional_19_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
357
|
+
i0.ɵɵelement(0, "i", 31);
|
|
358
|
+
i0.ɵɵtext(1, " Creating\u2026 ");
|
|
359
|
+
} }
|
|
360
|
+
function ClassifySetupWizardComponent_Conditional_19_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
361
|
+
i0.ɵɵelement(0, "i", 32);
|
|
362
|
+
i0.ɵɵtext(1, " Create source ");
|
|
363
|
+
} }
|
|
364
|
+
function ClassifySetupWizardComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
365
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
366
|
+
i0.ɵɵelementStart(0, "button", 29);
|
|
367
|
+
i0.ɵɵlistener("click", function ClassifySetupWizardComponent_Conditional_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Finish()); });
|
|
368
|
+
i0.ɵɵconditionalCreate(1, ClassifySetupWizardComponent_Conditional_19_Conditional_1_Template, 2, 0)(2, ClassifySetupWizardComponent_Conditional_19_Conditional_2_Template, 2, 0);
|
|
369
|
+
i0.ɵɵelementEnd();
|
|
370
|
+
} if (rf & 2) {
|
|
371
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
372
|
+
i0.ɵɵproperty("disabled", ctx_r1.Saving);
|
|
373
|
+
i0.ɵɵadvance();
|
|
374
|
+
i0.ɵɵconditional(ctx_r1.Saving ? 1 : 2);
|
|
375
|
+
} }
|
|
376
|
+
function ClassifySetupWizardComponent_Conditional_20_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
+
i0.ɵɵelement(0, "i", 31);
|
|
378
|
+
i0.ɵɵtext(1, " Working\u2026 ");
|
|
379
|
+
} }
|
|
380
|
+
function ClassifySetupWizardComponent_Conditional_20_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
381
|
+
i0.ɵɵtext(0, " Next ");
|
|
382
|
+
i0.ɵɵelement(1, "i", 42);
|
|
383
|
+
} }
|
|
384
|
+
function ClassifySetupWizardComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
385
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
386
|
+
i0.ɵɵelementStart(0, "button", 29);
|
|
387
|
+
i0.ɵɵlistener("click", function ClassifySetupWizardComponent_Conditional_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Next()); });
|
|
388
|
+
i0.ɵɵconditionalCreate(1, ClassifySetupWizardComponent_Conditional_20_Conditional_1_Template, 2, 0)(2, ClassifySetupWizardComponent_Conditional_20_Conditional_2_Template, 2, 0);
|
|
389
|
+
i0.ɵɵelementEnd();
|
|
390
|
+
} if (rf & 2) {
|
|
391
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
392
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanGoNext || ctx_r1.Saving);
|
|
393
|
+
i0.ɵɵadvance();
|
|
394
|
+
i0.ɵɵconditional(ctx_r1.Saving ? 1 : 2);
|
|
395
|
+
} }
|
|
396
|
+
function ClassifySetupWizardComponent_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
397
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
398
|
+
i0.ɵɵelementStart(0, "button", 43);
|
|
399
|
+
i0.ɵɵlistener("click", function ClassifySetupWizardComponent_Conditional_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Back()); });
|
|
400
|
+
i0.ɵɵtext(1, "Back");
|
|
401
|
+
i0.ɵɵelementEnd();
|
|
402
|
+
} if (rf & 2) {
|
|
403
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
404
|
+
i0.ɵɵproperty("disabled", ctx_r1.Saving);
|
|
405
|
+
} }
|
|
406
|
+
export class ClassifySetupWizardComponent extends BaseAngularComponent {
|
|
407
|
+
cdr = inject(ChangeDetectorRef);
|
|
408
|
+
/** Emitted after the wizard creates a source, so the host reloads. */
|
|
409
|
+
Created = new EventEmitter();
|
|
410
|
+
/** Emitted when the wizard is dismissed without creating anything. */
|
|
411
|
+
Cancelled = new EventEmitter();
|
|
412
|
+
Visible = false;
|
|
413
|
+
CurrentStep = 'source-type';
|
|
414
|
+
Saving = false;
|
|
415
|
+
// ── Collected selections ──
|
|
416
|
+
SourceName = '';
|
|
417
|
+
SourceTypeID = '';
|
|
418
|
+
EntityID = '';
|
|
419
|
+
EntityDocID = '';
|
|
420
|
+
ContentTypeID = '';
|
|
421
|
+
SourceURL = '';
|
|
422
|
+
// Domain context (source scope)
|
|
423
|
+
ClassificationContext = '';
|
|
424
|
+
ClassificationContextMode = 'additive';
|
|
425
|
+
// ── Dropdown options ──
|
|
426
|
+
SourceTypeOptions = [];
|
|
427
|
+
ContentTypeOptions = [];
|
|
428
|
+
EntityOptions = [];
|
|
429
|
+
/** A pending source ID is created up-front when we reach the taxonomy step so
|
|
430
|
+
* the embedded seed-taxonomy generator has a real source to sample. */
|
|
431
|
+
PendingSourceID = null;
|
|
432
|
+
get IsSubstitutiveMode() {
|
|
433
|
+
return this.ClassificationContextMode === 'substitutive';
|
|
434
|
+
}
|
|
435
|
+
set IsSubstitutiveMode(v) {
|
|
436
|
+
this.ClassificationContextMode = v ? 'substitutive' : 'additive';
|
|
437
|
+
}
|
|
438
|
+
// ════════════════════════════════════════════
|
|
439
|
+
// OPEN / CLOSE
|
|
440
|
+
// ════════════════════════════════════════════
|
|
441
|
+
async Open() {
|
|
442
|
+
await this.loadOptions();
|
|
443
|
+
this.resetState();
|
|
444
|
+
this.Visible = true;
|
|
445
|
+
this.cdr.detectChanges();
|
|
446
|
+
}
|
|
447
|
+
Close() {
|
|
448
|
+
this.Visible = false;
|
|
449
|
+
this.Cancelled.emit();
|
|
450
|
+
this.cdr.detectChanges();
|
|
451
|
+
}
|
|
452
|
+
resetState() {
|
|
453
|
+
this.CurrentStep = 'source-type';
|
|
454
|
+
this.SourceName = '';
|
|
455
|
+
this.SourceTypeID = '';
|
|
456
|
+
this.EntityID = '';
|
|
457
|
+
this.EntityDocID = '';
|
|
458
|
+
// Preserve the auto-selected content type when only one exists (set in
|
|
459
|
+
// loadOptions), so the wizard can skip the content-type step.
|
|
460
|
+
this.ContentTypeID = this.ContentTypeOptions.length === 1 ? this.ContentTypeOptions[0].ID : '';
|
|
461
|
+
this.SourceURL = '';
|
|
462
|
+
this.ClassificationContext = '';
|
|
463
|
+
this.ClassificationContextMode = 'additive';
|
|
464
|
+
this.PendingSourceID = null;
|
|
465
|
+
}
|
|
466
|
+
async loadOptions() {
|
|
467
|
+
try {
|
|
468
|
+
const p = this.ProviderToUse;
|
|
469
|
+
const engine = KnowledgeHubMetadataEngine.Instance;
|
|
470
|
+
await engine.Config(false, p.CurrentUser, p);
|
|
471
|
+
this.SourceTypeOptions = engine.ContentSourceTypes.map(t => ({ ID: t.ID, Name: t.Name }));
|
|
472
|
+
this.ContentTypeOptions = engine.ContentTypes.map(t => ({ ID: t.ID, Name: t.Name }));
|
|
473
|
+
// When exactly one content type exists, auto-select it so the wizard can
|
|
474
|
+
// skip the content-type step entirely (see ActiveSteps).
|
|
475
|
+
if (this.ContentTypeOptions.length === 1) {
|
|
476
|
+
this.ContentTypeID = this.ContentTypeOptions[0].ID;
|
|
477
|
+
}
|
|
478
|
+
// Entities that have active documents — the safe default for entity sources.
|
|
479
|
+
const entityMap = new Map();
|
|
480
|
+
for (const doc of engine.GetActiveEntityDocuments()) {
|
|
481
|
+
const info = doc.Entity ? p.Entities.find(e => e.Name === doc.Entity) : undefined;
|
|
482
|
+
if (info && !entityMap.has(info.ID))
|
|
483
|
+
entityMap.set(info.ID, info.Name);
|
|
484
|
+
}
|
|
485
|
+
// Also include all entities so a brand-new entity (no doc yet) can be picked.
|
|
486
|
+
for (const e of p.Entities) {
|
|
487
|
+
if (!entityMap.has(e.ID))
|
|
488
|
+
entityMap.set(e.ID, e.Name);
|
|
489
|
+
}
|
|
490
|
+
this.EntityOptions = Array.from(entityMap.entries())
|
|
491
|
+
.map(([ID, Name]) => ({ ID, Name }))
|
|
492
|
+
.sort((a, b) => a.Name.localeCompare(b.Name));
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
console.error('[Classify Wizard] Error loading options:', error);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
// ════════════════════════════════════════════
|
|
499
|
+
// STEP LOGIC
|
|
500
|
+
// ════════════════════════════════════════════
|
|
501
|
+
/** Whether the selected source type is the Entity type (name-based check). */
|
|
502
|
+
get IsEntitySource() {
|
|
503
|
+
if (!this.SourceTypeID)
|
|
504
|
+
return false;
|
|
505
|
+
const t = this.SourceTypeOptions.find(o => UUIDsEqual(o.ID, this.SourceTypeID));
|
|
506
|
+
return t?.Name?.toLowerCase() === 'entity';
|
|
507
|
+
}
|
|
508
|
+
/** EntityInfo for the selected entity, or null. */
|
|
509
|
+
get selectedEntityInfo() {
|
|
510
|
+
if (!this.EntityID)
|
|
511
|
+
return null;
|
|
512
|
+
return this.ProviderToUse.Entities.find(e => UUIDsEqual(e.ID, this.EntityID)) ?? null;
|
|
513
|
+
}
|
|
514
|
+
get SelectedEntityName() {
|
|
515
|
+
return this.selectedEntityInfo?.Name ?? '';
|
|
516
|
+
}
|
|
517
|
+
/** True when the selected entity has no active Entity Document. */
|
|
518
|
+
get SelectedEntityHasNoDocument() {
|
|
519
|
+
const info = this.selectedEntityInfo;
|
|
520
|
+
if (!info)
|
|
521
|
+
return false;
|
|
522
|
+
try {
|
|
523
|
+
return KnowledgeHubMetadataEngine.Instance.GetActiveEntityDocuments()
|
|
524
|
+
.filter(d => d.Entity === info.Name).length === 0;
|
|
525
|
+
}
|
|
526
|
+
catch {
|
|
527
|
+
return false;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
/** Whether any content type exists (drives the content-type step skip). */
|
|
531
|
+
get HasAnyContentType() {
|
|
532
|
+
return this.ContentTypeOptions.length > 0;
|
|
533
|
+
}
|
|
534
|
+
/**
|
|
535
|
+
* The ordered list of steps relevant to the current selections. Steps whose
|
|
536
|
+
* prerequisite already exists are filtered out, so the progress UI + next/back
|
|
537
|
+
* navigation only ever traverse meaningful steps.
|
|
538
|
+
*/
|
|
539
|
+
get ActiveSteps() {
|
|
540
|
+
const steps = ['source-type'];
|
|
541
|
+
if (this.IsEntitySource) {
|
|
542
|
+
steps.push('entity');
|
|
543
|
+
// Entity Document step only when the chosen entity lacks one.
|
|
544
|
+
if (this.EntityID && this.SelectedEntityHasNoDocument)
|
|
545
|
+
steps.push('entity-doc');
|
|
546
|
+
}
|
|
547
|
+
// Content type only matters for non-entity sources. When exactly one content
|
|
548
|
+
// type exists it is auto-selected (see loadOptions) and the step is skipped —
|
|
549
|
+
// there's nothing to choose. The step is shown for 0 (n/a path) or 2+ options.
|
|
550
|
+
if (!this.IsEntitySource && this.ContentTypeOptions.length !== 1)
|
|
551
|
+
steps.push('content-type');
|
|
552
|
+
steps.push('taxonomy');
|
|
553
|
+
steps.push('domain-context');
|
|
554
|
+
steps.push('review');
|
|
555
|
+
return steps;
|
|
556
|
+
}
|
|
557
|
+
get StepIndex() {
|
|
558
|
+
return Math.max(0, this.ActiveSteps.indexOf(this.CurrentStep));
|
|
559
|
+
}
|
|
560
|
+
get TotalSteps() {
|
|
561
|
+
return this.ActiveSteps.length;
|
|
562
|
+
}
|
|
563
|
+
get StepLabel() {
|
|
564
|
+
switch (this.CurrentStep) {
|
|
565
|
+
case 'source-type': return 'Source type';
|
|
566
|
+
case 'entity': return 'Entity';
|
|
567
|
+
case 'entity-doc': return 'Entity document';
|
|
568
|
+
case 'content-type': return 'Content type';
|
|
569
|
+
case 'taxonomy': return 'Taxonomy strategy';
|
|
570
|
+
case 'domain-context': return 'Domain context';
|
|
571
|
+
case 'review': return 'Review & create';
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
get CanGoNext() {
|
|
575
|
+
switch (this.CurrentStep) {
|
|
576
|
+
case 'source-type': return !!this.SourceName.trim() && !!this.SourceTypeID;
|
|
577
|
+
case 'entity': return !!this.EntityID;
|
|
578
|
+
case 'entity-doc': return !this.SelectedEntityHasNoDocument; // advance once a doc exists
|
|
579
|
+
case 'content-type': return !!this.ContentTypeID;
|
|
580
|
+
default: return true;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
get IsLastStep() {
|
|
584
|
+
return this.CurrentStep === 'review';
|
|
585
|
+
}
|
|
586
|
+
async Next() {
|
|
587
|
+
if (!this.CanGoNext)
|
|
588
|
+
return;
|
|
589
|
+
const steps = this.ActiveSteps;
|
|
590
|
+
const idx = steps.indexOf(this.CurrentStep);
|
|
591
|
+
const nextStep = steps[idx + 1];
|
|
592
|
+
if (!nextStep)
|
|
593
|
+
return;
|
|
594
|
+
// When advancing into the taxonomy step, create the source up front so the
|
|
595
|
+
// seed generator has a real source to sample. If it fails, stay put.
|
|
596
|
+
if (nextStep === 'taxonomy' && !this.PendingSourceID) {
|
|
597
|
+
const ok = await this.ensurePendingSource();
|
|
598
|
+
if (!ok)
|
|
599
|
+
return;
|
|
600
|
+
}
|
|
601
|
+
if (nextStep === 'entity-doc') {
|
|
602
|
+
this.PrimeEntityDocDefaults();
|
|
603
|
+
}
|
|
604
|
+
this.CurrentStep = nextStep;
|
|
605
|
+
this.cdr.detectChanges();
|
|
606
|
+
}
|
|
607
|
+
Back() {
|
|
608
|
+
const steps = this.ActiveSteps;
|
|
609
|
+
const idx = steps.indexOf(this.CurrentStep);
|
|
610
|
+
if (idx > 0) {
|
|
611
|
+
this.CurrentStep = steps[idx - 1];
|
|
612
|
+
this.cdr.detectChanges();
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
// ── Inline Entity Document creation (entity-doc step) ──
|
|
616
|
+
EntityDocSaving = false;
|
|
617
|
+
NewEntityDocName = '';
|
|
618
|
+
NewEntityDocSelectedFields = {};
|
|
619
|
+
/** Fields of the selected entity, for the field-picker in the inline create. */
|
|
620
|
+
get SelectedEntityFields() {
|
|
621
|
+
const info = this.selectedEntityInfo;
|
|
622
|
+
if (!info)
|
|
623
|
+
return [];
|
|
624
|
+
return info.Fields
|
|
625
|
+
.filter(f => !f.IsVirtual)
|
|
626
|
+
.map(f => ({ Name: f.Name, DisplayName: f.DisplayName || f.Name }));
|
|
627
|
+
}
|
|
628
|
+
get SelectedEntityDocFieldCount() {
|
|
629
|
+
return Object.values(this.NewEntityDocSelectedFields).filter(Boolean).length;
|
|
630
|
+
}
|
|
631
|
+
/** Prime the inline-create defaults when entering the entity-doc step. */
|
|
632
|
+
PrimeEntityDocDefaults() {
|
|
633
|
+
const info = this.selectedEntityInfo;
|
|
634
|
+
if (!info || this.NewEntityDocName)
|
|
635
|
+
return;
|
|
636
|
+
this.NewEntityDocName = `${info.Name} Document`;
|
|
637
|
+
this.NewEntityDocSelectedFields = {};
|
|
638
|
+
const preferred = ['Name', 'Title', 'Description', 'Notes', 'Body', 'Content'];
|
|
639
|
+
for (const f of this.SelectedEntityFields) {
|
|
640
|
+
if (preferred.includes(f.Name))
|
|
641
|
+
this.NewEntityDocSelectedFields[f.Name] = true;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
/** Create the Entity Document for the selected entity, then refresh + select it. */
|
|
645
|
+
async CreateEntityDocument() {
|
|
646
|
+
if (this.EntityDocSaving)
|
|
647
|
+
return;
|
|
648
|
+
const info = this.selectedEntityInfo;
|
|
649
|
+
if (!info)
|
|
650
|
+
return;
|
|
651
|
+
if (!this.NewEntityDocName.trim()) {
|
|
652
|
+
MJNotificationService.Instance.CreateSimpleNotification('Enter a document name.', 'warning', 3000);
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
this.EntityDocSaving = true;
|
|
656
|
+
this.cdr.detectChanges();
|
|
657
|
+
try {
|
|
658
|
+
const p = this.ProviderToUse;
|
|
659
|
+
const doc = await p.GetEntityObject('MJ: Entity Documents', p.CurrentUser);
|
|
660
|
+
doc.NewRecord();
|
|
661
|
+
doc.Name = this.NewEntityDocName.trim();
|
|
662
|
+
doc.EntityID = info.ID;
|
|
663
|
+
doc.Status = 'Active';
|
|
664
|
+
const selectedFields = this.SelectedEntityFields
|
|
665
|
+
.filter(f => this.NewEntityDocSelectedFields[f.Name])
|
|
666
|
+
.map(f => f.Name);
|
|
667
|
+
doc.Configuration = JSON.stringify({ Fields: selectedFields });
|
|
668
|
+
const saved = await doc.Save();
|
|
669
|
+
if (saved) {
|
|
670
|
+
await KnowledgeHubMetadataEngine.Instance.Config(true, p.CurrentUser, p);
|
|
671
|
+
this.EntityDocID = doc.ID;
|
|
672
|
+
MJNotificationService.Instance.CreateSimpleNotification('Entity Document created', 'success', 2500);
|
|
673
|
+
}
|
|
674
|
+
else {
|
|
675
|
+
const detail = doc.LatestResult?.CompleteMessage ?? 'Unknown error';
|
|
676
|
+
MJNotificationService.Instance.CreateSimpleNotification(`Failed to create Entity Document: ${detail}`, 'error', 5000);
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
catch (error) {
|
|
680
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
681
|
+
MJNotificationService.Instance.CreateSimpleNotification(`Error: ${msg}`, 'error', 5000);
|
|
682
|
+
}
|
|
683
|
+
finally {
|
|
684
|
+
this.EntityDocSaving = false;
|
|
685
|
+
this.cdr.detectChanges();
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
/** Called by the embedded seed-taxonomy after it persists tags. */
|
|
689
|
+
OnTaxonomyAccepted(_event) {
|
|
690
|
+
this.cdr.detectChanges();
|
|
691
|
+
}
|
|
692
|
+
// ════════════════════════════════════════════
|
|
693
|
+
// PERSISTENCE
|
|
694
|
+
// ════════════════════════════════════════════
|
|
695
|
+
/**
|
|
696
|
+
* Create (once) the content source record so the taxonomy step can sample it.
|
|
697
|
+
* Subsequent edits (domain context) are applied to this same record on Finish.
|
|
698
|
+
*/
|
|
699
|
+
async ensurePendingSource() {
|
|
700
|
+
this.Saving = true;
|
|
701
|
+
this.cdr.detectChanges();
|
|
702
|
+
try {
|
|
703
|
+
const id = await this.saveSource();
|
|
704
|
+
if (id) {
|
|
705
|
+
this.PendingSourceID = id;
|
|
706
|
+
return true;
|
|
707
|
+
}
|
|
708
|
+
return false;
|
|
709
|
+
}
|
|
710
|
+
finally {
|
|
711
|
+
this.Saving = false;
|
|
712
|
+
this.cdr.detectChanges();
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Create or update the content source from the collected selections. Returns
|
|
717
|
+
* the saved ID, or null on failure. Defaults required NOT NULL columns for
|
|
718
|
+
* entity sources the same way the quick-edit form does.
|
|
719
|
+
*/
|
|
720
|
+
async saveSource() {
|
|
721
|
+
try {
|
|
722
|
+
const p = this.ProviderToUse;
|
|
723
|
+
const entity = await p.GetEntityObject('MJ: Content Sources', p.CurrentUser);
|
|
724
|
+
if (this.PendingSourceID) {
|
|
725
|
+
const loaded = await entity.Load(this.PendingSourceID);
|
|
726
|
+
if (!loaded) {
|
|
727
|
+
entity.NewRecord();
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
else {
|
|
731
|
+
entity.NewRecord();
|
|
732
|
+
}
|
|
733
|
+
entity.Name = this.SourceName.trim();
|
|
734
|
+
entity.ContentSourceTypeID = this.SourceTypeID;
|
|
735
|
+
const engine = KnowledgeHubMetadataEngine.Instance;
|
|
736
|
+
if (this.IsEntitySource) {
|
|
737
|
+
entity.EntityID = this.EntityID || null;
|
|
738
|
+
entity.EntityDocumentID = this.resolveEntityDocID();
|
|
739
|
+
entity.URL = '';
|
|
740
|
+
// NOT NULL columns: default to first available.
|
|
741
|
+
if (!entity.ContentTypeID) {
|
|
742
|
+
if (engine.ContentTypes.length === 0) {
|
|
743
|
+
MJNotificationService.Instance.CreateSimpleNotification('No content types exist. Create one before adding an entity source.', 'warning', 5000);
|
|
744
|
+
return null;
|
|
745
|
+
}
|
|
746
|
+
entity.ContentTypeID = engine.ContentTypes[0].ID;
|
|
747
|
+
}
|
|
748
|
+
if (!entity.ContentFileTypeID && engine.ContentFileTypes.length > 0) {
|
|
749
|
+
entity.ContentFileTypeID = engine.ContentFileTypes[0].ID;
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
else {
|
|
753
|
+
entity.EntityID = null;
|
|
754
|
+
entity.EntityDocumentID = null;
|
|
755
|
+
entity.ContentTypeID = this.ContentTypeID;
|
|
756
|
+
if (!entity.ContentFileTypeID && engine.ContentFileTypes.length > 0) {
|
|
757
|
+
entity.ContentFileTypeID = engine.ContentFileTypes[0].ID;
|
|
758
|
+
}
|
|
759
|
+
entity.URL = this.SourceURL || '';
|
|
760
|
+
}
|
|
761
|
+
// Merge the domain-context fields into the typed Configuration JSON.
|
|
762
|
+
const config = entity.ConfigurationObject ?? {};
|
|
763
|
+
if (this.ClassificationContext.trim()) {
|
|
764
|
+
config.ClassificationContext = this.ClassificationContext;
|
|
765
|
+
config.ClassificationContextMode = this.ClassificationContextMode;
|
|
766
|
+
}
|
|
767
|
+
else {
|
|
768
|
+
delete config.ClassificationContext;
|
|
769
|
+
delete config.ClassificationContextMode;
|
|
770
|
+
}
|
|
771
|
+
entity.ConfigurationObject = config;
|
|
772
|
+
const saved = await entity.Save();
|
|
773
|
+
if (saved)
|
|
774
|
+
return entity.ID;
|
|
775
|
+
const detail = entity.LatestResult?.CompleteMessage ?? 'Unknown error';
|
|
776
|
+
MJNotificationService.Instance.CreateSimpleNotification(`Failed to save source: ${detail}`, 'error', 5000);
|
|
777
|
+
return null;
|
|
778
|
+
}
|
|
779
|
+
catch (error) {
|
|
780
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
781
|
+
MJNotificationService.Instance.CreateSimpleNotification(`Error: ${msg}`, 'error', 5000);
|
|
782
|
+
return null;
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
/** Resolve the entity document ID to store (explicit choice or the entity's only doc). */
|
|
786
|
+
resolveEntityDocID() {
|
|
787
|
+
if (this.EntityDocID)
|
|
788
|
+
return this.EntityDocID;
|
|
789
|
+
const info = this.selectedEntityInfo;
|
|
790
|
+
if (!info)
|
|
791
|
+
return null;
|
|
792
|
+
const docs = KnowledgeHubMetadataEngine.Instance.GetActiveEntityDocuments()
|
|
793
|
+
.filter(d => d.Entity === info.Name);
|
|
794
|
+
return docs.length > 0 ? docs[0].ID : null;
|
|
795
|
+
}
|
|
796
|
+
/** Finish the wizard: persist the (final) source and emit Created. */
|
|
797
|
+
async Finish() {
|
|
798
|
+
if (this.Saving)
|
|
799
|
+
return;
|
|
800
|
+
this.Saving = true;
|
|
801
|
+
this.cdr.detectChanges();
|
|
802
|
+
try {
|
|
803
|
+
const id = await this.saveSource();
|
|
804
|
+
if (id) {
|
|
805
|
+
MJNotificationService.Instance.CreateSimpleNotification('Source created', 'success', 2500);
|
|
806
|
+
this.Visible = false;
|
|
807
|
+
this.Created.emit({ SourceID: id });
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
finally {
|
|
811
|
+
this.Saving = false;
|
|
812
|
+
this.cdr.detectChanges();
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
// ── Entity-doc options for the review/entity-doc step ──
|
|
816
|
+
get EntityDocOptions() {
|
|
817
|
+
const info = this.selectedEntityInfo;
|
|
818
|
+
if (!info)
|
|
819
|
+
return [];
|
|
820
|
+
try {
|
|
821
|
+
return KnowledgeHubMetadataEngine.Instance.GetActiveEntityDocuments()
|
|
822
|
+
.filter(d => d.Entity === info.Name)
|
|
823
|
+
.map(d => ({ ID: d.ID, Name: d.Name }));
|
|
824
|
+
}
|
|
825
|
+
catch {
|
|
826
|
+
return [];
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
// ── Review labels ──
|
|
830
|
+
get SourceTypeName() {
|
|
831
|
+
return this.SourceTypeOptions.find(o => UUIDsEqual(o.ID, this.SourceTypeID))?.Name ?? '—';
|
|
832
|
+
}
|
|
833
|
+
get ContentTypeName() {
|
|
834
|
+
return this.ContentTypeOptions.find(o => UUIDsEqual(o.ID, this.ContentTypeID))?.Name ?? '—';
|
|
835
|
+
}
|
|
836
|
+
get EntityDocName() {
|
|
837
|
+
const id = this.resolveEntityDocID();
|
|
838
|
+
if (!id)
|
|
839
|
+
return '—';
|
|
840
|
+
return this.EntityDocOptions.find(o => UUIDsEqual(o.ID, id))?.Name ?? '—';
|
|
841
|
+
}
|
|
842
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵClassifySetupWizardComponent_BaseFactory; return function ClassifySetupWizardComponent_Factory(__ngFactoryType__) { return (ɵClassifySetupWizardComponent_BaseFactory || (ɵClassifySetupWizardComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ClassifySetupWizardComponent)))(__ngFactoryType__ || ClassifySetupWizardComponent); }; })();
|
|
843
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClassifySetupWizardComponent, selectors: [["classify-setup-wizard"]], outputs: { Created: "Created", Cancelled: "Cancelled" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 25, vars: 14, consts: [["Title", "Add Source (Guided)", 3, "Close", "Visible", "Width"], [1, "wiz"], [1, "wiz-progress"], [1, "wiz-step-dot", 3, "active", "done"], [1, "wiz-step-title"], [1, "wiz-step-counter"], [1, "wiz-body"], [1, "wiz-review"], [1, "wiz-actions"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "disabled"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "disabled"], [1, "wiz-actions-spacer"], ["mjButton", "", "variant", "flat", "size", "sm", 3, "click"], [1, "wiz-step-dot"], [1, "wiz-step-num"], [1, "at-form-group"], [1, "at-form-label"], ["type", "text", "placeholder", "Source name", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "mj-input", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], ["type", "url", "placeholder", "https://\u2026", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "wiz-callout", "ok"], [1, "fa-solid", "fa-circle-check"], [1, "wiz-callout"], [1, "fa-solid", "fa-circle-info"], ["type", "text", "placeholder", "Document name", 1, "mj-input", 3, "ngModelChange", "ngModel"], [1, "wiz-field-list"], [1, "wiz-field-row"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click", "disabled"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "wiz-help"], [3, "Accepted", "SourceID", "Provider"], ["rows", "4", "placeholder", "Free-text guidance for the classifier about this source's domain\u2026", 1, "mj-textarea", 3, "ngModelChange", "ngModel"], [1, "wiz-toggle-row"], [1, "wiz-toggle-t"], [1, "wiz-toggle-d"], [3, "ngModelChange", "ngModel"], [1, "wiz-review-row"], [1, "fa-solid", "fa-arrow-right"], ["mjButton", "", "variant", "secondary", "size", "sm", 3, "click", "disabled"]], template: function ClassifySetupWizardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
844
|
+
i0.ɵɵelementStart(0, "mj-dialog", 0);
|
|
845
|
+
i0.ɵɵlistener("Close", function ClassifySetupWizardComponent_Template_mj_dialog_Close_0_listener() { return ctx.Close(); });
|
|
846
|
+
i0.ɵɵelementStart(1, "div", 1)(2, "div", 2);
|
|
847
|
+
i0.ɵɵrepeaterCreate(3, ClassifySetupWizardComponent_For_4_Template, 3, 5, "div", 3, i0.ɵɵrepeaterTrackByIdentity);
|
|
848
|
+
i0.ɵɵelementEnd();
|
|
849
|
+
i0.ɵɵelementStart(5, "div", 4)(6, "span", 5);
|
|
850
|
+
i0.ɵɵtext(7);
|
|
851
|
+
i0.ɵɵelementEnd();
|
|
852
|
+
i0.ɵɵtext(8);
|
|
853
|
+
i0.ɵɵelementEnd();
|
|
854
|
+
i0.ɵɵelementStart(9, "div", 6);
|
|
855
|
+
i0.ɵɵconditionalCreate(10, ClassifySetupWizardComponent_Conditional_10_Template, 13, 3);
|
|
856
|
+
i0.ɵɵconditionalCreate(11, ClassifySetupWizardComponent_Conditional_11_Template, 9, 2);
|
|
857
|
+
i0.ɵɵconditionalCreate(12, ClassifySetupWizardComponent_Conditional_12_Template, 18, 5);
|
|
858
|
+
i0.ɵɵconditionalCreate(13, ClassifySetupWizardComponent_Conditional_13_Template, 2, 1);
|
|
859
|
+
i0.ɵɵconditionalCreate(14, ClassifySetupWizardComponent_Conditional_14_Template, 3, 2);
|
|
860
|
+
i0.ɵɵconditionalCreate(15, ClassifySetupWizardComponent_Conditional_15_Template, 11, 2);
|
|
861
|
+
i0.ɵɵconditionalCreate(16, ClassifySetupWizardComponent_Conditional_16_Template, 18, 4, "div", 7);
|
|
862
|
+
i0.ɵɵelementEnd()();
|
|
863
|
+
i0.ɵɵelementStart(17, "mj-dialog-actions")(18, "div", 8);
|
|
864
|
+
i0.ɵɵconditionalCreate(19, ClassifySetupWizardComponent_Conditional_19_Template, 3, 2, "button", 9)(20, ClassifySetupWizardComponent_Conditional_20_Template, 3, 2, "button", 9);
|
|
865
|
+
i0.ɵɵconditionalCreate(21, ClassifySetupWizardComponent_Conditional_21_Template, 2, 1, "button", 10);
|
|
866
|
+
i0.ɵɵelement(22, "span", 11);
|
|
867
|
+
i0.ɵɵelementStart(23, "button", 12);
|
|
868
|
+
i0.ɵɵlistener("click", function ClassifySetupWizardComponent_Template_button_click_23_listener() { return ctx.Close(); });
|
|
869
|
+
i0.ɵɵtext(24, "Cancel");
|
|
870
|
+
i0.ɵɵelementEnd()()()();
|
|
871
|
+
} if (rf & 2) {
|
|
872
|
+
i0.ɵɵproperty("Visible", ctx.Visible)("Width", 660);
|
|
873
|
+
i0.ɵɵadvance(3);
|
|
874
|
+
i0.ɵɵrepeater(ctx.ActiveSteps);
|
|
875
|
+
i0.ɵɵadvance(4);
|
|
876
|
+
i0.ɵɵtextInterpolate2("Step ", ctx.StepIndex + 1, " of ", ctx.TotalSteps);
|
|
877
|
+
i0.ɵɵadvance();
|
|
878
|
+
i0.ɵɵtextInterpolate1("", ctx.StepLabel, " ");
|
|
879
|
+
i0.ɵɵadvance(2);
|
|
880
|
+
i0.ɵɵconditional(ctx.CurrentStep === "source-type" ? 10 : -1);
|
|
881
|
+
i0.ɵɵadvance();
|
|
882
|
+
i0.ɵɵconditional(ctx.CurrentStep === "entity" ? 11 : -1);
|
|
883
|
+
i0.ɵɵadvance();
|
|
884
|
+
i0.ɵɵconditional(ctx.CurrentStep === "entity-doc" ? 12 : -1);
|
|
885
|
+
i0.ɵɵadvance();
|
|
886
|
+
i0.ɵɵconditional(ctx.CurrentStep === "content-type" ? 13 : -1);
|
|
887
|
+
i0.ɵɵadvance();
|
|
888
|
+
i0.ɵɵconditional(ctx.CurrentStep === "taxonomy" ? 14 : -1);
|
|
889
|
+
i0.ɵɵadvance();
|
|
890
|
+
i0.ɵɵconditional(ctx.CurrentStep === "domain-context" ? 15 : -1);
|
|
891
|
+
i0.ɵɵadvance();
|
|
892
|
+
i0.ɵɵconditional(ctx.CurrentStep === "review" ? 16 : -1);
|
|
893
|
+
i0.ɵɵadvance(3);
|
|
894
|
+
i0.ɵɵconditional(ctx.IsLastStep ? 19 : 20);
|
|
895
|
+
i0.ɵɵadvance(2);
|
|
896
|
+
i0.ɵɵconditional(ctx.StepIndex > 0 ? 21 : -1);
|
|
897
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJSwitchComponent, i2.MJDialogComponent, i2.MJDialogActionsComponent, i3.ClassifySeedTaxonomyComponent], styles: [".wiz[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n width: 100%;\n \n\n\n min-width: min(620px, 100%);\n}\n\n\n\n.wiz-progress[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 0;\n width: 100%;\n}\n\n\n\n\n.wiz-step-dot[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex: 1 1 auto; \n\n}\n.wiz-step-dot[_ngcontent-%COMP%]:last-child {\n flex: 0 0 auto; \n\n}\n\n\n.wiz-step-num[_ngcontent-%COMP%] {\n width: 30px;\n height: 30px;\n flex: 0 0 30px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-default);\n font-size: 0.8rem;\n font-weight: 600;\n transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;\n}\n\n\n.wiz-step-dot[_ngcontent-%COMP%]:not(:last-child)::after {\n content: '';\n flex: 1 1 auto;\n height: 2px;\n margin: 0 6px;\n min-width: 16px;\n background: var(--mj-border-default);\n}\n.wiz-step-dot.active[_ngcontent-%COMP%] .wiz-step-num[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n.wiz-step-dot.done[_ngcontent-%COMP%] .wiz-step-num[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n.wiz-step-dot.done[_ngcontent-%COMP%]:not(:last-child)::after, \n.wiz-step-dot.active[_ngcontent-%COMP%]:not(:last-child)::after {\n background: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default));\n}\n\n.wiz-step-title[_ngcontent-%COMP%] {\n font-size: 0.95rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.wiz-step-title[_ngcontent-%COMP%] .wiz-step-counter[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n margin-right: 8px;\n}\n\n\n\n.wiz-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n min-height: 220px;\n width: 100%;\n}\n.wiz-help[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n line-height: 1.5;\n}\n.wiz-callout[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 12px 14px;\n background: color-mix(in srgb, var(--mj-status-info) 8%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-info-border, var(--mj-border-default));\n border-radius: 8px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n line-height: 1.45;\n}\n.wiz-callout[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-info); margin-top: 2px; }\n.wiz-callout.ok[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface)); }\n.wiz-callout.ok[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-status-success); }\n.wiz-field-list[_ngcontent-%COMP%] {\n max-height: 220px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 8px 10px;\n}\n.wiz-field-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n cursor: pointer;\n}\n.wiz-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n}\n.wiz-toggle-t[_ngcontent-%COMP%] {\n font-size: 0.88rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.wiz-toggle-d[_ngcontent-%COMP%] {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.4;\n}\n.wiz-review[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n.wiz-review-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n padding: 11px 16px;\n font-size: 0.86rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.wiz-review-row[_ngcontent-%COMP%]:last-child { border-bottom: none; }\n.wiz-review-row[_ngcontent-%COMP%] span[_ngcontent-%COMP%] { color: var(--mj-text-muted); }\n.wiz-review-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] { color: var(--mj-text-primary); }\n\n\n\n.wiz-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n width: 100%;\n}\n.wiz-actions[_ngcontent-%COMP%] .wiz-actions-spacer[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n}\n\n\n\n.at-form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n width: 100%;\n}\n.at-form-label[_ngcontent-%COMP%] {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n.at-form-group[_ngcontent-%COMP%] .mj-input[_ngcontent-%COMP%], \n.at-form-group[_ngcontent-%COMP%] .mj-textarea[_ngcontent-%COMP%] {\n width: 100%;\n}"] });
|
|
898
|
+
}
|
|
899
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClassifySetupWizardComponent, [{
|
|
900
|
+
type: Component,
|
|
901
|
+
args: [{ standalone: false, selector: 'classify-setup-wizard', template: "<mj-dialog [Visible]=\"Visible\" Title=\"Add Source (Guided)\" [Width]=\"660\" (Close)=\"Close()\">\n <div class=\"wiz\">\n <!-- Step progress -->\n <div class=\"wiz-progress\">\n @for (s of ActiveSteps; track s; let i = $index) {\n <div class=\"wiz-step-dot\"\n [class.active]=\"i === StepIndex\"\n [class.done]=\"i < StepIndex\">\n <span class=\"wiz-step-num\">{{ i + 1 }}</span>\n </div>\n }\n </div>\n <div class=\"wiz-step-title\">\n <span class=\"wiz-step-counter\">Step {{ StepIndex + 1 }} of {{ TotalSteps }}</span>{{ StepLabel }}\n </div>\n\n <div class=\"wiz-body\">\n <!-- Source Type -->\n @if (CurrentStep === 'source-type') {\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Source name</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"SourceName\" placeholder=\"Source name\">\n </div>\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Source type</label>\n <select class=\"mj-input\" [(ngModel)]=\"SourceTypeID\">\n <option value=\"\">Select source type\u2026</option>\n @for (opt of SourceTypeOptions; track opt.ID) {\n <option [value]=\"opt.ID\">{{ opt.Name }}</option>\n }\n </select>\n </div>\n @if (!IsEntitySource && SourceTypeID) {\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">URL (if applicable)</label>\n <input type=\"url\" class=\"mj-input\" [(ngModel)]=\"SourceURL\" placeholder=\"https://\u2026\">\n </div>\n }\n }\n\n <!-- Entity -->\n @if (CurrentStep === 'entity') {\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Entity</label>\n <select class=\"mj-input\" [(ngModel)]=\"EntityID\">\n <option value=\"\">Select entity\u2026</option>\n @for (opt of EntityOptions; track opt.ID) {\n <option [value]=\"opt.ID\">{{ opt.Name }}</option>\n }\n </select>\n </div>\n @if (EntityID && !SelectedEntityHasNoDocument) {\n <div class=\"wiz-callout ok\">\n <i class=\"fa-solid fa-circle-check\"></i>\n <strong>{{ SelectedEntityName }}</strong> already has an Entity Document \u2014 the next step is skipped.\n </div>\n }\n }\n\n <!-- Entity Document (inline create) -->\n @if (CurrentStep === 'entity-doc') {\n <div class=\"wiz-callout\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <strong>{{ SelectedEntityName }}</strong> has no Entity Document. Create one to continue.\n </div>\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Document name</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"NewEntityDocName\" placeholder=\"Document name\">\n </div>\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Fields to include ({{ SelectedEntityDocFieldCount }} selected)</label>\n <div class=\"wiz-field-list\">\n @for (f of SelectedEntityFields; track f.Name) {\n <label class=\"wiz-field-row\">\n <input type=\"checkbox\" [(ngModel)]=\"NewEntityDocSelectedFields[f.Name]\">\n <span>{{ f.DisplayName }}</span>\n </label>\n }\n </div>\n </div>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"CreateEntityDocument()\" [disabled]=\"EntityDocSaving\">\n @if (EntityDocSaving) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating\u2026 }\n @else { <i class=\"fa-solid fa-check\"></i> Create Entity Document }\n </button>\n }\n\n <!-- Content Type -->\n @if (CurrentStep === 'content-type') {\n @if (HasAnyContentType) {\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Content type</label>\n <select class=\"mj-input\" [(ngModel)]=\"ContentTypeID\">\n <option value=\"\">Select content type\u2026</option>\n @for (opt of ContentTypeOptions; track opt.ID) {\n <option [value]=\"opt.ID\">{{ opt.Name }}</option>\n }\n </select>\n </div>\n } @else {\n <div class=\"wiz-callout\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n No content types exist yet. Create one from the Content Types tab, then return to this wizard.\n </div>\n }\n }\n\n <!-- Taxonomy Strategy -->\n @if (CurrentStep === 'taxonomy') {\n <p class=\"wiz-help\">\n Optionally generate a starter tag taxonomy by sampling this source's content.\n You can skip this and refine the taxonomy later.\n </p>\n <classify-seed-taxonomy\n [SourceID]=\"PendingSourceID\"\n [Provider]=\"Provider\"\n (Accepted)=\"OnTaxonomyAccepted($event)\">\n </classify-seed-taxonomy>\n }\n\n <!-- Domain Context -->\n @if (CurrentStep === 'domain-context') {\n <div class=\"at-form-group\">\n <label class=\"at-form-label\">Source guidance</label>\n <textarea class=\"mj-textarea\" rows=\"4\" [(ngModel)]=\"ClassificationContext\"\n placeholder=\"Free-text guidance for the classifier about this source's domain\u2026\"></textarea>\n </div>\n <div class=\"wiz-toggle-row\">\n <div>\n <div class=\"wiz-toggle-t\">Substitutive mode</div>\n <div class=\"wiz-toggle-d\">When on, this source's guidance replaces org/content-type context; off = added.</div>\n </div>\n <mj-switch [(ngModel)]=\"IsSubstitutiveMode\"></mj-switch>\n </div>\n }\n\n <!-- Review -->\n @if (CurrentStep === 'review') {\n <div class=\"wiz-review\">\n <div class=\"wiz-review-row\"><span>Name</span><strong>{{ SourceName || '\u2014' }}</strong></div>\n <div class=\"wiz-review-row\"><span>Source type</span><strong>{{ SourceTypeName }}</strong></div>\n @if (IsEntitySource) {\n <div class=\"wiz-review-row\"><span>Entity</span><strong>{{ SelectedEntityName || '\u2014' }}</strong></div>\n <div class=\"wiz-review-row\"><span>Entity document</span><strong>{{ EntityDocName }}</strong></div>\n } @else {\n <div class=\"wiz-review-row\"><span>Content type</span><strong>{{ ContentTypeName }}</strong></div>\n @if (SourceURL) {\n <div class=\"wiz-review-row\"><span>URL</span><strong>{{ SourceURL }}</strong></div>\n }\n }\n <div class=\"wiz-review-row\"><span>Domain context</span><strong>{{ ClassificationContext.trim() ? (ClassificationContextMode + ' \u00B7 set') : 'none' }}</strong></div>\n </div>\n }\n </div>\n </div>\n\n <mj-dialog-actions>\n <div class=\"wiz-actions\">\n @if (IsLastStep) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"Finish()\" [disabled]=\"Saving\">\n @if (Saving) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating\u2026 }\n @else { <i class=\"fa-solid fa-check\"></i> Create source }\n </button>\n } @else {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"Next()\" [disabled]=\"!CanGoNext || Saving\">\n @if (Saving) { <i class=\"fa-solid fa-spinner fa-spin\"></i> Working\u2026 }\n @else { Next <i class=\"fa-solid fa-arrow-right\"></i> }\n </button>\n }\n @if (StepIndex > 0) {\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"Back()\" [disabled]=\"Saving\">Back</button>\n }\n <span class=\"wiz-actions-spacer\"></span>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"Close()\">Cancel</button>\n </div>\n </mj-dialog-actions>\n</mj-dialog>\n", styles: [".wiz {\n display: flex;\n flex-direction: column;\n gap: 20px;\n width: 100%;\n /* Guarantees a comfortable form column even if the dialog is constrained;\n the dialog container itself is sized via [Width]. */\n min-width: min(620px, 100%);\n}\n\n/* \u2500\u2500 Step indicator row \u2500\u2500 */\n.wiz-progress {\n display: flex;\n align-items: center;\n gap: 0;\n width: 100%;\n}\n/* Each step is a row: the numbered circle + (for non-last steps) a growing connector line.\n The circle must NOT be the flex container that also hosts the connector \u2014 otherwise the\n connector renders inside the circle and squishes/clips the number. */\n.wiz-step-dot {\n display: flex;\n align-items: center;\n flex: 1 1 auto; /* steps share the row; the connector consumes the slack */\n}\n.wiz-step-dot:last-child {\n flex: 0 0 auto; /* last step is just the circle (no trailing connector) */\n}\n/* The numbered circle \u2014 fixed size so it never shrinks or clips the number. */\n.wiz-step-num {\n width: 30px;\n height: 30px;\n flex: 0 0 30px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-default);\n font-size: 0.8rem;\n font-weight: 600;\n transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;\n}\n/* Connector line AFTER each non-last circle so the indicator reads as a single track. */\n.wiz-step-dot:not(:last-child)::after {\n content: '';\n flex: 1 1 auto;\n height: 2px;\n margin: 0 6px;\n min-width: 16px;\n background: var(--mj-border-default);\n}\n.wiz-step-dot.active .wiz-step-num {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n.wiz-step-dot.done .wiz-step-num {\n background: color-mix(in srgb, var(--mj-brand-primary) 18%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n}\n.wiz-step-dot.done:not(:last-child)::after,\n.wiz-step-dot.active:not(:last-child)::after {\n background: color-mix(in srgb, var(--mj-brand-primary) 40%, var(--mj-border-default));\n}\n\n.wiz-step-title {\n font-size: 0.95rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.wiz-step-title .wiz-step-counter {\n color: var(--mj-text-muted);\n font-weight: 500;\n margin-right: 8px;\n}\n\n/* \u2500\u2500 Body \u2500\u2500 */\n.wiz-body {\n display: flex;\n flex-direction: column;\n gap: 16px;\n min-height: 220px;\n width: 100%;\n}\n.wiz-help {\n margin: 0;\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n line-height: 1.5;\n}\n.wiz-callout {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 12px 14px;\n background: color-mix(in srgb, var(--mj-status-info) 8%, var(--mj-bg-surface));\n border: 1px solid var(--mj-status-info-border, var(--mj-border-default));\n border-radius: 8px;\n font-size: 0.85rem;\n color: var(--mj-text-secondary);\n line-height: 1.45;\n}\n.wiz-callout i { color: var(--mj-status-info); margin-top: 2px; }\n.wiz-callout.ok { background: color-mix(in srgb, var(--mj-status-success) 8%, var(--mj-bg-surface)); }\n.wiz-callout.ok i { color: var(--mj-status-success); }\n.wiz-field-list {\n max-height: 220px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n padding: 8px 10px;\n}\n.wiz-field-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 0.85rem;\n color: var(--mj-text-primary);\n cursor: pointer;\n}\n.wiz-toggle-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 12px 14px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: 8px;\n background: var(--mj-bg-surface-card);\n}\n.wiz-toggle-t {\n font-size: 0.88rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.wiz-toggle-d {\n font-size: 0.78rem;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.4;\n}\n.wiz-review {\n display: flex;\n flex-direction: column;\n gap: 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n.wiz-review-row {\n display: flex;\n justify-content: space-between;\n gap: 16px;\n padding: 11px 16px;\n font-size: 0.86rem;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.wiz-review-row:last-child { border-bottom: none; }\n.wiz-review-row span { color: var(--mj-text-muted); }\n.wiz-review-row strong { color: var(--mj-text-primary); }\n\n/* \u2500\u2500 Footer actions: primary LEFT, Back, Cancel pushed RIGHT (MJ convention) \u2500\u2500 */\n.wiz-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n width: 100%;\n}\n.wiz-actions .wiz-actions-spacer {\n flex: 1 1 auto;\n}\n\n/* \u2500\u2500 Form fields \u2500\u2500 */\n.at-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n width: 100%;\n}\n.at-form-label {\n font-size: 0.82rem;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n.at-form-group .mj-input,\n.at-form-group .mj-textarea {\n width: 100%;\n}\n"] }]
|
|
902
|
+
}], null, { Created: [{
|
|
903
|
+
type: Output
|
|
904
|
+
}], Cancelled: [{
|
|
905
|
+
type: Output
|
|
906
|
+
}] }); })();
|
|
907
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClassifySetupWizardComponent, { className: "ClassifySetupWizardComponent", filePath: "src/AI/components/autotagging/dialogs/classify-setup-wizard.component.ts", lineNumber: 48 }); })();
|
|
908
|
+
//# sourceMappingURL=classify-setup-wizard.component.js.map
|