@memberjunction/ng-core-entity-forms 6.2.0-edge.4 → 6.2.0-edge.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +2 -0
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +103 -95
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +13 -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 +37 -17
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +9 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +193 -178
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.d.ts +48 -0
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.d.ts.map +1 -0
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.js +195 -0
- package/dist/lib/custom/AIPromptRuns/prompt-run-data-capture-note.component.js.map +1 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +2 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +345 -323
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +2 -0
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +29 -11
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +2 -0
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -0
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +11 -4
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +14 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +15 -0
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +186 -92
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +2 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +2 -0
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +6 -3
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +3 -3
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts.map +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +5 -7
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +19 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +20 -27
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +14 -6
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +8 -8
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +37 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +155 -79
- 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.d.ts +8 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +59 -8
- 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 +34 -9
- 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 +281 -150
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js +3 -1
- package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +82 -80
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +10 -0
- package/dist/lib/custom/custom-forms.module.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 +65 -47
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +17 -17
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +64 -24
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +74 -52
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.js +86 -0
- package/dist/lib/generated/Entities/MJAIAgentSessionRecordingShard/mjaiagentsessionrecordingshard.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.js +132 -0
- package/dist/lib/generated/Entities/MJAIAgentUserPolicy/mjaiagentuserpolicy.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js +12 -10
- package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +86 -32
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js +25 -7
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +180 -160
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +16 -14
- package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +23 -21
- package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +21 -19
- package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJCalendarEventLink/mjcalendareventlink.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.js +64 -0
- package/dist/lib/generated/Entities/MJCalendarSyncState/mjcalendarsyncstate.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +77 -21
- package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +28 -10
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.js +189 -0
- package/dist/lib/generated/Entities/MJCompanyIntegrationObject/mjcompanyintegrationobject.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.js +116 -0
- package/dist/lib/generated/Entities/MJCompanyIntegrationObjectField/mjcompanyintegrationobjectfield.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +51 -35
- package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js +36 -18
- package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +74 -60
- package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js +30 -32
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +43 -35
- package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +21 -19
- package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +69 -75
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +35 -17
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js +45 -29
- package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +19 -17
- package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.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 +128 -92
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.js +129 -0
- package/dist/lib/generated/Entities/MJEntityAlternateBaseView/mjentityalternatebaseview.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +27 -9
- package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.js +130 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineVersion/mjfeaturepipelineversion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -14
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js +23 -19
- package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +30 -12
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +26 -8
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +25 -6
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +29 -27
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js +17 -15
- package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +73 -59
- package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJQueryEntity/mjqueryentity.form.component.js +10 -8
- package/dist/lib/generated/Entities/MJQueryEntity/mjqueryentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.form.component.js +12 -4
- package/dist/lib/generated/Entities/MJQueryParameter/mjqueryparameter.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 +27 -9
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +29 -11
- package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js +13 -3
- package/dist/lib/generated/Entities/MJTheme/mjtheme.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +256 -130
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js +31 -25
- package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +50 -38
- package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +446 -438
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +24 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/feature-values/feature-values.logic.d.ts +55 -0
- package/dist/lib/panels/feature-values/feature-values.logic.d.ts.map +1 -0
- package/dist/lib/panels/feature-values/feature-values.logic.js +88 -0
- package/dist/lib/panels/feature-values/feature-values.logic.js.map +1 -0
- package/dist/lib/panels/feature-values/feature-values.panel.d.ts +39 -0
- package/dist/lib/panels/feature-values/feature-values.panel.d.ts.map +1 -0
- package/dist/lib/panels/feature-values/feature-values.panel.js +303 -0
- package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +10 -0
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +15 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +4 -0
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +77 -61
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts +37 -0
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +425 -286
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +48 -48
|
@@ -35,7 +35,7 @@ function _forTrack0($index, $item) { return this.getModelTrackId($item) || $inde
|
|
|
35
35
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
36
36
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
37
37
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
38
|
-
i0.ɵɵelementStart(0, "input",
|
|
38
|
+
i0.ɵɵelementStart(0, "input", 52);
|
|
39
39
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
|
|
40
40
|
i0.ɵɵelementEnd();
|
|
41
41
|
} if (rf & 2) {
|
|
@@ -43,10 +43,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_9_Template(rf
|
|
|
43
43
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
44
44
|
} }
|
|
45
45
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
-
i0.ɵɵelementStart(0, "h4",
|
|
46
|
+
i0.ɵɵelementStart(0, "h4", 53);
|
|
47
47
|
i0.ɵɵtext(1);
|
|
48
48
|
i0.ɵɵelementEnd();
|
|
49
|
-
i0.ɵɵelementStart(2, "span",
|
|
49
|
+
i0.ɵɵelementStart(2, "span", 54);
|
|
50
50
|
i0.ɵɵtext(3);
|
|
51
51
|
i0.ɵɵelementEnd();
|
|
52
52
|
} if (rf & 2) {
|
|
@@ -59,14 +59,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_10_Template(r
|
|
|
59
59
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.record.Status, " ");
|
|
60
60
|
} }
|
|
61
61
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
-
i0.ɵɵelementStart(0, "div",
|
|
63
|
-
i0.ɵɵelement(1, "i",
|
|
62
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
63
|
+
i0.ɵɵelement(1, "i", 59);
|
|
64
64
|
i0.ɵɵtext(2, " Loading types... ");
|
|
65
65
|
i0.ɵɵelementEnd();
|
|
66
66
|
} }
|
|
67
67
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
68
68
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
69
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
69
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 60);
|
|
70
70
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TypeID, $event) || (ctx_r1.record.TypeID = $event); return i0.ɵɵresetView($event); });
|
|
71
71
|
i0.ɵɵelementEnd();
|
|
72
72
|
} if (rf & 2) {
|
|
@@ -76,18 +76,18 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditiona
|
|
|
76
76
|
} }
|
|
77
77
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
78
78
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
79
|
-
i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label",
|
|
79
|
+
i0.ɵɵelementStart(0, "div", 13)(1, "div")(2, "label", 46);
|
|
80
80
|
i0.ɵɵtext(3, "Status");
|
|
81
81
|
i0.ɵɵelementEnd();
|
|
82
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
82
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 55);
|
|
83
83
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template_mj_dropdown_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
|
|
84
84
|
i0.ɵɵelementEnd()();
|
|
85
|
-
i0.ɵɵelementStart(5, "div")(6, "label",
|
|
85
|
+
i0.ɵɵelementStart(5, "div")(6, "label", 46);
|
|
86
86
|
i0.ɵɵtext(7, " Type ");
|
|
87
|
-
i0.ɵɵelementStart(8, "span",
|
|
87
|
+
i0.ɵɵelementStart(8, "span", 56);
|
|
88
88
|
i0.ɵɵtext(9, "*");
|
|
89
89
|
i0.ɵɵelementEnd()();
|
|
90
|
-
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template, 3, 0, "div",
|
|
90
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_10_Template, 3, 0, "div", 57)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Conditional_11_Template, 1, 4, "mj-dropdown", 58);
|
|
91
91
|
i0.ɵɵelementEnd()();
|
|
92
92
|
} if (rf & 2) {
|
|
93
93
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -99,7 +99,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_11_Template(r
|
|
|
99
99
|
} }
|
|
100
100
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
101
101
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
102
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
102
|
+
i0.ɵɵelementStart(0, "textarea", 61);
|
|
103
103
|
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_12_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
|
|
104
104
|
i0.ɵɵelementEnd();
|
|
105
105
|
} if (rf & 2) {
|
|
@@ -118,7 +118,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_13_Template(r
|
|
|
118
118
|
} }
|
|
119
119
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
120
120
|
i0.ɵɵelementStart(0, "div", 17);
|
|
121
|
-
i0.ɵɵelement(1, "i",
|
|
121
|
+
i0.ɵɵelement(1, "i", 62);
|
|
122
122
|
i0.ɵɵelementStart(2, "span", 19);
|
|
123
123
|
i0.ɵɵtext(3, "Type:");
|
|
124
124
|
i0.ɵɵelementEnd();
|
|
@@ -132,14 +132,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_15_Template(r
|
|
|
132
132
|
} }
|
|
133
133
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
134
134
|
i0.ɵɵelementStart(0, "div", 17);
|
|
135
|
-
i0.ɵɵelement(1, "i",
|
|
136
|
-
i0.ɵɵelementStart(2, "span",
|
|
135
|
+
i0.ɵɵelement(1, "i", 63);
|
|
136
|
+
i0.ɵɵelementStart(2, "span", 64);
|
|
137
137
|
i0.ɵɵtext(3, "Caching Enabled");
|
|
138
138
|
i0.ɵɵelementEnd()();
|
|
139
139
|
} }
|
|
140
140
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
141
141
|
i0.ɵɵelementStart(0, "div", 17);
|
|
142
|
-
i0.ɵɵelement(1, "i",
|
|
142
|
+
i0.ɵɵelement(1, "i", 65);
|
|
143
143
|
i0.ɵɵelementStart(2, "span", 19);
|
|
144
144
|
i0.ɵɵtext(3, "Effort Level:");
|
|
145
145
|
i0.ɵɵelementEnd();
|
|
@@ -153,9 +153,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_29_Template(r
|
|
|
153
153
|
} }
|
|
154
154
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
155
155
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
156
|
-
i0.ɵɵelementStart(0, "button",
|
|
156
|
+
i0.ɵɵelementStart(0, "button", 66);
|
|
157
157
|
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_32_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openTestHarness()); });
|
|
158
|
-
i0.ɵɵelement(1, "i",
|
|
158
|
+
i0.ɵɵelement(1, "i", 67);
|
|
159
159
|
i0.ɵɵtext(2, " Run ");
|
|
160
160
|
i0.ɵɵelementEnd();
|
|
161
161
|
} }
|
|
@@ -187,7 +187,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_33_Template(r
|
|
|
187
187
|
i0.ɵɵconditional(!ctx_r1.template && ctx_r1.record.TemplateID ? 3 : -1);
|
|
188
188
|
} }
|
|
189
189
|
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
190
|
-
i0.ɵɵelementStart(0, "span",
|
|
190
|
+
i0.ɵɵelementStart(0, "span", 69);
|
|
191
191
|
i0.ɵɵtext(1);
|
|
192
192
|
i0.ɵɵelementEnd();
|
|
193
193
|
} if (rf & 2) {
|
|
@@ -196,10 +196,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditiona
|
|
|
196
196
|
i0.ɵɵtextInterpolate1("\u2022 ", ctx_r1.template.Name);
|
|
197
197
|
} }
|
|
198
198
|
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template(rf, ctx) { if (rf & 1) {
|
|
199
|
-
i0.ɵɵelementStart(0, "span",
|
|
199
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
200
200
|
i0.ɵɵelement(1, "i", 21);
|
|
201
201
|
i0.ɵɵtext(2, " Template Editor ");
|
|
202
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template, 2, 1, "span",
|
|
202
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Conditional_3_Template, 2, 1, "span", 69);
|
|
203
203
|
i0.ɵɵelementEnd();
|
|
204
204
|
} if (rf & 2) {
|
|
205
205
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -208,30 +208,30 @@ function MJAIPromptFormComponentExtended_Conditional_1_ng_template_36_Template(r
|
|
|
208
208
|
} }
|
|
209
209
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
210
210
|
i0.ɵɵelementStart(0, "div", 31);
|
|
211
|
-
i0.ɵɵelement(1, "i",
|
|
211
|
+
i0.ɵɵelement(1, "i", 70);
|
|
212
212
|
i0.ɵɵtext(2, " Loading template... ");
|
|
213
213
|
i0.ɵɵelementEnd();
|
|
214
214
|
} }
|
|
215
215
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
216
216
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
217
|
-
i0.ɵɵelementStart(0, "button",
|
|
217
|
+
i0.ɵɵelementStart(0, "button", 74);
|
|
218
218
|
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()); });
|
|
219
|
-
i0.ɵɵelement(1, "i",
|
|
219
|
+
i0.ɵɵelement(1, "i", 75);
|
|
220
220
|
i0.ɵɵtext(2, " Create New Template ");
|
|
221
221
|
i0.ɵɵelementEnd();
|
|
222
222
|
} }
|
|
223
223
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
224
224
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
225
|
-
i0.ɵɵelementStart(0, "button",
|
|
225
|
+
i0.ɵɵelementStart(0, "button", 76);
|
|
226
226
|
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()); });
|
|
227
|
-
i0.ɵɵelement(1, "i",
|
|
227
|
+
i0.ɵɵelement(1, "i", 77);
|
|
228
228
|
i0.ɵɵtext(2, " Link Existing Template ");
|
|
229
229
|
i0.ɵɵelementEnd();
|
|
230
230
|
} }
|
|
231
231
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
232
|
-
i0.ɵɵelementStart(0, "mj-empty-state", 32)(1, "div",
|
|
233
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template, 3, 0, "button",
|
|
234
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template, 3, 0, "button",
|
|
232
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 32)(1, "div", 71);
|
|
233
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_2_Template, 3, 0, "button", 72);
|
|
234
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Conditional_3_Template, 3, 0, "button", 73);
|
|
235
235
|
i0.ɵɵelementEnd()();
|
|
236
236
|
} if (rf & 2) {
|
|
237
237
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -242,20 +242,20 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_39_Template(r
|
|
|
242
242
|
} }
|
|
243
243
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
244
244
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
245
|
-
i0.ɵɵelementStart(0, "button",
|
|
245
|
+
i0.ɵɵelementStart(0, "button", 74);
|
|
246
246
|
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()); });
|
|
247
|
-
i0.ɵɵelement(1, "i",
|
|
247
|
+
i0.ɵɵelement(1, "i", 75);
|
|
248
248
|
i0.ɵɵtext(2, " Create New Template ");
|
|
249
249
|
i0.ɵɵelementEnd();
|
|
250
250
|
} }
|
|
251
251
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template(rf, ctx) { if (rf & 1) {
|
|
252
252
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
253
|
-
i0.ɵɵelementStart(0, "mj-empty-state", 33)(1, "div",
|
|
253
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 33)(1, "div", 71)(2, "button", 76);
|
|
254
254
|
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()); });
|
|
255
|
-
i0.ɵɵelement(3, "i",
|
|
255
|
+
i0.ɵɵelement(3, "i", 78);
|
|
256
256
|
i0.ɵɵtext(4, " Retry Loading ");
|
|
257
257
|
i0.ɵɵelementEnd();
|
|
258
|
-
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template, 3, 0, "button",
|
|
258
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Conditional_5_Template, 3, 0, "button", 72);
|
|
259
259
|
i0.ɵɵelementEnd()();
|
|
260
260
|
} if (rf & 2) {
|
|
261
261
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -264,24 +264,24 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_40_Template(r
|
|
|
264
264
|
} }
|
|
265
265
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
266
266
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
267
|
-
i0.ɵɵelementStart(0, "button",
|
|
267
|
+
i0.ɵɵelementStart(0, "button", 84);
|
|
268
268
|
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()); });
|
|
269
|
-
i0.ɵɵelement(1, "i",
|
|
269
|
+
i0.ɵɵelement(1, "i", 85);
|
|
270
270
|
i0.ɵɵtext(2, " Change Template ");
|
|
271
271
|
i0.ɵɵelementEnd();
|
|
272
272
|
} }
|
|
273
273
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
274
274
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
275
|
-
i0.ɵɵelementStart(0, "button",
|
|
275
|
+
i0.ɵɵelementStart(0, "button", 86);
|
|
276
276
|
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()); });
|
|
277
|
-
i0.ɵɵelement(1, "i",
|
|
277
|
+
i0.ɵɵelement(1, "i", 87);
|
|
278
278
|
i0.ɵɵtext(2, " Open in New Window ");
|
|
279
279
|
i0.ɵɵelementEnd();
|
|
280
280
|
} }
|
|
281
281
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
282
|
-
i0.ɵɵelementStart(0, "div",
|
|
283
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template, 3, 0, "button",
|
|
284
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template, 3, 0, "button",
|
|
282
|
+
i0.ɵɵelementStart(0, "div", 79);
|
|
283
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_1_Template, 3, 0, "button", 82);
|
|
284
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Conditional_2_Template, 3, 0, "button", 83);
|
|
285
285
|
i0.ɵɵelementEnd();
|
|
286
286
|
} if (rf & 2) {
|
|
287
287
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -293,8 +293,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditiona
|
|
|
293
293
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(rf, ctx) { if (rf & 1) {
|
|
294
294
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
295
295
|
i0.ɵɵelementStart(0, "div", 34);
|
|
296
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template, 3, 2, "div",
|
|
297
|
-
i0.ɵɵelementStart(2, "div",
|
|
296
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Conditional_1_Template, 3, 2, "div", 79);
|
|
297
|
+
i0.ɵɵelementStart(2, "div", 80)(3, "mj-template-editor", 81, 1);
|
|
298
298
|
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)); });
|
|
299
299
|
i0.ɵɵelementEnd()()();
|
|
300
300
|
} if (rf & 2) {
|
|
@@ -305,7 +305,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_41_Template(r
|
|
|
305
305
|
i0.ɵɵproperty("template", ctx_r1.template)("config", ctx_r1.templateEditorConfig);
|
|
306
306
|
} }
|
|
307
307
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
308
|
-
i0.ɵɵelementStart(0, "span",
|
|
308
|
+
i0.ɵɵelementStart(0, "span", 91);
|
|
309
309
|
i0.ɵɵtext(1);
|
|
310
310
|
i0.ɵɵelementEnd();
|
|
311
311
|
} if (rf & 2) {
|
|
@@ -314,12 +314,12 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_templat
|
|
|
314
314
|
i0.ɵɵtextInterpolate(ctx_r1.promptModels.length);
|
|
315
315
|
} }
|
|
316
316
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
317
|
-
i0.ɵɵelementStart(0, "span",
|
|
318
|
-
i0.ɵɵelement(1, "i",
|
|
317
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
318
|
+
i0.ɵɵelement(1, "i", 90);
|
|
319
319
|
i0.ɵɵtext(2, " Models ");
|
|
320
|
-
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span",
|
|
321
|
-
i0.ɵɵelementStart(4, "span",
|
|
322
|
-
i0.ɵɵelement(5, "i",
|
|
320
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Conditional_3_Template, 2, 1, "span", 91);
|
|
321
|
+
i0.ɵɵelementStart(4, "span", 92);
|
|
322
|
+
i0.ɵɵelement(5, "i", 93);
|
|
323
323
|
i0.ɵɵtext(6, " Priority order (first available model will be used) ");
|
|
324
324
|
i0.ɵɵelementEnd()();
|
|
325
325
|
} if (rf & 2) {
|
|
@@ -328,22 +328,22 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_templat
|
|
|
328
328
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 0 ? 3 : -1);
|
|
329
329
|
} }
|
|
330
330
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
331
|
-
i0.ɵɵelementStart(0, "div",
|
|
332
|
-
i0.ɵɵelement(1, "i",
|
|
331
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
332
|
+
i0.ɵɵelement(1, "i", 59);
|
|
333
333
|
i0.ɵɵtext(2, " Loading models... ");
|
|
334
334
|
i0.ɵɵelementEnd();
|
|
335
335
|
} }
|
|
336
336
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
337
337
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
338
|
-
i0.ɵɵelementStart(0, "button",
|
|
338
|
+
i0.ɵɵelementStart(0, "button", 96);
|
|
339
339
|
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()); });
|
|
340
|
-
i0.ɵɵelement(1, "i",
|
|
340
|
+
i0.ɵɵelement(1, "i", 75);
|
|
341
341
|
i0.ɵɵtext(2, " Add Model ");
|
|
342
342
|
i0.ɵɵelementEnd();
|
|
343
343
|
} }
|
|
344
344
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
345
|
-
i0.ɵɵelementStart(0, "mj-empty-state",
|
|
346
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template, 3, 0, "button",
|
|
345
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 94);
|
|
346
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Conditional_1_Template, 3, 0, "button", 95);
|
|
347
347
|
i0.ɵɵelementEnd();
|
|
348
348
|
} if (rf & 2) {
|
|
349
349
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -351,14 +351,14 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
351
351
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 1 : -1);
|
|
352
352
|
} }
|
|
353
353
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
354
|
-
i0.ɵɵelementStart(0, "div",
|
|
355
|
-
i0.ɵɵelement(1, "i",
|
|
354
|
+
i0.ɵɵelementStart(0, "div", 97);
|
|
355
|
+
i0.ɵɵelement(1, "i", 102);
|
|
356
356
|
i0.ɵɵtext(2, " Models are tried in priority order (highest priority first). The first available model that meets requirements will be used for execution. ");
|
|
357
357
|
i0.ɵɵelementEnd();
|
|
358
358
|
} }
|
|
359
359
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
360
|
-
i0.ɵɵelement(0, "i",
|
|
361
|
-
i0.ɵɵelementStart(1, "span",
|
|
360
|
+
i0.ɵɵelement(0, "i", 118);
|
|
361
|
+
i0.ɵɵelementStart(1, "span", 119);
|
|
362
362
|
i0.ɵɵtext(2);
|
|
363
363
|
i0.ɵɵelementEnd();
|
|
364
364
|
} if (rf & 2) {
|
|
@@ -367,7 +367,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
367
367
|
i0.ɵɵtextInterpolate1("#", ɵ$index_289_r17 + 1);
|
|
368
368
|
} }
|
|
369
369
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
370
|
-
i0.ɵɵelementStart(0, "span",
|
|
370
|
+
i0.ɵɵelementStart(0, "span", 105);
|
|
371
371
|
i0.ɵɵtext(1);
|
|
372
372
|
i0.ɵɵelementEnd();
|
|
373
373
|
} if (rf & 2) {
|
|
@@ -380,7 +380,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
380
380
|
} }
|
|
381
381
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
382
382
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
383
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
383
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 120);
|
|
384
384
|
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); });
|
|
385
385
|
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)); });
|
|
386
386
|
i0.ɵɵelementEnd();
|
|
@@ -402,7 +402,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
402
402
|
} }
|
|
403
403
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
404
404
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
405
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
405
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 123);
|
|
406
406
|
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); });
|
|
407
407
|
i0.ɵɵelementEnd();
|
|
408
408
|
} if (rf & 2) {
|
|
@@ -412,7 +412,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
412
412
|
i0.ɵɵproperty("name", "vendorId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.getVendorsForModelSync(model_r19.ModelID))("ValuePrimitive", true)("Filterable", true);
|
|
413
413
|
} }
|
|
414
414
|
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) {
|
|
415
|
-
i0.ɵɵelementStart(0, "span",
|
|
415
|
+
i0.ɵɵelementStart(0, "span", 126);
|
|
416
416
|
i0.ɵɵtext(1);
|
|
417
417
|
i0.ɵɵelementEnd();
|
|
418
418
|
} if (rf & 2) {
|
|
@@ -422,9 +422,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
422
422
|
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID), ")");
|
|
423
423
|
} }
|
|
424
424
|
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) {
|
|
425
|
-
i0.ɵɵelementStart(0, "span",
|
|
425
|
+
i0.ɵɵelementStart(0, "span", 125);
|
|
426
426
|
i0.ɵɵtext(1);
|
|
427
|
-
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",
|
|
427
|
+
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", 126);
|
|
428
428
|
i0.ɵɵelementEnd();
|
|
429
429
|
} if (rf & 2) {
|
|
430
430
|
const model_r19 = i0.ɵɵnextContext(4).$implicit;
|
|
@@ -436,37 +436,37 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
436
436
|
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, ctx_r1.getVendorsForModelSync(model_r19.ModelID)[0].ID) !== "Active" ? 2 : -1);
|
|
437
437
|
} }
|
|
438
438
|
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) {
|
|
439
|
-
i0.ɵɵelementStart(0, "span",
|
|
439
|
+
i0.ɵɵelementStart(0, "span", 121);
|
|
440
440
|
i0.ɵɵtext(1, "No vendors available");
|
|
441
441
|
i0.ɵɵelementEnd();
|
|
442
442
|
} }
|
|
443
443
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
444
|
-
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",
|
|
444
|
+
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", 124)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Conditional_1_Template, 2, 0, "span", 121);
|
|
445
445
|
} if (rf & 2) {
|
|
446
446
|
const model_r19 = i0.ɵɵnextContext(3).$implicit;
|
|
447
447
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
448
448
|
i0.ɵɵconditional(ctx_r1.getVendorsForModelSync(model_r19.ModelID).length === 1 ? 0 : 1);
|
|
449
449
|
} }
|
|
450
450
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
451
|
-
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",
|
|
451
|
+
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", 122)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_0_Conditional_1_Template, 2, 1);
|
|
452
452
|
} if (rf & 2) {
|
|
453
453
|
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
454
454
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
455
455
|
i0.ɵɵconditional(ctx_r1.shouldShowVendorDropdown(model_r19.ModelID) ? 0 : 1);
|
|
456
456
|
} }
|
|
457
457
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
458
|
-
i0.ɵɵelementStart(0, "span",
|
|
458
|
+
i0.ɵɵelementStart(0, "span", 121);
|
|
459
459
|
i0.ɵɵtext(1, "Select model first");
|
|
460
460
|
i0.ɵɵelementEnd();
|
|
461
461
|
} }
|
|
462
462
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
463
|
-
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",
|
|
463
|
+
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", 121);
|
|
464
464
|
} if (rf & 2) {
|
|
465
465
|
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
466
466
|
i0.ɵɵconditional(model_r19.ModelID ? 0 : 1);
|
|
467
467
|
} }
|
|
468
468
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
469
|
-
i0.ɵɵelementStart(0, "span",
|
|
469
|
+
i0.ɵɵelementStart(0, "span", 126);
|
|
470
470
|
i0.ɵɵtext(1);
|
|
471
471
|
i0.ɵɵelementEnd();
|
|
472
472
|
} if (rf & 2) {
|
|
@@ -476,9 +476,9 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
476
476
|
i0.ɵɵtextInterpolate1("(", ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID), ")");
|
|
477
477
|
} }
|
|
478
478
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
479
|
-
i0.ɵɵelementStart(0, "span",
|
|
479
|
+
i0.ɵɵelementStart(0, "span", 110);
|
|
480
480
|
i0.ɵɵtext(1);
|
|
481
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span",
|
|
481
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Conditional_2_Template, 2, 1, "span", 126);
|
|
482
482
|
i0.ɵɵelementEnd();
|
|
483
483
|
} if (rf & 2) {
|
|
484
484
|
const model_r19 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -490,25 +490,25 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
490
490
|
i0.ɵɵconditional(ctx_r1.getModelVendorStatus(model_r19.ModelID, model_r19.VendorID) !== "Active" ? 2 : -1);
|
|
491
491
|
} }
|
|
492
492
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
493
|
-
i0.ɵɵelementStart(0, "span",
|
|
493
|
+
i0.ɵɵelementStart(0, "span", 128);
|
|
494
494
|
i0.ɵɵtext(1, "-");
|
|
495
495
|
i0.ɵɵelementEnd();
|
|
496
496
|
} }
|
|
497
497
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
498
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span",
|
|
498
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_0_Template, 3, 4, "span", 127)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_9_Conditional_1_Template, 2, 0, "span", 128);
|
|
499
499
|
} if (rf & 2) {
|
|
500
500
|
const model_r19 = i0.ɵɵnextContext().$implicit;
|
|
501
501
|
i0.ɵɵconditional(model_r19.VendorID && model_r19.ModelID ? 0 : 1);
|
|
502
502
|
} }
|
|
503
503
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
504
|
-
i0.ɵɵelementStart(0, "div",
|
|
505
|
-
i0.ɵɵelement(1, "i",
|
|
504
|
+
i0.ɵɵelementStart(0, "div", 129);
|
|
505
|
+
i0.ɵɵelement(1, "i", 59);
|
|
506
506
|
i0.ɵɵtext(2, " Loading... ");
|
|
507
507
|
i0.ɵɵelementEnd();
|
|
508
508
|
} }
|
|
509
509
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
510
510
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
511
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
511
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 131);
|
|
512
512
|
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); });
|
|
513
513
|
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)); });
|
|
514
514
|
i0.ɵɵelementEnd();
|
|
@@ -519,13 +519,13 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
519
519
|
i0.ɵɵproperty("name", "configurationId_" + ctx_r1.getModelTrackId(model_r19))("Data", ctx_r1.availableConfigurations)("ValuePrimitive", true)("Filterable", true);
|
|
520
520
|
} }
|
|
521
521
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
522
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div",
|
|
522
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_0_Template, 3, 0, "div", 129)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_11_Conditional_1_Template, 1, 5, "mj-dropdown", 130);
|
|
523
523
|
} if (rf & 2) {
|
|
524
524
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
525
525
|
i0.ɵɵconditional(ctx_r1.isLoadingConfigurations ? 0 : 1);
|
|
526
526
|
} }
|
|
527
527
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
528
|
-
i0.ɵɵelementStart(0, "span",
|
|
528
|
+
i0.ɵɵelementStart(0, "span", 110);
|
|
529
529
|
i0.ɵɵtext(1);
|
|
530
530
|
i0.ɵɵelementEnd();
|
|
531
531
|
} if (rf & 2) {
|
|
@@ -535,7 +535,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
535
535
|
i0.ɵɵtextInterpolate(ctx_r1.getConfigurationDisplayName(model_r19.ConfigurationID));
|
|
536
536
|
} }
|
|
537
537
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
538
|
-
i0.ɵɵelementStart(0, "span",
|
|
538
|
+
i0.ɵɵelementStart(0, "span", 112);
|
|
539
539
|
i0.ɵɵtext(1);
|
|
540
540
|
i0.ɵɵpipe(2, "date");
|
|
541
541
|
i0.ɵɵelementEnd();
|
|
@@ -545,19 +545,19 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
545
545
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(2, 1, model_r19.__mj_CreatedAt, "short"));
|
|
546
546
|
} }
|
|
547
547
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
548
|
-
i0.ɵɵelementStart(0, "span",
|
|
548
|
+
i0.ɵɵelementStart(0, "span", 113);
|
|
549
549
|
i0.ɵɵtext(1, "New");
|
|
550
550
|
i0.ɵɵelementEnd();
|
|
551
551
|
} }
|
|
552
552
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
553
553
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
554
|
-
i0.ɵɵelementStart(0, "button",
|
|
554
|
+
i0.ɵɵelementStart(0, "button", 134);
|
|
555
555
|
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)); });
|
|
556
|
-
i0.ɵɵelement(1, "i",
|
|
556
|
+
i0.ɵɵelement(1, "i", 135);
|
|
557
557
|
i0.ɵɵelementEnd();
|
|
558
|
-
i0.ɵɵelementStart(2, "button",
|
|
558
|
+
i0.ɵɵelementStart(2, "button", 136);
|
|
559
559
|
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)); });
|
|
560
|
-
i0.ɵɵelement(3, "i",
|
|
560
|
+
i0.ɵɵelement(3, "i", 137);
|
|
561
561
|
i0.ɵɵelementEnd();
|
|
562
562
|
} if (rf & 2) {
|
|
563
563
|
const ɵ$index_289_r17 = i0.ɵɵnextContext(2).$index;
|
|
@@ -568,16 +568,16 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
568
568
|
} }
|
|
569
569
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
570
570
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
571
|
-
i0.ɵɵelementStart(0, "button",
|
|
571
|
+
i0.ɵɵelementStart(0, "button", 138);
|
|
572
572
|
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)); });
|
|
573
|
-
i0.ɵɵelement(1, "i",
|
|
573
|
+
i0.ɵɵelement(1, "i", 139);
|
|
574
574
|
i0.ɵɵelementEnd();
|
|
575
575
|
} }
|
|
576
576
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
577
|
-
i0.ɵɵelementStart(0, "div",
|
|
577
|
+
i0.ɵɵelementStart(0, "div", 132);
|
|
578
578
|
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_1_Template, 4, 2);
|
|
579
579
|
i0.ɵɵelementEnd();
|
|
580
|
-
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button",
|
|
580
|
+
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Conditional_2_Template, 2, 0, "button", 133);
|
|
581
581
|
} if (rf & 2) {
|
|
582
582
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
583
583
|
i0.ɵɵadvance();
|
|
@@ -598,10 +598,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
598
598
|
} }
|
|
599
599
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
600
600
|
const _r26 = i0.ɵɵgetCurrentView();
|
|
601
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
601
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 144);
|
|
602
602
|
i0.ɵɵtext(2, "Parallel Count");
|
|
603
603
|
i0.ɵɵelementEnd();
|
|
604
|
-
i0.ɵɵelementStart(3, "mj-numeric-input",
|
|
604
|
+
i0.ɵɵelementStart(3, "mj-numeric-input", 146);
|
|
605
605
|
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); });
|
|
606
606
|
i0.ɵɵelementEnd()();
|
|
607
607
|
} if (rf & 2) {
|
|
@@ -614,10 +614,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
614
614
|
} }
|
|
615
615
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
616
616
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
617
|
-
i0.ɵɵelementStart(0, "div")(1, "label",
|
|
617
|
+
i0.ɵɵelementStart(0, "div")(1, "label", 144);
|
|
618
618
|
i0.ɵɵtext(2, "Config Parameter");
|
|
619
619
|
i0.ɵɵelementEnd();
|
|
620
|
-
i0.ɵɵelementStart(3, "input",
|
|
620
|
+
i0.ɵɵelementStart(3, "input", 147);
|
|
621
621
|
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); });
|
|
622
622
|
i0.ɵɵelementEnd()();
|
|
623
623
|
} if (rf & 2) {
|
|
@@ -630,10 +630,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
630
630
|
} }
|
|
631
631
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
632
632
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
633
|
-
i0.ɵɵelementStart(0, "div",
|
|
633
|
+
i0.ɵɵelementStart(0, "div", 142)(1, "div")(2, "label", 144);
|
|
634
634
|
i0.ɵɵtext(3, "Parallel Mode");
|
|
635
635
|
i0.ɵɵelementEnd();
|
|
636
|
-
i0.ɵɵelementStart(4, "mj-dropdown",
|
|
636
|
+
i0.ɵɵelementStart(4, "mj-dropdown", 145);
|
|
637
637
|
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); });
|
|
638
638
|
i0.ɵɵelementEnd()();
|
|
639
639
|
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Conditional_5_Template, 4, 5, "div");
|
|
@@ -685,7 +685,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
685
685
|
i0.ɵɵtextInterpolate1(" ", model_r19.ParallelConfigParam);
|
|
686
686
|
} }
|
|
687
687
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
688
|
-
i0.ɵɵelementStart(0, "div",
|
|
688
|
+
i0.ɵɵelementStart(0, "div", 143);
|
|
689
689
|
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_1_Template, 4, 1, "span");
|
|
690
690
|
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_2_Template, 4, 1, "span");
|
|
691
691
|
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Conditional_3_Template, 4, 1, "span");
|
|
@@ -700,11 +700,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
700
700
|
i0.ɵɵconditional(model_r19.ParallelConfigParam ? 3 : -1);
|
|
701
701
|
} }
|
|
702
702
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
703
|
-
i0.ɵɵelementStart(0, "div",
|
|
704
|
-
i0.ɵɵelement(2, "i",
|
|
703
|
+
i0.ɵɵelementStart(0, "div", 117)(1, "div", 140);
|
|
704
|
+
i0.ɵɵelement(2, "i", 141);
|
|
705
705
|
i0.ɵɵtext(3, " Model-Specific Parallel Execution ");
|
|
706
706
|
i0.ɵɵelementEnd();
|
|
707
|
-
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div",
|
|
707
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_4_Template, 7, 13, "div", 142)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Conditional_5_Template, 4, 3, "div", 143);
|
|
708
708
|
i0.ɵɵelementEnd();
|
|
709
709
|
} if (rf & 2) {
|
|
710
710
|
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
@@ -713,32 +713,32 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
713
713
|
} }
|
|
714
714
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template(rf, ctx) { if (rf & 1) {
|
|
715
715
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
716
|
-
i0.ɵɵelementStart(0, "div",
|
|
716
|
+
i0.ɵɵelementStart(0, "div", 103);
|
|
717
717
|
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)); });
|
|
718
|
-
i0.ɵɵelementStart(1, "div",
|
|
719
|
-
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",
|
|
718
|
+
i0.ɵɵelementStart(1, "div", 104);
|
|
719
|
+
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", 105);
|
|
720
720
|
i0.ɵɵelementEnd();
|
|
721
|
-
i0.ɵɵelementStart(4, "div",
|
|
722
|
-
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown",
|
|
721
|
+
i0.ɵɵelementStart(4, "div", 106);
|
|
722
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_5_Template, 1, 5, "mj-dropdown", 107)(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_6_Template, 2, 1, "span", 22);
|
|
723
723
|
i0.ɵɵelementEnd();
|
|
724
|
-
i0.ɵɵelementStart(7, "div",
|
|
724
|
+
i0.ɵɵelementStart(7, "div", 108);
|
|
725
725
|
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);
|
|
726
726
|
i0.ɵɵelementEnd();
|
|
727
|
-
i0.ɵɵelementStart(10, "div",
|
|
728
|
-
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",
|
|
727
|
+
i0.ɵɵelementStart(10, "div", 109);
|
|
728
|
+
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", 110);
|
|
729
729
|
i0.ɵɵelementEnd();
|
|
730
|
-
i0.ɵɵelementStart(13, "div",
|
|
731
|
-
i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span",
|
|
730
|
+
i0.ɵɵelementStart(13, "div", 111);
|
|
731
|
+
i0.ɵɵconditionalCreate(14, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_14_Template, 3, 4, "span", 112)(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_15_Template, 2, 0, "span", 113);
|
|
732
732
|
i0.ɵɵelementEnd();
|
|
733
|
-
i0.ɵɵelementStart(16, "div",
|
|
733
|
+
i0.ɵɵelementStart(16, "div", 114);
|
|
734
734
|
i0.ɵɵconditionalCreate(17, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_17_Template, 3, 2);
|
|
735
735
|
i0.ɵɵelementEnd()();
|
|
736
|
-
i0.ɵɵelementStart(18, "div",
|
|
736
|
+
i0.ɵɵelementStart(18, "div", 115);
|
|
737
737
|
i0.ɵɵelement(19, "div");
|
|
738
|
-
i0.ɵɵelementStart(20, "div")(21, "div",
|
|
738
|
+
i0.ɵɵelementStart(20, "div")(21, "div", 116);
|
|
739
739
|
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_22_Template, 4, 1, "span");
|
|
740
740
|
i0.ɵɵelementEnd();
|
|
741
|
-
i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div",
|
|
741
|
+
i0.ɵɵconditionalCreate(23, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Conditional_23_Template, 6, 1, "div", 117);
|
|
742
742
|
i0.ɵɵelementEnd()();
|
|
743
743
|
} if (rf & 2) {
|
|
744
744
|
const model_r19 = ctx.$implicit;
|
|
@@ -765,20 +765,20 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
765
765
|
} }
|
|
766
766
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
767
767
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
768
|
-
i0.ɵɵelementStart(0, "div",
|
|
768
|
+
i0.ɵɵelementStart(0, "div", 101)(1, "button", 148);
|
|
769
769
|
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()); });
|
|
770
|
-
i0.ɵɵelement(2, "i",
|
|
770
|
+
i0.ɵɵelement(2, "i", 75);
|
|
771
771
|
i0.ɵɵtext(3, " Add Model ");
|
|
772
772
|
i0.ɵɵelementEnd()();
|
|
773
773
|
} }
|
|
774
774
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
775
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div",
|
|
776
|
-
i0.ɵɵelementStart(1, "div",
|
|
777
|
-
i0.ɵɵelement(3, "i",
|
|
775
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_0_Template, 3, 0, "div", 97);
|
|
776
|
+
i0.ɵɵelementStart(1, "div", 98)(2, "div", 99);
|
|
777
|
+
i0.ɵɵelement(3, "i", 100);
|
|
778
778
|
i0.ɵɵelementEnd();
|
|
779
779
|
i0.ɵɵelementStart(4, "div");
|
|
780
780
|
i0.ɵɵtext(5, "AI Model ");
|
|
781
|
-
i0.ɵɵelementStart(6, "span",
|
|
781
|
+
i0.ɵɵelementStart(6, "span", 56);
|
|
782
782
|
i0.ɵɵtext(7, "*");
|
|
783
783
|
i0.ɵɵelementEnd()();
|
|
784
784
|
i0.ɵɵelementStart(8, "div");
|
|
@@ -794,7 +794,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
794
794
|
i0.ɵɵtext(15, "Actions");
|
|
795
795
|
i0.ɵɵelementEnd()();
|
|
796
796
|
i0.ɵɵrepeaterCreate(16, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_For_17_Template, 24, 15, null, null, _forTrack0, true);
|
|
797
|
-
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div",
|
|
797
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Conditional_18_Template, 4, 0, "div", 101);
|
|
798
798
|
} if (rf & 2) {
|
|
799
799
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
800
800
|
i0.ɵɵconditional(ctx_r1.promptModels.length > 1 ? 0 : -1);
|
|
@@ -804,7 +804,7 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
804
804
|
i0.ɵɵconditional(ctx_r1.EditMode && ctx_r1.UserCanCreatePromptModels ? 18 : -1);
|
|
805
805
|
} }
|
|
806
806
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
807
|
-
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template, 2, 1, "mj-empty-state",
|
|
807
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_0_Template, 2, 1, "mj-empty-state", 94)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Conditional_1_Template, 19, 2);
|
|
808
808
|
} if (rf & 2) {
|
|
809
809
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
810
810
|
i0.ɵɵconditional(ctx_r1.promptModels.length === 0 ? 0 : 1);
|
|
@@ -812,8 +812,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditiona
|
|
|
812
812
|
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
813
813
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
814
814
|
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_ng_template_1_Template, 7, 1, "ng-template", 29);
|
|
815
|
-
i0.ɵɵelementStart(2, "div", 35)(3, "div",
|
|
816
|
-
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 3, 0, "div",
|
|
815
|
+
i0.ɵɵelementStart(2, "div", 35)(3, "div", 88);
|
|
816
|
+
i0.ɵɵconditionalCreate(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_4_Template, 3, 0, "div", 89)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Conditional_5_Template, 2, 1);
|
|
817
817
|
i0.ɵɵelementEnd()()();
|
|
818
818
|
} if (rf & 2) {
|
|
819
819
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -822,8 +822,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_42_Template(r
|
|
|
822
822
|
i0.ɵɵconditional(ctx_r1.isLoadingModels ? 4 : 5);
|
|
823
823
|
} }
|
|
824
824
|
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_44_Template(rf, ctx) { if (rf & 1) {
|
|
825
|
-
i0.ɵɵelementStart(0, "span",
|
|
826
|
-
i0.ɵɵelement(1, "i",
|
|
825
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
826
|
+
i0.ɵɵelement(1, "i", 149);
|
|
827
827
|
i0.ɵɵtext(2, " Advanced Configuration ");
|
|
828
828
|
i0.ɵɵelementEnd();
|
|
829
829
|
} }
|
|
@@ -839,31 +839,31 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_50_Template(r
|
|
|
839
839
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
840
840
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
841
841
|
} }
|
|
842
|
-
function
|
|
843
|
-
i0.ɵɵelementStart(0, "div",
|
|
844
|
-
i0.ɵɵelement(1, "i",
|
|
842
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
843
|
+
i0.ɵɵelementStart(0, "div", 150);
|
|
844
|
+
i0.ɵɵelement(1, "i", 59);
|
|
845
845
|
i0.ɵɵtext(2, " Loading prompts... ");
|
|
846
846
|
i0.ɵɵelementEnd();
|
|
847
847
|
} }
|
|
848
|
-
function
|
|
848
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
849
849
|
const _r29 = i0.ɵɵgetCurrentView();
|
|
850
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
851
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
852
|
-
i0.ɵɵlistener("ValueChange", function
|
|
850
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 152);
|
|
851
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_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); });
|
|
852
|
+
i0.ɵɵlistener("ValueChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_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)); });
|
|
853
853
|
i0.ɵɵelementEnd();
|
|
854
854
|
} if (rf & 2) {
|
|
855
855
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
856
856
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.ResultSelectorPromptID);
|
|
857
857
|
i0.ɵɵproperty("Data", ctx_r1.resultSelectorTreeData)("ValuePrimitive", true)("Filterable", true);
|
|
858
858
|
} }
|
|
859
|
-
function
|
|
860
|
-
i0.ɵɵconditionalCreate(0,
|
|
859
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template(rf, ctx) { if (rf & 1) {
|
|
860
|
+
i0.ɵɵconditionalCreate(0, MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_0_Template, 3, 0, "div", 150)(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Conditional_1_Template, 1, 4, "mj-dropdown", 151);
|
|
861
861
|
} if (rf & 2) {
|
|
862
862
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
863
863
|
i0.ɵɵconditional(ctx_r1.isLoadingResultSelectorData ? 0 : 1);
|
|
864
864
|
} }
|
|
865
|
-
function
|
|
866
|
-
i0.ɵɵelementStart(0, "span",
|
|
865
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_61_Template(rf, ctx) { if (rf & 1) {
|
|
866
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
867
867
|
i0.ɵɵtext(1);
|
|
868
868
|
i0.ɵɵelementEnd();
|
|
869
869
|
} if (rf & 2) {
|
|
@@ -871,21 +871,21 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template(r
|
|
|
871
871
|
i0.ɵɵadvance();
|
|
872
872
|
i0.ɵɵtextInterpolate(ctx_r1.getPromptDisplayName(ctx_r1.record.ResultSelectorPromptID || "") || "None selected");
|
|
873
873
|
} }
|
|
874
|
-
function
|
|
875
|
-
i0.ɵɵelementStart(0, "span",
|
|
876
|
-
i0.ɵɵelement(1, "i",
|
|
874
|
+
function MJAIPromptFormComponentExtended_Conditional_1_ng_template_63_Template(rf, ctx) { if (rf & 1) {
|
|
875
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
876
|
+
i0.ɵɵelement(1, "i", 153);
|
|
877
877
|
i0.ɵɵtext(2, " Prefill & Output Control ");
|
|
878
878
|
i0.ɵɵelementEnd();
|
|
879
879
|
} }
|
|
880
|
-
function
|
|
881
|
-
i0.ɵɵelementStart(0, "span",
|
|
882
|
-
i0.ɵɵelement(1, "i",
|
|
880
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
881
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
882
|
+
i0.ɵɵelement(1, "i", 155);
|
|
883
883
|
i0.ɵɵtext(2, " Template Parameters ");
|
|
884
|
-
i0.ɵɵelementStart(3, "span",
|
|
884
|
+
i0.ɵɵelementStart(3, "span", 91);
|
|
885
885
|
i0.ɵɵtext(4);
|
|
886
886
|
i0.ɵɵelementEnd();
|
|
887
|
-
i0.ɵɵelementStart(5, "span",
|
|
888
|
-
i0.ɵɵelement(6, "i",
|
|
887
|
+
i0.ɵɵelementStart(5, "span", 92);
|
|
888
|
+
i0.ɵɵelement(6, "i", 156);
|
|
889
889
|
i0.ɵɵtext(7, " Parameters defined in the template ");
|
|
890
890
|
i0.ɵɵelementEnd()();
|
|
891
891
|
} if (rf & 2) {
|
|
@@ -893,32 +893,32 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_ng_templat
|
|
|
893
893
|
i0.ɵɵadvance(4);
|
|
894
894
|
i0.ɵɵtextInterpolate(ctx_r1.templateParams.length);
|
|
895
895
|
} }
|
|
896
|
-
function
|
|
897
|
-
i0.ɵɵelementStart(0, "div",
|
|
898
|
-
i0.ɵɵelement(1, "i",
|
|
896
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
897
|
+
i0.ɵɵelementStart(0, "div", 89);
|
|
898
|
+
i0.ɵɵelement(1, "i", 59);
|
|
899
899
|
i0.ɵɵtext(2, " Loading template parameters... ");
|
|
900
900
|
i0.ɵɵelementEnd();
|
|
901
901
|
} }
|
|
902
|
-
function
|
|
903
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
902
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
903
|
+
i0.ɵɵelement(0, "mj-empty-state", 154);
|
|
904
904
|
} }
|
|
905
|
-
function
|
|
906
|
-
i0.ɵɵelementStart(0, "span",
|
|
905
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
906
|
+
i0.ɵɵelementStart(0, "span", 168);
|
|
907
907
|
i0.ɵɵtext(1, "*");
|
|
908
908
|
i0.ɵɵelementEnd();
|
|
909
909
|
} }
|
|
910
|
-
function
|
|
911
|
-
i0.ɵɵelementStart(0, "span",
|
|
910
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
911
|
+
i0.ɵɵelementStart(0, "span", 170);
|
|
912
912
|
i0.ɵɵtext(1, "Required");
|
|
913
913
|
i0.ɵɵelementEnd();
|
|
914
914
|
} }
|
|
915
|
-
function
|
|
916
|
-
i0.ɵɵelementStart(0, "span",
|
|
915
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
916
|
+
i0.ɵɵelementStart(0, "span", 171);
|
|
917
917
|
i0.ɵɵtext(1, "Optional");
|
|
918
918
|
i0.ɵɵelementEnd();
|
|
919
919
|
} }
|
|
920
|
-
function
|
|
921
|
-
i0.ɵɵelementStart(0, "p",
|
|
920
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
921
|
+
i0.ɵɵelementStart(0, "p", 172);
|
|
922
922
|
i0.ɵɵtext(1);
|
|
923
923
|
i0.ɵɵelementEnd();
|
|
924
924
|
} if (rf & 2) {
|
|
@@ -926,11 +926,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
926
926
|
i0.ɵɵadvance();
|
|
927
927
|
i0.ɵɵtextInterpolate1(" ", param_r30.Description, " ");
|
|
928
928
|
} }
|
|
929
|
-
function
|
|
930
|
-
i0.ɵɵelementStart(0, "div",
|
|
929
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
930
|
+
i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
|
|
931
931
|
i0.ɵɵtext(2, "Default Value");
|
|
932
932
|
i0.ɵɵelementEnd();
|
|
933
|
-
i0.ɵɵelementStart(3, "code",
|
|
933
|
+
i0.ɵɵelementStart(3, "code", 179);
|
|
934
934
|
i0.ɵɵtext(4);
|
|
935
935
|
i0.ɵɵelementEnd()();
|
|
936
936
|
} if (rf & 2) {
|
|
@@ -938,11 +938,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
938
938
|
i0.ɵɵadvance(4);
|
|
939
939
|
i0.ɵɵtextInterpolate(param_r30.DefaultValue);
|
|
940
940
|
} }
|
|
941
|
-
function
|
|
942
|
-
i0.ɵɵelementStart(0, "div",
|
|
941
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
942
|
+
i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
|
|
943
943
|
i0.ɵɵtext(2, "Entity");
|
|
944
944
|
i0.ɵɵelementEnd();
|
|
945
|
-
i0.ɵɵelementStart(3, "span",
|
|
945
|
+
i0.ɵɵelementStart(3, "span", 173);
|
|
946
946
|
i0.ɵɵtext(4);
|
|
947
947
|
i0.ɵɵelementEnd()();
|
|
948
948
|
} if (rf & 2) {
|
|
@@ -950,19 +950,19 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
950
950
|
i0.ɵɵadvance(4);
|
|
951
951
|
i0.ɵɵtextInterpolate(param_r30.Entity || "Entity ID: " + param_r30.EntityID);
|
|
952
952
|
} }
|
|
953
|
-
function
|
|
953
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
954
954
|
i0.ɵɵtext(0);
|
|
955
955
|
} if (rf & 2) {
|
|
956
956
|
const param_r30 = i0.ɵɵnextContext(2).$implicit;
|
|
957
957
|
i0.ɵɵtextInterpolate1(" (", param_r30.LinkedParameterField, ") ");
|
|
958
958
|
} }
|
|
959
|
-
function
|
|
960
|
-
i0.ɵɵelementStart(0, "div",
|
|
959
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
960
|
+
i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
|
|
961
961
|
i0.ɵɵtext(2, "Linked To");
|
|
962
962
|
i0.ɵɵelementEnd();
|
|
963
|
-
i0.ɵɵelementStart(3, "span",
|
|
963
|
+
i0.ɵɵelementStart(3, "span", 173);
|
|
964
964
|
i0.ɵɵtext(4);
|
|
965
|
-
i0.ɵɵconditionalCreate(5,
|
|
965
|
+
i0.ɵɵconditionalCreate(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Conditional_5_Template, 1, 1);
|
|
966
966
|
i0.ɵɵelementEnd()();
|
|
967
967
|
} if (rf & 2) {
|
|
968
968
|
const param_r30 = i0.ɵɵnextContext().$implicit;
|
|
@@ -971,11 +971,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
971
971
|
i0.ɵɵadvance();
|
|
972
972
|
i0.ɵɵconditional(param_r30.LinkedParameterField ? 5 : -1);
|
|
973
973
|
} }
|
|
974
|
-
function
|
|
975
|
-
i0.ɵɵelementStart(0, "div",
|
|
974
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
975
|
+
i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
|
|
976
976
|
i0.ɵɵtext(2, "Filter");
|
|
977
977
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵelementStart(3, "code",
|
|
978
|
+
i0.ɵɵelementStart(3, "code", 180);
|
|
979
979
|
i0.ɵɵtext(4);
|
|
980
980
|
i0.ɵɵelementEnd()();
|
|
981
981
|
} if (rf & 2) {
|
|
@@ -983,11 +983,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
983
983
|
i0.ɵɵadvance(4);
|
|
984
984
|
i0.ɵɵtextInterpolate(param_r30.ExtraFilter);
|
|
985
985
|
} }
|
|
986
|
-
function
|
|
987
|
-
i0.ɵɵelementStart(0, "div",
|
|
986
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
987
|
+
i0.ɵɵelementStart(0, "div", 177)(1, "label", 178);
|
|
988
988
|
i0.ɵɵtext(2, "Record ID");
|
|
989
989
|
i0.ɵɵelementEnd();
|
|
990
|
-
i0.ɵɵelementStart(3, "code",
|
|
990
|
+
i0.ɵɵelementStart(3, "code", 173);
|
|
991
991
|
i0.ɵɵtext(4);
|
|
992
992
|
i0.ɵɵelementEnd()();
|
|
993
993
|
} if (rf & 2) {
|
|
@@ -995,29 +995,29 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
995
995
|
i0.ɵɵadvance(4);
|
|
996
996
|
i0.ɵɵtextInterpolate(param_r30.RecordID);
|
|
997
997
|
} }
|
|
998
|
-
function
|
|
999
|
-
i0.ɵɵelementStart(0, "div",
|
|
1000
|
-
i0.ɵɵelement(3, "i",
|
|
1001
|
-
i0.ɵɵelementStart(4, "h6",
|
|
998
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
999
|
+
i0.ɵɵelementStart(0, "div", 163)(1, "div", 164)(2, "div", 165);
|
|
1000
|
+
i0.ɵɵelement(3, "i", 166);
|
|
1001
|
+
i0.ɵɵelementStart(4, "h6", 167);
|
|
1002
1002
|
i0.ɵɵtext(5);
|
|
1003
|
-
i0.ɵɵconditionalCreate(6,
|
|
1003
|
+
i0.ɵɵconditionalCreate(6, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_6_Template, 2, 0, "span", 168);
|
|
1004
1004
|
i0.ɵɵelementEnd()();
|
|
1005
|
-
i0.ɵɵelementStart(7, "div",
|
|
1005
|
+
i0.ɵɵelementStart(7, "div", 165)(8, "span", 169);
|
|
1006
1006
|
i0.ɵɵtext(9);
|
|
1007
1007
|
i0.ɵɵelementEnd();
|
|
1008
|
-
i0.ɵɵconditionalCreate(10,
|
|
1008
|
+
i0.ɵɵconditionalCreate(10, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_10_Template, 2, 0, "span", 170)(11, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_11_Template, 2, 0, "span", 171);
|
|
1009
1009
|
i0.ɵɵelementEnd()();
|
|
1010
|
-
i0.ɵɵconditionalCreate(12,
|
|
1011
|
-
i0.ɵɵelementStart(13, "div",
|
|
1012
|
-
i0.ɵɵelement(15, "i",
|
|
1010
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_12_Template, 2, 1, "p", 172);
|
|
1011
|
+
i0.ɵɵelementStart(13, "div", 173)(14, "span", 174);
|
|
1012
|
+
i0.ɵɵelement(15, "i", 175);
|
|
1013
1013
|
i0.ɵɵtext(16);
|
|
1014
1014
|
i0.ɵɵelementEnd()();
|
|
1015
|
-
i0.ɵɵelementStart(17, "div",
|
|
1016
|
-
i0.ɵɵconditionalCreate(18,
|
|
1017
|
-
i0.ɵɵconditionalCreate(19,
|
|
1018
|
-
i0.ɵɵconditionalCreate(20,
|
|
1019
|
-
i0.ɵɵconditionalCreate(21,
|
|
1020
|
-
i0.ɵɵconditionalCreate(22,
|
|
1015
|
+
i0.ɵɵelementStart(17, "div", 176);
|
|
1016
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_18_Template, 5, 1, "div", 177);
|
|
1017
|
+
i0.ɵɵconditionalCreate(19, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_19_Template, 5, 1, "div", 177);
|
|
1018
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_20_Template, 6, 2, "div", 177);
|
|
1019
|
+
i0.ɵɵconditionalCreate(21, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_21_Template, 5, 1, "div", 177);
|
|
1020
|
+
i0.ɵɵconditionalCreate(22, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Conditional_22_Template, 5, 1, "div", 177);
|
|
1021
1021
|
i0.ɵɵelementEnd()();
|
|
1022
1022
|
} if (rf & 2) {
|
|
1023
1023
|
const param_r30 = ctx.$implicit;
|
|
@@ -1051,13 +1051,13 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
1051
1051
|
i0.ɵɵadvance();
|
|
1052
1052
|
i0.ɵɵconditional(param_r30.RecordID ? 22 : -1);
|
|
1053
1053
|
} }
|
|
1054
|
-
function
|
|
1055
|
-
i0.ɵɵelementStart(0, "div",
|
|
1056
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1054
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1055
|
+
i0.ɵɵelementStart(0, "div", 157);
|
|
1056
|
+
i0.ɵɵrepeaterCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_For_2_Template, 23, 19, "div", 158, _forTrack1);
|
|
1057
1057
|
i0.ɵɵelementEnd();
|
|
1058
|
-
i0.ɵɵelementStart(3, "div",
|
|
1059
|
-
i0.ɵɵelement(5, "i",
|
|
1060
|
-
i0.ɵɵelementStart(6, "div",
|
|
1058
|
+
i0.ɵɵelementStart(3, "div", 159)(4, "div", 160);
|
|
1059
|
+
i0.ɵɵelement(5, "i", 161);
|
|
1060
|
+
i0.ɵɵelementStart(6, "div", 162)(7, "strong");
|
|
1061
1061
|
i0.ɵɵtext(8, "Using Template Parameters:");
|
|
1062
1062
|
i0.ɵɵelementEnd();
|
|
1063
1063
|
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. ");
|
|
@@ -1067,11 +1067,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Conditiona
|
|
|
1067
1067
|
i0.ɵɵadvance();
|
|
1068
1068
|
i0.ɵɵrepeater(ctx_r1.templateParams);
|
|
1069
1069
|
} }
|
|
1070
|
-
function
|
|
1070
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(rf, ctx) { if (rf & 1) {
|
|
1071
1071
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1072
|
-
i0.ɵɵtemplate(1,
|
|
1072
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_ng_template_1_Template, 8, 1, "ng-template", 29);
|
|
1073
1073
|
i0.ɵɵelementStart(2, "div", 35);
|
|
1074
|
-
i0.ɵɵconditionalCreate(3,
|
|
1074
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_3_Template, 3, 0, "div", 89)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_4_Template, 1, 0, "mj-empty-state", 154)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditional_5_Template, 10, 0);
|
|
1075
1075
|
i0.ɵɵelementEnd()();
|
|
1076
1076
|
} if (rf & 2) {
|
|
1077
1077
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1079,29 +1079,29 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Template(r
|
|
|
1079
1079
|
i0.ɵɵadvance(3);
|
|
1080
1080
|
i0.ɵɵconditional(ctx_r1.isLoadingTemplateParams ? 3 : ctx_r1.templateParams.length === 0 ? 4 : 5);
|
|
1081
1081
|
} }
|
|
1082
|
-
function
|
|
1083
|
-
i0.ɵɵelementStart(0, "span",
|
|
1082
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1083
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
1084
1084
|
i0.ɵɵelement(1, "i", 21);
|
|
1085
1085
|
i0.ɵɵtext(2, " Output Example (JSON) ");
|
|
1086
|
-
i0.ɵɵelementStart(3, "span",
|
|
1086
|
+
i0.ɵɵelementStart(3, "span", 184);
|
|
1087
1087
|
i0.ɵɵtext(4, "\u2022 Required for object output type");
|
|
1088
1088
|
i0.ɵɵelementEnd()();
|
|
1089
1089
|
} }
|
|
1090
|
-
function
|
|
1090
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1091
1091
|
const _r31 = i0.ɵɵgetCurrentView();
|
|
1092
|
-
i0.ɵɵelementStart(0, "mj-code-editor",
|
|
1093
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1092
|
+
i0.ɵɵelementStart(0, "mj-code-editor", 185);
|
|
1093
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_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); });
|
|
1094
1094
|
i0.ɵɵelementEnd();
|
|
1095
|
-
i0.ɵɵelementStart(1, "div",
|
|
1096
|
-
i0.ɵɵelement(2, "i",
|
|
1095
|
+
i0.ɵɵelementStart(1, "div", 186);
|
|
1096
|
+
i0.ɵɵelement(2, "i", 187);
|
|
1097
1097
|
i0.ɵɵtext(3, " Provide a JSON example that defines the expected structure for object output validation. ");
|
|
1098
1098
|
i0.ɵɵelementEnd();
|
|
1099
1099
|
} if (rf & 2) {
|
|
1100
1100
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1101
1101
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.OutputExample);
|
|
1102
1102
|
} }
|
|
1103
|
-
function
|
|
1104
|
-
i0.ɵɵelementStart(0, "div",
|
|
1103
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1104
|
+
i0.ɵɵelementStart(0, "div", 182);
|
|
1105
1105
|
i0.ɵɵtext(1);
|
|
1106
1106
|
i0.ɵɵelementEnd();
|
|
1107
1107
|
} if (rf & 2) {
|
|
@@ -1109,16 +1109,16 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Conditiona
|
|
|
1109
1109
|
i0.ɵɵadvance();
|
|
1110
1110
|
i0.ɵɵtextInterpolate(ctx_r1.record.OutputExample);
|
|
1111
1111
|
} }
|
|
1112
|
-
function
|
|
1113
|
-
i0.ɵɵelementStart(0, "mj-alert",
|
|
1112
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1113
|
+
i0.ɵɵelementStart(0, "mj-alert", 183);
|
|
1114
1114
|
i0.ɵɵtext(1, "Output example is required when output type is 'object'");
|
|
1115
1115
|
i0.ɵɵelementEnd();
|
|
1116
1116
|
} }
|
|
1117
|
-
function
|
|
1117
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(rf, ctx) { if (rf & 1) {
|
|
1118
1118
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1119
|
-
i0.ɵɵtemplate(1,
|
|
1120
|
-
i0.ɵɵelementStart(2, "div",
|
|
1121
|
-
i0.ɵɵconditionalCreate(3,
|
|
1119
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_template_1_Template, 5, 0, "ng-template", 29);
|
|
1120
|
+
i0.ɵɵelementStart(2, "div", 181);
|
|
1121
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_3_Template, 4, 1)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_4_Template, 2, 1, "div", 182)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditional_5_Template, 2, 0, "mj-alert", 183);
|
|
1122
1122
|
i0.ɵɵelementEnd()();
|
|
1123
1123
|
} if (rf & 2) {
|
|
1124
1124
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1126,8 +1126,8 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template(r
|
|
|
1126
1126
|
i0.ɵɵadvance(3);
|
|
1127
1127
|
i0.ɵɵconditional(ctx_r1.EditMode ? 3 : ctx_r1.record.OutputExample ? 4 : 5);
|
|
1128
1128
|
} }
|
|
1129
|
-
function
|
|
1130
|
-
i0.ɵɵelementStart(0, "span",
|
|
1129
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1130
|
+
i0.ɵɵelementStart(0, "span", 191);
|
|
1131
1131
|
i0.ɵɵtext(1);
|
|
1132
1132
|
i0.ɵɵelementEnd();
|
|
1133
1133
|
} if (rf & 2) {
|
|
@@ -1135,53 +1135,53 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_ng_templat
|
|
|
1135
1135
|
i0.ɵɵadvance();
|
|
1136
1136
|
i0.ɵɵtextInterpolate1("(", ctx_r1.executionHistory.length, ")");
|
|
1137
1137
|
} }
|
|
1138
|
-
function
|
|
1139
|
-
i0.ɵɵelementStart(0, "span",
|
|
1140
|
-
i0.ɵɵelement(1, "i",
|
|
1138
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1139
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
1140
|
+
i0.ɵɵelement(1, "i", 190);
|
|
1141
1141
|
i0.ɵɵtext(2, " Execution History ");
|
|
1142
|
-
i0.ɵɵconditionalCreate(3,
|
|
1142
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Conditional_3_Template, 2, 1, "span", 191);
|
|
1143
1143
|
i0.ɵɵelementEnd();
|
|
1144
1144
|
} if (rf & 2) {
|
|
1145
1145
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1146
1146
|
i0.ɵɵadvance(3);
|
|
1147
1147
|
i0.ɵɵconditional(ctx_r1.executionHistory.length > 0 ? 3 : -1);
|
|
1148
1148
|
} }
|
|
1149
|
-
function
|
|
1150
|
-
i0.ɵɵelementStart(0, "div",
|
|
1151
|
-
i0.ɵɵelement(1, "i",
|
|
1149
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1150
|
+
i0.ɵɵelementStart(0, "div", 188);
|
|
1151
|
+
i0.ɵɵelement(1, "i", 192);
|
|
1152
1152
|
i0.ɵɵelementStart(2, "p");
|
|
1153
1153
|
i0.ɵɵtext(3, "Loading execution history...");
|
|
1154
1154
|
i0.ɵɵelementEnd()();
|
|
1155
1155
|
} }
|
|
1156
|
-
function
|
|
1157
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1156
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1157
|
+
i0.ɵɵelement(0, "mj-empty-state", 189);
|
|
1158
1158
|
} }
|
|
1159
|
-
function
|
|
1160
|
-
i0.ɵɵelement(0, "i",
|
|
1159
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1160
|
+
i0.ɵɵelement(0, "i", 205);
|
|
1161
1161
|
} if (rf & 2) {
|
|
1162
1162
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1163
1163
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1164
1164
|
} }
|
|
1165
|
-
function
|
|
1166
|
-
i0.ɵɵelement(0, "i",
|
|
1165
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1166
|
+
i0.ɵɵelement(0, "i", 205);
|
|
1167
1167
|
} if (rf & 2) {
|
|
1168
1168
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1169
1169
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1170
1170
|
} }
|
|
1171
|
-
function
|
|
1172
|
-
i0.ɵɵelement(0, "i",
|
|
1171
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1172
|
+
i0.ɵɵelement(0, "i", 205);
|
|
1173
1173
|
} if (rf & 2) {
|
|
1174
1174
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1175
1175
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1176
1176
|
} }
|
|
1177
|
-
function
|
|
1178
|
-
i0.ɵɵelement(0, "i",
|
|
1177
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1178
|
+
i0.ɵɵelement(0, "i", 205);
|
|
1179
1179
|
} if (rf & 2) {
|
|
1180
1180
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1181
1181
|
i0.ɵɵclassMap("fa-solid fa-sort-" + (ctx_r1.historySortDirection === "asc" ? "up" : "down"));
|
|
1182
1182
|
} }
|
|
1183
|
-
function
|
|
1184
|
-
i0.ɵɵelementStart(0, "span",
|
|
1183
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1184
|
+
i0.ɵɵelementStart(0, "span", 212);
|
|
1185
1185
|
i0.ɵɵtext(1);
|
|
1186
1186
|
i0.ɵɵelementEnd();
|
|
1187
1187
|
} if (rf & 2) {
|
|
@@ -1189,42 +1189,42 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
|
|
|
1189
1189
|
i0.ɵɵadvance();
|
|
1190
1190
|
i0.ɵɵtextInterpolate1(" ", run_r34.RunType, " ");
|
|
1191
1191
|
} }
|
|
1192
|
-
function
|
|
1192
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Template(rf, ctx) { if (rf & 1) {
|
|
1193
1193
|
const _r33 = i0.ɵɵgetCurrentView();
|
|
1194
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1194
|
+
i0.ɵɵelementStart(0, "tr", 206)(1, "td", 207)(2, "span", 208);
|
|
1195
1195
|
i0.ɵɵelement(3, "i");
|
|
1196
1196
|
i0.ɵɵelementStart(4, "span", 22);
|
|
1197
1197
|
i0.ɵɵtext(5);
|
|
1198
1198
|
i0.ɵɵelementEnd()()();
|
|
1199
|
-
i0.ɵɵelementStart(6, "td",
|
|
1199
|
+
i0.ɵɵelementStart(6, "td", 209);
|
|
1200
1200
|
i0.ɵɵtext(7);
|
|
1201
1201
|
i0.ɵɵpipe(8, "date");
|
|
1202
1202
|
i0.ɵɵelementEnd();
|
|
1203
|
-
i0.ɵɵelementStart(9, "td",
|
|
1204
|
-
i0.ɵɵelement(11, "i",
|
|
1203
|
+
i0.ɵɵelementStart(9, "td", 209)(10, "span", 208);
|
|
1204
|
+
i0.ɵɵelement(11, "i", 90);
|
|
1205
1205
|
i0.ɵɵtext(12);
|
|
1206
1206
|
i0.ɵɵelementEnd()();
|
|
1207
|
-
i0.ɵɵelementStart(13, "td",
|
|
1207
|
+
i0.ɵɵelementStart(13, "td", 209);
|
|
1208
1208
|
i0.ɵɵtext(14);
|
|
1209
1209
|
i0.ɵɵelementEnd();
|
|
1210
|
-
i0.ɵɵelementStart(15, "td",
|
|
1210
|
+
i0.ɵɵelementStart(15, "td", 210);
|
|
1211
1211
|
i0.ɵɵtext(16);
|
|
1212
1212
|
i0.ɵɵelementEnd();
|
|
1213
|
-
i0.ɵɵelementStart(17, "td",
|
|
1213
|
+
i0.ɵɵelementStart(17, "td", 210);
|
|
1214
1214
|
i0.ɵɵtext(18);
|
|
1215
1215
|
i0.ɵɵelementEnd();
|
|
1216
|
-
i0.ɵɵelementStart(19, "td",
|
|
1217
|
-
i0.ɵɵconditionalCreate(20,
|
|
1216
|
+
i0.ɵɵelementStart(19, "td", 211);
|
|
1217
|
+
i0.ɵɵconditionalCreate(20, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Conditional_20_Template, 2, 1, "span", 212);
|
|
1218
1218
|
i0.ɵɵelementEnd();
|
|
1219
|
-
i0.ɵɵelementStart(21, "td",
|
|
1220
|
-
i0.ɵɵlistener("click", function
|
|
1221
|
-
i0.ɵɵelement(23, "i",
|
|
1219
|
+
i0.ɵɵelementStart(21, "td", 211)(22, "button", 213);
|
|
1220
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_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)); });
|
|
1221
|
+
i0.ɵɵelement(23, "i", 214);
|
|
1222
1222
|
i0.ɵɵelementEnd()()();
|
|
1223
1223
|
} if (rf & 2) {
|
|
1224
1224
|
const run_r34 = ctx.$implicit;
|
|
1225
|
-
const ɵ$
|
|
1225
|
+
const ɵ$index_819_r35 = ctx.$index;
|
|
1226
1226
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1227
|
-
i0.ɵɵclassProp("even-row", ɵ$
|
|
1227
|
+
i0.ɵɵclassProp("even-row", ɵ$index_819_r35 % 2 === 0);
|
|
1228
1228
|
i0.ɵɵadvance(3);
|
|
1229
1229
|
i0.ɵɵclassMap("fa-solid " + ctx_r1.getExecutionStatusIcon(run_r34.Success));
|
|
1230
1230
|
i0.ɵɵstyleProp("color", ctx_r1.getExecutionStatusColor(run_r34.Success));
|
|
@@ -1245,60 +1245,60 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
|
|
|
1245
1245
|
i0.ɵɵadvance(2);
|
|
1246
1246
|
i0.ɵɵconditional(run_r34.RunType ? 20 : -1);
|
|
1247
1247
|
} }
|
|
1248
|
-
function
|
|
1248
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1249
1249
|
const _r32 = i0.ɵɵgetCurrentView();
|
|
1250
|
-
i0.ɵɵelementStart(0, "div",
|
|
1250
|
+
i0.ɵɵelementStart(0, "div", 193)(1, "div", 128);
|
|
1251
1251
|
i0.ɵɵtext(2);
|
|
1252
1252
|
i0.ɵɵelementEnd();
|
|
1253
|
-
i0.ɵɵelementStart(3, "div",
|
|
1253
|
+
i0.ɵɵelementStart(3, "div", 194)(4, "span", 171);
|
|
1254
1254
|
i0.ɵɵtext(5, "Sort by:");
|
|
1255
1255
|
i0.ɵɵelementEnd();
|
|
1256
|
-
i0.ɵɵelementStart(6, "div",
|
|
1257
|
-
i0.ɵɵlistener("click", function
|
|
1256
|
+
i0.ɵɵelementStart(6, "div", 195)(7, "button", 196);
|
|
1257
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("runAt")); });
|
|
1258
1258
|
i0.ɵɵtext(8, " Date ");
|
|
1259
|
-
i0.ɵɵconditionalCreate(9,
|
|
1259
|
+
i0.ɵɵconditionalCreate(9, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_9_Template, 1, 2, "i", 197);
|
|
1260
1260
|
i0.ɵɵelementEnd();
|
|
1261
|
-
i0.ɵɵelementStart(10, "button",
|
|
1262
|
-
i0.ɵɵlistener("click", function
|
|
1261
|
+
i0.ɵɵelementStart(10, "button", 196);
|
|
1262
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("executionTime")); });
|
|
1263
1263
|
i0.ɵɵtext(11, " Duration ");
|
|
1264
|
-
i0.ɵɵconditionalCreate(12,
|
|
1264
|
+
i0.ɵɵconditionalCreate(12, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_12_Template, 1, 2, "i", 197);
|
|
1265
1265
|
i0.ɵɵelementEnd();
|
|
1266
|
-
i0.ɵɵelementStart(13, "button",
|
|
1267
|
-
i0.ɵɵlistener("click", function
|
|
1266
|
+
i0.ɵɵelementStart(13, "button", 196);
|
|
1267
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("tokens")); });
|
|
1268
1268
|
i0.ɵɵtext(14, " Tokens ");
|
|
1269
|
-
i0.ɵɵconditionalCreate(15,
|
|
1269
|
+
i0.ɵɵconditionalCreate(15, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_15_Template, 1, 2, "i", 197);
|
|
1270
1270
|
i0.ɵɵelementEnd();
|
|
1271
|
-
i0.ɵɵelementStart(16, "button",
|
|
1272
|
-
i0.ɵɵlistener("click", function
|
|
1271
|
+
i0.ɵɵelementStart(16, "button", 196);
|
|
1272
|
+
i0.ɵɵlistener("click", function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.changeHistorySort("cost")); });
|
|
1273
1273
|
i0.ɵɵtext(17, " Cost ");
|
|
1274
|
-
i0.ɵɵconditionalCreate(18,
|
|
1274
|
+
i0.ɵɵconditionalCreate(18, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Conditional_18_Template, 1, 2, "i", 197);
|
|
1275
1275
|
i0.ɵɵelementEnd()()()();
|
|
1276
|
-
i0.ɵɵelementStart(19, "div",
|
|
1276
|
+
i0.ɵɵelementStart(19, "div", 198)(20, "table", 199)(21, "thead")(22, "tr", 200)(23, "th", 201);
|
|
1277
1277
|
i0.ɵɵtext(24, "Status");
|
|
1278
1278
|
i0.ɵɵelementEnd();
|
|
1279
|
-
i0.ɵɵelementStart(25, "th",
|
|
1279
|
+
i0.ɵɵelementStart(25, "th", 201);
|
|
1280
1280
|
i0.ɵɵtext(26, "Date & Time");
|
|
1281
1281
|
i0.ɵɵelementEnd();
|
|
1282
|
-
i0.ɵɵelementStart(27, "th",
|
|
1282
|
+
i0.ɵɵelementStart(27, "th", 201);
|
|
1283
1283
|
i0.ɵɵtext(28, "Model");
|
|
1284
1284
|
i0.ɵɵelementEnd();
|
|
1285
|
-
i0.ɵɵelementStart(29, "th",
|
|
1285
|
+
i0.ɵɵelementStart(29, "th", 201);
|
|
1286
1286
|
i0.ɵɵtext(30, "Duration");
|
|
1287
1287
|
i0.ɵɵelementEnd();
|
|
1288
|
-
i0.ɵɵelementStart(31, "th",
|
|
1288
|
+
i0.ɵɵelementStart(31, "th", 202);
|
|
1289
1289
|
i0.ɵɵtext(32, "Tokens");
|
|
1290
1290
|
i0.ɵɵelementEnd();
|
|
1291
|
-
i0.ɵɵelementStart(33, "th",
|
|
1291
|
+
i0.ɵɵelementStart(33, "th", 202);
|
|
1292
1292
|
i0.ɵɵtext(34, "Cost");
|
|
1293
1293
|
i0.ɵɵelementEnd();
|
|
1294
|
-
i0.ɵɵelementStart(35, "th",
|
|
1294
|
+
i0.ɵɵelementStart(35, "th", 203);
|
|
1295
1295
|
i0.ɵɵtext(36, "Type");
|
|
1296
1296
|
i0.ɵɵelementEnd();
|
|
1297
|
-
i0.ɵɵelementStart(37, "th",
|
|
1297
|
+
i0.ɵɵelementStart(37, "th", 203);
|
|
1298
1298
|
i0.ɵɵtext(38, "Actions");
|
|
1299
1299
|
i0.ɵɵelementEnd()()();
|
|
1300
1300
|
i0.ɵɵelementStart(39, "tbody");
|
|
1301
|
-
i0.ɵɵrepeaterCreate(40,
|
|
1301
|
+
i0.ɵɵrepeaterCreate(40, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_For_41_Template, 24, 18, "tr", 204, _forTrack1);
|
|
1302
1302
|
i0.ɵɵelementEnd()()();
|
|
1303
1303
|
} if (rf & 2) {
|
|
1304
1304
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
@@ -1323,11 +1323,11 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Conditiona
|
|
|
1323
1323
|
i0.ɵɵadvance(22);
|
|
1324
1324
|
i0.ɵɵrepeater(ctx_r1.executionHistory);
|
|
1325
1325
|
} }
|
|
1326
|
-
function
|
|
1326
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(rf, ctx) { if (rf & 1) {
|
|
1327
1327
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1328
|
-
i0.ɵɵtemplate(1,
|
|
1329
|
-
i0.ɵɵelementStart(2, "div",
|
|
1330
|
-
i0.ɵɵconditionalCreate(3,
|
|
1328
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_ng_template_1_Template, 4, 1, "ng-template", 29);
|
|
1329
|
+
i0.ɵɵelementStart(2, "div", 181);
|
|
1330
|
+
i0.ɵɵconditionalCreate(3, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_3_Template, 4, 0, "div", 188)(4, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_4_Template, 1, 0, "mj-empty-state", 189)(5, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Conditional_5_Template, 42, 13);
|
|
1331
1331
|
i0.ɵɵelementEnd()();
|
|
1332
1332
|
} if (rf & 2) {
|
|
1333
1333
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1335,17 +1335,17 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template(r
|
|
|
1335
1335
|
i0.ɵɵadvance(3);
|
|
1336
1336
|
i0.ɵɵconditional(ctx_r1.isLoadingHistory ? 3 : ctx_r1.executionHistory.length === 0 ? 4 : 5);
|
|
1337
1337
|
} }
|
|
1338
|
-
function
|
|
1339
|
-
i0.ɵɵelementStart(0, "span",
|
|
1340
|
-
i0.ɵɵelement(1, "i",
|
|
1338
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1339
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
1340
|
+
i0.ɵɵelement(1, "i", 216);
|
|
1341
1341
|
i0.ɵɵtext(2, " Result Cache ");
|
|
1342
1342
|
i0.ɵɵelementEnd();
|
|
1343
1343
|
} }
|
|
1344
|
-
function
|
|
1344
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template(rf, ctx) { if (rf & 1) {
|
|
1345
1345
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1346
|
-
i0.ɵɵtemplate(1,
|
|
1346
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1347
1347
|
i0.ɵɵelementStart(2, "div", 35);
|
|
1348
|
-
i0.ɵɵelement(3, "mj-explorer-entity-data-grid",
|
|
1348
|
+
i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 215);
|
|
1349
1349
|
i0.ɵɵelementEnd()();
|
|
1350
1350
|
} if (rf & 2) {
|
|
1351
1351
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1353,24 +1353,24 @@ function MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template(r
|
|
|
1353
1353
|
i0.ɵɵadvance(3);
|
|
1354
1354
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Result Cache", "AIPromptID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Result Cache"))("AllowLoad", true)("ShowToolbar", false);
|
|
1355
1355
|
} }
|
|
1356
|
-
function
|
|
1357
|
-
i0.ɵɵelementStart(0, "span",
|
|
1358
|
-
i0.ɵɵelement(1, "i",
|
|
1356
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1357
|
+
i0.ɵɵelementStart(0, "span", 68);
|
|
1358
|
+
i0.ɵɵelement(1, "i", 218);
|
|
1359
1359
|
i0.ɵɵtext(2, " Related Items ");
|
|
1360
1360
|
i0.ɵɵelementEnd();
|
|
1361
1361
|
} }
|
|
1362
|
-
function
|
|
1362
|
+
function MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template(rf, ctx) { if (rf & 1) {
|
|
1363
1363
|
i0.ɵɵelementStart(0, "mj-accordion-panel", 28);
|
|
1364
|
-
i0.ɵɵtemplate(1,
|
|
1365
|
-
i0.ɵɵelementStart(2, "div", 35)(3, "div", 36)(4, "div")(5, "h6",
|
|
1364
|
+
i0.ɵɵtemplate(1, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_ng_template_1_Template, 3, 0, "ng-template", 29);
|
|
1365
|
+
i0.ɵɵelementStart(2, "div", 35)(3, "div", 36)(4, "div")(5, "h6", 217);
|
|
1366
1366
|
i0.ɵɵtext(6, "AI Agents Using This Prompt");
|
|
1367
1367
|
i0.ɵɵelementEnd();
|
|
1368
|
-
i0.ɵɵelement(7, "mj-explorer-entity-data-grid",
|
|
1368
|
+
i0.ɵɵelement(7, "mj-explorer-entity-data-grid", 215);
|
|
1369
1369
|
i0.ɵɵelementEnd();
|
|
1370
|
-
i0.ɵɵelementStart(8, "div")(9, "h6",
|
|
1370
|
+
i0.ɵɵelementStart(8, "div")(9, "h6", 217);
|
|
1371
1371
|
i0.ɵɵtext(10, "Prompts Using This as Result Selector");
|
|
1372
1372
|
i0.ɵɵelementEnd();
|
|
1373
|
-
i0.ɵɵelement(11, "mj-explorer-entity-data-grid",
|
|
1373
|
+
i0.ɵɵelement(11, "mj-explorer-entity-data-grid", 215);
|
|
1374
1374
|
i0.ɵɵelementEnd()()()();
|
|
1375
1375
|
} if (rf & 2) {
|
|
1376
1376
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -1431,28 +1431,28 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1431
1431
|
i0.ɵɵelement(51, "mj-form-field", 40)(52, "mj-form-field", 41);
|
|
1432
1432
|
i0.ɵɵelementEnd();
|
|
1433
1433
|
i0.ɵɵelementStart(53, "div");
|
|
1434
|
-
i0.ɵɵelement(54, "mj-form-field", 42)(55, "mj-form-field", 43);
|
|
1435
|
-
i0.ɵɵelementStart(
|
|
1436
|
-
i0.ɵɵtext(
|
|
1434
|
+
i0.ɵɵelement(54, "mj-form-field", 42)(55, "mj-form-field", 43)(56, "mj-form-field", 44);
|
|
1435
|
+
i0.ɵɵelementStart(57, "div", 45)(58, "label", 46);
|
|
1436
|
+
i0.ɵɵtext(59, " Result Selector Prompt ");
|
|
1437
1437
|
i0.ɵɵelementEnd();
|
|
1438
|
-
i0.ɵɵconditionalCreate(
|
|
1438
|
+
i0.ɵɵconditionalCreate(60, MJAIPromptFormComponentExtended_Conditional_1_Conditional_60_Template, 2, 1)(61, MJAIPromptFormComponentExtended_Conditional_1_Conditional_61_Template, 2, 1, "span", 47);
|
|
1439
1439
|
i0.ɵɵelementEnd()()()()();
|
|
1440
|
-
i0.ɵɵelementStart(
|
|
1441
|
-
i0.ɵɵtemplate(
|
|
1442
|
-
i0.ɵɵelementStart(
|
|
1443
|
-
i0.ɵɵtext(
|
|
1440
|
+
i0.ɵɵelementStart(62, "mj-accordion-panel", 28);
|
|
1441
|
+
i0.ɵɵtemplate(63, MJAIPromptFormComponentExtended_Conditional_1_ng_template_63_Template, 3, 0, "ng-template", 29);
|
|
1442
|
+
i0.ɵɵelementStart(64, "div", 35)(65, "p", 48);
|
|
1443
|
+
i0.ɵɵtext(66, " Assistant prefill seeds the model's response with an initial string, guiding output format and content. Stop sequences terminate generation when encountered. ");
|
|
1444
1444
|
i0.ɵɵelementEnd();
|
|
1445
|
-
i0.ɵɵelementStart(
|
|
1446
|
-
i0.ɵɵelement(
|
|
1445
|
+
i0.ɵɵelementStart(67, "div", 36)(68, "div");
|
|
1446
|
+
i0.ɵɵelement(69, "mj-form-field", 49)(70, "mj-form-field", 50);
|
|
1447
1447
|
i0.ɵɵelementEnd();
|
|
1448
|
-
i0.ɵɵelementStart(
|
|
1449
|
-
i0.ɵɵelement(
|
|
1448
|
+
i0.ɵɵelementStart(71, "div");
|
|
1449
|
+
i0.ɵɵelement(72, "mj-form-field", 51);
|
|
1450
1450
|
i0.ɵɵelementEnd()()()();
|
|
1451
|
-
i0.ɵɵconditionalCreate(72, MJAIPromptFormComponentExtended_Conditional_1_Conditional_72_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1452
1451
|
i0.ɵɵconditionalCreate(73, MJAIPromptFormComponentExtended_Conditional_1_Conditional_73_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1453
1452
|
i0.ɵɵconditionalCreate(74, MJAIPromptFormComponentExtended_Conditional_1_Conditional_74_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1454
|
-
i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template,
|
|
1455
|
-
i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template,
|
|
1453
|
+
i0.ɵɵconditionalCreate(75, MJAIPromptFormComponentExtended_Conditional_1_Conditional_75_Template, 6, 2, "mj-accordion-panel", 28);
|
|
1454
|
+
i0.ɵɵconditionalCreate(76, MJAIPromptFormComponentExtended_Conditional_1_Conditional_76_Template, 4, 5, "mj-accordion-panel", 28);
|
|
1455
|
+
i0.ɵɵconditionalCreate(77, MJAIPromptFormComponentExtended_Conditional_1_Conditional_77_Template, 12, 9, "mj-accordion-panel", 28);
|
|
1456
1456
|
i0.ɵɵelementEnd()()()();
|
|
1457
1457
|
} if (rf & 2) {
|
|
1458
1458
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1501,8 +1501,10 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1501
1501
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1502
1502
|
i0.ɵɵadvance();
|
|
1503
1503
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1504
|
+
i0.ɵɵadvance();
|
|
1505
|
+
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1504
1506
|
i0.ɵɵadvance(4);
|
|
1505
|
-
i0.ɵɵconditional(ctx_r1.EditMode ?
|
|
1507
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 60 : 61);
|
|
1506
1508
|
i0.ɵɵadvance(2);
|
|
1507
1509
|
i0.ɵɵproperty("Expanded", false);
|
|
1508
1510
|
i0.ɵɵadvance(7);
|
|
@@ -1512,21 +1514,21 @@ function MJAIPromptFormComponentExtended_Conditional_1_Template(rf, ctx) { if (r
|
|
|
1512
1514
|
i0.ɵɵadvance(2);
|
|
1513
1515
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
1514
1516
|
i0.ɵɵadvance();
|
|
1515
|
-
i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ?
|
|
1517
|
+
i0.ɵɵconditional(ctx_r1.template && ctx_r1.templateParams.length > 0 ? 73 : -1);
|
|
1516
1518
|
i0.ɵɵadvance();
|
|
1517
|
-
i0.ɵɵconditional(ctx_r1.showOutputExample ?
|
|
1519
|
+
i0.ɵɵconditional(ctx_r1.showOutputExample ? 74 : -1);
|
|
1518
1520
|
i0.ɵɵadvance();
|
|
1519
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1521
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 75 : -1);
|
|
1520
1522
|
i0.ɵɵadvance();
|
|
1521
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ?
|
|
1523
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.record.EnableCaching ? 76 : -1);
|
|
1522
1524
|
i0.ɵɵadvance();
|
|
1523
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1525
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 77 : -1);
|
|
1524
1526
|
} }
|
|
1525
1527
|
function MJAIPromptFormComponentExtended_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1526
1528
|
const _r36 = i0.ɵɵgetCurrentView();
|
|
1527
|
-
i0.ɵɵelementStart(0, "mj-window",
|
|
1529
|
+
i0.ɵɵelementStart(0, "mj-window", 219);
|
|
1528
1530
|
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)); });
|
|
1529
|
-
i0.ɵɵelementStart(1, "mj-ai-test-harness",
|
|
1531
|
+
i0.ɵɵelementStart(1, "mj-ai-test-harness", 220);
|
|
1530
1532
|
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)); });
|
|
1531
1533
|
i0.ɵɵelementEnd()();
|
|
1532
1534
|
} if (rf & 2) {
|
|
@@ -1587,6 +1589,8 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
1587
1589
|
}
|
|
1588
1590
|
/** Custom-layout AI Prompt form looks best full-width on first open. */
|
|
1589
1591
|
getDefaultFormWidthMode() { return 'full-width'; }
|
|
1592
|
+
/** Custom-layout form owns its entire body; suppress auto-filled relationship sections. */
|
|
1593
|
+
get OwnsEntireFormBody() { return true; }
|
|
1590
1594
|
/** @deprecated Use {@link Template}. */
|
|
1591
1595
|
get template() {
|
|
1592
1596
|
return this.Template;
|
|
@@ -3228,7 +3232,25 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3228
3232
|
const result = await rv.RunView({
|
|
3229
3233
|
EntityName: 'MJ: AI Prompt Runs',
|
|
3230
3234
|
ExtraFilter: `PromptID='${this.record.ID}'`,
|
|
3231
|
-
OrderBy: 'RunAt DESC'
|
|
3235
|
+
OrderBy: 'RunAt DESC',
|
|
3236
|
+
MaxRows: 200,
|
|
3237
|
+
Fields: [
|
|
3238
|
+
'ID',
|
|
3239
|
+
'PromptID',
|
|
3240
|
+
'RunAt',
|
|
3241
|
+
'CompletedAt',
|
|
3242
|
+
'ExecutionTimeMS',
|
|
3243
|
+
'Success',
|
|
3244
|
+
'Model',
|
|
3245
|
+
'ModelID',
|
|
3246
|
+
'TokensUsed',
|
|
3247
|
+
'TokensPrompt',
|
|
3248
|
+
'TokensCompletion',
|
|
3249
|
+
'Cost',
|
|
3250
|
+
'TotalCost',
|
|
3251
|
+
'RunType'
|
|
3252
|
+
],
|
|
3253
|
+
ResultType: 'simple'
|
|
3232
3254
|
});
|
|
3233
3255
|
this.ExecutionHistory = result.Results;
|
|
3234
3256
|
this.SortExecutionHistory();
|
|
@@ -3451,9 +3473,9 @@ let MJAIPromptFormComponentExtended = class MJAIPromptFormComponentExtended exte
|
|
|
3451
3473
|
} if (rf & 2) {
|
|
3452
3474
|
let _t;
|
|
3453
3475
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.TemplateEditor = _t.first);
|
|
3454
|
-
} }, 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) {
|
|
3476
|
+
} }, 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"], ["FieldName", "TemplateDataCapture", "Type", "select", 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) {
|
|
3455
3477
|
i0.ɵɵelement(0, "div");
|
|
3456
|
-
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template,
|
|
3478
|
+
i0.ɵɵconditionalCreate(1, MJAIPromptFormComponentExtended_Conditional_1_Template, 78, 56, "mj-record-form-container", 2);
|
|
3457
3479
|
i0.ɵɵconditionalCreate(2, MJAIPromptFormComponentExtended_Conditional_2_Template, 2, 11, "mj-window", 3);
|
|
3458
3480
|
} if (rf & 2) {
|
|
3459
3481
|
i0.ɵɵadvance();
|
|
@@ -3468,7 +3490,7 @@ MJAIPromptFormComponentExtended = __decorate([
|
|
|
3468
3490
|
export { MJAIPromptFormComponentExtended };
|
|
3469
3491
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIPromptFormComponentExtended, [{
|
|
3470
3492
|
type: Component,
|
|
3471
|
-
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"] }]
|
|
3493
|
+
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 <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"TemplateDataCapture\"\n Type=\"select\"\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"] }]
|
|
3472
3494
|
}], null, { TemplateEditor: [{
|
|
3473
3495
|
type: ViewChild,
|
|
3474
3496
|
args: ['templateEditor']
|