@memberjunction/ng-core-entity-forms 5.42.0 → 5.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/model-prediction.logic.test.d.ts +2 -0
- package/dist/__tests__/model-prediction.logic.test.d.ts.map +1 -0
- package/dist/__tests__/model-prediction.logic.test.js +140 -0
- package/dist/__tests__/model-prediction.logic.test.js.map +1 -0
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +79 -105
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +7 -10
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +46 -51
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +2 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +300 -378
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +22 -29
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +15 -17
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +27 -34
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +11 -0
- 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 +48 -47
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +438 -454
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +48 -51
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +253 -282
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +24 -33
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +263 -311
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +6 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +475 -493
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +122 -173
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +190 -248
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +19 -23
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +16 -0
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -0
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +54 -0
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -0
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js +23 -24
- package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +25 -46
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +100 -130
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +187 -205
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +8 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +412 -489
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +100 -126
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +166 -184
- 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-step-detail.component.js +42 -61
- 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-timeline.component.js +8 -17
- 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 +0 -2
- 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 +183 -188
- 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 +108 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +665 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +94 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +257 -0
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +38 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +200 -0
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +44 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +180 -0
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +12 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +46 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +64 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +267 -0
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +53 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +111 -0
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +42 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +193 -0
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -0
- package/dist/lib/custom/custom-forms.module.d.ts +58 -49
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +64 -16
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -0
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +25 -25
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +280 -216
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +25 -21
- package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +68 -14
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +44 -32
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js +66 -0
- package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +55 -19
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.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 +28 -10
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +167 -0
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js +64 -0
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js +82 -0
- package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js +64 -0
- package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +59 -51
- package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js +11 -7
- package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +56 -46
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -59
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +24 -4
- package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +137 -87
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityActionInvocation/mjentityactioninvocation.form.component.js +10 -8
- package/dist/lib/generated/Entities/MJEntityActionInvocation/mjentityactioninvocation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +47 -29
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js +101 -0
- package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js +115 -0
- package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +63 -9
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js +161 -0
- package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js +89 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js +76 -0
- package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +141 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js +88 -0
- package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +143 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +110 -0
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +56 -24
- package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +19 -17
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +46 -26
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRemoteOperation/mjremoteoperation.form.component.js +12 -6
- package/dist/lib/generated/Entities/MJRemoteOperation/mjremoteoperation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +36 -18
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js +78 -0
- package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +145 -109
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +356 -335
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +304 -226
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/ai-agents/agent-realtime.panel.js +44 -44
- package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +43 -0
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -0
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +240 -0
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +69 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +130 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +83 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +293 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -0
- package/package.json +38 -36
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +0 -82
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +0 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +0 -1033
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +0 -1
|
@@ -211,92 +211,76 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template(r
|
|
|
211
211
|
i0.ɵɵtext(2, " Loading template... ");
|
|
212
212
|
i0.ɵɵelementEnd();
|
|
213
213
|
} }
|
|
214
|
-
function
|
|
214
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
215
215
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
216
|
-
i0.ɵɵelementStart(0, "button",
|
|
217
|
-
i0.ɵɵlistener("click", function
|
|
218
|
-
i0.ɵɵelement(1, "i",
|
|
216
|
+
i0.ɵɵelementStart(0, "button", 73);
|
|
217
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
218
|
+
i0.ɵɵelement(1, "i", 74);
|
|
219
219
|
i0.ɵɵtext(2, " Create New Template ");
|
|
220
220
|
i0.ɵɵelementEnd();
|
|
221
221
|
} }
|
|
222
|
-
function
|
|
222
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
223
223
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
224
|
-
i0.ɵɵelementStart(0, "button",
|
|
225
|
-
i0.ɵɵlistener("click", function
|
|
226
|
-
i0.ɵɵelement(1, "i",
|
|
224
|
+
i0.ɵɵelementStart(0, "button", 75);
|
|
225
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
|
|
226
|
+
i0.ɵɵelement(1, "i", 76);
|
|
227
227
|
i0.ɵɵtext(2, " Link Existing Template ");
|
|
228
228
|
i0.ɵɵelementEnd();
|
|
229
229
|
} }
|
|
230
230
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
231
|
-
i0.ɵɵelementStart(0, "
|
|
232
|
-
i0.ɵɵ
|
|
233
|
-
i0.ɵɵ
|
|
234
|
-
i0.ɵɵtext(3, "No Template Associated");
|
|
235
|
-
i0.ɵɵelementEnd();
|
|
236
|
-
i0.ɵɵelementStart(4, "p", 72);
|
|
237
|
-
i0.ɵɵtext(5, " This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one. ");
|
|
238
|
-
i0.ɵɵelementEnd();
|
|
239
|
-
i0.ɵɵelementStart(6, "div", 73);
|
|
240
|
-
i0.ɵɵconditionalCreate(7, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_7_Template, 3, 0, "button", 74);
|
|
241
|
-
i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_8_Template, 3, 0, "button", 75);
|
|
231
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 32)(1, "div", 70);
|
|
232
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template, 3, 0, "button", 71);
|
|
233
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template, 3, 0, "button", 72);
|
|
242
234
|
i0.ɵɵelementEnd()();
|
|
243
235
|
} if (rf & 2) {
|
|
244
236
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
245
|
-
i0.ɵɵadvance(
|
|
246
|
-
i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ?
|
|
237
|
+
i0.ɵɵadvance(2);
|
|
238
|
+
i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ? 2 : -1);
|
|
247
239
|
i0.ɵɵadvance();
|
|
248
|
-
i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ?
|
|
240
|
+
i0.ɵɵconditional(ctx_r1.UserCanReadTemplates ? 3 : -1);
|
|
249
241
|
} }
|
|
250
|
-
function
|
|
242
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
251
243
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
252
|
-
i0.ɵɵelementStart(0, "button",
|
|
253
|
-
i0.ɵɵlistener("click", function
|
|
254
|
-
i0.ɵɵelement(1, "i",
|
|
244
|
+
i0.ɵɵelementStart(0, "button", 73);
|
|
245
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewTemplate()); });
|
|
246
|
+
i0.ɵɵelement(1, "i", 74);
|
|
255
247
|
i0.ɵɵtext(2, " Create New Template ");
|
|
256
248
|
i0.ɵɵelementEnd();
|
|
257
249
|
} }
|
|
258
250
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
259
251
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
260
|
-
i0.ɵɵelementStart(0, "
|
|
261
|
-
i0.ɵɵ
|
|
262
|
-
i0.ɵɵ
|
|
263
|
-
i0.ɵɵtext(
|
|
252
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 33)(1, "div", 70)(2, "button", 75);
|
|
253
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
|
|
254
|
+
i0.ɵɵelement(3, "i", 77);
|
|
255
|
+
i0.ɵɵtext(4, " Retry Loading ");
|
|
264
256
|
i0.ɵɵelementEnd();
|
|
265
|
-
i0.ɵɵ
|
|
266
|
-
i0.ɵɵtext(5, " The referenced template could not be loaded. It may have been deleted or moved. ");
|
|
267
|
-
i0.ɵɵelementEnd();
|
|
268
|
-
i0.ɵɵelementStart(6, "div", 73)(7, "button", 78);
|
|
269
|
-
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.loadTemplate()); });
|
|
270
|
-
i0.ɵɵelement(8, "i", 82);
|
|
271
|
-
i0.ɵɵtext(9, " Retry Loading ");
|
|
272
|
-
i0.ɵɵelementEnd();
|
|
273
|
-
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_10_Template, 3, 0, "button", 74);
|
|
257
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template, 3, 0, "button", 71);
|
|
274
258
|
i0.ɵɵelementEnd()();
|
|
275
259
|
} if (rf & 2) {
|
|
276
260
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
277
|
-
i0.ɵɵadvance(
|
|
278
|
-
i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ?
|
|
261
|
+
i0.ɵɵadvance(5);
|
|
262
|
+
i0.ɵɵconditional(ctx_r1.UserCanCreateTemplates ? 5 : -1);
|
|
279
263
|
} }
|
|
280
264
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
281
265
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
282
|
-
i0.ɵɵelementStart(0, "button",
|
|
266
|
+
i0.ɵɵelementStart(0, "button", 83);
|
|
283
267
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.linkExistingTemplate()); });
|
|
284
|
-
i0.ɵɵelement(1, "i",
|
|
268
|
+
i0.ɵɵelement(1, "i", 84);
|
|
285
269
|
i0.ɵɵtext(2, " Change Template ");
|
|
286
270
|
i0.ɵɵelementEnd();
|
|
287
271
|
} }
|
|
288
272
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
289
273
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
290
|
-
i0.ɵɵelementStart(0, "button",
|
|
274
|
+
i0.ɵɵelementStart(0, "button", 85);
|
|
291
275
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openTemplateInNewWindow()); });
|
|
292
|
-
i0.ɵɵelement(1, "i",
|
|
276
|
+
i0.ɵɵelement(1, "i", 86);
|
|
293
277
|
i0.ɵɵtext(2, " Open in New Window ");
|
|
294
278
|
i0.ɵɵelementEnd();
|
|
295
279
|
} }
|
|
296
280
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
-
i0.ɵɵelementStart(0, "div",
|
|
298
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template, 3, 0, "button",
|
|
299
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template, 3, 0, "button",
|
|
281
|
+
i0.ɵɵelementStart(0, "div", 78);
|
|
282
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template, 3, 0, "button", 81);
|
|
283
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template, 3, 0, "button", 82);
|
|
300
284
|
i0.ɵɵelementEnd();
|
|
301
285
|
} if (rf & 2) {
|
|
302
286
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -308,8 +292,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditiona
|
|
|
308
292
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
309
293
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
310
294
|
i0.ɵɵelementStart(0, "div", 34);
|
|
311
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template, 3, 2, "div",
|
|
312
|
-
i0.ɵɵelementStart(2, "div",
|
|
295
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template, 3, 2, "div", 78);
|
|
296
|
+
i0.ɵɵelementStart(2, "div", 79)(3, "mj-template-editor", 80, 1);
|
|
313
297
|
i0.ɵɵlistener("contentChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template_mj_template_editor_contentChange_3_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateContentChange($event)); })("runTemplate", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template_mj_template_editor_runTemplate_3_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onTemplateRun($event)); });
|
|
314
298
|
i0.ɵɵelementEnd()()();
|
|
315
299
|
} if (rf & 2) {
|
|
@@ -320,21 +304,21 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(r
|
|
|
320
304
|
i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
|
|
321
305
|
} }
|
|
322
306
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
323
|
-
i0.ɵɵelementStart(0, "span",
|
|
307
|
+
i0.ɵɵelementStart(0, "span", 90);
|
|
324
308
|
i0.ɵɵtext(1);
|
|
325
309
|
i0.ɵɵelementEnd();
|
|
326
310
|
} if (rf & 2) {
|
|
327
311
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
328
312
|
i0.ɵɵadvance();
|
|
329
|
-
i0.ɵɵ
|
|
313
|
+
i0.ɵɵtextInterpolate(ctx_r1.promptModels.length);
|
|
330
314
|
} }
|
|
331
315
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
332
316
|
i0.ɵɵelementStart(0, "span", 67);
|
|
333
|
-
i0.ɵɵelement(1, "i",
|
|
317
|
+
i0.ɵɵelement(1, "i", 89);
|
|
334
318
|
i0.ɵɵtext(2, " Models ");
|
|
335
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
336
|
-
i0.ɵɵelementStart(4, "span",
|
|
337
|
-
i0.ɵɵelement(5, "i",
|
|
319
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 90);
|
|
320
|
+
i0.ɵɵelementStart(4, "span", 91);
|
|
321
|
+
i0.ɵɵelement(5, "i", 92);
|
|
338
322
|
i0.ɵɵtext(6, " Priority order (first available model will be used) ");
|
|
339
323
|
i0.ɵɵelementEnd()();
|
|
340
324
|
} if (rf & 2) {
|
|
@@ -343,63 +327,61 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_templat
|
|
|
343
327
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
|
|
344
328
|
} }
|
|
345
329
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
346
|
-
i0.ɵɵelementStart(0, "div",
|
|
330
|
+
i0.ɵɵelementStart(0, "div", 88);
|
|
347
331
|
i0.ɵɵelement(1, "i", 58);
|
|
348
332
|
i0.ɵɵtext(2, " Loading models... ");
|
|
349
333
|
i0.ɵɵelementEnd();
|
|
350
334
|
} }
|
|
351
|
-
function
|
|
335
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
352
336
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
353
|
-
i0.ɵɵelementStart(0, "
|
|
354
|
-
i0.ɵɵlistener("click", function
|
|
355
|
-
i0.ɵɵelement(
|
|
356
|
-
i0.ɵɵtext(
|
|
357
|
-
i0.ɵɵelementEnd()
|
|
337
|
+
i0.ɵɵelementStart(0, "button", 95);
|
|
338
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
339
|
+
i0.ɵɵelement(1, "i", 74);
|
|
340
|
+
i0.ɵɵtext(2, " Add Model ");
|
|
341
|
+
i0.ɵɵelementEnd();
|
|
358
342
|
} }
|
|
359
343
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
-
i0.ɵɵelementStart(0, "
|
|
361
|
-
i0.ɵɵ
|
|
362
|
-
i0.ɵɵtext(2, " No models configured ");
|
|
363
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_3_Template, 4, 0, "div", 100);
|
|
344
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 93);
|
|
345
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template, 3, 0, "button", 94);
|
|
364
346
|
i0.ɵɵelementEnd();
|
|
365
347
|
} if (rf & 2) {
|
|
366
348
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
367
|
-
i0.ɵɵadvance(
|
|
368
|
-
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ?
|
|
349
|
+
i0.ɵɵadvance();
|
|
350
|
+
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 1 : -1);
|
|
369
351
|
} }
|
|
370
352
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
371
|
-
i0.ɵɵelementStart(0, "div",
|
|
372
|
-
i0.ɵɵelement(1, "i",
|
|
353
|
+
i0.ɵɵelementStart(0, "div", 96);
|
|
354
|
+
i0.ɵɵelement(1, "i", 101);
|
|
373
355
|
i0.ɵɵtext(2, " Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution. ");
|
|
374
356
|
i0.ɵɵelementEnd();
|
|
375
357
|
} }
|
|
376
358
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
377
|
-
i0.ɵɵelement(0, "i",
|
|
378
|
-
i0.ɵɵelementStart(1, "span",
|
|
359
|
+
i0.ɵɵelement(0, "i", 117);
|
|
360
|
+
i0.ɵɵelementStart(1, "span", 118);
|
|
379
361
|
i0.ɵɵtext(2);
|
|
380
362
|
i0.ɵɵelementEnd();
|
|
381
363
|
} if (rf & 2) {
|
|
382
|
-
const ɵ$
|
|
364
|
+
const ɵ$index_289_r17 = i0.ɵɵnextContext().$index;
|
|
383
365
|
i0.ɵɵadvance(2);
|
|
384
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
366
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_289_r17 + 1);
|
|
385
367
|
} }
|
|
386
368
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
387
|
-
i0.ɵɵelementStart(0, "span",
|
|
369
|
+
i0.ɵɵelementStart(0, "span", 104);
|
|
388
370
|
i0.ɵɵtext(1);
|
|
389
371
|
i0.ɵɵelementEnd();
|
|
390
372
|
} if (rf & 2) {
|
|
391
373
|
const ctx_r17 = i0.ɵɵnextContext();
|
|
392
374
|
const model_r19 = ctx_r17.$implicit;
|
|
393
|
-
const ɵ$
|
|
375
|
+
const ɵ$index_289_r17 = ctx_r17.$index;
|
|
394
376
|
i0.ɵɵproperty("title", i0.ɵɵinterpolate1("Priority ", model_r19.Priority, " - Higher priority numbers are tried first"));
|
|
395
377
|
i0.ɵɵadvance();
|
|
396
|
-
i0.ɵɵtextInterpolate1("#", ɵ$
|
|
378
|
+
i0.ɵɵtextInterpolate1("#", ɵ$index_289_r17 + 1);
|
|
397
379
|
} }
|
|
398
380
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
399
381
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
400
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
382
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 119);
|
|
401
383
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const model_r19 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ModelID, $event) || (model_r19.ModelID = $event); return i0.ɵɵresetView($event); });
|
|
402
|
-
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const ɵ$
|
|
384
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const ɵ$index_289_r17 = i0.ɵɵnextContext().$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onModelChange($event, ɵ$index_289_r17)); });
|
|
403
385
|
i0.ɵɵelementEnd();
|
|
404
386
|
} if (rf & 2) {
|
|
405
387
|
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
@@ -419,7 +401,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
419
401
|
} }
|
|
420
402
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
421
403
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
422
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
404
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 122);
|
|
423
405
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const model_r19 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.VendorID, $event) || (model_r19.VendorID = $event); return i0.ɵɵresetView($event); });
|
|
424
406
|
i0.ɵɵelementEnd();
|
|
425
407
|
} if (rf & 2) {
|
|
@@ -429,7 +411,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
429
411
|
i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.getVendorsForModelSync(model_r19.ModelID))("ValuePrimitive", true)("Filterable", true);
|
|
430
412
|
} }
|
|
431
413
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
432
|
-
i0.ɵɵelementStart(0, "span",
|
|
414
|
+
i0.ɵɵelementStart(0, "span", 125);
|
|
433
415
|
i0.ɵɵtext(1);
|
|
434
416
|
i0.ɵɵelementEnd();
|
|
435
417
|
} if (rf & 2) {
|
|
@@ -439,9 +421,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
439
421
|
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID), ")");
|
|
440
422
|
} }
|
|
441
423
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
442
|
-
i0.ɵɵelementStart(0, "span",
|
|
424
|
+
i0.ɵɵelementStart(0, "span", 124);
|
|
443
425
|
i0.ɵɵtext(1);
|
|
444
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span",
|
|
426
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Conditional_2_Template, 2, 1, "span", 125);
|
|
445
427
|
i0.ɵɵelementEnd();
|
|
446
428
|
} if (rf & 2) {
|
|
447
429
|
const model_r19 = i0.ɵɵnextContext(4).$implicit;
|
|
@@ -453,37 +435,37 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
453
435
|
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID) !== "Active" ? 2 : -1);
|
|
454
436
|
} }
|
|
455
437
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
456
|
-
i0.ɵɵelementStart(0, "span",
|
|
438
|
+
i0.ɵɵelementStart(0, "span", 120);
|
|
457
439
|
i0.ɵɵtext(1, "No vendors available");
|
|
458
440
|
i0.ɵɵelementEnd();
|
|
459
441
|
} }
|
|
460
442
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
461
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span",
|
|
443
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_0_Template, 3, 4, "span", 123)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 120);
|
|
462
444
|
} if (rf & 2) {
|
|
463
445
|
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
464
446
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
465
447
|
i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r19.ModelID).length === 1 ? 0 : 1);
|
|
466
448
|
} }
|
|
467
449
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
468
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 1, 5, "mj-dropdown",
|
|
450
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template, 1, 5, "mj-dropdown", 121)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
|
|
469
451
|
} if (rf & 2) {
|
|
470
452
|
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
471
453
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
472
454
|
i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r19.ModelID) ? 0 : 1);
|
|
473
455
|
} }
|
|
474
456
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
475
|
-
i0.ɵɵelementStart(0, "span",
|
|
457
|
+
i0.ɵɵelementStart(0, "span", 120);
|
|
476
458
|
i0.ɵɵtext(1, "Select model first");
|
|
477
459
|
i0.ɵɵelementEnd();
|
|
478
460
|
} }
|
|
479
461
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
480
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span",
|
|
462
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template, 2, 1)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template, 2, 0, "span", 120);
|
|
481
463
|
} if (rf & 2) {
|
|
482
464
|
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
483
465
|
i0.ɵɵconditional(model_r19.ModelID ? 0 : 1);
|
|
484
466
|
} }
|
|
485
467
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
486
|
-
i0.ɵɵelementStart(0, "span",
|
|
468
|
+
i0.ɵɵelementStart(0, "span", 125);
|
|
487
469
|
i0.ɵɵtext(1);
|
|
488
470
|
i0.ɵɵelementEnd();
|
|
489
471
|
} if (rf & 2) {
|
|
@@ -493,9 +475,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
493
475
|
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID), ")");
|
|
494
476
|
} }
|
|
495
477
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
496
|
-
i0.ɵɵelementStart(0, "span",
|
|
478
|
+
i0.ɵɵelementStart(0, "span", 109);
|
|
497
479
|
i0.ɵɵtext(1);
|
|
498
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span",
|
|
480
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 125);
|
|
499
481
|
i0.ɵɵelementEnd();
|
|
500
482
|
} if (rf & 2) {
|
|
501
483
|
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -507,27 +489,27 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
507
489
|
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID) !== "Active" ? 2 : -1);
|
|
508
490
|
} }
|
|
509
491
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
510
|
-
i0.ɵɵelementStart(0, "span",
|
|
492
|
+
i0.ɵɵelementStart(0, "span", 127);
|
|
511
493
|
i0.ɵɵtext(1, "-");
|
|
512
494
|
i0.ɵɵelementEnd();
|
|
513
495
|
} }
|
|
514
496
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
515
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span",
|
|
497
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 126)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 127);
|
|
516
498
|
} if (rf & 2) {
|
|
517
499
|
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
518
500
|
i0.ɵɵconditional(model_r19.VendorID && model_r19.ModelID ? 0 : 1);
|
|
519
501
|
} }
|
|
520
502
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
521
|
-
i0.ɵɵelementStart(0, "div",
|
|
503
|
+
i0.ɵɵelementStart(0, "div", 128);
|
|
522
504
|
i0.ɵɵelement(1, "i", 58);
|
|
523
505
|
i0.ɵɵtext(2, " Loading... ");
|
|
524
506
|
i0.ɵɵelementEnd();
|
|
525
507
|
} }
|
|
526
508
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
527
509
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
528
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
510
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 130);
|
|
529
511
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const model_r19 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ConfigurationID, $event) || (model_r19.ConfigurationID = $event); return i0.ɵɵresetView($event); });
|
|
530
|
-
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ɵ$
|
|
512
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ɵ$index_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onConfigurationChange($event, ɵ$index_289_r17)); });
|
|
531
513
|
i0.ɵɵelementEnd();
|
|
532
514
|
} if (rf & 2) {
|
|
533
515
|
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -536,13 +518,13 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
536
518
|
i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.availableConfigurations)("ValuePrimitive", true)("Filterable", true);
|
|
537
519
|
} }
|
|
538
520
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
539
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div",
|
|
521
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 128)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 1, 5, "mj-dropdown", 129);
|
|
540
522
|
} if (rf & 2) {
|
|
541
523
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
542
524
|
i0.ɵɵconditional(ctx_r1.isLoadingConfigurations ? 0 : 1);
|
|
543
525
|
} }
|
|
544
526
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
545
|
-
i0.ɵɵelementStart(0, "span",
|
|
527
|
+
i0.ɵɵelementStart(0, "span", 109);
|
|
546
528
|
i0.ɵɵtext(1);
|
|
547
529
|
i0.ɵɵelementEnd();
|
|
548
530
|
} if (rf & 2) {
|
|
@@ -552,7 +534,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
552
534
|
i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r19.ConfigurationID));
|
|
553
535
|
} }
|
|
554
536
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
555
|
-
i0.ɵɵelementStart(0, "span",
|
|
537
|
+
i0.ɵɵelementStart(0, "span", 111);
|
|
556
538
|
i0.ɵɵtext(1);
|
|
557
539
|
i0.ɵɵpipe(2, "date");
|
|
558
540
|
i0.ɵɵelementEnd();
|
|
@@ -562,39 +544,39 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
562
544
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r19.__mj_CreatedAt, "short"));
|
|
563
545
|
} }
|
|
564
546
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
565
|
-
i0.ɵɵelementStart(0, "span",
|
|
547
|
+
i0.ɵɵelementStart(0, "span", 112);
|
|
566
548
|
i0.ɵɵtext(1, "New");
|
|
567
549
|
i0.ɵɵelementEnd();
|
|
568
550
|
} }
|
|
569
551
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
570
552
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
571
|
-
i0.ɵɵelementStart(0, "button",
|
|
572
|
-
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ɵ$
|
|
573
|
-
i0.ɵɵelement(1, "i",
|
|
553
|
+
i0.ɵɵelementStart(0, "button", 133);
|
|
554
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelUp(ɵ$index_289_r17)); });
|
|
555
|
+
i0.ɵɵelement(1, "i", 134);
|
|
574
556
|
i0.ɵɵelementEnd();
|
|
575
|
-
i0.ɵɵelementStart(2, "button",
|
|
576
|
-
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r23); const ɵ$
|
|
577
|
-
i0.ɵɵelement(3, "i",
|
|
557
|
+
i0.ɵɵelementStart(2, "button", 135);
|
|
558
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r23); const ɵ$index_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.moveModelDown(ɵ$index_289_r17)); });
|
|
559
|
+
i0.ɵɵelement(3, "i", 136);
|
|
578
560
|
i0.ɵɵelementEnd();
|
|
579
561
|
} if (rf & 2) {
|
|
580
|
-
const ɵ$
|
|
562
|
+
const ɵ$index_289_r17 = i0.ɵɵnextContext(2).$index;
|
|
581
563
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
582
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
564
|
+
i0.ɵɵproperty("disabled", ɵ$index_289_r17 === 0);
|
|
583
565
|
i0.ɵɵadvance(2);
|
|
584
|
-
i0.ɵɵproperty("disabled", ɵ$
|
|
566
|
+
i0.ɵɵproperty("disabled", ɵ$index_289_r17 === ctx_r1.promptModels.length - 1);
|
|
585
567
|
} }
|
|
586
568
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
587
569
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
588
|
-
i0.ɵɵelementStart(0, "button",
|
|
589
|
-
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$
|
|
590
|
-
i0.ɵɵelement(1, "i",
|
|
570
|
+
i0.ɵɵelementStart(0, "button", 137);
|
|
571
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ɵ$index_289_r17 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.removePromptModel(ɵ$index_289_r17)); });
|
|
572
|
+
i0.ɵɵelement(1, "i", 138);
|
|
591
573
|
i0.ɵɵelementEnd();
|
|
592
574
|
} }
|
|
593
575
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
594
|
-
i0.ɵɵelementStart(0, "div",
|
|
576
|
+
i0.ɵɵelementStart(0, "div", 131);
|
|
595
577
|
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
|
|
596
578
|
i0.ɵɵelementEnd();
|
|
597
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button",
|
|
579
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 132);
|
|
598
580
|
} if (rf & 2) {
|
|
599
581
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
600
582
|
i0.ɵɵadvance();
|
|
@@ -615,42 +597,42 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
615
597
|
} }
|
|
616
598
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
617
599
|
const _r26 = i0.ɵɵgetCurrentView();
|
|
618
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
600
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 143);
|
|
619
601
|
i0.ɵɵtext(2, "Parallel Count");
|
|
620
602
|
i0.ɵɵelementEnd();
|
|
621
|
-
i0.ɵɵelementStart(3, "mj-numeric-input",
|
|
603
|
+
i0.ɵɵelementStart(3, "mj-numeric-input", 145);
|
|
622
604
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template_mj_numeric_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r26); const model_r19 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ParallelCount, $event) || (model_r19.ParallelCount = $event); return i0.ɵɵresetView($event); });
|
|
623
605
|
i0.ɵɵelementEnd()();
|
|
624
606
|
} if (rf & 2) {
|
|
625
607
|
const ctx_r17 = i0.ɵɵnextContext(3);
|
|
626
608
|
const model_r19 = ctx_r17.$implicit;
|
|
627
|
-
const ɵ$
|
|
609
|
+
const ɵ$index_289_r17 = ctx_r17.$index;
|
|
628
610
|
i0.ɵɵadvance(3);
|
|
629
611
|
i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelCount);
|
|
630
|
-
i0.ɵɵproperty("name", "parallelCount_" + ɵ$
|
|
612
|
+
i0.ɵɵproperty("name", "parallelCount_" + ɵ$index_289_r17)("Min", 1)("Step", 1)("Format", "n0");
|
|
631
613
|
} }
|
|
632
614
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
633
615
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
634
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
616
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 143);
|
|
635
617
|
i0.ɵɵtext(2, "Config Parameter");
|
|
636
618
|
i0.ɵɵelementEnd();
|
|
637
|
-
i0.ɵɵelementStart(3, "input",
|
|
619
|
+
i0.ɵɵelementStart(3, "input", 146);
|
|
638
620
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template_input_ngModelChange_3_listener($event) { i0.ɵɵrestoreView(_r27); const model_r19 = i0.ɵɵnextContext(3).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ParallelConfigParam, $event) || (model_r19.ParallelConfigParam = $event); return i0.ɵɵresetView($event); });
|
|
639
621
|
i0.ɵɵelementEnd()();
|
|
640
622
|
} if (rf & 2) {
|
|
641
623
|
const ctx_r17 = i0.ɵɵnextContext(3);
|
|
642
624
|
const model_r19 = ctx_r17.$implicit;
|
|
643
|
-
const ɵ$
|
|
625
|
+
const ɵ$index_289_r17 = ctx_r17.$index;
|
|
644
626
|
i0.ɵɵadvance(3);
|
|
645
627
|
i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelConfigParam);
|
|
646
|
-
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$
|
|
628
|
+
i0.ɵɵproperty("name", "parallelConfigParam_" + ɵ$index_289_r17);
|
|
647
629
|
} }
|
|
648
630
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
649
631
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
650
|
-
i0.ɵɵelementStart(0, "div",
|
|
632
|
+
i0.ɵɵelementStart(0, "div", 141)(1, "div")(2, "label", 143);
|
|
651
633
|
i0.ɵɵtext(3, "Parallel Mode");
|
|
652
634
|
i0.ɵɵelementEnd();
|
|
653
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
635
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 144);
|
|
654
636
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r25); const model_r19 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(model_r19.ParallelizationMode, $event) || (model_r19.ParallelizationMode = $event); return i0.ɵɵresetView($event); });
|
|
655
637
|
i0.ɵɵelementEnd()();
|
|
656
638
|
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div");
|
|
@@ -659,10 +641,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
659
641
|
} if (rf & 2) {
|
|
660
642
|
const ctx_r17 = i0.ɵɵnextContext(2);
|
|
661
643
|
const model_r19 = ctx_r17.$implicit;
|
|
662
|
-
const ɵ$
|
|
644
|
+
const ɵ$index_289_r17 = ctx_r17.$index;
|
|
663
645
|
i0.ɵɵadvance(4);
|
|
664
646
|
i0.ɵɵtwoWayProperty("ngModel", model_r19.ParallelizationMode);
|
|
665
|
-
i0.ɵɵproperty("name", "parallelMode_" + ɵ$
|
|
647
|
+
i0.ɵɵproperty("name", "parallelMode_" + ɵ$index_289_r17)("Data", i0.ɵɵpureFunction3(9, _c4, i0.ɵɵpureFunction0(6, _c5), i0.ɵɵpureFunction0(7, _c6), i0.ɵɵpureFunction0(8, _c7)))("ValuePrimitive", true);
|
|
666
648
|
i0.ɵɵadvance();
|
|
667
649
|
i0.ɵɵconditional(model_r19.ParallelizationMode === "StaticCount" ? 5 : -1);
|
|
668
650
|
i0.ɵɵadvance();
|
|
@@ -702,7 +684,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
702
684
|
i0.ɵɵtextInterpolate1(" ", model_r19.ParallelConfigParam);
|
|
703
685
|
} }
|
|
704
686
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
705
|
-
i0.ɵɵelementStart(0, "div",
|
|
687
|
+
i0.ɵɵelementStart(0, "div", 142);
|
|
706
688
|
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span");
|
|
707
689
|
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span");
|
|
708
690
|
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
|
|
@@ -717,11 +699,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
717
699
|
i0.ɵɵconditional(model_r19.ParallelConfigParam ? 3 : -1);
|
|
718
700
|
} }
|
|
719
701
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
720
|
-
i0.ɵɵelementStart(0, "div",
|
|
721
|
-
i0.ɵɵelement(2, "i",
|
|
702
|
+
i0.ɵɵelementStart(0, "div", 116)(1, "div", 139);
|
|
703
|
+
i0.ɵɵelement(2, "i", 140);
|
|
722
704
|
i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
|
|
723
705
|
i0.ɵɵelementEnd();
|
|
724
|
-
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div",
|
|
706
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 141)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 142);
|
|
725
707
|
i0.ɵɵelementEnd();
|
|
726
708
|
} if (rf & 2) {
|
|
727
709
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
@@ -730,38 +712,38 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
730
712
|
} }
|
|
731
713
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
732
714
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
733
|
-
i0.ɵɵelementStart(0, "div",
|
|
734
|
-
i0.ɵɵlistener("dragstart", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$
|
|
735
|
-
i0.ɵɵelementStart(1, "div",
|
|
736
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span",
|
|
715
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
716
|
+
i0.ɵɵlistener("dragstart", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragstart_0_listener($event) { const ɵ$index_289_r17 = i0.ɵɵrestoreView(_r16).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragStart($event, ɵ$index_289_r17)); })("dragover", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragover_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragOver($event)); })("drop", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_drop_0_listener($event) { const ɵ$index_289_r17 = i0.ɵɵrestoreView(_r16).$index; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDrop($event, ɵ$index_289_r17)); })("dragend", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template_div_dragend_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onDragEnd($event)); });
|
|
717
|
+
i0.ɵɵelementStart(1, "div", 103);
|
|
718
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template, 3, 1)(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template, 2, 3, "span", 104);
|
|
737
719
|
i0.ɵɵelementEnd();
|
|
738
|
-
i0.ɵɵelementStart(4, "div",
|
|
739
|
-
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown",
|
|
720
|
+
i0.ɵɵelementStart(4, "div", 105);
|
|
721
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown", 106)(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 22);
|
|
740
722
|
i0.ɵɵelementEnd();
|
|
741
|
-
i0.ɵɵelementStart(7, "div",
|
|
723
|
+
i0.ɵɵelementStart(7, "div", 107);
|
|
742
724
|
i0.ɵɵconditionalCreate(8, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template, 2, 1)(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template, 2, 1);
|
|
743
725
|
i0.ɵɵelementEnd();
|
|
744
|
-
i0.ɵɵelementStart(10, "div",
|
|
745
|
-
i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span",
|
|
726
|
+
i0.ɵɵelementStart(10, "div", 108);
|
|
727
|
+
i0.ɵɵconditionalCreate(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template, 2, 1)(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template, 2, 1, "span", 109);
|
|
746
728
|
i0.ɵɵelementEnd();
|
|
747
|
-
i0.ɵɵelementStart(13, "div",
|
|
748
|
-
i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span",
|
|
729
|
+
i0.ɵɵelementStart(13, "div", 110);
|
|
730
|
+
i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 111)(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 112);
|
|
749
731
|
i0.ɵɵelementEnd();
|
|
750
|
-
i0.ɵɵelementStart(16, "div",
|
|
732
|
+
i0.ɵɵelementStart(16, "div", 113);
|
|
751
733
|
i0.ɵɵconditionalCreate(17, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
|
|
752
734
|
i0.ɵɵelementEnd()();
|
|
753
|
-
i0.ɵɵelementStart(18, "div",
|
|
735
|
+
i0.ɵɵelementStart(18, "div", 114);
|
|
754
736
|
i0.ɵɵelement(19, "div");
|
|
755
|
-
i0.ɵɵelementStart(20, "div")(21, "div",
|
|
737
|
+
i0.ɵɵelementStart(20, "div")(21, "div", 115);
|
|
756
738
|
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
|
|
757
739
|
i0.ɵɵelementEnd();
|
|
758
|
-
i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div",
|
|
740
|
+
i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 116);
|
|
759
741
|
i0.ɵɵelementEnd()();
|
|
760
742
|
} if (rf & 2) {
|
|
761
743
|
const model_r19 = ctx.$implicit;
|
|
762
|
-
const ɵ$
|
|
744
|
+
const ɵ$index_289_r17 = ctx.$index;
|
|
763
745
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
764
|
-
i0.ɵɵstyleProp("background", !model_r19.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$
|
|
746
|
+
i0.ɵɵstyleProp("background", !model_r19.ModelID ? "#fff3cd" : ctx_r1.draggedIndex === ɵ$index_289_r17 ? "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))" : "var(--mj-bg-surface-card)")("border-left", !model_r19.ModelID ? "3px solid #ffc107" : "none")("opacity", ctx_r1.draggedIndex === ɵ$index_289_r17 ? "0.5" : "1");
|
|
765
747
|
i0.ɵɵproperty("draggable", ctx_r1.EditMode);
|
|
766
748
|
i0.ɵɵadvance(2);
|
|
767
749
|
i0.ɵɵconditional(ctx_r1.EditMode ? 2 : 3);
|
|
@@ -782,16 +764,16 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
782
764
|
} }
|
|
783
765
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
784
766
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
785
|
-
i0.ɵɵelementStart(0, "div",
|
|
767
|
+
i0.ɵɵelementStart(0, "div", 100)(1, "button", 147);
|
|
786
768
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addNewModel()); });
|
|
787
|
-
i0.ɵɵelement(2, "i",
|
|
769
|
+
i0.ɵɵelement(2, "i", 74);
|
|
788
770
|
i0.ɵɵtext(3, " Add Model ");
|
|
789
771
|
i0.ɵɵelementEnd()();
|
|
790
772
|
} }
|
|
791
773
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div",
|
|
793
|
-
i0.ɵɵelementStart(1, "div",
|
|
794
|
-
i0.ɵɵelement(3, "i",
|
|
774
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 96);
|
|
775
|
+
i0.ɵɵelementStart(1, "div", 97)(2, "div", 98);
|
|
776
|
+
i0.ɵɵelement(3, "i", 99);
|
|
795
777
|
i0.ɵɵelementEnd();
|
|
796
778
|
i0.ɵɵelementStart(4, "div");
|
|
797
779
|
i0.ɵɵtext(5, "AI Model ");
|
|
@@ -811,7 +793,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
811
793
|
i0.ɵɵtext(15, "Actions");
|
|
812
794
|
i0.ɵɵelementEnd()();
|
|
813
795
|
i0.ɵɵrepeaterCreate(16, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
|
|
814
|
-
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div",
|
|
796
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 100);
|
|
815
797
|
} if (rf & 2) {
|
|
816
798
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
817
799
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
|
|
@@ -821,7 +803,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
821
803
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 18 : -1);
|
|
822
804
|
} }
|
|
823
805
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
824
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template,
|
|
806
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template, 2, 1, "mj-empty-state", 93)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template, 19, 2);
|
|
825
807
|
} if (rf & 2) {
|
|
826
808
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
827
809
|
i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
|
|
@@ -829,8 +811,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
829
811
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
830
812
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
831
813
|
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 29);
|
|
832
|
-
i0.ɵɵelementStart(2, "div", 35)(3, "div",
|
|
833
|
-
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 3, 0, "div",
|
|
814
|
+
i0.ɵɵelementStart(2, "div", 35)(3, "div", 87);
|
|
815
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 3, 0, "div", 88)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template, 2, 1);
|
|
834
816
|
i0.ɵɵelementEnd()()();
|
|
835
817
|
} if (rf & 2) {
|
|
836
818
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -840,7 +822,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(r
|
|
|
840
822
|
} }
|
|
841
823
|
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_44_Template(rf, ctx) { if (rf & 1) {
|
|
842
824
|
i0.ɵɵelementStart(0, "span", 67);
|
|
843
|
-
i0.ɵɵelement(1, "i",
|
|
825
|
+
i0.ɵɵelement(1, "i", 148);
|
|
844
826
|
i0.ɵɵtext(2, " Advanced Configuration ");
|
|
845
827
|
i0.ɵɵelementEnd();
|
|
846
828
|
} }
|
|
@@ -857,14 +839,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_50_Template(r
|
|
|
857
839
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
858
840
|
} }
|
|
859
841
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
860
|
-
i0.ɵɵelementStart(0, "div",
|
|
842
|
+
i0.ɵɵelementStart(0, "div", 149);
|
|
861
843
|
i0.ɵɵelement(1, "i", 58);
|
|
862
844
|
i0.ɵɵtext(2, " Loading prompts... ");
|
|
863
845
|
i0.ɵɵelementEnd();
|
|
864
846
|
} }
|
|
865
847
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
866
848
|
const _r29 = i0.ɵɵgetCurrentView();
|
|
867
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
849
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 151);
|
|
868
850
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.ResultSelectorPromptID, $event) || (ctx_r1.record.ResultSelectorPromptID = $event); return i0.ɵɵresetView($event); });
|
|
869
851
|
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template_mj_dropdown_ValueChange_0_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onResultSelectorChange($event)); });
|
|
870
852
|
i0.ɵɵelementEnd();
|
|
@@ -874,7 +856,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditiona
|
|
|
874
856
|
i0.ɵɵproperty("Data", ctx_r1.resultSelectorTreeData)("ValuePrimitive", true)("Filterable", true);
|
|
875
857
|
} }
|
|
876
858
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
877
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_0_Template, 3, 0, "div",
|
|
859
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_0_Template, 3, 0, "div", 149)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_59_Conditional_1_Template, 1, 4, "mj-dropdown", 150);
|
|
878
860
|
} if (rf & 2) {
|
|
879
861
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
880
862
|
i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
|
|
@@ -890,55 +872,52 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template(r
|
|
|
890
872
|
} }
|
|
891
873
|
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_62_Template(rf, ctx) { if (rf & 1) {
|
|
892
874
|
i0.ɵɵelementStart(0, "span", 67);
|
|
893
|
-
i0.ɵɵelement(1, "i",
|
|
875
|
+
i0.ɵɵelement(1, "i", 152);
|
|
894
876
|
i0.ɵɵtext(2, " Prefill & Output Control ");
|
|
895
877
|
i0.ɵɵelementEnd();
|
|
896
878
|
} }
|
|
897
879
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
898
880
|
i0.ɵɵelementStart(0, "span", 67);
|
|
899
|
-
i0.ɵɵelement(1, "i",
|
|
881
|
+
i0.ɵɵelement(1, "i", 154);
|
|
900
882
|
i0.ɵɵtext(2, " Template Parameters ");
|
|
901
|
-
i0.ɵɵelementStart(3, "span",
|
|
883
|
+
i0.ɵɵelementStart(3, "span", 90);
|
|
902
884
|
i0.ɵɵtext(4);
|
|
903
885
|
i0.ɵɵelementEnd();
|
|
904
|
-
i0.ɵɵelementStart(5, "span",
|
|
905
|
-
i0.ɵɵelement(6, "i",
|
|
886
|
+
i0.ɵɵelementStart(5, "span", 91);
|
|
887
|
+
i0.ɵɵelement(6, "i", 155);
|
|
906
888
|
i0.ɵɵtext(7, " Parameters defined in the template ");
|
|
907
889
|
i0.ɵɵelementEnd()();
|
|
908
890
|
} if (rf & 2) {
|
|
909
891
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
910
892
|
i0.ɵɵadvance(4);
|
|
911
|
-
i0.ɵɵ
|
|
893
|
+
i0.ɵɵtextInterpolate(ctx_r1.templateParams.length);
|
|
912
894
|
} }
|
|
913
895
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
914
|
-
i0.ɵɵelementStart(0, "div",
|
|
896
|
+
i0.ɵɵelementStart(0, "div", 88);
|
|
915
897
|
i0.ɵɵelement(1, "i", 58);
|
|
916
898
|
i0.ɵɵtext(2, " Loading template parameters... ");
|
|
917
899
|
i0.ɵɵelementEnd();
|
|
918
900
|
} }
|
|
919
901
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
920
|
-
i0.ɵɵ
|
|
921
|
-
i0.ɵɵelement(1, "i", 99);
|
|
922
|
-
i0.ɵɵtext(2, " This template has no parameters defined ");
|
|
923
|
-
i0.ɵɵelementEnd();
|
|
902
|
+
i0.ɵɵelement(0, "mj-empty-state", 153);
|
|
924
903
|
} }
|
|
925
904
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
926
|
-
i0.ɵɵelementStart(0, "span",
|
|
905
|
+
i0.ɵɵelementStart(0, "span", 167);
|
|
927
906
|
i0.ɵɵtext(1, "*");
|
|
928
907
|
i0.ɵɵelementEnd();
|
|
929
908
|
} }
|
|
930
909
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
931
|
-
i0.ɵɵelementStart(0, "span",
|
|
910
|
+
i0.ɵɵelementStart(0, "span", 169);
|
|
932
911
|
i0.ɵɵtext(1, "Required");
|
|
933
912
|
i0.ɵɵelementEnd();
|
|
934
913
|
} }
|
|
935
914
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
936
|
-
i0.ɵɵelementStart(0, "span",
|
|
915
|
+
i0.ɵɵelementStart(0, "span", 170);
|
|
937
916
|
i0.ɵɵtext(1, "Optional");
|
|
938
917
|
i0.ɵɵelementEnd();
|
|
939
918
|
} }
|
|
940
919
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
941
|
-
i0.ɵɵelementStart(0, "p",
|
|
920
|
+
i0.ɵɵelementStart(0, "p", 171);
|
|
942
921
|
i0.ɵɵtext(1);
|
|
943
922
|
i0.ɵɵelementEnd();
|
|
944
923
|
} if (rf & 2) {
|
|
@@ -947,10 +926,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
947
926
|
i0.ɵɵtextInterpolate1(" ", param_r30.Description, " ");
|
|
948
927
|
} }
|
|
949
928
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
950
|
-
i0.ɵɵelementStart(0, "div",
|
|
929
|
+
i0.ɵɵelementStart(0, "div", 176)(1, "label", 177);
|
|
951
930
|
i0.ɵɵtext(2, "Default Value");
|
|
952
931
|
i0.ɵɵelementEnd();
|
|
953
|
-
i0.ɵɵelementStart(3, "code",
|
|
932
|
+
i0.ɵɵelementStart(3, "code", 178);
|
|
954
933
|
i0.ɵɵtext(4);
|
|
955
934
|
i0.ɵɵelementEnd()();
|
|
956
935
|
} if (rf & 2) {
|
|
@@ -959,10 +938,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
959
938
|
i0.ɵɵtextInterpolate(param_r30.DefaultValue);
|
|
960
939
|
} }
|
|
961
940
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
962
|
-
i0.ɵɵelementStart(0, "div",
|
|
941
|
+
i0.ɵɵelementStart(0, "div", 176)(1, "label", 177);
|
|
963
942
|
i0.ɵɵtext(2, "Entity");
|
|
964
943
|
i0.ɵɵelementEnd();
|
|
965
|
-
i0.ɵɵelementStart(3, "span",
|
|
944
|
+
i0.ɵɵelementStart(3, "span", 172);
|
|
966
945
|
i0.ɵɵtext(4);
|
|
967
946
|
i0.ɵɵelementEnd()();
|
|
968
947
|
} if (rf & 2) {
|
|
@@ -977,10 +956,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
977
956
|
i0.ɵɵtextInterpolate1(" (", param_r30.LinkedParameterField, ") ");
|
|
978
957
|
} }
|
|
979
958
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
980
|
-
i0.ɵɵelementStart(0, "div",
|
|
959
|
+
i0.ɵɵelementStart(0, "div", 176)(1, "label", 177);
|
|
981
960
|
i0.ɵɵtext(2, "Linked To");
|
|
982
961
|
i0.ɵɵelementEnd();
|
|
983
|
-
i0.ɵɵelementStart(3, "span",
|
|
962
|
+
i0.ɵɵelementStart(3, "span", 172);
|
|
984
963
|
i0.ɵɵtext(4);
|
|
985
964
|
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
|
|
986
965
|
i0.ɵɵelementEnd()();
|
|
@@ -992,10 +971,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
992
971
|
i0.ɵɵconditional(param_r30.LinkedParameterField ? 5 : -1);
|
|
993
972
|
} }
|
|
994
973
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
995
|
-
i0.ɵɵelementStart(0, "div",
|
|
974
|
+
i0.ɵɵelementStart(0, "div", 176)(1, "label", 177);
|
|
996
975
|
i0.ɵɵtext(2, "Filter");
|
|
997
976
|
i0.ɵɵelementEnd();
|
|
998
|
-
i0.ɵɵelementStart(3, "code",
|
|
977
|
+
i0.ɵɵelementStart(3, "code", 179);
|
|
999
978
|
i0.ɵɵtext(4);
|
|
1000
979
|
i0.ɵɵelementEnd()();
|
|
1001
980
|
} if (rf & 2) {
|
|
@@ -1004,10 +983,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
1004
983
|
i0.ɵɵtextInterpolate(param_r30.ExtraFilter);
|
|
1005
984
|
} }
|
|
1006
985
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
1007
|
-
i0.ɵɵelementStart(0, "div",
|
|
986
|
+
i0.ɵɵelementStart(0, "div", 176)(1, "label", 177);
|
|
1008
987
|
i0.ɵɵtext(2, "Record ID");
|
|
1009
988
|
i0.ɵɵelementEnd();
|
|
1010
|
-
i0.ɵɵelementStart(3, "code",
|
|
989
|
+
i0.ɵɵelementStart(3, "code", 172);
|
|
1011
990
|
i0.ɵɵtext(4);
|
|
1012
991
|
i0.ɵɵelementEnd()();
|
|
1013
992
|
} if (rf & 2) {
|
|
@@ -1016,28 +995,28 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
1016
995
|
i0.ɵɵtextInterpolate(param_r30.RecordID);
|
|
1017
996
|
} }
|
|
1018
997
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1019
|
-
i0.ɵɵelementStart(0, "div",
|
|
1020
|
-
i0.ɵɵelement(3, "i",
|
|
1021
|
-
i0.ɵɵelementStart(4, "h6",
|
|
998
|
+
i0.ɵɵelementStart(0, "div", 162)(1, "div", 163)(2, "div", 164);
|
|
999
|
+
i0.ɵɵelement(3, "i", 165);
|
|
1000
|
+
i0.ɵɵelementStart(4, "h6", 166);
|
|
1022
1001
|
i0.ɵɵtext(5);
|
|
1023
|
-
i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span",
|
|
1002
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 167);
|
|
1024
1003
|
i0.ɵɵelementEnd()();
|
|
1025
|
-
i0.ɵɵelementStart(7, "div",
|
|
1004
|
+
i0.ɵɵelementStart(7, "div", 164)(8, "span", 168);
|
|
1026
1005
|
i0.ɵɵtext(9);
|
|
1027
1006
|
i0.ɵɵelementEnd();
|
|
1028
|
-
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span",
|
|
1007
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 169)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 170);
|
|
1029
1008
|
i0.ɵɵelementEnd()();
|
|
1030
|
-
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p",
|
|
1031
|
-
i0.ɵɵelementStart(13, "div",
|
|
1032
|
-
i0.ɵɵelement(15, "i",
|
|
1009
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 171);
|
|
1010
|
+
i0.ɵɵelementStart(13, "div", 172)(14, "span", 173);
|
|
1011
|
+
i0.ɵɵelement(15, "i", 174);
|
|
1033
1012
|
i0.ɵɵtext(16);
|
|
1034
1013
|
i0.ɵɵelementEnd()();
|
|
1035
|
-
i0.ɵɵelementStart(17, "div",
|
|
1036
|
-
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div",
|
|
1037
|
-
i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div",
|
|
1038
|
-
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div",
|
|
1039
|
-
i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div",
|
|
1040
|
-
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div",
|
|
1014
|
+
i0.ɵɵelementStart(17, "div", 175);
|
|
1015
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 176);
|
|
1016
|
+
i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 176);
|
|
1017
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 176);
|
|
1018
|
+
i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 176);
|
|
1019
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 176);
|
|
1041
1020
|
i0.ɵɵelementEnd()();
|
|
1042
1021
|
} if (rf & 2) {
|
|
1043
1022
|
const param_r30 = ctx.$implicit;
|
|
@@ -1072,12 +1051,12 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
1072
1051
|
i0.ɵɵconditional(param_r30.RecordID ? 22 : -1);
|
|
1073
1052
|
} }
|
|
1074
1053
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1075
|
-
i0.ɵɵelementStart(0, "div",
|
|
1076
|
-
i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Template, 23, 19, "div",
|
|
1054
|
+
i0.ɵɵelementStart(0, "div", 156);
|
|
1055
|
+
i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_For_2_Template, 23, 19, "div", 157, _forTrack1);
|
|
1077
1056
|
i0.ɵɵelementEnd();
|
|
1078
|
-
i0.ɵɵelementStart(3, "div",
|
|
1079
|
-
i0.ɵɵelement(5, "i",
|
|
1080
|
-
i0.ɵɵelementStart(6, "div",
|
|
1057
|
+
i0.ɵɵelementStart(3, "div", 158)(4, "div", 159);
|
|
1058
|
+
i0.ɵɵelement(5, "i", 160);
|
|
1059
|
+
i0.ɵɵelementStart(6, "div", 161)(7, "strong");
|
|
1081
1060
|
i0.ɵɵtext(8, "Using Template Parameters:");
|
|
1082
1061
|
i0.ɵɵelementEnd();
|
|
1083
1062
|
i0.ɵɵtext(9, " When executing this prompt, you'll be prompted to provide values for all required parameters. Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections). The template will use these parameters to generate dynamic content based on the values provided at execution time. ");
|
|
@@ -1091,7 +1070,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Template(r
|
|
|
1091
1070
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1092
1071
|
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_ng_template_1_Template, 8, 1, "ng-template", 29);
|
|
1093
1072
|
i0.ɵɵelementStart(2, "div", 35);
|
|
1094
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_3_Template, 3, 0, "div",
|
|
1073
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_3_Template, 3, 0, "div", 88)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_4_Template, 1, 0, "mj-empty-state", 153)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditional_5_Template, 10, 0);
|
|
1095
1074
|
i0.ɵɵelementEnd()();
|
|
1096
1075
|
} if (rf & 2) {
|
|
1097
1076
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1103,17 +1082,17 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_templat
|
|
|
1103
1082
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1104
1083
|
i0.ɵɵelement(1, "i", 21);
|
|
1105
1084
|
i0.ɵɵtext(2, " Output Example (JSON) ");
|
|
1106
|
-
i0.ɵɵelementStart(3, "span",
|
|
1085
|
+
i0.ɵɵelementStart(3, "span", 183);
|
|
1107
1086
|
i0.ɵɵtext(4, "\u2022 Required for object output type");
|
|
1108
1087
|
i0.ɵɵelementEnd()();
|
|
1109
1088
|
} }
|
|
1110
1089
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1111
1090
|
const _r31 = i0.ɵɵgetCurrentView();
|
|
1112
|
-
i0.ɵɵelementStart(0, "mj-code-editor",
|
|
1091
|
+
i0.ɵɵelementStart(0, "mj-code-editor", 184);
|
|
1113
1092
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r31); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.OutputExample, $event) || (ctx_r1.record.OutputExample = $event); return i0.ɵɵresetView($event); });
|
|
1114
1093
|
i0.ɵɵelementEnd();
|
|
1115
|
-
i0.ɵɵelementStart(1, "div",
|
|
1116
|
-
i0.ɵɵelement(2, "i",
|
|
1094
|
+
i0.ɵɵelementStart(1, "div", 185);
|
|
1095
|
+
i0.ɵɵelement(2, "i", 186);
|
|
1117
1096
|
i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
|
|
1118
1097
|
i0.ɵɵelementEnd();
|
|
1119
1098
|
} if (rf & 2) {
|
|
@@ -1121,7 +1100,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditiona
|
|
|
1121
1100
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
|
|
1122
1101
|
} }
|
|
1123
1102
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1124
|
-
i0.ɵɵelementStart(0, "div",
|
|
1103
|
+
i0.ɵɵelementStart(0, "div", 181);
|
|
1125
1104
|
i0.ɵɵtext(1);
|
|
1126
1105
|
i0.ɵɵelementEnd();
|
|
1127
1106
|
} if (rf & 2) {
|
|
@@ -1130,16 +1109,15 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditiona
|
|
|
1130
1109
|
i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
|
|
1131
1110
|
} }
|
|
1132
1111
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1133
|
-
i0.ɵɵelementStart(0, "
|
|
1134
|
-
i0.ɵɵ
|
|
1135
|
-
i0.ɵɵtext(2, " Output example is required when output type is 'object' ");
|
|
1112
|
+
i0.ɵɵelementStart(0, "mj-alert", 182);
|
|
1113
|
+
i0.ɵɵtext(1, "Output example is required when output type is 'object'");
|
|
1136
1114
|
i0.ɵɵelementEnd();
|
|
1137
1115
|
} }
|
|
1138
1116
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(rf, ctx) { if (rf & 1) {
|
|
1139
1117
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1140
1118
|
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_template_1_Template, 5, 0, "ng-template", 29);
|
|
1141
|
-
i0.ɵɵelementStart(2, "div",
|
|
1142
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template, 2, 1, "div",
|
|
1119
|
+
i0.ɵɵelementStart(2, "div", 180);
|
|
1120
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template, 2, 1, "div", 181)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template, 2, 0, "mj-alert", 182);
|
|
1143
1121
|
i0.ɵɵelementEnd()();
|
|
1144
1122
|
} if (rf & 2) {
|
|
1145
1123
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1148,7 +1126,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(r
|
|
|
1148
1126
|
i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
|
|
1149
1127
|
} }
|
|
1150
1128
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1151
|
-
i0.ɵɵelementStart(0, "span",
|
|
1129
|
+
i0.ɵɵelementStart(0, "span", 190);
|
|
1152
1130
|
i0.ɵɵtext(1);
|
|
1153
1131
|
i0.ɵɵelementEnd();
|
|
1154
1132
|
} if (rf & 2) {
|
|
@@ -1158,9 +1136,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_templat
|
|
|
1158
1136
|
} }
|
|
1159
1137
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1160
1138
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1161
|
-
i0.ɵɵelement(1, "i",
|
|
1139
|
+
i0.ɵɵelement(1, "i", 189);
|
|
1162
1140
|
i0.ɵɵtext(2, " Execution History ");
|
|
1163
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
1141
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Conditional_3_Template, 2, 1, "span", 190);
|
|
1164
1142
|
i0.ɵɵelementEnd();
|
|
1165
1143
|
} if (rf & 2) {
|
|
1166
1144
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1168,48 +1146,41 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_templat
|
|
|
1168
1146
|
i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
|
|
1169
1147
|
} }
|
|
1170
1148
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1171
|
-
i0.ɵɵelementStart(0, "div",
|
|
1172
|
-
i0.ɵɵelement(1, "i",
|
|
1149
|
+
i0.ɵɵelementStart(0, "div", 187);
|
|
1150
|
+
i0.ɵɵelement(1, "i", 191);
|
|
1173
1151
|
i0.ɵɵelementStart(2, "p");
|
|
1174
1152
|
i0.ɵɵtext(3, "Loading execution history...");
|
|
1175
1153
|
i0.ɵɵelementEnd()();
|
|
1176
1154
|
} }
|
|
1177
1155
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1178
|
-
i0.ɵɵ
|
|
1179
|
-
i0.ɵɵelement(1, "i", 197);
|
|
1180
|
-
i0.ɵɵelementStart(2, "p");
|
|
1181
|
-
i0.ɵɵtext(3, "No execution history yet");
|
|
1182
|
-
i0.ɵɵelementEnd();
|
|
1183
|
-
i0.ɵɵelementStart(4, "p", 115);
|
|
1184
|
-
i0.ɵɵtext(5, "Run this prompt to see execution history here");
|
|
1185
|
-
i0.ɵɵelementEnd()();
|
|
1156
|
+
i0.ɵɵelement(0, "mj-empty-state", 188);
|
|
1186
1157
|
} }
|
|
1187
1158
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1188
|
-
i0.ɵɵelement(0, "i",
|
|
1159
|
+
i0.ɵɵelement(0, "i", 204);
|
|
1189
1160
|
} if (rf & 2) {
|
|
1190
1161
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1191
1162
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1192
1163
|
} }
|
|
1193
1164
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1194
|
-
i0.ɵɵelement(0, "i",
|
|
1165
|
+
i0.ɵɵelement(0, "i", 204);
|
|
1195
1166
|
} if (rf & 2) {
|
|
1196
1167
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1197
1168
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1198
1169
|
} }
|
|
1199
1170
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1200
|
-
i0.ɵɵelement(0, "i",
|
|
1171
|
+
i0.ɵɵelement(0, "i", 204);
|
|
1201
1172
|
} if (rf & 2) {
|
|
1202
1173
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1203
1174
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1204
1175
|
} }
|
|
1205
1176
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1206
|
-
i0.ɵɵelement(0, "i",
|
|
1177
|
+
i0.ɵɵelement(0, "i", 204);
|
|
1207
1178
|
} if (rf & 2) {
|
|
1208
1179
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1209
1180
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1210
1181
|
} }
|
|
1211
1182
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1212
|
-
i0.ɵɵelementStart(0, "span",
|
|
1183
|
+
i0.ɵɵelementStart(0, "span", 211);
|
|
1213
1184
|
i0.ɵɵtext(1);
|
|
1214
1185
|
i0.ɵɵelementEnd();
|
|
1215
1186
|
} if (rf & 2) {
|
|
@@ -1219,40 +1190,40 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
|
|
|
1219
1190
|
} }
|
|
1220
1191
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
|
|
1221
1192
|
const _r33 = i0.ɵɵgetCurrentView();
|
|
1222
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1193
|
+
i0.ɵɵelementStart(0, "tr", 205)(1, "td", 206)(2, "span", 207);
|
|
1223
1194
|
i0.ɵɵelement(3, "i");
|
|
1224
1195
|
i0.ɵɵelementStart(4, "span", 22);
|
|
1225
1196
|
i0.ɵɵtext(5);
|
|
1226
1197
|
i0.ɵɵelementEnd()()();
|
|
1227
|
-
i0.ɵɵelementStart(6, "td",
|
|
1198
|
+
i0.ɵɵelementStart(6, "td", 208);
|
|
1228
1199
|
i0.ɵɵtext(7);
|
|
1229
1200
|
i0.ɵɵpipe(8, "date");
|
|
1230
1201
|
i0.ɵɵelementEnd();
|
|
1231
|
-
i0.ɵɵelementStart(9, "td",
|
|
1232
|
-
i0.ɵɵelement(11, "i",
|
|
1202
|
+
i0.ɵɵelementStart(9, "td", 208)(10, "span", 207);
|
|
1203
|
+
i0.ɵɵelement(11, "i", 89);
|
|
1233
1204
|
i0.ɵɵtext(12);
|
|
1234
1205
|
i0.ɵɵelementEnd()();
|
|
1235
|
-
i0.ɵɵelementStart(13, "td",
|
|
1206
|
+
i0.ɵɵelementStart(13, "td", 208);
|
|
1236
1207
|
i0.ɵɵtext(14);
|
|
1237
1208
|
i0.ɵɵelementEnd();
|
|
1238
|
-
i0.ɵɵelementStart(15, "td",
|
|
1209
|
+
i0.ɵɵelementStart(15, "td", 209);
|
|
1239
1210
|
i0.ɵɵtext(16);
|
|
1240
1211
|
i0.ɵɵelementEnd();
|
|
1241
|
-
i0.ɵɵelementStart(17, "td",
|
|
1212
|
+
i0.ɵɵelementStart(17, "td", 209);
|
|
1242
1213
|
i0.ɵɵtext(18);
|
|
1243
1214
|
i0.ɵɵelementEnd();
|
|
1244
|
-
i0.ɵɵelementStart(19, "td",
|
|
1245
|
-
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span",
|
|
1215
|
+
i0.ɵɵelementStart(19, "td", 210);
|
|
1216
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 211);
|
|
1246
1217
|
i0.ɵɵelementEnd();
|
|
1247
|
-
i0.ɵɵelementStart(21, "td",
|
|
1218
|
+
i0.ɵɵelementStart(21, "td", 210)(22, "button", 212);
|
|
1248
1219
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Template_button_click_22_listener() { const run_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.navigateToPromptRun(run_r34.ID)); });
|
|
1249
|
-
i0.ɵɵelement(23, "i",
|
|
1220
|
+
i0.ɵɵelement(23, "i", 213);
|
|
1250
1221
|
i0.ɵɵelementEnd()()();
|
|
1251
1222
|
} if (rf & 2) {
|
|
1252
1223
|
const run_r34 = ctx.$implicit;
|
|
1253
|
-
const ɵ$
|
|
1224
|
+
const ɵ$index_817_r35 = ctx.$index;
|
|
1254
1225
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1255
|
-
i0.ɵɵclassProp("even-row", ɵ$
|
|
1226
|
+
i0.ɵɵclassProp("even-row", ɵ$index_817_r35 % 2 === 0);
|
|
1256
1227
|
i0.ɵɵadvance(3);
|
|
1257
1228
|
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r34.Success));
|
|
1258
1229
|
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
|
|
@@ -1275,58 +1246,58 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
|
|
|
1275
1246
|
} }
|
|
1276
1247
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1277
1248
|
const _r32 = i0.ɵɵgetCurrentView();
|
|
1278
|
-
i0.ɵɵelementStart(0, "div",
|
|
1249
|
+
i0.ɵɵelementStart(0, "div", 192)(1, "div", 127);
|
|
1279
1250
|
i0.ɵɵtext(2);
|
|
1280
1251
|
i0.ɵɵelementEnd();
|
|
1281
|
-
i0.ɵɵelementStart(3, "div",
|
|
1252
|
+
i0.ɵɵelementStart(3, "div", 193)(4, "span", 170);
|
|
1282
1253
|
i0.ɵɵtext(5, "Sort by:");
|
|
1283
1254
|
i0.ɵɵelementEnd();
|
|
1284
|
-
i0.ɵɵelementStart(6, "div",
|
|
1255
|
+
i0.ɵɵelementStart(6, "div", 194)(7, "button", 195);
|
|
1285
1256
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
|
|
1286
1257
|
i0.ɵɵtext(8, " Date ");
|
|
1287
|
-
i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_9_Template, 1, 2, "i",
|
|
1258
|
+
i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_9_Template, 1, 2, "i", 196);
|
|
1288
1259
|
i0.ɵɵelementEnd();
|
|
1289
|
-
i0.ɵɵelementStart(10, "button",
|
|
1260
|
+
i0.ɵɵelementStart(10, "button", 195);
|
|
1290
1261
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
|
|
1291
1262
|
i0.ɵɵtext(11, " Duration ");
|
|
1292
|
-
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_12_Template, 1, 2, "i",
|
|
1263
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_12_Template, 1, 2, "i", 196);
|
|
1293
1264
|
i0.ɵɵelementEnd();
|
|
1294
|
-
i0.ɵɵelementStart(13, "button",
|
|
1265
|
+
i0.ɵɵelementStart(13, "button", 195);
|
|
1295
1266
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
|
|
1296
1267
|
i0.ɵɵtext(14, " Tokens ");
|
|
1297
|
-
i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_15_Template, 1, 2, "i",
|
|
1268
|
+
i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_15_Template, 1, 2, "i", 196);
|
|
1298
1269
|
i0.ɵɵelementEnd();
|
|
1299
|
-
i0.ɵɵelementStart(16, "button",
|
|
1270
|
+
i0.ɵɵelementStart(16, "button", 195);
|
|
1300
1271
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
|
|
1301
1272
|
i0.ɵɵtext(17, " Cost ");
|
|
1302
|
-
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_18_Template, 1, 2, "i",
|
|
1273
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Conditional_18_Template, 1, 2, "i", 196);
|
|
1303
1274
|
i0.ɵɵelementEnd()()()();
|
|
1304
|
-
i0.ɵɵelementStart(19, "div",
|
|
1275
|
+
i0.ɵɵelementStart(19, "div", 197)(20, "table", 198)(21, "thead")(22, "tr", 199)(23, "th", 200);
|
|
1305
1276
|
i0.ɵɵtext(24, "Status");
|
|
1306
1277
|
i0.ɵɵelementEnd();
|
|
1307
|
-
i0.ɵɵelementStart(25, "th",
|
|
1278
|
+
i0.ɵɵelementStart(25, "th", 200);
|
|
1308
1279
|
i0.ɵɵtext(26, "Date & Time");
|
|
1309
1280
|
i0.ɵɵelementEnd();
|
|
1310
|
-
i0.ɵɵelementStart(27, "th",
|
|
1281
|
+
i0.ɵɵelementStart(27, "th", 200);
|
|
1311
1282
|
i0.ɵɵtext(28, "Model");
|
|
1312
1283
|
i0.ɵɵelementEnd();
|
|
1313
|
-
i0.ɵɵelementStart(29, "th",
|
|
1284
|
+
i0.ɵɵelementStart(29, "th", 200);
|
|
1314
1285
|
i0.ɵɵtext(30, "Duration");
|
|
1315
1286
|
i0.ɵɵelementEnd();
|
|
1316
|
-
i0.ɵɵelementStart(31, "th",
|
|
1287
|
+
i0.ɵɵelementStart(31, "th", 201);
|
|
1317
1288
|
i0.ɵɵtext(32, "Tokens");
|
|
1318
1289
|
i0.ɵɵelementEnd();
|
|
1319
|
-
i0.ɵɵelementStart(33, "th",
|
|
1290
|
+
i0.ɵɵelementStart(33, "th", 201);
|
|
1320
1291
|
i0.ɵɵtext(34, "Cost");
|
|
1321
1292
|
i0.ɵɵelementEnd();
|
|
1322
|
-
i0.ɵɵelementStart(35, "th",
|
|
1293
|
+
i0.ɵɵelementStart(35, "th", 202);
|
|
1323
1294
|
i0.ɵɵtext(36, "Type");
|
|
1324
1295
|
i0.ɵɵelementEnd();
|
|
1325
|
-
i0.ɵɵelementStart(37, "th",
|
|
1296
|
+
i0.ɵɵelementStart(37, "th", 202);
|
|
1326
1297
|
i0.ɵɵtext(38, "Actions");
|
|
1327
1298
|
i0.ɵɵelementEnd()()();
|
|
1328
1299
|
i0.ɵɵelementStart(39, "tbody");
|
|
1329
|
-
i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Template, 24, 18, "tr",
|
|
1300
|
+
i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_For_41_Template, 24, 18, "tr", 203, _forTrack1);
|
|
1330
1301
|
i0.ɵɵelementEnd()()();
|
|
1331
1302
|
} if (rf & 2) {
|
|
1332
1303
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1354,8 +1325,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
|
|
|
1354
1325
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(rf, ctx) { if (rf & 1) {
|
|
1355
1326
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1356
1327
|
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template, 4, 1, "ng-template", 29);
|
|
1357
|
-
i0.ɵɵelementStart(2, "div",
|
|
1358
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template, 4, 0, "div",
|
|
1328
|
+
i0.ɵɵelementStart(2, "div", 180);
|
|
1329
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template, 4, 0, "div", 187)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template, 1, 0, "mj-empty-state", 188)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template, 42, 13);
|
|
1359
1330
|
i0.ɵɵelementEnd()();
|
|
1360
1331
|
} if (rf & 2) {
|
|
1361
1332
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1365,7 +1336,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(r
|
|
|
1365
1336
|
} }
|
|
1366
1337
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1367
1338
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1368
|
-
i0.ɵɵelement(1, "i",
|
|
1339
|
+
i0.ɵɵelement(1, "i", 215);
|
|
1369
1340
|
i0.ɵɵtext(2, " Result Cache ");
|
|
1370
1341
|
i0.ɵɵelementEnd();
|
|
1371
1342
|
} }
|
|
@@ -1373,7 +1344,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(r
|
|
|
1373
1344
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1374
1345
|
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1375
1346
|
i0.ɵɵelementStart(2, "div", 35);
|
|
1376
|
-
i0.ɵɵelement(3, "mj-explorer-entity-data-grid",
|
|
1347
|
+
i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 214);
|
|
1377
1348
|
i0.ɵɵelementEnd()();
|
|
1378
1349
|
} if (rf & 2) {
|
|
1379
1350
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1383,22 +1354,22 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(r
|
|
|
1383
1354
|
} }
|
|
1384
1355
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1385
1356
|
i0.ɵɵelementStart(0, "span", 67);
|
|
1386
|
-
i0.ɵɵelement(1, "i",
|
|
1357
|
+
i0.ɵɵelement(1, "i", 217);
|
|
1387
1358
|
i0.ɵɵtext(2, " Related Items ");
|
|
1388
1359
|
i0.ɵɵelementEnd();
|
|
1389
1360
|
} }
|
|
1390
1361
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(rf, ctx) { if (rf & 1) {
|
|
1391
1362
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1392
1363
|
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1393
|
-
i0.ɵɵelementStart(2, "div", 35)(3, "div", 36)(4, "div")(5, "h6",
|
|
1364
|
+
i0.ɵɵelementStart(2, "div", 35)(3, "div", 36)(4, "div")(5, "h6", 216);
|
|
1394
1365
|
i0.ɵɵtext(6, "AI Agents Using This Prompt");
|
|
1395
1366
|
i0.ɵɵelementEnd();
|
|
1396
|
-
i0.ɵɵelement(7, "mj-explorer-entity-data-grid",
|
|
1367
|
+
i0.ɵɵelement(7, "mj-explorer-entity-data-grid", 214);
|
|
1397
1368
|
i0.ɵɵelementEnd();
|
|
1398
|
-
i0.ɵɵelementStart(8, "div")(9, "h6",
|
|
1369
|
+
i0.ɵɵelementStart(8, "div")(9, "h6", 216);
|
|
1399
1370
|
i0.ɵɵtext(10, "Prompts Using This as Result Selector");
|
|
1400
1371
|
i0.ɵɵelementEnd();
|
|
1401
|
-
i0.ɵɵelement(11, "mj-explorer-entity-data-grid",
|
|
1372
|
+
i0.ɵɵelement(11, "mj-explorer-entity-data-grid", 214);
|
|
1402
1373
|
i0.ɵɵelementEnd()()()();
|
|
1403
1374
|
} if (rf & 2) {
|
|
1404
1375
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1447,7 +1418,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1447
1418
|
i0.ɵɵelementStart(34, "div", 27)(35, "mj-accordion-panel", 28);
|
|
1448
1419
|
i0.ɵɵtemplate(36, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template, 4, 1, "ng-template", 29);
|
|
1449
1420
|
i0.ɵɵelementStart(37, "div", 30);
|
|
1450
|
-
i0.ɵɵconditionalCreate(38, MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template, 3, 0, "div", 31)(39, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template,
|
|
1421
|
+
i0.ɵɵconditionalCreate(38, MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template, 3, 0, "div", 31)(39, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template, 4, 2, "mj-empty-state", 32)(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template, 6, 1, "mj-empty-state", 33)(41, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template, 5, 3, "div", 34);
|
|
1451
1422
|
i0.ɵɵelementEnd()();
|
|
1452
1423
|
i0.ɵɵconditionalCreate(42, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1453
1424
|
i0.ɵɵelementStart(43, "mj-accordion-panel", 28);
|
|
@@ -1552,9 +1523,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1552
1523
|
} }
|
|
1553
1524
|
function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1554
1525
|
const _r36 = i0.ɵɵgetCurrentView();
|
|
1555
|
-
i0.ɵɵelementStart(0, "mj-window",
|
|
1526
|
+
i0.ɵɵelementStart(0, "mj-window", 218);
|
|
1556
1527
|
i0.ɵɵlistener("Close", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_window_Close_0_listener() { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged(false)); });
|
|
1557
|
-
i0.ɵɵelementStart(1, "mj-ai-test-harness",
|
|
1528
|
+
i0.ɵɵelementStart(1, "mj-ai-test-harness", 219);
|
|
1558
1529
|
i0.ɵɵlistener("visibilityChange", function MJAIPromptFormComponentExtended_Conditional_2_Template_mj_ai_test_harness_visibilityChange_1_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTestHarnessVisibilityChanged($event)); });
|
|
1559
1530
|
i0.ɵɵelementEnd()();
|
|
1560
1531
|
} if (rf & 2) {
|
|
@@ -3038,7 +3009,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3038
3009
|
} if (rf & 2) {
|
|
3039
3010
|
let _t;
|
|
3040
3011
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.templateEditor = _t.first);
|
|
3041
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "var(--mj-text-muted)"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [1, "no-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "invalid-template-state", 2, "flex", "1", "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "padding", "40px", "color", "#dc3545"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 3, "click"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], [1, "fa-solid", "fa-code", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.3"], [2, "margin-bottom", "12px", "color", "var(--mj-text-secondary)"], [2, "margin-bottom", "24px", "text-align", "center", "max-width", "400px"], [2, "display", "flex", "gap", "12px"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-exclamation-triangle", 2, "font-size", "64px", "margin-bottom", "20px", "opacity", "0.7"], [2, "margin-bottom", "12px"], [1, "fa-solid", "fa-refresh"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)"], [2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-radius", "6px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template", 3, "click"], [1, "fa-solid", "fa-exchange-alt"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], [1, "empty-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-info-circle"], [2, "margin-top", "10px"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [2, "padding", "12px 16px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-bottom", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))", "color", "var(--mj-brand-primary)", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "var(--mj-bg-surface-sunken)", "font-weight", "600", "font-size", "0.85em", "color", "var(--mj-text-secondary)", "border-bottom", "1px solid var(--mj-border-default)"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "var(--mj-text-muted)"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "var(--mj-bg-surface-sunken)", "border-top", "1px solid var(--mj-border-default)"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid var(--mj-border-default)", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [1, "model-vendor"], [1, "model-configuration"], [2, "font-size", "0.9em"], [1, "model-created"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "var(--mj-bg-surface-card)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.9em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em"], [2, "padding", "4px", "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.85em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "var(--mj-text-secondary)"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], ["Placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Min", "Step", "Format"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["mjButton", "", "variant", "outline", "size", "sm", 2, "color", "var(--mj-status-success)", "border-color", "var(--mj-status-success)", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "var(--mj-brand-primary)", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], [2, "background", "#fff3cd", "border", "1px solid #ffeaa7", "border-radius", "4px", "padding", "12px", "color", "#856404", "text-align", "center"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [1, "fa-solid", "fa-history", 2, "font-size", "3em", "margin-bottom", "12px", "opacity", "0.3"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "mj-button-group"], ["mjButton", "", "size", "sm", 3, "click"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "var(--mj-text-secondary)"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-secondary)", "font-size", "0.85em", "font-weight", "500"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-database", 2, "color", "var(--mj-text-muted)"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-secondary)"], [1, "fa-solid", "fa-link", 2, "color", "var(--mj-text-muted)"], [3, "Close", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3012
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["form", "ngForm"], ["templateEditor", ""], [3, "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [3, "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "prompt-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "prompt-header", 2, "flex-shrink", "0", "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-robot", 2, "color", "var(--mj-brand-primary)", "font-size", "1.4em"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [1, "quick-config", 2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [1, "config-item", 2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-layer-group", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-secondary)", "font-weight", "500"], [1, "fa-solid", "fa-code", 2, "color", "var(--mj-text-muted)"], [2, "font-weight", "500"], [1, "action-buttons", 2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness"], [2, "font-size", "0.75em", "color", "#dc3545", "text-align", "right", "max-width", "200px"], [1, "configuration-sections", 2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-top", "2px solid var(--mj-border-default)", "padding", "16px", "min-height", "0"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [1, "template-section", 2, "display", "flex", "flex-direction", "column", "min-height", "400px", "padding", "8px"], [1, "loading-state", 2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], ["Size", "large", "Icon", "fa-solid fa-code", "Title", "No Template Associated", "Message", "This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.", 1, "no-template-state"], ["Variant", "warning", "Title", "Template Not Found", "Message", "The referenced template could not be loaded. It may have been deleted or moved.", 1, "invalid-template-state"], [1, "template-editor-container", 2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "350px"], [2, "padding", "16px 0"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "ParallelizationMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelCount", "Type", "numerictextbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ParallelConfigParam", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "OutputType", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EffortLevel", "Type", "numerictextbox", "Caption", "Effort Level (1-100)", "Description", "Higher values request more thorough reasoning", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ValidationBehavior", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "EnableCaching", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], [2, "margin-bottom", "16px"], [2, "display", "block", "margin-bottom", "4px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [2, "color", "var(--mj-text-secondary)"], [2, "margin", "0 0 12px 0", "font-size", "0.85em", "color", "var(--mj-text-muted)"], ["FieldName", "AssistantPrefill", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "StopSequences", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "PrefillFallbackMode", "Type", "dropdownlist", 3, "Record", "ShowLabel", "EditMode"], ["type", "text", "name", "promptName", "placeholder", "Enter prompt name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600", "flex", "1"], [1, "status-badge", 2, "color", "white", "padding", "4px 10px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], ["name", "promptStatus", "TextField", "text", "ValueField", "value", 2, "width", "150px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [2, "color", "#dc3545"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic", "width", "200px"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["name", "promptTypeID", "TextField", "Name", "ValueField", "ID", "Placeholder", "Select prompt type...", 2, "width", "200px", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "promptDescription", "placeholder", "Enter prompt description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-tag", 2, "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-database", 2, "color", "#28a745"], [2, "color", "#28a745", "font-weight", "500"], [1, "fa-solid", "fa-tachometer-alt", 2, "color", "var(--mj-text-muted)"], ["mjButton", "", "variant", "primary", "size", "lg", "title", "Run AI Prompt Test Harness", 3, "click"], [1, "fa-solid", "fa-play"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "margin-right", "12px"], ["ngProjectAs", "[actions]", 5, ["", "actions", ""], 2, "display", "flex", "gap", "12px"], ["mjButton", "", "variant", "primary"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-arrows-rotate"], [1, "template-actions", 2, "display", "flex", "gap", "8px", "padding", "8px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)"], [2, "flex", "1", "background", "var(--mj-bg-surface-card)", "border-radius", "6px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "min-height", "300px", 3, "contentChange", "runTemplate", "template", "config"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Change to a different template", 3, "click"], [1, "fa-solid", "fa-exchange-alt"], ["mjButton", "", "variant", "outline", "size", "sm", "title", "Open template in new window", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "model-management", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "background", "var(--mj-bg-surface-sunken)"], [1, "loading-state", 2, "padding", "20px", "text-align", "center", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-microchip", 2, "color", "var(--mj-text-muted)"], [1, "mj-accordion-badge"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em", "font-weight", "normal", "margin-left", "8px"], ["title", "Models are tried in order from top to bottom. The first available model will be used.", 1, "fa-solid", "fa-info-circle"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No models configured"], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""]], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "outline", "size", "sm", 5, ["", "actions", ""], 3, "click"], [2, "padding", "12px 16px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-bottom", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))", "color", "var(--mj-brand-primary)", "font-size", "0.85em"], [1, "model-header", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "background", "var(--mj-bg-surface-sunken)", "font-weight", "600", "font-size", "0.85em", "color", "var(--mj-text-secondary)", "border-bottom", "1px solid var(--mj-border-default)"], ["title", "Priority order - models are tried from top to bottom"], [1, "fa-solid", "fa-sort", 2, "color", "var(--mj-text-muted)"], [1, "add-model-row", 2, "padding", "12px 16px", "text-align", "center", "background", "var(--mj-bg-surface-sunken)", "border-top", "1px solid var(--mj-border-default)"], [1, "fa-solid", "fa-info-circle", 2, "margin-right", "6px"], [1, "model-row", 2, "display", "grid", "grid-template-columns", "40px 2fr 1fr 1fr 1fr 60px", "gap", "12px", "padding", "12px 16px", "border-bottom", "1px solid var(--mj-border-default)", "align-items", "start", "transition", "background 0.2s, opacity 0.2s", 3, "dragstart", "dragover", "drop", "dragend", "draggable"], [1, "drag-handle", 2, "display", "flex", "flex-direction", "column", "align-items", "center", "justify-content", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "font-weight", "600", 3, "title"], [1, "model-select"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [1, "model-vendor"], [1, "model-configuration"], [2, "font-size", "0.9em"], [1, "model-created"], [2, "color", "var(--mj-text-muted)", "font-size", "0.8em"], [2, "color", "#28a745", "font-size", "0.8em", "font-style", "italic"], [1, "model-actions", 2, "display", "flex", "gap", "2px", "flex-direction", "column"], [2, "display", "grid", "grid-template-columns", "40px 1fr", "gap", "12px", "padding", "8px 16px", "border-bottom", "1px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "font-size", "0.85em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center", "margin-bottom", "8px"], [2, "padding", "8px", "background", "var(--mj-bg-surface-card)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "margin-top", "8px"], ["title", "Drag to reorder priority", 1, "fa-solid", "fa-grip-vertical", 2, "cursor", "move"], [2, "font-size", "0.7em", "margin-top", "2px"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select a model...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.9em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Select vendor...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "font-size", "0.9em", "font-weight", "500", 3, "color"], [2, "font-size", "0.9em", "font-weight", "500"], [2, "font-size", "0.8em", "margin-left", "4px"], [2, "font-size", "0.9em", 3, "color"], [2, "color", "var(--mj-text-muted)", "font-size", "0.9em"], [2, "padding", "4px", "color", "var(--mj-text-muted)", "font-style", "italic", "font-size", "0.85em"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], ["TextField", "Name", "ValueField", "ID", "Placeholder", "Default", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "name", "Data", "ValuePrimitive", "Filterable"], [2, "display", "flex", "gap", "2px", "margin-bottom", "4px"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move up", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-up"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Move down", 3, "click", "disabled"], [1, "fa-solid", "fa-chevron-down"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Remove model", 2, "color", "var(--mj-status-error)", 3, "click"], [1, "fa-solid", "fa-times"], [2, "margin-bottom", "6px", "font-weight", "600", "color", "var(--mj-text-secondary)", "font-size", "0.9em"], [1, "fa-solid", "fa-layer-group"], [2, "display", "grid", "grid-template-columns", "1fr 1fr 1fr", "gap", "12px", "align-items", "center"], [2, "display", "flex", "gap", "16px", "flex-wrap", "wrap", "align-items", "center"], [2, "display", "block", "margin-bottom", "2px", "font-size", "0.8em", "font-weight", "600", "color", "var(--mj-text-secondary)"], ["TextField", "text", "ValueField", "value", "Placeholder", "Select mode...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], ["Placeholder", "Count...", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name", "Min", "Step", "Format"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "width", "100%", "font-size", "0.85em", 3, "ngModelChange", "ngModel", "name"], ["mjButton", "", "variant", "outline", "size", "sm", 2, "color", "var(--mj-status-success)", "border-color", "var(--mj-status-success)", 3, "click"], [1, "fa-solid", "fa-cogs", 2, "color", "var(--mj-text-muted)"], [2, "padding", "8px", "color", "var(--mj-text-muted)", "font-style", "italic"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModel", "Data", "ValuePrimitive", "Filterable"], ["name", "resultSelectorPromptID", "TextField", "text", "ValueField", "value", "Placeholder", "Select a result selector prompt...", 2, "width", "100%", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "Filterable"], [1, "fa-solid", "fa-wand-magic-sparkles", 2, "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "This template has no parameters defined"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], ["title", "These parameters are defined in the template and will be available when executing this prompt", 1, "fa-solid", "fa-info-circle"], [2, "display", "grid", "gap", "12px"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s", 3, "border-left"], [2, "margin-top", "16px", "padding", "12px", "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))", "border-radius", "6px", "border", "1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default))"], [2, "display", "flex", "align-items", "flex-start", "gap", "8px"], [1, "fa-solid", "fa-lightbulb", 2, "color", "var(--mj-brand-primary)", "margin-top", "2px"], [2, "flex", "1", "font-size", "0.85em", "color", "var(--mj-brand-primary)", "line-height", "1.5"], [1, "parameter-card", 2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "padding", "16px", "background", "var(--mj-bg-surface-sunken)", "transition", "all 0.2s"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [2, "font-size", "1.2em"], [2, "margin", "0", "color", "var(--mj-text-secondary)", "font-weight", "600"], [2, "color", "#dc3545", "font-size", "0.9em", "margin-left", "4px"], [1, "type-badge", 2, "color", "white", "padding", "4px 8px", "border-radius", "12px", "font-size", "0.75em", "font-weight", "500"], [2, "color", "#dc3545", "font-size", "0.85em", "font-weight", "500"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em"], [2, "margin", "0 0 8px 0", "color", "var(--mj-text-muted)", "font-size", "0.9em", "line-height", "1.4"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], [1, "fa-solid", "fa-info-circle", 2, "color", "var(--mj-text-muted)"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(200px, 1fr))", "gap", "12px", "margin-top", "12px"], [2, "background", "var(--mj-bg-surface-card)", "padding", "8px 12px", "border-radius", "4px", "border", "1px solid var(--mj-border-default)"], [2, "display", "block", "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-bottom", "2px"], [2, "font-size", "0.85em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "font-size", "0.8em", "color", "var(--mj-text-secondary)", "word-break", "break-all"], [2, "padding", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "padding", "12px", "font-family", "'Courier New', monospace", "font-size", "0.9em", "white-space", "pre-wrap", "overflow", "auto", "max-height", "250px"], ["Variant", "warning"], [2, "color", "#dc3545", "font-size", "0.8em", "font-weight", "normal"], ["name", "outputExample", "language", "json", "placeholder", "Enter JSON example structure...", 2, "width", "100%", "height", "200px", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", 3, "ngModelChange", "ngModel"], [2, "margin-top", "8px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-info-circle"], [2, "text-align", "center", "padding", "40px", "color", "var(--mj-text-muted)"], ["Size", "compact", "Icon", "fa-solid fa-clock-rotate-left", "Title", "No execution history yet", "Message", "Run this prompt to see execution history here"], [1, "fa-solid", "fa-history", 2, "color", "var(--mj-text-muted)"], [2, "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "margin-bottom", "12px"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "margin-bottom", "16px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "mj-button-group"], ["mjButton", "", "size", "sm", 3, "click"], [2, "margin-left", "4px", "font-size", "0.8em", 3, "class"], [2, "border", "1px solid var(--mj-border-default)", "border-radius", "8px", "overflow", "hidden"], [2, "width", "100%", "border-collapse", "collapse"], [2, "background", "var(--mj-bg-surface-sunken)", "border-bottom", "2px solid var(--mj-border-default)"], [2, "padding", "12px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "font-weight", "600", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center", "font-weight", "600", "color", "var(--mj-text-secondary)"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)", 3, "even-row"], [2, "margin-left", "4px", "font-size", "0.8em"], [1, "history-row", 2, "border-bottom", "1px solid var(--mj-border-default)"], [2, "padding", "12px"], [2, "display", "flex", "align-items", "center", "gap", "6px"], [2, "padding", "12px", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "right", "color", "var(--mj-text-secondary)"], [2, "padding", "12px", "text-align", "center"], [2, "padding", "4px 8px", "border-radius", "12px", "background", "var(--mj-bg-surface-sunken)", "color", "var(--mj-text-secondary)", "font-size", "0.85em", "font-weight", "500"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "View details", 3, "click"], [1, "fa-solid", "fa-external-link"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-database", 2, "color", "var(--mj-text-muted)"], [2, "margin", "0 0 12px 0", "color", "var(--mj-text-secondary)"], [1, "fa-solid", "fa-link", 2, "color", "var(--mj-text-muted)"], [3, "Close", "Width", "Height", "MinWidth", "MinHeight", "Draggable", "Resizable", "Visible", "Title"], [3, "visibilityChange", "entity", "mode", "isVisible"]], template: function MJAIPromptFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3042
3013
|
i0.ɵɵelement(0, "div");
|
|
3043
3014
|
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template, 77, 53, "mj-record-form-container", 2);
|
|
3044
3015
|
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template, 2, 11, "mj-window", 3);
|
|
@@ -3047,7 +3018,7 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3047
3018
|
i0.ɵɵconditional(ctx.record ? 1 : -1);
|
|
3048
3019
|
i0.ɵɵadvance();
|
|
3049
3020
|
i0.ɵɵconditional(ctx.showTestHarness ? 2 : -1);
|
|
3050
|
-
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%]
|
|
3021
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJNumericInputComponent, i2.MJWindowComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.CodeEditorComponent, i5.AITestHarnessComponent, i6.TemplateEditorComponent, i7.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary[_ngcontent-%COMP%] {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.template-tab-content[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.template-header[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 1.1em;\n}\n\n.loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n\n\nmj-empty-state.no-template-state[_ngcontent-%COMP%], \nmj-empty-state.invalid-template-state[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.template-editor-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n\n\n@media (max-width: 1200px) {\n .record-form-container[_ngcontent-%COMP%] .mj-tab-body[_ngcontent-%COMP%] > div[_ngcontent-%COMP%] {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary[_ngcontent-%COMP%] {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .custom-toolbar-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge[_ngcontent-%COMP%] {\n align-self: flex-start;\n }\n}\n\n\n\n.record-form-container[_ngcontent-%COMP%] mj-form-section[_ngcontent-%COMP%] {\n padding: 16px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%], \n.template-header[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}\n\n.config-item[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n\n\n.history-row[_ngcontent-%COMP%] {\n transition: background 0.2s;\n}\n\n.history-row[_ngcontent-%COMP%]:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.history-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default) !important;\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover::before {\n width: 6px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover .type-badge[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n\n\n.parameter-card[_ngcontent-%COMP%] i.fa-solid[_ngcontent-%COMP%] {\n transition: transform 0.3s;\n}\n\n.parameter-card[_ngcontent-%COMP%]:hover i.fa-solid[_ngcontent-%COMP%] {\n transform: rotate(360deg);\n}\n\n\n\n@media (max-width: 768px) {\n .parameter-card[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n }\n\n .parameter-card[_ngcontent-%COMP%] h6[_ngcontent-%COMP%] {\n font-size: 0.95em;\n }\n\n .type-badge[_ngcontent-%COMP%] {\n font-size: 0.7em !important;\n }\n}"] }); }
|
|
3051
3022
|
};
|
|
3052
3023
|
MJAIPromptFormComponentExtended = __decorate([
|
|
3053
3024
|
RegisterClass(BaseFormComponent, 'MJ: AI Prompts')
|
|
@@ -3055,7 +3026,7 @@ MJAIPromptFormComponentExtended = __decorate([
|
|
|
3055
3026
|
export { MJAIPromptFormComponentExtended };
|
|
3056
3027
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptFormComponentExtended, [{
|
|
3057
3028
|
type: Component,
|
|
3058
|
-
args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<!-- Dialog container -->\n<div></div>\n@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [Data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [Data]=\"availablePromptTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Parallelization:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Effort Level:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em; font-weight: normal;\">• {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <div class=\"no-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-code\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.3;\"></i>\n <h5 style=\"margin-bottom: 12px; color: var(--mj-text-secondary);\">No Template Associated</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n This AI prompt needs a template to define its structure and parameters.\n Create a new template or link to an existing one.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton variant=\"outline\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </div>\n } @else if (templateNotFoundInDatabase) {\n <div class=\"invalid-template-state\" style=\"flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 40px; color: #dc3545;\">\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"font-size: 64px; margin-bottom: 20px; opacity: 0.7;\"></i>\n <h5 style=\"margin-bottom: 12px;\">Template Not Found</h5>\n <p style=\"margin-bottom: 24px; text-align: center; max-width: 400px;\">\n The referenced template could not be loaded. It may have been deleted or moved.\n </p>\n <div style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-refresh\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </div>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- Template Editor -->\n <div style=\"flex: 1; background: var(--mj-bg-surface-card); border-radius: 6px; border: 1px solid var(--mj-border-default);\">\n <mj-template-editor\n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ promptModels.length }}\n </span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> No models configured\n @if (EditMode && UserCanCreatePromptModels) {\n <div style=\"margin-top: 10px;\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n </div>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default)); color: var(--mj-brand-primary); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: var(--mj-bg-surface-sunken); font-weight: 600; font-size: 0.85em; color: var(--mj-text-secondary); border-bottom: 1px solid var(--mj-border-default);\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: var(--mj-text-muted);\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\"\n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? 'color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))' : 'var(--mj-bg-surface-card)')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--mj-border-default); align-items: start; transition: background 0.2s, opacity 0.2s;\">\n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ model.Priority }} - Higher priority numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <mj-dropdown [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [Data]=\"availableModels\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a model...\"\n (ValueChange)=\"onModelChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <mj-dropdown [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [Data]=\"getVendorsForModelSync(model.ModelID)\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em;\">-</span>\n }\n }\n </div>\n <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: var(--mj-text-muted); font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [Data]=\"availableConfigurations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Default\"\n (ValueChange)=\"onConfigurationChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n @if (UserCanUpdatePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\"\n style=\"color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); font-size: 0.85em; color: var(--mj-text-muted);\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n </div>\n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-default); border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Mode</label>\n <mj-dropdown [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [Data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-dropdown>\n </div>\n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Count</label>\n <mj-numeric-input [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\"\n Placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-numeric-input>\n </div>\n }\n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Config Parameter</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\" />\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (EditMode && UserCanCreatePromptModels) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: var(--mj-bg-surface-sunken); border-top: 1px solid var(--mj-border-default);\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\"\n style=\"color: var(--mj-status-success); border-color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <mj-dropdown\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [Data]=\"resultSelectorTreeData\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (ValueChange)=\"onResultSelectorChange($any($event))\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Prefill & Output Control Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-text-muted);\"></i>\n Prefill & Output Control\n </span>\n </ng-template>\n <div style=\"padding: 16px 0;\">\n <p style=\"margin: 0 0 12px 0; font-size: 0.85em; color: var(--mj-text-muted);\">\n Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered.\n </p>\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AssistantPrefill\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StopSequences\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrefillFallbackMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Template Parameters\n <span class=\"badge\" style=\"background: var(--mj-brand-primary); color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ templateParams.length }}\n </span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <div class=\"empty-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This template has no parameters defined\n </div>\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">• Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <div style=\"background: #fff3cd; border: 1px solid #ffeaa7; border-radius: 4px; padding: 12px; color: #856404; text-align: center;\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Output example is required when output type is 'object'\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-history\" style=\"font-size: 3em; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No execution history yet</p>\n <p style=\"font-size: 0.9em;\">Run this prompt to see execution history here</p>\n </div>\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <div class=\"mj-button-group\">\n <button mjButton\n [class.active]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"sm\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"sm\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"sm\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"sm\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n <!-- Execution History Table -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid var(--mj-border-default);\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\"\n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: var(--mj-bg-surface-sunken); \n color: var(--mj-text-secondary); font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: var(--mj-text-muted);\"></i>\n Result Cache\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Result Cache','AIPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Result Cache')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: var(--mj-text-muted);\"></i>\n Related Items\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">AI Agents Using This Prompt</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">Prompts Using This as Result Selector</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','ResultSelectorPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n\n<!-- AI Prompt Test Harness -->\n@if (showTestHarness) {\n <mj-window\n [Width]=\"1200\"\n [Height]=\"800\"\n [MinWidth]=\"800\"\n [MinHeight]=\"600\"\n [Draggable]=\"true\"\n [Resizable]=\"true\"\n [Visible]=\"true\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\"\n [Title]=\"'Run AI Prompt - ' + (record.Name || 'Untitled')\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </mj-window>\n}", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state,\n.no-template-state,\n.invalid-template-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.no-template-state i,\n.invalid-template-state i {\n opacity: 0.6;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n"] }]
|
|
3029
|
+
args: [{ standalone: false, selector: 'mj-ai-prompt-form', template: "<!-- Dialog container -->\n<div></div>\n@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Main Content Area - Template Editor and Configuration -->\n <div class=\"prompt-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n <!-- Header Section -->\n <div class=\"prompt-header\" style=\"flex-shrink: 0; padding: 20px; background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Prompt Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-robot\" style=\"color: var(--mj-brand-primary); font-size: 1.4em;\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"record.Name\"\n name=\"promptName\"\n placeholder=\"Enter prompt name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled AI Prompt' }}</h4>\n <span class=\"status-badge\" [style.background-color]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 4px 10px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ record.Status }}\n </span>\n }\n </div>\n <!-- Status and Type Editors when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap;\">\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">Status</label>\n <mj-dropdown [(ngModel)]=\"record.Status\"\n name=\"promptStatus\"\n [Data]=\"[{text: 'Active', value: 'Active'}, {text: 'Pending', value: 'Pending'}, {text: 'Disabled', value: 'Disabled'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n style=\"width: 150px;\">\n </mj-dropdown>\n </div>\n <div>\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Type <span style=\"color: #dc3545;\">*</span>\n </label>\n @if (isLoadingPromptTypes) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic; width: 200px;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading types...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"record.TypeID\"\n name=\"promptTypeID\"\n [Data]=\"availablePromptTypes\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select prompt type...\"\n style=\"width: 200px;\">\n </mj-dropdown>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <textarea class=\"mj-textarea\" [(ngModel)]=\"record.Description\"\n name=\"promptDescription\"\n [rows]=\"2\"\n placeholder=\"Enter prompt description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p style=\"margin: 0 0 12px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n <!-- Quick Config Row -->\n <div class=\"quick-config\" style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.TypeID) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tag\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Type:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getPromptTypeDisplayName(record.TypeID) }}</span>\n </div>\n }\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-layer-group\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Parallelization:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ getParallelizationModeDisplay() }}</span>\n </div>\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Output:</span>\n <span [style.color]=\"getValidationColor()\" style=\"font-weight: 500;\">{{ getOutputTypeDisplay() }}</span>\n </div>\n @if (record.EnableCaching) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-database\" style=\"color: #28a745;\"></i>\n <span style=\"color: #28a745; font-weight: 500;\">Caching Enabled</span>\n </div>\n }\n @if (record.EffortLevel) {\n <div class=\"config-item\" style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-tachometer-alt\" style=\"color: var(--mj-text-muted);\"></i>\n <span style=\"color: var(--mj-text-muted);\">Effort Level:</span>\n <span style=\"color: var(--mj-text-secondary); font-weight: 500;\">{{ record.EffortLevel }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n <div style=\"display: flex; gap: 8px;\">\n @if (record.ID) {\n <button mjButton variant=\"primary\" size=\"lg\"\n (click)=\"openTestHarness()\"\n title=\"Run AI Prompt Test Harness\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n @if (!canExecute && record.ID) {\n <div style=\"font-size: 0.75em; color: #dc3545; text-align: right; max-width: 200px;\">\n @if (record.Status !== 'Active') {\n \u2022 Prompt must be Active<br>\n }\n @if (!record.TemplateID) {\n \u2022 Template is required<br>\n }\n @if (!template && record.TemplateID) {\n \u2022 Template not found<br>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\" style=\"flex: 1; background: var(--mj-bg-surface-card); border-top: 2px solid var(--mj-border-default); padding: 16px; min-height: 0;\">\n <!-- Template Editor Section -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Template Editor\n @if (template) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em; font-weight: normal;\">• {{ template.Name }}</span>\n }\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div class=\"template-section\" style=\"display: flex; flex-direction: column; min-height: 400px; padding: 8px;\">\n @if (isLoadingTemplate) {\n <div class=\"loading-state\" style=\"flex: 1; display: flex; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; margin-right: 12px;\"></i>\n Loading template...\n </div>\n } @else if (!record.TemplateID) {\n <mj-empty-state class=\"no-template-state\"\n Size=\"large\"\n Icon=\"fa-solid fa-code\"\n Title=\"No Template Associated\"\n Message=\"This AI prompt needs a template to define its structure and parameters. Create a new template or link to an existing one.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton variant=\"outline\" (click)=\"linkExistingTemplate()\">\n <i class=\"fa-solid fa-link\"></i> Link Existing Template\n </button>\n }\n </div>\n </mj-empty-state>\n } @else if (templateNotFoundInDatabase) {\n <mj-empty-state class=\"invalid-template-state\"\n Variant=\"warning\"\n Title=\"Template Not Found\"\n Message=\"The referenced template could not be loaded. It may have been deleted or moved.\">\n <div ngProjectAs=\"[actions]\" style=\"display: flex; gap: 12px;\">\n <button mjButton variant=\"outline\" (click)=\"loadTemplate()\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Retry Loading\n </button>\n @if (UserCanCreateTemplates) {\n <button mjButton variant=\"primary\" (click)=\"createNewTemplate()\">\n <i class=\"fa-solid fa-plus\"></i> Create New Template\n </button>\n }\n </div>\n </mj-empty-state>\n } @else {\n <!-- Active Template Editor -->\n <div class=\"template-editor-container\" style=\"flex: 1; display: flex; flex-direction: column; min-height: 350px;\">\n <!-- Template Actions Bar -->\n @if (template && EditMode) {\n <div class=\"template-actions\" style=\"display: flex; gap: 8px; padding: 8px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken);\">\n @if (UserCanUpdateTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"linkExistingTemplate()\"\n title=\"Change to a different template\">\n <i class=\"fa-solid fa-exchange-alt\"></i> Change Template\n </button>\n }\n @if (UserCanReadTemplates) {\n <button mjButton\n variant=\"outline\"\n size=\"sm\"\n (click)=\"openTemplateInNewWindow()\"\n title=\"Open template in new window\">\n <i class=\"fa-solid fa-external-link-alt\"></i> Open in New Window\n </button>\n }\n </div>\n }\n <!-- Template Editor -->\n <div style=\"flex: 1; background: var(--mj-bg-surface-card); border-radius: 6px; border: 1px solid var(--mj-border-default);\">\n <mj-template-editor\n #templateEditor\n [template]=\"template\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onTemplateContentChange($event)\"\n (runTemplate)=\"onTemplateRun($event)\"\n style=\"display: block; min-height: 300px;\">\n </mj-template-editor>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n <!-- Model Configuration Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n Models\n @if (promptModels.length > 0) {\n <span class=\"mj-accordion-badge\">{{ promptModels.length }}</span>\n }\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"Models are tried in order from top to bottom. The first available model will be used.\"></i>\n Priority order (first available model will be used)\n </span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <!-- Model Management Interface -->\n <div class=\"model-management\" style=\"border: 1px solid var(--mj-border-default); border-radius: 6px; background: var(--mj-bg-surface-sunken);\">\n @if (isLoadingModels) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading models...\n </div>\n } @else {\n @if (promptModels.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No models configured\">\n @if (EditMode && UserCanCreatePromptModels) {\n <button ngProjectAs=\"[actions]\" mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n }\n </mj-empty-state>\n } @else {\n <!-- Priority explanation for multiple models -->\n @if (promptModels.length > 1) {\n <div style=\"padding: 12px 16px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-bottom: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default)); color: var(--mj-brand-primary); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\" style=\"margin-right: 6px;\"></i>\n Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution.\n </div>\n }\n <!-- Column Headers -->\n <div class=\"model-header\" style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; background: var(--mj-bg-surface-sunken); font-weight: 600; font-size: 0.85em; color: var(--mj-text-secondary); border-bottom: 1px solid var(--mj-border-default);\">\n <div title=\"Priority order - models are tried from top to bottom\">\n <i class=\"fa-solid fa-sort\" style=\"color: var(--mj-text-muted);\"></i>\n </div>\n <div>AI Model <span style=\"color: #dc3545;\">*</span></div>\n <div>Vendor</div>\n <div>Configuration</div>\n <div>Created</div>\n <div>Actions</div>\n </div>\n @for (model of promptModels; track getModelTrackId(model) || $index; let i = $index) {\n <div class=\"model-row\"\n [draggable]=\"EditMode\"\n (dragstart)=\"onDragStart($event, i)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, i)\"\n (dragend)=\"onDragEnd($event)\"\n [style.background]=\"!model.ModelID ? '#fff3cd' : (draggedIndex === i ? 'color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface))' : 'var(--mj-bg-surface-card)')\"\n [style.border-left]=\"!model.ModelID ? '3px solid #ffc107' : 'none'\"\n [style.opacity]=\"draggedIndex === i ? '0.5' : '1'\"\n style=\"display: grid; grid-template-columns: 40px 2fr 1fr 1fr 1fr 60px; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--mj-border-default); align-items: start; transition: background 0.2s, opacity 0.2s;\">\n <!-- Drag Handle / Priority -->\n <div class=\"drag-handle\" style=\"display: flex; flex-direction: column; align-items: center; justify-content: center; color: var(--mj-text-muted);\">\n @if (EditMode) {\n <i class=\"fa-solid fa-grip-vertical\" title=\"Drag to reorder priority\" style=\"cursor: move;\"></i>\n <span style=\"font-size: 0.7em; margin-top: 2px;\">#{{ i + 1 }}</span>\n } @else {\n <span style=\"font-size: 0.9em; font-weight: 600;\" title=\"Priority {{ model.Priority }} - Higher priority numbers are tried first\">#{{ i + 1 }}</span>\n }\n </div>\n <!-- Model Selection -->\n <div class=\"model-select\">\n @if (EditMode) {\n <mj-dropdown [(ngModel)]=\"model.ModelID\"\n [name]=\"'modelId_' + getModelTrackId(model)\"\n [Data]=\"availableModels\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a model...\"\n (ValueChange)=\"onModelChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <span style=\"font-weight: 500;\">{{ getModelDisplayName(model.ModelID) }}</span>\n }\n </div>\n <!-- Vendor -->\n <div class=\"model-vendor\">\n @if (EditMode) {\n @if (model.ModelID) {\n @if (shouldShowVendorDropdown(model.ModelID)) {\n <mj-dropdown [(ngModel)]=\"model.VendorID\"\n [name]=\"'vendorId_' + getModelTrackId(model)\"\n [Data]=\"getVendorsForModelSync(model.ModelID)\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select vendor...\"\n style=\"width: 100%;\">\n </mj-dropdown>\n } @else {\n <!-- Single vendor - just show the name -->\n @if (getVendorsForModelSync(model.ModelID).length === 1) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID)\" style=\"font-size: 0.9em; font-weight: 500;\">\n {{ getVendorsForModelSync(model.ModelID)[0].Name }}\n @if (getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, getVendorsForModelSync(model.ModelID)[0].ID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">No vendors available</span>\n }\n }\n } @else {\n <span style=\"color: var(--mj-text-muted); font-style: italic; font-size: 0.9em;\">Select model first</span>\n }\n } @else {\n @if (model.VendorID && model.ModelID) {\n <span [style.color]=\"getVendorStatusColor(model.ModelID, model.VendorID)\" style=\"font-size: 0.9em;\">\n {{ getVendorDisplayName(model.VendorID) }}\n @if (getModelVendorStatus(model.ModelID, model.VendorID) !== 'Active') {\n <span style=\"font-size: 0.8em; margin-left: 4px;\">({{ getModelVendorStatus(model.ModelID, model.VendorID) }})</span>\n }\n </span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.9em;\">-</span>\n }\n }\n </div>\n <!-- Configuration -->\n <div class=\"model-configuration\">\n @if (EditMode) {\n @if (isLoadingConfigurations) {\n <div style=\"padding: 4px; color: var(--mj-text-muted); font-style: italic; font-size: 0.85em;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...\n </div>\n } @else {\n <mj-dropdown [(ngModel)]=\"model.ConfigurationID\"\n [name]=\"'configurationId_' + getModelTrackId(model)\"\n [Data]=\"availableConfigurations\"\n TextField=\"Name\"\n ValueField=\"ID\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Default\"\n (ValueChange)=\"onConfigurationChange($any($event), i)\"\n style=\"width: 100%;\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"font-size: 0.9em;\">{{ getConfigurationDisplayName(model.ConfigurationID) }}</span>\n }\n </div>\n <!-- Created Date -->\n <div class=\"model-created\">\n @if (model.ID) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em;\">{{ model.__mj_CreatedAt | date:'short' }}</span>\n } @else {\n <span style=\"color: #28a745; font-size: 0.8em; font-style: italic;\">New</span>\n }\n </div>\n <!-- Actions -->\n <div class=\"model-actions\" style=\"display: flex; gap: 2px; flex-direction: column;\">\n @if (EditMode) {\n <div style=\"display: flex; gap: 2px; margin-bottom: 4px;\">\n @if (UserCanUpdatePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelUp(i)\"\n [disabled]=\"i === 0\"\n title=\"Move up\">\n <i class=\"fa-solid fa-chevron-up\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"moveModelDown(i)\"\n [disabled]=\"i === promptModels.length - 1\"\n title=\"Move down\">\n <i class=\"fa-solid fa-chevron-down\"></i>\n </button>\n }\n </div>\n @if (UserCanDeletePromptModels) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"removePromptModel(i)\"\n title=\"Remove model\"\n style=\"color: var(--mj-status-error);\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n }\n </div>\n </div>\n <!-- Second row with additional details -->\n <div style=\"display: grid; grid-template-columns: 40px 1fr; gap: 12px; padding: 8px 16px; border-bottom: 1px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); font-size: 0.85em; color: var(--mj-text-muted);\">\n <div></div>\n <div>\n <!-- Basic model details -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center; margin-bottom: 8px;\">\n @if (model.Status) {\n <span><strong>Status:</strong> {{ model.Status }}</span>\n }\n </div>\n <!-- Parallel execution fields when prompt is ModelSpecific -->\n @if (record.ParallelizationMode === 'ModelSpecific') {\n <div style=\"padding: 8px; background: var(--mj-bg-surface-card); border: 1px solid var(--mj-border-default); border-radius: 4px; margin-top: 8px;\">\n <div style=\"margin-bottom: 6px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n <i class=\"fa-solid fa-layer-group\"></i> Model-Specific Parallel Execution\n </div>\n @if (EditMode) {\n <div style=\"display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px; align-items: center;\">\n <!-- Parallel Mode -->\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Mode</label>\n <mj-dropdown [(ngModel)]=\"model.ParallelizationMode\"\n [name]=\"'parallelMode_' + i\"\n [Data]=\"[{text: 'None', value: 'None'}, {text: 'Static Count', value: 'StaticCount'}, {text: 'Config Param', value: 'ConfigParam'}]\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select mode...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-dropdown>\n </div>\n <!-- Parallel Count (when StaticCount) -->\n @if (model.ParallelizationMode === 'StaticCount') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Parallel Count</label>\n <mj-numeric-input [(ngModel)]=\"model.ParallelCount\"\n [name]=\"'parallelCount_' + i\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\"\n Placeholder=\"Count...\"\n style=\"width: 100%; font-size: 0.85em;\">\n </mj-numeric-input>\n </div>\n }\n <!-- Config Param (when ConfigParam) -->\n @if (model.ParallelizationMode === 'ConfigParam') {\n <div>\n <label style=\"display: block; margin-bottom: 2px; font-size: 0.8em; font-weight: 600; color: var(--mj-text-secondary);\">Config Parameter</label>\n <input type=\"text\" class=\"mj-input\" [(ngModel)]=\"model.ParallelConfigParam\"\n [name]=\"'parallelConfigParam_' + i\"\n placeholder=\"Parameter name...\"\n style=\"width: 100%; font-size: 0.85em;\" />\n </div>\n }\n </div>\n } @else {\n <!-- Read-only display -->\n <div style=\"display: flex; gap: 16px; flex-wrap: wrap; align-items: center;\">\n @if (model.ParallelizationMode) {\n <span><strong>Parallel Mode:</strong> {{ model.ParallelizationMode }}</span>\n }\n @if (model.ParallelCount) {\n <span><strong>Parallel Count:</strong> {{ model.ParallelCount }}</span>\n }\n @if (model.ParallelConfigParam) {\n <span><strong>Config Param:</strong> {{ model.ParallelConfigParam }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n @if (EditMode && UserCanCreatePromptModels) {\n <div class=\"add-model-row\" style=\"padding: 12px 16px; text-align: center; background: var(--mj-bg-surface-sunken); border-top: 1px solid var(--mj-border-default);\">\n <button mjButton variant=\"outline\" size=\"sm\"\n (click)=\"addNewModel()\"\n style=\"color: var(--mj-status-success); border-color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-plus\"></i> Add Model\n </button>\n </div>\n }\n }\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n <!-- Advanced Configuration Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-cogs\" style=\"color: var(--mj-text-muted);\"></i>\n Advanced Configuration\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelizationMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n @if (showParallelCount) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelCount\"\n Type=\"numerictextbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n @if (showParallelConfigParam) {\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ParallelConfigParam\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n }\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"OutputType\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EffortLevel\"\n Type=\"numerictextbox\"\n Caption=\"Effort Level (1-100)\"\n Description=\"Higher values request more thorough reasoning\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ValidationBehavior\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"EnableCaching\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <!-- Result Selector Prompt with Tree Selector -->\n <div style=\"margin-bottom: 16px;\">\n <label style=\"display: block; margin-bottom: 4px; font-weight: 600; color: var(--mj-text-secondary); font-size: 0.9em;\">\n Result Selector Prompt\n </label>\n @if (EditMode) {\n @if (isLoadingResultSelectorData) {\n <div style=\"padding: 8px; color: var(--mj-text-muted); font-style: italic;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading prompts...\n </div>\n } @else {\n <mj-dropdown\n [(ngModel)]=\"record.ResultSelectorPromptID\"\n name=\"resultSelectorPromptID\"\n [Data]=\"resultSelectorTreeData\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [Filterable]=\"true\"\n Placeholder=\"Select a result selector prompt...\"\n style=\"width: 100%;\"\n (ValueChange)=\"onResultSelectorChange($any($event))\">\n </mj-dropdown>\n }\n } @else {\n <span style=\"color: var(--mj-text-secondary);\">{{ getPromptDisplayName(record.ResultSelectorPromptID || '') || 'None selected' }}</span>\n }\n </div>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Prefill & Output Control Expansion Panel -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-wand-magic-sparkles\" style=\"color: var(--mj-text-muted);\"></i>\n Prefill & Output Control\n </span>\n </ng-template>\n <div style=\"padding: 16px 0;\">\n <p style=\"margin: 0 0 12px 0; font-size: 0.85em; color: var(--mj-text-muted);\">\n Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered.\n </p>\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"AssistantPrefill\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"StopSequences\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"PrefillFallbackMode\"\n Type=\"dropdownlist\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Template Parameters Expansion Panel -->\n @if (template && templateParams.length > 0) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Template Parameters\n <span class=\"mj-accordion-badge\">{{ templateParams.length }}</span>\n <span style=\"color: var(--mj-text-muted); font-size: 0.8em; font-weight: normal; margin-left: 8px;\">\n <i class=\"fa-solid fa-info-circle\" title=\"These parameters are defined in the template and will be available when executing this prompt\"></i>\n Parameters defined in the template\n </span>\n </span>\n </ng-template>\n <!-- Template Parameters Display -->\n <div style=\"padding: 16px 0;\">\n @if (isLoadingTemplateParams) {\n <div class=\"loading-state\" style=\"padding: 20px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading template parameters...\n </div>\n } @else if (templateParams.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"This template has no parameters defined\" />\n } @else {\n <!-- Parameters Grid -->\n <div style=\"display: grid; gap: 12px;\">\n @for (param of templateParams; track param.ID) {\n <div class=\"parameter-card\"\n style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; padding: 16px; background: var(--mj-bg-surface-sunken); transition: all 0.2s;\"\n [style.border-left]=\"'4px solid ' + getParamTypeColor(param.Type)\">\n <!-- Parameter Header -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i [class]=\"'fa-solid ' + getParamTypeIcon(param.Type)\"\n [style.color]=\"getParamTypeColor(param.Type)\"\n style=\"font-size: 1.2em;\"></i>\n <h6 style=\"margin: 0; color: var(--mj-text-secondary); font-weight: 600;\">\n {{ param.Name }}\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.9em; margin-left: 4px;\">*</span>\n }\n </h6>\n </div>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <span class=\"type-badge\"\n [style.background-color]=\"getParamTypeColor(param.Type)\"\n style=\"color: white; padding: 4px 8px; border-radius: 12px; font-size: 0.75em; font-weight: 500;\">\n {{ param.Type }}\n </span>\n @if (param.IsRequired) {\n <span style=\"color: #dc3545; font-size: 0.85em; font-weight: 500;\">Required</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Optional</span>\n }\n </div>\n </div>\n <!-- Parameter Description -->\n @if (param.Description) {\n <p style=\"margin: 0 0 8px 0; color: var(--mj-text-muted); font-size: 0.9em; line-height: 1.4;\">\n {{ param.Description }}\n </p>\n }\n <!-- Type-specific Information -->\n <div style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: var(--mj-text-muted);\"></i>\n {{ getParamTypeDescription(param) }}\n </span>\n </div>\n <!-- Additional Parameter Details -->\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; margin-top: 12px;\">\n @if (param.DefaultValue) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Default Value</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.DefaultValue }}</code>\n </div>\n }\n @if (param.EntityID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Entity</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.Entity || 'Entity ID: ' + param.EntityID }}</span>\n </div>\n }\n @if (param.LinkedParameterName) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Linked To</label>\n <span style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">\n {{ param.LinkedParameterName }}\n @if (param.LinkedParameterField) {\n ({{ param.LinkedParameterField }})\n }\n </span>\n </div>\n }\n @if (param.ExtraFilter) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Filter</label>\n <code style=\"font-size: 0.8em; color: var(--mj-text-secondary); word-break: break-all;\">{{ param.ExtraFilter }}</code>\n </div>\n }\n @if (param.RecordID) {\n <div style=\"background: var(--mj-bg-surface-card); padding: 8px 12px; border-radius: 4px; border: 1px solid var(--mj-border-default);\">\n <label style=\"display: block; font-size: 0.8em; color: var(--mj-text-muted); margin-bottom: 2px;\">Record ID</label>\n <code style=\"font-size: 0.85em; color: var(--mj-text-secondary);\">{{ param.RecordID }}</code>\n </div>\n }\n </div>\n </div>\n }\n </div>\n <!-- Help Text -->\n <div style=\"margin-top: 16px; padding: 12px; background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface)); border-radius: 6px; border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, var(--mj-border-default));\">\n <div style=\"display: flex; align-items: flex-start; gap: 8px;\">\n <i class=\"fa-solid fa-lightbulb\" style=\"color: var(--mj-brand-primary); margin-top: 2px;\"></i>\n <div style=\"flex: 1; font-size: 0.85em; color: var(--mj-brand-primary); line-height: 1.5;\">\n <strong>Using Template Parameters:</strong> When executing this prompt, you'll be prompted to provide values for all required parameters.\n Parameters can be simple values (text, numbers) or complex data structures (JSON objects, database records, or entire entity collections).\n The template will use these parameters to generate dynamic content based on the values provided at execution time.\n </div>\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Output Example Expansion Panel (when OutputType = object) -->\n @if (showOutputExample) {\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: var(--mj-text-muted);\"></i>\n Output Example (JSON)\n <span style=\"color: #dc3545; font-size: 0.8em; font-weight: normal;\">• Required for object output type</span>\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px;\">\n @if (EditMode) {\n <mj-code-editor\n [(ngModel)]=\"record.OutputExample\"\n name=\"outputExample\"\n language=\"json\"\n placeholder=\"Enter JSON example structure...\"\n style=\"width: 100%; height: 200px; border: 1px solid var(--mj-border-default); border-radius: 4px;\">\n </mj-code-editor>\n <div style=\"margin-top: 8px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i> Provide a JSON example that defines the expected structure for object output validation.\n </div>\n } @else if (record.OutputExample) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 4px; padding: 12px; font-family: 'Courier New', monospace; font-size: 0.9em; white-space: pre-wrap; overflow: auto; max-height: 250px;\">{{ record.OutputExample }}</div>\n } @else {\n <mj-alert Variant=\"warning\">Output example is required when output type is 'object'</mj-alert>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Execution History Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-history\" style=\"color: var(--mj-text-muted);\"></i>\n Execution History\n @if (executionHistory.length > 0) {\n <span style=\"color: var(--mj-text-muted); font-weight: normal;\">({{ executionHistory.length }})</span>\n }\n </span>\n </ng-template>\n <!-- Custom Execution History Viewer -->\n <div style=\"padding: 16px;\">\n @if (isLoadingHistory) {\n <div style=\"text-align: center; padding: 40px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; margin-bottom: 12px;\"></i>\n <p>Loading execution history...</p>\n </div>\n } @else if (executionHistory.length === 0) {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Title=\"No execution history yet\"\n Message=\"Run this prompt to see execution history here\" />\n } @else {\n <!-- Sort Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;\">\n <div style=\"color: var(--mj-text-muted); font-size: 0.9em;\">\n Showing {{ executionHistory.length }} executions\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em;\">Sort by:</span>\n <div class=\"mj-button-group\">\n <button mjButton\n [class.active]=\"historySortField === 'runAt'\"\n (click)=\"changeHistorySort('runAt')\"\n size=\"sm\">\n Date\n @if (historySortField === 'runAt') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'executionTime'\"\n (click)=\"changeHistorySort('executionTime')\"\n size=\"sm\">\n Duration\n @if (historySortField === 'executionTime') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'tokens'\"\n (click)=\"changeHistorySort('tokens')\"\n size=\"sm\">\n Tokens\n @if (historySortField === 'tokens') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n <button mjButton\n [class.active]=\"historySortField === 'cost'\"\n (click)=\"changeHistorySort('cost')\"\n size=\"sm\">\n Cost\n @if (historySortField === 'cost') {\n <i [class]=\"'fa-solid fa-sort-' + (historySortDirection === 'asc' ? 'up' : 'down')\"\n style=\"margin-left: 4px; font-size: 0.8em;\"></i>\n }\n </button>\n </div>\n </div>\n </div>\n <!-- Execution History Table -->\n <div style=\"border: 1px solid var(--mj-border-default); border-radius: 8px; overflow: hidden;\">\n <table style=\"width: 100%; border-collapse: collapse;\">\n <thead>\n <tr style=\"background: var(--mj-bg-surface-sunken); border-bottom: 2px solid var(--mj-border-default);\">\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Status</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Date & Time</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Model</th>\n <th style=\"padding: 12px; text-align: left; font-weight: 600; color: var(--mj-text-secondary);\">Duration</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Tokens</th>\n <th style=\"padding: 12px; text-align: right; font-weight: 600; color: var(--mj-text-secondary);\">Cost</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Type</th>\n <th style=\"padding: 12px; text-align: center; font-weight: 600; color: var(--mj-text-secondary);\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (run of executionHistory; track run.ID; let i = $index) {\n <tr class=\"history-row\"\n [class.even-row]=\"i % 2 === 0\"\n style=\"border-bottom: 1px solid var(--mj-border-default);\">\n <td style=\"padding: 12px;\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i [class]=\"'fa-solid ' + getExecutionStatusIcon(run.Success)\"\n [style.color]=\"getExecutionStatusColor(run.Success)\"></i>\n <span [style.color]=\"getExecutionStatusColor(run.Success)\" style=\"font-weight: 500;\">\n {{ run.Success === true ? 'Success' : run.Success === false ? 'Failed' : 'Running' }}\n </span>\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ run.RunAt | date:'short' }}\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n <span style=\"display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-microchip\" style=\"color: var(--mj-text-muted);\"></i>\n {{ run.Model || 'Unknown' }}\n </span>\n </td>\n <td style=\"padding: 12px; color: var(--mj-text-secondary);\">\n {{ formatDuration(run.ExecutionTimeMS) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatTokens(run.TokensUsed) }}\n </td>\n <td style=\"padding: 12px; text-align: right; color: var(--mj-text-secondary);\">\n {{ formatCost(run.TotalCost || run.Cost) }}\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n @if (run.RunType) {\n <span style=\"padding: 4px 8px; border-radius: 12px; background: var(--mj-bg-surface-sunken); \n color: var(--mj-text-secondary); font-size: 0.85em; font-weight: 500;\">\n {{ run.RunType }}\n </span>\n }\n </td>\n <td style=\"padding: 12px; text-align: center;\">\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"navigateToPromptRun(run.ID)\"\n title=\"View details\">\n <i class=\"fa-solid fa-external-link\"></i>\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n <!-- Cache Expansion Panel -->\n @if (record.IsSaved && record.EnableCaching) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: var(--mj-text-muted);\"></i>\n Result Cache\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Result Cache','AIPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Result Cache')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n <!-- Related Items Expansion Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-link\" style=\"color: var(--mj-text-muted);\"></i>\n Related Items\n </span>\n </ng-template>\n <!-- Direct Content Projection -->\n <div style=\"padding: 16px 0;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- AI Agents -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">AI Agents Using This Prompt</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Prompts','PromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n <!-- Result Selector References -->\n <div>\n <h6 style=\"margin: 0 0 12px 0; color: var(--mj-text-secondary);\">Prompts Using This as Result Selector</h6>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','ResultSelectorPromptID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n}\n\n\n<!-- AI Prompt Test Harness -->\n@if (showTestHarness) {\n <mj-window\n [Width]=\"1200\"\n [Height]=\"800\"\n [MinWidth]=\"800\"\n [MinHeight]=\"600\"\n [Draggable]=\"true\"\n [Resizable]=\"true\"\n [Visible]=\"true\"\n (Close)=\"onTestHarnessVisibilityChanged(false)\"\n [Title]=\"'Run AI Prompt - ' + (record.Name || 'Untitled')\">\n <mj-ai-test-harness\n [entity]=\"record\"\n [mode]=\"'prompt'\"\n [isVisible]=\"showTestHarness\"\n (visibilityChange)=\"onTestHarnessVisibilityChanged($event)\">\n </mj-ai-test-harness>\n </mj-window>\n}", styles: ["/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n padding: 10px;\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form {\n min-height: 0 !important;\n}\n\n.custom-toolbar-actions {\n margin-left: auto;\n}\n\n.status-badge {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n font-weight: 500;\n letter-spacing: 0.02em;\n}\n\n.config-summary {\n position: sticky;\n top: 0;\n max-height: 600px;\n overflow-y: auto;\n}\n\n.config-item {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.config-item:last-child {\n border-bottom: none;\n}\n\n.template-tab-content {\n background: var(--mj-bg-surface);\n}\n\n.template-header h5 {\n font-size: 1.1em;\n}\n\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n/* Template-editor placeholders fill the editor pane */\nmj-empty-state.no-template-state,\nmj-empty-state.invalid-template-state {\n flex: 1;\n}\n\n.template-editor-container {\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-md);\n}\n\n/* Grid layout adjustments */\n@media (max-width: 1200px) {\n .record-form-container .mj-tab-body > div {\n grid-template-columns: 1fr !important;\n gap: 20px;\n }\n\n .config-summary {\n order: -1;\n position: static;\n max-height: none;\n }\n}\n\n/* Responsive toolbar */\n@media (max-width: 768px) {\n .custom-toolbar-actions {\n flex-direction: column;\n gap: 4px !important;\n }\n\n .status-badge {\n align-self: flex-start;\n }\n}\n\n/* Ensure proper spacing in form sections */\n.record-form-container mj-form-section {\n padding: 16px;\n}\n\n/* Smooth transitions for better UX */\n.status-badge,\n.config-item,\n.template-header {\n transition: all 0.2s ease;\n}\n\n.config-item:hover {\n background-color: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin: 0 -8px;\n padding: 8px;\n}\n\n/* Execution History Table Styles */\n.history-row {\n transition: background 0.2s;\n}\n\n.history-row:not(.even-row) {\n background: var(--mj-bg-surface-card);\n}\n\n.history-row.even-row {\n background: var(--mj-bg-surface);\n}\n\n.history-row:hover {\n background: var(--mj-border-default) !important;\n}\n\n/* Template Parameters Styles */\n.parameter-card {\n position: relative;\n overflow: hidden;\n}\n\n.parameter-card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 4px;\n background: inherit;\n transition: width 0.2s;\n}\n\n.parameter-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.parameter-card:hover::before {\n width: 6px;\n}\n\n.type-badge {\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n transition: transform 0.2s;\n}\n\n.parameter-card:hover .type-badge {\n transform: scale(1.05);\n}\n\n/* Parameter type icons animation */\n.parameter-card i.fa-solid {\n transition: transform 0.3s;\n}\n\n.parameter-card:hover i.fa-solid {\n transform: rotate(360deg);\n}\n\n/* Grid responsive behavior */\n@media (max-width: 768px) {\n .parameter-card {\n margin-bottom: 8px;\n }\n\n .parameter-card h6 {\n font-size: 0.95em;\n }\n\n .type-badge {\n font-size: 0.7em !important;\n }\n}\n"] }]
|
|
3059
3030
|
}], null, { templateEditor: [{
|
|
3060
3031
|
type: ViewChild,
|
|
3061
3032
|
args: ['templateEditor']
|