@memberjunction/ng-record-process-studio 6.1.4 → 6.2.0-edge.1
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/feature-pipeline-builder/feature-pipeline-builder.component.d.ts +163 -0
- package/dist/lib/feature-pipeline-builder/feature-pipeline-builder.component.d.ts.map +1 -0
- package/dist/lib/feature-pipeline-builder/feature-pipeline-builder.component.js +1400 -0
- package/dist/lib/feature-pipeline-builder/feature-pipeline-builder.component.js.map +1 -0
- package/dist/lib/record-process-editor/record-process-editor.component.d.ts +19 -1
- package/dist/lib/record-process-editor/record-process-editor.component.d.ts.map +1 -1
- package/dist/lib/record-process-editor/record-process-editor.component.js +173 -53
- package/dist/lib/record-process-editor/record-process-editor.component.js.map +1 -1
- package/dist/lib/record-process-history/record-process-history.component.d.ts +10 -0
- package/dist/lib/record-process-history/record-process-history.component.d.ts.map +1 -1
- package/dist/lib/record-process-history/record-process-history.component.js +30 -10
- package/dist/lib/record-process-history/record-process-history.component.js.map +1 -1
- package/dist/lib/record-process-studio/record-process-studio.component.d.ts +12 -0
- package/dist/lib/record-process-studio/record-process-studio.component.d.ts.map +1 -1
- package/dist/lib/record-process-studio/record-process-studio.component.js +31 -7
- package/dist/lib/record-process-studio/record-process-studio.component.js.map +1 -1
- package/dist/lib/run-detail.d.ts +4 -0
- package/dist/lib/run-detail.d.ts.map +1 -1
- package/dist/lib/run-detail.js +10 -2
- package/dist/lib/run-detail.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +3 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +10 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-pipeline-builder.component.js","sourceRoot":"","sources":["../../../src/lib/feature-pipeline-builder/feature-pipeline-builder.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Visual authoring component for a Feature Pipeline (Infer Record Process).\n * Configures the DataFeatureSpec (Context, Outputs & Constraints, Caching) and binds\n * prompt, output mapping, and watermark strategy directly on the MJRecordProcessEntity.\n *\n * @module @memberjunction/ng-record-process-studio\n */\n\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { EntityInfo, EntityFieldInfo, LogError, RunView, UserInfo } from '@memberjunction/core';\nimport { MJRecordProcessEntity, MJAIPromptEntity, MJEntityDocumentEntity } from '@memberjunction/core-entities';\nimport {\n DataFeatureSpec,\n DataFeatureOutput,\n ValueConstraint,\n OutputTarget,\n ViolationPolicy,\n renderConstraintBlock,\n validateSpec,\n type SpecValidationIssue,\n type EntityMetadataStub,\n} from '@memberjunction/feature-pipelines';\nimport { SafeJSONParse, UUIDsEqual } from '@memberjunction/global';\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\n\nexport type PromptOption = Pick<MJAIPromptEntity, 'ID' | 'Name' | 'Description'>;\n\nexport type EntityDocOption = Pick<MJEntityDocumentEntity, 'ID' | 'Name' | 'EntityID'>;\n\n@Component({\n selector: 'mj-feature-pipeline-builder',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, MJButtonDirective],\n template: `\n <div class=\"fpb\">\n <!-- STAGE 1: CONTEXT SOURCE -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">1</span>\n <h3>Context Source</h3>\n </div>\n <p class=\"rpe-desc\">Choose how data from each record is extracted and formatted before being sent to the LLM prompt.</p>\n\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Context Mode</label>\n <select class=\"mj-input\" [value]=\"contextMode\" (change)=\"onContextModeChange($event)\">\n <option value=\"fields\">Record Fields</option>\n <option value=\"document\">Entity Document (Template)</option>\n <option value=\"query\">Query (Graph Traversal)</option>\n </select>\n </div>\n\n @if (contextMode === 'document') {\n <div class=\"field\">\n <label>Entity Document</label>\n <select class=\"mj-input\" [value]=\"spec.Context.EntityDocumentID || ''\" (change)=\"onEntityDocChange($event)\">\n <option value=\"\" disabled>— Select Entity Document —</option>\n @for (doc of availableDocs; track doc.ID) {\n <option [value]=\"doc.ID\">{{ doc.Name }}</option>\n }\n </select>\n </div>\n }\n\n @if (contextMode === 'query') {\n <div class=\"field\">\n <label>Query ID</label>\n <input class=\"mj-input mono\" [value]=\"spec.Context.QueryID || ''\" (input)=\"onQueryIDChange($event)\" placeholder=\"UUID of approved Query\">\n </div>\n }\n\n <div class=\"field\">\n <label>Field Filter (optional)</label>\n <input class=\"mj-input\" [value]=\"fieldsCsv\" (input)=\"onFieldsCsvChange($event)\" placeholder=\"e.g. FirstName, LastName, Title\">\n </div>\n </div>\n </section>\n\n <!-- STAGE 2: PROMPT & INJECTED CONSTRAINTS -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">2</span>\n <h3>AI Prompt</h3>\n </div>\n <div class=\"rpe-grid2\">\n <div class=\"field\">\n <label>Prompt</label>\n <select class=\"mj-input\" [value]=\"Record?.PromptID || ''\" (change)=\"onPromptChange($event)\">\n <option value=\"\" disabled>— Select AI Prompt —</option>\n @for (p of availablePrompts; track p.ID) {\n <option [value]=\"p.ID\">{{ p.Name }}</option>\n }\n </select>\n </div>\n @if (selectedPrompt) {\n <div class=\"field\">\n <label>Prompt Description</label>\n <div class=\"rpe-static-text\">{{ selectedPrompt.Description || 'No description provided' }}</div>\n </div>\n }\n </div>\n\n @if (renderedConstraintPreview) {\n <div class=\"field rpe-mt\">\n <label>Injected Constraint Block <span class=\"muted\">— automatically appended to prompt instructions</span></label>\n <pre class=\"fpb-code-preview\">{{ renderedConstraintPreview }}</pre>\n </div>\n }\n </section>\n\n <!-- STAGE 3: OUTPUTS & CONSTRAINTS -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h fpb-split-h\">\n <div class=\"fpb-title-group\">\n <span class=\"num\">3</span>\n <h3>Outputs & Constraints</h3>\n </div>\n <button mjButton size=\"sm\" variant=\"secondary\" (click)=\"addOutput()\">\n <i class=\"fa-solid fa-plus\"></i> Add Output\n </button>\n </div>\n <p class=\"rpe-desc\">Define the structured outputs produced by the LLM, their type constraints, and target write-back destinations.</p>\n\n @if (!spec.Outputs || spec.Outputs.length === 0) {\n <div class=\"fpb-empty-outputs\">\n <i class=\"fa-solid fa-arrow-turn-up\"></i>\n <span>No outputs defined. Click <strong>Add Output</strong> to configure at least one output attribute.</span>\n </div>\n } @else {\n <div class=\"fpb-outputs-list\">\n @for (output of spec.Outputs; track $index) {\n <div class=\"fpb-output-card\">\n <div class=\"fpb-output-head\">\n <h4>Output #{{ $index + 1 }}: {{ output.Name || '(unnamed)' }}</h4>\n <button mjButton size=\"sm\" variant=\"flat\" (click)=\"removeOutput($index)\">\n <i class=\"fa-solid fa-trash\"></i> Remove\n </button>\n </div>\n\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Output Name</label>\n <input class=\"mj-input\" [value]=\"output.Name\" (input)=\"updateOutputProp($index, 'Name', $event)\" placeholder=\"e.g. SentimentScore\">\n </div>\n <div class=\"field\">\n <label>JSON Path / Ref</label>\n <input class=\"mj-input mono\" [value]=\"output.Ref\" (input)=\"updateOutputProp($index, 'Ref', $event)\" placeholder=\"e.g. $.sentiment or $\">\n </div>\n <div class=\"field\">\n <label>Target Mode</label>\n <select class=\"mj-input\" [value]=\"output.Target.Mode\" (change)=\"updateTargetMode($index, $event)\">\n <option value=\"field\">Entity Column (field)</option>\n <option value=\"child\">Child Rows (child)</option>\n <option value=\"tags\">Taxonomy Tags (tags)</option>\n </select>\n </div>\n </div>\n\n <!-- Target details -->\n <div class=\"rpe-grid3 rpe-mt\">\n @if (output.Target.Mode === 'field') {\n <div class=\"field\">\n <label>Target Field</label>\n <select class=\"mj-input\" [value]=\"output.Target.EntityFieldName\" (change)=\"updateFieldTarget($index, $event)\">\n <option value=\"\" disabled>— Select Column —</option>\n @for (f of entityFields; track f.Name) {\n <option [value]=\"f.Name\">{{ f.DisplayName || f.Name }} ({{ f.TSType }})</option>\n }\n </select>\n </div>\n }\n\n @if (output.Target.Mode === 'child') {\n <div class=\"field\">\n <label>Child Entity</label>\n <select class=\"mj-input\" [value]=\"output.Target.EntityName\" (change)=\"updateChildTargetEntity($index, $event)\">\n <option value=\"\" disabled>— Select Entity —</option>\n @for (e of availableEntities; track e.ID) {\n <option [value]=\"e.Name\">{{ e.DisplayName || e.Name }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Constraint details -->\n <div class=\"field\">\n <label>Constraint Type</label>\n <select class=\"mj-input\" [value]=\"output.Constraint?.Type || 'none'\" (change)=\"updateConstraintType($index, $event)\">\n <option value=\"none\">None / Unconstrained</option>\n <option value=\"enum\">Enum (Allowed Values)</option>\n <option value=\"numeric\">Numeric (Min/Max)</option>\n <option value=\"boolean\">Boolean</option>\n <option value=\"freetext\">Free Text</option>\n </select>\n </div>\n\n @if (output.Constraint) {\n <div class=\"field\">\n <label>Violation Policy</label>\n <select class=\"mj-input\" [value]=\"output.Constraint.OnViolation || 'fail'\" (change)=\"updateViolationPolicy($index, $event)\">\n <option value=\"fail\">Fail Row</option>\n <option value=\"null\">Set Output to Null</option>\n <option value=\"coerce-to-other\">Coerce / Fallback</option>\n </select>\n </div>\n }\n </div>\n\n <!-- Constraint params -->\n @if (output.Constraint?.Type === 'enum') {\n <div class=\"field rpe-mt\">\n <label>Allowed Values (comma separated)</label>\n <input class=\"mj-input\" [value]=\"getEnumValuesCsv(output.Constraint)\" (input)=\"updateEnumValues($index, $event)\" placeholder=\"e.g. Positive, Neutral, Negative\">\n </div>\n }\n @if (output.Constraint?.Type === 'numeric') {\n <div class=\"rpe-grid2 rpe-mt\">\n <div class=\"field\">\n <label>Min Value</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"getNumericMin(output.Constraint)\" (input)=\"updateNumericMin($index, $event)\">\n </div>\n <div class=\"field\">\n <label>Max Value</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"getNumericMax(output.Constraint)\" (input)=\"updateNumericMax($index, $event)\">\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- STAGE 4: MATERIALIZATION & WATERMARK -->\n <section class=\"rpe-sec\">\n <div class=\"rpe-sec-h\">\n <span class=\"num\">4</span>\n <h3>Caching & Watermarks</h3>\n </div>\n <div class=\"rpe-grid3\">\n <div class=\"field\">\n <label>Watermark Strategy</label>\n <select class=\"mj-input\" [value]=\"Record?.WatermarkStrategy || 'Checksum'\" (change)=\"updateWatermarkStrategy($event)\">\n <option value=\"Checksum\">Checksum (Content Hash + Prompt Hash)</option>\n <option value=\"UpdatedAt\">UpdatedAt (Compare modified timestamp)</option>\n <option value=\"None\">None (Always process all records)</option>\n </select>\n </div>\n\n <div class=\"field\">\n <label>Skip Unchanged Records</label>\n <select class=\"mj-input\" [value]=\"Record?.SkipUnchanged ? 'true' : 'false'\" (change)=\"updateSkipUnchanged($event)\">\n <option value=\"true\">Yes — Skip unchanged rows</option>\n <option value=\"false\">No — Recompute every time</option>\n </select>\n </div>\n\n <div class=\"field\">\n <label>Enable Result Cache</label>\n <select class=\"mj-input\" [value]=\"spec.Caching.Cacheable ? 'true' : 'false'\" (change)=\"updateCacheable($event)\">\n <option value=\"true\">Yes — Cache outputs by distinct key</option>\n <option value=\"false\">No — Compute per row</option>\n </select>\n </div>\n </div>\n\n @if (spec.Caching.Cacheable) {\n <div class=\"rpe-grid3 rpe-mt\">\n <div class=\"field\">\n <label>Cache Key Fields (comma separated)</label>\n <input class=\"mj-input\" [value]=\"cacheKeyFieldsCsv\" (input)=\"updateCacheKeyFields($event)\" placeholder=\"e.g. CurrentJobTitle\">\n </div>\n <div class=\"field\">\n <label>Cache TTL (Seconds)</label>\n <input class=\"mj-input\" type=\"number\" [value]=\"spec.Caching.TTLSeconds ?? 86400\" (input)=\"updateCacheTTL($event)\">\n </div>\n <div class=\"field\">\n <label>Cache Scope</label>\n <select class=\"mj-input\" [value]=\"spec.Caching.Scope || 'pipeline'\" (change)=\"updateCacheScope($event)\">\n <option value=\"pipeline\">Pipeline (Isolated to this process)</option>\n <option value=\"prompt\">Prompt (Shared across processes with same prompt)</option>\n </select>\n </div>\n </div>\n }\n </section>\n\n <!-- VALIDATION ISSUES -->\n @if (validationErrors.length > 0) {\n <div class=\"fpb-issues-card fpb-issues-card--error\">\n <h4><i class=\"fa-solid fa-triangle-exclamation\"></i> Specification Issues</h4>\n <ul>\n @for (issue of validationErrors; track $index) {\n <li><strong>{{ issue.Field ? issue.Field + ': ' : '' }}</strong>{{ issue.Message }} @if (issue.FixRecommendation) { <span class=\"muted\">(Fix: {{ issue.FixRecommendation }})</span> }</li>\n }\n </ul>\n </div>\n }\n </div>\n `,\n styles: [`\n .fpb { display: flex; flex-direction: column; gap: 20px; }\n .rpe-desc { font-size: 13px; color: var(--mj-text-secondary); margin: -6px 0 16px 0; }\n .rpe-sec { background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-subtle); border-radius: var(--mj-radius-md, 10px); padding: 18px 20px; }\n .rpe-sec-h { display: flex; align-items: center; gap: 11px; margin-bottom: 14px; }\n .rpe-sec-h h3 { margin: 0; font-size: 16px; font-weight: 700; color: var(--mj-text-primary); }\n .rpe-sec-h .num { width: 24px; height: 24px; border-radius: 50%; background: var(--mj-brand-primary); color: #fff; display: grid; place-items: center; font-size: 12px; font-weight: 800; }\n .fpb-split-h { justify-content: space-between; }\n .fpb-title-group { display: flex; align-items: center; gap: 11px; }\n .rpe-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }\n .rpe-grid3 { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 16px; }\n .field { display: flex; flex-direction: column; gap: 6px; }\n .field label { font-size: 12.5px; font-weight: 600; color: var(--mj-text-secondary); }\n .rpe-mt { margin-top: 14px; }\n .mono { font-family: monospace; font-size: 12.5px; }\n .muted { color: var(--mj-text-muted); font-weight: 400; }\n .rpe-static-text { font-size: 13px; color: var(--mj-text-muted); padding: 7px 0; }\n .fpb-code-preview { background: var(--mj-bg-surface-sunken, #0f172a); color: var(--mj-text-code, var(--mj-text-primary, #e2e8f0)); border: 1px solid var(--mj-border-subtle, #334155); padding: 12px; border-radius: 6px; font-size: 12px; font-family: var(--mj-font-mono, monospace); white-space: pre-wrap; word-break: break-word; max-height: 160px; overflow-y: auto; margin: 0; }\n .fpb-empty-outputs { display: flex; align-items: center; gap: 10px; padding: 20px; border: 1px dashed var(--mj-border-subtle); border-radius: 8px; color: var(--mj-text-muted); font-size: 13px; }\n .fpb-outputs-list { display: flex; flex-direction: column; gap: 16px; }\n .fpb-output-card { border: 1px solid var(--mj-border-subtle); border-radius: 8px; padding: 14px 16px; background: var(--mj-bg-surface); }\n .fpb-output-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; border-bottom: 1px solid var(--mj-border-subtle); padding-bottom: 8px; }\n .fpb-output-head h4 { margin: 0; font-size: 14px; font-weight: 600; }\n .fpb-issues-card { border-radius: 8px; padding: 12px 16px; font-size: 13px; }\n .fpb-issues-card--error { background: rgba(239, 68, 68, 0.08); border: 1px solid var(--mj-status-error); color: var(--mj-status-error-text); }\n .fpb-issues-card h4 { margin: 0 0 8px 0; font-size: 14px; display: flex; align-items: center; gap: 8px; }\n .fpb-issues-card ul { margin: 0; padding-left: 20px; }\n `],\n})\nexport class FeaturePipelineBuilderComponent extends BaseAngularComponent implements OnInit, OnChanges {\n private cdr = inject(ChangeDetectorRef);\n\n @Input() Record: MJRecordProcessEntity | null = null;\n @Input() EntityID: string | null = null;\n\n @Output() SpecChange = new EventEmitter<DataFeatureSpec>();\n @Output() ValidChange = new EventEmitter<boolean>();\n\n public spec: DataFeatureSpec = {\n Name: '',\n Description: '',\n PromptID: '',\n Context: {},\n Outputs: [],\n Caching: { Cacheable: false },\n };\n\n public AvailablePrompts: PromptOption[] = [];\n\n /** @deprecated Use {@link AvailablePrompts}. */\n public get availablePrompts(): PromptOption[] {\n return this.AvailablePrompts;\n }\n /** @deprecated Use {@link AvailablePrompts}. */\n public set availablePrompts(value: PromptOption[]) {\n this.AvailablePrompts = value;\n }\n public AvailableDocs: EntityDocOption[] = [];\n\n /** @deprecated Use {@link AvailableDocs}. */\n public get availableDocs(): EntityDocOption[] {\n return this.AvailableDocs;\n }\n /** @deprecated Use {@link AvailableDocs}. */\n public set availableDocs(value: EntityDocOption[]) {\n this.AvailableDocs = value;\n }\n public AvailableEntities: EntityInfo[] = [];\n\n /** @deprecated Use {@link AvailableEntities}. */\n public get availableEntities(): EntityInfo[] {\n return this.AvailableEntities;\n }\n /** @deprecated Use {@link AvailableEntities}. */\n public set availableEntities(value: EntityInfo[]) {\n this.AvailableEntities = value;\n }\n public EntityFields: EntityFieldInfo[] = [];\n\n /** @deprecated Use {@link EntityFields}. */\n public get entityFields(): EntityFieldInfo[] {\n return this.EntityFields;\n }\n /** @deprecated Use {@link EntityFields}. */\n public set entityFields(value: EntityFieldInfo[]) {\n this.EntityFields = value;\n }\n public SelectedPrompt: PromptOption | null = null;\n\n /** @deprecated Use {@link SelectedPrompt}. */\n public get selectedPrompt(): PromptOption | null {\n return this.SelectedPrompt;\n }\n /** @deprecated Use {@link SelectedPrompt}. */\n public set selectedPrompt(value: PromptOption | null) {\n this.SelectedPrompt = value;\n }\n\n public ContextMode: 'fields' | 'document' | 'query' = 'fields';\n\n /** @deprecated Use {@link ContextMode}. */\n public get contextMode(): 'fields' | 'document' | 'query' {\n return this.ContextMode;\n }\n /** @deprecated Use {@link ContextMode}. */\n public set contextMode(value: 'fields' | 'document' | 'query') {\n this.ContextMode = value;\n }\n public FieldsCsv = '';\n\n /** @deprecated Use {@link FieldsCsv}. */\n public get fieldsCsv() {\n return this.FieldsCsv;\n }\n /** @deprecated Use {@link FieldsCsv}. */\n public set fieldsCsv(value) {\n this.FieldsCsv = value;\n }\n public CacheKeyFieldsCsv = '';\n\n /** @deprecated Use {@link CacheKeyFieldsCsv}. */\n public get cacheKeyFieldsCsv() {\n return this.CacheKeyFieldsCsv;\n }\n /** @deprecated Use {@link CacheKeyFieldsCsv}. */\n public set cacheKeyFieldsCsv(value) {\n this.CacheKeyFieldsCsv = value;\n }\n public ValidationErrors: SpecValidationIssue[] = [];\n\n /** @deprecated Use {@link ValidationErrors}. */\n public get validationErrors(): SpecValidationIssue[] {\n return this.ValidationErrors;\n }\n /** @deprecated Use {@link ValidationErrors}. */\n public set validationErrors(value: SpecValidationIssue[]) {\n this.ValidationErrors = value;\n }\n public RenderedConstraintPreview = '';\n\n /** @deprecated Use {@link RenderedConstraintPreview}. */\n public get renderedConstraintPreview() {\n return this.RenderedConstraintPreview;\n }\n /** @deprecated Use {@link RenderedConstraintPreview}. */\n public set renderedConstraintPreview(value) {\n this.RenderedConstraintPreview = value;\n }\n\n async ngOnInit(): Promise<void> {\n this.AvailableEntities = [...this.ProviderToUse.Entities].sort((a, b) =>\n (a.DisplayName || a.Name).localeCompare(b.DisplayName || b.Name)\n );\n await this.loadPrompts();\n await this.loadEntityDocs();\n this.SyncFromRecord();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['Record'] || changes['EntityID']) {\n this.SyncFromRecord();\n }\n }\n\n public SyncFromRecord(): void {\n if (this.Record) {\n this.spec.Name = this.Record.Name || '';\n this.spec.Description = this.Record.Description || '';\n this.spec.PromptID = this.Record.PromptID || '';\n\n if (this.Record.Configuration) {\n const parsed = SafeJSONParse<DataFeatureSpec>(this.Record.Configuration);\n if (parsed && typeof parsed === 'object') {\n this.spec.Outputs = Array.isArray(parsed.Outputs) ? parsed.Outputs : [];\n this.spec.Context = parsed.Context ?? {};\n this.spec.Caching = parsed.Caching ?? { Cacheable: false };\n this.spec.ProcessorExtensionKey = parsed.ProcessorExtensionKey;\n }\n }\n }\n\n if (!this.spec.Outputs) {\n this.spec.Outputs = [];\n }\n if (!this.spec.Context) {\n this.spec.Context = {};\n }\n\n if (this.spec.Context.EntityDocumentID) {\n this.ContextMode = 'document';\n } else if (this.spec.Context.QueryID) {\n this.ContextMode = 'query';\n } else {\n this.ContextMode = 'fields';\n }\n\n this.FieldsCsv = (this.spec.Context.Fields ?? []).join(', ');\n this.CacheKeyFieldsCsv = (this.spec.Caching.KeyFields ?? []).join(', ');\n\n const targetEntityID = this.Record?.EntityID || this.EntityID;\n if (targetEntityID) {\n const entity = this.ProviderToUse.EntityByID(targetEntityID);\n this.EntityFields = entity?.Fields ? [...entity.Fields].sort((a, b) => a.Name.localeCompare(b.Name)) : [];\n } else {\n this.EntityFields = [];\n }\n\n if (this.Record?.PromptID) {\n this.SelectedPrompt = this.AvailablePrompts.find((p) => UUIDsEqual(p.ID, this.Record?.PromptID)) ?? null;\n }\n\n this.recomputeValidation();\n this.cdr.detectChanges();\n }\n\n /** @deprecated Use {@link SyncFromRecord}. */\n public syncFromRecord(): void {\n return this.SyncFromRecord();\n }\n\n private async loadPrompts(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const res = await rv.RunView<PromptOption>({\n EntityName: 'MJ: AI Prompts',\n Fields: ['ID', 'Name', 'Description'],\n ResultType: 'simple',\n });\n if (res.Success && Array.isArray(res.Results)) {\n this.AvailablePrompts = res.Results;\n } else {\n this.AvailablePrompts = [];\n LogError(`Failed to load AI Prompts: ${res.ErrorMessage || 'unknown error'}`);\n }\n } catch (error) {\n this.AvailablePrompts = [];\n LogError('Error loading AI Prompts', undefined, error);\n }\n }\n\n private async loadEntityDocs(): Promise<void> {\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const res = await rv.RunView<EntityDocOption>({\n EntityName: 'MJ: Entity Documents',\n Fields: ['ID', 'Name', 'EntityID'],\n ResultType: 'simple',\n });\n if (res.Success && Array.isArray(res.Results)) {\n this.AvailableDocs = res.Results;\n } else {\n this.AvailableDocs = [];\n LogError(`Failed to load Entity Documents: ${res.ErrorMessage || 'unknown error'}`);\n }\n } catch (error) {\n this.AvailableDocs = [];\n LogError('Error loading Entity Documents', undefined, error);\n }\n }\n\n public OnContextModeChange(event: Event): void {\n this.ContextMode = (event.target as HTMLSelectElement).value as 'fields' | 'document' | 'query';\n if (!this.spec.Context) this.spec.Context = {};\n if (this.ContextMode === 'fields') {\n this.spec.Context.EntityDocumentID = undefined;\n this.spec.Context.QueryID = undefined;\n } else if (this.ContextMode === 'document') {\n this.spec.Context.QueryID = undefined;\n } else if (this.ContextMode === 'query') {\n this.spec.Context.EntityDocumentID = undefined;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnContextModeChange}. */\n public onContextModeChange(event: Event): void {\n return this.OnContextModeChange(event);\n }\n\n public OnEntityDocChange(event: Event): void {\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.EntityDocumentID = (event.target as HTMLSelectElement).value;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnEntityDocChange}. */\n public onEntityDocChange(event: Event): void {\n return this.OnEntityDocChange(event);\n }\n\n public OnQueryIDChange(event: Event): void {\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.QueryID = (event.target as HTMLInputElement).value;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnQueryIDChange}. */\n public onQueryIDChange(event: Event): void {\n return this.OnQueryIDChange(event);\n }\n\n public OnFieldsCsvChange(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.FieldsCsv = val;\n if (!this.spec.Context) this.spec.Context = {};\n this.spec.Context.Fields = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnFieldsCsvChange}. */\n public onFieldsCsvChange(event: Event): void {\n return this.OnFieldsCsvChange(event);\n }\n\n public OnPromptChange(event: Event): void {\n const promptID = (event.target as HTMLSelectElement).value;\n if (this.Record) {\n this.Record.PromptID = promptID;\n }\n this.spec.PromptID = promptID;\n this.SelectedPrompt = this.AvailablePrompts.find((p) => UUIDsEqual(p.ID, promptID)) ?? null;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link OnPromptChange}. */\n public onPromptChange(event: Event): void {\n return this.OnPromptChange(event);\n }\n\n public addOutput(): void {\n const newOutput: DataFeatureOutput = {\n Name: `Output_${this.spec.Outputs.length + 1}`,\n Ref: '$',\n Target: {\n Mode: 'field',\n EntityFieldName: this.EntityFields.length > 0 ? this.EntityFields[0].Name : '',\n },\n };\n this.spec.Outputs.push(newOutput);\n this.emitChanges();\n }\n\n public RemoveOutput(index: number): void {\n this.spec.Outputs.splice(index, 1);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link RemoveOutput}. */\n public removeOutput(index: number): void {\n return this.RemoveOutput(index);\n }\n\n public UpdateOutputProp(index: number, prop: 'Name' | 'Ref', event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.spec.Outputs[index][prop] = val;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateOutputProp}. */\n public updateOutputProp(index: number, prop: 'Name' | 'Ref', event: Event): void {\n return this.UpdateOutputProp(index, prop, event);\n }\n\n public UpdateTargetMode(index: number, event: Event): void {\n const mode = (event.target as HTMLSelectElement).value as OutputTarget['Mode'];\n const current = this.spec.Outputs[index];\n if (mode === 'field') {\n current.Target = {\n Mode: 'field',\n EntityFieldName: this.EntityFields.length > 0 ? this.EntityFields[0].Name : '',\n };\n } else if (mode === 'child') {\n current.Target = {\n Mode: 'child',\n EntityName: this.AvailableEntities.length > 0 ? this.AvailableEntities[0].Name : '',\n ParentField: 'ParentID',\n Map: {},\n };\n } else if (mode === 'tags') {\n current.Target = {\n Mode: 'tags',\n RootTagID: '',\n };\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateTargetMode}. */\n public updateTargetMode(index: number, event: Event): void {\n return this.UpdateTargetMode(index, event);\n }\n\n public UpdateFieldTarget(index: number, event: Event): void {\n const fieldName = (event.target as HTMLSelectElement).value;\n const target = this.spec.Outputs[index].Target;\n if (target.Mode === 'field') {\n target.EntityFieldName = fieldName;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateFieldTarget}. */\n public updateFieldTarget(index: number, event: Event): void {\n return this.UpdateFieldTarget(index, event);\n }\n\n public UpdateChildTargetEntity(index: number, event: Event): void {\n const entityName = (event.target as HTMLSelectElement).value;\n const target = this.spec.Outputs[index].Target;\n if (target.Mode === 'child') {\n target.EntityName = entityName;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateChildTargetEntity}. */\n public updateChildTargetEntity(index: number, event: Event): void {\n return this.UpdateChildTargetEntity(index, event);\n }\n\n public UpdateConstraintType(index: number, event: Event): void {\n const type = (event.target as HTMLSelectElement).value;\n const output = this.spec.Outputs[index];\n if (type === 'none') {\n output.Constraint = undefined;\n } else if (type === 'enum') {\n output.Constraint = { Type: 'enum', Values: [], OnViolation: 'fail' };\n } else if (type === 'numeric') {\n output.Constraint = { Type: 'numeric', Min: 0, Max: 100, OnViolation: 'fail' };\n } else if (type === 'boolean') {\n output.Constraint = { Type: 'boolean', OnViolation: 'fail' };\n } else if (type === 'freetext') {\n output.Constraint = { Type: 'freetext', MaxLength: 500, OnViolation: 'fail' };\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateConstraintType}. */\n public updateConstraintType(index: number, event: Event): void {\n return this.UpdateConstraintType(index, event);\n }\n\n public UpdateViolationPolicy(index: number, event: Event): void {\n const policy = (event.target as HTMLSelectElement).value as ViolationPolicy;\n if (this.spec.Outputs[index].Constraint) {\n this.spec.Outputs[index].Constraint.OnViolation = policy;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateViolationPolicy}. */\n public updateViolationPolicy(index: number, event: Event): void {\n return this.UpdateViolationPolicy(index, event);\n }\n\n public GetEnumValuesCsv(constraint?: ValueConstraint): string {\n if (!constraint || constraint.Type !== 'enum' || !Array.isArray(constraint.Values)) {\n return '';\n }\n return constraint.Values.join(', ');\n }\n\n /** @deprecated Use {@link GetEnumValuesCsv}. */\n public getEnumValuesCsv(constraint?: ValueConstraint): string {\n return this.GetEnumValuesCsv(constraint);\n }\n\n public GetNumericMin(constraint?: ValueConstraint): number | string {\n return constraint && constraint.Type === 'numeric' && constraint.Min !== undefined ? constraint.Min : '';\n }\n\n /** @deprecated Use {@link GetNumericMin}. */\n public getNumericMin(constraint?: ValueConstraint): number | string {\n return this.GetNumericMin(constraint);\n }\n\n public GetNumericMax(constraint?: ValueConstraint): number | string {\n return constraint && constraint.Type === 'numeric' && constraint.Max !== undefined ? constraint.Max : '';\n }\n\n /** @deprecated Use {@link GetNumericMax}. */\n public getNumericMax(constraint?: ValueConstraint): number | string {\n return this.GetNumericMax(constraint);\n }\n\n public UpdateEnumValues(index: number, event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n const output = this.spec.Outputs[index];\n if (!output.Constraint || output.Constraint.Type !== 'enum') {\n output.Constraint = { Type: 'enum', Values: [], OnViolation: 'fail' };\n }\n output.Constraint.Values = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateEnumValues}. */\n public updateEnumValues(index: number, event: Event): void {\n return this.UpdateEnumValues(index, event);\n }\n\n public UpdateNumericMin(index: number, event: Event): void {\n const val = parseFloat((event.target as HTMLInputElement).value);\n const output = this.spec.Outputs[index];\n if (output.Constraint && output.Constraint.Type === 'numeric') {\n output.Constraint.Min = isNaN(val) ? undefined : val;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateNumericMin}. */\n public updateNumericMin(index: number, event: Event): void {\n return this.UpdateNumericMin(index, event);\n }\n\n public UpdateNumericMax(index: number, event: Event): void {\n const val = parseFloat((event.target as HTMLInputElement).value);\n const output = this.spec.Outputs[index];\n if (output.Constraint && output.Constraint.Type === 'numeric') {\n output.Constraint.Max = isNaN(val) ? undefined : val;\n }\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateNumericMax}. */\n public updateNumericMax(index: number, event: Event): void {\n return this.UpdateNumericMax(index, event);\n }\n\n public UpdateWatermarkStrategy(event: Event): void {\n if (this.Record) {\n this.Record.WatermarkStrategy = (event.target as HTMLSelectElement).value as MJRecordProcessEntity['WatermarkStrategy'];\n }\n }\n\n /** @deprecated Use {@link UpdateWatermarkStrategy}. */\n public updateWatermarkStrategy(event: Event): void {\n return this.UpdateWatermarkStrategy(event);\n }\n\n public UpdateSkipUnchanged(event: Event): void {\n if (this.Record) {\n this.Record.SkipUnchanged = (event.target as HTMLSelectElement).value === 'true';\n }\n }\n\n /** @deprecated Use {@link UpdateSkipUnchanged}. */\n public updateSkipUnchanged(event: Event): void {\n return this.UpdateSkipUnchanged(event);\n }\n\n public UpdateCacheable(event: Event): void {\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: false };\n this.spec.Caching.Cacheable = (event.target as HTMLSelectElement).value === 'true';\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheable}. */\n public updateCacheable(event: Event): void {\n return this.UpdateCacheable(event);\n }\n\n public UpdateCacheKeyFields(event: Event): void {\n const val = (event.target as HTMLInputElement).value;\n this.CacheKeyFieldsCsv = val;\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.KeyFields = val\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheKeyFields}. */\n public updateCacheKeyFields(event: Event): void {\n return this.UpdateCacheKeyFields(event);\n }\n\n public UpdateCacheTTL(event: Event): void {\n const val = parseInt((event.target as HTMLInputElement).value, 10);\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.TTLSeconds = isNaN(val) ? 86400 : val;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheTTL}. */\n public updateCacheTTL(event: Event): void {\n return this.UpdateCacheTTL(event);\n }\n\n public UpdateCacheScope(event: Event): void {\n const val = (event.target as HTMLSelectElement).value as 'pipeline' | 'prompt';\n if (!this.spec.Caching) this.spec.Caching = { Cacheable: true };\n this.spec.Caching.Scope = val;\n this.emitChanges();\n }\n\n /** @deprecated Use {@link UpdateCacheScope}. */\n public updateCacheScope(event: Event): void {\n return this.UpdateCacheScope(event);\n }\n\n private emitChanges(): void {\n if (this.Record) {\n this.spec.Name = this.Record.Name || '';\n this.spec.Description = this.Record.Description || '';\n this.spec.PromptID = this.Record.PromptID || '';\n this.Record.Configuration = JSON.stringify(this.spec);\n this.syncOutputMappingToRecord();\n }\n this.recomputeValidation();\n this.SpecChange.emit(this.spec);\n this.cdr.detectChanges();\n }\n\n /**\n * Automatically projects spec.Outputs into the record's OutputMapping JSON\n * so that WriteBackProcessor works out of the box without duplicate manual config.\n */\n private syncOutputMappingToRecord(): void {\n if (!this.Record) return;\n const fields: Record<string, string> = Object.create(null);\n for (const out of this.spec.Outputs) {\n if (out.Target.Mode === 'field' && out.Target.EntityFieldName) {\n fields[out.Target.EntityFieldName] = out.Ref;\n }\n }\n this.Record.OutputMapping = JSON.stringify({ fields });\n }\n\n private recomputeValidation(): void {\n this.RenderedConstraintPreview = renderConstraintBlock(this.spec.Outputs);\n const entity = this.Record?.EntityID ? this.ProviderToUse.EntityByID(this.Record.EntityID) : null;\n if (entity) {\n const stub: EntityMetadataStub = {\n Name: entity.Name,\n Fields: (entity.Fields ?? []).map((f) => ({\n Name: f.Name,\n TSType: f.TSType,\n IsVirtual: f.IsVirtual,\n AllowsNull: f.AllowsNull,\n RelatedEntity: f.RelatedEntity,\n RelatedEntityID: f.RelatedEntityID,\n EntityFieldValues: f.EntityFieldValues ? f.EntityFieldValues.map((v) => ({ Value: v.Value, Code: v.Code })) : undefined,\n })),\n };\n this.ValidationErrors = validateSpec(this.spec, stub);\n } else {\n this.ValidationErrors = this.spec.Outputs.length === 0\n ? [{\n Path: 'Outputs',\n Severity: 'error',\n Message: 'At least one output attribute must be configured',\n FixRecommendation: 'Click Add Output to configure an output attribute',\n }]\n : [];\n }\n const hasErrors = this.ValidationErrors.some((i) => i.Severity === 'error');\n this.ValidChange.emit(!hasErrors);\n }\n}\n"]}
|
|
@@ -14,6 +14,7 @@ import { type EntityInfo } from '@memberjunction/core';
|
|
|
14
14
|
import { type FieldRuleSet } from '@memberjunction/global';
|
|
15
15
|
import { MJRecordProcessEntity } from '@memberjunction/core-entities';
|
|
16
16
|
import { type EntityActionUXContext, type EntityActionUXResult } from '@memberjunction/ng-entity-action-ux';
|
|
17
|
+
import { type DataFeatureSpec } from '@memberjunction/feature-pipelines';
|
|
17
18
|
import * as i0 from "@angular/core";
|
|
18
19
|
export declare class RecordProcessEditorComponent extends BaseAngularComponent implements OnInit {
|
|
19
20
|
private cdr;
|
|
@@ -23,6 +24,10 @@ export declare class RecordProcessEditorComponent extends BaseAngularComponent i
|
|
|
23
24
|
RecordProcessID: string | null;
|
|
24
25
|
/** Default EntityID for a brand-new process (e.g. the grid the user came from). */
|
|
25
26
|
DefaultEntityID: string | null;
|
|
27
|
+
/** Default WorkType for a brand-new process (e.g. 'Infer' when opened from Feature Pipelines). */
|
|
28
|
+
DefaultWorkType: MJRecordProcessEntity['WorkType'] | null;
|
|
29
|
+
/** Default CategoryID for a brand-new process (e.g. Feature Pipeline category ID). */
|
|
30
|
+
DefaultCategoryID: string | null;
|
|
26
31
|
/** Show the built-in Save / Preview / Cancel toolbar. Set false when an outer form owns Save. */
|
|
27
32
|
ShowToolbar: boolean;
|
|
28
33
|
/** Emitted after a successful Save (the persisted record). */
|
|
@@ -33,6 +38,8 @@ export declare class RecordProcessEditorComponent extends BaseAngularComponent i
|
|
|
33
38
|
SelectedEntityName: string;
|
|
34
39
|
RuleSet: FieldRuleSet;
|
|
35
40
|
RulesValid: boolean;
|
|
41
|
+
FeaturePipelineValid: boolean;
|
|
42
|
+
FeaturePipelineSpec: DataFeatureSpec | null;
|
|
36
43
|
Saving: boolean;
|
|
37
44
|
ErrorMessage: string;
|
|
38
45
|
PreviewDriver: {
|
|
@@ -45,17 +52,28 @@ export declare class RecordProcessEditorComponent extends BaseAngularComponent i
|
|
|
45
52
|
/** Resolves the record to edit: passed instance → by ID → a fresh draft. */
|
|
46
53
|
private loadRecord;
|
|
47
54
|
/** Generic setter for the simple string/enum fields, driven by the template inputs. */
|
|
55
|
+
Set(field: 'Name' | 'Description' | 'Status' | 'ScopeType' | 'ScopeFilter' | 'WorkType', event: Event): void;
|
|
56
|
+
/** @deprecated Use {@link Set}. */
|
|
48
57
|
set(field: 'Name' | 'Description' | 'Status' | 'ScopeType' | 'ScopeFilter' | 'WorkType', event: Event): void;
|
|
58
|
+
OnEntityChange(event: Event): void;
|
|
59
|
+
/** @deprecated Use {@link OnEntityChange}. */
|
|
49
60
|
onEntityChange(event: Event): void;
|
|
61
|
+
OnRulesChange(ruleSet: FieldRuleSet): void;
|
|
62
|
+
/** @deprecated Use {@link OnRulesChange}. */
|
|
50
63
|
onRulesChange(ruleSet: FieldRuleSet): void;
|
|
64
|
+
OnFeaturePipelineSpecChange(spec: DataFeatureSpec): void;
|
|
65
|
+
/** @deprecated Use {@link OnFeaturePipelineSpecChange}. */
|
|
66
|
+
onFeaturePipelineSpecChange(spec: DataFeatureSpec): void;
|
|
51
67
|
/** Saves the record (and emits). Returns success. */
|
|
52
68
|
Save(): Promise<boolean>;
|
|
53
69
|
/** Saves (if needed) then mounts the dry-run runner against the process's default scope. */
|
|
54
70
|
Preview(): Promise<void>;
|
|
71
|
+
OnPreviewDone(_result: EntityActionUXResult): void;
|
|
72
|
+
/** @deprecated Use {@link OnPreviewDone}. */
|
|
55
73
|
onPreviewDone(_result: EntityActionUXResult): void;
|
|
56
74
|
Cancel(): void;
|
|
57
75
|
private resolveEntityName;
|
|
58
76
|
static ɵfac: i0.ɵɵFactoryDeclaration<RecordProcessEditorComponent, never>;
|
|
59
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<RecordProcessEditorComponent, "mj-record-process-editor", never, { "Record": { "alias": "Record"; "required": false; }; "RecordProcessID": { "alias": "RecordProcessID"; "required": false; }; "DefaultEntityID": { "alias": "DefaultEntityID"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; }, { "Saved": "Saved"; "Cancelled": "Cancelled"; }, never, never, true, never>;
|
|
77
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RecordProcessEditorComponent, "mj-record-process-editor", never, { "Record": { "alias": "Record"; "required": false; }; "RecordProcessID": { "alias": "RecordProcessID"; "required": false; }; "DefaultEntityID": { "alias": "DefaultEntityID"; "required": false; }; "DefaultWorkType": { "alias": "DefaultWorkType"; "required": false; }; "DefaultCategoryID": { "alias": "DefaultCategoryID"; "required": false; }; "ShowToolbar": { "alias": "ShowToolbar"; "required": false; }; }, { "Saved": "Saved"; "Cancelled": "Cancelled"; }, never, never, true, never>;
|
|
60
78
|
}
|
|
61
79
|
//# sourceMappingURL=record-process-editor.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-process-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/record-process-editor/record-process-editor.component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAyD,YAAY,EAAS,MAAM,EAAkB,MAAM,eAAe,CAAC;AACnI,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAA2D,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;;
|
|
1
|
+
{"version":3,"file":"record-process-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/record-process-editor/record-process-editor.component.ts"],"names":[],"mappings":"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"}
|