@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 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/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
- 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 +146 -46
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +794 -262
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
- 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 +105 -25
- 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 +272 -112
- 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 +32 -6
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
- 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 +81 -15
- 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 +145 -45
- 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 +71 -17
- 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 +175 -67
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +686 -238
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +387 -107
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
- package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
- package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
- package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +209 -28
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +494 -138
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +664 -208
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +31 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +429 -109
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +110 -4
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +858 -86
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +142 -17
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +333 -113
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +217 -27
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +549 -169
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.js +5 -1
- package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +390 -47
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +1015 -343
- 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 +214 -26
- 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 +535 -159
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Users/user-overview.panel.js +2 -2
- package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
- 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 +446 -138
- 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-cost.service.d.ts +6 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
- 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 +84 -12
- 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-step-detail.component.d.ts +89 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
- 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 +165 -37
- 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.d.ts +140 -15
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +326 -100
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +59 -51
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +45 -19
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts +133 -14
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +322 -124
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +43 -42
|
@@ -5,16 +5,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
7
|
import { Component } from '@angular/core';
|
|
8
|
-
import { RegisterClass, RegisterClassEx } from '@memberjunction/global';
|
|
9
|
-
import { BaseFormComponent, BaseFormPolicy } from '@memberjunction/ng-base-forms';
|
|
8
|
+
import { RegisterClass, RegisterClassEx, SafeJSONParse, EscapeSQLString } from '@memberjunction/global';
|
|
9
|
+
import { BaseFormComponent, BaseFormPolicy, DETAILS_SECTION_KEY } from '@memberjunction/ng-base-forms';
|
|
10
10
|
import { MJRecordProcessFormComponent } from '../../generated/Entities/MJRecordProcess/mjrecordprocess.form.component';
|
|
11
|
+
import { RunView, LogError } from '@memberjunction/core';
|
|
12
|
+
import { validateSpec } from '@memberjunction/feature-pipelines';
|
|
11
13
|
import * as i0 from "@angular/core";
|
|
12
14
|
import * as i1 from "@angular/common";
|
|
13
15
|
import * as i2 from "@memberjunction/ng-base-forms";
|
|
14
16
|
import * as i3 from "@memberjunction/ng-record-process-studio";
|
|
17
|
+
const _forTrack0 = ($index, $item) => $item.Param;
|
|
18
|
+
const _forTrack1 = ($index, $item) => $item.Name;
|
|
15
19
|
function RecordProcessFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
16
20
|
i0.ɵɵelementStart(0, "span", 18);
|
|
17
|
-
i0.ɵɵelement(1, "i",
|
|
21
|
+
i0.ɵɵelement(1, "i", 64);
|
|
18
22
|
i0.ɵɵelementStart(2, "span");
|
|
19
23
|
i0.ɵɵtext(3, "Feature Pipeline");
|
|
20
24
|
i0.ɵɵelementEnd()();
|
|
@@ -64,7 +68,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_48_Templat
|
|
|
64
68
|
} }
|
|
65
69
|
function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
66
70
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
67
|
-
i0.ɵɵelementStart(0, "div", 31)(1, "mj-feature-pipeline-builder",
|
|
71
|
+
i0.ɵɵelementStart(0, "div", 31)(1, "mj-feature-pipeline-builder", 65);
|
|
68
72
|
i0.ɵɵlistener("SpecChange", function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template_mj_feature_pipeline_builder_SpecChange_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnPipelineSpecChange()); })("ValidChange", function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template_mj_feature_pipeline_builder_ValidChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnPipelineValidChange($event)); });
|
|
69
73
|
i0.ɵɵelementEnd()();
|
|
70
74
|
} if (rf & 2) {
|
|
@@ -74,7 +78,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Templat
|
|
|
74
78
|
} }
|
|
75
79
|
function RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
76
80
|
i0.ɵɵelementStart(0, "div", 32);
|
|
77
|
-
i0.ɵɵelement(1, "mj-record-process-editor",
|
|
81
|
+
i0.ɵɵelement(1, "mj-record-process-editor", 66);
|
|
78
82
|
i0.ɵɵelementEnd();
|
|
79
83
|
} if (rf & 2) {
|
|
80
84
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -83,7 +87,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Templat
|
|
|
83
87
|
} }
|
|
84
88
|
function RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Template(rf, ctx) { if (rf & 1) {
|
|
85
89
|
i0.ɵɵelementStart(0, "div", 33)(1, "div", 36);
|
|
86
|
-
i0.ɵɵelement(2, "i",
|
|
90
|
+
i0.ɵɵelement(2, "i", 67);
|
|
87
91
|
i0.ɵɵelementStart(3, "div")(4, "strong");
|
|
88
92
|
i0.ɵɵtext(5);
|
|
89
93
|
i0.ɵɵelementEnd();
|
|
@@ -105,7 +109,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Templat
|
|
|
105
109
|
} }
|
|
106
110
|
function RecordProcessFormComponentExtended_Conditional_0_Conditional_70_Template(rf, ctx) { if (rf & 1) {
|
|
107
111
|
i0.ɵɵelementStart(0, "div", 35);
|
|
108
|
-
i0.ɵɵelement(1, "mj-record-process-history",
|
|
112
|
+
i0.ɵɵelement(1, "mj-record-process-history", 68);
|
|
109
113
|
i0.ɵɵelementEnd();
|
|
110
114
|
} if (rf & 2) {
|
|
111
115
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -114,45 +118,498 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_70_Templat
|
|
|
114
118
|
} }
|
|
115
119
|
function RecordProcessFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
|
|
116
120
|
i0.ɵɵelementStart(0, "div", 36);
|
|
117
|
-
i0.ɵɵelement(1, "i",
|
|
121
|
+
i0.ɵɵelement(1, "i", 67);
|
|
118
122
|
i0.ɵɵelementStart(2, "span");
|
|
119
123
|
i0.ɵɵtext(3, "Save this record process to view execution history and per-record audit logs.");
|
|
120
124
|
i0.ɵɵelementEnd()();
|
|
121
125
|
} }
|
|
122
|
-
function
|
|
126
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
127
|
+
i0.ɵɵelementStart(0, "span", 79);
|
|
128
|
+
i0.ɵɵtext(1);
|
|
129
|
+
i0.ɵɵelementEnd();
|
|
130
|
+
} if (rf & 2) {
|
|
131
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
132
|
+
i0.ɵɵadvance();
|
|
133
|
+
i0.ɵɵtextInterpolate1("ID: ", ctx_r1.record.PromptID.substring(0, 8), "...");
|
|
134
|
+
} }
|
|
135
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
i0.ɵɵelementStart(0, "div", 81);
|
|
137
|
+
i0.ɵɵelement(1, "mj-form-field", 96);
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
} if (rf & 2) {
|
|
140
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
141
|
+
i0.ɵɵadvance();
|
|
142
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
143
|
+
} }
|
|
144
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
145
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "span", 98);
|
|
146
|
+
i0.ɵɵtext(2);
|
|
147
|
+
i0.ɵɵelementEnd();
|
|
148
|
+
i0.ɵɵelementStart(3, "span");
|
|
149
|
+
i0.ɵɵelement(4, "i", 99);
|
|
150
|
+
i0.ɵɵelementStart(5, "span");
|
|
151
|
+
i0.ɵɵtext(6, "Column: ");
|
|
152
|
+
i0.ɵɵelementStart(7, "code");
|
|
153
|
+
i0.ɵɵtext(8);
|
|
154
|
+
i0.ɵɵelementEnd()()()();
|
|
155
|
+
} if (rf & 2) {
|
|
156
|
+
const item_r5 = ctx.$implicit;
|
|
157
|
+
i0.ɵɵadvance(2);
|
|
158
|
+
i0.ɵɵtextInterpolate(item_r5.Param);
|
|
159
|
+
i0.ɵɵadvance(6);
|
|
160
|
+
i0.ɵɵtextInterpolate(item_r5.Field);
|
|
161
|
+
} }
|
|
162
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
163
|
+
i0.ɵɵelementStart(0, "div", 82);
|
|
164
|
+
i0.ɵɵrepeaterCreate(1, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_For_2_Template, 9, 2, "div", 97, _forTrack0);
|
|
165
|
+
i0.ɵɵelementEnd();
|
|
166
|
+
} if (rf & 2) {
|
|
167
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
168
|
+
i0.ɵɵadvance();
|
|
169
|
+
i0.ɵɵrepeater(ctx_r1.ParameterMappings);
|
|
170
|
+
} }
|
|
171
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
172
|
+
i0.ɵɵelementStart(0, "div", 83);
|
|
173
|
+
i0.ɵɵtext(1, " No parameter bindings configured. Entire row context will be passed to prompt. ");
|
|
174
|
+
i0.ɵɵelementEnd();
|
|
175
|
+
} }
|
|
176
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
177
|
+
i0.ɵɵelementStart(0, "span", 79);
|
|
178
|
+
i0.ɵɵelement(1, "i", 106);
|
|
179
|
+
i0.ɵɵtext(2, " Captured");
|
|
180
|
+
i0.ɵɵelementEnd();
|
|
181
|
+
} }
|
|
182
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
183
|
+
i0.ɵɵelementStart(0, "span", 105);
|
|
184
|
+
i0.ɵɵtext(1, "None");
|
|
185
|
+
i0.ɵɵelementEnd();
|
|
186
|
+
} }
|
|
187
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Template(rf, ctx) { if (rf & 1) {
|
|
188
|
+
i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 100);
|
|
189
|
+
i0.ɵɵelement(3, "i");
|
|
190
|
+
i0.ɵɵelementStart(4, "span");
|
|
191
|
+
i0.ɵɵtext(5);
|
|
192
|
+
i0.ɵɵelementEnd()()();
|
|
193
|
+
i0.ɵɵelementStart(6, "td")(7, "span", 101);
|
|
194
|
+
i0.ɵɵtext(8);
|
|
195
|
+
i0.ɵɵelementEnd()();
|
|
196
|
+
i0.ɵɵelementStart(9, "td")(10, "span", 102);
|
|
197
|
+
i0.ɵɵelement(11, "i", 103);
|
|
198
|
+
i0.ɵɵtext(12);
|
|
199
|
+
i0.ɵɵelementEnd()();
|
|
200
|
+
i0.ɵɵelementStart(13, "td")(14, "div", 104);
|
|
201
|
+
i0.ɵɵelement(15, "i");
|
|
202
|
+
i0.ɵɵelementStart(16, "span");
|
|
203
|
+
i0.ɵɵtext(17);
|
|
204
|
+
i0.ɵɵelementStart(18, "strong");
|
|
205
|
+
i0.ɵɵtext(19);
|
|
206
|
+
i0.ɵɵelementEnd()();
|
|
207
|
+
i0.ɵɵelementStart(20, "span", 105);
|
|
208
|
+
i0.ɵɵtext(21);
|
|
209
|
+
i0.ɵɵelementEnd()()();
|
|
210
|
+
i0.ɵɵelementStart(22, "td");
|
|
211
|
+
i0.ɵɵconditionalCreate(23, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_23_Template, 3, 0, "span", 79)(24, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_24_Template, 2, 0, "span", 105);
|
|
212
|
+
i0.ɵɵelementEnd()();
|
|
213
|
+
} if (rf & 2) {
|
|
214
|
+
const out_r6 = ctx.$implicit;
|
|
215
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
216
|
+
i0.ɵɵadvance(3);
|
|
217
|
+
i0.ɵɵclassMap(out_r6.FeatureKind === "numeric" ? "fa-solid fa-chart-line" : "fa-solid fa-tags");
|
|
218
|
+
i0.ɵɵstyleProp("color", out_r6.FeatureKind === "numeric" ? "#f59e0b" : "#8b5cf6");
|
|
219
|
+
i0.ɵɵadvance(2);
|
|
220
|
+
i0.ɵɵtextInterpolate(out_r6.Name);
|
|
221
|
+
i0.ɵɵadvance(2);
|
|
222
|
+
i0.ɵɵclassProp("rpf-type-numeric", out_r6.FeatureKind === "numeric")("rpf-type-categorical", out_r6.FeatureKind === "categorical")("rpf-type-default", out_r6.FeatureKind !== "numeric" && out_r6.FeatureKind !== "categorical");
|
|
223
|
+
i0.ɵɵadvance();
|
|
224
|
+
i0.ɵɵtextInterpolate1(" ", out_r6.FeatureKind, " ");
|
|
225
|
+
i0.ɵɵadvance(2);
|
|
226
|
+
i0.ɵɵproperty("title", "Violation policy: " + out_r6.ViolationPolicy);
|
|
227
|
+
i0.ɵɵadvance(2);
|
|
228
|
+
i0.ɵɵtextInterpolate1(" ", out_r6.ConstraintSummary, " ");
|
|
229
|
+
i0.ɵɵadvance(3);
|
|
230
|
+
i0.ɵɵclassMap(out_r6.TargetFieldExists ? "fa-solid fa-check-circle rpf-binding-valid" : "fa-solid fa-triangle-exclamation rpf-binding-invalid");
|
|
231
|
+
i0.ɵɵadvance(2);
|
|
232
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.TargetEntityName, ".");
|
|
233
|
+
i0.ɵɵadvance(2);
|
|
234
|
+
i0.ɵɵtextInterpolate(out_r6.TargetField);
|
|
235
|
+
i0.ɵɵadvance(2);
|
|
236
|
+
i0.ɵɵtextInterpolate1("(", out_r6.TargetFieldType, ")");
|
|
237
|
+
i0.ɵɵadvance(2);
|
|
238
|
+
i0.ɵɵconditional(out_r6.ReasoningTarget === "Enabled" ? 23 : 24);
|
|
239
|
+
} }
|
|
240
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
+
i0.ɵɵrepeaterCreate(0, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Template, 25, 20, "tr", null, _forTrack1);
|
|
242
|
+
} if (rf & 2) {
|
|
243
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
244
|
+
i0.ɵɵrepeater(ctx_r1.FeatureOutputs);
|
|
245
|
+
} }
|
|
246
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
247
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 107);
|
|
248
|
+
i0.ɵɵtext(2, " No output features defined yet. Use the ");
|
|
249
|
+
i0.ɵɵelementStart(3, "em");
|
|
250
|
+
i0.ɵɵtext(4, "Pipeline Configuration");
|
|
251
|
+
i0.ɵɵelementEnd();
|
|
252
|
+
i0.ɵɵtext(5, " builder tab to add output features. ");
|
|
253
|
+
i0.ɵɵelementEnd()();
|
|
254
|
+
} }
|
|
255
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_71_Template(rf, ctx) { if (rf & 1) {
|
|
256
|
+
i0.ɵɵelementStart(0, "div", 94)(1, "pre")(2, "code");
|
|
257
|
+
i0.ɵɵtext(3);
|
|
258
|
+
i0.ɵɵelementEnd()()();
|
|
259
|
+
} if (rf & 2) {
|
|
260
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
261
|
+
i0.ɵɵadvance(3);
|
|
262
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormattedRawJson);
|
|
263
|
+
} }
|
|
264
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_72_Template(rf, ctx) { if (rf & 1) {
|
|
265
|
+
i0.ɵɵelementStart(0, "div", 95);
|
|
266
|
+
i0.ɵɵelement(1, "mj-form-field", 108)(2, "mj-form-field", 109)(3, "mj-form-field", 110);
|
|
267
|
+
i0.ɵɵelementEnd();
|
|
268
|
+
} if (rf & 2) {
|
|
269
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
270
|
+
i0.ɵɵadvance();
|
|
271
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
272
|
+
i0.ɵɵadvance();
|
|
273
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
274
|
+
i0.ɵɵadvance();
|
|
275
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
276
|
+
} }
|
|
277
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
|
|
123
278
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
124
|
-
i0.ɵɵelementStart(0, "div")(1, "
|
|
125
|
-
i0.ɵɵ
|
|
279
|
+
i0.ɵɵelementStart(0, "div", 69)(1, "div", 70)(2, "div", 71);
|
|
280
|
+
i0.ɵɵelement(3, "i");
|
|
281
|
+
i0.ɵɵelementStart(4, "span");
|
|
282
|
+
i0.ɵɵtext(5);
|
|
283
|
+
i0.ɵɵelementEnd()();
|
|
284
|
+
i0.ɵɵelementStart(6, "div", 71);
|
|
285
|
+
i0.ɵɵelement(7, "i", 72);
|
|
286
|
+
i0.ɵɵelementStart(8, "span");
|
|
287
|
+
i0.ɵɵtext(9);
|
|
288
|
+
i0.ɵɵelementEnd()();
|
|
289
|
+
i0.ɵɵelementStart(10, "div", 71);
|
|
290
|
+
i0.ɵɵelement(11, "i", 16);
|
|
291
|
+
i0.ɵɵelementStart(12, "span");
|
|
292
|
+
i0.ɵɵtext(13);
|
|
293
|
+
i0.ɵɵelementEnd()()()();
|
|
294
|
+
i0.ɵɵelementStart(14, "div", 73)(15, "div", 74)(16, "div", 75);
|
|
295
|
+
i0.ɵɵtext(17, "Bound AI Prompt");
|
|
296
|
+
i0.ɵɵelementEnd();
|
|
297
|
+
i0.ɵɵelementStart(18, "div", 76);
|
|
298
|
+
i0.ɵɵelement(19, "i", 77);
|
|
299
|
+
i0.ɵɵelementStart(20, "span");
|
|
300
|
+
i0.ɵɵtext(21);
|
|
301
|
+
i0.ɵɵelementEnd()();
|
|
302
|
+
i0.ɵɵelementStart(22, "div", 78);
|
|
303
|
+
i0.ɵɵconditionalCreate(23, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_23_Template, 2, 1, "span", 79);
|
|
304
|
+
i0.ɵɵelementStart(24, "span", 80);
|
|
305
|
+
i0.ɵɵelement(25, "i", 64);
|
|
306
|
+
i0.ɵɵtext(26, " Feature Infer Engine");
|
|
307
|
+
i0.ɵɵelementEnd();
|
|
308
|
+
i0.ɵɵelementStart(27, "span", 80);
|
|
309
|
+
i0.ɵɵelement(28, "i", 29);
|
|
310
|
+
i0.ɵɵtext(29, " LLM Output Parser");
|
|
311
|
+
i0.ɵɵelementEnd()();
|
|
312
|
+
i0.ɵɵconditionalCreate(30, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_30_Template, 2, 4, "div", 81);
|
|
313
|
+
i0.ɵɵelementEnd();
|
|
314
|
+
i0.ɵɵelementStart(31, "div", 74)(32, "div", 75);
|
|
315
|
+
i0.ɵɵtext(33, "Prompt Parameter Resolution");
|
|
316
|
+
i0.ɵɵelementEnd();
|
|
317
|
+
i0.ɵɵconditionalCreate(34, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_Template, 3, 0, "div", 82)(35, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_35_Template, 2, 0, "div", 83);
|
|
318
|
+
i0.ɵɵelementEnd()();
|
|
319
|
+
i0.ɵɵelementStart(36, "div", 84)(37, "div", 85);
|
|
320
|
+
i0.ɵɵelement(38, "i", 86);
|
|
321
|
+
i0.ɵɵtext(39, " Context Retrieval Query ");
|
|
322
|
+
i0.ɵɵelementEnd();
|
|
323
|
+
i0.ɵɵelementStart(40, "div", 87)(41, "code");
|
|
324
|
+
i0.ɵɵtext(42);
|
|
325
|
+
i0.ɵɵelementEnd()()();
|
|
326
|
+
i0.ɵɵelementStart(43, "div", 88)(44, "table", 89)(45, "thead")(46, "tr")(47, "th");
|
|
327
|
+
i0.ɵɵtext(48, "Feature Name");
|
|
328
|
+
i0.ɵɵelementEnd();
|
|
329
|
+
i0.ɵɵelementStart(49, "th");
|
|
330
|
+
i0.ɵɵtext(50, "Kind / Type");
|
|
331
|
+
i0.ɵɵelementEnd();
|
|
332
|
+
i0.ɵɵelementStart(51, "th");
|
|
333
|
+
i0.ɵɵtext(52, "Validation Constraints");
|
|
334
|
+
i0.ɵɵelementEnd();
|
|
335
|
+
i0.ɵɵelementStart(53, "th");
|
|
336
|
+
i0.ɵɵtext(54, "Target Field Binding");
|
|
337
|
+
i0.ɵɵelementEnd();
|
|
338
|
+
i0.ɵɵelementStart(55, "th");
|
|
339
|
+
i0.ɵɵtext(56, "Reasoning");
|
|
340
|
+
i0.ɵɵelementEnd()()();
|
|
341
|
+
i0.ɵɵelementStart(57, "tbody");
|
|
342
|
+
i0.ɵɵconditionalCreate(58, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_Template, 2, 0)(59, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_59_Template, 6, 0, "tr");
|
|
343
|
+
i0.ɵɵelementEnd()()();
|
|
344
|
+
i0.ɵɵelementStart(60, "div", 90)(61, "div", 91);
|
|
345
|
+
i0.ɵɵlistener("click", function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template_div_click_61_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleRawJson()); });
|
|
346
|
+
i0.ɵɵelementStart(62, "div", 92);
|
|
347
|
+
i0.ɵɵelement(63, "i")(64, "i", 86);
|
|
348
|
+
i0.ɵɵelementStart(65, "span");
|
|
349
|
+
i0.ɵɵtext(66, "Power User Escape Hatch: View Raw Pipeline Configuration JSON");
|
|
350
|
+
i0.ɵɵelementEnd()();
|
|
351
|
+
i0.ɵɵelementStart(67, "button", 93);
|
|
352
|
+
i0.ɵɵlistener("click", function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template_button_click_67_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.CopyRawJson()); });
|
|
353
|
+
i0.ɵɵelement(68, "i");
|
|
354
|
+
i0.ɵɵelementStart(69, "span");
|
|
355
|
+
i0.ɵɵtext(70);
|
|
356
|
+
i0.ɵɵelementEnd()()();
|
|
357
|
+
i0.ɵɵconditionalCreate(71, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_71_Template, 4, 1, "div", 94);
|
|
358
|
+
i0.ɵɵelementEnd();
|
|
359
|
+
i0.ɵɵconditionalCreate(72, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_72_Template, 4, 12, "div", 95);
|
|
360
|
+
} if (rf & 2) {
|
|
361
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
362
|
+
i0.ɵɵclassProp("rpf-audit-bar-warning", !ctx_r1.IsSpecValid);
|
|
363
|
+
i0.ɵɵadvance(2);
|
|
364
|
+
i0.ɵɵclassProp("rpf-audit-chip-valid", ctx_r1.IsSpecValid)("rpf-audit-chip-warning", !ctx_r1.IsSpecValid);
|
|
365
|
+
i0.ɵɵadvance();
|
|
366
|
+
i0.ɵɵclassMap(ctx_r1.IsSpecValid ? "fa-solid fa-shield-check" : "fa-solid fa-triangle-exclamation");
|
|
367
|
+
i0.ɵɵadvance(2);
|
|
368
|
+
i0.ɵɵtextInterpolate(ctx_r1.IsSpecValid ? "Configuration Valid" : "Configuration Issues Found");
|
|
369
|
+
i0.ɵɵadvance(4);
|
|
370
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.BoundFeaturesCount, " of ", ctx_r1.TotalFeaturesCount, " Features Bound to Target");
|
|
371
|
+
i0.ɵɵadvance(4);
|
|
372
|
+
i0.ɵɵtextInterpolate1("Context: ", ctx_r1.ContextModeText);
|
|
373
|
+
i0.ɵɵadvance(8);
|
|
374
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.PromptID ? "Prompt Configured" : "No Prompt Selected");
|
|
375
|
+
i0.ɵɵadvance(2);
|
|
376
|
+
i0.ɵɵconditional(ctx_r1.record.PromptID ? 23 : -1);
|
|
377
|
+
i0.ɵɵadvance(7);
|
|
378
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 30 : -1);
|
|
379
|
+
i0.ɵɵadvance(4);
|
|
380
|
+
i0.ɵɵconditional(ctx_r1.ParameterMappings.length > 0 ? 34 : 35);
|
|
381
|
+
i0.ɵɵadvance(8);
|
|
382
|
+
i0.ɵɵtextInterpolate(ctx_r1.ContextQueryDisplay);
|
|
383
|
+
i0.ɵɵadvance(16);
|
|
384
|
+
i0.ɵɵconditional(ctx_r1.FeatureOutputs.length > 0 ? 58 : 59);
|
|
385
|
+
i0.ɵɵadvance(5);
|
|
386
|
+
i0.ɵɵclassMap(ctx_r1.RawJsonExpanded ? "fa-solid fa-chevron-down" : "fa-solid fa-chevron-right");
|
|
387
|
+
i0.ɵɵadvance(5);
|
|
388
|
+
i0.ɵɵclassMap(ctx_r1.RawJsonCopied ? "fa-solid fa-check" : "fa-regular fa-copy");
|
|
389
|
+
i0.ɵɵadvance(2);
|
|
390
|
+
i0.ɵɵtextInterpolate(ctx_r1.RawJsonCopied ? "Copied!" : "Copy JSON");
|
|
391
|
+
i0.ɵɵadvance();
|
|
392
|
+
i0.ɵɵconditional(ctx_r1.RawJsonExpanded ? 71 : -1);
|
|
393
|
+
i0.ɵɵadvance();
|
|
394
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 72 : -1);
|
|
395
|
+
} }
|
|
396
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_80_Template(rf, ctx) { if (rf & 1) {
|
|
397
|
+
i0.ɵɵelement(0, "mj-form-field", 108)(1, "mj-form-field", 111)(2, "mj-form-field", 112)(3, "mj-form-field", 96)(4, "mj-form-field", 113)(5, "mj-form-field", 110)(6, "mj-form-field", 109);
|
|
398
|
+
} if (rf & 2) {
|
|
399
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
400
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
401
|
+
i0.ɵɵadvance();
|
|
402
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
403
|
+
i0.ɵɵadvance();
|
|
404
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
405
|
+
i0.ɵɵadvance();
|
|
406
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
407
|
+
i0.ɵɵadvance();
|
|
408
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
409
|
+
i0.ɵɵadvance();
|
|
410
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
411
|
+
i0.ɵɵadvance();
|
|
412
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
413
|
+
} }
|
|
414
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
415
|
+
i0.ɵɵelementStart(0, "span", 117);
|
|
416
|
+
i0.ɵɵelement(1, "i", 118);
|
|
417
|
+
i0.ɵɵelementStart(2, "span");
|
|
418
|
+
i0.ɵɵtext(3, "Filter Active");
|
|
419
|
+
i0.ɵɵelementEnd()();
|
|
420
|
+
} }
|
|
421
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
|
|
423
|
+
i0.ɵɵelement(2, "i", 16);
|
|
424
|
+
i0.ɵɵtext(3, " SQL Scope Filter (WHERE clause) ");
|
|
425
|
+
i0.ɵɵelementEnd();
|
|
426
|
+
i0.ɵɵelementStart(4, "div", 87)(5, "code");
|
|
427
|
+
i0.ɵɵtext(6);
|
|
428
|
+
i0.ɵɵelementEnd()()();
|
|
429
|
+
} if (rf & 2) {
|
|
430
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
431
|
+
i0.ɵɵadvance(6);
|
|
432
|
+
i0.ɵɵtextInterpolate(ctx_r1.FormattedScopeFilter);
|
|
433
|
+
} }
|
|
434
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
435
|
+
i0.ɵɵelementStart(0, "div", 36);
|
|
436
|
+
i0.ɵɵelement(1, "i", 67);
|
|
437
|
+
i0.ɵɵelementStart(2, "span");
|
|
438
|
+
i0.ɵɵtext(3, "No scope filter applied. All records in ");
|
|
439
|
+
i0.ɵɵelementStart(4, "strong");
|
|
440
|
+
i0.ɵɵtext(5);
|
|
441
|
+
i0.ɵɵelementEnd();
|
|
442
|
+
i0.ɵɵtext(6, " will be evaluated.");
|
|
443
|
+
i0.ɵɵelementEnd()();
|
|
444
|
+
} if (rf & 2) {
|
|
445
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
446
|
+
i0.ɵɵadvance(5);
|
|
447
|
+
i0.ɵɵtextInterpolate(ctx_r1.TargetEntityName);
|
|
448
|
+
} }
|
|
449
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
450
|
+
i0.ɵɵelementStart(0, "div", 95);
|
|
451
|
+
i0.ɵɵelement(1, "mj-form-field", 119)(2, "mj-form-field", 120);
|
|
452
|
+
i0.ɵɵelementEnd();
|
|
453
|
+
} if (rf & 2) {
|
|
454
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
455
|
+
i0.ɵɵadvance();
|
|
456
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
457
|
+
i0.ɵɵadvance();
|
|
458
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
459
|
+
} }
|
|
460
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "div", 114)(2, "div", 115)(3, "span", 116);
|
|
462
|
+
i0.ɵɵelement(4, "i", 22);
|
|
463
|
+
i0.ɵɵelementStart(5, "span");
|
|
464
|
+
i0.ɵɵtext(6, "Scope Type: ");
|
|
465
|
+
i0.ɵɵelementStart(7, "strong");
|
|
466
|
+
i0.ɵɵtext(8);
|
|
467
|
+
i0.ɵɵelementEnd()()();
|
|
468
|
+
i0.ɵɵconditionalCreate(9, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_9_Template, 4, 0, "span", 117);
|
|
469
|
+
i0.ɵɵelementEnd()();
|
|
470
|
+
i0.ɵɵconditionalCreate(10, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_10_Template, 7, 1, "div", 84)(11, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_11_Template, 7, 1, "div", 36);
|
|
471
|
+
i0.ɵɵconditionalCreate(12, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_12_Template, 3, 8, "div", 95);
|
|
472
|
+
i0.ɵɵelementEnd();
|
|
473
|
+
} if (rf & 2) {
|
|
474
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
475
|
+
i0.ɵɵadvance(8);
|
|
476
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.ScopeType || "Filter");
|
|
477
|
+
i0.ɵɵadvance();
|
|
478
|
+
i0.ɵɵconditional(ctx_r1.record.ScopeFilter ? 9 : -1);
|
|
479
|
+
i0.ɵɵadvance();
|
|
480
|
+
i0.ɵɵconditional(ctx_r1.FormattedScopeFilter ? 10 : 11);
|
|
481
|
+
i0.ɵɵadvance(2);
|
|
482
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 12 : -1);
|
|
483
|
+
} }
|
|
484
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
|
|
485
|
+
i0.ɵɵelement(0, "mj-form-field", 119)(1, "mj-form-field", 121)(2, "mj-form-field", 122)(3, "mj-form-field", 120);
|
|
486
|
+
} if (rf & 2) {
|
|
487
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
488
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
489
|
+
i0.ɵɵadvance();
|
|
490
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
491
|
+
i0.ɵɵadvance();
|
|
492
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
493
|
+
i0.ɵɵadvance();
|
|
494
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
495
|
+
} }
|
|
496
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
497
|
+
i0.ɵɵelementStart(0, "div", 95);
|
|
498
|
+
i0.ɵɵelement(1, "mj-form-field", 128)(2, "mj-form-field", 129)(3, "mj-form-field", 130)(4, "mj-form-field", 131);
|
|
499
|
+
i0.ɵɵelementEnd();
|
|
500
|
+
} if (rf & 2) {
|
|
501
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
502
|
+
i0.ɵɵadvance();
|
|
503
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
504
|
+
i0.ɵɵadvance();
|
|
505
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
506
|
+
i0.ɵɵadvance();
|
|
507
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
508
|
+
i0.ɵɵadvance();
|
|
509
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
510
|
+
} }
|
|
511
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
|
|
512
|
+
i0.ɵɵelementStart(0, "div", 123)(1, "div", 124)(2, "div", 125);
|
|
513
|
+
i0.ɵɵtext(3, "Delta Watermark");
|
|
514
|
+
i0.ɵɵelementEnd();
|
|
515
|
+
i0.ɵɵelementStart(4, "div", 126);
|
|
516
|
+
i0.ɵɵtext(5);
|
|
517
|
+
i0.ɵɵelementEnd();
|
|
518
|
+
i0.ɵɵelementStart(6, "div", 127);
|
|
519
|
+
i0.ɵɵtext(7, "Evaluates row state changes");
|
|
520
|
+
i0.ɵɵelementEnd()();
|
|
521
|
+
i0.ɵɵelementStart(8, "div", 124)(9, "div", 125);
|
|
522
|
+
i0.ɵɵtext(10, "Batch Processing");
|
|
523
|
+
i0.ɵɵelementEnd();
|
|
524
|
+
i0.ɵɵelementStart(11, "div", 126);
|
|
525
|
+
i0.ɵɵtext(12);
|
|
526
|
+
i0.ɵɵelementEnd();
|
|
527
|
+
i0.ɵɵelementStart(13, "div", 127);
|
|
528
|
+
i0.ɵɵtext(14, "Per inference chunk");
|
|
529
|
+
i0.ɵɵelementEnd()();
|
|
530
|
+
i0.ɵɵelementStart(15, "div", 124)(16, "div", 125);
|
|
531
|
+
i0.ɵɵtext(17, "Concurrency");
|
|
532
|
+
i0.ɵɵelementEnd();
|
|
533
|
+
i0.ɵɵelementStart(18, "div", 126);
|
|
534
|
+
i0.ɵɵtext(19);
|
|
535
|
+
i0.ɵɵelementEnd();
|
|
536
|
+
i0.ɵɵelementStart(20, "div", 127);
|
|
537
|
+
i0.ɵɵtext(21, "Concurrent worker threads");
|
|
538
|
+
i0.ɵɵelementEnd()();
|
|
539
|
+
i0.ɵɵelementStart(22, "div", 124)(23, "div", 125);
|
|
540
|
+
i0.ɵɵtext(24, "Skip Unchanged");
|
|
541
|
+
i0.ɵɵelementEnd();
|
|
542
|
+
i0.ɵɵelementStart(25, "div", 126);
|
|
543
|
+
i0.ɵɵelement(26, "i");
|
|
544
|
+
i0.ɵɵtext(27);
|
|
545
|
+
i0.ɵɵelementEnd();
|
|
546
|
+
i0.ɵɵelementStart(28, "div", 127);
|
|
547
|
+
i0.ɵɵtext(29, "Skips re-evaluating unchanged rows");
|
|
548
|
+
i0.ɵɵelementEnd()()();
|
|
549
|
+
i0.ɵɵconditionalCreate(30, RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Conditional_30_Template, 5, 16, "div", 95);
|
|
550
|
+
} if (rf & 2) {
|
|
551
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
552
|
+
i0.ɵɵadvance(5);
|
|
553
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.WatermarkStrategy || "Checksum");
|
|
554
|
+
i0.ɵɵadvance(7);
|
|
555
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.record.BatchSize || 100, " records");
|
|
556
|
+
i0.ɵɵadvance(7);
|
|
557
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.record.MaxConcurrency || 1, " Parallel");
|
|
558
|
+
i0.ɵɵadvance(6);
|
|
559
|
+
i0.ɵɵclassProp("rpf-text-success", ctx_r1.record.SkipUnchanged);
|
|
560
|
+
i0.ɵɵadvance();
|
|
561
|
+
i0.ɵɵclassMap(ctx_r1.record.SkipUnchanged ? "fa-solid fa-check" : "fa-solid fa-minus");
|
|
562
|
+
i0.ɵɵadvance();
|
|
563
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.SkipUnchanged ? "Enabled" : "Disabled", " ");
|
|
564
|
+
i0.ɵɵadvance(3);
|
|
565
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 30 : -1);
|
|
566
|
+
} }
|
|
567
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_94_Template(rf, ctx) { if (rf & 1) {
|
|
568
|
+
i0.ɵɵelement(0, "mj-form-field", 128)(1, "mj-form-field", 129)(2, "mj-form-field", 130)(3, "mj-form-field", 131);
|
|
569
|
+
} if (rf & 2) {
|
|
570
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
571
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
572
|
+
i0.ɵɵadvance();
|
|
573
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
574
|
+
i0.ɵɵadvance();
|
|
575
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
576
|
+
i0.ɵɵadvance();
|
|
577
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
578
|
+
} }
|
|
579
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template(rf, ctx) { if (rf & 1) {
|
|
580
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
581
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
|
|
582
|
+
i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJRecordProcessWatermarks", $event.totalRowCount)); });
|
|
126
583
|
i0.ɵɵelementEnd()();
|
|
127
584
|
} if (rf & 2) {
|
|
128
585
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
129
586
|
i0.ɵɵadvance();
|
|
130
587
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: Record Process Watermarks", "RecordProcessID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: Record Process Watermarks", "RecordProcessID"))("AllowLoad", ctx_r1.IsSectionExpanded("mJRecordProcessWatermarks"))("ShowToolbar", true);
|
|
131
588
|
} }
|
|
132
|
-
function
|
|
133
|
-
const
|
|
134
|
-
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid",
|
|
135
|
-
i0.ɵɵlistener("Navigate", function
|
|
589
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template(rf, ctx) { if (rf & 1) {
|
|
590
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
591
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
|
|
592
|
+
i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJMLModelScoringBindings", $event.totalRowCount)); });
|
|
136
593
|
i0.ɵɵelementEnd()();
|
|
137
594
|
} if (rf & 2) {
|
|
138
595
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
139
596
|
i0.ɵɵadvance();
|
|
140
597
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: ML Model Scoring Bindings", "RecordProcessID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: ML Model Scoring Bindings", "RecordProcessID"))("AllowLoad", ctx_r1.IsSectionExpanded("mJMLModelScoringBindings"))("ShowToolbar", true);
|
|
141
598
|
} }
|
|
142
|
-
function
|
|
143
|
-
const
|
|
144
|
-
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid",
|
|
145
|
-
i0.ɵɵlistener("Navigate", function
|
|
599
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template(rf, ctx) { if (rf & 1) {
|
|
600
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
601
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
|
|
602
|
+
i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJFeatureValues", $event.totalRowCount)); });
|
|
146
603
|
i0.ɵɵelementEnd()();
|
|
147
604
|
} if (rf & 2) {
|
|
148
605
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
149
606
|
i0.ɵɵadvance();
|
|
150
607
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: Feature Values", "RecordProcessID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: Feature Values", "RecordProcessID"))("AllowLoad", ctx_r1.IsSectionExpanded("mJFeatureValues"))("ShowToolbar", true);
|
|
151
608
|
} }
|
|
152
|
-
function
|
|
153
|
-
const
|
|
154
|
-
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid",
|
|
155
|
-
i0.ɵɵlistener("Navigate", function
|
|
609
|
+
function RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template(rf, ctx) { if (rf & 1) {
|
|
610
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
611
|
+
i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
|
|
612
|
+
i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJFeatureValueCaches", $event.totalRowCount)); });
|
|
156
613
|
i0.ɵɵelementEnd()();
|
|
157
614
|
} if (rf & 2) {
|
|
158
615
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -239,34 +696,34 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
239
696
|
i0.ɵɵelement(73, "mj-form-field", 38)(74, "mj-form-field", 39)(75, "mj-form-field", 40)(76, "mj-form-field", 41)(77, "mj-form-field", 42);
|
|
240
697
|
i0.ɵɵelementEnd();
|
|
241
698
|
i0.ɵɵelementStart(78, "mj-collapsible-panel", 43);
|
|
242
|
-
i0.ɵɵ
|
|
699
|
+
i0.ɵɵconditionalCreate(79, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template, 73, 25)(80, RecordProcessFormComponentExtended_Conditional_0_Conditional_80_Template, 7, 28);
|
|
243
700
|
i0.ɵɵelementEnd();
|
|
244
|
-
i0.ɵɵelementStart(
|
|
245
|
-
i0.ɵɵ
|
|
701
|
+
i0.ɵɵelementStart(81, "mj-collapsible-panel", 44);
|
|
702
|
+
i0.ɵɵconditionalCreate(82, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Template, 13, 4, "div", 45)(83, RecordProcessFormComponentExtended_Conditional_0_Conditional_83_Template, 4, 16);
|
|
246
703
|
i0.ɵɵelementEnd();
|
|
247
|
-
i0.ɵɵelementStart(
|
|
248
|
-
i0.ɵɵelement(
|
|
704
|
+
i0.ɵɵelementStart(84, "mj-collapsible-panel", 46);
|
|
705
|
+
i0.ɵɵelement(85, "mj-form-field", 47)(86, "mj-form-field", 48)(87, "mj-form-field", 49)(88, "mj-form-field", 50)(89, "mj-form-field", 51)(90, "mj-form-field", 52)(91, "mj-form-field", 53);
|
|
249
706
|
i0.ɵɵelementEnd();
|
|
250
|
-
i0.ɵɵelementStart(
|
|
251
|
-
i0.ɵɵ
|
|
707
|
+
i0.ɵɵelementStart(92, "mj-collapsible-panel", 54);
|
|
708
|
+
i0.ɵɵconditionalCreate(93, RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Template, 31, 9)(94, RecordProcessFormComponentExtended_Conditional_0_Conditional_94_Template, 4, 16);
|
|
252
709
|
i0.ɵɵelementEnd();
|
|
253
|
-
i0.ɵɵelementStart(
|
|
254
|
-
i0.ɵɵelement(
|
|
710
|
+
i0.ɵɵelementStart(95, "mj-collapsible-panel", 55);
|
|
711
|
+
i0.ɵɵelement(96, "mj-form-field", 56)(97, "mj-form-field", 57);
|
|
255
712
|
i0.ɵɵelementEnd();
|
|
256
|
-
i0.ɵɵelement(
|
|
257
|
-
i0.ɵɵelementStart(
|
|
258
|
-
i0.ɵɵconditionalCreate(
|
|
713
|
+
i0.ɵɵelement(98, "mj-form-panel-slot", 58);
|
|
714
|
+
i0.ɵɵelementStart(99, "mj-collapsible-panel", 59);
|
|
715
|
+
i0.ɵɵconditionalCreate(100, RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template, 2, 4, "div");
|
|
259
716
|
i0.ɵɵelementEnd();
|
|
260
|
-
i0.ɵɵelementStart(
|
|
261
|
-
i0.ɵɵconditionalCreate(
|
|
717
|
+
i0.ɵɵelementStart(101, "mj-collapsible-panel", 60);
|
|
718
|
+
i0.ɵɵconditionalCreate(102, RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template, 2, 4, "div");
|
|
262
719
|
i0.ɵɵelementEnd();
|
|
263
|
-
i0.ɵɵelementStart(
|
|
264
|
-
i0.ɵɵconditionalCreate(
|
|
720
|
+
i0.ɵɵelementStart(103, "mj-collapsible-panel", 61);
|
|
721
|
+
i0.ɵɵconditionalCreate(104, RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template, 2, 4, "div");
|
|
265
722
|
i0.ɵɵelementEnd();
|
|
266
|
-
i0.ɵɵelementStart(
|
|
267
|
-
i0.ɵɵconditionalCreate(
|
|
723
|
+
i0.ɵɵelementStart(105, "mj-collapsible-panel", 62);
|
|
724
|
+
i0.ɵɵconditionalCreate(106, RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template, 2, 4, "div");
|
|
268
725
|
i0.ɵɵelementEnd();
|
|
269
|
-
i0.ɵɵelement(
|
|
726
|
+
i0.ɵɵelement(107, "mj-form-panel-slot", 63);
|
|
270
727
|
i0.ɵɵelementEnd();
|
|
271
728
|
} if (rf & 2) {
|
|
272
729
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -334,30 +791,12 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
334
791
|
i0.ɵɵadvance();
|
|
335
792
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
|
|
336
793
|
i0.ɵɵadvance();
|
|
337
|
-
i0.ɵɵ
|
|
338
|
-
i0.ɵɵadvance();
|
|
339
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
340
|
-
i0.ɵɵadvance();
|
|
341
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
342
|
-
i0.ɵɵadvance();
|
|
343
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
344
|
-
i0.ɵɵadvance();
|
|
345
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
346
|
-
i0.ɵɵadvance();
|
|
347
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
348
|
-
i0.ɵɵadvance();
|
|
349
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
350
|
-
i0.ɵɵadvance();
|
|
794
|
+
i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 79 : 80);
|
|
795
|
+
i0.ɵɵadvance(2);
|
|
351
796
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
|
|
352
797
|
i0.ɵɵadvance();
|
|
353
|
-
i0.ɵɵ
|
|
354
|
-
i0.ɵɵadvance();
|
|
355
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
356
|
-
i0.ɵɵadvance();
|
|
357
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
358
|
-
i0.ɵɵadvance();
|
|
359
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
360
|
-
i0.ɵɵadvance();
|
|
798
|
+
i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 82 : 83);
|
|
799
|
+
i0.ɵɵadvance(2);
|
|
361
800
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
|
|
362
801
|
i0.ɵɵadvance();
|
|
363
802
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
@@ -376,14 +815,8 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
376
815
|
i0.ɵɵadvance();
|
|
377
816
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
|
|
378
817
|
i0.ɵɵadvance();
|
|
379
|
-
i0.ɵɵ
|
|
380
|
-
i0.ɵɵadvance();
|
|
381
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
382
|
-
i0.ɵɵadvance();
|
|
383
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
384
|
-
i0.ɵɵadvance();
|
|
385
|
-
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
386
|
-
i0.ɵɵadvance();
|
|
818
|
+
i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 93 : 94);
|
|
819
|
+
i0.ɵɵadvance(2);
|
|
387
820
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
|
|
388
821
|
i0.ɵɵadvance();
|
|
389
822
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
|
|
@@ -394,22 +827,191 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
394
827
|
i0.ɵɵadvance();
|
|
395
828
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJRecordProcessWatermarks"))("DefaultExpanded", false);
|
|
396
829
|
i0.ɵɵadvance();
|
|
397
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
830
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 100 : -1);
|
|
398
831
|
i0.ɵɵadvance();
|
|
399
832
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJMLModelScoringBindings"))("DefaultExpanded", false);
|
|
400
833
|
i0.ɵɵadvance();
|
|
401
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
834
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 102 : -1);
|
|
402
835
|
i0.ɵɵadvance();
|
|
403
836
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJFeatureValues"))("DefaultExpanded", false);
|
|
404
837
|
i0.ɵɵadvance();
|
|
405
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
838
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 104 : -1);
|
|
406
839
|
i0.ɵɵadvance();
|
|
407
840
|
i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJFeatureValueCaches"))("DefaultExpanded", false);
|
|
408
841
|
i0.ɵɵadvance();
|
|
409
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
842
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 106 : -1);
|
|
410
843
|
i0.ɵɵadvance();
|
|
411
844
|
i0.ɵɵproperty("Entity", i0.ɵɵinterpolate(ctx_r1.record.EntityInfo.Name))("Record", ctx_r1.record)("FormComponent", ctx_r1)("FormContext", ctx_r1.formContext);
|
|
412
845
|
} }
|
|
846
|
+
/**
|
|
847
|
+
* Pure helper function to format raw JSON.
|
|
848
|
+
*/
|
|
849
|
+
export function FormatRawPipelineJson(configuration) {
|
|
850
|
+
if (!configuration)
|
|
851
|
+
return '';
|
|
852
|
+
const parsed = SafeJSONParse(configuration);
|
|
853
|
+
return parsed ? JSON.stringify(parsed, null, 2) : configuration;
|
|
854
|
+
}
|
|
855
|
+
/** @deprecated Use {@link FormatRawPipelineJson}. */
|
|
856
|
+
export function formatRawPipelineJson(configuration) {
|
|
857
|
+
return FormatRawPipelineJson(configuration);
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* Pure helper function to parse DataFeatureSpec safely.
|
|
861
|
+
*/
|
|
862
|
+
export function ParsePipelineSpec(configuration) {
|
|
863
|
+
if (!configuration)
|
|
864
|
+
return null;
|
|
865
|
+
return SafeJSONParse(configuration);
|
|
866
|
+
}
|
|
867
|
+
/** @deprecated Use {@link ParsePipelineSpec}. */
|
|
868
|
+
export function parsePipelineSpec(configuration) {
|
|
869
|
+
return ParsePipelineSpec(configuration);
|
|
870
|
+
}
|
|
871
|
+
/**
|
|
872
|
+
* Pure helper function to validate pipeline spec against entity stub.
|
|
873
|
+
*/
|
|
874
|
+
export function ValidatePipelineSpec(spec, entityStub) {
|
|
875
|
+
if (!spec)
|
|
876
|
+
return [];
|
|
877
|
+
return validateSpec(spec, entityStub);
|
|
878
|
+
}
|
|
879
|
+
/** @deprecated Use {@link ValidatePipelineSpec}. */
|
|
880
|
+
export function validatePipelineSpec(spec, entityStub) {
|
|
881
|
+
return ValidatePipelineSpec(spec, entityStub);
|
|
882
|
+
}
|
|
883
|
+
/**
|
|
884
|
+
* Pure helper to build feature output view-models from spec or output mapping.
|
|
885
|
+
*/
|
|
886
|
+
export function BuildFeatureOutputViewModels(spec, entityInfo, outputMapping) {
|
|
887
|
+
const outputs = [];
|
|
888
|
+
if (spec?.Outputs && spec.Outputs.length > 0) {
|
|
889
|
+
for (const out of spec.Outputs) {
|
|
890
|
+
let targetFieldName = '';
|
|
891
|
+
const targetMode = out.Target?.Mode;
|
|
892
|
+
if (out.Target?.Mode === 'field') {
|
|
893
|
+
targetFieldName = out.Target.EntityFieldName;
|
|
894
|
+
}
|
|
895
|
+
else if (out.Target?.Mode === 'child') {
|
|
896
|
+
targetFieldName = `Child: ${out.Target.EntityName}`;
|
|
897
|
+
}
|
|
898
|
+
else if (out.Target?.Mode === 'tags') {
|
|
899
|
+
targetFieldName = `Tags (${out.Target.Growth || 'taxonomy'})`;
|
|
900
|
+
}
|
|
901
|
+
let constraintText = 'None';
|
|
902
|
+
let violationPolicy = 'error';
|
|
903
|
+
const c = out.Constraint;
|
|
904
|
+
if (c) {
|
|
905
|
+
if (c.OnViolation) {
|
|
906
|
+
violationPolicy = c.OnViolation;
|
|
907
|
+
}
|
|
908
|
+
switch (c.Type) {
|
|
909
|
+
case 'numeric':
|
|
910
|
+
case 'money': {
|
|
911
|
+
const min = c.Min != null ? String(c.Min) : '-∞';
|
|
912
|
+
const max = c.Max != null ? String(c.Max) : '+∞';
|
|
913
|
+
constraintText = `[${min}, ${max}]`;
|
|
914
|
+
break;
|
|
915
|
+
}
|
|
916
|
+
case 'enum': {
|
|
917
|
+
if (c.Values && c.Values.length > 0) {
|
|
918
|
+
constraintText = `Allowed: ${c.Values.slice(0, 3).join(', ')}${c.Values.length > 3 ? '...' : ''}`;
|
|
919
|
+
}
|
|
920
|
+
else if (c.FromFieldMetadata) {
|
|
921
|
+
constraintText = 'From Field Metadata';
|
|
922
|
+
}
|
|
923
|
+
break;
|
|
924
|
+
}
|
|
925
|
+
case 'lookup': {
|
|
926
|
+
constraintText = `Lookup: ${c.Entity || ''}.${c.MatchField || ''}`;
|
|
927
|
+
break;
|
|
928
|
+
}
|
|
929
|
+
case 'date': {
|
|
930
|
+
constraintText = `Date: [${c.Min || '-∞'}, ${c.Max || '+∞'}]`;
|
|
931
|
+
break;
|
|
932
|
+
}
|
|
933
|
+
case 'boolean': {
|
|
934
|
+
constraintText = 'Boolean';
|
|
935
|
+
break;
|
|
936
|
+
}
|
|
937
|
+
case 'freetext': {
|
|
938
|
+
constraintText = c.MaxLength != null ? `Max: ${c.MaxLength} chars` : 'Freetext';
|
|
939
|
+
break;
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
const isFieldMode = targetMode === 'field';
|
|
944
|
+
const field = isFieldMode && targetFieldName && entityInfo?.Fields
|
|
945
|
+
? entityInfo.Fields.find((f) => f.Name.toLowerCase() === targetFieldName.toLowerCase())
|
|
946
|
+
: undefined;
|
|
947
|
+
outputs.push({
|
|
948
|
+
Name: out.Name || out.Ref || 'Unnamed',
|
|
949
|
+
Ref: out.Ref || '',
|
|
950
|
+
FeatureKind: out.FeatureKind || (c?.Type === 'numeric' ? 'numeric' : 'categorical'),
|
|
951
|
+
TargetField: targetFieldName || '—',
|
|
952
|
+
TargetFieldExists: isFieldMode ? !!field : true,
|
|
953
|
+
TargetFieldType: isFieldMode ? (field?.TSType || field?.Type || 'unbound') : (targetMode || 'custom'),
|
|
954
|
+
ConstraintSummary: constraintText,
|
|
955
|
+
ViolationPolicy: violationPolicy,
|
|
956
|
+
ReasoningTarget: spec.CaptureReasoning ? 'Enabled' : 'None',
|
|
957
|
+
});
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
else if (outputMapping) {
|
|
961
|
+
const mapping = SafeJSONParse(outputMapping);
|
|
962
|
+
const fieldsObj = (mapping && 'fields' in mapping && mapping.fields) ? mapping.fields : mapping;
|
|
963
|
+
if (fieldsObj && typeof fieldsObj === 'object') {
|
|
964
|
+
for (const [key, val] of Object.entries(fieldsObj)) {
|
|
965
|
+
const field = entityInfo?.Fields?.find((f) => f.Name.toLowerCase() === key.toLowerCase());
|
|
966
|
+
outputs.push({
|
|
967
|
+
Name: String(val),
|
|
968
|
+
Ref: String(val),
|
|
969
|
+
FeatureKind: 'field',
|
|
970
|
+
TargetField: key,
|
|
971
|
+
TargetFieldExists: !!field,
|
|
972
|
+
TargetFieldType: field?.TSType || field?.Type || 'unbound',
|
|
973
|
+
ConstraintSummary: 'Standard',
|
|
974
|
+
ViolationPolicy: 'null',
|
|
975
|
+
ReasoningTarget: 'None',
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
return outputs;
|
|
981
|
+
}
|
|
982
|
+
/** @deprecated Use {@link BuildFeatureOutputViewModels}. */
|
|
983
|
+
export function buildFeatureOutputViewModels(spec, entityInfo, outputMapping) {
|
|
984
|
+
return BuildFeatureOutputViewModels(spec, entityInfo, outputMapping);
|
|
985
|
+
}
|
|
986
|
+
/**
|
|
987
|
+
* Pure helper to build prompt parameter resolution mappings.
|
|
988
|
+
*/
|
|
989
|
+
export function BuildPromptParamViewModels(spec, inputMapping) {
|
|
990
|
+
const mappings = [];
|
|
991
|
+
if (spec?.Context?.QueryParams) {
|
|
992
|
+
for (const [param, field] of Object.entries(spec.Context.QueryParams)) {
|
|
993
|
+
mappings.push({ Param: `@${param}`, Field: String(field) });
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
else if (spec?.Context?.InputMapping) {
|
|
997
|
+
for (const [param, field] of Object.entries(spec.Context.InputMapping)) {
|
|
998
|
+
mappings.push({ Param: `@${param}`, Field: String(field) });
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
else if (inputMapping) {
|
|
1002
|
+
const raw = SafeJSONParse(inputMapping);
|
|
1003
|
+
if (raw) {
|
|
1004
|
+
for (const [param, field] of Object.entries(raw)) {
|
|
1005
|
+
mappings.push({ Param: `@${param}`, Field: String(field) });
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
return mappings;
|
|
1010
|
+
}
|
|
1011
|
+
/** @deprecated Use {@link BuildPromptParamViewModels}. */
|
|
1012
|
+
export function buildPromptParamViewModels(spec, inputMapping) {
|
|
1013
|
+
return BuildPromptParamViewModels(spec, inputMapping);
|
|
1014
|
+
}
|
|
413
1015
|
/**
|
|
414
1016
|
* Custom form override for `MJ: Record Processes` (priority 100).
|
|
415
1017
|
* Presents the Record Process / Feature Pipeline in a first-class MJ form with:
|
|
@@ -417,19 +1019,57 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
|
|
|
417
1019
|
* - Builder panel: "Pipeline Configuration" embedding the visual <mj-feature-pipeline-builder> for Infer / Feature Pipelines,
|
|
418
1020
|
* or the <mj-record-process-editor> for Field Rules.
|
|
419
1021
|
* - History panel: "Prior Runs" embedding <mj-record-process-history> with run status, metrics, and per-record diff drill-down.
|
|
420
|
-
* -
|
|
1022
|
+
* - Details panel (Option A Structured Cards): First-class semantic cards for Infer pipelines, replacing raw JSON
|
|
1023
|
+
* with configuration health diagnostics, prompt context binding, feature output schema & column validation,
|
|
1024
|
+
* scope preview, and a collapsible raw JSON drawer.
|
|
421
1025
|
* - Related entity sections: Watermarks, ML Model Scoring Bindings, Feature Values, Feature Value Caches.
|
|
422
1026
|
* - System Metadata panel.
|
|
423
1027
|
*/
|
|
424
1028
|
let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtended extends MJRecordProcessFormComponent {
|
|
425
1029
|
constructor() {
|
|
426
1030
|
super(...arguments);
|
|
427
|
-
this.
|
|
1031
|
+
this.PipelineValid = true;
|
|
1032
|
+
this.RawJsonExpanded = false;
|
|
1033
|
+
this.RawJsonCopied = false;
|
|
1034
|
+
this.LoadedQuery = null;
|
|
1035
|
+
}
|
|
1036
|
+
/** @deprecated Use {@link PipelineValid}. */
|
|
1037
|
+
get pipelineValid() {
|
|
1038
|
+
return this.PipelineValid;
|
|
1039
|
+
}
|
|
1040
|
+
/** @deprecated Use {@link PipelineValid}. */
|
|
1041
|
+
set pipelineValid(value) {
|
|
1042
|
+
this.PipelineValid = value;
|
|
1043
|
+
}
|
|
1044
|
+
/** @deprecated Use {@link RawJsonExpanded}. */
|
|
1045
|
+
get rawJsonExpanded() {
|
|
1046
|
+
return this.RawJsonExpanded;
|
|
1047
|
+
}
|
|
1048
|
+
/** @deprecated Use {@link RawJsonExpanded}. */
|
|
1049
|
+
set rawJsonExpanded(value) {
|
|
1050
|
+
this.RawJsonExpanded = value;
|
|
1051
|
+
}
|
|
1052
|
+
/** @deprecated Use {@link RawJsonCopied}. */
|
|
1053
|
+
get rawJsonCopied() {
|
|
1054
|
+
return this.RawJsonCopied;
|
|
1055
|
+
}
|
|
1056
|
+
/** @deprecated Use {@link RawJsonCopied}. */
|
|
1057
|
+
set rawJsonCopied(value) {
|
|
1058
|
+
this.RawJsonCopied = value;
|
|
1059
|
+
}
|
|
1060
|
+
/** @deprecated Use {@link LoadedQuery}. */
|
|
1061
|
+
get loadedQuery() {
|
|
1062
|
+
return this.LoadedQuery;
|
|
1063
|
+
}
|
|
1064
|
+
/** @deprecated Use {@link LoadedQuery}. */
|
|
1065
|
+
set loadedQuery(value) {
|
|
1066
|
+
this.LoadedQuery = value;
|
|
428
1067
|
}
|
|
429
1068
|
async ngOnInit() {
|
|
430
1069
|
await super.ngOnInit();
|
|
431
1070
|
this.initSections([
|
|
432
1071
|
{ sectionKey: 'processOverview', sectionName: 'Overview & Status', isExpanded: true },
|
|
1072
|
+
{ sectionKey: 'inferConfig', sectionName: 'Infer Configuration', isExpanded: true },
|
|
433
1073
|
{ sectionKey: 'pipelineConfiguration', sectionName: 'Pipeline Configuration', isExpanded: true },
|
|
434
1074
|
{ sectionKey: 'processRuns', sectionName: 'Prior Runs', isExpanded: true },
|
|
435
1075
|
{ sectionKey: 'processDefinition', sectionName: 'Process Definition', isExpanded: true },
|
|
@@ -443,6 +1083,31 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
|
|
|
443
1083
|
{ sectionKey: 'mJFeatureValueCaches', sectionName: 'Feature Value Caches', isExpanded: false },
|
|
444
1084
|
{ sectionKey: 'systemMetadata', sectionName: 'System Metadata', isExpanded: false },
|
|
445
1085
|
]);
|
|
1086
|
+
await this.loadContextQuery();
|
|
1087
|
+
}
|
|
1088
|
+
async loadContextQuery() {
|
|
1089
|
+
const queryId = this.ParsedSpec?.Context?.QueryID;
|
|
1090
|
+
if (!queryId)
|
|
1091
|
+
return;
|
|
1092
|
+
try {
|
|
1093
|
+
const rv = new RunView();
|
|
1094
|
+
const res = await rv.RunView({
|
|
1095
|
+
EntityName: 'MJ: Queries',
|
|
1096
|
+
ExtraFilter: `ID = '${EscapeSQLString(queryId)}'`,
|
|
1097
|
+
Fields: ['ID', 'Name', 'SQL'],
|
|
1098
|
+
ResultType: 'simple',
|
|
1099
|
+
});
|
|
1100
|
+
if (res.Success && res.Results && res.Results.length > 0) {
|
|
1101
|
+
this.LoadedQuery = res.Results[0];
|
|
1102
|
+
this.cdr.markForCheck();
|
|
1103
|
+
}
|
|
1104
|
+
else if (!res.Success) {
|
|
1105
|
+
LogError(`[RecordProcessForm] Failed to load context query ${queryId}: ${res.ErrorMessage}`);
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
catch (e) {
|
|
1109
|
+
LogError(`[RecordProcessForm] Exception loading context query ${queryId}`, undefined, e);
|
|
1110
|
+
}
|
|
446
1111
|
}
|
|
447
1112
|
get TargetEntityName() {
|
|
448
1113
|
if (!this.record?.EntityID)
|
|
@@ -450,6 +1115,11 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
|
|
|
450
1115
|
const entity = this.ProviderToUse.EntityByID(this.record.EntityID);
|
|
451
1116
|
return entity?.DisplayName || entity?.Name || this.record.EntityID;
|
|
452
1117
|
}
|
|
1118
|
+
get TargetEntityInfo() {
|
|
1119
|
+
if (!this.record?.EntityID)
|
|
1120
|
+
return undefined;
|
|
1121
|
+
return this.ProviderToUse.EntityByID(this.record.EntityID);
|
|
1122
|
+
}
|
|
453
1123
|
get WorkTypeIcon() {
|
|
454
1124
|
switch (this.record?.WorkType) {
|
|
455
1125
|
case 'Infer':
|
|
@@ -482,15 +1152,111 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
|
|
|
482
1152
|
this.cdr.markForCheck();
|
|
483
1153
|
}
|
|
484
1154
|
OnPipelineValidChange(valid) {
|
|
485
|
-
this.
|
|
1155
|
+
this.PipelineValid = valid;
|
|
486
1156
|
this.cdr.markForCheck();
|
|
487
1157
|
}
|
|
1158
|
+
ToggleRawJson() {
|
|
1159
|
+
this.RawJsonExpanded = !this.RawJsonExpanded;
|
|
1160
|
+
this.cdr.markForCheck();
|
|
1161
|
+
}
|
|
1162
|
+
/** @deprecated Use {@link ToggleRawJson}. */
|
|
1163
|
+
toggleRawJson() {
|
|
1164
|
+
return this.ToggleRawJson();
|
|
1165
|
+
}
|
|
1166
|
+
async CopyRawJson() {
|
|
1167
|
+
try {
|
|
1168
|
+
if (navigator?.clipboard && this.FormattedRawJson) {
|
|
1169
|
+
await navigator.clipboard.writeText(this.FormattedRawJson);
|
|
1170
|
+
this.RawJsonCopied = true;
|
|
1171
|
+
this.cdr.markForCheck();
|
|
1172
|
+
setTimeout(() => {
|
|
1173
|
+
this.RawJsonCopied = false;
|
|
1174
|
+
this.cdr.markForCheck();
|
|
1175
|
+
}, 2000);
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1178
|
+
catch (e) {
|
|
1179
|
+
LogError('[RecordProcessForm] Failed to copy raw JSON to clipboard', undefined, e);
|
|
1180
|
+
}
|
|
1181
|
+
}
|
|
1182
|
+
/** @deprecated Use {@link CopyRawJson}. */
|
|
1183
|
+
async copyRawJson() {
|
|
1184
|
+
return this.CopyRawJson();
|
|
1185
|
+
}
|
|
1186
|
+
get FormattedRawJson() {
|
|
1187
|
+
return FormatRawPipelineJson(this.record?.Configuration);
|
|
1188
|
+
}
|
|
1189
|
+
get ParsedSpec() {
|
|
1190
|
+
return ParsePipelineSpec(this.record?.Configuration);
|
|
1191
|
+
}
|
|
1192
|
+
get EntityStub() {
|
|
1193
|
+
const entity = this.TargetEntityInfo;
|
|
1194
|
+
if (!entity)
|
|
1195
|
+
return undefined;
|
|
1196
|
+
return {
|
|
1197
|
+
Name: entity.Name,
|
|
1198
|
+
Fields: (entity.Fields ?? []).map((f) => ({
|
|
1199
|
+
Name: f.Name,
|
|
1200
|
+
TSType: f.TSType,
|
|
1201
|
+
IsVirtual: f.IsVirtual,
|
|
1202
|
+
AllowsNull: f.AllowsNull,
|
|
1203
|
+
RelatedEntity: f.RelatedEntity,
|
|
1204
|
+
RelatedEntityID: f.RelatedEntityID,
|
|
1205
|
+
EntityFieldValues: f.EntityFieldValues
|
|
1206
|
+
? f.EntityFieldValues.map((v) => ({ Value: v.Value, Code: v.Code }))
|
|
1207
|
+
: undefined,
|
|
1208
|
+
})),
|
|
1209
|
+
};
|
|
1210
|
+
}
|
|
1211
|
+
get SpecIssues() {
|
|
1212
|
+
return ValidatePipelineSpec(this.ParsedSpec, this.EntityStub);
|
|
1213
|
+
}
|
|
1214
|
+
get IsSpecValid() {
|
|
1215
|
+
return this.SpecIssues.filter((i) => i.Severity === 'error').length === 0;
|
|
1216
|
+
}
|
|
1217
|
+
get FeatureOutputs() {
|
|
1218
|
+
return BuildFeatureOutputViewModels(this.ParsedSpec, this.TargetEntityInfo, this.record?.OutputMapping);
|
|
1219
|
+
}
|
|
1220
|
+
get TotalFeaturesCount() {
|
|
1221
|
+
return this.FeatureOutputs.length;
|
|
1222
|
+
}
|
|
1223
|
+
get BoundFeaturesCount() {
|
|
1224
|
+
return this.FeatureOutputs.filter((f) => f.TargetFieldExists).length;
|
|
1225
|
+
}
|
|
1226
|
+
get ParameterMappings() {
|
|
1227
|
+
return BuildPromptParamViewModels(this.ParsedSpec, this.record?.InputMapping);
|
|
1228
|
+
}
|
|
1229
|
+
get ContextModeText() {
|
|
1230
|
+
const spec = this.ParsedSpec;
|
|
1231
|
+
if (spec?.Context?.EntityDocumentID)
|
|
1232
|
+
return 'Entity Document Template';
|
|
1233
|
+
if (spec?.Context?.QueryID) {
|
|
1234
|
+
return this.LoadedQuery?.Name ? `Query: ${this.LoadedQuery.Name}` : `Saved Query (${spec.Context.QueryID.substring(0, 8)}...)`;
|
|
1235
|
+
}
|
|
1236
|
+
if (spec?.Context?.Fields && spec.Context.Fields.length > 0)
|
|
1237
|
+
return `Fields (${spec.Context.Fields.join(', ')})`;
|
|
1238
|
+
return 'Record Fields (Automatic)';
|
|
1239
|
+
}
|
|
1240
|
+
get ContextQueryDisplay() {
|
|
1241
|
+
const spec = this.ParsedSpec;
|
|
1242
|
+
if (spec?.Context?.QueryID) {
|
|
1243
|
+
if (this.LoadedQuery?.SQL) {
|
|
1244
|
+
return `-- Saved Query: ${this.LoadedQuery.Name}\n${this.LoadedQuery.SQL}`;
|
|
1245
|
+
}
|
|
1246
|
+
const paramName = spec.Context.QueryParams ? Object.keys(spec.Context.QueryParams)[0] || 'RecordID' : 'RecordID';
|
|
1247
|
+
return `-- Saved Query: ${spec.Context.QueryID}\nSELECT a.* FROM ${this.TargetEntityName || 'TargetEntity'} a WHERE a.ID = @${paramName}`;
|
|
1248
|
+
}
|
|
1249
|
+
return `SELECT a.* FROM ${this.TargetEntityName || 'TargetEntity'} a WHERE a.ID = @RecordID`;
|
|
1250
|
+
}
|
|
1251
|
+
get FormattedScopeFilter() {
|
|
1252
|
+
return this.record?.ScopeFilter?.trim() || '';
|
|
1253
|
+
}
|
|
488
1254
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵRecordProcessFormComponentExtended_BaseFactory; return function RecordProcessFormComponentExtended_Factory(__ngFactoryType__) { return (ɵRecordProcessFormComponentExtended_BaseFactory || (ɵRecordProcessFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(RecordProcessFormComponentExtended)))(__ngFactoryType__ || RecordProcessFormComponentExtended); }; })(); }
|
|
489
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RecordProcessFormComponentExtended, selectors: [["mj-record-process-form-extended"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Record", "FormComponent"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent"], ["Slot", "before-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "processOverview", "SectionName", "Overview & Status", "Icon", "fa-solid fa-gauge-high",
|
|
490
|
-
i0.ɵɵconditionalCreate(0, RecordProcessFormComponentExtended_Conditional_0_Template,
|
|
1255
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RecordProcessFormComponentExtended, selectors: [["mj-record-process-form-extended"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Record", "FormComponent"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent"], ["Slot", "before-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "processOverview", "SectionName", "Overview & Status", "Icon", "fa-solid fa-gauge-high", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-overview-container"], [1, "rpf-hero-card"], [1, "rpf-hero-main"], [1, "rpf-hero-icon-wrap"], [1, "rpf-hero-info"], [1, "rpf-hero-title-row"], [1, "rpf-hero-title"], [1, "rpf-badge", 3, "ngClass"], [1, "rpf-badge-dot"], [1, "rpf-hero-desc"], [1, "rpf-hero-pills"], ["title", "Target Entity", 1, "rpf-pill"], [1, "fa-solid", "fa-database"], ["title", "Work Type", 1, "rpf-pill"], ["title", "Feature Pipeline", 1, "rpf-pill", "rpf-pill-feature"], [1, "rpf-kpi-grid"], [1, "rpf-kpi-card"], [1, "rpf-kpi-label"], [1, "fa-solid", "fa-filter"], [1, "rpf-kpi-value"], [1, "rpf-kpi-sub", 3, "title"], [1, "fa-solid", "fa-bolt"], [1, "muted"], [1, "rpf-kpi-sub"], [1, "fa-solid", "fa-water"], [1, "fa-solid", "fa-microchip"], ["SectionKey", "pipelineConfiguration", "SectionName", "Pipeline Configuration", "Icon", "fa-solid fa-wand-magic-sparkles", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-pipeline-builder-wrap"], [1, "rpf-editor-wrap"], [1, "rpf-generic-config-wrap"], ["SectionKey", "processRuns", "SectionName", "Prior Runs", "Icon", "fa-solid fa-clock-rotate-left", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-history-wrap"], [1, "rpf-notice-card"], ["SectionKey", "processDefinition", "SectionName", "Process Definition", "Icon", "fa fa-info-circle", 3, "Form", "FormContext"], ["FieldName", "Name", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Description", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "CategoryID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "EntityID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Status", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "executionLogic", "SectionName", "Execution Logic", "Icon", "fa fa-play", 3, "Form", "FormContext", "DefaultExpanded"], ["SectionKey", "scopeConfiguration", "SectionName", "Scope Configuration", "Icon", "fa fa-filter", 3, "Form", "FormContext"], [1, "rpf-scope-infer-wrap"], ["SectionKey", "triggers", "SectionName", "Triggers", "Icon", "fa fa-bolt", 3, "Form", "FormContext"], ["FieldName", "OnChangeEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnChangeInvocationType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnChangeFilter", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScheduleEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "CronExpression", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Timezone", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnDemandEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "performanceAndOptimization", "SectionName", "Performance and Optimization", "Icon", "fa fa-tachometer-alt", 3, "Form", "FormContext"], ["SectionKey", "systemMetadata", "SectionName", "System Metadata", "Icon", "fa fa-database", 3, "Form", "FormContext", "DefaultExpanded"], ["FieldName", "__mj_CreatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "__mj_UpdatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["Slot", "after-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "mJRecordProcessWatermarks", "SectionName", "Record Process Watermarks", "Icon", "fa fa-water", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJMLModelScoringBindings", "SectionName", "ML Model Scoring Bindings", "Icon", "fa fa-project-diagram", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJFeatureValues", "SectionName", "Feature Values", "Icon", "fa fa-history", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJFeatureValueCaches", "SectionName", "Feature Value Caches", "Icon", "fa fa-database", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["Slot", "after-related", 3, "Entity", "Record", "FormComponent", "FormContext"], [1, "fa-solid", "fa-sparkles"], [3, "SpecChange", "ValidChange", "Record", "EntityID"], [3, "Record", "ShowToolbar", "Provider"], [1, "fa-solid", "fa-circle-info"], [3, "RecordProcessID"], [1, "rpf-audit-bar"], [1, "rpf-audit-badges"], [1, "rpf-audit-chip"], [1, "fa-solid", "fa-check-circle", 2, "color", "var(--mj-status-success)"], [1, "rpf-prompt-grid"], [1, "rpf-card-box"], [1, "rpf-box-eyebrow"], [1, "rpf-prompt-title"], [1, "fa-solid", "fa-message-code"], [1, "rpf-chip-wrap"], [1, "rpf-sm-chip", "rpf-sm-chip-brand"], [1, "rpf-sm-chip"], [2, "margin-top", "10px"], [1, "rpf-param-list"], [2, "font-size", "12px", "color", "var(--mj-text-muted)"], [1, "rpf-sql-preview-box"], [1, "rpf-sql-preview-label"], [1, "fa-solid", "fa-code"], [1, "rpf-sql-preview-code"], [1, "rpf-table-wrap"], [1, "rpf-feature-table"], [1, "rpf-raw-json-drawer"], [1, "rpf-raw-json-header", 3, "click"], [1, "rpf-raw-json-title"], ["type", "button", 1, "rpf-sm-chip", 3, "click"], [1, "rpf-raw-json-body"], [1, "rpf-edit-fields-divider"], ["FieldName", "PromptID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [1, "rpf-param-row"], [1, "rpf-param-name"], [1, "fa-solid", "fa-arrow-left", "rpf-param-arrow"], [1, "rpf-feature-name-cell"], [1, "rpf-type-tag"], [1, "rpf-sm-chip", 3, "title"], [1, "fa-solid", "fa-shield"], [1, "rpf-binding-pill"], [2, "color", "var(--mj-text-muted)", "font-size", "11px"], [1, "fa-solid", "fa-brain"], ["colspan", "5", 2, "text-align", "center", "color", "var(--mj-text-muted)", "padding", "20px"], ["FieldName", "WorkType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Configuration", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OutputMapping", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ActionID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "AgentID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "InputMapping", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [1, "rpf-scope-summary-row"], [1, "rpf-scope-badge-group"], [1, "rpf-scope-chip"], [1, "rpf-scope-chip", "rpf-scope-chip-brand"], [1, "fa-solid", "fa-calculator"], ["FieldName", "ScopeType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeFilter", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeViewID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeListID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [1, "rpf-opt-grid"], [1, "rpf-opt-card"], [1, "rpf-opt-label"], [1, "rpf-opt-value"], [1, "rpf-opt-sub"], ["FieldName", "SkipUnchanged", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "WatermarkStrategy", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "BatchSize", "Type", "number", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "MaxConcurrency", "Type", "number", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [3, "Navigate", "AfterDataLoad", "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"]], template: function RecordProcessFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1256
|
+
i0.ɵɵconditionalCreate(0, RecordProcessFormComponentExtended_Conditional_0_Template, 108, 142, "mj-record-form-container", 0);
|
|
491
1257
|
} if (rf & 2) {
|
|
492
1258
|
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
493
|
-
} }, dependencies: [i1.NgClass, i2.MjFormFieldComponent, i2.MjCollapsiblePanelComponent, i2.MjRecordFormContainerComponent, i2.ExplorerEntityDataGridComponent, i2.FormPanelSlotComponent, i3.RecordProcessEditorComponent, i3.FeaturePipelineBuilderComponent, i3.RecordProcessHistoryComponent], styles: ["\n\n\n\n\n.rpf-overview-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n\n.rpf-hero-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n\n.rpf-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-secondary, #64748b);\n}\n\n\n.rpf-kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n\n.rpf-pipeline-builder-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-history-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}"] }); }
|
|
1259
|
+
} }, dependencies: [i1.NgClass, i2.MjFormFieldComponent, i2.MjCollapsiblePanelComponent, i2.MjRecordFormContainerComponent, i2.ExplorerEntityDataGridComponent, i2.FormPanelSlotComponent, i3.RecordProcessEditorComponent, i3.FeaturePipelineBuilderComponent, i3.RecordProcessHistoryComponent], styles: ["\n\n\n\n\n.rpf-overview-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n\n.rpf-hero-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n\n.rpf-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-secondary, #64748b);\n}\n\n\n.rpf-kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n\n.rpf-pipeline-builder-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-history-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n\n\n\n\n\n.rpf-audit-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-left: 4px solid var(--mj-status-success, #22c55e);\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.rpf-audit-bar-warning[_ngcontent-%COMP%] {\n border-left-color: var(--mj-status-warning, #f59e0b);\n}\n\n.rpf-audit-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.rpf-audit-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary, #475569);\n font-weight: 500;\n}\n\n.rpf-audit-chip-valid[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text, #15803d);\n font-weight: 600;\n}\n\n.rpf-audit-chip-warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning-text, #b45309);\n font-weight: 600;\n}\n\n\n.rpf-prompt-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 16px;\n}\n\n@media (max-width: 768px) {\n .rpf-prompt-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n.rpf-card-box[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-box-eyebrow[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n}\n\n.rpf-prompt-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-brand-primary, #0076b6);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-chip-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n}\n\n.rpf-sm-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n background: var(--mj-bg-surface, #ffffff);\n color: var(--mj-text-secondary, #475569);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n}\n\n.rpf-sm-chip-brand[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-param-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpf-param-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.rpf-param-name[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n color: var(--mj-text-secondary, #475569);\n font-weight: 600;\n}\n\n.rpf-param-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-muted, #94a3b8);\n font-size: 10px;\n margin: 0 4px;\n}\n\n\n.rpf-sql-preview-box[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-bottom: 16px;\n}\n\n.rpf-sql-preview-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-sql-preview-code[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.6;\n overflow-x: auto;\n}\n\n\n.rpf-table-wrap[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface, #ffffff);\n margin-bottom: 16px;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border-bottom: 2px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle, #f1f5f9);\n vertical-align: middle;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover td[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover, #f8fafc);\n}\n\n.rpf-feature-name-cell[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-type-tag[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.rpf-type-numeric[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.rpf-type-categorical[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.rpf-type-default[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-binding-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-binding-valid[_ngcontent-%COMP%] {\n color: var(--mj-status-success, #22c55e);\n}\n\n.rpf-binding-invalid[_ngcontent-%COMP%] {\n color: var(--mj-status-warning, #f59e0b);\n}\n\n\n.rpf-opt-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n}\n\n@media (max-width: 900px) {\n .rpf-opt-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n.rpf-opt-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-opt-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.rpf-opt-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-opt-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary, #64748b);\n margin-top: 2px;\n}\n\n.rpf-text-success[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text, #15803d) !important;\n}\n\n\n.rpf-raw-json-drawer[_ngcontent-%COMP%] {\n border: 1px dashed var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-top: 20px;\n padding: 14px 16px;\n}\n\n.rpf-raw-json-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n}\n\n.rpf-raw-json-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary, #475569);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-raw-json-body[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.rpf-raw-json-body[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px;\n background: var(--mj-bg-surface, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.5;\n max-height: 350px;\n overflow-y: auto;\n}\n\n.rpf-scope-infer-wrap[_ngcontent-%COMP%] {\n padding: 4px 0;\n}\n\n.rpf-scope-summary-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.rpf-scope-badge-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-scope-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 6px;\n font-size: 12px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-scope-chip-brand[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-edit-fields-divider[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px dashed var(--mj-border-default, #e2e8f0);\n}"] }); }
|
|
494
1260
|
};
|
|
495
1261
|
RecordProcessFormComponentExtended = __decorate([
|
|
496
1262
|
RegisterClass(BaseFormComponent, 'MJ: Record Processes', 100)
|
|
@@ -498,15 +1264,21 @@ RecordProcessFormComponentExtended = __decorate([
|
|
|
498
1264
|
export { RecordProcessFormComponentExtended };
|
|
499
1265
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RecordProcessFormComponentExtended, [{
|
|
500
1266
|
type: Component,
|
|
501
|
-
args: [{ standalone: false, selector: 'mj-record-process-form-extended', template: "@if (record) {\n<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 <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n OVERVIEW & STATUS (Lead Panel)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processOverview\"\n SectionName=\"Overview & Status\"\n Icon=\"fa-solid fa-gauge-high\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n <div class=\"rpf-overview-container\">\n <!-- Hero Header Card -->\n <div class=\"rpf-hero-card\">\n <div class=\"rpf-hero-main\">\n <div class=\"rpf-hero-icon-wrap\">\n <i [class]=\"WorkTypeIcon\"></i>\n </div>\n <div class=\"rpf-hero-info\">\n <div class=\"rpf-hero-title-row\">\n <h2 class=\"rpf-hero-title\">{{ record.Name || 'Untitled Process' }}</h2>\n <span class=\"rpf-badge\" [ngClass]=\"StatusBadgeClass\">\n <span class=\"rpf-badge-dot\"></span>\n {{ record.Status || 'Draft' }}\n </span>\n </div>\n <p class=\"rpf-hero-desc\">{{ record.Description || 'No description provided for this process.' }}</p>\n <div class=\"rpf-hero-pills\">\n <span class=\"rpf-pill\" title=\"Target Entity\">\n <i class=\"fa-solid fa-database\"></i>\n <span>{{ TargetEntityName }}</span>\n </span>\n <span class=\"rpf-pill\" title=\"Work Type\">\n <i [class]=\"WorkTypeIcon\"></i>\n <span>{{ record.WorkType || 'Not set' }}</span>\n </span>\n @if (record.WorkType === 'Infer') {\n <span class=\"rpf-pill rpf-pill-feature\" title=\"Feature Pipeline\">\n <i class=\"fa-solid fa-sparkles\"></i>\n <span>Feature Pipeline</span>\n </span>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- KPI Summary Grid -->\n <div class=\"rpf-kpi-grid\">\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-filter\"></i> Target Scope</div>\n <div class=\"rpf-kpi-value\">{{ record.ScopeType || 'Filter' }}</div>\n <div class=\"rpf-kpi-sub\" [title]=\"record.ScopeFilter || 'All records in scope'\">\n {{ record.ScopeFilter ? record.ScopeFilter : 'No filter applied (all records)' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-bolt\"></i> Triggers</div>\n <div class=\"rpf-kpi-value\">\n @if (record.ScheduleEnabled) {\n <span>Scheduled</span>\n } @else if (record.OnChangeEnabled) {\n <span>On Change</span>\n } @else if (record.OnDemandEnabled) {\n <span>On Demand</span>\n } @else {\n <span class=\"muted\">Manual</span>\n }\n </div>\n <div class=\"rpf-kpi-sub\">\n @if (record.ScheduleEnabled && record.CronExpression) {\n <code>{{ record.CronExpression }}</code>\n } @else if (record.OnChangeEnabled) {\n <span>Mode: {{ record.OnChangeInvocationType || 'Immediate' }}</span>\n } @else {\n <span>On demand execution</span>\n }\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-water\"></i> Optimization</div>\n <div class=\"rpf-kpi-value\">{{ record.WatermarkStrategy || 'None' }}</div>\n <div class=\"rpf-kpi-sub\">\n Batch: {{ record.BatchSize || 'default' }} | Concurrency: {{ record.MaxConcurrency || '1' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-microchip\"></i> Skip Unchanged</div>\n <div class=\"rpf-kpi-value\">{{ record.SkipUnchanged ? 'Enabled' : 'Disabled' }}</div>\n <div class=\"rpf-kpi-sub\">\n {{ record.SkipUnchanged ? 'Skips re-evaluating unchanged rows' : 'Processes all matching rows' }}\n </div>\n </div>\n </div>\n </div>\n </mj-collapsible-panel>\n\n <!-- ========================================\n PIPELINE CONFIGURATION (Visual Builder)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"pipelineConfiguration\"\n SectionName=\"Pipeline Configuration\"\n Icon=\"fa-solid fa-wand-magic-sparkles\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-pipeline-builder-wrap\">\n <mj-feature-pipeline-builder\n [Record]=\"record\"\n [EntityID]=\"record.EntityID\"\n (SpecChange)=\"OnPipelineSpecChange()\"\n (ValidChange)=\"OnPipelineValidChange($event)\">\n </mj-feature-pipeline-builder>\n </div>\n } @else if (record.WorkType === 'FieldRules') {\n <div class=\"rpf-editor-wrap\">\n <mj-record-process-editor\n [Record]=\"record\"\n [ShowToolbar]=\"false\"\n [Provider]=\"ProviderToUse\">\n </mj-record-process-editor>\n </div>\n } @else {\n <div class=\"rpf-generic-config-wrap\">\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>{{ record.WorkType || 'Custom' }} Execution Logic</strong>\n <p>Configure actions, prompts, and mappings in the <em>Process Definition</em> and <em>Execution Logic</em> sections below.</p>\n </div>\n </div>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n PRIOR RUNS & AUDIT (Embedded History)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processRuns\"\n SectionName=\"Prior Runs\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.IsSaved) {\n <div class=\"rpf-history-wrap\">\n <mj-record-process-history\n [RecordProcessID]=\"record.ID\">\n </mj-record-process-history>\n </div>\n } @else {\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>Save this record process to view execution history and per-record audit logs.</span>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n FIELD PANELS (Fold into Details rail)\n ======================================== -->\n\n <!-- Process Definition Section -->\n <mj-collapsible-panel\n SectionKey=\"processDefinition\"\n SectionName=\"Process Definition\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Name\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Description\" Type=\"textarea\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CategoryID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"EntityID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Status\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Execution Logic Section -->\n <mj-collapsible-panel\n SectionKey=\"executionLogic\"\n SectionName=\"Execution Logic\"\n Icon=\"fa fa-play\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WorkType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ActionID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"AgentID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"PromptID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"InputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OutputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Scope Configuration Section -->\n <mj-collapsible-panel\n SectionKey=\"scopeConfiguration\"\n SectionName=\"Scope Configuration\"\n Icon=\"fa fa-filter\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeViewID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeListID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Triggers Section -->\n <mj-collapsible-panel\n SectionKey=\"triggers\"\n SectionName=\"Triggers\"\n Icon=\"fa fa-bolt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeInvocationType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScheduleEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CronExpression\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Timezone\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnDemandEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Performance and Optimization Section -->\n <mj-collapsible-panel\n SectionKey=\"performanceAndOptimization\"\n SectionName=\"Performance and Optimization\"\n Icon=\"fa fa-tachometer-alt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"SkipUnchanged\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WatermarkStrategy\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BatchSize\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"MaxConcurrency\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></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-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_CreatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_UpdatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n RELATED ENTITY PANELS\n ======================================== -->\n\n <!-- Record Process Watermarks Section -->\n <mj-collapsible-panel\n SectionKey=\"mJRecordProcessWatermarks\"\n SectionName=\"Record Process Watermarks\"\n Icon=\"fa fa-water\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJRecordProcessWatermarks')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Record Process Watermarks','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Record Process Watermarks','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJRecordProcessWatermarks')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJRecordProcessWatermarks', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ML Model Scoring Bindings Section -->\n <mj-collapsible-panel\n SectionKey=\"mJMLModelScoringBindings\"\n SectionName=\"ML Model Scoring Bindings\"\n Icon=\"fa fa-project-diagram\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJMLModelScoringBindings')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJMLModelScoringBindings')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJMLModelScoringBindings', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Values Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValues\"\n SectionName=\"Feature Values\"\n Icon=\"fa fa-history\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValues')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Values','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Values','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValues')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValues', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Value Caches Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValueCaches\"\n SectionName=\"Feature Value Caches\"\n Icon=\"fa fa-database\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValueCaches')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Value Caches','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Value Caches','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValueCaches')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValueCaches', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-related\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n</mj-record-form-container>\n}\n", styles: ["/* ==========================================================================\n Record Process / Feature Pipeline Custom Form Styles\n Uses standard MemberJunction design tokens for full light & dark mode support.\n ========================================================================== */\n\n.rpf-overview-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n/* Hero Header Card */\n.rpf-hero-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n/* Status Badges */\n.rpf-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active .rpf-badge-dot {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft .rpf-badge-dot {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled .rpf-badge-dot {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default .rpf-badge-dot {\n background: var(--mj-text-secondary, #64748b);\n}\n\n/* KPI Grid */\n.rpf-kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub code {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n/* Wrappers for child components */\n.rpf-pipeline-builder-wrap {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap {\n padding: 8px 0;\n}\n\n.rpf-history-wrap {\n padding: 8px 0;\n}\n\n.rpf-notice-card {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card i {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card strong {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card p {\n margin: 0;\n}\n"] }]
|
|
1267
|
+
args: [{ standalone: false, selector: 'mj-record-process-form-extended', template: "@if (record) {\n<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 <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n OVERVIEW & STATUS (Lead Panel)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processOverview\"\n SectionName=\"Overview & Status\"\n Icon=\"fa-solid fa-gauge-high\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n <div class=\"rpf-overview-container\">\n <!-- Hero Header Card -->\n <div class=\"rpf-hero-card\">\n <div class=\"rpf-hero-main\">\n <div class=\"rpf-hero-icon-wrap\">\n <i [class]=\"WorkTypeIcon\"></i>\n </div>\n <div class=\"rpf-hero-info\">\n <div class=\"rpf-hero-title-row\">\n <h2 class=\"rpf-hero-title\">{{ record.Name || 'Untitled Process' }}</h2>\n <span class=\"rpf-badge\" [ngClass]=\"StatusBadgeClass\">\n <span class=\"rpf-badge-dot\"></span>\n {{ record.Status || 'Draft' }}\n </span>\n </div>\n <p class=\"rpf-hero-desc\">{{ record.Description || 'No description provided for this process.' }}</p>\n <div class=\"rpf-hero-pills\">\n <span class=\"rpf-pill\" title=\"Target Entity\">\n <i class=\"fa-solid fa-database\"></i>\n <span>{{ TargetEntityName }}</span>\n </span>\n <span class=\"rpf-pill\" title=\"Work Type\">\n <i [class]=\"WorkTypeIcon\"></i>\n <span>{{ record.WorkType || 'Not set' }}</span>\n </span>\n @if (record.WorkType === 'Infer') {\n <span class=\"rpf-pill rpf-pill-feature\" title=\"Feature Pipeline\">\n <i class=\"fa-solid fa-sparkles\"></i>\n <span>Feature Pipeline</span>\n </span>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- KPI Summary Grid -->\n <div class=\"rpf-kpi-grid\">\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-filter\"></i> Target Scope</div>\n <div class=\"rpf-kpi-value\">{{ record.ScopeType || 'Filter' }}</div>\n <div class=\"rpf-kpi-sub\" [title]=\"record.ScopeFilter || 'All records in scope'\">\n {{ record.ScopeFilter ? record.ScopeFilter : 'No filter applied (all records)' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-bolt\"></i> Triggers</div>\n <div class=\"rpf-kpi-value\">\n @if (record.ScheduleEnabled) {\n <span>Scheduled</span>\n } @else if (record.OnChangeEnabled) {\n <span>On Change</span>\n } @else if (record.OnDemandEnabled) {\n <span>On Demand</span>\n } @else {\n <span class=\"muted\">Manual</span>\n }\n </div>\n <div class=\"rpf-kpi-sub\">\n @if (record.ScheduleEnabled && record.CronExpression) {\n <code>{{ record.CronExpression }}</code>\n } @else if (record.OnChangeEnabled) {\n <span>Mode: {{ record.OnChangeInvocationType || 'Immediate' }}</span>\n } @else {\n <span>On demand execution</span>\n }\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-water\"></i> Optimization</div>\n <div class=\"rpf-kpi-value\">{{ record.WatermarkStrategy || 'None' }}</div>\n <div class=\"rpf-kpi-sub\">\n Batch: {{ record.BatchSize || 'default' }} | Concurrency: {{ record.MaxConcurrency || '1' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-microchip\"></i> Skip Unchanged</div>\n <div class=\"rpf-kpi-value\">{{ record.SkipUnchanged ? 'Enabled' : 'Disabled' }}</div>\n <div class=\"rpf-kpi-sub\">\n {{ record.SkipUnchanged ? 'Skips re-evaluating unchanged rows' : 'Processes all matching rows' }}\n </div>\n </div>\n </div>\n </div>\n </mj-collapsible-panel>\n\n <!-- ========================================\n PIPELINE CONFIGURATION (Visual Builder)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"pipelineConfiguration\"\n SectionName=\"Pipeline Configuration\"\n Icon=\"fa-solid fa-wand-magic-sparkles\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-pipeline-builder-wrap\">\n <mj-feature-pipeline-builder\n [Record]=\"record\"\n [EntityID]=\"record.EntityID\"\n (SpecChange)=\"OnPipelineSpecChange()\"\n (ValidChange)=\"OnPipelineValidChange($event)\">\n </mj-feature-pipeline-builder>\n </div>\n } @else if (record.WorkType === 'FieldRules') {\n <div class=\"rpf-editor-wrap\">\n <mj-record-process-editor\n [Record]=\"record\"\n [ShowToolbar]=\"false\"\n [Provider]=\"ProviderToUse\">\n </mj-record-process-editor>\n </div>\n } @else {\n <div class=\"rpf-generic-config-wrap\">\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>{{ record.WorkType || 'Custom' }} Execution Logic</strong>\n <p>Configure actions, prompts, and mappings in the <em>Process Definition</em> and <em>Execution Logic</em> sections below.</p>\n </div>\n </div>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n PRIOR RUNS & AUDIT (Embedded History)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processRuns\"\n SectionName=\"Prior Runs\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.IsSaved) {\n <div class=\"rpf-history-wrap\">\n <mj-record-process-history\n [RecordProcessID]=\"record.ID\">\n </mj-record-process-history>\n </div>\n } @else {\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>Save this record process to view execution history and per-record audit logs.</span>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n FIELD PANELS (Fold into Details rail)\n ======================================== -->\n\n <!-- Process Definition Section -->\n <mj-collapsible-panel\n SectionKey=\"processDefinition\"\n SectionName=\"Process Definition\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Name\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Description\" Type=\"textarea\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CategoryID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"EntityID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Status\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Execution Logic Section -->\n <mj-collapsible-panel\n SectionKey=\"executionLogic\"\n SectionName=\"Execution Logic\"\n Icon=\"fa fa-play\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n @if (record.WorkType === 'Infer') {\n <!-- Health & Schema Audit Bar -->\n <div class=\"rpf-audit-bar\" [class.rpf-audit-bar-warning]=\"!IsSpecValid\">\n <div class=\"rpf-audit-badges\">\n <div class=\"rpf-audit-chip\" [class.rpf-audit-chip-valid]=\"IsSpecValid\" [class.rpf-audit-chip-warning]=\"!IsSpecValid\">\n <i [class]=\"IsSpecValid ? 'fa-solid fa-shield-check' : 'fa-solid fa-triangle-exclamation'\"></i>\n <span>{{ IsSpecValid ? 'Configuration Valid' : 'Configuration Issues Found' }}</span>\n </div>\n <div class=\"rpf-audit-chip\">\n <i class=\"fa-solid fa-check-circle\" style=\"color: var(--mj-status-success);\"></i>\n <span>{{ BoundFeaturesCount }} of {{ TotalFeaturesCount }} Features Bound to Target</span>\n </div>\n <div class=\"rpf-audit-chip\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Context: {{ ContextModeText }}</span>\n </div>\n </div>\n </div>\n\n <!-- AI Model & Context Query Section -->\n <div class=\"rpf-prompt-grid\">\n <!-- Prompt Card -->\n <div class=\"rpf-card-box\">\n <div class=\"rpf-box-eyebrow\">Bound AI Prompt</div>\n <div class=\"rpf-prompt-title\">\n <i class=\"fa-solid fa-message-code\"></i>\n <span>{{ record.PromptID ? 'Prompt Configured' : 'No Prompt Selected' }}</span>\n </div>\n <div class=\"rpf-chip-wrap\">\n @if (record.PromptID) {\n <span class=\"rpf-sm-chip rpf-sm-chip-brand\">ID: {{ record.PromptID.substring(0, 8) }}...</span>\n }\n <span class=\"rpf-sm-chip\"><i class=\"fa-solid fa-sparkles\"></i> Feature Infer Engine</span>\n <span class=\"rpf-sm-chip\"><i class=\"fa-solid fa-microchip\"></i> LLM Output Parser</span>\n </div>\n @if (EditMode) {\n <div style=\"margin-top: 10px;\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"PromptID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n </div>\n }\n </div>\n\n <!-- Parameters Resolution Card -->\n <div class=\"rpf-card-box\">\n <div class=\"rpf-box-eyebrow\">Prompt Parameter Resolution</div>\n @if (ParameterMappings.length > 0) {\n <div class=\"rpf-param-list\">\n @for (item of ParameterMappings; track item.Param) {\n <div class=\"rpf-param-row\">\n <span class=\"rpf-param-name\">{{ item.Param }}</span>\n <span>\n <i class=\"fa-solid fa-arrow-left rpf-param-arrow\"></i>\n <span>Column: <code>{{ item.Field }}</code></span>\n </span>\n </div>\n }\n </div>\n } @else {\n <div style=\"font-size: 12px; color: var(--mj-text-muted);\">\n No parameter bindings configured. Entire row context will be passed to prompt.\n </div>\n }\n </div>\n </div>\n\n <!-- Context Query Display -->\n <div class=\"rpf-sql-preview-box\">\n <div class=\"rpf-sql-preview-label\">\n <i class=\"fa-solid fa-code\"></i> Context Retrieval Query\n </div>\n <div class=\"rpf-sql-preview-code\">\n <code>{{ ContextQueryDisplay }}</code>\n </div>\n </div>\n\n <!-- Feature Output Schema & Entity Mappings Table -->\n <div class=\"rpf-table-wrap\">\n <table class=\"rpf-feature-table\">\n <thead>\n <tr>\n <th>Feature Name</th>\n <th>Kind / Type</th>\n <th>Validation Constraints</th>\n <th>Target Field Binding</th>\n <th>Reasoning</th>\n </tr>\n </thead>\n <tbody>\n @if (FeatureOutputs.length > 0) {\n @for (out of FeatureOutputs; track out.Name) {\n <tr>\n <td>\n <div class=\"rpf-feature-name-cell\">\n <i [class]=\"out.FeatureKind === 'numeric' ? 'fa-solid fa-chart-line' : 'fa-solid fa-tags'\"\n [style.color]=\"out.FeatureKind === 'numeric' ? '#f59e0b' : '#8b5cf6'\"></i>\n <span>{{ out.Name }}</span>\n </div>\n </td>\n <td>\n <span class=\"rpf-type-tag\"\n [class.rpf-type-numeric]=\"out.FeatureKind === 'numeric'\"\n [class.rpf-type-categorical]=\"out.FeatureKind === 'categorical'\"\n [class.rpf-type-default]=\"out.FeatureKind !== 'numeric' && out.FeatureKind !== 'categorical'\">\n {{ out.FeatureKind }}\n </span>\n </td>\n <td>\n <span class=\"rpf-sm-chip\" [title]=\"'Violation policy: ' + out.ViolationPolicy\">\n <i class=\"fa-solid fa-shield\"></i> {{ out.ConstraintSummary }}\n </span>\n </td>\n <td>\n <div class=\"rpf-binding-pill\">\n <i [class]=\"out.TargetFieldExists ? 'fa-solid fa-check-circle rpf-binding-valid' : 'fa-solid fa-triangle-exclamation rpf-binding-invalid'\"></i>\n <span>{{ TargetEntityName }}.<strong>{{ out.TargetField }}</strong></span>\n <span style=\"color: var(--mj-text-muted); font-size: 11px;\">({{ out.TargetFieldType }})</span>\n </div>\n </td>\n <td>\n @if (out.ReasoningTarget === 'Enabled') {\n <span class=\"rpf-sm-chip rpf-sm-chip-brand\"><i class=\"fa-solid fa-brain\"></i> Captured</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 11px;\">None</span>\n }\n </td>\n </tr>\n }\n } @else {\n <tr>\n <td colspan=\"5\" style=\"text-align: center; color: var(--mj-text-muted); padding: 20px;\">\n No output features defined yet. Use the <em>Pipeline Configuration</em> builder tab to add output features.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!-- Advanced Raw JSON Drawer -->\n <div class=\"rpf-raw-json-drawer\">\n <div class=\"rpf-raw-json-header\" (click)=\"ToggleRawJson()\">\n <div class=\"rpf-raw-json-title\">\n <i [class]=\"RawJsonExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n <i class=\"fa-solid fa-code\"></i>\n <span>Power User Escape Hatch: View Raw Pipeline Configuration JSON</span>\n </div>\n <button type=\"button\" class=\"rpf-sm-chip\" (click)=\"$event.stopPropagation(); CopyRawJson()\">\n <i [class]=\"RawJsonCopied ? 'fa-solid fa-check' : 'fa-regular fa-copy'\"></i>\n <span>{{ RawJsonCopied ? 'Copied!' : 'Copy JSON' }}</span>\n </button>\n </div>\n @if (RawJsonExpanded) {\n <div class=\"rpf-raw-json-body\">\n <pre><code>{{ FormattedRawJson }}</code></pre>\n </div>\n }\n </div>\n\n @if (EditMode) {\n <div class=\"rpf-edit-fields-divider\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WorkType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OutputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </div>\n }\n } @else {\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WorkType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ActionID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"AgentID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"PromptID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"InputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OutputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- Scope Configuration Section -->\n <mj-collapsible-panel\n SectionKey=\"scopeConfiguration\"\n SectionName=\"Scope Configuration\"\n Icon=\"fa fa-filter\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-scope-infer-wrap\">\n <div class=\"rpf-scope-summary-row\">\n <div class=\"rpf-scope-badge-group\">\n <span class=\"rpf-scope-chip\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>Scope Type: <strong>{{ record.ScopeType || 'Filter' }}</strong></span>\n </span>\n @if (record.ScopeFilter) {\n <span class=\"rpf-scope-chip rpf-scope-chip-brand\">\n <i class=\"fa-solid fa-calculator\"></i>\n <span>Filter Active</span>\n </span>\n }\n </div>\n </div>\n @if (FormattedScopeFilter) {\n <div class=\"rpf-sql-preview-box\">\n <div class=\"rpf-sql-preview-label\">\n <i class=\"fa-solid fa-database\"></i> SQL Scope Filter (WHERE clause)\n </div>\n <div class=\"rpf-sql-preview-code\">\n <code>{{ FormattedScopeFilter }}</code>\n </div>\n </div>\n } @else {\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>No scope filter applied. All records in <strong>{{ TargetEntityName }}</strong> will be evaluated.</span>\n </div>\n }\n @if (EditMode) {\n <div class=\"rpf-edit-fields-divider\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </div>\n }\n </div>\n } @else {\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeViewID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeListID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- Triggers Section -->\n <mj-collapsible-panel\n SectionKey=\"triggers\"\n SectionName=\"Triggers\"\n Icon=\"fa fa-bolt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeInvocationType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScheduleEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CronExpression\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Timezone\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnDemandEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Performance and Optimization Section -->\n <mj-collapsible-panel\n SectionKey=\"performanceAndOptimization\"\n SectionName=\"Performance and Optimization\"\n Icon=\"fa fa-tachometer-alt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-opt-grid\">\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Delta Watermark</div>\n <div class=\"rpf-opt-value\">{{ record.WatermarkStrategy || 'Checksum' }}</div>\n <div class=\"rpf-opt-sub\">Evaluates row state changes</div>\n </div>\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Batch Processing</div>\n <div class=\"rpf-opt-value\">{{ record.BatchSize || 100 }} records</div>\n <div class=\"rpf-opt-sub\">Per inference chunk</div>\n </div>\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Concurrency</div>\n <div class=\"rpf-opt-value\">{{ record.MaxConcurrency || 1 }} Parallel</div>\n <div class=\"rpf-opt-sub\">Concurrent worker threads</div>\n </div>\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Skip Unchanged</div>\n <div class=\"rpf-opt-value\" [class.rpf-text-success]=\"record.SkipUnchanged\">\n <i [class]=\"record.SkipUnchanged ? 'fa-solid fa-check' : 'fa-solid fa-minus'\"></i>\n {{ record.SkipUnchanged ? 'Enabled' : 'Disabled' }}\n </div>\n <div class=\"rpf-opt-sub\">Skips re-evaluating unchanged rows</div>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"rpf-edit-fields-divider\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"SkipUnchanged\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WatermarkStrategy\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BatchSize\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"MaxConcurrency\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </div>\n }\n } @else {\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"SkipUnchanged\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WatermarkStrategy\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BatchSize\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"MaxConcurrency\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- System Metadata Section -->\n <mj-collapsible-panel\n SectionKey=\"systemMetadata\"\n SectionName=\"System Metadata\"\n Icon=\"fa fa-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_CreatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_UpdatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n RELATED ENTITY PANELS\n ======================================== -->\n\n <!-- Record Process Watermarks Section -->\n <mj-collapsible-panel\n SectionKey=\"mJRecordProcessWatermarks\"\n SectionName=\"Record Process Watermarks\"\n Icon=\"fa fa-water\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJRecordProcessWatermarks')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Record Process Watermarks','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Record Process Watermarks','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJRecordProcessWatermarks')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJRecordProcessWatermarks', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ML Model Scoring Bindings Section -->\n <mj-collapsible-panel\n SectionKey=\"mJMLModelScoringBindings\"\n SectionName=\"ML Model Scoring Bindings\"\n Icon=\"fa fa-project-diagram\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJMLModelScoringBindings')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJMLModelScoringBindings')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJMLModelScoringBindings', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Values Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValues\"\n SectionName=\"Feature Values\"\n Icon=\"fa fa-history\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValues')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Values','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Values','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValues')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValues', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Value Caches Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValueCaches\"\n SectionName=\"Feature Value Caches\"\n Icon=\"fa fa-database\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValueCaches')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Value Caches','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Value Caches','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValueCaches')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValueCaches', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-related\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n</mj-record-form-container>\n}\n", styles: ["/* ==========================================================================\n Record Process / Feature Pipeline Custom Form Styles\n Uses standard MemberJunction design tokens for full light & dark mode support.\n ========================================================================== */\n\n.rpf-overview-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n/* Hero Header Card */\n.rpf-hero-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n/* Status Badges */\n.rpf-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active .rpf-badge-dot {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft .rpf-badge-dot {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled .rpf-badge-dot {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default .rpf-badge-dot {\n background: var(--mj-text-secondary, #64748b);\n}\n\n/* KPI Grid */\n.rpf-kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub code {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n/* Wrappers for child components */\n.rpf-pipeline-builder-wrap {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap {\n padding: 8px 0;\n}\n\n.rpf-history-wrap {\n padding: 8px 0;\n}\n\n.rpf-notice-card {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card i {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card strong {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card p {\n margin: 0;\n}\n\n/* ==========================================================================\n Option A: Semantic Cards for Infer Feature Pipeline Details\n ========================================================================== */\n\n/* Schema Health / Audit Banner */\n.rpf-audit-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-left: 4px solid var(--mj-status-success, #22c55e);\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.rpf-audit-bar-warning {\n border-left-color: var(--mj-status-warning, #f59e0b);\n}\n\n.rpf-audit-badges {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.rpf-audit-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary, #475569);\n font-weight: 500;\n}\n\n.rpf-audit-chip-valid {\n color: var(--mj-status-success-text, #15803d);\n font-weight: 600;\n}\n\n.rpf-audit-chip-warning {\n color: var(--mj-status-warning-text, #b45309);\n font-weight: 600;\n}\n\n/* Prompt Card & Resolution Grid */\n.rpf-prompt-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 16px;\n}\n\n@media (max-width: 768px) {\n .rpf-prompt-grid {\n grid-template-columns: 1fr;\n }\n}\n\n.rpf-card-box {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-box-eyebrow {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n}\n\n.rpf-prompt-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-brand-primary, #0076b6);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-chip-wrap {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n}\n\n.rpf-sm-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n background: var(--mj-bg-surface, #ffffff);\n color: var(--mj-text-secondary, #475569);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n}\n\n.rpf-sm-chip-brand {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-param-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpf-param-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.rpf-param-name {\n font-family: var(--mj-font-mono, monospace);\n color: var(--mj-text-secondary, #475569);\n font-weight: 600;\n}\n\n.rpf-param-arrow {\n color: var(--mj-text-muted, #94a3b8);\n font-size: 10px;\n margin: 0 4px;\n}\n\n/* SQL / Code Display Boxes */\n.rpf-sql-preview-box {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-bottom: 16px;\n}\n\n.rpf-sql-preview-label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-sql-preview-code {\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.6;\n overflow-x: auto;\n}\n\n/* Feature Schema Table */\n.rpf-table-wrap {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface, #ffffff);\n margin-bottom: 16px;\n}\n\n.rpf-feature-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.rpf-feature-table th {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border-bottom: 2px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-feature-table td {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle, #f1f5f9);\n vertical-align: middle;\n}\n\n.rpf-feature-table tr:last-child td {\n border-bottom: none;\n}\n\n.rpf-feature-table tr:hover td {\n background: var(--mj-bg-surface-hover, #f8fafc);\n}\n\n.rpf-feature-name-cell {\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-type-tag {\n font-size: 11px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.rpf-type-numeric {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.rpf-type-categorical {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.rpf-type-default {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-binding-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-binding-valid {\n color: var(--mj-status-success, #22c55e);\n}\n\n.rpf-binding-invalid {\n color: var(--mj-status-warning, #f59e0b);\n}\n\n/* Optimization Grid */\n.rpf-opt-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n}\n\n@media (max-width: 900px) {\n .rpf-opt-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n.rpf-opt-card {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-opt-label {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.rpf-opt-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-opt-sub {\n font-size: 11px;\n color: var(--mj-text-secondary, #64748b);\n margin-top: 2px;\n}\n\n.rpf-text-success {\n color: var(--mj-status-success-text, #15803d) !important;\n}\n\n/* Raw JSON Accordion */\n.rpf-raw-json-drawer {\n border: 1px dashed var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-top: 20px;\n padding: 14px 16px;\n}\n\n.rpf-raw-json-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n}\n\n.rpf-raw-json-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary, #475569);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-raw-json-body {\n margin-top: 12px;\n}\n\n.rpf-raw-json-body pre {\n margin: 0;\n padding: 12px;\n background: var(--mj-bg-surface, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.5;\n max-height: 350px;\n overflow-y: auto;\n}\n\n.rpf-scope-infer-wrap {\n padding: 4px 0;\n}\n\n.rpf-scope-summary-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.rpf-scope-badge-group {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-scope-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 6px;\n font-size: 12px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-scope-chip-brand {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-edit-fields-divider {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px dashed var(--mj-border-default, #e2e8f0);\n}\n"] }]
|
|
502
1268
|
}], null, null); })();
|
|
503
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordProcessFormComponentExtended, { className: "RecordProcessFormComponentExtended", filePath: "src/lib/custom/RecordProcesses/record-process-form.component.ts", lineNumber:
|
|
1269
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordProcessFormComponentExtended, { className: "RecordProcessFormComponentExtended", filePath: "src/lib/custom/RecordProcesses/record-process-form.component.ts", lineNumber: 247 }); })();
|
|
504
1270
|
/**
|
|
505
|
-
* Form policy ensuring the Overview
|
|
506
|
-
*
|
|
1271
|
+
* Form policy ensuring the Overview panel sits as the lead group
|
|
1272
|
+
* on the left-nav rail with proper title and icon.
|
|
507
1273
|
*/
|
|
508
1274
|
let RecordProcessFormPolicy = class RecordProcessFormPolicy extends BaseFormPolicy {
|
|
509
1275
|
DecorateChrome(spec, _ctx) {
|
|
1276
|
+
const detailsGroup = spec.Groups.find(g => g.Key === DETAILS_SECTION_KEY || g.Key === 'details');
|
|
1277
|
+
if (detailsGroup) {
|
|
1278
|
+
detailsGroup.Title = 'Overview';
|
|
1279
|
+
detailsGroup.Icon = 'fa-solid fa-gauge-high';
|
|
1280
|
+
detailsGroup.IsLead = true;
|
|
1281
|
+
}
|
|
510
1282
|
const overview = spec.Groups.find(g => g.Key === 'processOverview');
|
|
511
1283
|
if (overview) {
|
|
512
1284
|
overview.IsLead = true;
|