@memberjunction/ng-core-entity-forms 6.1.2 → 6.2.0-edge.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.
Files changed (73) hide show
  1. package/README.md +22 -0
  2. package/dist/lib/custom/MLModels/ml-model-form.component.d.ts +27 -0
  3. package/dist/lib/custom/MLModels/ml-model-form.component.d.ts.map +1 -0
  4. package/dist/lib/custom/MLModels/ml-model-form.component.js +193 -0
  5. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -0
  6. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +44 -0
  7. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -0
  8. package/dist/lib/custom/MLModels/ml-model-view-models.js +208 -0
  9. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -0
  10. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +76 -0
  11. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -0
  12. package/dist/lib/custom/MLModels/ps-model-detail.component.js +693 -0
  13. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -0
  14. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +27 -7
  15. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  16. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +496 -19
  17. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  18. package/dist/lib/custom/custom-forms.module.d.ts +32 -30
  19. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  20. package/dist/lib/custom/custom-forms.module.js +21 -4
  21. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  22. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  23. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +62 -26
  24. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  25. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  26. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +33 -15
  27. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  28. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  29. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +100 -82
  30. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  31. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +24 -20
  32. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  33. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts +10 -0
  34. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -0
  35. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +122 -0
  36. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -0
  37. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts +10 -0
  38. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts.map +1 -0
  39. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js +125 -0
  40. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js.map +1 -0
  41. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
  42. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +23 -5
  43. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  44. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.d.ts.map +1 -1
  45. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js +25 -6
  46. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js.map +1 -1
  47. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  48. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +11 -15
  49. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  50. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  51. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +43 -7
  52. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  53. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts +10 -0
  54. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts.map +1 -0
  55. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js +78 -0
  56. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js.map +1 -0
  57. package/dist/lib/generated/generated-forms.module.d.ts +240 -237
  58. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  59. package/dist/lib/generated/generated-forms.module.js +11 -2
  60. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  61. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +95 -0
  62. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  63. package/dist/lib/panels/model-predictions/model-prediction.logic.js +173 -0
  64. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  65. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +57 -2
  66. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
  67. package/dist/lib/panels/model-predictions/model-prediction.panel.js +555 -64
  68. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  69. package/dist/public-api.d.ts +4 -0
  70. package/dist/public-api.d.ts.map +1 -1
  71. package/dist/public-api.js +4 -0
  72. package/dist/public-api.js.map +1 -1
  73. package/package.json +42 -41
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ps-model-detail.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/MLModels/ps-model-detail.component.ts","../../../../src/lib/custom/MLModels/ps-model-detail.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { IMetadataProvider, UserInfo } from '@memberjunction/core';\nimport {\n MJMLModelEntity,\n PredictiveStudioPromoteModelOperation,\n PredictiveStudioModelTargetStatus,\n} from '@memberjunction/core-entities';\n\nimport {\n PSFeatureBar,\n PSMetricDisplay,\n PS_FEATURE_DOMINANCE_THRESHOLD,\n formatMetricValue,\n humanizeFeatureName,\n maxFeatureImportance,\n metricsToDisplay,\n overfitGap,\n parseFeatureImportance,\n parseMetrics,\n primaryModelScore,\n} from './ml-model-view-models';\n\n/** A pending promote/archive action awaiting user confirmation. */\ninterface PendingPromotion {\n modelId: string;\n modelName: string;\n targetStatus: PredictiveStudioModelTargetStatus;\n leakageFlagged: boolean;\n}\n\n/**\n * **PSModelDetailComponent** — Unified enterprise component for inspecting, evaluating,\n * and promoting versioned ML Models. Shared between:\n * 1. **Predictive Studio Model Registry** (`PSRegistryComponent`)\n * 2. **Custom Entity Form for `MJ: ML Models`** (`MLModelFormComponentExtended`)\n *\n * Renders:\n * - Identity & immutable snapshot badge\n * - Progressive 4-stage lifecycle stepper (Draft → Validated → Published → Archived)\n * - In-sample train vs out-of-sample holdout performance cards and overfit gap check\n * - Key feature importance rankings with single-feature dominance warnings\n * - Target leakage gate verification and required sign-off rationale capture\n * - Remote Operation lifecycle promotion (Validate, Publish, Archive)\n */\n@Component({\n standalone: true,\n selector: 'ps-model-detail',\n templateUrl: './ps-model-detail.component.html',\n styleUrls: ['./ps-model-detail.component.css'],\n imports: [CommonModule, FormsModule, MJButtonDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PSModelDetailComponent {\n @Input() model: MJMLModelEntity | null = null;\n @Input() provider: IMetadataProvider | null = null;\n @Input() currentUser: UserInfo | null = null;\n @Input() showActions = true;\n\n @Output() statusChanged = new EventEmitter<{ modelId: string; newStatus: string }>();\n\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly notifications = inject(MJNotificationService);\n\n public readonly lifecycleSteps = ['Draft', 'Validated', 'Published', 'Archived'] as const;\n public readonly dominanceThreshold = PS_FEATURE_DOMINANCE_THRESHOLD.toFixed(2);\n\n public pending: PendingPromotion | null = null;\n public pendingReason = '';\n public busy = false;\n\n @Input() displayName?: string;\n\n public get modelDisplayName(): string {\n if (this.displayName) return this.displayName;\n if (!this.model) return '';\n return this.model.Pipeline || (this.model.Algorithm ? `${this.model.Algorithm} Model` : 'ML Model');\n }\n\n // ── Badges & Lifecycle Stepper ──\n\n public statusBadgeClass(status: string | null | undefined): string {\n switch ((status ?? '').toLowerCase()) {\n case 'published':\n return 'green';\n case 'validated':\n return 'blue';\n case 'draft':\n return 'amber';\n case 'archived':\n return 'gray';\n default:\n return 'gray';\n }\n }\n\n public stepState(step: string): 'done' | 'curr' | 'todo' {\n const order = ['Draft', 'Validated', 'Published', 'Archived'];\n const currIdx = order.indexOf(this.model?.Status ?? 'Draft');\n const stepIdx = order.indexOf(step);\n if (stepIdx < currIdx) return 'done';\n if (stepIdx === currIdx) return 'curr';\n return 'todo';\n }\n\n public get targetSuffix(): string {\n const target = this.model?.TargetVariable;\n return target ? ` · predicts ${target}` : '';\n }\n\n // ── Metrics & Performance Derivations ──\n\n public get primaryScoreLabel(): string {\n if (!this.model) return 'Score';\n const score = primaryModelScore(this.model);\n return score?.label ?? 'AUC';\n }\n\n public get trainPrimaryScore(): string {\n if (!this.model) return '—';\n const score = primaryModelScore(this.model);\n const trainMetrics = parseMetrics(this.model.Metrics);\n if (score && trainMetrics[score.key] != null) {\n return formatMetricValue(score.key, trainMetrics[score.key]!);\n }\n return trainMetrics.AUC != null ? trainMetrics.AUC.toFixed(3) : '—';\n }\n\n public get holdoutPrimaryScore(): string {\n if (!this.model) return '—';\n const score = primaryModelScore(this.model);\n const holdoutMetrics = parseMetrics(this.model.HoldoutMetrics);\n if (score && holdoutMetrics[score.key] != null) {\n return formatMetricValue(score.key, holdoutMetrics[score.key]!);\n }\n return holdoutMetrics.AUC != null ? holdoutMetrics.AUC.toFixed(3) : '—';\n }\n\n public get secondaryMetrics(): PSMetricDisplay[] {\n if (!this.model) return [];\n const score = primaryModelScore(this.model);\n const primaryKey = score?.key;\n const holdout = metricsToDisplay(parseMetrics(this.model.HoldoutMetrics), { excludeAuc: false });\n const all = holdout.length > 0 ? holdout : metricsToDisplay(parseMetrics(this.model.Metrics), { excludeAuc: false });\n return primaryKey ? all.filter((m) => m.key !== primaryKey) : all.filter((m) => m.key !== 'AUC');\n }\n\n public get gapText(): string {\n if (!this.model) return '';\n const gap = overfitGap(this.model);\n return gap == null ? '' : Math.abs(gap).toFixed(3);\n }\n\n public get gapVerdict(): string {\n if (!this.model) return '';\n const gap = overfitGap(this.model);\n if (gap == null) return '';\n return gap > 0.1 ? 'is wide — watch for overfitting' : 'is within tolerance — no overfitting flag';\n }\n\n // ── Feature Importance & Leakage Gate ──\n\n public get importance(): PSFeatureBar[] {\n if (!this.model) return [];\n return parseFeatureImportance(this.model.FeatureImportance, 6).map((b) => ({\n ...b,\n name: humanizeFeatureName(b.name),\n }));\n }\n\n public get importanceCaption(): string {\n const n = this.importance.length;\n return n === 0 ? 'no data' : `normalized · top ${n}`;\n }\n\n public get topFeatureName(): string {\n return this.importance[0]?.name ?? '—';\n }\n\n public get topFeatureValue(): string {\n return this.importance[0]?.value ?? '—';\n }\n\n public get leakageFlagged(): boolean {\n if (!this.model) return false;\n const max = maxFeatureImportance(this.model.FeatureImportance);\n return max != null && max >= PS_FEATURE_DOMINANCE_THRESHOLD;\n }\n\n // ── Actions & Promotion Flow ──\n\n public get canValidate(): boolean {\n return this.model?.Status === 'Draft';\n }\n\n public get canPublish(): boolean {\n return this.model?.Status === 'Validated';\n }\n\n public get canArchive(): boolean {\n return this.model?.Status === 'Published' || this.model?.Status === 'Validated';\n }\n\n public get actionHint(): string {\n switch (this.model?.Status) {\n case 'Draft':\n return 'Verify metrics and feature importance before validating or publishing.';\n case 'Validated':\n return 'Validated and sign-off clear. Ready to promote to production serving.';\n case 'Published':\n return 'Active in production serving. Archiving will detach live predictions.';\n case 'Archived':\n return 'Archived snapshot. Preserved for governance and historical auditing.';\n default:\n return '';\n }\n }\n\n public requestPromote(targetStatus: PredictiveStudioModelTargetStatus): void {\n if (!this.model) return;\n this.pendingReason = '';\n this.pending = {\n modelId: this.model.ID,\n modelName: `${this.modelDisplayName} v${this.model.Version}`,\n targetStatus,\n leakageFlagged: this.leakageFlagged && targetStatus !== 'Archived',\n };\n this.cdr.markForCheck();\n }\n\n public cancelPromote(): void {\n if (this.busy) return;\n this.pending = null;\n this.pendingReason = '';\n this.cdr.markForCheck();\n }\n\n public get pendingTitle(): string {\n if (!this.pending) return '';\n return this.pending.targetStatus === 'Archived' ? 'Archive model' : `Promote to ${this.pending.targetStatus}`;\n }\n\n public get pendingIcon(): string {\n if (!this.pending) return 'fa-solid fa-check';\n return this.pending.targetStatus === 'Archived' ? 'fa-solid fa-box-archive' : 'fa-solid fa-arrow-up';\n }\n\n public get pendingConfirmLabel(): string {\n if (!this.pending) return 'Confirm';\n return this.pending.targetStatus === 'Archived' ? 'Archive' : `Promote to ${this.pending.targetStatus}`;\n }\n\n public get pendingVariant(): 'info' | 'warn' | 'danger' {\n if (!this.pending) return 'info';\n if (this.pending.targetStatus === 'Archived') return 'warn';\n return this.pending.leakageFlagged ? 'warn' : 'info';\n }\n\n public get pendingMessage(): string {\n if (!this.pending) return '';\n const name = this.escapeHtml(this.pending.modelName);\n if (this.pending.targetStatus === 'Archived') {\n return `Archive <strong>${name}</strong>? This detaches any active scoring bindings and removes it from production scoring. The model artifact remains immutable and recoverable.`;\n }\n if (this.pending.leakageFlagged) {\n return `<strong>${name}</strong> is flagged for possible target leakage. Publishing requires an explicit sign-off — confirm you understand the risk and provide a reason below.`;\n }\n return `Promote <strong>${name}</strong> to <strong>${this.pending.targetStatus}</strong>? This changes only the lifecycle state — the trained weights never change.`;\n }\n\n public async confirmPromote(reason: string): Promise<void> {\n if (!this.pending || this.busy || !this.model) return;\n this.busy = true;\n this.cdr.markForCheck();\n\n const { modelId, modelName, targetStatus, leakageFlagged } = this.pending;\n\n try {\n const op = new PredictiveStudioPromoteModelOperation();\n const result = await op.Execute(\n {\n modelId,\n targetStatus,\n signOff: leakageFlagged ? true : undefined,\n reason: reason || undefined,\n },\n { provider: this.provider ?? undefined, user: this.currentUser ?? undefined },\n );\n\n if (result.Success && result.Output?.promoted) {\n const newStatus = result.Output.status;\n this.model.Status = newStatus as 'Draft' | 'Validated' | 'Published' | 'Archived';\n this.notifications.CreateSimpleNotification(`${modelName} → ${newStatus}`, 'success', 3500);\n this.statusChanged.emit({ modelId, newStatus });\n this.pending = null;\n this.pendingReason = '';\n } else {\n this.notifications.CreateSimpleNotification(\n result.ErrorMessage || `Could not promote ${modelName} (status: ${result.Output?.status ?? 'unchanged'}).`,\n 'error',\n 5000,\n );\n }\n } catch (e) {\n this.notifications.CreateSimpleNotification(\n `Promotion failed: ${e instanceof Error ? e.message : String(e)}`,\n 'error',\n 5000,\n );\n } finally {\n this.busy = false;\n this.cdr.markForCheck();\n }\n }\n\n private escapeHtml(value: string): string {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n }\n}\n","<div class=\"ps-model-detail\" data-testid=\"ps-model-detail\">\n @if (model) {\n <!-- 1. Header Card -->\n <div class=\"ps-card\">\n <div class=\"ps-card-body dh\">\n <div class=\"big-ico\"><i class=\"fa-solid fa-cube\"></i></div>\n <div style=\"flex:1;min-width:0;\">\n <h2 data-testid=\"ps-registry-detail-name\">\n {{ modelDisplayName }}\n <span class=\"ps-tag ps-mono\">v{{ model.Version }}</span>\n </h2>\n <div class=\"ps-muted ps-small sub\">\n {{ model.Algorithm || 'Model' }}{{ targetSuffix }} &bull; immutable snapshot\n </div>\n </div>\n <span class=\"ps-badge\" [class]=\"statusBadgeClass(model.Status)\">{{ model.Status }}</span>\n </div>\n </div>\n\n <!-- 2. Lifecycle Stepper -->\n <div class=\"ps-card\">\n <div class=\"ps-card-body\">\n <div class=\"ps-section-title\">Lifecycle</div>\n <div class=\"ps-stepper\">\n @for (step of lifecycleSteps; track step; let last = $last) {\n <div class=\"ps-step\" [class.done]=\"stepState(step) === 'done'\" [class.curr]=\"stepState(step) === 'curr'\">\n <span class=\"pip\">\n @if (stepState(step) === 'done') {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ $index + 1 }}\n }\n </span>\n {{ step }}\n </div>\n @if (!last) {\n <span class=\"ln\"></span>\n }\n }\n </div>\n <div class=\"ps-small ps-muted\" style=\"margin-top:10px\">\n Models are immutable once registered; promotion only changes lifecycle state, never weights.\n </div>\n </div>\n </div>\n\n <!-- 3. Performance Metrics -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\">\n <h3>Performance</h3>\n <span class=\"ps-muted ps-small\">Holdout = held-out test fold, never seen in training</span>\n </div>\n <div class=\"ps-card-body\">\n <div class=\"metric-pair\">\n <div class=\"mtile\">\n <div class=\"ps-section-title\">Train {{ primaryScoreLabel }}</div>\n <div class=\"v\">{{ trainPrimaryScore }}</div>\n <div class=\"ps-muted ps-small\">in-sample &bull; optimistic</div>\n </div>\n <div class=\"mtile honest\">\n <div class=\"ps-section-title\">Holdout {{ primaryScoreLabel }}</div>\n <div class=\"v\">{{ holdoutPrimaryScore }}</div>\n <div class=\"ps-muted ps-small\">out-of-sample &bull; the honest number</div>\n </div>\n </div>\n\n @if (secondaryMetrics.length > 0) {\n <div class=\"stat-bar\">\n @for (s of secondaryMetrics; track s.key) {\n <div class=\"b\">\n <span class=\"ps-muted ps-small\">{{ s.label }}</span>\n <strong>{{ s.value }}</strong>\n </div>\n }\n </div>\n } @else {\n <div class=\"ps-small ps-muted\" style=\"margin-top:6px\">No secondary metrics recorded for this model.</div>\n }\n\n @if (gapText) {\n <div class=\"ps-small ps-muted\" style=\"margin-top:10px\">\n Train–holdout gap of <strong>{{ gapText }}</strong> {{ gapVerdict }}.\n </div>\n }\n </div>\n </div>\n\n <!-- 4. Feature Importance -->\n <div class=\"ps-card\">\n <div class=\"ps-card-head\">\n <h3>Feature Importance</h3>\n <span class=\"ps-muted ps-small\">{{ importanceCaption }}</span>\n </div>\n <div class=\"ps-card-body\">\n @if (importance.length > 0) {\n @for (f of importance; track f.name) {\n <div class=\"ps-fbar\">\n <span class=\"name ps-small\" [title]=\"f.name\">{{ f.name }}</span>\n <div class=\"track\">\n <span [class.warn]=\"f.warning\" [style.width.%]=\"f.pct\"></span>\n </div>\n <span class=\"ps-mono\">{{ f.value }}</span>\n </div>\n }\n } @else {\n <div class=\"ps-small ps-muted\">No feature-importance data was recorded for this model.</div>\n }\n </div>\n </div>\n\n <!-- 5. Leakage Sign-Off Gate -->\n @if (importance.length > 0) {\n <div class=\"ps-callout gate\" [class.success]=\"!leakageFlagged\" [class.warn]=\"leakageFlagged\">\n <i [class]=\"leakageFlagged ? 'fa-solid fa-triangle-exclamation' : 'fa-solid fa-shield-halved'\"></i>\n <div>\n @if (leakageFlagged) {\n <strong>Leakage flag raised.</strong> A single feature dominates — top importance is\n <strong>{{ topFeatureName }} at {{ topFeatureValue }}</strong>, at/above the\n <strong>{{ dominanceThreshold }}</strong> dominance threshold.\n <div class=\"ps-small\" style=\"margin-top:6px\">\n <i class=\"fa-solid fa-pen\"></i> Sign-off with a reason is required to publish this model.\n </div>\n } @else {\n <strong>Leakage gate clear.</strong> No single feature dominates — top importance is\n <strong>{{ topFeatureName }} at {{ topFeatureValue }}</strong>, below the\n <strong>{{ dominanceThreshold }}</strong> dominance threshold.\n <div class=\"ps-small\" style=\"margin-top:6px\">\n <i class=\"fa-solid fa-check\"></i> Sign-off required before any Validated &rarr; Published promotion.\n </div>\n }\n </div>\n </div>\n }\n\n <!-- 6. Lifecycle Actions -->\n @if (showActions) {\n <div class=\"ps-card\">\n <div class=\"ps-card-body ps-row\" style=\"align-items:center;flex-wrap:wrap;gap:8px\">\n <span class=\"ps-muted ps-small\" style=\"flex:1\">{{ actionHint }}</span>\n @if (canValidate) {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-registry-validate\" (click)=\"requestPromote('Validated')\">\n <i class=\"fa-solid fa-circle-check\"></i> Mark Validated\n </button>\n }\n @if (canPublish) {\n <button mjButton variant=\"primary\" size=\"sm\" data-testid=\"ps-registry-promote\" (click)=\"requestPromote('Published')\">\n <i class=\"fa-solid fa-arrow-up\"></i> Promote to Published\n </button>\n }\n @if (canArchive) {\n <button mjButton variant=\"secondary\" size=\"sm\" data-testid=\"ps-registry-archive\" (click)=\"requestPromote('Archived')\">\n <i class=\"fa-solid fa-box-archive\"></i> Archive\n </button>\n }\n </div>\n </div>\n }\n\n <!-- 7. Confirm Promotion Modal -->\n @if (pending) {\n <div class=\"ps-modal-backdrop\" (click)=\"cancelPromote()\">\n <div class=\"ps-modal\" (click)=\"$event.stopPropagation()\" data-testid=\"ps-confirm-modal\">\n <div class=\"ps-modal-head\" [class.warn]=\"pendingVariant === 'warn'\" [class.danger]=\"pendingVariant === 'danger'\">\n <span class=\"ico\"><i [class]=\"pendingIcon\"></i></span>\n <h3>{{ pendingTitle }}</h3>\n </div>\n <div class=\"ps-modal-body\">\n <div [innerHTML]=\"pendingMessage\"></div>\n @if (pending.leakageFlagged || pending.targetStatus === 'Archived') {\n <div class=\"ps-field\" style=\"margin-top:12px\">\n <label>\n {{ pending.leakageFlagged ? 'Leakage sign-off reason' : 'Reason (optional)' }}\n {{ pending.leakageFlagged ? ' *' : '' }}\n </label>\n <textarea\n class=\"ps-input\"\n rows=\"3\"\n [(ngModel)]=\"pendingReason\"\n [placeholder]=\"pending.leakageFlagged ? 'Explain why this model is safe to publish despite the leakage flag…' : 'Add an optional note for the record…'\"\n [disabled]=\"busy\"></textarea>\n </div>\n }\n </div>\n <div class=\"ps-modal-foot\">\n <button\n mjButton\n [variant]=\"pendingVariant === 'danger' ? 'danger' : 'primary'\"\n size=\"sm\"\n [disabled]=\"busy || (pending.leakageFlagged && !pendingReason.trim())\"\n (click)=\"confirmPromote(pendingReason.trim())\">\n @if (busy) {\n <i class=\"fa-solid fa-circle-notch fa-spin\"></i>\n } @else {\n <i [class]=\"pendingIcon\"></i>\n }\n {{ pendingConfirmLabel }}\n </button>\n <span class=\"ps-spacer\" style=\"flex:1\"></span>\n <button mjButton variant=\"secondary\" size=\"sm\" [disabled]=\"busy\" (click)=\"cancelPromote()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n } @else {\n <div class=\"ps-empty\" style=\"padding: 32px; text-align: center;\">\n <span class=\"ps-empty-ico\"><i class=\"fa-solid fa-cube\"></i></span>\n <h3>No Model Selected</h3>\n <p class=\"ps-muted\">Select an ML Model from the list to inspect its configuration and metrics.</p>\n </div>\n }\n</div>\n"]}
@@ -1,16 +1,36 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { BaseFormPolicy, FormChromeContext, FormChromeSpec } from '@memberjunction/ng-base-forms';
1
3
  import { MJRecordProcessFormComponent } from '../../generated/Entities/MJRecordProcess/mjrecordprocess.form.component';
2
4
  import * as i0 from "@angular/core";
3
5
  /**
4
- * Custom form override for `MJ: Record Processes`. Replaces the generated field layout (which exposes the
5
- * rules as a raw `Configuration` JSON textarea) with the visual `<mj-record-process-editor>` — the same
6
- * authoring surface used in the Bulk Operations app — so editing a process record anywhere in Explorer
7
- * gets the business-friendly rules builder + inline dry-run preview. The form's container owns Save; the
8
- * editor mutates the record in place (ShowToolbar=false).
6
+ * Custom form override for `MJ: Record Processes` (priority 100).
7
+ * Presents the Record Process / Feature Pipeline in a first-class MJ form with:
8
+ * - Lead panel: "Overview & Status" with hero KPI summary, target entity badge, and trigger diagnostics.
9
+ * - Builder panel: "Pipeline Configuration" embedding the visual <mj-feature-pipeline-builder> for Infer / Feature Pipelines,
10
+ * or the <mj-record-process-editor> for Field Rules.
11
+ * - History panel: "Prior Runs" embedding <mj-record-process-history> with run status, metrics, and per-record diff drill-down.
12
+ * - Standard field sections: Process Definition, Execution Logic, Scope Configuration, Triggers, Performance & Optimization.
13
+ * - Related entity sections: Watermarks, ML Model Scoring Bindings, Feature Values, Feature Value Caches.
14
+ * - System Metadata panel.
9
15
  */
10
- export declare class RecordProcessFormComponentExtended extends MJRecordProcessFormComponent {
16
+ export declare class RecordProcessFormComponentExtended extends MJRecordProcessFormComponent implements OnInit {
17
+ pipelineValid: boolean;
18
+ ngOnInit(): Promise<void>;
19
+ get TargetEntityName(): string;
20
+ get WorkTypeIcon(): string;
21
+ get StatusBadgeClass(): string;
22
+ OnPipelineSpecChange(): void;
23
+ OnPipelineValidChange(valid: boolean): void;
11
24
  static ɵfac: i0.ɵɵFactoryDeclaration<RecordProcessFormComponentExtended, never>;
12
25
  static ɵcmp: i0.ɵɵComponentDeclaration<RecordProcessFormComponentExtended, "mj-record-process-form-extended", never, {}, {}, never, never, false, never>;
13
26
  }
14
- /** Tree-shaking guard so the override registers with the ClassFactory. */
27
+ /**
28
+ * Form policy ensuring the Overview & Status panel sits as the lead group
29
+ * before Details on the left-nav rail.
30
+ */
31
+ export declare class RecordProcessFormPolicy extends BaseFormPolicy {
32
+ DecorateChrome(spec: FormChromeSpec, _ctx: FormChromeContext): FormChromeSpec;
33
+ }
34
+ /** Tree-shaking guard so the override and policy register with the ClassFactory. */
15
35
  export declare function LoadRecordProcessFormComponentExtended(): void;
16
36
  //# sourceMappingURL=record-process-form.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record-process-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/RecordProcesses/record-process-form.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yEAAyE,CAAC;;AAEvH;;;;;;GAMG;AACH,qBAMa,kCAAmC,SAAQ,4BAA4B;yCAAvE,kCAAkC;2CAAlC,kCAAkC;CAAwC;AAEvF,0EAA0E;AAC1E,wBAAgB,sCAAsC,IAAI,IAAI,CAE7D"}
1
+ {"version":3,"file":"record-process-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/RecordProcesses/record-process-form.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAqB,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACrH,OAAO,EAAE,4BAA4B,EAAE,MAAM,yEAAyE,CAAC;;AAEvH;;;;;;;;;;GAUG;AACH,qBAOa,kCAAmC,SAAQ,4BAA6B,YAAW,MAAM;IAC3F,aAAa,UAAQ;IAEb,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBxC,IAAW,gBAAgB,IAAI,MAAM,CAIpC;IAED,IAAW,YAAY,IAAI,MAAM,CAehC;IAED,IAAW,gBAAgB,IAAI,MAAM,CAWpC;IAEM,oBAAoB,IAAI,IAAI;IAI5B,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;yCA9DzC,kCAAkC;2CAAlC,kCAAkC;CAkE9C;AAED;;;GAGG;AACH,qBACa,uBAAwB,SAAQ,cAAc;IACvC,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,cAAc;CAYhG;AAED,oFAAoF;AACpF,wBAAgB,sCAAsC,IAAI,IAAI,CAG7D"}