@memberjunction/ng-core-entity-forms 5.30.1 → 5.31.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/lib/__tests__/content-source-form.test.d.ts +2 -0
- package/dist/lib/__tests__/content-source-form.test.d.ts.map +1 -0
- package/dist/lib/__tests__/content-source-form.test.js +183 -0
- package/dist/lib/__tests__/content-source-form.test.js.map +1 -0
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +15 -15
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +9 -7
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +11 -9
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +6 -5
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +6 -4
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +3 -3
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +6 -6
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +7 -5
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +3 -3
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +12 -12
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/ContentSources/content-source-form.component.d.ts +59 -5
- package/dist/lib/custom/ContentSources/content-source-form.component.d.ts.map +1 -1
- package/dist/lib/custom/ContentSources/content-source-form.component.js +379 -34
- package/dist/lib/custom/ContentSources/content-source-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +5 -5
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +10 -10
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts +2 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +9 -7
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +17 -17
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +2 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +7 -6
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +2 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +10 -8
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +2 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +9 -7
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +8 -8
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +3 -2
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +8 -6
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +7 -7
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +5 -5
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +8 -8
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -6
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +2 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +8 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +9 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +15 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +3 -2
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +10 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +6 -4
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +46 -28
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +10 -10
- package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +106 -88
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +181 -61
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js +63 -0
- package/dist/lib/generated/Entities/MJTagScope/mjtagscope.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js +95 -0
- package/dist/lib/generated/Entities/MJTagSuggestion/mjtagsuggestion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js +63 -0
- package/dist/lib/generated/Entities/MJTagSynonym/mjtagsynonym.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +199 -181
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +51 -48
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +27 -18
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts +3 -2
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +8 -6
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +37 -35
|
@@ -9,7 +9,10 @@ import { RegisterClass } from '@memberjunction/global';
|
|
|
9
9
|
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
10
10
|
import { MJContentSourceFormComponent } from '../../generated/Entities/MJContentSource/mjcontentsource.form.component';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@
|
|
12
|
+
import * as i1 from "@angular/forms";
|
|
13
|
+
import * as i2 from "@memberjunction/ng-base-forms";
|
|
14
|
+
import * as i3 from "@angular/common";
|
|
15
|
+
const _forTrack0 = ($index, $item) => $item.value;
|
|
13
16
|
function MJContentSourceFormComponentExtended_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
14
17
|
i0.ɵɵelement(0, "mj-form-field", 4);
|
|
15
18
|
} if (rf & 2) {
|
|
@@ -17,37 +20,91 @@ function MJContentSourceFormComponentExtended_Conditional_4_Template(rf, ctx) {
|
|
|
17
20
|
i0.ɵɵproperty("Record", ctx_r0.record)("ShowLabel", true)("EditMode", ctx_r0.EditMode)("FormContext", ctx_r0.formContext);
|
|
18
21
|
} }
|
|
19
22
|
function MJContentSourceFormComponentExtended_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
-
i0.ɵɵelement(0, "mj-form-field",
|
|
23
|
+
i0.ɵɵelement(0, "mj-form-field", 44)(1, "mj-form-field", 45);
|
|
21
24
|
} if (rf & 2) {
|
|
22
25
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
23
26
|
i0.ɵɵproperty("Record", ctx_r0.record)("ShowLabel", true)("EditMode", ctx_r0.EditMode)("FormContext", ctx_r0.formContext);
|
|
24
27
|
i0.ɵɵadvance();
|
|
25
28
|
i0.ɵɵproperty("Record", ctx_r0.record)("ShowLabel", true)("EditMode", ctx_r0.EditMode)("FormContext", ctx_r0.formContext);
|
|
26
29
|
} }
|
|
27
|
-
function
|
|
30
|
+
function MJContentSourceFormComponentExtended_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
28
31
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
29
|
-
i0.ɵɵelementStart(0, "div"
|
|
30
|
-
i0.ɵɵlistener("
|
|
32
|
+
i0.ɵɵelementStart(0, "div", 46);
|
|
33
|
+
i0.ɵɵlistener("click", function MJContentSourceFormComponentExtended_For_17_Template_div_click_0_listener() { const m_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.EditMode ? ctx_r0.SetMode(m_r3.value) : null); });
|
|
34
|
+
i0.ɵɵelement(1, "i");
|
|
35
|
+
i0.ɵɵelementStart(2, "div", 47);
|
|
36
|
+
i0.ɵɵtext(3);
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
i0.ɵɵelementStart(4, "div", 48);
|
|
39
|
+
i0.ɵɵtext(5);
|
|
40
|
+
i0.ɵɵelementEnd()();
|
|
41
|
+
} if (rf & 2) {
|
|
42
|
+
const m_r3 = ctx.$implicit;
|
|
43
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
44
|
+
i0.ɵɵclassProp("selected", ctx_r0.CurrentMode === m_r3.value);
|
|
45
|
+
i0.ɵɵadvance();
|
|
46
|
+
i0.ɵɵclassMap(i0.ɵɵinterpolate1("fa-solid ", m_r3.icon, " ic"));
|
|
47
|
+
i0.ɵɵadvance(2);
|
|
48
|
+
i0.ɵɵtextInterpolate(m_r3.label);
|
|
49
|
+
i0.ɵɵadvance(2);
|
|
50
|
+
i0.ɵɵtextInterpolate(m_r3.desc);
|
|
51
|
+
} }
|
|
52
|
+
function MJContentSourceFormComponentExtended_Conditional_75_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
i0.ɵɵelementStart(0, "div", 30);
|
|
54
|
+
i0.ɵɵelement(1, "i", 49);
|
|
55
|
+
i0.ɵɵtext(2);
|
|
56
|
+
i0.ɵɵelementEnd();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
59
|
+
i0.ɵɵadvance(2);
|
|
60
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.ThresholdValidationMessage);
|
|
61
|
+
} }
|
|
62
|
+
function MJContentSourceFormComponentExtended_Conditional_76_Template(rf, ctx) { if (rf & 1) {
|
|
63
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
64
|
+
i0.ɵɵtext(1, " Scores \u2265 ");
|
|
65
|
+
i0.ɵɵelementStart(2, "strong");
|
|
66
|
+
i0.ɵɵtext(3);
|
|
67
|
+
i0.ɵɵpipe(4, "number");
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
i0.ɵɵtext(5, " auto-apply. Scores in ");
|
|
70
|
+
i0.ɵɵelementStart(6, "strong");
|
|
71
|
+
i0.ɵɵtext(7);
|
|
72
|
+
i0.ɵɵpipe(8, "number");
|
|
73
|
+
i0.ɵɵpipe(9, "number");
|
|
74
|
+
i0.ɵɵelementEnd();
|
|
75
|
+
i0.ɵɵtext(10, " route to the suggestion inbox. Below that, the run falls through to handleNoMatch. ");
|
|
76
|
+
i0.ɵɵelementEnd();
|
|
77
|
+
} if (rf & 2) {
|
|
78
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
79
|
+
i0.ɵɵadvance(3);
|
|
80
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(4, 3, ctx_r0.MatchThresholdValue, "1.2-2"));
|
|
81
|
+
i0.ɵɵadvance(4);
|
|
82
|
+
i0.ɵɵtextInterpolate2("[", i0.ɵɵpipeBind2(8, 6, ctx_r0.SuggestThresholdValue, "1.2-2"), ", ", i0.ɵɵpipeBind2(9, 9, ctx_r0.MatchThresholdValue, "1.2-2"), ")");
|
|
83
|
+
} }
|
|
84
|
+
function MJContentSourceFormComponentExtended_Conditional_112_Template(rf, ctx) { if (rf & 1) {
|
|
85
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
86
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 50);
|
|
87
|
+
i0.ɵɵlistener("Navigate", function MJContentSourceFormComponentExtended_Conditional_112_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnFormNavigate($event)); })("AfterDataLoad", function MJContentSourceFormComponentExtended_Conditional_112_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetSectionRowCount("mJContentItems", $event.totalRowCount)); });
|
|
31
88
|
i0.ɵɵelementEnd()();
|
|
32
89
|
} if (rf & 2) {
|
|
33
90
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
34
91
|
i0.ɵɵadvance();
|
|
35
92
|
i0.ɵɵproperty("Params", ctx_r0.BuildRelationshipViewParamsByEntityName("MJ: Content Items", "ContentSourceID"))("NewRecordValues", ctx_r0.NewRecordValues("MJ: Content Items"))("AllowLoad", ctx_r0.IsSectionExpanded("mJContentItems"))("ShowToolbar", false);
|
|
36
93
|
} }
|
|
37
|
-
function
|
|
38
|
-
const
|
|
39
|
-
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid",
|
|
40
|
-
i0.ɵɵlistener("Navigate", function
|
|
94
|
+
function MJContentSourceFormComponentExtended_Conditional_114_Template(rf, ctx) { if (rf & 1) {
|
|
95
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
96
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 50);
|
|
97
|
+
i0.ɵɵlistener("Navigate", function MJContentSourceFormComponentExtended_Conditional_114_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnFormNavigate($event)); })("AfterDataLoad", function MJContentSourceFormComponentExtended_Conditional_114_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetSectionRowCount("mJContentProcessRuns", $event.totalRowCount)); });
|
|
41
98
|
i0.ɵɵelementEnd()();
|
|
42
99
|
} if (rf & 2) {
|
|
43
100
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
44
101
|
i0.ɵɵadvance();
|
|
45
102
|
i0.ɵɵproperty("Params", ctx_r0.BuildRelationshipViewParamsByEntityName("MJ: Content Process Runs", "SourceID"))("NewRecordValues", ctx_r0.NewRecordValues("MJ: Content Process Runs"))("AllowLoad", ctx_r0.IsSectionExpanded("mJContentProcessRuns"))("ShowToolbar", false);
|
|
46
103
|
} }
|
|
47
|
-
function
|
|
48
|
-
const
|
|
49
|
-
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid",
|
|
50
|
-
i0.ɵɵlistener("Navigate", function
|
|
104
|
+
function MJContentSourceFormComponentExtended_Conditional_116_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
106
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 50);
|
|
107
|
+
i0.ɵɵlistener("Navigate", function MJContentSourceFormComponentExtended_Conditional_116_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OnFormNavigate($event)); })("AfterDataLoad", function MJContentSourceFormComponentExtended_Conditional_116_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.SetSectionRowCount("mJContentSourceParams", $event.totalRowCount)); });
|
|
51
108
|
i0.ɵɵelementEnd()();
|
|
52
109
|
} if (rf & 2) {
|
|
53
110
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -55,13 +112,36 @@ function MJContentSourceFormComponentExtended_Conditional_22_Template(rf, ctx) {
|
|
|
55
112
|
i0.ɵɵproperty("Params", ctx_r0.BuildRelationshipViewParamsByEntityName("MJ: Content Source Params", "ContentSourceID"))("NewRecordValues", ctx_r0.NewRecordValues("MJ: Content Source Params"))("AllowLoad", ctx_r0.IsSectionExpanded("mJContentSourceParams"))("ShowToolbar", false);
|
|
56
113
|
} }
|
|
57
114
|
/**
|
|
58
|
-
* Custom Content Source form
|
|
59
|
-
* (EntityID, EntityDocumentID) based on the selected ContentSourceType.
|
|
115
|
+
* Custom Content Source form.
|
|
60
116
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
117
|
+
* Adds two responsibilities on top of the generated form:
|
|
118
|
+
* 1. Conditional Connection Details (Entity-source vs URL-source) — pre-existing.
|
|
119
|
+
* 2. Tag Pipeline Configuration — Option-B "dense form" surface for the typed
|
|
120
|
+
* `IContentSourceConfiguration` knobs (mode, thresholds, scope, budgets) that
|
|
121
|
+
* otherwise would only be editable as raw JSON. The Configuration field still
|
|
122
|
+
* exists below as a code editor for advanced overrides.
|
|
123
|
+
*
|
|
124
|
+
* The pipeline knobs read/write through the typed `ConfigurationObject` accessor
|
|
125
|
+
* that CodeGen emits on `MJContentSourceEntity`, so changes round-trip through the
|
|
126
|
+
* existing JSON column. There's no separate save path.
|
|
63
127
|
*/
|
|
64
128
|
let MJContentSourceFormComponentExtended = class MJContentSourceFormComponentExtended extends MJContentSourceFormComponent {
|
|
129
|
+
constructor() {
|
|
130
|
+
super(...arguments);
|
|
131
|
+
this.TaxonomyModes = [
|
|
132
|
+
{ value: 'constrained', label: 'Constrained', icon: 'fa-lock', desc: 'Curated only — every novel name → suggestion queue.' },
|
|
133
|
+
{ value: 'auto-grow', label: 'AutoGrow', icon: 'fa-seedling', desc: 'Bounded auto-creation under TagRoot, gated by per-tag governance.' },
|
|
134
|
+
{ value: 'free-flow', label: 'FreeFlow', icon: 'fa-water', desc: 'Anything goes — auto-create root-level tags as needed.' },
|
|
135
|
+
];
|
|
136
|
+
/** "hybrid" is supported by the engine but not yet enumerated in the JSON-schema literal type;
|
|
137
|
+
* we expose it as a compatibility option that maps to the same field. */
|
|
138
|
+
this.HybridModeOption = {
|
|
139
|
+
value: 'auto-grow', // engine accepts 'hybrid' but the typed literal is constrained — TODO: widen schema
|
|
140
|
+
label: 'Hybrid',
|
|
141
|
+
icon: 'fa-balance-scale',
|
|
142
|
+
desc: 'Auto-match enabled, but never auto-creates. Ambiguous matches → suggestion queue.',
|
|
143
|
+
};
|
|
144
|
+
}
|
|
65
145
|
/**
|
|
66
146
|
* Whether the current source type is "Entity", which enables
|
|
67
147
|
* EntityID and EntityDocumentID fields and hides the URL field.
|
|
@@ -72,8 +152,122 @@ let MJContentSourceFormComponentExtended = class MJContentSourceFormComponentExt
|
|
|
72
152
|
const typeName = this.record.ContentSourceType;
|
|
73
153
|
return typeName != null && typeName.trim().toLowerCase() === 'entity';
|
|
74
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Read the typed Configuration object — never null, defaults applied where
|
|
157
|
+
* the JSON didn't supply them. Writing back is via `setConfig` so we keep
|
|
158
|
+
* the record dirty and persist through the standard Save() path.
|
|
159
|
+
*/
|
|
160
|
+
get Config() {
|
|
161
|
+
const raw = this.record?.ConfigurationObject;
|
|
162
|
+
return raw ?? {};
|
|
163
|
+
}
|
|
164
|
+
setConfig(patch) {
|
|
165
|
+
if (!this.record)
|
|
166
|
+
return;
|
|
167
|
+
const current = this.record.ConfigurationObject ?? {};
|
|
168
|
+
const merged = { ...current, ...patch };
|
|
169
|
+
// Setting via the typed accessor updates Configuration JSON + marks dirty.
|
|
170
|
+
this.record.ConfigurationObject = merged;
|
|
171
|
+
}
|
|
172
|
+
// ---------- Mode -------------------------------------------------------
|
|
173
|
+
get CurrentMode() {
|
|
174
|
+
return this.Config.TagTaxonomyMode ?? 'auto-grow';
|
|
175
|
+
}
|
|
176
|
+
SetMode(mode) {
|
|
177
|
+
this.setConfig({ TagTaxonomyMode: mode });
|
|
178
|
+
}
|
|
179
|
+
// ---------- Thresholds -------------------------------------------------
|
|
180
|
+
get MatchThresholdValue() {
|
|
181
|
+
return this.Config.TagMatchThreshold ?? 0.85;
|
|
182
|
+
}
|
|
183
|
+
set MatchThresholdValue(v) {
|
|
184
|
+
const clamped = Math.max(0, Math.min(1, Number(v) || 0));
|
|
185
|
+
const cur = this.Config.SuggestThreshold;
|
|
186
|
+
const patch = { TagMatchThreshold: clamped };
|
|
187
|
+
// Keep SuggestThreshold below MatchThreshold; if currently above (or unset), pin it.
|
|
188
|
+
if (cur == null || cur >= clamped)
|
|
189
|
+
patch.SuggestThreshold = Math.max(0, clamped - 0.05);
|
|
190
|
+
this.setConfig(patch);
|
|
191
|
+
}
|
|
192
|
+
get SuggestThresholdValue() {
|
|
193
|
+
return this.Config.SuggestThreshold ?? Math.max(0, this.MatchThresholdValue - 0.05);
|
|
194
|
+
}
|
|
195
|
+
set SuggestThresholdValue(v) {
|
|
196
|
+
const clamped = Math.max(0, Math.min(this.MatchThresholdValue, Number(v) || 0));
|
|
197
|
+
this.setConfig({ SuggestThreshold: clamped });
|
|
198
|
+
}
|
|
199
|
+
get ThresholdValidationMessage() {
|
|
200
|
+
const m = this.Config.TagMatchThreshold;
|
|
201
|
+
const s = this.Config.SuggestThreshold;
|
|
202
|
+
if (m != null && s != null && s >= m) {
|
|
203
|
+
return 'SuggestThreshold must be lower than MatchThreshold.';
|
|
204
|
+
}
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
// ---------- Tag root + share-with-LLM ----------------------------------
|
|
208
|
+
get TagRootIDValue() {
|
|
209
|
+
return this.Config.TagRootID ?? null;
|
|
210
|
+
}
|
|
211
|
+
set TagRootIDValue(v) {
|
|
212
|
+
this.setConfig({ TagRootID: v ?? null });
|
|
213
|
+
}
|
|
214
|
+
get ShareTaxonomyValue() {
|
|
215
|
+
return this.Config.ShareTaxonomyWithLLM !== false; // default true
|
|
216
|
+
}
|
|
217
|
+
set ShareTaxonomyValue(v) {
|
|
218
|
+
this.setConfig({ ShareTaxonomyWithLLM: v });
|
|
219
|
+
}
|
|
220
|
+
get EnableVectorizationValue() {
|
|
221
|
+
return this.Config.EnableVectorization !== false; // default true
|
|
222
|
+
}
|
|
223
|
+
set EnableVectorizationValue(v) {
|
|
224
|
+
this.setConfig({ EnableVectorization: v });
|
|
225
|
+
}
|
|
226
|
+
// ---------- Budgets ----------------------------------------------------
|
|
227
|
+
get MaxNewTagsPerRunValue() {
|
|
228
|
+
return this.Config.MaxNewTagsPerRun ?? null;
|
|
229
|
+
}
|
|
230
|
+
set MaxNewTagsPerRunValue(v) {
|
|
231
|
+
this.setConfig({ MaxNewTagsPerRun: this.normalizeNullableNumber(v) });
|
|
232
|
+
}
|
|
233
|
+
get MaxNewTagsPerItemValue() {
|
|
234
|
+
return this.Config.MaxNewTagsPerItem ?? null;
|
|
235
|
+
}
|
|
236
|
+
set MaxNewTagsPerItemValue(v) {
|
|
237
|
+
this.setConfig({ MaxNewTagsPerItem: this.normalizeNullableNumber(v) });
|
|
238
|
+
}
|
|
239
|
+
get MaxTokensPerRunValue() {
|
|
240
|
+
return this.Config.MaxTokensPerRun ?? null;
|
|
241
|
+
}
|
|
242
|
+
set MaxTokensPerRunValue(v) {
|
|
243
|
+
this.setConfig({ MaxTokensPerRun: this.normalizeNullableNumber(v) });
|
|
244
|
+
}
|
|
245
|
+
get MaxCostPerRunValue() {
|
|
246
|
+
return this.Config.MaxCostPerRun ?? null;
|
|
247
|
+
}
|
|
248
|
+
set MaxCostPerRunValue(v) {
|
|
249
|
+
this.setConfig({ MaxCostPerRun: this.normalizeNullableNumber(v) });
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Coerce a possibly-blank input into a typed number. The IContentSourceConfiguration
|
|
253
|
+
* interface uses optional properties (`?: number`), so "no value" is `undefined`,
|
|
254
|
+
* not `null`. Returning undefined deletes the key from the persisted JSON when the
|
|
255
|
+
* setConfig spread is applied.
|
|
256
|
+
*/
|
|
257
|
+
normalizeNullableNumber(v) {
|
|
258
|
+
if (v == null)
|
|
259
|
+
return undefined;
|
|
260
|
+
if (typeof v === 'string') {
|
|
261
|
+
const trimmed = v.trim();
|
|
262
|
+
if (trimmed === '')
|
|
263
|
+
return undefined;
|
|
264
|
+
const n = Number(trimmed);
|
|
265
|
+
return Number.isFinite(n) ? n : undefined;
|
|
266
|
+
}
|
|
267
|
+
return Number.isFinite(v) ? v : undefined;
|
|
268
|
+
}
|
|
75
269
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJContentSourceFormComponentExtended_BaseFactory; return function MJContentSourceFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJContentSourceFormComponentExtended_BaseFactory || (ɵMJContentSourceFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJContentSourceFormComponentExtended)))(__ngFactoryType__ || MJContentSourceFormComponentExtended); }; })(); }
|
|
76
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJContentSourceFormComponentExtended, selectors: [["mj-content-source-form-extended"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls:
|
|
270
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJContentSourceFormComponentExtended, selectors: [["mj-content-source-form-extended"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 117, vars: 96, consts: [[3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent"], ["SectionKey", "connectionDetails", "SectionName", "Connection Details", "Icon", "fa fa-align-left", 3, "Form", "FormContext"], ["FieldName", "Name", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ContentSourceTypeID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "URL", "Type", "textarea", "LinkType", "URL", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "contentClassification", "SectionName", "Content Classification", "Icon", "fa fa-info-circle", 3, "Form", "FormContext"], ["FieldName", "ContentTypeID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ContentFileTypeID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "aIIndexing", "SectionName", "AI & Indexing", "Icon", "fa fa-info-circle", 3, "Form", "FormContext"], ["FieldName", "EmbeddingModelID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "VectorIndexID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "tagPipelineConfiguration", "SectionName", "Tag Pipeline Configuration", "Icon", "fa fa-sliders-h", 3, "Form", "FormContext"], [2, "font-size", "11px", "text-transform", "uppercase", "letter-spacing", "0.06em", "color", "var(--mj-text-muted)", "margin", "4px 0 8px", "font-weight", "700"], [1, "cs-mode-grid"], [1, "cs-mode-card", 3, "selected"], [2, "font-size", "11px", "text-transform", "uppercase", "letter-spacing", "0.06em", "color", "var(--mj-text-muted)", "margin", "16px 0 8px", "font-weight", "700"], [1, "cs-grid"], [1, "cs-field"], [1, "cs-input", 3, "ngModelChange", "disabled", "ngModel"], [1, "hint"], ["disabled", "", 1, "cs-input", 3, "value"], [1, "cs-toggle-row"], [1, "label"], [1, "t"], [1, "d"], [1, "cs-switch", 3, "click"], [1, "cs-threshold-pair"], ["type", "range", "min", "0.50", "max", "1.00", "step", "0.01", 1, "cs-slider", 3, "ngModelChange", "disabled", "ngModel"], [1, "cs-slider-row"], [1, "cur"], [1, "cs-validation"], [1, "cs-nudge"], [2, "text-transform", "none", "letter-spacing", "0", "color", "var(--mj-text-muted)", "font-weight", "400", "margin-left", "8px"], [1, "cs-grid", "four"], ["type", "number", "min", "0", 1, "cs-input", 3, "ngModelChange", "disabled", "ngModel"], ["type", "number", "min", "0", "step", "0.01", 1, "cs-input", 3, "ngModelChange", "disabled", "ngModel"], ["SectionKey", "sourceConfiguration", "SectionName", "Configuration JSON (advanced)", "Icon", "fa fa-code", 3, "Form", "FormContext", "DefaultExpanded"], ["FieldName", "Configuration", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "systemMetadata", "SectionName", "System Metadata", "Icon", "fa fa-cog", 3, "Form", "FormContext"], ["FieldName", "__mj_CreatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "__mj_UpdatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "mJContentItems", "SectionName", "Content Items", "Icon", "fa fa-file-alt", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJContentProcessRuns", "SectionName", "Content Process Runs", "Icon", "fa fa-cogs", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJContentSourceParams", "SectionName", "Content Source Params", "Icon", "fa fa-cogs", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["FieldName", "EntityID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "EntityDocumentID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [1, "cs-mode-card", 3, "click"], [1, "nm"], [1, "desc"], [1, "fa-solid", "fa-circle-exclamation"], [3, "Navigate", "AfterDataLoad", "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"]], template: function MJContentSourceFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
77
271
|
i0.ɵɵelementStart(0, "mj-record-form-container", 0);
|
|
78
272
|
i0.ɵɵlistener("Navigate", function MJContentSourceFormComponentExtended_Template_mj_record_form_container_Navigate_0_listener($event) { return ctx.OnFormNavigate($event); })("DeleteRequested", function MJContentSourceFormComponentExtended_Template_mj_record_form_container_DeleteRequested_0_listener() { return ctx.OnDeleteRequested(); })("FavoriteToggled", function MJContentSourceFormComponentExtended_Template_mj_record_form_container_FavoriteToggled_0_listener() { return ctx.OnFavoriteToggled(); })("HistoryRequested", function MJContentSourceFormComponentExtended_Template_mj_record_form_container_HistoryRequested_0_listener() { return ctx.OnHistoryRequested(); })("ListManagementRequested", function MJContentSourceFormComponentExtended_Template_mj_record_form_container_ListManagementRequested_0_listener() { return ctx.OnListManagementRequested(); });
|
|
79
273
|
i0.ɵɵelementStart(1, "mj-collapsible-panel", 1);
|
|
@@ -87,20 +281,141 @@ let MJContentSourceFormComponentExtended = class MJContentSourceFormComponentExt
|
|
|
87
281
|
i0.ɵɵelementStart(9, "mj-collapsible-panel", 8);
|
|
88
282
|
i0.ɵɵelement(10, "mj-form-field", 9)(11, "mj-form-field", 10);
|
|
89
283
|
i0.ɵɵelementEnd();
|
|
90
|
-
i0.ɵɵelementStart(12, "mj-collapsible-panel", 11);
|
|
91
|
-
i0.ɵɵ
|
|
284
|
+
i0.ɵɵelementStart(12, "mj-collapsible-panel", 11)(13, "h4", 12);
|
|
285
|
+
i0.ɵɵtext(14, " Taxonomy mode ");
|
|
286
|
+
i0.ɵɵelementEnd();
|
|
287
|
+
i0.ɵɵelementStart(15, "div", 13);
|
|
288
|
+
i0.ɵɵrepeaterCreate(16, MJContentSourceFormComponentExtended_For_17_Template, 6, 7, "div", 14, _forTrack0);
|
|
289
|
+
i0.ɵɵelementEnd();
|
|
290
|
+
i0.ɵɵelementStart(18, "h4", 15);
|
|
291
|
+
i0.ɵɵtext(19, " Scope & tag root ");
|
|
292
|
+
i0.ɵɵelementEnd();
|
|
293
|
+
i0.ɵɵelementStart(20, "div", 16)(21, "div", 17)(22, "label");
|
|
294
|
+
i0.ɵɵtext(23, "Tag root (TagRootID)");
|
|
295
|
+
i0.ɵɵelementEnd();
|
|
296
|
+
i0.ɵɵelementStart(24, "input", 18);
|
|
297
|
+
i0.ɵɵlistener("ngModelChange", function MJContentSourceFormComponentExtended_Template_input_ngModelChange_24_listener($event) { return ctx.TagRootIDValue = $event; });
|
|
298
|
+
i0.ɵɵelementEnd();
|
|
299
|
+
i0.ɵɵelementStart(25, "span", 19);
|
|
300
|
+
i0.ɵɵtext(26, "Restricts the LLM's visible taxonomy + auto-grow target. Leave blank for full taxonomy.");
|
|
301
|
+
i0.ɵɵelementEnd()();
|
|
302
|
+
i0.ɵɵelementStart(27, "div", 17)(28, "label");
|
|
303
|
+
i0.ɵɵtext(29, "Embedding model (legacy ContentSource field)");
|
|
304
|
+
i0.ɵɵelementEnd();
|
|
305
|
+
i0.ɵɵelement(30, "input", 20);
|
|
306
|
+
i0.ɵɵelementStart(31, "span", 19);
|
|
307
|
+
i0.ɵɵtext(32, "Set in the AI & Indexing section above.");
|
|
308
|
+
i0.ɵɵelementEnd()()();
|
|
309
|
+
i0.ɵɵelementStart(33, "div", 21)(34, "div", 22)(35, "span", 23);
|
|
310
|
+
i0.ɵɵtext(36, "Share full taxonomy with the LLM");
|
|
311
|
+
i0.ɵɵelementEnd();
|
|
312
|
+
i0.ɵɵelementStart(37, "span", 24);
|
|
313
|
+
i0.ɵɵtext(38, "When on, the LLM prompt includes the visible (scope-filtered) taxonomy. Larger taxonomies \u2192 higher token cost.");
|
|
314
|
+
i0.ɵɵelementEnd()();
|
|
315
|
+
i0.ɵɵelementStart(39, "div", 25);
|
|
316
|
+
i0.ɵɵlistener("click", function MJContentSourceFormComponentExtended_Template_div_click_39_listener() { return ctx.EditMode ? ctx.ShareTaxonomyValue = !ctx.ShareTaxonomyValue : null; });
|
|
317
|
+
i0.ɵɵelementEnd()();
|
|
318
|
+
i0.ɵɵelementStart(40, "div", 21)(41, "div", 22)(42, "span", 23);
|
|
319
|
+
i0.ɵɵtext(43, "Vectorize new content");
|
|
320
|
+
i0.ɵɵelementEnd();
|
|
321
|
+
i0.ɵɵelementStart(44, "span", 24);
|
|
322
|
+
i0.ɵɵtext(45, "When off, this source skips vectorization (autotagger still runs).");
|
|
323
|
+
i0.ɵɵelementEnd()();
|
|
324
|
+
i0.ɵɵelementStart(46, "div", 25);
|
|
325
|
+
i0.ɵɵlistener("click", function MJContentSourceFormComponentExtended_Template_div_click_46_listener() { return ctx.EditMode ? ctx.EnableVectorizationValue = !ctx.EnableVectorizationValue : null; });
|
|
326
|
+
i0.ɵɵelementEnd()();
|
|
327
|
+
i0.ɵɵelementStart(47, "h4", 15);
|
|
328
|
+
i0.ɵɵtext(48, " Thresholds ");
|
|
329
|
+
i0.ɵɵelementEnd();
|
|
330
|
+
i0.ɵɵelementStart(49, "div", 26)(50, "div", 16)(51, "div", 17)(52, "label");
|
|
331
|
+
i0.ɵɵtext(53, "MatchThreshold (auto-apply)");
|
|
332
|
+
i0.ɵɵelementEnd();
|
|
333
|
+
i0.ɵɵelementStart(54, "input", 27);
|
|
334
|
+
i0.ɵɵlistener("ngModelChange", function MJContentSourceFormComponentExtended_Template_input_ngModelChange_54_listener($event) { return ctx.MatchThresholdValue = $event; });
|
|
335
|
+
i0.ɵɵelementEnd();
|
|
336
|
+
i0.ɵɵelementStart(55, "div", 28)(56, "span");
|
|
337
|
+
i0.ɵɵtext(57, "0.50");
|
|
338
|
+
i0.ɵɵelementEnd();
|
|
339
|
+
i0.ɵɵelementStart(58, "span", 29);
|
|
340
|
+
i0.ɵɵtext(59);
|
|
341
|
+
i0.ɵɵpipe(60, "number");
|
|
342
|
+
i0.ɵɵelementEnd();
|
|
343
|
+
i0.ɵɵelementStart(61, "span");
|
|
344
|
+
i0.ɵɵtext(62, "1.00");
|
|
345
|
+
i0.ɵɵelementEnd()()();
|
|
346
|
+
i0.ɵɵelementStart(63, "div", 17)(64, "label");
|
|
347
|
+
i0.ɵɵtext(65, "SuggestThreshold (route to inbox)");
|
|
348
|
+
i0.ɵɵelementEnd();
|
|
349
|
+
i0.ɵɵelementStart(66, "input", 27);
|
|
350
|
+
i0.ɵɵlistener("ngModelChange", function MJContentSourceFormComponentExtended_Template_input_ngModelChange_66_listener($event) { return ctx.SuggestThresholdValue = $event; });
|
|
351
|
+
i0.ɵɵelementEnd();
|
|
352
|
+
i0.ɵɵelementStart(67, "div", 28)(68, "span");
|
|
353
|
+
i0.ɵɵtext(69, "0.50");
|
|
354
|
+
i0.ɵɵelementEnd();
|
|
355
|
+
i0.ɵɵelementStart(70, "span", 29);
|
|
356
|
+
i0.ɵɵtext(71);
|
|
357
|
+
i0.ɵɵpipe(72, "number");
|
|
358
|
+
i0.ɵɵelementEnd();
|
|
359
|
+
i0.ɵɵelementStart(73, "span");
|
|
360
|
+
i0.ɵɵtext(74, "1.00");
|
|
361
|
+
i0.ɵɵelementEnd()()()();
|
|
362
|
+
i0.ɵɵconditionalCreate(75, MJContentSourceFormComponentExtended_Conditional_75_Template, 3, 1, "div", 30)(76, MJContentSourceFormComponentExtended_Conditional_76_Template, 11, 12, "div", 31);
|
|
363
|
+
i0.ɵɵelementEnd();
|
|
364
|
+
i0.ɵɵelementStart(77, "h4", 15);
|
|
365
|
+
i0.ɵɵtext(78, " Volume & cost budgets ");
|
|
366
|
+
i0.ɵɵelementStart(79, "span", 32);
|
|
367
|
+
i0.ɵɵtext(80, "When a budget is hit the run pauses (resumes on next start).");
|
|
368
|
+
i0.ɵɵelementEnd()();
|
|
369
|
+
i0.ɵɵelementStart(81, "div", 33)(82, "div", 17)(83, "label");
|
|
370
|
+
i0.ɵɵtext(84, "Max new tags / run");
|
|
371
|
+
i0.ɵɵelementEnd();
|
|
372
|
+
i0.ɵɵelementStart(85, "input", 34);
|
|
373
|
+
i0.ɵɵlistener("ngModelChange", function MJContentSourceFormComponentExtended_Template_input_ngModelChange_85_listener($event) { return ctx.MaxNewTagsPerRunValue = $event; });
|
|
374
|
+
i0.ɵɵelementEnd();
|
|
375
|
+
i0.ɵɵelementStart(86, "span", 19);
|
|
376
|
+
i0.ɵɵtext(87, "unlimited if blank");
|
|
377
|
+
i0.ɵɵelementEnd()();
|
|
378
|
+
i0.ɵɵelementStart(88, "div", 17)(89, "label");
|
|
379
|
+
i0.ɵɵtext(90, "Max new tags / item");
|
|
380
|
+
i0.ɵɵelementEnd();
|
|
381
|
+
i0.ɵɵelementStart(91, "input", 34);
|
|
382
|
+
i0.ɵɵlistener("ngModelChange", function MJContentSourceFormComponentExtended_Template_input_ngModelChange_91_listener($event) { return ctx.MaxNewTagsPerItemValue = $event; });
|
|
383
|
+
i0.ɵɵelementEnd();
|
|
384
|
+
i0.ɵɵelementStart(92, "span", 19);
|
|
385
|
+
i0.ɵɵtext(93, "extras \u2192 suggestions");
|
|
386
|
+
i0.ɵɵelementEnd()();
|
|
387
|
+
i0.ɵɵelementStart(94, "div", 17)(95, "label");
|
|
388
|
+
i0.ɵɵtext(96, "Max tokens / run");
|
|
389
|
+
i0.ɵɵelementEnd();
|
|
390
|
+
i0.ɵɵelementStart(97, "input", 34);
|
|
391
|
+
i0.ɵɵlistener("ngModelChange", function MJContentSourceFormComponentExtended_Template_input_ngModelChange_97_listener($event) { return ctx.MaxTokensPerRunValue = $event; });
|
|
392
|
+
i0.ɵɵelementEnd();
|
|
393
|
+
i0.ɵɵelementStart(98, "span", 19);
|
|
394
|
+
i0.ɵɵtext(99, "across all LLM calls");
|
|
395
|
+
i0.ɵɵelementEnd()();
|
|
396
|
+
i0.ɵɵelementStart(100, "div", 17)(101, "label");
|
|
397
|
+
i0.ɵɵtext(102, "Max cost / run (USD)");
|
|
398
|
+
i0.ɵɵelementEnd();
|
|
399
|
+
i0.ɵɵelementStart(103, "input", 35);
|
|
400
|
+
i0.ɵɵlistener("ngModelChange", function MJContentSourceFormComponentExtended_Template_input_ngModelChange_103_listener($event) { return ctx.MaxCostPerRunValue = $event; });
|
|
401
|
+
i0.ɵɵelementEnd();
|
|
402
|
+
i0.ɵɵelementStart(104, "span", 19);
|
|
403
|
+
i0.ɵɵtext(105, "$ stops the run");
|
|
404
|
+
i0.ɵɵelementEnd()()()();
|
|
405
|
+
i0.ɵɵelementStart(106, "mj-collapsible-panel", 36);
|
|
406
|
+
i0.ɵɵelement(107, "mj-form-field", 37);
|
|
92
407
|
i0.ɵɵelementEnd();
|
|
93
|
-
i0.ɵɵelementStart(
|
|
94
|
-
i0.ɵɵelement(
|
|
408
|
+
i0.ɵɵelementStart(108, "mj-collapsible-panel", 38);
|
|
409
|
+
i0.ɵɵelement(109, "mj-form-field", 39)(110, "mj-form-field", 40);
|
|
95
410
|
i0.ɵɵelementEnd();
|
|
96
|
-
i0.ɵɵelementStart(
|
|
97
|
-
i0.ɵɵconditionalCreate(
|
|
411
|
+
i0.ɵɵelementStart(111, "mj-collapsible-panel", 41);
|
|
412
|
+
i0.ɵɵconditionalCreate(112, MJContentSourceFormComponentExtended_Conditional_112_Template, 2, 4, "div");
|
|
98
413
|
i0.ɵɵelementEnd();
|
|
99
|
-
i0.ɵɵelementStart(
|
|
100
|
-
i0.ɵɵconditionalCreate(
|
|
414
|
+
i0.ɵɵelementStart(113, "mj-collapsible-panel", 42);
|
|
415
|
+
i0.ɵɵconditionalCreate(114, MJContentSourceFormComponentExtended_Conditional_114_Template, 2, 4, "div");
|
|
101
416
|
i0.ɵɵelementEnd();
|
|
102
|
-
i0.ɵɵelementStart(
|
|
103
|
-
i0.ɵɵconditionalCreate(
|
|
417
|
+
i0.ɵɵelementStart(115, "mj-collapsible-panel", 43);
|
|
418
|
+
i0.ɵɵconditionalCreate(116, MJContentSourceFormComponentExtended_Conditional_116_Template, 2, 4, "div");
|
|
104
419
|
i0.ɵɵelementEnd()();
|
|
105
420
|
} if (rf & 2) {
|
|
106
421
|
i0.ɵɵproperty("Record", ctx.record)("FormComponent", ctx);
|
|
@@ -128,6 +443,36 @@ let MJContentSourceFormComponentExtended = class MJContentSourceFormComponentExt
|
|
|
128
443
|
i0.ɵɵproperty("Record", ctx.record)("ShowLabel", true)("EditMode", ctx.EditMode)("FormContext", ctx.formContext);
|
|
129
444
|
i0.ɵɵadvance();
|
|
130
445
|
i0.ɵɵproperty("Form", ctx)("FormContext", ctx.formContext);
|
|
446
|
+
i0.ɵɵadvance(4);
|
|
447
|
+
i0.ɵɵrepeater(ctx.TaxonomyModes);
|
|
448
|
+
i0.ɵɵadvance(8);
|
|
449
|
+
i0.ɵɵproperty("disabled", !ctx.EditMode)("ngModel", ctx.TagRootIDValue);
|
|
450
|
+
i0.ɵɵadvance(6);
|
|
451
|
+
i0.ɵɵproperty("value", ctx.record.EmbeddingModelID || "\u2014");
|
|
452
|
+
i0.ɵɵadvance(9);
|
|
453
|
+
i0.ɵɵclassProp("on", ctx.ShareTaxonomyValue);
|
|
454
|
+
i0.ɵɵadvance(7);
|
|
455
|
+
i0.ɵɵclassProp("on", ctx.EnableVectorizationValue);
|
|
456
|
+
i0.ɵɵadvance(8);
|
|
457
|
+
i0.ɵɵproperty("disabled", !ctx.EditMode)("ngModel", ctx.MatchThresholdValue);
|
|
458
|
+
i0.ɵɵadvance(5);
|
|
459
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(60, 90, ctx.MatchThresholdValue, "1.2-2"));
|
|
460
|
+
i0.ɵɵadvance(7);
|
|
461
|
+
i0.ɵɵproperty("disabled", !ctx.EditMode)("ngModel", ctx.SuggestThresholdValue);
|
|
462
|
+
i0.ɵɵadvance(5);
|
|
463
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(72, 93, ctx.SuggestThresholdValue, "1.2-2"));
|
|
464
|
+
i0.ɵɵadvance(4);
|
|
465
|
+
i0.ɵɵconditional(ctx.ThresholdValidationMessage ? 75 : 76);
|
|
466
|
+
i0.ɵɵadvance(10);
|
|
467
|
+
i0.ɵɵproperty("disabled", !ctx.EditMode)("ngModel", ctx.MaxNewTagsPerRunValue ?? "");
|
|
468
|
+
i0.ɵɵadvance(6);
|
|
469
|
+
i0.ɵɵproperty("disabled", !ctx.EditMode)("ngModel", ctx.MaxNewTagsPerItemValue ?? "");
|
|
470
|
+
i0.ɵɵadvance(6);
|
|
471
|
+
i0.ɵɵproperty("disabled", !ctx.EditMode)("ngModel", ctx.MaxTokensPerRunValue ?? "");
|
|
472
|
+
i0.ɵɵadvance(6);
|
|
473
|
+
i0.ɵɵproperty("disabled", !ctx.EditMode)("ngModel", ctx.MaxCostPerRunValue ?? "");
|
|
474
|
+
i0.ɵɵadvance(3);
|
|
475
|
+
i0.ɵɵproperty("Form", ctx)("FormContext", ctx.formContext)("DefaultExpanded", false);
|
|
131
476
|
i0.ɵɵadvance();
|
|
132
477
|
i0.ɵɵproperty("Record", ctx.record)("ShowLabel", true)("EditMode", ctx.EditMode)("FormContext", ctx.formContext);
|
|
133
478
|
i0.ɵɵadvance();
|
|
@@ -139,16 +484,16 @@ let MJContentSourceFormComponentExtended = class MJContentSourceFormComponentExt
|
|
|
139
484
|
i0.ɵɵadvance();
|
|
140
485
|
i0.ɵɵproperty("Form", ctx)("FormContext", ctx.formContext)("BadgeCount", ctx.GetSectionRowCount("mJContentItems"))("DefaultExpanded", false);
|
|
141
486
|
i0.ɵɵadvance();
|
|
142
|
-
i0.ɵɵconditional(ctx.record.IsSaved ?
|
|
487
|
+
i0.ɵɵconditional(ctx.record.IsSaved ? 112 : -1);
|
|
143
488
|
i0.ɵɵadvance();
|
|
144
489
|
i0.ɵɵproperty("Form", ctx)("FormContext", ctx.formContext)("BadgeCount", ctx.GetSectionRowCount("mJContentProcessRuns"))("DefaultExpanded", false);
|
|
145
490
|
i0.ɵɵadvance();
|
|
146
|
-
i0.ɵɵconditional(ctx.record.IsSaved ?
|
|
491
|
+
i0.ɵɵconditional(ctx.record.IsSaved ? 114 : -1);
|
|
147
492
|
i0.ɵɵadvance();
|
|
148
493
|
i0.ɵɵproperty("Form", ctx)("FormContext", ctx.formContext)("BadgeCount", ctx.GetSectionRowCount("mJContentSourceParams"))("DefaultExpanded", false);
|
|
149
494
|
i0.ɵɵadvance();
|
|
150
|
-
i0.ɵɵconditional(ctx.record.IsSaved ?
|
|
151
|
-
} }, dependencies: [i1.
|
|
495
|
+
i0.ɵɵconditional(ctx.record.IsSaved ? 116 : -1);
|
|
496
|
+
} }, dependencies: [i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.RangeValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.NgModel, i2.MjFormFieldComponent, i2.MjCollapsiblePanelComponent, i2.MjRecordFormContainerComponent, i2.ExplorerEntityDataGridComponent, i3.DecimalPipe], styles: ["\n\n\n.cs-mode-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 8px;\n margin: 4px 0 12px;\n}\n.cs-mode-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n padding: 10px 12px;\n cursor: pointer;\n text-align: center;\n transition: background 0.12s, border-color 0.12s, box-shadow 0.12s;\n user-select: none;\n}\n.cs-mode-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.cs-mode-card.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-color: var(--mj-brand-primary);\n box-shadow: inset 0 0 0 1px var(--mj-brand-primary);\n}\n.cs-mode-card[_ngcontent-%COMP%] .ic[_ngcontent-%COMP%] {\n font-size: 18px;\n color: var(--mj-text-secondary);\n}\n.cs-mode-card.selected[_ngcontent-%COMP%] .ic[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n.cs-mode-card[_ngcontent-%COMP%] .nm[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 4px 0 2px;\n}\n.cs-mode-card[_ngcontent-%COMP%] .desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.3;\n}\n\n.cs-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px 16px;\n margin: 4px 0 12px;\n}\n.cs-grid.four[_ngcontent-%COMP%] { grid-template-columns: repeat(4, 1fr); }\n.cs-field[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 4px; }\n.cs-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n.cs-field[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.cs-input[_ngcontent-%COMP%] {\n width: 100%;\n box-sizing: border-box;\n padding: 7px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n}\n.cs-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-border-focus, var(--mj-brand-primary));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.cs-input[_ngcontent-%COMP%]:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.cs-threshold-pair[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 14px 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n.cs-slider[_ngcontent-%COMP%] {\n appearance: none;\n -webkit-appearance: none;\n width: 100%;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n margin: 8px 0 4px;\n}\n.cs-slider[_ngcontent-%COMP%]::-webkit-slider-thumb {\n appearance: none;\n -webkit-appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n cursor: pointer;\n border: 2px solid var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n}\n.cs-slider[_ngcontent-%COMP%]::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n cursor: pointer;\n border: 2px solid var(--mj-bg-surface);\n}\n.cs-slider-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.cs-slider-row[_ngcontent-%COMP%] .cur[_ngcontent-%COMP%] {\n font-family: ui-monospace, monospace;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.cs-validation[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 12%, transparent);\n color: var(--mj-status-error-text, var(--mj-status-error));\n border-radius: 4px;\n margin-top: 8px;\n}\n.cs-nudge[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border-radius: 4px;\n margin-top: 8px;\n line-height: 1.4;\n}\n\n.cs-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n.cs-toggle-row[_ngcontent-%COMP%]:first-child { border-top: 0; padding-top: 0; }\n.cs-toggle-row[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] .t[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; }\n.cs-toggle-row[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] .d[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-muted); }\n.cs-switch[_ngcontent-%COMP%] {\n position: relative;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n}\n.cs-switch[_ngcontent-%COMP%]::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n}\n.cs-switch.on[_ngcontent-%COMP%] { background: var(--mj-brand-primary); }\n.cs-switch.on[_ngcontent-%COMP%]::after { left: 18px; }"] }); }
|
|
152
497
|
};
|
|
153
498
|
MJContentSourceFormComponentExtended = __decorate([
|
|
154
499
|
RegisterClass(BaseFormComponent, 'MJ: Content Sources')
|
|
@@ -156,9 +501,9 @@ MJContentSourceFormComponentExtended = __decorate([
|
|
|
156
501
|
export { MJContentSourceFormComponentExtended };
|
|
157
502
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJContentSourceFormComponentExtended, [{
|
|
158
503
|
type: Component,
|
|
159
|
-
args: [{ standalone: false, selector: 'mj-content-source-form-extended', template: "<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <!-- Connection Details Section -->\n <mj-collapsible-panel\n SectionKey=\"connectionDetails\"\n SectionName=\"Connection Details\"\n Icon=\"fa fa-align-left\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentSourceTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n\n <!-- URL: shown for non-Entity source types -->\n @if (!IsEntitySourceType) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"URL\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"URL\"\n ></mj-form-field>\n }\n\n <!-- Entity fields: shown only for Entity source type -->\n @if (IsEntitySourceType) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityDocumentID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- Content Classification Section -->\n <mj-collapsible-panel\n SectionKey=\"contentClassification\"\n SectionName=\"Content Classification\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentFileTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- AI & Indexing Section -->\n <mj-collapsible-panel\n SectionKey=\"aIIndexing\"\n SectionName=\"AI & Indexing\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EmbeddingModelID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"VectorIndexID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Source Configuration Section -->\n <mj-collapsible-panel\n SectionKey=\"sourceConfiguration\"\n SectionName=\"Source Configuration\"\n Icon=\"fa fa-sliders-h\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Configuration\"\n Type=\"code\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- System Metadata Section -->\n <mj-collapsible-panel\n SectionKey=\"systemMetadata\"\n SectionName=\"System Metadata\"\n Icon=\"fa fa-cog\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Related Entity Panels -->\n\n <!-- Content Items Section -->\n <mj-collapsible-panel\n SectionKey=\"mJContentItems\"\n SectionName=\"Content Items\"\n Icon=\"fa fa-file-alt\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJContentItems')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Content Items','ContentSourceID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Content Items')\"\n [AllowLoad]=\"IsSectionExpanded('mJContentItems')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJContentItems', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Content Process Runs Section -->\n <mj-collapsible-panel\n SectionKey=\"mJContentProcessRuns\"\n SectionName=\"Content Process Runs\"\n Icon=\"fa fa-cogs\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJContentProcessRuns')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Content Process Runs','SourceID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Content Process Runs')\"\n [AllowLoad]=\"IsSectionExpanded('mJContentProcessRuns')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJContentProcessRuns', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Content Source Params Section -->\n <mj-collapsible-panel\n SectionKey=\"mJContentSourceParams\"\n SectionName=\"Content Source Params\"\n Icon=\"fa fa-cogs\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJContentSourceParams')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Content Source Params','ContentSourceID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Content Source Params')\"\n [AllowLoad]=\"IsSectionExpanded('mJContentSourceParams')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJContentSourceParams', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n</mj-record-form-container>\n" }]
|
|
504
|
+
args: [{ standalone: false, selector: 'mj-content-source-form-extended', template: "<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <!-- Connection Details Section -->\n <mj-collapsible-panel\n SectionKey=\"connectionDetails\"\n SectionName=\"Connection Details\"\n Icon=\"fa fa-align-left\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Name\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentSourceTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n\n <!-- URL: shown for non-Entity source types -->\n @if (!IsEntitySourceType) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"URL\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"URL\"\n ></mj-form-field>\n }\n\n <!-- Entity fields: shown only for Entity source type -->\n @if (IsEntitySourceType) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EntityDocumentID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- Content Classification Section -->\n <mj-collapsible-panel\n SectionKey=\"contentClassification\"\n SectionName=\"Content Classification\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ContentFileTypeID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- AI & Indexing Section -->\n <mj-collapsible-panel\n SectionKey=\"aIIndexing\"\n SectionName=\"AI & Indexing\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EmbeddingModelID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"VectorIndexID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n LinkType=\"Record\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Tag Pipeline Configuration \u2014 typed knobs from IContentSourceConfiguration -->\n <mj-collapsible-panel\n SectionKey=\"tagPipelineConfiguration\"\n SectionName=\"Tag Pipeline Configuration\"\n Icon=\"fa fa-sliders-h\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n\n <!-- 1. Taxonomy mode -->\n <h4 style=\"font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--mj-text-muted); margin: 4px 0 8px; font-weight: 700;\">\n Taxonomy mode\n </h4>\n <div class=\"cs-mode-grid\">\n @for (m of TaxonomyModes; track m.value) {\n <div class=\"cs-mode-card\"\n [class.selected]=\"CurrentMode === m.value\"\n (click)=\"EditMode ? SetMode(m.value) : null\">\n <i class=\"fa-solid {{ m.icon }} ic\"></i>\n <div class=\"nm\">{{ m.label }}</div>\n <div class=\"desc\">{{ m.desc }}</div>\n </div>\n }\n </div>\n\n <!-- 2. Scope & root -->\n <h4 style=\"font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--mj-text-muted); margin: 16px 0 8px; font-weight: 700;\">\n Scope & tag root\n </h4>\n <div class=\"cs-grid\">\n <div class=\"cs-field\">\n <label>Tag root (TagRootID)</label>\n <input class=\"cs-input\" [disabled]=\"!EditMode\"\n [ngModel]=\"TagRootIDValue\"\n (ngModelChange)=\"TagRootIDValue = $event\" />\n <span class=\"hint\">Restricts the LLM's visible taxonomy + auto-grow target. Leave blank for full taxonomy.</span>\n </div>\n <div class=\"cs-field\">\n <label>Embedding model (legacy ContentSource field)</label>\n <input class=\"cs-input\" disabled [value]=\"record.EmbeddingModelID || '\u2014'\" />\n <span class=\"hint\">Set in the AI & Indexing section above.</span>\n </div>\n </div>\n\n <div class=\"cs-toggle-row\">\n <div class=\"label\">\n <span class=\"t\">Share full taxonomy with the LLM</span>\n <span class=\"d\">When on, the LLM prompt includes the visible (scope-filtered) taxonomy. Larger taxonomies \u2192 higher token cost.</span>\n </div>\n <div class=\"cs-switch\" [class.on]=\"ShareTaxonomyValue\"\n (click)=\"EditMode ? (ShareTaxonomyValue = !ShareTaxonomyValue) : null\"></div>\n </div>\n <div class=\"cs-toggle-row\">\n <div class=\"label\">\n <span class=\"t\">Vectorize new content</span>\n <span class=\"d\">When off, this source skips vectorization (autotagger still runs).</span>\n </div>\n <div class=\"cs-switch\" [class.on]=\"EnableVectorizationValue\"\n (click)=\"EditMode ? (EnableVectorizationValue = !EnableVectorizationValue) : null\"></div>\n </div>\n\n <!-- 3. Thresholds -->\n <h4 style=\"font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--mj-text-muted); margin: 16px 0 8px; font-weight: 700;\">\n Thresholds\n </h4>\n <div class=\"cs-threshold-pair\">\n <div class=\"cs-grid\">\n <div class=\"cs-field\">\n <label>MatchThreshold (auto-apply)</label>\n <input type=\"range\" class=\"cs-slider\" min=\"0.50\" max=\"1.00\" step=\"0.01\"\n [disabled]=\"!EditMode\"\n [ngModel]=\"MatchThresholdValue\"\n (ngModelChange)=\"MatchThresholdValue = $event\" />\n <div class=\"cs-slider-row\"><span>0.50</span><span class=\"cur\">{{ MatchThresholdValue | number: '1.2-2' }}</span><span>1.00</span></div>\n </div>\n <div class=\"cs-field\">\n <label>SuggestThreshold (route to inbox)</label>\n <input type=\"range\" class=\"cs-slider\" min=\"0.50\" max=\"1.00\" step=\"0.01\"\n [disabled]=\"!EditMode\"\n [ngModel]=\"SuggestThresholdValue\"\n (ngModelChange)=\"SuggestThresholdValue = $event\" />\n <div class=\"cs-slider-row\"><span>0.50</span><span class=\"cur\">{{ SuggestThresholdValue | number: '1.2-2' }}</span><span>1.00</span></div>\n </div>\n </div>\n @if (ThresholdValidationMessage) {\n <div class=\"cs-validation\"><i class=\"fa-solid fa-circle-exclamation\"></i> {{ ThresholdValidationMessage }}</div>\n } @else {\n <div class=\"cs-nudge\">\n Scores \u2265 <strong>{{ MatchThresholdValue | number: '1.2-2' }}</strong> auto-apply.\n Scores in <strong>[{{ SuggestThresholdValue | number: '1.2-2' }}, {{ MatchThresholdValue | number: '1.2-2' }})</strong> route to the suggestion inbox.\n Below that, the run falls through to handleNoMatch.\n </div>\n }\n </div>\n\n <!-- 4. Volume + cost budgets -->\n <h4 style=\"font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--mj-text-muted); margin: 16px 0 8px; font-weight: 700;\">\n Volume & cost budgets\n <span style=\"text-transform: none; letter-spacing: 0; color: var(--mj-text-muted); font-weight: 400; margin-left: 8px;\">When a budget is hit the run pauses (resumes on next start).</span>\n </h4>\n <div class=\"cs-grid four\">\n <div class=\"cs-field\">\n <label>Max new tags / run</label>\n <input class=\"cs-input\" type=\"number\" min=\"0\" [disabled]=\"!EditMode\"\n [ngModel]=\"MaxNewTagsPerRunValue ?? ''\"\n (ngModelChange)=\"MaxNewTagsPerRunValue = $event\" />\n <span class=\"hint\">unlimited if blank</span>\n </div>\n <div class=\"cs-field\">\n <label>Max new tags / item</label>\n <input class=\"cs-input\" type=\"number\" min=\"0\" [disabled]=\"!EditMode\"\n [ngModel]=\"MaxNewTagsPerItemValue ?? ''\"\n (ngModelChange)=\"MaxNewTagsPerItemValue = $event\" />\n <span class=\"hint\">extras \u2192 suggestions</span>\n </div>\n <div class=\"cs-field\">\n <label>Max tokens / run</label>\n <input class=\"cs-input\" type=\"number\" min=\"0\" [disabled]=\"!EditMode\"\n [ngModel]=\"MaxTokensPerRunValue ?? ''\"\n (ngModelChange)=\"MaxTokensPerRunValue = $event\" />\n <span class=\"hint\">across all LLM calls</span>\n </div>\n <div class=\"cs-field\">\n <label>Max cost / run (USD)</label>\n <input class=\"cs-input\" type=\"number\" min=\"0\" step=\"0.01\" [disabled]=\"!EditMode\"\n [ngModel]=\"MaxCostPerRunValue ?? ''\"\n (ngModelChange)=\"MaxCostPerRunValue = $event\" />\n <span class=\"hint\">$ stops the run</span>\n </div>\n </div>\n </mj-collapsible-panel>\n\n <!-- Raw JSON override \u2014 for SourceSpecificConfiguration and other future keys -->\n <mj-collapsible-panel\n SectionKey=\"sourceConfiguration\"\n SectionName=\"Configuration JSON (advanced)\"\n Icon=\"fa fa-code\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Configuration\"\n Type=\"code\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- System Metadata Section -->\n <mj-collapsible-panel\n SectionKey=\"systemMetadata\"\n SectionName=\"System Metadata\"\n Icon=\"fa fa-cog\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n [FormContext]=\"formContext\"\n ></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Related Entity Panels -->\n\n <!-- Content Items Section -->\n <mj-collapsible-panel\n SectionKey=\"mJContentItems\"\n SectionName=\"Content Items\"\n Icon=\"fa fa-file-alt\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJContentItems')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Content Items','ContentSourceID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Content Items')\"\n [AllowLoad]=\"IsSectionExpanded('mJContentItems')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJContentItems', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Content Process Runs Section -->\n <mj-collapsible-panel\n SectionKey=\"mJContentProcessRuns\"\n SectionName=\"Content Process Runs\"\n Icon=\"fa fa-cogs\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJContentProcessRuns')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Content Process Runs','SourceID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Content Process Runs')\"\n [AllowLoad]=\"IsSectionExpanded('mJContentProcessRuns')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJContentProcessRuns', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Content Source Params Section -->\n <mj-collapsible-panel\n SectionKey=\"mJContentSourceParams\"\n SectionName=\"Content Source Params\"\n Icon=\"fa fa-cogs\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJContentSourceParams')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Content Source Params','ContentSourceID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Content Source Params')\"\n [AllowLoad]=\"IsSectionExpanded('mJContentSourceParams')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJContentSourceParams', $event.totalRowCount)\"\n >\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n</mj-record-form-container>\n", styles: ["/* ContentSource form \u2014 Tag Pipeline Configuration extras (Option B dense form) */\n\n.cs-mode-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 8px;\n margin: 4px 0 12px;\n}\n.cs-mode-card {\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n border-radius: 8px;\n padding: 10px 12px;\n cursor: pointer;\n text-align: center;\n transition: background 0.12s, border-color 0.12s, box-shadow 0.12s;\n user-select: none;\n}\n.cs-mode-card:hover {\n background: var(--mj-bg-surface-hover);\n}\n.cs-mode-card.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-color: var(--mj-brand-primary);\n box-shadow: inset 0 0 0 1px var(--mj-brand-primary);\n}\n.cs-mode-card .ic {\n font-size: 18px;\n color: var(--mj-text-secondary);\n}\n.cs-mode-card.selected .ic { color: var(--mj-brand-primary); }\n.cs-mode-card .nm {\n font-size: 13px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 4px 0 2px;\n}\n.cs-mode-card .desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n line-height: 1.3;\n}\n\n.cs-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px 16px;\n margin: 4px 0 12px;\n}\n.cs-grid.four { grid-template-columns: repeat(4, 1fr); }\n.cs-field { display: flex; flex-direction: column; gap: 4px; }\n.cs-field label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n.cs-field .hint {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.cs-input {\n width: 100%;\n box-sizing: border-box;\n padding: 7px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n}\n.cs-input:focus {\n outline: none;\n border-color: var(--mj-border-focus, var(--mj-brand-primary));\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.cs-input:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n.cs-threshold-pair {\n background: var(--mj-bg-surface-card);\n padding: 14px 16px;\n border-radius: 8px;\n border: 1px solid var(--mj-border-default);\n}\n.cs-slider {\n appearance: none;\n -webkit-appearance: none;\n width: 100%;\n height: 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 3px;\n margin: 8px 0 4px;\n}\n.cs-slider::-webkit-slider-thumb {\n appearance: none;\n -webkit-appearance: none;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n cursor: pointer;\n border: 2px solid var(--mj-bg-surface);\n box-shadow: 0 1px 3px rgba(0,0,0,0.2);\n}\n.cs-slider::-moz-range-thumb {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n cursor: pointer;\n border: 2px solid var(--mj-bg-surface);\n}\n.cs-slider-row {\n display: flex;\n justify-content: space-between;\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.cs-slider-row .cur {\n font-family: ui-monospace, monospace;\n font-weight: 700;\n color: var(--mj-text-primary);\n}\n\n.cs-validation {\n font-size: 12px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-status-error) 12%, transparent);\n color: var(--mj-status-error-text, var(--mj-status-error));\n border-radius: 4px;\n margin-top: 8px;\n}\n.cs-nudge {\n font-size: 12px;\n padding: 8px 12px;\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border-radius: 4px;\n margin-top: 8px;\n line-height: 1.4;\n}\n\n.cs-toggle-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n border-top: 1px dashed var(--mj-border-subtle);\n}\n.cs-toggle-row:first-child { border-top: 0; padding-top: 0; }\n.cs-toggle-row .label .t { font-size: 13px; font-weight: 600; }\n.cs-toggle-row .label .d { font-size: 11px; color: var(--mj-text-muted); }\n.cs-switch {\n position: relative;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n}\n.cs-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0,0,0,0.2);\n}\n.cs-switch.on { background: var(--mj-brand-primary); }\n.cs-switch.on::after { left: 18px; }\n"] }]
|
|
160
505
|
}], null, null); })();
|
|
161
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJContentSourceFormComponentExtended, { className: "MJContentSourceFormComponentExtended", filePath: "src/lib/custom/ContentSources/content-source-form.component.ts", lineNumber:
|
|
506
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJContentSourceFormComponentExtended, { className: "MJContentSourceFormComponentExtended", filePath: "src/lib/custom/ContentSources/content-source-form.component.ts", lineNumber: 37 }); })();
|
|
162
507
|
export function LoadContentSourceFormExtended() {
|
|
163
508
|
// Prevents tree-shaking
|
|
164
509
|
}
|