@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 6.2.0-edge.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts +1 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-form-tabs.js +2 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1322 -783
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +694 -252
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/pending-records.d.ts +11 -0
- package/dist/lib/custom/AIPrompts/pending-records.d.ts.map +1 -0
- package/dist/lib/custom/AIPrompts/pending-records.js +21 -0
- package/dist/lib/custom/AIPrompts/pending-records.js.map +1 -0
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +387 -107
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
- package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
- package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
- package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +217 -29
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +734 -285
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +664 -208
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +31 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +429 -109
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +129 -4
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +904 -90
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts +37 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.js +399 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/record-forms.component.d.ts +69 -0
- package/dist/lib/custom/Rubrics/record-forms.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/record-forms.component.js +587 -0
- package/dist/lib/custom/Rubrics/record-forms.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.d.ts +67 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.js +534 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts +25 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.js +299 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.js.map +1 -0
- package/dist/lib/custom/Rubrics/scale-form.component.d.ts +31 -0
- package/dist/lib/custom/Rubrics/scale-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/scale-form.component.js +395 -0
- package/dist/lib/custom/Rubrics/scale-form.component.js.map +1 -0
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +153 -19
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +434 -217
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +223 -27
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +951 -530
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.js +5 -1
- package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +395 -47
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +1719 -1007
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Users/user-overview.panel.js +3 -3
- package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +140 -15
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +326 -100
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +56 -48
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +60 -0
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +61 -43
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.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 +37 -19
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.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 +78 -52
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +156 -84
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +24 -16
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js +135 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js +155 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js +183 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js +120 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js +103 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js +171 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -16
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +19 -11
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +209 -119
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +436 -422
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +44 -2
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +45 -19
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts +116 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts.map +1 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js +820 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js.map +1 -0
- package/dist/lib/shared/components/template-editor.component.d.ts +158 -15
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +389 -127
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +5 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +47 -42
|
@@ -22,9 +22,10 @@ import * as i4 from "./template-param-dialog.component";
|
|
|
22
22
|
import * as i5 from "./template-params-grid.component";
|
|
23
23
|
import * as i6 from "../../shared/components/template-editor.component";
|
|
24
24
|
const _c0 = ["codeEditor"];
|
|
25
|
+
const _c1 = ["templateEditor"];
|
|
25
26
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
26
27
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
27
|
-
i0.ɵɵelementStart(0, "input",
|
|
28
|
+
i0.ɵɵelementStart(0, "input", 38);
|
|
28
29
|
i0.ɵɵtwoWayListener("ngModelChange", function MJTemplateFormComponentExtended_Conditional_0_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
|
|
29
30
|
i0.ɵɵelementEnd();
|
|
30
31
|
} if (rf & 2) {
|
|
@@ -32,14 +33,14 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_9_Template(rf
|
|
|
32
33
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
33
34
|
} }
|
|
34
35
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
-
i0.ɵɵelementStart(0, "span",
|
|
36
|
-
i0.ɵɵelement(1, "i",
|
|
36
|
+
i0.ɵɵelementStart(0, "span", 39);
|
|
37
|
+
i0.ɵɵelement(1, "i", 41);
|
|
37
38
|
i0.ɵɵtext(2, " Active ");
|
|
38
39
|
i0.ɵɵelementEnd();
|
|
39
40
|
} }
|
|
40
41
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
41
|
-
i0.ɵɵelementStart(0, "span",
|
|
42
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
43
|
+
i0.ɵɵelement(1, "i", 42);
|
|
43
44
|
i0.ɵɵtext(2, " Inactive ");
|
|
44
45
|
i0.ɵɵelementEnd();
|
|
45
46
|
} }
|
|
@@ -47,7 +48,7 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Template(r
|
|
|
47
48
|
i0.ɵɵelementStart(0, "h4");
|
|
48
49
|
i0.ɵɵtext(1);
|
|
49
50
|
i0.ɵɵelementEnd();
|
|
50
|
-
i0.ɵɵconditionalCreate(2, MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Conditional_2_Template, 3, 0, "span",
|
|
51
|
+
i0.ɵɵconditionalCreate(2, MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Conditional_2_Template, 3, 0, "span", 39)(3, MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Conditional_3_Template, 3, 0, "span", 40);
|
|
51
52
|
} if (rf & 2) {
|
|
52
53
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
53
54
|
i0.ɵɵadvance();
|
|
@@ -57,17 +58,17 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Template(r
|
|
|
57
58
|
} }
|
|
58
59
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
59
60
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
60
|
-
i0.ɵɵelementStart(0, "div",
|
|
61
|
+
i0.ɵɵelementStart(0, "div", 11)(1, "div")(2, "label", 43);
|
|
61
62
|
i0.ɵɵtext(3, "Category");
|
|
62
63
|
i0.ɵɵelementEnd();
|
|
63
|
-
i0.ɵɵelementStart(4, "mj-combobox",
|
|
64
|
+
i0.ɵɵelementStart(4, "mj-combobox", 44);
|
|
64
65
|
i0.ɵɵtwoWayListener("ngModelChange", function MJTemplateFormComponentExtended_Conditional_0_Conditional_11_Template_mj_combobox_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CategoryID, $event) || (ctx_r1.record.CategoryID = $event); return i0.ɵɵresetView($event); });
|
|
65
66
|
i0.ɵɵlistener("ValueChange", function MJTemplateFormComponentExtended_Conditional_0_Conditional_11_Template_mj_combobox_ValueChange_4_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onCategoryChange($event)); });
|
|
66
67
|
i0.ɵɵelementEnd()();
|
|
67
|
-
i0.ɵɵelementStart(5, "div")(6, "label",
|
|
68
|
+
i0.ɵɵelementStart(5, "div")(6, "label", 43);
|
|
68
69
|
i0.ɵɵtext(7, "Active");
|
|
69
70
|
i0.ɵɵelementEnd();
|
|
70
|
-
i0.ɵɵelementStart(8, "mj-switch",
|
|
71
|
+
i0.ɵɵelementStart(8, "mj-switch", 45);
|
|
71
72
|
i0.ɵɵtwoWayListener("ngModelChange", function MJTemplateFormComponentExtended_Conditional_0_Conditional_11_Template_mj_switch_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.IsActive, $event) || (ctx_r1.record.IsActive = $event); return i0.ɵɵresetView($event); });
|
|
72
73
|
i0.ɵɵelementEnd()()();
|
|
73
74
|
} if (rf & 2) {
|
|
@@ -80,7 +81,7 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_11_Template(r
|
|
|
80
81
|
} }
|
|
81
82
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
82
83
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
83
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
84
|
+
i0.ɵɵelementStart(0, "textarea", 46);
|
|
84
85
|
i0.ɵɵtwoWayListener("ngModelChange", function MJTemplateFormComponentExtended_Conditional_0_Conditional_12_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
|
|
85
86
|
i0.ɵɵelementEnd();
|
|
86
87
|
} if (rf & 2) {
|
|
@@ -89,7 +90,7 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_12_Template(r
|
|
|
89
90
|
i0.ɵɵproperty("rows", 2);
|
|
90
91
|
} }
|
|
91
92
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
-
i0.ɵɵelementStart(0, "p",
|
|
93
|
+
i0.ɵɵelementStart(0, "p", 13);
|
|
93
94
|
i0.ɵɵtext(1);
|
|
94
95
|
i0.ɵɵelementEnd();
|
|
95
96
|
} if (rf & 2) {
|
|
@@ -98,12 +99,12 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_13_Template(r
|
|
|
98
99
|
i0.ɵɵtextInterpolate(ctx_r1.record.Description);
|
|
99
100
|
} }
|
|
100
101
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
101
|
-
i0.ɵɵelementStart(0, "div",
|
|
102
|
-
i0.ɵɵelement(1, "i",
|
|
103
|
-
i0.ɵɵelementStart(2, "span",
|
|
102
|
+
i0.ɵɵelementStart(0, "div", 15);
|
|
103
|
+
i0.ɵɵelement(1, "i", 47);
|
|
104
|
+
i0.ɵɵelementStart(2, "span", 17);
|
|
104
105
|
i0.ɵɵtext(3, "Category:");
|
|
105
106
|
i0.ɵɵelementEnd();
|
|
106
|
-
i0.ɵɵelementStart(4, "span",
|
|
107
|
+
i0.ɵɵelementStart(4, "span", 18);
|
|
107
108
|
i0.ɵɵtext(5);
|
|
108
109
|
i0.ɵɵelementEnd()();
|
|
109
110
|
} if (rf & 2) {
|
|
@@ -113,14 +114,14 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_15_Template(r
|
|
|
113
114
|
} }
|
|
114
115
|
function MJTemplateFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
115
116
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
116
|
-
i0.ɵɵelementStart(0, "button",
|
|
117
|
+
i0.ɵɵelementStart(0, "button", 48);
|
|
117
118
|
i0.ɵɵlistener("click", function MJTemplateFormComponentExtended_Conditional_0_Conditional_23_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.runTemplate()); });
|
|
118
|
-
i0.ɵɵelement(1, "i",
|
|
119
|
+
i0.ɵɵelement(1, "i", 49);
|
|
119
120
|
i0.ɵɵtext(2, " Run ");
|
|
120
121
|
i0.ɵɵelementEnd();
|
|
121
122
|
} }
|
|
122
123
|
function MJTemplateFormComponentExtended_Conditional_0_ng_template_26_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
123
|
-
i0.ɵɵelementStart(0, "span",
|
|
124
|
+
i0.ɵɵelementStart(0, "span", 52);
|
|
124
125
|
i0.ɵɵtext(1);
|
|
125
126
|
i0.ɵɵelementEnd();
|
|
126
127
|
} if (rf & 2) {
|
|
@@ -129,33 +130,33 @@ function MJTemplateFormComponentExtended_Conditional_0_ng_template_26_Conditiona
|
|
|
129
130
|
i0.ɵɵtextInterpolate(ctx_r1.templateContents.length);
|
|
130
131
|
} }
|
|
131
132
|
function MJTemplateFormComponentExtended_Conditional_0_ng_template_26_Template(rf, ctx) { if (rf & 1) {
|
|
132
|
-
i0.ɵɵelementStart(0, "span",
|
|
133
|
-
i0.ɵɵelement(1, "i",
|
|
133
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
134
|
+
i0.ɵɵelement(1, "i", 51);
|
|
134
135
|
i0.ɵɵtext(2, " Template Editor ");
|
|
135
|
-
i0.ɵɵconditionalCreate(3, MJTemplateFormComponentExtended_Conditional_0_ng_template_26_Conditional_3_Template, 2, 1, "span",
|
|
136
|
+
i0.ɵɵconditionalCreate(3, MJTemplateFormComponentExtended_Conditional_0_ng_template_26_Conditional_3_Template, 2, 1, "span", 52);
|
|
136
137
|
i0.ɵɵelementEnd();
|
|
137
138
|
} if (rf & 2) {
|
|
138
139
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
139
140
|
i0.ɵɵadvance(3);
|
|
140
141
|
i0.ɵɵconditional(ctx_r1.templateContents.length > 0 ? 3 : -1);
|
|
141
142
|
} }
|
|
142
|
-
function
|
|
143
|
-
i0.ɵɵelementStart(0, "span",
|
|
144
|
-
i0.ɵɵelement(1, "i",
|
|
143
|
+
function MJTemplateFormComponentExtended_Conditional_0_ng_template_31_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
145
|
+
i0.ɵɵelement(1, "i", 53);
|
|
145
146
|
i0.ɵɵtext(2, " Details ");
|
|
146
147
|
i0.ɵɵelementEnd();
|
|
147
148
|
} }
|
|
148
|
-
function
|
|
149
|
-
i0.ɵɵelementStart(0, "span",
|
|
150
|
-
i0.ɵɵelement(1, "i",
|
|
149
|
+
function MJTemplateFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
150
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
151
|
+
i0.ɵɵelement(1, "i", 56);
|
|
151
152
|
i0.ɵɵtext(2, " Parameters ");
|
|
152
153
|
i0.ɵɵelementEnd();
|
|
153
154
|
} }
|
|
154
|
-
function
|
|
155
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
156
|
-
i0.ɵɵtemplate(1,
|
|
157
|
-
i0.ɵɵelementStart(2, "div",
|
|
158
|
-
i0.ɵɵelement(3, "mj-template-params-grid",
|
|
155
|
+
function MJTemplateFormComponentExtended_Conditional_0_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
|
|
157
|
+
i0.ɵɵtemplate(1, MJTemplateFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template, 3, 0, "ng-template", 23);
|
|
158
|
+
i0.ɵɵelementStart(2, "div", 54);
|
|
159
|
+
i0.ɵɵelement(3, "mj-template-params-grid", 55);
|
|
159
160
|
i0.ɵɵelementEnd()();
|
|
160
161
|
} if (rf & 2) {
|
|
161
162
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -163,17 +164,17 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_44_Template(r
|
|
|
163
164
|
i0.ɵɵadvance(3);
|
|
164
165
|
i0.ɵɵproperty("template", ctx_r1.record)("editMode", ctx_r1.EditMode);
|
|
165
166
|
} }
|
|
166
|
-
function
|
|
167
|
-
i0.ɵɵelementStart(0, "span",
|
|
168
|
-
i0.ɵɵelement(1, "i",
|
|
167
|
+
function MJTemplateFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
168
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
169
|
+
i0.ɵɵelement(1, "i", 58);
|
|
169
170
|
i0.ɵɵtext(2, " AI Prompts ");
|
|
170
171
|
i0.ɵɵelementEnd();
|
|
171
172
|
} }
|
|
172
|
-
function
|
|
173
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
174
|
-
i0.ɵɵtemplate(1,
|
|
175
|
-
i0.ɵɵelementStart(2, "div",
|
|
176
|
-
i0.ɵɵelement(3, "mj-explorer-entity-data-grid",
|
|
173
|
+
function MJTemplateFormComponentExtended_Conditional_0_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
174
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
|
|
175
|
+
i0.ɵɵtemplate(1, MJTemplateFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template, 3, 0, "ng-template", 23);
|
|
176
|
+
i0.ɵɵelementStart(2, "div", 54);
|
|
177
|
+
i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 57);
|
|
177
178
|
i0.ɵɵelementEnd()();
|
|
178
179
|
} if (rf & 2) {
|
|
179
180
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -181,17 +182,17 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_45_Template(r
|
|
|
181
182
|
i0.ɵɵadvance(3);
|
|
182
183
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Prompts", "TemplateID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Prompts"))("AllowLoad", true)("ShowToolbar", false);
|
|
183
184
|
} }
|
|
184
|
-
function
|
|
185
|
-
i0.ɵɵelementStart(0, "span",
|
|
186
|
-
i0.ɵɵelement(1, "i",
|
|
185
|
+
function MJTemplateFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
186
|
+
i0.ɵɵelementStart(0, "span", 50);
|
|
187
|
+
i0.ɵɵelement(1, "i", 59);
|
|
187
188
|
i0.ɵɵtext(2, " Entity Documents ");
|
|
188
189
|
i0.ɵɵelementEnd();
|
|
189
190
|
} }
|
|
190
|
-
function
|
|
191
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
192
|
-
i0.ɵɵtemplate(1,
|
|
193
|
-
i0.ɵɵelementStart(2, "div",
|
|
194
|
-
i0.ɵɵelement(3, "mj-explorer-entity-data-grid",
|
|
191
|
+
function MJTemplateFormComponentExtended_Conditional_0_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
192
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
|
|
193
|
+
i0.ɵɵtemplate(1, MJTemplateFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template, 3, 0, "ng-template", 23);
|
|
194
|
+
i0.ɵɵelementStart(2, "div", 54);
|
|
195
|
+
i0.ɵɵelement(3, "mj-explorer-entity-data-grid", 57);
|
|
195
196
|
i0.ɵɵelementEnd()();
|
|
196
197
|
} if (rf & 2) {
|
|
197
198
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -201,47 +202,47 @@ function MJTemplateFormComponentExtended_Conditional_0_Conditional_46_Template(r
|
|
|
201
202
|
} }
|
|
202
203
|
function MJTemplateFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
203
204
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
204
|
-
i0.ɵɵelementStart(0, "mj-record-form-container",
|
|
205
|
+
i0.ɵɵelementStart(0, "mj-record-form-container", 2);
|
|
205
206
|
i0.ɵɵlistener("Navigate", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_record_form_container_Navigate_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("DeleteRequested", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_record_form_container_DeleteRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteRequested()); })("FavoriteToggled", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_record_form_container_FavoriteToggled_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFavoriteToggled()); })("HistoryRequested", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_record_form_container_HistoryRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnHistoryRequested()); })("ListManagementRequested", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_record_form_container_ListManagementRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementRequested()); });
|
|
206
|
-
i0.ɵɵelementStart(1, "form",
|
|
207
|
-
i0.ɵɵelement(8, "i",
|
|
208
|
-
i0.ɵɵconditionalCreate(9, MJTemplateFormComponentExtended_Conditional_0_Conditional_9_Template, 1, 1, "input",
|
|
207
|
+
i0.ɵɵelementStart(1, "form", 3, 0)(3, "div", 4)(4, "div", 5)(5, "div", 6)(6, "div", 7)(7, "div", 8);
|
|
208
|
+
i0.ɵɵelement(8, "i", 9);
|
|
209
|
+
i0.ɵɵconditionalCreate(9, MJTemplateFormComponentExtended_Conditional_0_Conditional_9_Template, 1, 1, "input", 10)(10, MJTemplateFormComponentExtended_Conditional_0_Conditional_10_Template, 4, 2);
|
|
209
210
|
i0.ɵɵelementEnd();
|
|
210
|
-
i0.ɵɵconditionalCreate(11, MJTemplateFormComponentExtended_Conditional_0_Conditional_11_Template, 9, 5, "div",
|
|
211
|
-
i0.ɵɵconditionalCreate(12, MJTemplateFormComponentExtended_Conditional_0_Conditional_12_Template, 1, 2, "textarea",
|
|
212
|
-
i0.ɵɵelementStart(14, "div",
|
|
213
|
-
i0.ɵɵconditionalCreate(15, MJTemplateFormComponentExtended_Conditional_0_Conditional_15_Template, 6, 1, "div",
|
|
214
|
-
i0.ɵɵelementStart(16, "div",
|
|
215
|
-
i0.ɵɵelement(17, "i",
|
|
216
|
-
i0.ɵɵelementStart(18, "span",
|
|
211
|
+
i0.ɵɵconditionalCreate(11, MJTemplateFormComponentExtended_Conditional_0_Conditional_11_Template, 9, 5, "div", 11);
|
|
212
|
+
i0.ɵɵconditionalCreate(12, MJTemplateFormComponentExtended_Conditional_0_Conditional_12_Template, 1, 2, "textarea", 12)(13, MJTemplateFormComponentExtended_Conditional_0_Conditional_13_Template, 2, 1, "p", 13);
|
|
213
|
+
i0.ɵɵelementStart(14, "div", 14);
|
|
214
|
+
i0.ɵɵconditionalCreate(15, MJTemplateFormComponentExtended_Conditional_0_Conditional_15_Template, 6, 1, "div", 15);
|
|
215
|
+
i0.ɵɵelementStart(16, "div", 15);
|
|
216
|
+
i0.ɵɵelement(17, "i", 16);
|
|
217
|
+
i0.ɵɵelementStart(18, "span", 17);
|
|
217
218
|
i0.ɵɵtext(19, "Contents:");
|
|
218
219
|
i0.ɵɵelementEnd();
|
|
219
|
-
i0.ɵɵelementStart(20, "span",
|
|
220
|
+
i0.ɵɵelementStart(20, "span", 18);
|
|
220
221
|
i0.ɵɵtext(21);
|
|
221
222
|
i0.ɵɵelementEnd()()()();
|
|
222
|
-
i0.ɵɵelementStart(22, "div",
|
|
223
|
-
i0.ɵɵconditionalCreate(23, MJTemplateFormComponentExtended_Conditional_0_Conditional_23_Template, 3, 0, "button",
|
|
223
|
+
i0.ɵɵelementStart(22, "div", 19);
|
|
224
|
+
i0.ɵɵconditionalCreate(23, MJTemplateFormComponentExtended_Conditional_0_Conditional_23_Template, 3, 0, "button", 20);
|
|
224
225
|
i0.ɵɵelementEnd()()();
|
|
225
|
-
i0.ɵɵelementStart(24, "div",
|
|
226
|
-
i0.ɵɵtemplate(26, MJTemplateFormComponentExtended_Conditional_0_ng_template_26_Template, 4, 1, "ng-template",
|
|
227
|
-
i0.ɵɵelementStart(27, "div",
|
|
226
|
+
i0.ɵɵelementStart(24, "div", 21)(25, "mj-accordion-panel", 22);
|
|
227
|
+
i0.ɵɵtemplate(26, MJTemplateFormComponentExtended_Conditional_0_ng_template_26_Template, 4, 1, "ng-template", 23);
|
|
228
|
+
i0.ɵɵelementStart(27, "div", 24)(28, "mj-template-editor", 25, 1);
|
|
228
229
|
i0.ɵɵlistener("contentChange", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_template_editor_contentChange_28_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSharedTemplateContentChange($event)); })("runTemplate", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_template_editor_runTemplate_28_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSharedTemplateRun($event)); });
|
|
229
230
|
i0.ɵɵelementEnd()()();
|
|
230
|
-
i0.ɵɵelementStart(
|
|
231
|
-
i0.ɵɵtemplate(
|
|
232
|
-
i0.ɵɵelementStart(
|
|
233
|
-
i0.ɵɵelement(
|
|
231
|
+
i0.ɵɵelementStart(30, "mj-accordion-panel", 22);
|
|
232
|
+
i0.ɵɵtemplate(31, MJTemplateFormComponentExtended_Conditional_0_ng_template_31_Template, 3, 0, "ng-template", 23);
|
|
233
|
+
i0.ɵɵelementStart(32, "div", 26)(33, "div", 27)(34, "div");
|
|
234
|
+
i0.ɵɵelement(35, "mj-form-field", 28)(36, "mj-form-field", 29)(37, "mj-form-field", 30)(38, "mj-form-field", 31);
|
|
234
235
|
i0.ɵɵelementEnd();
|
|
235
|
-
i0.ɵɵelementStart(
|
|
236
|
-
i0.ɵɵelement(
|
|
236
|
+
i0.ɵɵelementStart(39, "div");
|
|
237
|
+
i0.ɵɵelement(40, "mj-form-field", 32)(41, "mj-form-field", 33)(42, "mj-form-field", 34)(43, "mj-form-field", 35)(44, "mj-form-field", 36);
|
|
237
238
|
i0.ɵɵelementEnd()()()();
|
|
238
|
-
i0.ɵɵconditionalCreate(
|
|
239
|
-
i0.ɵɵconditionalCreate(
|
|
240
|
-
i0.ɵɵconditionalCreate(
|
|
239
|
+
i0.ɵɵconditionalCreate(45, MJTemplateFormComponentExtended_Conditional_0_Conditional_45_Template, 4, 3, "mj-accordion-panel", 22);
|
|
240
|
+
i0.ɵɵconditionalCreate(46, MJTemplateFormComponentExtended_Conditional_0_Conditional_46_Template, 4, 5, "mj-accordion-panel", 22);
|
|
241
|
+
i0.ɵɵconditionalCreate(47, MJTemplateFormComponentExtended_Conditional_0_Conditional_47_Template, 4, 5, "mj-accordion-panel", 22);
|
|
241
242
|
i0.ɵɵelementEnd()()()();
|
|
242
|
-
i0.ɵɵelementStart(
|
|
243
|
-
i0.ɵɵtwoWayListener("isVisibleChange", function
|
|
244
|
-
i0.ɵɵlistener("onClose", function
|
|
243
|
+
i0.ɵɵelementStart(48, "mj-template-param-dialog", 37);
|
|
244
|
+
i0.ɵɵtwoWayListener("isVisibleChange", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_template_param_dialog_isVisibleChange_48_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.showParamDialog, $event) || (ctx_r1.showParamDialog = $event); return i0.ɵɵresetView($event); });
|
|
245
|
+
i0.ɵɵlistener("onClose", function MJTemplateFormComponentExtended_Conditional_0_Template_mj_template_param_dialog_onClose_48_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onParamDialogClose()); });
|
|
245
246
|
i0.ɵɵelementEnd();
|
|
246
247
|
} if (rf & 2) {
|
|
247
248
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -262,7 +263,7 @@ function MJTemplateFormComponentExtended_Conditional_0_Template(rf, ctx) { if (r
|
|
|
262
263
|
i0.ɵɵproperty("Expanded", true);
|
|
263
264
|
i0.ɵɵadvance(3);
|
|
264
265
|
i0.ɵɵproperty("template", ctx_r1.record)("config", ctx_r1.templateEditorConfig);
|
|
265
|
-
i0.ɵɵadvance();
|
|
266
|
+
i0.ɵɵadvance(2);
|
|
266
267
|
i0.ɵɵproperty("Expanded", false);
|
|
267
268
|
i0.ɵɵadvance(5);
|
|
268
269
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
@@ -283,40 +284,40 @@ function MJTemplateFormComponentExtended_Conditional_0_Template(rf, ctx) { if (r
|
|
|
283
284
|
i0.ɵɵadvance();
|
|
284
285
|
i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode);
|
|
285
286
|
i0.ɵɵadvance();
|
|
286
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 44 : -1);
|
|
287
|
-
i0.ɵɵadvance();
|
|
288
287
|
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 45 : -1);
|
|
289
288
|
i0.ɵɵadvance();
|
|
290
289
|
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 46 : -1);
|
|
291
290
|
i0.ɵɵadvance();
|
|
291
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 47 : -1);
|
|
292
|
+
i0.ɵɵadvance();
|
|
292
293
|
i0.ɵɵproperty("template", ctx_r1.record);
|
|
293
294
|
i0.ɵɵtwoWayProperty("isVisible", ctx_r1.showParamDialog);
|
|
294
295
|
} }
|
|
295
296
|
let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended extends MJTemplateFormComponent {
|
|
296
297
|
constructor() {
|
|
297
298
|
super(...arguments);
|
|
298
|
-
this.
|
|
299
|
-
this.
|
|
300
|
-
this.
|
|
301
|
-
this.
|
|
302
|
-
this.
|
|
303
|
-
this.
|
|
304
|
-
this.
|
|
305
|
-
this.
|
|
306
|
-
this.
|
|
299
|
+
this.ToolbarConfig = CUSTOM_LAYOUT_TOOLBAR_CONFIG;
|
|
300
|
+
this.TemplateContents = [];
|
|
301
|
+
this.SelectedContentIndex = 0;
|
|
302
|
+
this.IsAddingNewContent = false;
|
|
303
|
+
this.NewTemplateContent = null;
|
|
304
|
+
this.HasUnsavedChanges = false;
|
|
305
|
+
this.TemplateInfoExpanded = true;
|
|
306
|
+
this.TemplateContentsExpanded = true;
|
|
307
|
+
this.CategoryOptions = [
|
|
307
308
|
{ text: 'Select Category...', value: '' },
|
|
308
309
|
// TODO: Load from database
|
|
309
310
|
];
|
|
310
|
-
this.
|
|
311
|
-
this.
|
|
312
|
-
this.
|
|
311
|
+
this.ContentTypeOptions = [];
|
|
312
|
+
this.SupportedLanguages = languages;
|
|
313
|
+
this.CodeEditor = null;
|
|
313
314
|
this.isUpdatingEditorValue = false;
|
|
314
|
-
this.
|
|
315
|
-
this.
|
|
316
|
-
this.
|
|
317
|
-
this.
|
|
315
|
+
this.IsRunningTemplate = false;
|
|
316
|
+
this.TemplateTestResult = null;
|
|
317
|
+
this.TemplateTestError = null;
|
|
318
|
+
this.ShowParamDialog = false;
|
|
318
319
|
// Template editor configuration for shared component
|
|
319
|
-
this.
|
|
320
|
+
this.TemplateEditorConfig = {
|
|
320
321
|
allowEdit: true,
|
|
321
322
|
showRunButton: true,
|
|
322
323
|
compactMode: false
|
|
@@ -325,13 +326,145 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
325
326
|
this.activeTimeouts = [];
|
|
326
327
|
this.confirmService = inject(MJConfirmService);
|
|
327
328
|
}
|
|
329
|
+
/** @deprecated Use {@link ToolbarConfig}. */
|
|
330
|
+
get toolbarConfig() {
|
|
331
|
+
return this.ToolbarConfig;
|
|
332
|
+
}
|
|
328
333
|
/** Custom-layout Template form looks best full-width on first open. */
|
|
329
334
|
getDefaultFormWidthMode() { return 'full-width'; }
|
|
335
|
+
/** @deprecated Use {@link TemplateContents}. */
|
|
336
|
+
get templateContents() {
|
|
337
|
+
return this.TemplateContents;
|
|
338
|
+
}
|
|
339
|
+
/** @deprecated Use {@link TemplateContents}. */
|
|
340
|
+
set templateContents(value) {
|
|
341
|
+
this.TemplateContents = value;
|
|
342
|
+
}
|
|
343
|
+
/** @deprecated Use {@link SelectedContentIndex}. */
|
|
344
|
+
get selectedContentIndex() {
|
|
345
|
+
return this.SelectedContentIndex;
|
|
346
|
+
}
|
|
347
|
+
/** @deprecated Use {@link SelectedContentIndex}. */
|
|
348
|
+
set selectedContentIndex(value) {
|
|
349
|
+
this.SelectedContentIndex = value;
|
|
350
|
+
}
|
|
351
|
+
/** @deprecated Use {@link IsAddingNewContent}. */
|
|
352
|
+
get isAddingNewContent() {
|
|
353
|
+
return this.IsAddingNewContent;
|
|
354
|
+
}
|
|
355
|
+
/** @deprecated Use {@link IsAddingNewContent}. */
|
|
356
|
+
set isAddingNewContent(value) {
|
|
357
|
+
this.IsAddingNewContent = value;
|
|
358
|
+
}
|
|
359
|
+
/** @deprecated Use {@link NewTemplateContent}. */
|
|
360
|
+
get newTemplateContent() {
|
|
361
|
+
return this.NewTemplateContent;
|
|
362
|
+
}
|
|
363
|
+
/** @deprecated Use {@link NewTemplateContent}. */
|
|
364
|
+
set newTemplateContent(value) {
|
|
365
|
+
this.NewTemplateContent = value;
|
|
366
|
+
}
|
|
367
|
+
/** @deprecated Use {@link HasUnsavedChanges}. */
|
|
368
|
+
get hasUnsavedChanges() {
|
|
369
|
+
return this.HasUnsavedChanges;
|
|
370
|
+
}
|
|
371
|
+
/** @deprecated Use {@link HasUnsavedChanges}. */
|
|
372
|
+
set hasUnsavedChanges(value) {
|
|
373
|
+
this.HasUnsavedChanges = value;
|
|
374
|
+
}
|
|
375
|
+
/** @deprecated Use {@link TemplateInfoExpanded}. */
|
|
376
|
+
get templateInfoExpanded() {
|
|
377
|
+
return this.TemplateInfoExpanded;
|
|
378
|
+
}
|
|
379
|
+
/** @deprecated Use {@link TemplateInfoExpanded}. */
|
|
380
|
+
set templateInfoExpanded(value) {
|
|
381
|
+
this.TemplateInfoExpanded = value;
|
|
382
|
+
}
|
|
383
|
+
/** @deprecated Use {@link TemplateContentsExpanded}. */
|
|
384
|
+
get templateContentsExpanded() {
|
|
385
|
+
return this.TemplateContentsExpanded;
|
|
386
|
+
}
|
|
387
|
+
/** @deprecated Use {@link TemplateContentsExpanded}. */
|
|
388
|
+
set templateContentsExpanded(value) {
|
|
389
|
+
this.TemplateContentsExpanded = value;
|
|
390
|
+
}
|
|
391
|
+
/** @deprecated Use {@link CategoryOptions}. */
|
|
392
|
+
get categoryOptions() {
|
|
393
|
+
return this.CategoryOptions;
|
|
394
|
+
}
|
|
395
|
+
/** @deprecated Use {@link CategoryOptions}. */
|
|
396
|
+
set categoryOptions(value) {
|
|
397
|
+
this.CategoryOptions = value;
|
|
398
|
+
}
|
|
399
|
+
/** @deprecated Use {@link ContentTypeOptions}. */
|
|
400
|
+
get contentTypeOptions() {
|
|
401
|
+
return this.ContentTypeOptions;
|
|
402
|
+
}
|
|
403
|
+
/** @deprecated Use {@link ContentTypeOptions}. */
|
|
404
|
+
set contentTypeOptions(value) {
|
|
405
|
+
this.ContentTypeOptions = value;
|
|
406
|
+
}
|
|
407
|
+
/** @deprecated Use {@link SupportedLanguages}. */
|
|
408
|
+
get supportedLanguages() {
|
|
409
|
+
return this.SupportedLanguages;
|
|
410
|
+
}
|
|
411
|
+
/** @deprecated Use {@link SupportedLanguages}. */
|
|
412
|
+
set supportedLanguages(value) {
|
|
413
|
+
this.SupportedLanguages = value;
|
|
414
|
+
}
|
|
415
|
+
/** @deprecated Use {@link CodeEditor}. */
|
|
416
|
+
get codeEditor() {
|
|
417
|
+
return this.CodeEditor;
|
|
418
|
+
}
|
|
419
|
+
/** @deprecated Use {@link CodeEditor}. */
|
|
420
|
+
set codeEditor(value) {
|
|
421
|
+
this.CodeEditor = value;
|
|
422
|
+
}
|
|
423
|
+
/** @deprecated Use {@link IsRunningTemplate}. */
|
|
424
|
+
get isRunningTemplate() {
|
|
425
|
+
return this.IsRunningTemplate;
|
|
426
|
+
}
|
|
427
|
+
/** @deprecated Use {@link IsRunningTemplate}. */
|
|
428
|
+
set isRunningTemplate(value) {
|
|
429
|
+
this.IsRunningTemplate = value;
|
|
430
|
+
}
|
|
431
|
+
/** @deprecated Use {@link TemplateTestResult}. */
|
|
432
|
+
get templateTestResult() {
|
|
433
|
+
return this.TemplateTestResult;
|
|
434
|
+
}
|
|
435
|
+
/** @deprecated Use {@link TemplateTestResult}. */
|
|
436
|
+
set templateTestResult(value) {
|
|
437
|
+
this.TemplateTestResult = value;
|
|
438
|
+
}
|
|
439
|
+
/** @deprecated Use {@link TemplateTestError}. */
|
|
440
|
+
get templateTestError() {
|
|
441
|
+
return this.TemplateTestError;
|
|
442
|
+
}
|
|
443
|
+
/** @deprecated Use {@link TemplateTestError}. */
|
|
444
|
+
set templateTestError(value) {
|
|
445
|
+
this.TemplateTestError = value;
|
|
446
|
+
}
|
|
447
|
+
/** @deprecated Use {@link ShowParamDialog}. */
|
|
448
|
+
get showParamDialog() {
|
|
449
|
+
return this.ShowParamDialog;
|
|
450
|
+
}
|
|
451
|
+
/** @deprecated Use {@link ShowParamDialog}. */
|
|
452
|
+
set showParamDialog(value) {
|
|
453
|
+
this.ShowParamDialog = value;
|
|
454
|
+
}
|
|
455
|
+
/** @deprecated Use {@link TemplateEditorConfig}. */
|
|
456
|
+
get templateEditorConfig() {
|
|
457
|
+
return this.TemplateEditorConfig;
|
|
458
|
+
}
|
|
459
|
+
/** @deprecated Use {@link TemplateEditorConfig}. */
|
|
460
|
+
set templateEditorConfig(value) {
|
|
461
|
+
this.TemplateEditorConfig = value;
|
|
462
|
+
}
|
|
330
463
|
async ngOnInit() {
|
|
331
464
|
await super.ngOnInit();
|
|
332
|
-
await this.
|
|
333
|
-
await this.
|
|
334
|
-
this.
|
|
465
|
+
await this.LoadTemplateContents();
|
|
466
|
+
await this.LoadCategories();
|
|
467
|
+
this.LoadContentTypes();
|
|
335
468
|
}
|
|
336
469
|
ngOnDestroy() {
|
|
337
470
|
this.destroy$.next();
|
|
@@ -344,7 +477,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
344
477
|
// Initial sync when view is ready
|
|
345
478
|
this.syncEditorValue();
|
|
346
479
|
}
|
|
347
|
-
async
|
|
480
|
+
async LoadTemplateContents() {
|
|
348
481
|
if (this.record && this.record.ID) {
|
|
349
482
|
try {
|
|
350
483
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
@@ -354,14 +487,14 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
354
487
|
OrderBy: 'Priority ASC, __mj_CreatedAt ASC',
|
|
355
488
|
ResultType: 'entity_object'
|
|
356
489
|
});
|
|
357
|
-
this.
|
|
490
|
+
this.TemplateContents = results.Results;
|
|
358
491
|
// If we have contents but no selection, select the first one
|
|
359
|
-
if (this.
|
|
360
|
-
this.
|
|
492
|
+
if (this.TemplateContents.length > 0 && this.SelectedContentIndex === 0) {
|
|
493
|
+
this.SelectedContentIndex = 0;
|
|
361
494
|
}
|
|
362
495
|
// If no template contents exist, create a default one for single-content optimization
|
|
363
|
-
if (this.
|
|
364
|
-
await this.
|
|
496
|
+
if (this.TemplateContents.length === 0) {
|
|
497
|
+
await this.CreateDefaultTemplateContent();
|
|
365
498
|
}
|
|
366
499
|
// Entity change tracking is handled automatically by BaseEntity
|
|
367
500
|
// Sync editor value after loading content
|
|
@@ -372,25 +505,33 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
372
505
|
}
|
|
373
506
|
}
|
|
374
507
|
}
|
|
375
|
-
|
|
508
|
+
/** @deprecated Use {@link LoadTemplateContents}. */
|
|
509
|
+
async loadTemplateContents() {
|
|
510
|
+
return this.LoadTemplateContents();
|
|
511
|
+
}
|
|
512
|
+
async CreateDefaultTemplateContent() {
|
|
376
513
|
const md = this.ProviderToUse;
|
|
377
514
|
const defaultContent = await md.GetEntityObject('MJ: Template Contents');
|
|
378
515
|
defaultContent.TemplateID = this.record.ID;
|
|
379
516
|
defaultContent.Priority = 1;
|
|
380
517
|
defaultContent.IsActive = true;
|
|
381
518
|
// Set default to first real content type (skip "Select Type..." if it exists)
|
|
382
|
-
const validContentTypes = this.
|
|
519
|
+
const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');
|
|
383
520
|
if (validContentTypes.length > 0) {
|
|
384
521
|
defaultContent.TypeID = validContentTypes[0].value;
|
|
385
522
|
}
|
|
386
|
-
this.
|
|
387
|
-
this.
|
|
523
|
+
this.TemplateContents = [defaultContent];
|
|
524
|
+
this.SelectedContentIndex = 0;
|
|
388
525
|
// Sync editor value after creating default content
|
|
389
526
|
this.syncEditorValue();
|
|
390
527
|
}
|
|
391
|
-
|
|
528
|
+
/** @deprecated Use {@link CreateDefaultTemplateContent}. */
|
|
529
|
+
async createDefaultTemplateContent() {
|
|
530
|
+
return this.CreateDefaultTemplateContent();
|
|
531
|
+
}
|
|
532
|
+
async SelectTemplateContent(index, confirmSwitch = true) {
|
|
392
533
|
// If we're adding new content and user clicks on existing content, ask for confirmation
|
|
393
|
-
if (this.
|
|
534
|
+
if (this.IsAddingNewContent && confirmSwitch) {
|
|
394
535
|
if (!(await this.confirmService.Confirm({
|
|
395
536
|
title: 'Discard changes?',
|
|
396
537
|
message: 'Switch content version and lose your unsaved changes?',
|
|
@@ -399,21 +540,25 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
399
540
|
return;
|
|
400
541
|
}
|
|
401
542
|
}
|
|
402
|
-
if (index >= 0 && index < this.
|
|
403
|
-
this.
|
|
404
|
-
this.
|
|
543
|
+
if (index >= 0 && index < this.TemplateContents.length) {
|
|
544
|
+
this.SelectedContentIndex = index;
|
|
545
|
+
this.IsAddingNewContent = false;
|
|
405
546
|
// Don't clear newTemplateContent to preserve the work in progress
|
|
406
547
|
// Sync editor value when switching content
|
|
407
548
|
this.syncEditorValue();
|
|
408
549
|
}
|
|
409
550
|
}
|
|
410
|
-
|
|
551
|
+
/** @deprecated Use {@link SelectTemplateContent}. */
|
|
552
|
+
async selectTemplateContent(index, confirmSwitch = true) {
|
|
553
|
+
return this.SelectTemplateContent(index, confirmSwitch);
|
|
554
|
+
}
|
|
555
|
+
async LoadCategories() {
|
|
411
556
|
try {
|
|
412
557
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
413
558
|
const results = await rv.RunView({
|
|
414
559
|
EntityName: 'MJ: Template Categories'
|
|
415
560
|
});
|
|
416
|
-
this.
|
|
561
|
+
this.CategoryOptions = [
|
|
417
562
|
{ text: 'Select Category...', value: '' },
|
|
418
563
|
...results.Results.map((cat) => ({
|
|
419
564
|
text: cat.Name,
|
|
@@ -423,14 +568,18 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
423
568
|
}
|
|
424
569
|
catch (error) {
|
|
425
570
|
console.error('Error loading categories:', error);
|
|
426
|
-
this.
|
|
571
|
+
this.CategoryOptions = [{ text: 'Select Category...', value: '' }];
|
|
427
572
|
}
|
|
428
573
|
}
|
|
429
|
-
|
|
574
|
+
/** @deprecated Use {@link LoadCategories}. */
|
|
575
|
+
async loadCategories() {
|
|
576
|
+
return this.LoadCategories();
|
|
577
|
+
}
|
|
578
|
+
LoadContentTypes() {
|
|
430
579
|
try {
|
|
431
580
|
// Get content types from TemplateEngine cache
|
|
432
581
|
const contentTypes = TemplateEngineBase.Instance.TemplateContentTypes;
|
|
433
|
-
this.
|
|
582
|
+
this.ContentTypeOptions = [
|
|
434
583
|
{ text: 'Select Type...', value: '' },
|
|
435
584
|
...contentTypes.map(ct => ({
|
|
436
585
|
text: ct.Name,
|
|
@@ -441,7 +590,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
441
590
|
catch (error) {
|
|
442
591
|
console.error('Error loading content types:', error);
|
|
443
592
|
// Fallback to basic types
|
|
444
|
-
this.
|
|
593
|
+
this.ContentTypeOptions = [
|
|
445
594
|
{ text: 'Select Type...', value: '' },
|
|
446
595
|
{ text: 'HTML', value: 'HTML' },
|
|
447
596
|
{ text: 'Plain Text', value: 'Text' },
|
|
@@ -449,12 +598,16 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
449
598
|
];
|
|
450
599
|
}
|
|
451
600
|
}
|
|
452
|
-
|
|
601
|
+
/** @deprecated Use {@link LoadContentTypes}. */
|
|
602
|
+
loadContentTypes() {
|
|
603
|
+
return this.LoadContentTypes();
|
|
604
|
+
}
|
|
605
|
+
async OnCategoryChange(value) {
|
|
453
606
|
// If it's a new category (string but not in existing options)
|
|
454
|
-
if (value && !this.
|
|
607
|
+
if (value && !this.CategoryOptions.find(opt => opt.value === value)) {
|
|
455
608
|
// Check for duplicate category names (case-insensitive, trimmed)
|
|
456
609
|
if (this.isDuplicateCategory(value)) {
|
|
457
|
-
const existingCategory = this.
|
|
610
|
+
const existingCategory = this.CategoryOptions.find(option => option.text && option.text.trim().toLowerCase() === value.trim().toLowerCase());
|
|
458
611
|
if (existingCategory) {
|
|
459
612
|
// Use the existing category instead
|
|
460
613
|
this.record.CategoryID = existingCategory.value;
|
|
@@ -471,7 +624,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
471
624
|
const saved = await newCategory.Save();
|
|
472
625
|
if (saved) {
|
|
473
626
|
// Add to options and set the ID
|
|
474
|
-
this.
|
|
627
|
+
this.CategoryOptions.push({
|
|
475
628
|
text: newCategory.Name,
|
|
476
629
|
value: newCategory.ID
|
|
477
630
|
});
|
|
@@ -488,44 +641,56 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
488
641
|
}
|
|
489
642
|
}
|
|
490
643
|
}
|
|
491
|
-
|
|
644
|
+
/** @deprecated Use {@link OnCategoryChange}. */
|
|
645
|
+
async onCategoryChange(value) {
|
|
646
|
+
return this.OnCategoryChange(value);
|
|
647
|
+
}
|
|
648
|
+
async AddNewTemplateContent() {
|
|
492
649
|
const md = this.ProviderToUse;
|
|
493
|
-
this.
|
|
494
|
-
this.
|
|
495
|
-
this.
|
|
496
|
-
this.
|
|
650
|
+
this.NewTemplateContent = await md.GetEntityObject('MJ: Template Contents');
|
|
651
|
+
this.NewTemplateContent.TemplateID = this.record.ID;
|
|
652
|
+
this.NewTemplateContent.Priority = this.TemplateContents.length + 1;
|
|
653
|
+
this.NewTemplateContent.IsActive = true;
|
|
497
654
|
// Set default to first real content type (skip "Select Type..." if it exists)
|
|
498
|
-
const validContentTypes = this.
|
|
655
|
+
const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');
|
|
499
656
|
if (validContentTypes.length > 0) {
|
|
500
|
-
this.
|
|
657
|
+
this.NewTemplateContent.TypeID = validContentTypes[0].value;
|
|
501
658
|
}
|
|
502
|
-
this.
|
|
659
|
+
this.NewTemplateContent.TemplateText = '';
|
|
503
660
|
// Add immediately to the array
|
|
504
|
-
this.
|
|
505
|
-
this.
|
|
506
|
-
this.
|
|
661
|
+
this.TemplateContents.push(this.NewTemplateContent);
|
|
662
|
+
this.SelectedContentIndex = this.TemplateContents.length - 1;
|
|
663
|
+
this.IsAddingNewContent = true;
|
|
507
664
|
// Sync editor value when adding new content
|
|
508
665
|
this.syncEditorValue();
|
|
509
666
|
}
|
|
667
|
+
/** @deprecated Use {@link AddNewTemplateContent}. */
|
|
668
|
+
async addNewTemplateContent() {
|
|
669
|
+
return this.AddNewTemplateContent();
|
|
670
|
+
}
|
|
671
|
+
CancelNewTemplateContent() {
|
|
672
|
+
this.IsAddingNewContent = false;
|
|
673
|
+
this.NewTemplateContent = null;
|
|
674
|
+
}
|
|
675
|
+
/** @deprecated Use {@link CancelNewTemplateContent}. */
|
|
510
676
|
cancelNewTemplateContent() {
|
|
511
|
-
this.
|
|
512
|
-
this.newTemplateContent = null;
|
|
677
|
+
return this.CancelNewTemplateContent();
|
|
513
678
|
}
|
|
514
|
-
async
|
|
515
|
-
if (index >= 0 && index < this.
|
|
516
|
-
const contentToDelete = this.
|
|
679
|
+
async DeleteTemplateContent(index) {
|
|
680
|
+
if (index >= 0 && index < this.TemplateContents.length) {
|
|
681
|
+
const contentToDelete = this.TemplateContents[index];
|
|
517
682
|
if (contentToDelete.ID) {
|
|
518
683
|
try {
|
|
519
684
|
const result = await contentToDelete.Delete();
|
|
520
685
|
if (result) {
|
|
521
|
-
this.
|
|
686
|
+
this.TemplateContents.splice(index, 1);
|
|
522
687
|
// Adjust selected index if necessary
|
|
523
|
-
if (this.
|
|
524
|
-
this.
|
|
688
|
+
if (this.SelectedContentIndex >= this.TemplateContents.length) {
|
|
689
|
+
this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);
|
|
525
690
|
}
|
|
526
691
|
// If no contents remain, create a default one
|
|
527
|
-
if (this.
|
|
528
|
-
await this.
|
|
692
|
+
if (this.TemplateContents.length === 0) {
|
|
693
|
+
await this.CreateDefaultTemplateContent();
|
|
529
694
|
}
|
|
530
695
|
}
|
|
531
696
|
else {
|
|
@@ -539,14 +704,14 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
539
704
|
}
|
|
540
705
|
else {
|
|
541
706
|
// Not saved yet, just remove from array
|
|
542
|
-
this.
|
|
543
|
-
if (this.
|
|
544
|
-
this.
|
|
707
|
+
this.TemplateContents.splice(index, 1);
|
|
708
|
+
if (this.SelectedContentIndex >= this.TemplateContents.length) {
|
|
709
|
+
this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);
|
|
545
710
|
}
|
|
546
711
|
// Reset adding new content state if we're deleting the new content
|
|
547
|
-
if (this.
|
|
548
|
-
this.
|
|
549
|
-
this.
|
|
712
|
+
if (this.IsAddingNewContent && index === this.TemplateContents.length) {
|
|
713
|
+
this.IsAddingNewContent = false;
|
|
714
|
+
this.NewTemplateContent = null;
|
|
550
715
|
}
|
|
551
716
|
}
|
|
552
717
|
}
|
|
@@ -554,43 +719,67 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
554
719
|
console.error('Invalid index for deletion:', index);
|
|
555
720
|
}
|
|
556
721
|
}
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
722
|
+
/** @deprecated Use {@link DeleteTemplateContent}. */
|
|
723
|
+
async deleteTemplateContent(index) {
|
|
724
|
+
return this.DeleteTemplateContent(index);
|
|
725
|
+
}
|
|
726
|
+
get CurrentTemplateContent() {
|
|
727
|
+
if (this.IsAddingNewContent) {
|
|
728
|
+
return this.NewTemplateContent;
|
|
560
729
|
}
|
|
561
|
-
return this.
|
|
730
|
+
return this.TemplateContents[this.SelectedContentIndex] || null;
|
|
562
731
|
}
|
|
732
|
+
/** @deprecated Use {@link CurrentTemplateContent}. */
|
|
733
|
+
get currentTemplateContent() {
|
|
734
|
+
return this.CurrentTemplateContent;
|
|
735
|
+
}
|
|
736
|
+
get HasMultipleContents() {
|
|
737
|
+
return this.TemplateContents.length > 1 || this.IsAddingNewContent;
|
|
738
|
+
}
|
|
739
|
+
/** @deprecated Use {@link HasMultipleContents}. */
|
|
563
740
|
get hasMultipleContents() {
|
|
564
|
-
return this.
|
|
741
|
+
return this.HasMultipleContents;
|
|
565
742
|
}
|
|
566
|
-
|
|
743
|
+
OnContentTypeChange() {
|
|
567
744
|
// Content type changes just modify the current content, no new record creation
|
|
568
745
|
this.updateUnsavedChangesFlag();
|
|
569
746
|
}
|
|
570
|
-
|
|
747
|
+
/** @deprecated Use {@link OnContentTypeChange}. */
|
|
748
|
+
onContentTypeChange() {
|
|
749
|
+
return this.OnContentTypeChange();
|
|
750
|
+
}
|
|
751
|
+
OnContentChange() {
|
|
571
752
|
this.updateUnsavedChangesFlag();
|
|
572
753
|
}
|
|
754
|
+
/** @deprecated Use {@link OnContentChange}. */
|
|
755
|
+
onContentChange() {
|
|
756
|
+
return this.OnContentChange();
|
|
757
|
+
}
|
|
573
758
|
/**
|
|
574
759
|
* Updates the hasUnsavedChanges flag based on entity dirty states
|
|
575
760
|
*/
|
|
576
761
|
updateUnsavedChangesFlag() {
|
|
577
|
-
this.
|
|
578
|
-
this.
|
|
762
|
+
this.HasUnsavedChanges = this.TemplateContents.some(content => content.Dirty) ||
|
|
763
|
+
this.IsAddingNewContent ||
|
|
579
764
|
this.record?.Dirty || false;
|
|
580
765
|
}
|
|
581
|
-
|
|
766
|
+
OnTemplateTextChange(event) {
|
|
582
767
|
if (this.isUpdatingEditorValue) {
|
|
583
768
|
// Ignore change events when we're programmatically updating the editor
|
|
584
769
|
return;
|
|
585
770
|
}
|
|
586
|
-
if (this.
|
|
771
|
+
if (this.CurrentTemplateContent) {
|
|
587
772
|
// Extract value from event - might be event.target.value or just event depending on component
|
|
588
773
|
const value = typeof event === 'string' ? event : (event.target?.value || event);
|
|
589
|
-
this.
|
|
774
|
+
this.CurrentTemplateContent.TemplateText = value;
|
|
590
775
|
// hasUnsavedChanges is automatically handled by entity's IsDirty flag
|
|
591
776
|
this.updateUnsavedChangesFlag();
|
|
592
777
|
}
|
|
593
778
|
}
|
|
779
|
+
/** @deprecated Use {@link OnTemplateTextChange}. */
|
|
780
|
+
onTemplateTextChange(event) {
|
|
781
|
+
return this.OnTemplateTextChange(event);
|
|
782
|
+
}
|
|
594
783
|
/**
|
|
595
784
|
* Helper method to track setTimeout calls for cleanup
|
|
596
785
|
*/
|
|
@@ -614,46 +803,39 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
614
803
|
Promise.resolve().then(() => {
|
|
615
804
|
// Then tracked setTimeout for the next macrotask to ensure DOM is updated
|
|
616
805
|
this.setTrackedTimeout(() => {
|
|
617
|
-
if (!this.
|
|
806
|
+
if (!this.CodeEditor) {
|
|
618
807
|
return;
|
|
619
808
|
}
|
|
620
809
|
this.isUpdatingEditorValue = true;
|
|
621
|
-
const newValue = this.
|
|
810
|
+
const newValue = this.CurrentTemplateContent?.TemplateText || '';
|
|
622
811
|
// Use the setValue method from mj-code-editor component
|
|
623
|
-
this.
|
|
812
|
+
this.CodeEditor.setValue(newValue);
|
|
624
813
|
this.isUpdatingEditorValue = false;
|
|
625
814
|
}, 0);
|
|
626
815
|
});
|
|
627
816
|
}
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
this.
|
|
642
|
-
this.newTemplateContent = null;
|
|
643
|
-
this.updateUnsavedChangesFlag(); // Update based on current entity states
|
|
644
|
-
return true;
|
|
645
|
-
}
|
|
646
|
-
catch (error) {
|
|
647
|
-
console.error('Error saving template contents:', error);
|
|
648
|
-
return false;
|
|
817
|
+
/**
|
|
818
|
+
* The embedded editor's new/dirty Template Contents join this form's pending records, so
|
|
819
|
+
* `InternalSaveRecord()` commits the template and its contents in ONE transaction group (the
|
|
820
|
+
* template first, so the content's TemplateID resolves) and `Validate()` covers the contents too.
|
|
821
|
+
*
|
|
822
|
+
* Before this, the form saved each content on its own AFTER the template save had already been
|
|
823
|
+
* reported as successful; a content whose `Save()` returned false only reached `console.error`,
|
|
824
|
+
* no mutation was issued, and the editor kept showing "Unsaved changes" forever.
|
|
825
|
+
*/
|
|
826
|
+
PopulatePendingRecords() {
|
|
827
|
+
super.PopulatePendingRecords();
|
|
828
|
+
const editorChanges = this.TemplateEditor?.GetPendingChanges() ?? [];
|
|
829
|
+
for (const change of editorChanges) {
|
|
830
|
+
this.PendingRecords.push(change);
|
|
649
831
|
}
|
|
650
832
|
}
|
|
651
833
|
async SaveRecord(StopEditModeAfterSave = true) {
|
|
652
834
|
// Check if we need to create a new category first
|
|
653
|
-
if (this.record.CategoryID && !this.
|
|
835
|
+
if (this.record.CategoryID && !this.CategoryOptions.find(opt => opt.value === this.record.CategoryID)) {
|
|
654
836
|
// Check for duplicate category names (case-insensitive, trimmed)
|
|
655
837
|
if (this.isDuplicateCategory(this.record.CategoryID)) {
|
|
656
|
-
const existingCategory = this.
|
|
838
|
+
const existingCategory = this.CategoryOptions.find(option => option.text && option.text.trim().toLowerCase() === this.record.CategoryID?.trim().toLowerCase());
|
|
657
839
|
if (existingCategory) {
|
|
658
840
|
// Use the existing category instead
|
|
659
841
|
this.record.CategoryID = existingCategory.value;
|
|
@@ -670,7 +852,7 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
670
852
|
const saved = await newCategory.Save();
|
|
671
853
|
if (saved) {
|
|
672
854
|
// Add to options and set the ID
|
|
673
|
-
this.
|
|
855
|
+
this.CategoryOptions.push({
|
|
674
856
|
text: newCategory.Name,
|
|
675
857
|
value: newCategory.ID
|
|
676
858
|
});
|
|
@@ -695,24 +877,31 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
695
877
|
const md = this.ProviderToUse;
|
|
696
878
|
this.record.UserID = md.CurrentUser.ID;
|
|
697
879
|
}
|
|
880
|
+
// The template AND the editor's contents commit together here (see PopulatePendingRecords)
|
|
698
881
|
const templateSaved = await super.SaveRecord(StopEditModeAfterSave);
|
|
699
882
|
if (templateSaved) {
|
|
700
|
-
|
|
701
|
-
|
|
883
|
+
this.TemplateEditor?.MarkContentsSaved();
|
|
884
|
+
this.IsAddingNewContent = false;
|
|
885
|
+
this.NewTemplateContent = null;
|
|
886
|
+
this.updateUnsavedChangesFlag();
|
|
702
887
|
}
|
|
703
|
-
return
|
|
888
|
+
return templateSaved;
|
|
704
889
|
}
|
|
705
|
-
|
|
890
|
+
GetContentTypeDisplayText(typeId) {
|
|
706
891
|
if (!typeId)
|
|
707
892
|
return '-';
|
|
708
|
-
const option = this.
|
|
893
|
+
const option = this.ContentTypeOptions.find(opt => opt.value === typeId);
|
|
709
894
|
return option ? option.text : typeId;
|
|
710
895
|
}
|
|
711
|
-
|
|
712
|
-
|
|
896
|
+
/** @deprecated Use {@link GetContentTypeDisplayText}. */
|
|
897
|
+
getContentTypeDisplayText(typeId) {
|
|
898
|
+
return this.GetContentTypeDisplayText(typeId);
|
|
899
|
+
}
|
|
900
|
+
GetEditorLanguage() {
|
|
901
|
+
if (!this.CurrentTemplateContent?.TypeID) {
|
|
713
902
|
return 'jinja2'; // default to jinja2 for template syntax (compatible with Nunjucks)
|
|
714
903
|
}
|
|
715
|
-
const contentType = this.
|
|
904
|
+
const contentType = this.CurrentTemplateContent.TypeID.toLowerCase();
|
|
716
905
|
// Map content types to CodeMirror language modes
|
|
717
906
|
switch (contentType) {
|
|
718
907
|
case 'html':
|
|
@@ -737,20 +926,24 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
737
926
|
return 'jinja2'; // Default to jinja2 since templates often contain template syntax
|
|
738
927
|
}
|
|
739
928
|
}
|
|
929
|
+
/** @deprecated Use {@link GetEditorLanguage}. */
|
|
930
|
+
getEditorLanguage() {
|
|
931
|
+
return this.GetEditorLanguage();
|
|
932
|
+
}
|
|
740
933
|
isDuplicateCategory(categoryName) {
|
|
741
934
|
const normalizedName = categoryName.trim().toLowerCase();
|
|
742
|
-
return this.
|
|
935
|
+
return this.CategoryOptions.some(option => option.text && option.text.trim().toLowerCase() === normalizedName);
|
|
743
936
|
}
|
|
744
937
|
/**
|
|
745
938
|
* Test run the current template using the parameter dialog
|
|
746
939
|
*/
|
|
747
|
-
async
|
|
748
|
-
if (!this.record?.IsSaved || !this.
|
|
940
|
+
async RunTemplate() {
|
|
941
|
+
if (!this.record?.IsSaved || !this.CurrentTemplateContent) {
|
|
749
942
|
MJNotificationService.Instance.CreateSimpleNotification('Please save the template before running it.', 'warning');
|
|
750
943
|
return;
|
|
751
944
|
}
|
|
752
945
|
// Save any unsaved changes first
|
|
753
|
-
if (this.
|
|
946
|
+
if (this.HasUnsavedChanges) {
|
|
754
947
|
const saveResult = await this.SaveRecord(false); // Don't exit edit mode
|
|
755
948
|
if (!saveResult) {
|
|
756
949
|
MJNotificationService.Instance.CreateSimpleNotification('Failed to save template changes.', 'error');
|
|
@@ -758,39 +951,60 @@ let MJTemplateFormComponentExtended = class MJTemplateFormComponentExtended exte
|
|
|
758
951
|
}
|
|
759
952
|
}
|
|
760
953
|
// Show the parameter dialog
|
|
761
|
-
this.
|
|
954
|
+
this.ShowParamDialog = true;
|
|
955
|
+
}
|
|
956
|
+
/** @deprecated Use {@link RunTemplate}. */
|
|
957
|
+
async runTemplate() {
|
|
958
|
+
return this.RunTemplate();
|
|
762
959
|
}
|
|
763
960
|
/**
|
|
764
961
|
* Handle parameter dialog close
|
|
765
962
|
*/
|
|
963
|
+
OnParamDialogClose() {
|
|
964
|
+
this.ShowParamDialog = false;
|
|
965
|
+
}
|
|
966
|
+
/** @deprecated Use {@link OnParamDialogClose}. */
|
|
766
967
|
onParamDialogClose() {
|
|
767
|
-
this.
|
|
968
|
+
return this.OnParamDialogClose();
|
|
768
969
|
}
|
|
769
|
-
|
|
970
|
+
GetContentTypeOptionsForContent() {
|
|
770
971
|
// Always exclude "Select Type..." option for all content
|
|
771
|
-
return this.
|
|
972
|
+
return this.ContentTypeOptions.filter(option => option.value !== '');
|
|
973
|
+
}
|
|
974
|
+
/** @deprecated Use {@link GetContentTypeOptionsForContent}. */
|
|
975
|
+
getContentTypeOptionsForContent() {
|
|
976
|
+
return this.GetContentTypeOptionsForContent();
|
|
772
977
|
}
|
|
773
978
|
/**
|
|
774
979
|
* Handles template content changes from the shared editor
|
|
775
980
|
*/
|
|
776
|
-
|
|
777
|
-
this.
|
|
981
|
+
OnSharedTemplateContentChange(content) {
|
|
982
|
+
this.TemplateContents = content;
|
|
778
983
|
this.updateUnsavedChangesFlag();
|
|
779
984
|
}
|
|
985
|
+
/** @deprecated Use {@link OnSharedTemplateContentChange}. */
|
|
986
|
+
onSharedTemplateContentChange(content) {
|
|
987
|
+
return this.OnSharedTemplateContentChange(content);
|
|
988
|
+
}
|
|
780
989
|
/**
|
|
781
990
|
* Handles template run requests from the shared editor
|
|
782
991
|
*/
|
|
992
|
+
OnSharedTemplateRun(template) {
|
|
993
|
+
this.RunTemplate();
|
|
994
|
+
}
|
|
995
|
+
/** @deprecated Use {@link OnSharedTemplateRun}. */
|
|
783
996
|
onSharedTemplateRun(template) {
|
|
784
|
-
this.
|
|
997
|
+
return this.OnSharedTemplateRun(template);
|
|
785
998
|
}
|
|
786
999
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJTemplateFormComponentExtended_BaseFactory; return function MJTemplateFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJTemplateFormComponentExtended_BaseFactory || (ɵMJTemplateFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJTemplateFormComponentExtended)))(__ngFactoryType__ || MJTemplateFormComponentExtended); }; })(); }
|
|
787
1000
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJTemplateFormComponentExtended, selectors: [["mj-templates-form"]], viewQuery: function MJTemplateFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
|
|
788
|
-
i0.ɵɵviewQuery(_c0, 5);
|
|
1001
|
+
i0.ɵɵviewQuery(_c0, 5)(_c1, 5);
|
|
789
1002
|
} if (rf & 2) {
|
|
790
1003
|
let _t;
|
|
791
|
-
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.
|
|
792
|
-
|
|
793
|
-
|
|
1004
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.CodeEditor = _t.first);
|
|
1005
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.TemplateEditor = _t.first);
|
|
1006
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["form", "ngForm"], ["templateEditor", ""], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "template-main-area", 2, "display", "flex", "flex-direction", "column", "flex", "1", "min-height", "0", "overflow-y", "auto"], [1, "template-header-area"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px", "margin-bottom", "8px"], [1, "fa-solid", "fa-file-code", "template-icon"], ["type", "text", "name", "templateName", "placeholder", "Enter template name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "display", "flex", "gap", "16px", "margin-bottom", "12px", "flex-wrap", "wrap", "align-items", "center"], ["name", "description", "placeholder", "Enter template description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModel", "rows"], [1, "description-text"], [2, "display", "flex", "align-items", "center", "gap", "16px", "flex-wrap", "wrap"], [2, "display", "flex", "align-items", "center", "gap", "6px", "font-size", "0.85em"], [1, "fa-solid", "fa-file-lines", "meta-icon"], [1, "meta-label"], [1, "meta-value"], [2, "display", "flex", "flex-direction", "column", "gap", "8px", "align-items", "flex-end"], ["title", "Run Template", 1, "run-template-btn"], [1, "configuration-sections"], [2, "margin-bottom", "12px", 3, "Expanded"], ["mjAccordionTitle", ""], [2, "padding", "8px", "min-height", "400px"], [2, "height", "100%", "display", "block", 3, "contentChange", "runTemplate", "template", "config"], [2, "padding", "16px"], [2, "display", "grid", "grid-template-columns", "1fr 1fr", "gap", "20px"], ["FieldName", "UserPrompt", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "UserID", "Type", "textbox", "LinkType", "Record", "LinkComponentType", "Search", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "ActiveAt", "Type", "datepicker", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "DisabledAt", "Type", "datepicker", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "IsActive", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "__mj_CreatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "__mj_UpdatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "Category", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], ["FieldName", "User", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode"], [3, "isVisibleChange", "onClose", "template", "isVisible"], ["type", "text", "name", "templateName", "placeholder", "Enter template name...", 1, "mj-input", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], [1, "active-badge"], [1, "inactive-badge"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-pause-circle"], [1, "field-label"], ["name", "categoryId", "TextField", "text", "ValueField", "value", "Placeholder", "Select or enter new category...", 2, "width", "250px", 3, "ngModelChange", "ValueChange", "ngModel", "Data", "ValuePrimitive", "AllowCustom"], ["name", "isActive", 3, "ngModelChange", "ngModel"], ["name", "description", "placeholder", "Enter template description...", 1, "mj-textarea", 2, "width", "100%", "max-width", "600px", "margin-bottom", "12px", 3, "ngModelChange", "ngModel", "rows"], [1, "fa-solid", "fa-folder", "meta-icon"], ["title", "Run Template", 1, "run-template-btn", 3, "click"], [1, "fa-solid", "fa-play"], [1, "panel-title"], [1, "fa-solid", "fa-code"], [1, "count-badge"], [1, "fa-solid", "fa-cogs"], [2, "padding", "16px 0"], [3, "template", "editMode"], [1, "fa-solid", "fa-sliders"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "fa-solid", "fa-robot"], [1, "fa-solid", "fa-file-text"]], template: function MJTemplateFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
1007
|
+
i0.ɵɵconditionalCreate(0, MJTemplateFormComponentExtended_Conditional_0_Template, 49, 46);
|
|
794
1008
|
} if (rf & 2) {
|
|
795
1009
|
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
796
1010
|
} }, dependencies: [i1.ɵNgNoValidate, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.NgModel, i1.NgForm, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJComboboxComponent, i2.MJSwitchComponent, i3.MjFormFieldComponent, i3.MjRecordFormContainerComponent, i3.ExplorerEntityDataGridComponent, i4.TemplateParamDialogComponent, i5.TemplateParamsGridComponent, i6.TemplateEditorComponent], styles: [".k-pane[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n}\n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}", "\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n.record-form-container[_ngcontent-%COMP%] {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n background: var(--mj-bg-surface);\n}\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.template-header[_ngcontent-%COMP%] {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n\n.template-header-area[_ngcontent-%COMP%] {\n flex-shrink: 0;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.template-header-area[_ngcontent-%COMP%] .template-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1.4em;\n}\n\n.template-header-area[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n flex: 1;\n}\n\n.template-header-area[_ngcontent-%COMP%] .active-badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area[_ngcontent-%COMP%] .inactive-badge[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-muted) 15%, var(--mj-bg-surface));\n color: var(--mj-text-muted);\n border: 1px solid color-mix(in srgb, var(--mj-text-muted) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area[_ngcontent-%COMP%] .field-label[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 4px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.template-header-area[_ngcontent-%COMP%] .description-text[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n.template-header-area[_ngcontent-%COMP%] .meta-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.template-header-area[_ngcontent-%COMP%] .meta-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.template-header-area[_ngcontent-%COMP%] .meta-value[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n\n.run-template-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 0.95em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.run-template-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n\n.configuration-sections[_ngcontent-%COMP%] {\n flex: 1;\n background: var(--mj-bg-surface);\n border-top: 2px solid var(--mj-border-default);\n padding: 16px;\n min-height: 0;\n}\n\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.panel-title[_ngcontent-%COMP%] .count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n .configuration-sections mj-accordion-panel {\n margin-bottom: 12px;\n}\n\n .configuration-sections .mj-accordion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n background: var(--mj-bg-surface-card);\n}\n\n .configuration-sections .mj-accordion-header {\n padding: 16px 20px;\n font-weight: 600;\n font-size: 16px;\n}\n\n .configuration-sections .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n .configuration-sections .mj-accordion-body {\n padding: 0;\n}\n\n\n.template-header[_ngcontent-%COMP%], \n.badge[_ngcontent-%COMP%] {\n transition: all 0.2s ease;\n}"] }); }
|
|
@@ -801,10 +1015,13 @@ MJTemplateFormComponentExtended = __decorate([
|
|
|
801
1015
|
export { MJTemplateFormComponentExtended };
|
|
802
1016
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJTemplateFormComponentExtended, [{
|
|
803
1017
|
type: Component,
|
|
804
|
-
args: [{ standalone: false, selector: 'mj-templates-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Main Content Area -->\n <div class=\"template-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Header Section -->\n <div class=\"template-header-area\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n\n <!-- Left: Template Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-file-code template-icon\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"record.Name\"\n name=\"templateName\"\n placeholder=\"Enter template name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4>{{ record.Name || 'Unnamed Template' }}</h4>\n @if (record.IsActive) {\n <span class=\"active-badge\">\n <i class=\"fa-solid fa-check-circle\"></i> Active\n </span>\n } @else {\n <span class=\"inactive-badge\">\n <i class=\"fa-solid fa-pause-circle\"></i> Inactive\n </span>\n }\n }\n </div>\n\n <!-- Category and Active toggle when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap; align-items: center;\">\n <div>\n <label class=\"field-label\">Category</label>\n <mj-combobox [(ngModel)]=\"record.CategoryID\"\n name=\"categoryId\"\n [Data]=\"categoryOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [AllowCustom]=\"true\"\n (ValueChange)=\"onCategoryChange($any($event))\"\n Placeholder=\"Select or enter new category...\"\n style=\"width: 250px;\">\n </mj-combobox>\n </div>\n <div>\n <label class=\"field-label\">Active</label>\n <mj-switch [(ngModel)]=\"record.IsActive\" name=\"isActive\"></mj-switch>\n </div>\n </div>\n }\n\n @if (EditMode) {\n <textarea class=\"mj-textarea\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter template description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p class=\"description-text\">{{ record.Description }}</p>\n }\n\n <!-- Quick Info Row -->\n <div style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.Category) {\n <div style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder meta-icon\"></i>\n <span class=\"meta-label\">Category:</span>\n <span class=\"meta-value\">{{ record.Category }}</span>\n </div>\n }\n\n <div style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-file-lines meta-icon\"></i>\n <span class=\"meta-label\">Contents:</span>\n <span class=\"meta-value\">{{ templateContents.length }}</span>\n </div>\n </div>\n </div>\n\n <!-- Right: Action Buttons -->\n <div style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n @if (record.IsSaved) {\n <button class=\"run-template-btn\"\n (click)=\"runTemplate()\"\n title=\"Run Template\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\">\n\n <!-- Template Editor Section -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Template Editor\n @if (templateContents.length > 0) {\n <span class=\"count-badge\">{{ templateContents.length }}</span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 8px; min-height: 400px;\">\n <mj-template-editor\n [template]=\"record\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onSharedTemplateContentChange($event)\"\n (runTemplate)=\"onSharedTemplateRun($event)\"\n style=\"height: 100%; display: block;\">\n </mj-template-editor>\n </div>\n </mj-accordion-panel>\n\n <!-- Details Section -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-cogs\"></i>\n Details\n </span>\n </ng-template>\n\n <div style=\"padding: 16px;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserPrompt\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n LinkType=\"Record\"\n LinkComponentType=\"Search\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ActiveAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"DisabledAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"IsActive\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Category\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"User\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Template Parameters Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-template-params-grid\n [template]=\"record\"\n [editMode]=\"EditMode\">\n </mj-template-params-grid>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- AI Prompts Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-robot\"></i>\n AI Prompts\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','TemplateID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Entity Documents Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-file-text\"></i>\n Entity Documents\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Entity Documents','TemplateID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Entity Documents')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Template Parameter Dialog -->\n<mj-template-param-dialog\n [template]=\"record\"\n [(isVisible)]=\"showParamDialog\"\n (onClose)=\"onParamDialogClose()\">\n</mj-template-param-dialog>\n}\n", styles: [".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n", "/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n background: var(--mj-bg-surface);\n}\n\n/* Override the shared record-form min-height so flex layout works properly */\n.record-form {\n min-height: 0 !important;\n}\n\n.template-header {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n/* Header section */\n.template-header-area {\n flex-shrink: 0;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.template-header-area .template-icon {\n color: var(--mj-brand-primary);\n font-size: 1.4em;\n}\n\n.template-header-area h4 {\n margin: 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n flex: 1;\n}\n\n.template-header-area .active-badge {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area .inactive-badge {\n background: color-mix(in srgb, var(--mj-text-muted) 15%, var(--mj-bg-surface));\n color: var(--mj-text-muted);\n border: 1px solid color-mix(in srgb, var(--mj-text-muted) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area .field-label {\n display: block;\n margin-bottom: 4px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.template-header-area .description-text {\n margin: 0 0 12px 0;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n.template-header-area .meta-icon {\n color: var(--mj-text-muted);\n}\n\n.template-header-area .meta-label {\n color: var(--mj-text-muted);\n}\n\n.template-header-area .meta-value {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n/* Run template button */\n.run-template-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 0.95em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.run-template-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n/* Configuration sections */\n.configuration-sections {\n flex: 1;\n background: var(--mj-bg-surface);\n border-top: 2px solid var(--mj-border-default);\n padding: 16px;\n min-height: 0;\n}\n\n/* Expansion panel titles */\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-title i {\n color: var(--mj-text-muted);\n}\n\n.panel-title .count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Accordion Panel Styling */\n::ng-deep .configuration-sections mj-accordion-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .configuration-sections .mj-accordion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n background: var(--mj-bg-surface-card);\n}\n\n::ng-deep .configuration-sections .mj-accordion-header {\n padding: 16px 20px;\n font-weight: 600;\n font-size: 16px;\n}\n\n::ng-deep .configuration-sections .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n::ng-deep .configuration-sections .mj-accordion-body {\n padding: 0;\n}\n\n/* Smooth transitions */\n.template-header,\n.badge {\n transition: all 0.2s ease;\n}\n"] }]
|
|
805
|
-
}], null, {
|
|
1018
|
+
args: [{ standalone: false, selector: 'mj-templates-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"toolbarConfig\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Main Content Area -->\n <div class=\"template-main-area\" style=\"display: flex; flex-direction: column; flex: 1; min-height: 0; overflow-y: auto;\">\n\n <!-- Header Section -->\n <div class=\"template-header-area\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n\n <!-- Left: Template Info -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px; margin-bottom: 8px;\">\n <i class=\"fa-solid fa-file-code template-icon\"></i>\n @if (EditMode) {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"record.Name\"\n name=\"templateName\"\n placeholder=\"Enter template name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\" />\n } @else {\n <h4>{{ record.Name || 'Unnamed Template' }}</h4>\n @if (record.IsActive) {\n <span class=\"active-badge\">\n <i class=\"fa-solid fa-check-circle\"></i> Active\n </span>\n } @else {\n <span class=\"inactive-badge\">\n <i class=\"fa-solid fa-pause-circle\"></i> Inactive\n </span>\n }\n }\n </div>\n\n <!-- Category and Active toggle when in edit mode -->\n @if (EditMode) {\n <div style=\"display: flex; gap: 16px; margin-bottom: 12px; flex-wrap: wrap; align-items: center;\">\n <div>\n <label class=\"field-label\">Category</label>\n <mj-combobox [(ngModel)]=\"record.CategoryID\"\n name=\"categoryId\"\n [Data]=\"categoryOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n [AllowCustom]=\"true\"\n (ValueChange)=\"onCategoryChange($any($event))\"\n Placeholder=\"Select or enter new category...\"\n style=\"width: 250px;\">\n </mj-combobox>\n </div>\n <div>\n <label class=\"field-label\">Active</label>\n <mj-switch [(ngModel)]=\"record.IsActive\" name=\"isActive\"></mj-switch>\n </div>\n </div>\n }\n\n @if (EditMode) {\n <textarea class=\"mj-textarea\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter template description...\"\n style=\"width: 100%; max-width: 600px; margin-bottom: 12px;\"></textarea>\n } @else if (record.Description) {\n <p class=\"description-text\">{{ record.Description }}</p>\n }\n\n <!-- Quick Info Row -->\n <div style=\"display: flex; align-items: center; gap: 16px; flex-wrap: wrap;\">\n @if (record.Category) {\n <div style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-folder meta-icon\"></i>\n <span class=\"meta-label\">Category:</span>\n <span class=\"meta-value\">{{ record.Category }}</span>\n </div>\n }\n\n <div style=\"display: flex; align-items: center; gap: 6px; font-size: 0.85em;\">\n <i class=\"fa-solid fa-file-lines meta-icon\"></i>\n <span class=\"meta-label\">Contents:</span>\n <span class=\"meta-value\">{{ templateContents.length }}</span>\n </div>\n </div>\n </div>\n\n <!-- Right: Action Buttons -->\n <div style=\"display: flex; flex-direction: column; gap: 8px; align-items: flex-end;\">\n @if (record.IsSaved) {\n <button class=\"run-template-btn\"\n (click)=\"runTemplate()\"\n title=\"Run Template\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Configuration Sections with Expansion Panels -->\n <div class=\"configuration-sections\">\n\n <!-- Template Editor Section -->\n <mj-accordion-panel\n [Expanded]=\"true\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Template Editor\n @if (templateContents.length > 0) {\n <span class=\"count-badge\">{{ templateContents.length }}</span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 8px; min-height: 400px;\">\n <mj-template-editor\n #templateEditor\n [template]=\"record\"\n [config]=\"templateEditorConfig\"\n (contentChange)=\"onSharedTemplateContentChange($event)\"\n (runTemplate)=\"onSharedTemplateRun($event)\"\n style=\"height: 100%; display: block;\">\n </mj-template-editor>\n </div>\n </mj-accordion-panel>\n\n <!-- Details Section -->\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-cogs\"></i>\n Details\n </span>\n </ng-template>\n\n <div style=\"padding: 16px;\">\n <div style=\"display: grid; grid-template-columns: 1fr 1fr; gap: 20px;\">\n <!-- Left Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserPrompt\"\n Type=\"textarea\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"UserID\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\"\n LinkType=\"Record\"\n LinkComponentType=\"Search\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"ActiveAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"DisabledAt\"\n Type=\"datepicker\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n\n <!-- Right Column -->\n <div>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"IsActive\"\n Type=\"checkbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_CreatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"__mj_UpdatedAt\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"Category\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n <mj-form-field\n [Record]=\"record\"\n [ShowLabel]=\"true\"\n FieldName=\"User\"\n Type=\"textbox\"\n [EditMode]=\"EditMode\">\n </mj-form-field>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Template Parameters Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-template-params-grid\n [template]=\"record\"\n [editMode]=\"EditMode\">\n </mj-template-params-grid>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- AI Prompts Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-robot\"></i>\n AI Prompts\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Prompts','TemplateID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Prompts')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Entity Documents Section -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [Expanded]=\"false\"\n style=\"margin-bottom: 12px;\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-file-text\"></i>\n Entity Documents\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Entity Documents','TemplateID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Entity Documents')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n </div>\n </mj-accordion-panel>\n }\n </div>\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Template Parameter Dialog -->\n<mj-template-param-dialog\n [template]=\"record\"\n [(isVisible)]=\"showParamDialog\"\n (onClose)=\"onParamDialogClose()\">\n</mj-template-param-dialog>\n}\n", styles: [".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n", "/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n.record-form-container {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n background: var(--mj-bg-surface);\n}\n\n/* Override the shared record-form min-height so flex layout works properly */\n.record-form {\n min-height: 0 !important;\n}\n\n.template-header {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n/* Header section */\n.template-header-area {\n flex-shrink: 0;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.template-header-area .template-icon {\n color: var(--mj-brand-primary);\n font-size: 1.4em;\n}\n\n.template-header-area h4 {\n margin: 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n flex: 1;\n}\n\n.template-header-area .active-badge {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area .inactive-badge {\n background: color-mix(in srgb, var(--mj-text-muted) 15%, var(--mj-bg-surface));\n color: var(--mj-text-muted);\n border: 1px solid color-mix(in srgb, var(--mj-text-muted) 30%, transparent);\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 0.8em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n}\n\n.template-header-area .field-label {\n display: block;\n margin-bottom: 4px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.9em;\n}\n\n.template-header-area .description-text {\n margin: 0 0 12px 0;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n line-height: 1.4;\n}\n\n.template-header-area .meta-icon {\n color: var(--mj-text-muted);\n}\n\n.template-header-area .meta-label {\n color: var(--mj-text-muted);\n}\n\n.template-header-area .meta-value {\n color: var(--mj-text-secondary);\n font-weight: 500;\n}\n\n/* Run template button */\n.run-template-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n padding: 10px 20px;\n border-radius: 8px;\n font-size: 0.95em;\n font-weight: 600;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.run-template-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n/* Configuration sections */\n.configuration-sections {\n flex: 1;\n background: var(--mj-bg-surface);\n border-top: 2px solid var(--mj-border-default);\n padding: 16px;\n min-height: 0;\n}\n\n/* Expansion panel titles */\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-title i {\n color: var(--mj-text-muted);\n}\n\n.panel-title .count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Accordion Panel Styling */\n::ng-deep .configuration-sections mj-accordion-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .configuration-sections .mj-accordion-panel {\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n background: var(--mj-bg-surface-card);\n}\n\n::ng-deep .configuration-sections .mj-accordion-header {\n padding: 16px 20px;\n font-weight: 600;\n font-size: 16px;\n}\n\n::ng-deep .configuration-sections .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n::ng-deep .configuration-sections .mj-accordion-body {\n padding: 0;\n}\n\n/* Smooth transitions */\n.template-header,\n.badge {\n transition: all 0.2s ease;\n}\n"] }]
|
|
1019
|
+
}], null, { CodeEditor: [{
|
|
806
1020
|
type: ViewChild,
|
|
807
1021
|
args: ['codeEditor']
|
|
1022
|
+
}], TemplateEditor: [{
|
|
1023
|
+
type: ViewChild,
|
|
1024
|
+
args: ['templateEditor']
|
|
808
1025
|
}] }); })();
|
|
809
1026
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJTemplateFormComponentExtended, { className: "MJTemplateFormComponentExtended", filePath: "src/lib/custom/Templates/templates-form.component.ts", lineNumber: 24 }); })();
|
|
810
1027
|
//# sourceMappingURL=templates-form.component.js.map
|