@memberjunction/ng-core-entity-forms 6.1.0-edge.5 → 6.1.0-edge.7
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.js +2 -2
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +3 -3
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +3 -3
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +2 -2
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +2 -2
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/BridgeAgentIdentities/bridge-agent-identity-form.component.js +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +7 -10
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +1 -1
- package/dist/lib/custom/Files/file-form.component.js +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +7 -0
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +32 -18
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +5 -7
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +1 -1
- package/dist/lib/custom/SessionBridges/session-bridge-form.component.js +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +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 +3 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +3 -3
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +6 -6
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +3 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +86 -72
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentAction/mjaiagentaction.form.component.js +10 -8
- package/dist/lib/generated/Entities/MJAIAgentAction/mjaiagentaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js +31 -25
- package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.js +78 -0
- package/dist/lib/generated/Entities/MJAIAgentPersona/mjaiagentpersona.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +136 -112
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +29 -21
- package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +3 -3
- package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js +27 -21
- package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js +67 -61
- package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js +29 -11
- package/dist/lib/generated/Entities/MJAIModality/mjaimodality.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 +49 -31
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJAIModelPersona/mjaimodelpersona.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js +161 -0
- package/dist/lib/generated/Entities/MJAIPersona/mjaipersona.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.js +80 -0
- package/dist/lib/generated/Entities/MJAIPersonaVendor/mjaipersonavendor.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +149 -147
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +8 -12
- package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +20 -24
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +34 -20
- package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIUsageType/mjaiusagetype.form.component.js +10 -10
- package/dist/lib/generated/Entities/MJAIUsageType/mjaiusagetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js +31 -25
- package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +114 -108
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js +31 -25
- package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +43 -37
- package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js +25 -19
- package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js +45 -39
- package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +43 -37
- package/dist/lib/generated/Entities/MJCollection/mjcollection.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 +55 -49
- 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 +31 -25
- package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +45 -27
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +71 -65
- package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.js +76 -0
- package/dist/lib/generated/Entities/MJConversationSkill/mjconversationskill.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +419 -415
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +23 -5
- package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.js +76 -0
- package/dist/lib/generated/Entities/MJEntityFieldPermission/mjentityfieldpermission.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJIdentityClaim/mjidentityclaim.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIdentityClaim/mjidentityclaim.form.component.js +5 -29
- package/dist/lib/generated/Entities/MJIdentityClaim/mjidentityclaim.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIdentityClaimType/mjidentityclaimtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIdentityClaimType/mjidentityclaimtype.form.component.js +12 -24
- package/dist/lib/generated/Entities/MJIdentityClaimType/mjidentityclaimtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +33 -27
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +38 -20
- package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js +25 -19
- package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +35 -29
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +32 -32
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js +39 -33
- package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +474 -408
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +1276 -898
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/ai-agents/agent-realtime.panel.js +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +1 -1
- package/dist/lib/shared/components/template-editor.component.js +1 -1
- package/package.json +48 -48
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-execution-log-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Actions/action-execution-log-form.component.ts","../../../../src/lib/custom/Actions/action-execution-log-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { MJActionExecutionLogEntity, MJActionEntity, MJUserEntity } from '@memberjunction/core-entities';\nimport { RegisterClass, ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJActionExecutionLogFormComponent } from '../../generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component';\n\ntype ParamType = 'Input' | 'Output' | 'Both';\ntype TypeFilter = 'All' | ParamType;\ntype SortKey = 'name' | 'type';\ntype SortDir = 'asc' | 'desc';\n\ninterface ActionParameter {\n Name: string;\n Value: unknown;\n Type: ParamType;\n}\n\ninterface DisplayParameter extends ActionParameter {\n ValueKind: 'string' | 'number' | 'boolean' | 'null' | 'undefined' | 'array' | 'object';\n Preview: string;\n IsExpandable: boolean;\n Expanded: boolean;\n FormattedValue: string;\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Action Execution Logs')\n@Component({\n standalone: false,\n selector: 'mj-action-execution-log-form',\n templateUrl: './action-execution-log-form.component.html',\n styleUrls: ['./action-execution-log-form.component.css']\n})\nexport class MJActionExecutionLogFormComponentExtended extends MJActionExecutionLogFormComponent implements OnInit {\n public record!: MJActionExecutionLogEntity;\n\n // Related entities\n public action: MJActionEntity | null = null;\n public user: MJUserEntity | null = null;\n\n // Loading states\n public isLoadingAction = false;\n public isLoadingUser = false;\n\n // Formatted JSON fields\n public formattedParams: string = '';\n public formattedMessage: string = '';\n\n // Unified parameter display\n public allParameters: DisplayParameter[] = [];\n public paramCounts: Record<TypeFilter, number> = { All: 0, Input: 0, Output: 0, Both: 0 };\n public hasAnyParameters = false;\n\n // Filter / sort / view state\n public typeFilter: TypeFilter = 'All';\n public searchText: string = '';\n public sortKey: SortKey = 'type';\n public sortDir: SortDir = 'asc';\n public showRawJson: boolean = false;\n\n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record?.IsSaved) {\n // Load related data\n await Promise.all([\n this.loadAction(),\n this.loadUser()\n ]);\n \n // Format JSON fields\n this.formatJSONFields();\n this.cdr.detectChanges();\n }\n }\n\n private async loadAction() {\n if (!this.record.ActionID) return;\n \n this.isLoadingAction = true;\n try {\n const md = this.ProviderToUse;\n this.action = await md.GetEntityObject<MJActionEntity>('MJ: Actions');\n if (this.action) {\n await this.action.Load(this.record.ActionID);\n }\n } catch (error) {\n console.error('Error loading action:', error);\n } finally {\n this.isLoadingAction = false;\n }\n }\n\n private async loadUser() {\n if (!this.record.UserID) return;\n \n this.isLoadingUser = true;\n try {\n const md = this.ProviderToUse;\n this.user = await md.GetEntityObject<MJUserEntity>('MJ: Users');\n if (this.user) {\n await this.user.Load(this.record.UserID);\n }\n } catch (error) {\n console.error('Error loading user:', error);\n } finally {\n this.isLoadingUser = false;\n }\n }\n\n private formatJSONFields() {\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n\n // Format Params with recursive JSON parsing\n if (this.record.Params) {\n try {\n const parsed = JSON.parse(this.record.Params);\n const recursivelyParsed = ParseJSONRecursive(parsed, parseOptions);\n this.formattedParams = JSON.stringify(recursivelyParsed, null, 2);\n\n if (Array.isArray(recursivelyParsed)) {\n this.buildDisplayParameters(recursivelyParsed as ActionParameter[]);\n }\n } catch (e) {\n this.formattedParams = this.record.Params;\n }\n }\n\n // Format Message field with recursive JSON parsing\n if (this.record.Message) {\n try {\n const parsed = JSON.parse(this.record.Message);\n const recursivelyParsed = ParseJSONRecursive(parsed, parseOptions);\n this.formattedMessage = JSON.stringify(recursivelyParsed, null, 2);\n } catch (e) {\n this.formattedMessage = this.record.Message;\n }\n }\n }\n\n /**\n * Build the unified parameter display list once, so filtering/sorting can\n * operate on a cheap, pre-computed structure.\n */\n private buildDisplayParameters(params: ActionParameter[]) {\n this.paramCounts = { All: 0, Input: 0, Output: 0, Both: 0 };\n this.allParameters = params\n .filter((p) => p && typeof p.Name === 'string')\n .map((p) => {\n const valueKind = this.detectValueKind(p.Value);\n const isExpandable = valueKind === 'array' || valueKind === 'object';\n this.paramCounts.All += 1;\n if (p.Type === 'Input' || p.Type === 'Output' || p.Type === 'Both') {\n this.paramCounts[p.Type] += 1;\n }\n return {\n Name: p.Name,\n Value: p.Value,\n Type: p.Type,\n ValueKind: valueKind,\n Preview: this.buildPreview(p.Value, valueKind),\n IsExpandable: isExpandable,\n Expanded: false,\n FormattedValue: isExpandable ? JSON.stringify(p.Value, null, 2) : ''\n };\n });\n this.hasAnyParameters = this.allParameters.length > 0;\n }\n\n private detectValueKind(value: unknown): DisplayParameter['ValueKind'] {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n const t = typeof value;\n if (t === 'string' || t === 'number' || t === 'boolean') return t;\n if (t === 'object') return 'object';\n return 'string';\n }\n\n /**\n * Short inline preview for the row header. Objects/arrays get a compact\n * one-liner; expansion reveals the full formatted JSON below.\n */\n private buildPreview(value: unknown, kind: DisplayParameter['ValueKind']): string {\n switch (kind) {\n case 'null': return 'null';\n case 'undefined': return 'undefined';\n case 'boolean': return value ? 'true' : 'false';\n case 'number': return String(value);\n case 'string': {\n const s = value as string;\n return s.length > 160 ? `\"${s.slice(0, 157)}…\"` : `\"${s}\"`;\n }\n case 'array': {\n const arr = value as unknown[];\n if (arr.length === 0) return '[]';\n if (arr.length <= 5 && arr.every((v) => v === null || typeof v !== 'object')) {\n return `[${arr.map((v) => this.buildPreview(v, this.detectValueKind(v))).join(', ')}]`;\n }\n return `Array(${arr.length})`;\n }\n case 'object': {\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 0) return '{}';\n const head = keys.slice(0, 3).join(', ');\n return keys.length <= 3 ? `{ ${head} }` : `{ ${head}, …+${keys.length - 3} }`;\n }\n }\n }\n\n // --- Filter / sort / view helpers (invoked from template) ----------------\n\n public get filteredParameters(): DisplayParameter[] {\n const needle = this.searchText.trim().toLowerCase();\n let list = this.allParameters;\n if (this.typeFilter !== 'All') {\n list = list.filter((p) => p.Type === this.typeFilter);\n }\n if (needle) {\n list = list.filter(\n (p) =>\n p.Name.toLowerCase().includes(needle) ||\n (p.Preview && p.Preview.toLowerCase().includes(needle))\n );\n }\n const typeOrder: Record<ParamType, number> = { Input: 0, Both: 1, Output: 2 };\n const dirMult = this.sortDir === 'asc' ? 1 : -1;\n return [...list].sort((a, b) => {\n if (this.sortKey === 'name') {\n return dirMult * a.Name.localeCompare(b.Name, undefined, { sensitivity: 'base' });\n }\n const typeCmp = typeOrder[a.Type] - typeOrder[b.Type];\n if (typeCmp !== 0) return dirMult * typeCmp;\n return a.Name.localeCompare(b.Name, undefined, { sensitivity: 'base' });\n });\n }\n\n public setTypeFilter(filter: TypeFilter): void {\n this.typeFilter = filter;\n }\n\n public toggleSort(key: SortKey): void {\n if (this.sortKey === key) {\n this.sortDir = this.sortDir === 'asc' ? 'desc' : 'asc';\n } else {\n this.sortKey = key;\n this.sortDir = 'asc';\n }\n }\n\n public toggleExpanded(param: DisplayParameter): void {\n if (!param.IsExpandable) return;\n param.Expanded = !param.Expanded;\n }\n\n public toggleRawJson(): void {\n this.showRawJson = !this.showRawJson;\n }\n\n public clearFilters(): void {\n this.typeFilter = 'All';\n this.searchText = '';\n }\n\n public trackParam(_index: number, p: DisplayParameter): string {\n return `${p.Type}::${p.Name}`;\n }\n\n public copyParamValue(param: DisplayParameter): void {\n const text = param.IsExpandable\n ? param.FormattedValue\n : this.formatScalarForCopy(param.Value);\n void this.copyToClipboard(text);\n }\n\n private formatScalarForCopy(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return '';\n if (typeof value === 'string') return value;\n return String(value);\n }\n\n /**\n * Returns the icon class for a value kind — rendered to the left of each\n * preview so object/array/scalar rows are visually distinct at a glance.\n */\n public getValueKindIcon(kind: DisplayParameter['ValueKind']): string {\n switch (kind) {\n case 'string': return 'fa-quote-right';\n case 'number': return 'fa-hashtag';\n case 'boolean': return 'fa-toggle-on';\n case 'array': return 'fa-list-ol';\n case 'object': return 'fa-code';\n case 'null': return 'fa-circle-minus';\n case 'undefined': return 'fa-ban';\n }\n }\n\n public getTypeLabel(type: ParamType): string {\n return type === 'Both' ? 'In/Out' : type;\n }\n\n // Navigation\n navigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromID(recordId));\n }\n\n navigateToAction() {\n if (this.record.ActionID) {\n this.navigateToEntity('MJ: Actions', this.record.ActionID);\n }\n }\n\n navigateToUser() {\n if (this.record.UserID) {\n this.navigateToEntity('MJ: Users', this.record.UserID);\n }\n }\n\n // UI Helpers\n getExecutionDuration(): number {\n if (!this.record.StartedAt || !this.record.EndedAt) return 0;\n return new Date(this.record.EndedAt).getTime() - new Date(this.record.StartedAt).getTime();\n }\n\n formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${(ms / 60000).toFixed(1)}m`;\n return `${(ms / 3600000).toFixed(1)}h`;\n }\n\n getResultCodeColor(): string {\n const code = this.record.ResultCode?.toLowerCase();\n if (code === 'success' || code === 'ok' || code === 'completed' || code === '200') {\n return 'var(--mj-status-success)';\n }\n return 'var(--mj-status-error)';\n }\n\n getResultCodeIcon(): string {\n const code = this.record.ResultCode?.toLowerCase();\n if (code === 'success' || code === 'ok' || code === 'completed' || code === '200') {\n return 'fa-check-circle';\n }\n return 'fa-times-circle';\n }\n\n // Save handlers for JSON fields\n async saveParams() {\n if (!this.EditMode) return;\n \n try {\n // Validate JSON\n JSON.parse(this.formattedParams);\n this.record.Params = this.formattedParams;\n await this.record.Save();\n } catch (e) {\n console.error('Invalid JSON in Params field:', e);\n // Could show notification here\n }\n }\n\n async saveMessage() {\n if (!this.EditMode) return;\n \n try {\n // Validate JSON\n JSON.parse(this.formattedMessage);\n this.record.Message = this.formattedMessage;\n await this.record.Save();\n } catch (e) {\n console.error('Invalid JSON in Message field:', e);\n // Could show notification here\n }\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n}\n","<div class=\"record-form-container action-execution-log-form\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <div class=\"record-form\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <!-- The action's own icon when it has one, matching how the same action is\n drawn in the run timeline. `fa-terminal` stays as the fallback: it is\n what this form has always shown, and it is the honest answer for an\n action whose metadata names no icon. -->\n @if (action && action.IconClass) {\n <i [ngClass]=\"action.IconClass\"></i>\n } @else {\n <i class=\"fas fa-terminal\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>Action Execution Log</h2>\n <div class=\"meta-info\">\n @if (action) {\n <span class=\"action-name\">{{ action.Name }}</span>\n }\n <span class=\"log-id\">{{ record.ID }}</span>\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.ResultCode?.toLowerCase()\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\"></i>\n {{ record.ResultCode || 'UNKNOWN' }}\n </div>\n <div class=\"execution-time\">\n <i class=\"fas fa-clock\"></i>\n {{ formatDuration(getExecutionDuration()) }}\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'short' }}</span>\n </div>\n @if (record.EndedAt) {\n <div class=\"stat\">\n <span class=\"label\">Ended</span>\n <span class=\"value\">{{ record.EndedAt | date:'short' }}</span>\n </div>\n }\n @if (action) {\n <div class=\"stat\">\n <span class=\"label\">Action</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToAction()\">\n {{ action.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n @if (user) {\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToUser()\">\n {{ user.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Content Area -->\n <div class=\"content-area\">\n <div class=\"accordion-container\">\n <!-- Execution Details -->\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Execution Details\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Execution ID</label>\n <span class=\"monospace\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Action ID</label>\n <span class=\"monospace\">{{ record.ActionID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>User ID</label>\n <span class=\"monospace\">{{ record.UserID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Result Code</label>\n <span class=\"detail-value\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\" [style.color]=\"getResultCodeColor()\"></i>\n <span [style.color]=\"getResultCodeColor()\">{{ record.ResultCode || 'N/A' }}</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Duration</label>\n <span>{{ formatDuration(getExecutionDuration()) }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Retention Period</label>\n <span>{{ record.RetentionPeriod ? record.RetentionPeriod + ' days' : 'Indefinite' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Unified Parameters section -->\n @if (hasAnyParameters) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-sliders-h\"></i>\n Parameters\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ paramCounts.All }}</span>\n </ng-template>\n <div class=\"params-panel\">\n <!-- Toolbar: filter chips, search, sort, raw toggle -->\n <div class=\"params-toolbar\">\n <div class=\"filter-chips\">\n <button\n type=\"button\"\n class=\"chip\"\n [class.active]=\"typeFilter === 'All'\"\n (click)=\"setTypeFilter('All')\">\n All <span class=\"chip-count\">{{ paramCounts.All }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-input\"\n [class.active]=\"typeFilter === 'Input'\"\n [disabled]=\"paramCounts.Input === 0\"\n (click)=\"setTypeFilter('Input')\">\n <i class=\"fas fa-sign-in-alt\"></i>\n Input <span class=\"chip-count\">{{ paramCounts.Input }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-both\"\n [class.active]=\"typeFilter === 'Both'\"\n [disabled]=\"paramCounts.Both === 0\"\n (click)=\"setTypeFilter('Both')\">\n <i class=\"fas fa-exchange-alt\"></i>\n In/Out <span class=\"chip-count\">{{ paramCounts.Both }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-output\"\n [class.active]=\"typeFilter === 'Output'\"\n [disabled]=\"paramCounts.Output === 0\"\n (click)=\"setTypeFilter('Output')\">\n <i class=\"fas fa-sign-out-alt\"></i>\n Output <span class=\"chip-count\">{{ paramCounts.Output }}</span>\n </button>\n </div>\n\n <div class=\"toolbar-right\">\n <div class=\"search-wrapper\">\n <i class=\"fas fa-search search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-input params-search\"\n placeholder=\"Search name or value…\"\n [(ngModel)]=\"searchText\"\n name=\"paramSearch\" />\n @if (searchText) {\n <button type=\"button\" class=\"search-clear\" (click)=\"searchText = ''\" title=\"Clear search\">\n <i class=\"fas fa-times\"></i>\n </button>\n }\n </div>\n\n <div class=\"sort-group\" role=\"group\" aria-label=\"Sort parameters\">\n <button\n type=\"button\"\n class=\"sort-btn\"\n [class.active]=\"sortKey === 'type'\"\n (click)=\"toggleSort('type')\"\n title=\"Sort by type\">\n Type\n @if (sortKey === 'type') {\n <i class=\"fas\" [ngClass]=\"sortDir === 'asc' ? 'fa-arrow-down-short-wide' : 'fa-arrow-up-wide-short'\"></i>\n }\n </button>\n <button\n type=\"button\"\n class=\"sort-btn\"\n [class.active]=\"sortKey === 'name'\"\n (click)=\"toggleSort('name')\"\n title=\"Sort by name\">\n Name\n @if (sortKey === 'name') {\n <i class=\"fas\" [ngClass]=\"sortDir === 'asc' ? 'fa-arrow-down-a-z' : 'fa-arrow-up-z-a'\"></i>\n }\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"raw-toggle\"\n [class.active]=\"showRawJson\"\n (click)=\"toggleRawJson()\"\n title=\"Toggle raw JSON view\">\n <i class=\"fas fa-code\"></i>\n Raw\n </button>\n </div>\n </div>\n\n @if (showRawJson) {\n <div class=\"json-viewer raw-json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">Raw JSON</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedParams)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"formattedParams\"\n name=\"formattedParamsRaw\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 360px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <!-- Rich param list -->\n @if (filteredParameters.length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Icon=\"fa-solid fa-filter-circle-xmark\"\n Title=\"No parameters match the current filter.\"\n ActionText=\"Clear filters\"\n ActionIcon=\"fa-solid fa-rotate-left\"\n ActionVariant=\"flat\"\n (Action)=\"clearFilters()\" />\n } @else {\n <ul class=\"params-list\">\n @for (p of filteredParameters; track trackParam($index, p)) {\n <li class=\"param-row\" [attr.data-type]=\"p.Type\">\n <div class=\"param-header\">\n <span class=\"type-badge\" [attr.data-type]=\"p.Type\">\n @if (p.Type === 'Input') {\n <i class=\"fas fa-sign-in-alt\"></i>\n } @else if (p.Type === 'Output') {\n <i class=\"fas fa-sign-out-alt\"></i>\n } @else {\n <i class=\"fas fa-exchange-alt\"></i>\n }\n {{ getTypeLabel(p.Type) }}\n </span>\n <div class=\"param-name-wrap\">\n <span class=\"param-name\">{{ p.Name }}</span>\n <span class=\"value-kind-chip\" [attr.data-kind]=\"p.ValueKind\">\n <i class=\"fas\" [ngClass]=\"getValueKindIcon(p.ValueKind)\"></i>\n {{ p.ValueKind }}\n </span>\n </div>\n <div class=\"param-actions\">\n @if (p.IsExpandable) {\n <button type=\"button\" class=\"btn-icon param-expand\" [class.is-expanded]=\"p.Expanded\" (click)=\"toggleExpanded(p)\" [title]=\"p.Expanded ? 'Collapse' : 'Expand'\">\n <i class=\"fas\" [ngClass]=\"p.Expanded ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n }\n <button type=\"button\" class=\"btn-icon\" (click)=\"copyParamValue(p)\" title=\"Copy value\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n </div>\n <div class=\"param-preview\" [attr.data-kind]=\"p.ValueKind\">{{ p.Preview }}</div>\n @if (p.IsExpandable && p.Expanded) {\n <div class=\"param-expanded\">\n <mj-code-editor\n [(ngModel)]=\"p.FormattedValue\"\n [name]=\"'param-' + p.Name\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 240px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </li>\n }\n </ul>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Output Message -->\n @if (record.Message) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-comment-alt\"></i> Output Message\n </ng-template>\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">JSON</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedMessage)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessage\"\n name=\"formattedMessage\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Empty States for missing data -->\n @if (!record.Params && !record.Message && !hasAnyParameters) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No execution data recorded\" />\n </mj-accordion-panel>\n }\n </div>\n </div>\n </div>\n</div>"]}
|
|
1
|
+
{"version":3,"file":"action-execution-log-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/Actions/action-execution-log-form.component.ts","../../../../src/lib/custom/Actions/action-execution-log-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { MJActionExecutionLogEntity, MJActionEntity, MJUserEntity } from '@memberjunction/core-entities';\nimport { RegisterClass, ParseJSONRecursive, ParseJSONOptions } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { SharedService } from '@memberjunction/ng-shared';\nimport { Metadata, CompositeKey } from '@memberjunction/core';\nimport { MJActionExecutionLogFormComponent } from '../../generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component';\n\ntype ParamType = 'Input' | 'Output' | 'Both';\ntype TypeFilter = 'All' | ParamType;\ntype SortKey = 'name' | 'type';\ntype SortDir = 'asc' | 'desc';\n\ninterface ActionParameter {\n Name: string;\n Value: unknown;\n Type: ParamType;\n}\n\ninterface DisplayParameter extends ActionParameter {\n ValueKind: 'string' | 'number' | 'boolean' | 'null' | 'undefined' | 'array' | 'object';\n Preview: string;\n IsExpandable: boolean;\n Expanded: boolean;\n FormattedValue: string;\n}\n\n@RegisterClass(BaseFormComponent, 'MJ: Action Execution Logs')\n@Component({\n standalone: false,\n selector: 'mj-action-execution-log-form',\n templateUrl: './action-execution-log-form.component.html',\n styleUrls: ['./action-execution-log-form.component.css']\n})\nexport class MJActionExecutionLogFormComponentExtended extends MJActionExecutionLogFormComponent implements OnInit {\n public record!: MJActionExecutionLogEntity;\n\n // Related entities\n public action: MJActionEntity | null = null;\n public user: MJUserEntity | null = null;\n\n // Loading states\n public isLoadingAction = false;\n public isLoadingUser = false;\n\n // Formatted JSON fields\n public formattedParams: string = '';\n public formattedMessage: string = '';\n\n // Unified parameter display\n public allParameters: DisplayParameter[] = [];\n public paramCounts: Record<TypeFilter, number> = { All: 0, Input: 0, Output: 0, Both: 0 };\n public hasAnyParameters = false;\n\n // Filter / sort / view state\n public typeFilter: TypeFilter = 'All';\n public searchText: string = '';\n public sortKey: SortKey = 'type';\n public sortDir: SortDir = 'asc';\n public showRawJson: boolean = false;\n\n async ngOnInit() {\n await super.ngOnInit();\n \n if (this.record?.IsSaved) {\n // Load related data\n await Promise.all([\n this.loadAction(),\n this.loadUser()\n ]);\n \n // Format JSON fields\n this.formatJSONFields();\n this.cdr.detectChanges();\n }\n }\n\n private async loadAction() {\n if (!this.record.ActionID) return;\n \n this.isLoadingAction = true;\n try {\n const md = this.ProviderToUse;\n this.action = await md.GetEntityObject<MJActionEntity>('MJ: Actions');\n if (this.action) {\n await this.action.Load(this.record.ActionID);\n }\n } catch (error) {\n console.error('Error loading action:', error);\n } finally {\n this.isLoadingAction = false;\n }\n }\n\n private async loadUser() {\n if (!this.record.UserID) return;\n \n this.isLoadingUser = true;\n try {\n const md = this.ProviderToUse;\n this.user = await md.GetEntityObject<MJUserEntity>('MJ: Users');\n if (this.user) {\n await this.user.Load(this.record.UserID);\n }\n } catch (error) {\n console.error('Error loading user:', error);\n } finally {\n this.isLoadingUser = false;\n }\n }\n\n private formatJSONFields() {\n const parseOptions: ParseJSONOptions = {\n extractInlineJson: true,\n maxDepth: 100,\n debug: false\n };\n\n // Format Params with recursive JSON parsing\n if (this.record.Params) {\n try {\n const parsed = JSON.parse(this.record.Params);\n const recursivelyParsed = ParseJSONRecursive(parsed, parseOptions);\n this.formattedParams = JSON.stringify(recursivelyParsed, null, 2);\n\n if (Array.isArray(recursivelyParsed)) {\n this.buildDisplayParameters(recursivelyParsed as ActionParameter[]);\n }\n } catch (e) {\n this.formattedParams = this.record.Params;\n }\n }\n\n // Format Message field with recursive JSON parsing\n if (this.record.Message) {\n try {\n const parsed = JSON.parse(this.record.Message);\n const recursivelyParsed = ParseJSONRecursive(parsed, parseOptions);\n this.formattedMessage = JSON.stringify(recursivelyParsed, null, 2);\n } catch (e) {\n this.formattedMessage = this.record.Message;\n }\n }\n }\n\n /**\n * Build the unified parameter display list once, so filtering/sorting can\n * operate on a cheap, pre-computed structure.\n */\n private buildDisplayParameters(params: ActionParameter[]) {\n this.paramCounts = { All: 0, Input: 0, Output: 0, Both: 0 };\n this.allParameters = params\n .filter((p) => p && typeof p.Name === 'string')\n .map((p) => {\n const valueKind = this.detectValueKind(p.Value);\n const isExpandable = valueKind === 'array' || valueKind === 'object';\n this.paramCounts.All += 1;\n if (p.Type === 'Input' || p.Type === 'Output' || p.Type === 'Both') {\n this.paramCounts[p.Type] += 1;\n }\n return {\n Name: p.Name,\n Value: p.Value,\n Type: p.Type,\n ValueKind: valueKind,\n Preview: this.buildPreview(p.Value, valueKind),\n IsExpandable: isExpandable,\n Expanded: false,\n FormattedValue: isExpandable ? JSON.stringify(p.Value, null, 2) : ''\n };\n });\n this.hasAnyParameters = this.allParameters.length > 0;\n }\n\n private detectValueKind(value: unknown): DisplayParameter['ValueKind'] {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (Array.isArray(value)) return 'array';\n const t = typeof value;\n if (t === 'string' || t === 'number' || t === 'boolean') return t;\n if (t === 'object') return 'object';\n return 'string';\n }\n\n /**\n * Short inline preview for the row header. Objects/arrays get a compact\n * one-liner; expansion reveals the full formatted JSON below.\n */\n private buildPreview(value: unknown, kind: DisplayParameter['ValueKind']): string {\n switch (kind) {\n case 'null': return 'null';\n case 'undefined': return 'undefined';\n case 'boolean': return value ? 'true' : 'false';\n case 'number': return String(value);\n case 'string': {\n const s = value as string;\n return s.length > 160 ? `\"${s.slice(0, 157)}…\"` : `\"${s}\"`;\n }\n case 'array': {\n const arr = value as unknown[];\n if (arr.length === 0) return '[]';\n if (arr.length <= 5 && arr.every((v) => v === null || typeof v !== 'object')) {\n return `[${arr.map((v) => this.buildPreview(v, this.detectValueKind(v))).join(', ')}]`;\n }\n return `Array(${arr.length})`;\n }\n case 'object': {\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj);\n if (keys.length === 0) return '{}';\n const head = keys.slice(0, 3).join(', ');\n return keys.length <= 3 ? `{ ${head} }` : `{ ${head}, …+${keys.length - 3} }`;\n }\n }\n }\n\n // --- Filter / sort / view helpers (invoked from template) ----------------\n\n public get filteredParameters(): DisplayParameter[] {\n const needle = this.searchText.trim().toLowerCase();\n let list = this.allParameters;\n if (this.typeFilter !== 'All') {\n list = list.filter((p) => p.Type === this.typeFilter);\n }\n if (needle) {\n list = list.filter(\n (p) =>\n p.Name.toLowerCase().includes(needle) ||\n (p.Preview && p.Preview.toLowerCase().includes(needle))\n );\n }\n const typeOrder: Record<ParamType, number> = { Input: 0, Both: 1, Output: 2 };\n const dirMult = this.sortDir === 'asc' ? 1 : -1;\n return [...list].sort((a, b) => {\n if (this.sortKey === 'name') {\n return dirMult * a.Name.localeCompare(b.Name, undefined, { sensitivity: 'base' });\n }\n const typeCmp = typeOrder[a.Type] - typeOrder[b.Type];\n if (typeCmp !== 0) return dirMult * typeCmp;\n return a.Name.localeCompare(b.Name, undefined, { sensitivity: 'base' });\n });\n }\n\n public setTypeFilter(filter: TypeFilter): void {\n this.typeFilter = filter;\n }\n\n public toggleSort(key: SortKey): void {\n if (this.sortKey === key) {\n this.sortDir = this.sortDir === 'asc' ? 'desc' : 'asc';\n } else {\n this.sortKey = key;\n this.sortDir = 'asc';\n }\n }\n\n public toggleExpanded(param: DisplayParameter): void {\n if (!param.IsExpandable) return;\n param.Expanded = !param.Expanded;\n }\n\n public toggleRawJson(): void {\n this.showRawJson = !this.showRawJson;\n }\n\n public clearFilters(): void {\n this.typeFilter = 'All';\n this.searchText = '';\n }\n\n public trackParam(_index: number, p: DisplayParameter): string {\n return `${p.Type}::${p.Name}`;\n }\n\n public copyParamValue(param: DisplayParameter): void {\n const text = param.IsExpandable\n ? param.FormattedValue\n : this.formatScalarForCopy(param.Value);\n void this.copyToClipboard(text);\n }\n\n private formatScalarForCopy(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return '';\n if (typeof value === 'string') return value;\n return String(value);\n }\n\n /**\n * Returns the icon class for a value kind — rendered to the left of each\n * preview so object/array/scalar rows are visually distinct at a glance.\n */\n public getValueKindIcon(kind: DisplayParameter['ValueKind']): string {\n switch (kind) {\n case 'string': return 'fa-quote-right';\n case 'number': return 'fa-hashtag';\n case 'boolean': return 'fa-toggle-on';\n case 'array': return 'fa-list-ol';\n case 'object': return 'fa-code';\n case 'null': return 'fa-circle-minus';\n case 'undefined': return 'fa-ban';\n }\n }\n\n public getTypeLabel(type: ParamType): string {\n return type === 'Both' ? 'In/Out' : type;\n }\n\n // Navigation\n navigateToEntity(entityName: string, recordId: string | null) {\n if (!recordId) return;\n SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(entityName), recordId));\n }\n\n navigateToAction() {\n if (this.record.ActionID) {\n this.navigateToEntity('MJ: Actions', this.record.ActionID);\n }\n }\n\n navigateToUser() {\n if (this.record.UserID) {\n this.navigateToEntity('MJ: Users', this.record.UserID);\n }\n }\n\n // UI Helpers\n getExecutionDuration(): number {\n if (!this.record.StartedAt || !this.record.EndedAt) return 0;\n return new Date(this.record.EndedAt).getTime() - new Date(this.record.StartedAt).getTime();\n }\n\n formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n if (ms < 3600000) return `${(ms / 60000).toFixed(1)}m`;\n return `${(ms / 3600000).toFixed(1)}h`;\n }\n\n getResultCodeColor(): string {\n const code = this.record.ResultCode?.toLowerCase();\n if (code === 'success' || code === 'ok' || code === 'completed' || code === '200') {\n return 'var(--mj-status-success)';\n }\n return 'var(--mj-status-error)';\n }\n\n getResultCodeIcon(): string {\n const code = this.record.ResultCode?.toLowerCase();\n if (code === 'success' || code === 'ok' || code === 'completed' || code === '200') {\n return 'fa-check-circle';\n }\n return 'fa-times-circle';\n }\n\n // Save handlers for JSON fields\n async saveParams() {\n if (!this.EditMode) return;\n \n try {\n // Validate JSON\n JSON.parse(this.formattedParams);\n this.record.Params = this.formattedParams;\n await this.record.Save();\n } catch (e) {\n console.error('Invalid JSON in Params field:', e);\n // Could show notification here\n }\n }\n\n async saveMessage() {\n if (!this.EditMode) return;\n \n try {\n // Validate JSON\n JSON.parse(this.formattedMessage);\n this.record.Message = this.formattedMessage;\n await this.record.Save();\n } catch (e) {\n console.error('Invalid JSON in Message field:', e);\n // Could show notification here\n }\n }\n \n async copyToClipboard(text: string) {\n try {\n await navigator.clipboard.writeText(text);\n // Could show a toast notification here\n } catch (err) {\n console.error('Failed to copy to clipboard:', err);\n }\n }\n}\n","<div class=\"record-form-container action-execution-log-form\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <div class=\"record-form\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <!-- Header -->\n <div class=\"header\">\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"icon-wrapper\">\n <!-- The action's own icon when it has one, matching how the same action is\n drawn in the run timeline. `fa-terminal` stays as the fallback: it is\n what this form has always shown, and it is the honest answer for an\n action whose metadata names no icon. -->\n @if (action && action.IconClass) {\n <i [ngClass]=\"action.IconClass\"></i>\n } @else {\n <i class=\"fas fa-terminal\"></i>\n }\n </div>\n <div class=\"header-info\">\n <h2>Action Execution Log</h2>\n <div class=\"meta-info\">\n @if (action) {\n <span class=\"action-name\">{{ action.Name }}</span>\n }\n <span class=\"log-id\">{{ record.ID }}</span>\n </div>\n </div>\n </div>\n <div class=\"header-right\">\n <div class=\"status-badge\" [attr.data-status]=\"record.ResultCode?.toLowerCase()\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\"></i>\n {{ record.ResultCode || 'UNKNOWN' }}\n </div>\n <div class=\"execution-time\">\n <i class=\"fas fa-clock\"></i>\n {{ formatDuration(getExecutionDuration()) }}\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat\">\n <span class=\"label\">Started</span>\n <span class=\"value\">{{ record.StartedAt | date:'short' }}</span>\n </div>\n @if (record.EndedAt) {\n <div class=\"stat\">\n <span class=\"label\">Ended</span>\n <span class=\"value\">{{ record.EndedAt | date:'short' }}</span>\n </div>\n }\n @if (action) {\n <div class=\"stat\">\n <span class=\"label\">Action</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToAction()\">\n {{ action.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n @if (user) {\n <div class=\"stat\">\n <span class=\"label\">User</span>\n <span class=\"value\">\n <button class=\"btn-link\" (click)=\"navigateToUser()\">\n {{ user.Name }}\n <i class=\"fas fa-external-link-alt\"></i>\n </button>\n </span>\n </div>\n }\n </div>\n </div>\n\n <!-- Content Area -->\n <div class=\"content-area\">\n <div class=\"accordion-container\">\n <!-- Execution Details -->\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-info-circle\"></i> Execution Details\n </ng-template>\n <div class=\"details-grid\">\n <div class=\"detail-item\">\n <label>Execution ID</label>\n <span class=\"monospace\">{{ record.ID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Action ID</label>\n <span class=\"monospace\">{{ record.ActionID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>User ID</label>\n <span class=\"monospace\">{{ record.UserID }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Result Code</label>\n <span class=\"detail-value\">\n <i class=\"fas\" [ngClass]=\"getResultCodeIcon()\" [style.color]=\"getResultCodeColor()\"></i>\n <span [style.color]=\"getResultCodeColor()\">{{ record.ResultCode || 'N/A' }}</span>\n </span>\n </div>\n <div class=\"detail-item\">\n <label>Duration</label>\n <span>{{ formatDuration(getExecutionDuration()) }}</span>\n </div>\n <div class=\"detail-item\">\n <label>Retention Period</label>\n <span>{{ record.RetentionPeriod ? record.RetentionPeriod + ' days' : 'Indefinite' }}</span>\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Unified Parameters section -->\n @if (hasAnyParameters) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-sliders-h\"></i>\n Parameters\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ paramCounts.All }}</span>\n </ng-template>\n <div class=\"params-panel\">\n <!-- Toolbar: filter chips, search, sort, raw toggle -->\n <div class=\"params-toolbar\">\n <div class=\"filter-chips\">\n <button\n type=\"button\"\n class=\"chip\"\n [class.active]=\"typeFilter === 'All'\"\n (click)=\"setTypeFilter('All')\">\n All <span class=\"chip-count\">{{ paramCounts.All }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-input\"\n [class.active]=\"typeFilter === 'Input'\"\n [disabled]=\"paramCounts.Input === 0\"\n (click)=\"setTypeFilter('Input')\">\n <i class=\"fas fa-sign-in-alt\"></i>\n Input <span class=\"chip-count\">{{ paramCounts.Input }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-both\"\n [class.active]=\"typeFilter === 'Both'\"\n [disabled]=\"paramCounts.Both === 0\"\n (click)=\"setTypeFilter('Both')\">\n <i class=\"fas fa-exchange-alt\"></i>\n In/Out <span class=\"chip-count\">{{ paramCounts.Both }}</span>\n </button>\n <button\n type=\"button\"\n class=\"chip chip-output\"\n [class.active]=\"typeFilter === 'Output'\"\n [disabled]=\"paramCounts.Output === 0\"\n (click)=\"setTypeFilter('Output')\">\n <i class=\"fas fa-sign-out-alt\"></i>\n Output <span class=\"chip-count\">{{ paramCounts.Output }}</span>\n </button>\n </div>\n\n <div class=\"toolbar-right\">\n <div class=\"search-wrapper\">\n <i class=\"fas fa-search search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-input params-search\"\n placeholder=\"Search name or value…\"\n [(ngModel)]=\"searchText\"\n name=\"paramSearch\" />\n @if (searchText) {\n <button type=\"button\" class=\"search-clear\" (click)=\"searchText = ''\" title=\"Clear search\">\n <i class=\"fas fa-times\"></i>\n </button>\n }\n </div>\n\n <div class=\"sort-group\" role=\"group\" aria-label=\"Sort parameters\">\n <button\n type=\"button\"\n class=\"sort-btn\"\n [class.active]=\"sortKey === 'type'\"\n (click)=\"toggleSort('type')\"\n title=\"Sort by type\">\n Type\n @if (sortKey === 'type') {\n <i class=\"fas\" [ngClass]=\"sortDir === 'asc' ? 'fa-arrow-down-short-wide' : 'fa-arrow-up-wide-short'\"></i>\n }\n </button>\n <button\n type=\"button\"\n class=\"sort-btn\"\n [class.active]=\"sortKey === 'name'\"\n (click)=\"toggleSort('name')\"\n title=\"Sort by name\">\n Name\n @if (sortKey === 'name') {\n <i class=\"fas\" [ngClass]=\"sortDir === 'asc' ? 'fa-arrow-down-a-z' : 'fa-arrow-up-z-a'\"></i>\n }\n </button>\n </div>\n\n <button\n type=\"button\"\n class=\"raw-toggle\"\n [class.active]=\"showRawJson\"\n (click)=\"toggleRawJson()\"\n title=\"Toggle raw JSON view\">\n <i class=\"fas fa-code\"></i>\n Raw\n </button>\n </div>\n </div>\n\n @if (showRawJson) {\n <div class=\"json-viewer raw-json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">Raw JSON</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedParams)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor\n [(ngModel)]=\"formattedParams\"\n name=\"formattedParamsRaw\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 360px; width: 100%;\">\n </mj-code-editor>\n </div>\n } @else {\n <!-- Rich param list -->\n @if (filteredParameters.length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Icon=\"fa-solid fa-filter-circle-xmark\"\n Title=\"No parameters match the current filter.\"\n ActionText=\"Clear filters\"\n ActionIcon=\"fa-solid fa-rotate-left\"\n ActionVariant=\"flat\"\n (Action)=\"clearFilters()\" />\n } @else {\n <ul class=\"params-list\">\n @for (p of filteredParameters; track trackParam($index, p)) {\n <li class=\"param-row\" [attr.data-type]=\"p.Type\">\n <div class=\"param-header\">\n <span class=\"type-badge\" [attr.data-type]=\"p.Type\">\n @if (p.Type === 'Input') {\n <i class=\"fas fa-sign-in-alt\"></i>\n } @else if (p.Type === 'Output') {\n <i class=\"fas fa-sign-out-alt\"></i>\n } @else {\n <i class=\"fas fa-exchange-alt\"></i>\n }\n {{ getTypeLabel(p.Type) }}\n </span>\n <div class=\"param-name-wrap\">\n <span class=\"param-name\">{{ p.Name }}</span>\n <span class=\"value-kind-chip\" [attr.data-kind]=\"p.ValueKind\">\n <i class=\"fas\" [ngClass]=\"getValueKindIcon(p.ValueKind)\"></i>\n {{ p.ValueKind }}\n </span>\n </div>\n <div class=\"param-actions\">\n @if (p.IsExpandable) {\n <button type=\"button\" class=\"btn-icon param-expand\" [class.is-expanded]=\"p.Expanded\" (click)=\"toggleExpanded(p)\" [title]=\"p.Expanded ? 'Collapse' : 'Expand'\">\n <i class=\"fas\" [ngClass]=\"p.Expanded ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n }\n <button type=\"button\" class=\"btn-icon\" (click)=\"copyParamValue(p)\" title=\"Copy value\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n </div>\n <div class=\"param-preview\" [attr.data-kind]=\"p.ValueKind\">{{ p.Preview }}</div>\n @if (p.IsExpandable && p.Expanded) {\n <div class=\"param-expanded\">\n <mj-code-editor\n [(ngModel)]=\"p.FormattedValue\"\n [name]=\"'param-' + p.Name\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 240px; width: 100%;\">\n </mj-code-editor>\n </div>\n }\n </li>\n }\n </ul>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Output Message -->\n @if (record.Message) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-comment-alt\"></i> Output Message\n </ng-template>\n <div class=\"json-viewer\">\n <div class=\"json-toolbar\">\n <span class=\"json-label\">JSON</span>\n <button class=\"btn-icon\" title=\"Copy JSON\" (click)=\"copyToClipboard(formattedMessage)\">\n <i class=\"fas fa-copy\"></i>\n </button>\n </div>\n <mj-code-editor \n [(ngModel)]=\"formattedMessage\"\n name=\"formattedMessage\"\n [readonly]=\"true\"\n [language]=\"'json'\"\n [lineWrapping]=\"true\"\n style=\"height: 300px; width: 100%;\">\n </mj-code-editor>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Empty States for missing data -->\n @if (!record.Params && !record.Message && !hasAnyParameters) {\n <mj-accordion-panel [Expanded]=\"true\">\n <ng-template mjAccordionTitle>\n <i class=\"fas fa-database\"></i> Execution Data\n </ng-template>\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-inbox\"\n Title=\"No execution data recorded\" />\n </mj-accordion-panel>\n }\n </div>\n </div>\n </div>\n</div>"]}
|
|
@@ -1864,7 +1864,7 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
1864
1864
|
navigateToEntity(entityName, recordId) {
|
|
1865
1865
|
if (!recordId)
|
|
1866
1866
|
return;
|
|
1867
|
-
SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.
|
|
1867
|
+
SharedService.Instance.OpenEntityRecord(entityName, CompositeKey.FromURLSegment(this.ProviderToUse.EntityByName(entityName), recordId));
|
|
1868
1868
|
}
|
|
1869
1869
|
navigateToCategory() {
|
|
1870
1870
|
if (this.record.CategoryID) {
|
|
@@ -2272,7 +2272,7 @@ let MJActionFormComponentExtended = class MJActionFormComponentExtended extends
|
|
|
2272
2272
|
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
2273
2273
|
i0.ɵɵadvance();
|
|
2274
2274
|
i0.ɵɵproperty("Action", ctx.record)("ActionParams", ctx.actionParams)("IsOpen", ctx.showTestHarness);
|
|
2275
|
-
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJSwitchComponent, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ActionTestHarnessDialogComponent, i6.DatePipe], styles: ["\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.approval-required-alert[_ngcontent-%COMP%] { margin-top: 16px; }\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n.action-hero-header[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 var(--mj-radius-lg) var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-md);\n}\n\n.hero-content[_ngcontent-%COMP%] {\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.action-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n border-radius: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-4xl);\n}\n\n.action-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.action-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.action-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 2em;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-inverse);\n}\n\n.action-name-input[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: var(--mj-font-semibold);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n min-width: 400px;\n}\n\n.action-name-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n}\n\n.action-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%], .type-badge[_ngcontent-%COMP%], .approval-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n}\n\n.action-category[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 0.95em;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n margin-bottom: 12px;\n}\n\n.action-category[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n transform: translateX(4px);\n}\n\n.action-description[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 1.05em;\n line-height: var(--mj-leading-relaxed);\n margin: 0;\n}\n\n.action-description-input[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 600px;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n border-radius: var(--mj-radius-md);\n}\n\n.action-description-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n}\n\n\n\n.action-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: var(--mj-radius-lg);\n padding: 16px 24px;\n display: flex;\n align-items: center;\n gap: 16px;\n min-width: 160px;\n}\n\n.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: color-mix(in srgb, var(--mj-text-inverse) 80%, transparent);\n}\n\n.stat-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: color-mix(in srgb, var(--mj-text-inverse) 70%, transparent);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n.hero-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.hero-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n backdrop-filter: blur(10px);\n}\n\n\n\n.action-content[_ngcontent-%COMP%] {\n padding: 0 20px 20px;\n}\n\n.content-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n margin-bottom: 20px;\n overflow: hidden;\n transition: all var(--mj-transition-base);\n}\n\n.content-section[_ngcontent-%COMP%]:hover {\n box-shadow: var(--mj-shadow-md);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: var(--mj-bg-surface-elevated);\n cursor: pointer;\n user-select: none;\n transition: background var(--mj-transition-base);\n}\n\n.section-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.3em;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.section-count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s;\n}\n\n.toggle-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n}\n\n.section-content[_ngcontent-%COMP%] {\n padding: 24px;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n.overview-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.overview-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.overview-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.overview-display[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 24px;\n}\n\n.display-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.display-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.display-value.code[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.approval-date[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-left: 8px;\n}\n\n\n\n.generation-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: var(--mj-color-indigo-500);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.prompt-section[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.prompt-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n}\n\n.generation-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.code-locked-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.code-editor-section[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n}\n\n.code-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.code-toolbar[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-info);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n line-height: var(--mj-leading-relaxed);\n}\n\n.approval-comments[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.approval-comments[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-status-error);\n}\n\n\n\n.params-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-lg);\n padding: 20px;\n}\n\n.params-section.params-section-compact[_ngcontent-%COMP%] {\n padding: 12px 20px;\n}\n\n.params-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.params-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.params-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.param-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n transition: all var(--mj-transition-base);\n}\n\n.param-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.param-card.required[_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n}\n\n.param-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.param-card.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.param-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.param-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.param-edit-btn[_ngcontent-%COMP%], \n.param-delete-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-sm);\n transition: all var(--mj-transition-base);\n}\n\n.param-edit-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.param-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.param-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.array-badge[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.param-type[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-bottom: 8px;\n}\n\n.param-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.param-default[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.default-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n}\n\n.param-default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-family: 'Courier New', monospace;\n color: var(--mj-color-error-400);\n}\n\n\n\n\n.result-codes-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.result-code-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 16px;\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n transition: all var(--mj-transition-base);\n position: relative;\n}\n\n.result-code-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.result-code-card.success[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity var(--mj-transition-base);\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover .result-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.result-edit-btn[_ngcontent-%COMP%], \n.result-delete-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n padding: 4px 8px;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n font-size: var(--mj-text-sm);\n}\n\n.result-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.result-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\n}\n\n.result-icon[_ngcontent-%COMP%] {\n font-size: 1.5em;\n flex-shrink: 0;\n}\n\n.result-code-card.success[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.result-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-code[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n\n\n.execution-stats-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n flex-wrap: wrap;\n}\n\n.stat-box[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 200px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.stat-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n color: var(--mj-text-muted);\n}\n\n.stat-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.executions-table[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n}\n\n.executions-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 12px;\n text-align: left;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.executions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.execution-row[_ngcontent-%COMP%] {\n transition: background var(--mj-transition-base);\n}\n\n.execution-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.execution-row.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 5%, transparent);\n}\n\n.running[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-style: italic;\n}\n\n.result-code[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.result-code.failure[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n\n.config-subsection[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n.config-subsection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.library-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.library-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.library-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateX(4px);\n}\n\n.library-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.5em;\n color: var(--mj-text-muted);\n}\n\n.library-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.library-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.library-items[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n font-family: 'Courier New', monospace;\n}\n\n.related-entities-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.related-entity-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.related-entity-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.related-entity-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.related-entity-link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n flex: 1;\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.entity-count[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-sm);\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n margin-bottom: 12px;\n}\n\n\n\n@media (max-width: 768px) {\n .action-hero-header[_ngcontent-%COMP%] {\n padding: 20px;\n }\n\n .action-identity[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n\n .action-icon-wrapper[_ngcontent-%COMP%] {\n margin: 0 auto;\n }\n\n .action-title-row[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .action-stats[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .params-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] }); }
|
|
2275
|
+
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJEmptyStateComponent, i2.MJAlertComponent, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDropdownComponent, i2.MJSwitchComponent, i3.MjRecordFormContainerComponent, i4.CodeEditorComponent, i5.ActionTestHarnessDialogComponent, i6.DatePipe], styles: ["\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.approval-required-alert[_ngcontent-%COMP%] { margin-top: 16px; }\n\n.record-form-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n.action-hero-header[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 32px;\n margin: -20px -20px 24px -20px;\n border-radius: 0 0 var(--mj-radius-lg) var(--mj-radius-lg);\n box-shadow: var(--mj-shadow-md);\n}\n\n.hero-content[_ngcontent-%COMP%] {\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.action-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 24px;\n margin-bottom: 24px;\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n border-radius: var(--mj-radius-lg);\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n}\n\n.action-icon-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-4xl);\n}\n\n.action-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.action-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.action-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 2em;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-inverse);\n}\n\n.action-name-input[_ngcontent-%COMP%] {\n font-size: 1.8em;\n font-weight: var(--mj-font-semibold);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n min-width: 400px;\n}\n\n.action-name-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n}\n\n.action-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%], .type-badge[_ngcontent-%COMP%], .approval-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n}\n\n.action-category[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 0.95em;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n margin-bottom: 12px;\n}\n\n.action-category[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-inverse);\n transform: translateX(4px);\n}\n\n.action-description[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-text-inverse) 90%, transparent);\n font-size: 1.05em;\n line-height: var(--mj-leading-relaxed);\n margin: 0;\n}\n\n.action-description-input[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 600px;\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border: 2px solid color-mix(in srgb, var(--mj-text-inverse) 30%, transparent);\n color: var(--mj-text-inverse);\n border-radius: var(--mj-radius-md);\n}\n\n.action-description-input[_ngcontent-%COMP%]::placeholder {\n color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n}\n\n\n.action-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n margin-bottom: 24px;\n flex-wrap: wrap;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-inverse) 10%, transparent);\n backdrop-filter: blur(10px);\n border: 1px solid color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n border-radius: var(--mj-radius-lg);\n padding: 16px 24px;\n display: flex;\n align-items: center;\n gap: 16px;\n min-width: 160px;\n}\n\n.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-2xl);\n color: color-mix(in srgb, var(--mj-text-inverse) 80%, transparent);\n}\n\n.stat-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 1.4em;\n font-weight: var(--mj-font-bold);\n color: var(--mj-text-inverse);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: color-mix(in srgb, var(--mj-text-inverse) 70%, transparent);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n.hero-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.hero-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n backdrop-filter: blur(10px);\n}\n\n\n.action-content[_ngcontent-%COMP%] {\n padding: 0 20px 20px;\n}\n\n.content-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n margin-bottom: 20px;\n overflow: hidden;\n transition: all var(--mj-transition-base);\n}\n\n.content-section[_ngcontent-%COMP%]:hover {\n box-shadow: var(--mj-shadow-md);\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n background: var(--mj-bg-surface-elevated);\n cursor: pointer;\n user-select: none;\n transition: background var(--mj-transition-base);\n}\n\n.section-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.3em;\n color: var(--mj-text-primary);\n flex: 1;\n}\n\n.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.section-count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n}\n\n.toggle-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s;\n}\n\n.toggle-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(-90deg);\n}\n\n.section-content[_ngcontent-%COMP%] {\n padding: 24px;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n.overview-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.overview-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.overview-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.required[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.full-width[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.overview-display[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 24px;\n}\n\n.display-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.display-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-muted);\n font-weight: var(--mj-font-semibold);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.display-value[_ngcontent-%COMP%] {\n font-size: 1.1em;\n color: var(--mj-text-primary);\n}\n\n.display-value.code[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n background: var(--mj-bg-surface-sunken);\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n}\n\n.approval-date[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-left: 8px;\n}\n\n\n.generation-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 20px;\n margin-bottom: 24px;\n}\n\n.generation-panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: var(--mj-color-indigo-500);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.prompt-section[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.prompt-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .comments-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n}\n\n.generation-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.code-locked-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 10px;\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n border-radius: var(--mj-radius-full);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.code-editor-section[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n}\n\n.code-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.code-toolbar[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1em;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-info) 30%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin-top: 16px;\n}\n\n.code-comments[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: var(--mj-status-info);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.code-comments[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n line-height: var(--mj-leading-relaxed);\n}\n\n.approval-comments[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.approval-comments[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-status-error);\n}\n\n\n.params-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-lg);\n padding: 20px;\n}\n\n.params-section.params-section-compact[_ngcontent-%COMP%] {\n padding: 12px 20px;\n}\n\n.params-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n}\n\n.params-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.params-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.param-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n transition: all var(--mj-transition-base);\n}\n\n.param-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.param-card.required[_ngcontent-%COMP%] {\n border-color: var(--mj-status-warning);\n}\n\n.param-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.param-card.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, var(--mj-bg-surface));\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n}\n\n.param-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n}\n\n.param-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.param-edit-btn[_ngcontent-%COMP%], \n.param-delete-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: var(--mj-text-muted);\n border-radius: var(--mj-radius-sm);\n transition: all var(--mj-transition-base);\n}\n\n.param-edit-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info);\n}\n\n.param-delete-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.param-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.required-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-color-warning-800);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.array-badge[_ngcontent-%COMP%] {\n background: var(--mj-color-indigo-500);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.param-type[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n margin-bottom: 8px;\n}\n\n.param-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n margin-bottom: 8px;\n}\n\n.param-default[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.default-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n}\n\n.param-default[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n font-family: 'Courier New', monospace;\n color: var(--mj-color-error-400);\n}\n\n\n\n.result-codes-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.result-code-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 16px;\n padding: 16px;\n border: 2px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n transition: all var(--mj-transition-base);\n position: relative;\n}\n\n.result-code-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.result-code-card.success[_ngcontent-%COMP%] {\n border-color: var(--mj-status-success);\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] {\n border-color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity var(--mj-transition-base);\n}\n\n.result-code-card[_ngcontent-%COMP%]:hover .result-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.result-edit-btn[_ngcontent-%COMP%], \n.result-delete-btn[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n padding: 4px 8px;\n cursor: pointer;\n transition: all var(--mj-transition-base);\n font-size: var(--mj-text-sm);\n}\n\n.result-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.result-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-error);\n}\n\n.result-icon[_ngcontent-%COMP%] {\n font-size: 1.5em;\n flex-shrink: 0;\n}\n\n.result-code-card.success[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.result-code-card.failure[_ngcontent-%COMP%] .result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.result-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-code[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n font-family: 'Courier New', monospace;\n}\n\n.result-description[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n\n.execution-stats-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 20px;\n margin-bottom: 32px;\n flex-wrap: wrap;\n}\n\n.stat-box[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 200px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 20px;\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.stat-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n color: var(--mj-text-muted);\n}\n\n.stat-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.executions-table[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n}\n\n.executions-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.executions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 12px;\n text-align: left;\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-secondary);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.executions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.execution-row[_ngcontent-%COMP%] {\n transition: background var(--mj-transition-base);\n}\n\n.execution-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.execution-row.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 5%, transparent);\n}\n\n.running[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n font-style: italic;\n}\n\n.result-code[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-medium);\n font-family: 'Courier New', monospace;\n}\n\n.result-code.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.result-code.failure[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n.config-subsection[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n.config-subsection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.library-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.library-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.library-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n transform: translateX(4px);\n}\n\n.library-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%]:first-child {\n font-size: 1.5em;\n color: var(--mj-text-muted);\n}\n\n.library-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.library-name[_ngcontent-%COMP%] {\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.library-items[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: var(--mj-text-sm);\n font-family: 'Courier New', monospace;\n}\n\n.related-entities-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.related-entity-link[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all var(--mj-transition-base);\n}\n\n.related-entity-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n}\n\n.related-entity-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.2em;\n color: var(--mj-text-muted);\n}\n\n.related-entity-link[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:first-of-type {\n flex: 1;\n font-weight: var(--mj-font-medium);\n color: var(--mj-text-secondary);\n}\n\n.entity-count[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: var(--mj-text-sm);\n}\n\n\n.loading-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px;\n color: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2em;\n margin-bottom: 12px;\n}\n\n\n@media (max-width: 768px) {\n .action-hero-header[_ngcontent-%COMP%] {\n padding: 20px;\n }\n\n .action-identity[_ngcontent-%COMP%] {\n flex-direction: column;\n text-align: center;\n }\n\n .action-icon-wrapper[_ngcontent-%COMP%] {\n margin: 0 auto;\n }\n\n .action-title-row[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .action-stats[_ngcontent-%COMP%] {\n justify-content: center;\n }\n\n .params-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] }); }
|
|
2276
2276
|
};
|
|
2277
2277
|
MJActionFormComponentExtended = __decorate([
|
|
2278
2278
|
RegisterClass(BaseFormComponent, 'MJ: Actions')
|