@memberjunction/ng-core-entity-forms 6.2.0-edge.1 → 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.
Files changed (161) hide show
  1. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts +1 -0
  2. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/agent-form-tabs.js +2 -0
  4. package/dist/lib/custom/AIAgents/agent-form-tabs.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +528 -521
  6. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  7. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  8. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +10 -16
  9. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  10. package/dist/lib/custom/AIPrompts/pending-records.d.ts +11 -0
  11. package/dist/lib/custom/AIPrompts/pending-records.d.ts.map +1 -0
  12. package/dist/lib/custom/AIPrompts/pending-records.js +21 -0
  13. package/dist/lib/custom/AIPrompts/pending-records.js.map +1 -0
  14. package/dist/lib/custom/Entities/entity-form.component.d.ts +8 -1
  15. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  16. package/dist/lib/custom/Entities/entity-form.component.js +240 -147
  17. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  18. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +19 -0
  19. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  20. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +50 -8
  21. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  22. package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts +37 -0
  23. package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts.map +1 -0
  24. package/dist/lib/custom/Rubrics/evaluation-form.component.js +399 -0
  25. package/dist/lib/custom/Rubrics/evaluation-form.component.js.map +1 -0
  26. package/dist/lib/custom/Rubrics/record-forms.component.d.ts +69 -0
  27. package/dist/lib/custom/Rubrics/record-forms.component.d.ts.map +1 -0
  28. package/dist/lib/custom/Rubrics/record-forms.component.js +587 -0
  29. package/dist/lib/custom/Rubrics/record-forms.component.js.map +1 -0
  30. package/dist/lib/custom/Rubrics/rubric-form.component.d.ts +67 -0
  31. package/dist/lib/custom/Rubrics/rubric-form.component.d.ts.map +1 -0
  32. package/dist/lib/custom/Rubrics/rubric-form.component.js +534 -0
  33. package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -0
  34. package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts +25 -0
  35. package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts.map +1 -0
  36. package/dist/lib/custom/Rubrics/rubric-form.panels.js +299 -0
  37. package/dist/lib/custom/Rubrics/rubric-form.panels.js.map +1 -0
  38. package/dist/lib/custom/Rubrics/scale-form.component.d.ts +31 -0
  39. package/dist/lib/custom/Rubrics/scale-form.component.d.ts.map +1 -0
  40. package/dist/lib/custom/Rubrics/scale-form.component.js +395 -0
  41. package/dist/lib/custom/Rubrics/scale-form.component.js.map +1 -0
  42. package/dist/lib/custom/Templates/templates-form.component.d.ts +13 -4
  43. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  44. package/dist/lib/custom/Templates/templates-form.component.js +110 -113
  45. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  46. package/dist/lib/custom/Tests/test-form.component.d.ts +6 -0
  47. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  48. package/dist/lib/custom/Tests/test-form.component.js +402 -361
  49. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  50. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
  51. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  52. package/dist/lib/custom/Tests/test-suite-form.component.js +704 -664
  53. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  54. package/dist/lib/custom/Users/user-overview.panel.js +1 -1
  55. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  56. package/dist/lib/custom/custom-forms.module.d.ts +56 -48
  57. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  58. package/dist/lib/custom/custom-forms.module.js +60 -0
  59. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  60. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  61. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +61 -43
  62. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  63. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts +10 -0
  64. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts.map +1 -0
  65. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js +74 -0
  66. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js.map +1 -0
  67. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  68. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +37 -19
  69. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  70. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  71. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +31 -13
  72. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  73. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  74. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +156 -84
  75. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  76. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts +10 -0
  77. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts.map +1 -0
  78. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js +62 -0
  79. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js.map +1 -0
  80. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
  81. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +24 -6
  82. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  83. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.d.ts.map +1 -1
  84. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +24 -16
  85. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
  86. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts +10 -0
  87. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts.map +1 -0
  88. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js +107 -0
  89. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js.map +1 -0
  90. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts +10 -0
  91. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts.map +1 -0
  92. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js +74 -0
  93. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js.map +1 -0
  94. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts +10 -0
  95. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts.map +1 -0
  96. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js +135 -0
  97. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js.map +1 -0
  98. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts +10 -0
  99. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts.map +1 -0
  100. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js +87 -0
  101. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js.map +1 -0
  102. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts +10 -0
  103. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts.map +1 -0
  104. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js +107 -0
  105. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js.map +1 -0
  106. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts +10 -0
  107. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts.map +1 -0
  108. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js +155 -0
  109. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js.map +1 -0
  110. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts +10 -0
  111. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts.map +1 -0
  112. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js +62 -0
  113. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js.map +1 -0
  114. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js +183 -0
  117. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js.map +1 -0
  118. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts +10 -0
  119. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts.map +1 -0
  120. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js +120 -0
  121. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js.map +1 -0
  122. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts +10 -0
  123. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts.map +1 -0
  124. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js +107 -0
  125. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js.map +1 -0
  126. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts +10 -0
  127. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts.map +1 -0
  128. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js +103 -0
  129. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js.map +1 -0
  130. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts +10 -0
  131. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts.map +1 -0
  132. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js +171 -0
  133. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js.map +1 -0
  134. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.d.ts.map +1 -1
  135. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -16
  136. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  137. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +27 -25
  138. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.d.ts.map +1 -1
  140. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +19 -11
  141. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  143. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +172 -118
  144. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  145. package/dist/lib/generated/generated-forms.module.d.ts +436 -422
  146. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  147. package/dist/lib/generated/generated-forms.module.js +44 -2
  148. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  149. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts +116 -0
  150. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts.map +1 -0
  151. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js +820 -0
  152. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js.map +1 -0
  153. package/dist/lib/shared/components/template-editor.component.d.ts +25 -1
  154. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  155. package/dist/lib/shared/components/template-editor.component.js +67 -3
  156. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  157. package/dist/public-api.d.ts +5 -0
  158. package/dist/public-api.d.ts.map +1 -1
  159. package/dist/public-api.js +5 -0
  160. package/dist/public-api.js.map +1 -1
  161. package/package.json +47 -43
@@ -1 +1 @@
1
- {"version":3,"file":"template-editor.component.js","sourceRoot":"","sources":["../../../../src/lib/shared/components/template-editor.component.ts","../../../../src/lib/shared/components/template-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, ViewChild, AfterViewInit } from '@angular/core';\nimport { MJTemplateEntity, MJTemplateContentEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\nimport { TemplateEngineBase } from '@memberjunction/templates-base-types';\nimport { LanguageDescription } from '@codemirror/language';\nimport { languages } from '@codemirror/language-data';\nimport { CodeEditorComponent } from '@memberjunction/ng-code-editor';\nimport { Subject } from 'rxjs';\nimport { DEFAULT_SYSTEM_PLACEHOLDERS, SystemPlaceholder, SYSTEM_PLACEHOLDER_CATEGORIES, SystemPlaceholderCategory } from '@memberjunction/ai-core-plus';\n\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nexport interface TemplateEditorConfig {\n allowEdit?: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n showRunButton?: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n compactMode?: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n@Component({\n standalone: false,\n selector: 'mj-template-editor',\n templateUrl: './template-editor.component.html',\n styleUrls: ['./template-editor.component.css']\n})\nexport class TemplateEditorComponent extends BaseAngularComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n @Input() Template: MJTemplateEntity | null = null;\n\n /** @deprecated Use {@link Template}. */\n @Input() set template(value: MJTemplateEntity | null) {\n this.Template = value;\n }\n /** @deprecated Use {@link Template}. */\n get template(): MJTemplateEntity | null {\n return this.Template;\n }\n @Input() config: TemplateEditorConfig = {\n allowEdit: true,\n showRunButton: false,\n compactMode: false\n };\n \n @Output() ContentChange = new EventEmitter<MJTemplateContentEntity[]>();\n\n /**\n * @deprecated Use {@link ContentChange}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (contentChange) keeps working. Must stay AFTER ContentChange: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() contentChange = this.ContentChange;\n @Output() RunTemplate = new EventEmitter<MJTemplateEntity>();\n\n /**\n * @deprecated Use {@link RunTemplate}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (runTemplate) keeps working. Must stay AFTER RunTemplate: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() runTemplate = this.RunTemplate;\n \n public TemplateContents: MJTemplateContentEntity[] = [];\n\n /** @deprecated Use {@link TemplateContents}. */\n public get templateContents(): MJTemplateContentEntity[] {\n return this.TemplateContents;\n }\n /** @deprecated Use {@link TemplateContents}. */\n public set templateContents(value: MJTemplateContentEntity[]) {\n this.TemplateContents = value;\n }\n public SelectedContentIndex: number = 0;\n\n /** @deprecated Use {@link SelectedContentIndex}. */\n public get selectedContentIndex(): number {\n return this.SelectedContentIndex;\n }\n /** @deprecated Use {@link SelectedContentIndex}. */\n public set selectedContentIndex(value: number) {\n this.SelectedContentIndex = value;\n }\n public IsAddingNewContent: boolean = false;\n\n /** @deprecated Use {@link IsAddingNewContent}. */\n public get isAddingNewContent(): boolean {\n return this.IsAddingNewContent;\n }\n /** @deprecated Use {@link IsAddingNewContent}. */\n public set isAddingNewContent(value: boolean) {\n this.IsAddingNewContent = value;\n }\n public NewTemplateContent: MJTemplateContentEntity | null = null;\n\n /** @deprecated Use {@link NewTemplateContent}. */\n public get newTemplateContent(): MJTemplateContentEntity | null {\n return this.NewTemplateContent;\n }\n /** @deprecated Use {@link NewTemplateContent}. */\n public set newTemplateContent(value: MJTemplateContentEntity | null) {\n this.NewTemplateContent = value;\n }\n public HasUnsavedChanges: boolean = false;\n\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public get hasUnsavedChanges(): boolean {\n return this.HasUnsavedChanges;\n }\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public set hasUnsavedChanges(value: boolean) {\n this.HasUnsavedChanges = value;\n }\n public ContentTypeOptions: Array<{text: string, value: string}> = [];\n\n /** @deprecated Use {@link ContentTypeOptions}. */\n public get contentTypeOptions(): Array<{text: string, value: string}> {\n return this.ContentTypeOptions;\n }\n /** @deprecated Use {@link ContentTypeOptions}. */\n public set contentTypeOptions(value: Array<{text: string, value: string}>) {\n this.ContentTypeOptions = value;\n }\n public SupportedLanguages: LanguageDescription[] = languages;\n\n /** @deprecated Use {@link SupportedLanguages}. */\n public get supportedLanguages(): LanguageDescription[] {\n return this.SupportedLanguages;\n }\n /** @deprecated Use {@link SupportedLanguages}. */\n public set supportedLanguages(value: LanguageDescription[]) {\n this.SupportedLanguages = value;\n }\n public IsRunningTemplate = false;\n\n /** @deprecated Use {@link IsRunningTemplate}. */\n public get isRunningTemplate() {\n return this.IsRunningTemplate;\n }\n /** @deprecated Use {@link IsRunningTemplate}. */\n public set isRunningTemplate(value) {\n this.IsRunningTemplate = value;\n }\n public ActiveHelpTab: 'syntax' | 'placeholders' = 'syntax';\n\n /** @deprecated Use {@link ActiveHelpTab}. */\n public get activeHelpTab(): 'syntax' | 'placeholders' {\n return this.ActiveHelpTab;\n }\n /** @deprecated Use {@link ActiveHelpTab}. */\n public set activeHelpTab(value: 'syntax' | 'placeholders') {\n this.ActiveHelpTab = value;\n }\n public ActivePlaceholderCategory: string = '';\n\n /** @deprecated Use {@link ActivePlaceholderCategory}. */\n public get activePlaceholderCategory(): string {\n return this.ActivePlaceholderCategory;\n }\n /** @deprecated Use {@link ActivePlaceholderCategory}. */\n public set activePlaceholderCategory(value: string) {\n this.ActivePlaceholderCategory = value;\n }\n \n // System placeholders organized by category\n public PlaceholderCategories: Array<{\n category: SystemPlaceholderCategory;\n placeholders: SystemPlaceholder[];\n }> = [];\n\n /** @deprecated Use {@link PlaceholderCategories}. */\n public get placeholderCategories(): Array<{\n category: SystemPlaceholderCategory;\n placeholders: SystemPlaceholder[];\n }> {\n return this.PlaceholderCategories;\n }\n /** @deprecated Use {@link PlaceholderCategories}. */\n public set placeholderCategories(value: Array<{\n category: SystemPlaceholderCategory;\n placeholders: SystemPlaceholder[];\n }>) {\n this.PlaceholderCategories = value;\n }\n \n @ViewChild('codeEditor') CodeEditor: CodeEditorComponent | null = null;\n\n /** @deprecated Use {@link CodeEditor}. */\n get codeEditor(): CodeEditorComponent | null {\n return this.CodeEditor;\n }\n /** @deprecated Use {@link CodeEditor}. */\n set codeEditor(value: CodeEditorComponent | null) {\n this.CodeEditor = value;\n }\n private isUpdatingEditorValue = false;\n private destroy$ = new Subject<void>();\n private get _metadata() { return this.ProviderToUse; }\n private activeTimeouts: number[] = [];\n \n constructor(private notificationService: MJNotificationService, private confirmService: MJConfirmService) {\n super();}\n\n async ngOnInit() {\n this.LoadContentTypes();\n this.organizePlaceholdersByCategory();\n if (this.Template) {\n await this.LoadTemplateContents();\n }\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['template']) {\n // Template input has changed, reload contents\n if (this.Template) {\n await this.LoadTemplateContents();\n } else {\n // Template cleared, reset state\n this.TemplateContents = [];\n this.SelectedContentIndex = 0;\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n this.HasUnsavedChanges = false;\n }\n }\n }\n \n private organizePlaceholdersByCategory() {\n // Group placeholders by their category\n this.PlaceholderCategories = SYSTEM_PLACEHOLDER_CATEGORIES.map(category => {\n const categoryPlaceholders = DEFAULT_SYSTEM_PLACEHOLDERS.filter(\n placeholder => placeholder.category === category.name\n );\n \n return {\n category: category,\n placeholders: categoryPlaceholders\n };\n }).filter(cat => cat.placeholders.length > 0); // Only include categories that have placeholders\n \n // Add any uncategorized placeholders to a misc category if needed\n const categorized = DEFAULT_SYSTEM_PLACEHOLDERS.filter(p => p.category);\n const uncategorized = DEFAULT_SYSTEM_PLACEHOLDERS.filter(p => !p.category);\n \n if (uncategorized.length > 0) {\n this.PlaceholderCategories.push({\n category: {\n name: 'Other',\n icon: 'fa-ellipsis-h',\n color: 'var(--mj-text-muted)'\n },\n placeholders: uncategorized\n });\n }\n \n // Set the first category as active\n if (this.PlaceholderCategories.length > 0) {\n this.ActivePlaceholderCategory = this.PlaceholderCategories[0].category.name;\n }\n }\n \n /**\n * Copies a placeholder to the clipboard\n */\n public async CopyPlaceholder(placeholderName: string): Promise<void> {\n try {\n await navigator.clipboard.writeText(`{{ ${placeholderName} }}`);\n this.notificationService.CreateSimpleNotification('Placeholder copied to clipboard!', 'success', 2000);\n } catch (error) {\n console.error('Failed to copy placeholder:', error);\n this.notificationService.CreateSimpleNotification('Failed to copy placeholder', 'error', 3000);\n }\n }\n\n /** @deprecated Use {@link CopyPlaceholder}. */\n public async copyPlaceholder(placeholderName: string): Promise<void> {\n return this.CopyPlaceholder(placeholderName);\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n \n // Clean up any active timeouts\n this.activeTimeouts.forEach(timeoutId => clearTimeout(timeoutId));\n this.activeTimeouts.length = 0;\n }\n\n ngAfterViewInit() {\n // Initial sync when view is ready\n this.syncEditorValue();\n }\n\n async LoadTemplateContents() {\n if (this.Template) {\n // Reset state first\n this.TemplateContents = [];\n this.SelectedContentIndex = 0;\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n this.HasUnsavedChanges = false;\n \n if (this.Template.IsSaved && this.Template.ID) {\n // Load existing template contents for saved templates\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJTemplateContentEntity>({\n EntityName: 'MJ: Template Contents',\n ExtraFilter: `TemplateID='${this.Template.ID}'`,\n OrderBy: 'Priority ASC, __mj_CreatedAt ASC',\n ResultType: 'entity_object'\n });\n \n this.TemplateContents = results.Results;\n } catch (error) {\n console.error('Error loading template contents:', error);\n }\n }\n \n // If we have contents but no selection, select the first one\n if (this.TemplateContents.length > 0) {\n this.SelectedContentIndex = 0;\n }\n \n // If no template contents exist (either new template or saved template with no content), \n // create a default one for single-content optimization\n if (this.TemplateContents.length === 0) {\n await this.CreateDefaultTemplateContent();\n }\n\n // Sync editor value after loading content\n this.syncEditorValue();\n this.ContentChange.emit(this.TemplateContents);\n }\n }\n\n /** @deprecated Use {@link LoadTemplateContents}. */\n async loadTemplateContents() {\n return this.LoadTemplateContents();\n }\n\n /**\n * Public method to refresh the template editor and discard unsaved changes\n * This should be called when canceling edits to restore the original state\n */\n public async RefreshAndDiscardChanges() {\n await this.LoadTemplateContents();\n }\n\n /** @deprecated Use {@link RefreshAndDiscardChanges}. */\n public async refreshAndDiscardChanges() {\n return this.RefreshAndDiscardChanges();\n }\n\n async CreateDefaultTemplateContent() {\n const defaultContent = await this._metadata.GetEntityObject<MJTemplateContentEntity>('MJ: Template Contents');\n defaultContent.TemplateID = this.Template!.ID;\n defaultContent.Priority = 1;\n defaultContent.IsActive = true;\n \n // Set default to first real content type (skip \"Select Type...\" if it exists)\n const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');\n if (validContentTypes.length > 0) {\n defaultContent.TypeID = validContentTypes[0].value;\n }\n \n this.TemplateContents = [defaultContent];\n this.SelectedContentIndex = 0;\n \n // Sync editor value after creating default content\n this.syncEditorValue();\n }\n\n /** @deprecated Use {@link CreateDefaultTemplateContent}. */\n async createDefaultTemplateContent() {\n return this.CreateDefaultTemplateContent();\n }\n\n async SelectTemplateContent(index: number, confirmSwitch: boolean = true) {\n // If we're adding new content and user clicks on existing content, ask for confirmation\n if (this.IsAddingNewContent && confirmSwitch) {\n if (!(await this.confirmService.Confirm({ title: 'Discard changes?', message: 'Switch content version and lose your unsaved changes?', detail: 'Your changes to the new content version will be lost.' }))) {\n return;\n }\n }\n \n if (index >= 0 && index < this.TemplateContents.length) {\n this.SelectedContentIndex = index;\n this.IsAddingNewContent = false;\n // Don't clear newTemplateContent to preserve the work in progress\n \n // Sync editor value when switching content\n this.syncEditorValue();\n }\n }\n\n /** @deprecated Use {@link SelectTemplateContent}. */\n async selectTemplateContent(index: number, confirmSwitch: boolean = true) {\n return this.SelectTemplateContent(index, confirmSwitch);\n }\n\n LoadContentTypes() {\n try {\n // Get content types from TemplateEngine cache\n const contentTypes = TemplateEngineBase.Instance.TemplateContentTypes;\n this.ContentTypeOptions = [\n { text: 'Select Type...', value: '' },\n ...contentTypes.map(ct => ({\n text: ct.Name,\n value: ct.ID\n }))\n ];\n } catch (error) {\n console.error('Error loading content types:', error);\n // Fallback to basic types\n this.ContentTypeOptions = [\n { text: 'Select Type...', value: '' },\n { text: 'HTML', value: 'HTML' },\n { text: 'Plain Text', value: 'Text' },\n { text: 'Markdown', value: 'Markdown' }\n ];\n }\n }\n\n /** @deprecated Use {@link LoadContentTypes}. */\n loadContentTypes() {\n return this.LoadContentTypes();\n }\n\n async AddNewTemplateContent() {\n if (!this.config.allowEdit) return;\n \n this.NewTemplateContent = await this._metadata.GetEntityObject<MJTemplateContentEntity>('MJ: Template Contents');\n this.NewTemplateContent.TemplateID = this.Template!.ID;\n this.NewTemplateContent.Priority = this.TemplateContents.length + 1;\n this.NewTemplateContent.IsActive = true;\n \n // Set default to first real content type (skip \"Select Type...\" if it exists)\n const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');\n if (validContentTypes.length > 0) {\n this.NewTemplateContent.TypeID = validContentTypes[0].value;\n }\n this.NewTemplateContent.TemplateText = '';\n \n // Add immediately to the array\n this.TemplateContents.push(this.NewTemplateContent);\n this.SelectedContentIndex = this.TemplateContents.length - 1;\n this.IsAddingNewContent = true;\n \n // Sync editor value when adding new content\n this.syncEditorValue();\n }\n\n /** @deprecated Use {@link AddNewTemplateContent}. */\n async addNewTemplateContent() {\n return this.AddNewTemplateContent();\n }\n\n async DeleteTemplateContent(index: number) {\n if (!this.config.allowEdit || index < 0 || index >= this.TemplateContents.length) return;\n \n const contentToDelete = this.TemplateContents[index];\n \n // Check if the entity is actually saved, not just if it has an ID\n if (contentToDelete.IsSaved) {\n try {\n const result = await contentToDelete.Delete();\n if (result) {\n this.TemplateContents.splice(index, 1);\n \n // Adjust selected index if necessary\n if (this.SelectedContentIndex >= this.TemplateContents.length) {\n this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);\n }\n \n // If no contents remain, create a default one\n if (this.TemplateContents.length === 0) {\n await this.CreateDefaultTemplateContent();\n }\n \n this.ContentChange.emit(this.TemplateContents);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(`Failed to delete template content. ${contentToDelete.LatestResult?.Message}`, 'error');\n }\n } catch (error) {\n console.error('Error deleting template content:', error);\n MJNotificationService.Instance.CreateSimpleNotification(`Error deleting template content: ${error}`, 'error');\n }\n } else {\n // Not saved yet, just remove from array\n this.TemplateContents.splice(index, 1);\n if (this.SelectedContentIndex >= this.TemplateContents.length) {\n this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);\n }\n \n // Reset adding new content state if we're deleting the new content\n if (this.IsAddingNewContent && index === this.TemplateContents.length) {\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n }\n \n this.ContentChange.emit(this.TemplateContents);\n }\n }\n\n /** @deprecated Use {@link DeleteTemplateContent}. */\n async deleteTemplateContent(index: number) {\n return this.DeleteTemplateContent(index);\n }\n\n get CurrentTemplateContent(): MJTemplateContentEntity | null {\n if (this.IsAddingNewContent) {\n return this.NewTemplateContent;\n }\n return this.TemplateContents[this.SelectedContentIndex] || null;\n }\n\n /** @deprecated Use {@link CurrentTemplateContent}. */\n get currentTemplateContent(): MJTemplateContentEntity | null {\n return this.CurrentTemplateContent;\n }\n\n get HasMultipleContents(): boolean {\n return this.TemplateContents.length > 1 || this.IsAddingNewContent;\n }\n\n /** @deprecated Use {@link HasMultipleContents}. */\n get hasMultipleContents(): boolean {\n return this.HasMultipleContents;\n }\n\n OnContentTypeChange() {\n // Content type changes just modify the current content, no new record creation\n this.updateUnsavedChangesFlag();\n }\n\n /** @deprecated Use {@link OnContentTypeChange}. */\n onContentTypeChange() {\n return this.OnContentTypeChange();\n }\n\n OnContentChange() {\n this.updateUnsavedChangesFlag();\n }\n\n /** @deprecated Use {@link OnContentChange}. */\n onContentChange() {\n return this.OnContentChange();\n }\n\n /**\n * Updates the hasUnsavedChanges flag based on entity dirty states\n */\n private updateUnsavedChangesFlag() {\n this.HasUnsavedChanges = this.TemplateContents.some(content => content.Dirty) || \n this.IsAddingNewContent;\n }\n\n OnTemplateTextChange(event: any) {\n if (this.isUpdatingEditorValue) {\n // Ignore change events when we're programmatically updating the editor\n return;\n }\n \n if (this.CurrentTemplateContent) {\n // Extract value from event - might be event.target.value or just event depending on component\n const value = typeof event === 'string' ? event : (event.target?.value || event);\n this.CurrentTemplateContent.TemplateText = value;\n this.updateUnsavedChangesFlag();\n }\n }\n\n /** @deprecated Use {@link OnTemplateTextChange}. */\n onTemplateTextChange(event: any) {\n return this.OnTemplateTextChange(event);\n }\n\n /**\n * Helper method to track setTimeout calls for cleanup\n */\n private setTrackedTimeout(callback: () => void, delay: number): number {\n const timeoutId = setTimeout(() => {\n // Remove from tracking when it executes\n const index = this.activeTimeouts.indexOf(timeoutId);\n if (index > -1) {\n this.activeTimeouts.splice(index, 1);\n }\n callback();\n }, delay) as any as number;\n this.activeTimeouts.push(timeoutId);\n return timeoutId;\n }\n\n /**\n * Manually sync the editor value without triggering change events\n */\n private syncEditorValue() {\n // Use Promise.resolve() to wait for the next microtask after any pending changes\n Promise.resolve().then(() => {\n // Then tracked setTimeout for the next macrotask to ensure DOM is updated\n this.setTrackedTimeout(() => {\n if (!this.CodeEditor) {\n return;\n }\n \n this.isUpdatingEditorValue = true;\n const newValue = this.CurrentTemplateContent?.TemplateText || '';\n \n // Use the setValue method from mj-code-editor component\n this.CodeEditor.setValue(newValue); \n this.isUpdatingEditorValue = false;\n }, 0);\n });\n }\n\n async SaveTemplateContents(): Promise<boolean> {\n if (!this.config.allowEdit) return false;\n\n try {\n // Ensure FK is set on all contents, then persist the dirty/new ones atomically\n for (const content of this.TemplateContents) {\n content.TemplateID = this.Template!.ID;\n }\n const toSave = this.TemplateContents.filter(c => c.Dirty || !c.ID);\n\n if (toSave.length > 0) {\n const tg = await this._metadata.CreateTransactionGroup();\n for (const content of toSave) {\n content.TransactionGroup = tg;\n await content.Save();\n }\n const success = await tg.Submit();\n if (!success) {\n console.error('Failed to save template contents transaction');\n return false;\n }\n }\n\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n this.updateUnsavedChangesFlag();\n this.ContentChange.emit(this.TemplateContents);\n return true;\n } catch (error) {\n console.error('Error saving template contents:', error);\n return false;\n }\n }\n\n /** @deprecated Use {@link SaveTemplateContents}. */\n async saveTemplateContents(): Promise<boolean> {\n return this.SaveTemplateContents();\n }\n\n GetContentTypeDisplayText(typeId: string): string {\n if (!typeId) return '-';\n const option = this.ContentTypeOptions.find(opt => opt.value === typeId);\n return option ? option.text : typeId;\n }\n\n /** @deprecated Use {@link GetContentTypeDisplayText}. */\n getContentTypeDisplayText(typeId: string): string {\n return this.GetContentTypeDisplayText(typeId);\n }\n\n GetEditorLanguage(): string {\n if (!this.CurrentTemplateContent?.TypeID) {\n return 'jinja2'; // default to jinja2 for template syntax (compatible with Nunjucks)\n }\n\n const contentType = this.CurrentTemplateContent.TypeID.toLowerCase();\n \n // Map content types to CodeMirror language modes\n switch (contentType) {\n case 'html':\n return 'jinja2'; // Use jinja2 for HTML templates to get template syntax highlighting\n case 'markdown':\n case 'md':\n return 'markdown';\n case 'javascript':\n case 'js':\n return 'javascript';\n case 'css':\n return 'css';\n case 'json':\n return 'json';\n case 'xml':\n return 'xml';\n case 'sql':\n return 'sql';\n case 'text':\n case 'plain':\n default:\n return 'jinja2'; // Default to jinja2 since templates often contain template syntax\n }\n }\n\n /** @deprecated Use {@link GetEditorLanguage}. */\n getEditorLanguage(): string {\n return this.GetEditorLanguage();\n }\n\n /**\n * Test run the current template using the parameter dialog\n */\n async OnRunTemplate() {\n if (!this.Template?.IsSaved || !this.CurrentTemplateContent) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the template before running it.', \n 'warning'\n );\n return;\n }\n\n // Save any unsaved changes first\n if (this.HasUnsavedChanges) {\n const saveResult = await this.SaveTemplateContents();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save template changes.', \n 'error'\n );\n return;\n }\n }\n\n // Emit the run template event\n this.RunTemplate.emit(this.Template);\n }\n\n /** @deprecated Use {@link OnRunTemplate}. */\n async onRunTemplate() {\n return this.OnRunTemplate();\n }\n\n GetContentTypeOptionsForContent(): Array<{text: string, value: string}> {\n // Always exclude \"Select Type...\" option for all content\n return this.ContentTypeOptions.filter(option => option.value !== '');\n }\n\n /** @deprecated Use {@link GetContentTypeOptionsForContent}. */\n getContentTypeOptionsForContent(): Array<{text: string, value: string}> {\n return this.GetContentTypeOptionsForContent();\n }\n}","@if (template) {\n <div class=\"template-editor\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Content Versions List/Tabs -->\n @if (templateContents.length > 0) {\n <div class=\"content-versions-tabs\">\n <div class=\"content-tabs\">\n @for (content of templateContents; track content.ID || $index; let i = $index) {\n <div class=\"content-version-tab\"\n [class.active]=\"selectedContentIndex === i && !isAddingNewContent\"\n (click)=\"selectTemplateContent(i, false)\">\n <div style=\"flex: 1;\">\n <div class=\"tab-label\">\n {{ content.Type || 'Version ' + (i + 1) }}\n </div>\n <div class=\"tab-meta\">\n P:{{ content.Priority }}\n @if (!content.IsActive) {\n • <span class=\"inactive-label\">Inactive</span>\n }\n </div>\n </div>\n @if (templateContents.length > 1 && config.allowEdit) {\n <button type=\"button\"\n (click)=\"deleteTemplateContent(i); $event.stopPropagation()\"\n class=\"delete-btn\"\n title=\"Delete this content version\">\n <i class=\"fa-solid fa-trash fa-xs\"></i>\n </button>\n }\n </div>\n }\n @if (isAddingNewContent) {\n <div class=\"content-version-tab adding-new\">\n <i class=\"fa-solid fa-plus text-success\"></i>\n <span class=\"new-label\">New</span>\n </div>\n }\n <!-- Add New Content (Edit Mode Only) -->\n @if (config.allowEdit && !isAddingNewContent) {\n <div class=\"content-version-tab add-new\"\n (click)=\"addNewTemplateContent()\"\n title=\"Add new template content\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New</span>\n </div>\n }\n </div>\n </div>\n }\n <!-- Content Editor -->\n @if (currentTemplateContent) {\n <div class=\"content-editor-container\">\n <!-- Content Metadata Bar -->\n <div class=\"content-metadata-bar\">\n <div class=\"metadata-grid\">\n <div class=\"form-group\">\n <label for=\"contentType\" class=\"form-label\">\n <i class=\"fa-solid fa-tag\"></i> Content Type\n </label>\n @if (config.allowEdit) {\n <mj-dropdown [(ngModel)]=\"currentTemplateContent.TypeID\"\n name=\"contentType\"\n [Data]=\"getContentTypeOptionsForContent()\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n (ValueChange)=\"onContentTypeChange()\">\n </mj-dropdown>\n } @else {\n <div class=\"form-control-plaintext\">\n {{ getContentTypeDisplayText(currentTemplateContent.TypeID) }}\n </div>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"priority\" class=\"form-label\">\n <i class=\"fa-solid fa-sort-numeric-up\"></i> Priority\n </label>\n @if (config.allowEdit) {\n <mj-numeric-input [(ngModel)]=\"currentTemplateContent.Priority\"\n name=\"priority\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\">\n </mj-numeric-input>\n } @else {\n <div class=\"form-control-plaintext\">\n {{ currentTemplateContent.Priority || '-' }}\n </div>\n }\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-toggle-on\"></i> Status\n </label>\n @if (config.allowEdit) {\n <div class=\"form-check\">\n <input type=\"checkbox\"\n id=\"isActive\"\n class=\"form-check-input\"\n [(ngModel)]=\"currentTemplateContent.IsActive\"\n name=\"isActive\">\n <label class=\"form-check-label\" for=\"isActive\">\n Active\n </label>\n </div>\n } @else {\n <div class=\"form-control-plaintext\">\n @if (currentTemplateContent.IsActive) {\n <span class=\"badge-success\">\n <i class=\"fa-solid fa-check-circle\"></i> Active\n </span>\n } @else {\n <span class=\"badge-secondary\">\n <i class=\"fa-solid fa-pause-circle\"></i> Inactive\n </span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Content Text Editor -->\n <div class=\"content-text-editor\">\n <div class=\"editor-header\">\n <label for=\"templateContent\" class=\"editor-label\">\n <i class=\"fa-solid fa-code\"></i> Template Content\n <span class=\"content-type-badge\"\n [class.new]=\"!currentTemplateContent.ID\"\n [class.existing]=\"!!currentTemplateContent.ID\">\n @if (!currentTemplateContent.ID) {\n New\n } @else {\n {{ getContentTypeDisplayText(currentTemplateContent.TypeID) }}\n }\n </span>\n </label>\n <div class=\"editor-actions\">\n @if (!isAddingNewContent && hasUnsavedChanges) {\n <span class=\"unsaved-indicator\">\n <i class=\"fa-solid fa-circle\"></i>\n Unsaved changes\n </span>\n }\n @if (template.IsSaved && currentTemplateContent && config.showRunButton) {\n <button type=\"button\"\n class=\"run-btn\"\n [disabled]=\"isRunningTemplate\"\n (click)=\"onRunTemplate()\"\n title=\"Test run this template\">\n @if (isRunningTemplate) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Run\n }\n </button>\n }\n </div>\n </div>\n <mj-code-editor\n #codeEditor\n (change)=\"onTemplateTextChange($event)\"\n [readonly]=\"!config.allowEdit\"\n [language]=\"getEditorLanguage()\"\n [languages]=\"supportedLanguages\"\n class=\"code-editor-wrapper\">\n </mj-code-editor>\n <!-- Template Help Section with Tabs -->\n @if (!config.compactMode) {\n <div class=\"template-help-section\">\n <!-- Tab Navigation -->\n <div class=\"help-tabs\">\n <button type=\"button\"\n class=\"help-tab\"\n [class.active]=\"activeHelpTab === 'syntax'\"\n (click)=\"activeHelpTab = 'syntax'\">\n <i class=\"fa-solid fa-code\"></i> Template Syntax\n </button>\n <button type=\"button\"\n class=\"help-tab\"\n [class.active]=\"activeHelpTab === 'placeholders'\"\n (click)=\"activeHelpTab = 'placeholders'\">\n <i class=\"fa-solid fa-at\"></i> System Placeholders\n </button>\n </div>\n <!-- Tab Content -->\n <div class=\"help-content\">\n <!-- Template Syntax Tab -->\n @if (activeHelpTab === 'syntax') {\n <div class=\"syntax-help\">\n <div class=\"section-title\">\n <i class=\"fa-solid fa-lightbulb\"></i> Template Syntax Quick Reference\n </div>\n <div class=\"syntax-grid\">\n <div>\n <div class=\"syntax-item\">\n <strong>Parameters:</strong><br>\n <code>{{'{{'}} paramName {{'}}'}}</code>\n </div>\n <div>\n <strong>Template Includes:</strong><br>\n <code>{{'{% template \"TemplateName\" %}'}}</code>\n </div>\n </div>\n <div>\n <div class=\"syntax-item\">\n <strong>Conditionals:</strong><br>\n <code>{{'{% if condition %}'}} ... {{'{% endif %}'}}</code>\n </div>\n <div>\n <strong>Loops:</strong><br>\n <code>{{'{% for item in items %}'}} ... {{'{% endfor %}'}}</code>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- System Placeholders Tab -->\n @if (activeHelpTab === 'placeholders') {\n <div class=\"placeholders-help\">\n <div class=\"section-title\">\n <i class=\"fa-solid fa-at\"></i> System Placeholders Reference\n </div>\n <p class=\"placeholders-description\">\n System placeholders are automatically available in all AI prompt templates. Simply use them in your template text and they will be replaced with their current values at execution time.\n </p>\n <!-- Category Sub-tabs -->\n <div class=\"category-tabs\">\n @for (categoryGroup of placeholderCategories; track categoryGroup.category.name) {\n <button type=\"button\"\n class=\"category-tab\"\n [class.active]=\"activePlaceholderCategory === categoryGroup.category.name\"\n (click)=\"activePlaceholderCategory = categoryGroup.category.name\">\n <i [class]=\"'fa-solid ' + categoryGroup.category.icon\" style=\"font-size: 0.9em;\"></i>\n {{ categoryGroup.category.name }}\n <span class=\"tab-badge\">\n {{ categoryGroup.placeholders.length }}\n </span>\n </button>\n }\n </div>\n <!-- Active Category Content -->\n <div class=\"placeholder-content\">\n @for (categoryGroup of placeholderCategories; track categoryGroup.category.name) {\n @if (activePlaceholderCategory === categoryGroup.category.name) {\n <div class=\"category-header\">\n <i [class]=\"'fa-solid ' + categoryGroup.category.icon\"\n [style.color]=\"categoryGroup.category.color\"></i>\n <h5>{{ categoryGroup.category.name }}</h5>\n </div>\n <div class=\"placeholder-grid\">\n @for (placeholder of categoryGroup.placeholders; track placeholder.name) {\n <div class=\"placeholder-item\">\n <div class=\"placeholder-item-inner\">\n <div>\n <div class=\"placeholder-name-row\">\n <code class=\"placeholder-code\">{{'{{'}} {{ placeholder.name }} {{'}}'}}</code>\n <button type=\"button\"\n class=\"copy-btn\"\n (click)=\"copyPlaceholder(placeholder.name)\"\n title=\"Copy placeholder to clipboard\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n @if (placeholder.description) {\n <div class=\"placeholder-description\">{{ placeholder.description }}</div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n <!-- Usage Example -->\n <div class=\"usage-example\">\n <div class=\"usage-example-inner\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <div class=\"usage-example-text\">\n <strong>Usage Example:</strong> To use a system placeholder in your template, simply include it in double curly braces.\n For example: <code>\"Today is {{'{{'}} _CURRENT_DATE {{'}}'}} and the current user is {{'{{'}} _USER_NAME {{'}}'}}\"</code>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <!-- No Content State -->\n <div class=\"no-content-state\">\n <i class=\"fa-solid fa-file-plus\"></i>\n <h5>No Template Content</h5>\n <p>Create your first template content version to get started.</p>\n @if (config.allowEdit) {\n <button type=\"button\"\n (click)=\"addNewTemplateContent()\"\n class=\"btn btn-primary\">\n <i class=\"fa-solid fa-plus\"></i> Create First Content Version\n </button>\n }\n </div>\n }\n </div>\n}\n"]}
1
+ {"version":3,"file":"template-editor.component.js","sourceRoot":"","sources":["../../../../src/lib/shared/components/template-editor.component.ts","../../../../src/lib/shared/components/template-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, ViewChild, AfterViewInit, ElementRef, inject } from '@angular/core';\nimport { MJTemplateEntity, MJTemplateContentEntity } from '@memberjunction/core-entities';\nimport { Metadata, RunView } from '@memberjunction/core';\nimport { MJEvent, MJEventType, MJGlobal } from '@memberjunction/global';\nimport { MJNotificationService } from '@memberjunction/ng-notifications';\nimport { IsDescendantElement } from '@memberjunction/ng-shared-generic';\nimport { MJConfirmService } from '@memberjunction/ng-ui-components';\nimport { TemplateEngineBase } from '@memberjunction/templates-base-types';\nimport { LanguageDescription } from '@codemirror/language';\nimport { languages } from '@codemirror/language-data';\nimport { CodeEditorComponent } from '@memberjunction/ng-code-editor';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DEFAULT_SYSTEM_PLACEHOLDERS, SystemPlaceholder, SYSTEM_PLACEHOLDER_CATEGORIES, SystemPlaceholderCategory } from '@memberjunction/ai-core-plus';\n\nimport { BaseAngularComponent, BaseFormComponentEvent, BaseFormComponentEventCodes, PendingRecordItem } from '@memberjunction/ng-base-types';\nexport interface TemplateEditorConfig {\n allowEdit?: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n showRunButton?: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n compactMode?: boolean; // case-violation-ok-legacy-back-compat: the type is named in an exported signature, so consumers build object literals against it; an interface has no runtime carrier for a stub\n}\n\n@Component({\n standalone: false,\n selector: 'mj-template-editor',\n templateUrl: './template-editor.component.html',\n styleUrls: ['./template-editor.component.css']\n})\nexport class TemplateEditorComponent extends BaseAngularComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n @Input() Template: MJTemplateEntity | null = null;\n\n /** @deprecated Use {@link Template}. */\n @Input() set template(value: MJTemplateEntity | null) {\n this.Template = value;\n }\n /** @deprecated Use {@link Template}. */\n get template(): MJTemplateEntity | null {\n return this.Template;\n }\n @Input() config: TemplateEditorConfig = {\n allowEdit: true,\n showRunButton: false,\n compactMode: false\n };\n \n @Output() ContentChange = new EventEmitter<MJTemplateContentEntity[]>();\n\n /**\n * @deprecated Use {@link ContentChange}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (contentChange) keeps working. Must stay AFTER ContentChange: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() contentChange = this.ContentChange;\n @Output() RunTemplate = new EventEmitter<MJTemplateEntity>();\n\n /**\n * @deprecated Use {@link RunTemplate}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (runTemplate) keeps working. Must stay AFTER RunTemplate: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() runTemplate = this.RunTemplate;\n \n public TemplateContents: MJTemplateContentEntity[] = [];\n\n /** @deprecated Use {@link TemplateContents}. */\n public get templateContents(): MJTemplateContentEntity[] {\n return this.TemplateContents;\n }\n /** @deprecated Use {@link TemplateContents}. */\n public set templateContents(value: MJTemplateContentEntity[]) {\n this.TemplateContents = value;\n }\n public SelectedContentIndex: number = 0;\n\n /** @deprecated Use {@link SelectedContentIndex}. */\n public get selectedContentIndex(): number {\n return this.SelectedContentIndex;\n }\n /** @deprecated Use {@link SelectedContentIndex}. */\n public set selectedContentIndex(value: number) {\n this.SelectedContentIndex = value;\n }\n public IsAddingNewContent: boolean = false;\n\n /** @deprecated Use {@link IsAddingNewContent}. */\n public get isAddingNewContent(): boolean {\n return this.IsAddingNewContent;\n }\n /** @deprecated Use {@link IsAddingNewContent}. */\n public set isAddingNewContent(value: boolean) {\n this.IsAddingNewContent = value;\n }\n public NewTemplateContent: MJTemplateContentEntity | null = null;\n\n /** @deprecated Use {@link NewTemplateContent}. */\n public get newTemplateContent(): MJTemplateContentEntity | null {\n return this.NewTemplateContent;\n }\n /** @deprecated Use {@link NewTemplateContent}. */\n public set newTemplateContent(value: MJTemplateContentEntity | null) {\n this.NewTemplateContent = value;\n }\n public HasUnsavedChanges: boolean = false;\n\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public get hasUnsavedChanges(): boolean {\n return this.HasUnsavedChanges;\n }\n /** @deprecated Use {@link HasUnsavedChanges}. */\n public set hasUnsavedChanges(value: boolean) {\n this.HasUnsavedChanges = value;\n }\n public ContentTypeOptions: Array<{text: string, value: string}> = [];\n\n /** @deprecated Use {@link ContentTypeOptions}. */\n public get contentTypeOptions(): Array<{text: string, value: string}> {\n return this.ContentTypeOptions;\n }\n /** @deprecated Use {@link ContentTypeOptions}. */\n public set contentTypeOptions(value: Array<{text: string, value: string}>) {\n this.ContentTypeOptions = value;\n }\n public SupportedLanguages: LanguageDescription[] = languages;\n\n /** @deprecated Use {@link SupportedLanguages}. */\n public get supportedLanguages(): LanguageDescription[] {\n return this.SupportedLanguages;\n }\n /** @deprecated Use {@link SupportedLanguages}. */\n public set supportedLanguages(value: LanguageDescription[]) {\n this.SupportedLanguages = value;\n }\n public IsRunningTemplate = false;\n\n /** @deprecated Use {@link IsRunningTemplate}. */\n public get isRunningTemplate() {\n return this.IsRunningTemplate;\n }\n /** @deprecated Use {@link IsRunningTemplate}. */\n public set isRunningTemplate(value) {\n this.IsRunningTemplate = value;\n }\n public ActiveHelpTab: 'syntax' | 'placeholders' = 'syntax';\n\n /** @deprecated Use {@link ActiveHelpTab}. */\n public get activeHelpTab(): 'syntax' | 'placeholders' {\n return this.ActiveHelpTab;\n }\n /** @deprecated Use {@link ActiveHelpTab}. */\n public set activeHelpTab(value: 'syntax' | 'placeholders') {\n this.ActiveHelpTab = value;\n }\n public ActivePlaceholderCategory: string = '';\n\n /** @deprecated Use {@link ActivePlaceholderCategory}. */\n public get activePlaceholderCategory(): string {\n return this.ActivePlaceholderCategory;\n }\n /** @deprecated Use {@link ActivePlaceholderCategory}. */\n public set activePlaceholderCategory(value: string) {\n this.ActivePlaceholderCategory = value;\n }\n \n // System placeholders organized by category\n public PlaceholderCategories: Array<{\n category: SystemPlaceholderCategory;\n placeholders: SystemPlaceholder[];\n }> = [];\n\n /** @deprecated Use {@link PlaceholderCategories}. */\n public get placeholderCategories(): Array<{\n category: SystemPlaceholderCategory;\n placeholders: SystemPlaceholder[];\n }> {\n return this.PlaceholderCategories;\n }\n /** @deprecated Use {@link PlaceholderCategories}. */\n public set placeholderCategories(value: Array<{\n category: SystemPlaceholderCategory;\n placeholders: SystemPlaceholder[];\n }>) {\n this.PlaceholderCategories = value;\n }\n \n @ViewChild('codeEditor') CodeEditor: CodeEditorComponent | null = null;\n\n /** @deprecated Use {@link CodeEditor}. */\n get codeEditor(): CodeEditorComponent | null {\n return this.CodeEditor;\n }\n /** @deprecated Use {@link CodeEditor}. */\n set codeEditor(value: CodeEditorComponent | null) {\n this.CodeEditor = value;\n }\n private isUpdatingEditorValue = false;\n private destroy$ = new Subject<void>();\n private get _metadata() { return this.ProviderToUse; }\n private activeTimeouts: number[] = [];\n private elementRef = inject(ElementRef);\n\n constructor(private notificationService: MJNotificationService, private confirmService: MJConfirmService) {\n super();}\n\n async ngOnInit() {\n this.LoadContentTypes();\n this.organizePlaceholdersByCategory();\n this.listenForHostFormEvents();\n if (this.Template) {\n await this.LoadTemplateContents();\n }\n }\n\n /**\n * A host form that folds this editor's contents into its pending records (see GetPendingChanges)\n * also reverts them when the user discards the edit: `BaseFormComponent.CancelEdit()` calls\n * `Revert()` on every pending record and broadcasts REVERT_PENDING_CHANGES. The entities roll back\n * on their own, but this editor's rows, CodeMirror's text and the dirty flag would not know, so\n * the screen would keep showing discarded text and the next save would fail on it. Reload from\n * the saved state when the event comes from a form this editor sits inside.\n */\n private listenForHostFormEvents(): void {\n MJGlobal.Instance.GetEventListener(false).pipe(takeUntil(this.destroy$)).subscribe((e: MJEvent) => {\n if (e.event !== MJEventType.ComponentEvent || e.eventCode !== BaseFormComponentEventCodes.BASE_CODE) {\n return;\n }\n const formEvent = e.args as BaseFormComponentEvent;\n if (formEvent.subEventCode !== BaseFormComponentEventCodes.REVERT_PENDING_CHANGES) {\n return;\n }\n if (IsDescendantElement(formEvent.elementRef, this.elementRef)) {\n void this.RefreshAndDiscardChanges();\n }\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes['template']) {\n // Template input has changed, reload contents\n if (this.Template) {\n await this.LoadTemplateContents();\n } else {\n // Template cleared, reset state\n this.TemplateContents = [];\n this.SelectedContentIndex = 0;\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n this.HasUnsavedChanges = false;\n }\n }\n }\n \n private organizePlaceholdersByCategory() {\n // Group placeholders by their category\n this.PlaceholderCategories = SYSTEM_PLACEHOLDER_CATEGORIES.map(category => {\n const categoryPlaceholders = DEFAULT_SYSTEM_PLACEHOLDERS.filter(\n placeholder => placeholder.category === category.name\n );\n \n return {\n category: category,\n placeholders: categoryPlaceholders\n };\n }).filter(cat => cat.placeholders.length > 0); // Only include categories that have placeholders\n \n // Add any uncategorized placeholders to a misc category if needed\n const categorized = DEFAULT_SYSTEM_PLACEHOLDERS.filter(p => p.category);\n const uncategorized = DEFAULT_SYSTEM_PLACEHOLDERS.filter(p => !p.category);\n \n if (uncategorized.length > 0) {\n this.PlaceholderCategories.push({\n category: {\n name: 'Other',\n icon: 'fa-ellipsis-h',\n color: 'var(--mj-text-muted)'\n },\n placeholders: uncategorized\n });\n }\n \n // Set the first category as active\n if (this.PlaceholderCategories.length > 0) {\n this.ActivePlaceholderCategory = this.PlaceholderCategories[0].category.name;\n }\n }\n \n /**\n * Copies a placeholder to the clipboard\n */\n public async CopyPlaceholder(placeholderName: string): Promise<void> {\n try {\n await navigator.clipboard.writeText(`{{ ${placeholderName} }}`);\n this.notificationService.CreateSimpleNotification('Placeholder copied to clipboard!', 'success', 2000);\n } catch (error) {\n console.error('Failed to copy placeholder:', error);\n this.notificationService.CreateSimpleNotification('Failed to copy placeholder', 'error', 3000);\n }\n }\n\n /** @deprecated Use {@link CopyPlaceholder}. */\n public async copyPlaceholder(placeholderName: string): Promise<void> {\n return this.CopyPlaceholder(placeholderName);\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n \n // Clean up any active timeouts\n this.activeTimeouts.forEach(timeoutId => clearTimeout(timeoutId));\n this.activeTimeouts.length = 0;\n }\n\n ngAfterViewInit() {\n // Initial sync when view is ready\n this.syncEditorValue();\n }\n\n async LoadTemplateContents() {\n if (this.Template) {\n // Reset state first\n this.TemplateContents = [];\n this.SelectedContentIndex = 0;\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n this.HasUnsavedChanges = false;\n \n if (this.Template.IsSaved && this.Template.ID) {\n // Load existing template contents for saved templates\n try {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const results = await rv.RunView<MJTemplateContentEntity>({\n EntityName: 'MJ: Template Contents',\n ExtraFilter: `TemplateID='${this.Template.ID}'`,\n OrderBy: 'Priority ASC, __mj_CreatedAt ASC',\n ResultType: 'entity_object'\n });\n \n this.TemplateContents = results.Results;\n } catch (error) {\n console.error('Error loading template contents:', error);\n }\n }\n \n // If we have contents but no selection, select the first one\n if (this.TemplateContents.length > 0) {\n this.SelectedContentIndex = 0;\n }\n \n // If no template contents exist (either new template or saved template with no content), \n // create a default one for single-content optimization\n if (this.TemplateContents.length === 0) {\n await this.CreateDefaultTemplateContent();\n }\n\n // Sync editor value after loading content\n this.syncEditorValue();\n this.ContentChange.emit(this.TemplateContents);\n }\n }\n\n /** @deprecated Use {@link LoadTemplateContents}. */\n async loadTemplateContents() {\n return this.LoadTemplateContents();\n }\n\n /**\n * Public method to refresh the template editor and discard unsaved changes\n * This should be called when canceling edits to restore the original state\n */\n public async RefreshAndDiscardChanges() {\n await this.LoadTemplateContents();\n }\n\n /** @deprecated Use {@link RefreshAndDiscardChanges}. */\n public async refreshAndDiscardChanges() {\n return this.RefreshAndDiscardChanges();\n }\n\n async CreateDefaultTemplateContent() {\n const defaultContent = await this._metadata.GetEntityObject<MJTemplateContentEntity>('MJ: Template Contents');\n defaultContent.TemplateID = this.Template!.ID;\n defaultContent.Priority = 1;\n defaultContent.IsActive = true;\n \n // Set default to first real content type (skip \"Select Type...\" if it exists)\n const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');\n if (validContentTypes.length > 0) {\n defaultContent.TypeID = validContentTypes[0].value;\n }\n \n this.TemplateContents = [defaultContent];\n this.SelectedContentIndex = 0;\n \n // Sync editor value after creating default content\n this.syncEditorValue();\n }\n\n /** @deprecated Use {@link CreateDefaultTemplateContent}. */\n async createDefaultTemplateContent() {\n return this.CreateDefaultTemplateContent();\n }\n\n async SelectTemplateContent(index: number, confirmSwitch: boolean = true) {\n // If we're adding new content and user clicks on existing content, ask for confirmation\n if (this.IsAddingNewContent && confirmSwitch) {\n if (!(await this.confirmService.Confirm({ title: 'Discard changes?', message: 'Switch content version and lose your unsaved changes?', detail: 'Your changes to the new content version will be lost.' }))) {\n return;\n }\n }\n \n if (index >= 0 && index < this.TemplateContents.length) {\n this.SelectedContentIndex = index;\n this.IsAddingNewContent = false;\n // Don't clear newTemplateContent to preserve the work in progress\n \n // Sync editor value when switching content\n this.syncEditorValue();\n }\n }\n\n /** @deprecated Use {@link SelectTemplateContent}. */\n async selectTemplateContent(index: number, confirmSwitch: boolean = true) {\n return this.SelectTemplateContent(index, confirmSwitch);\n }\n\n LoadContentTypes() {\n try {\n // Get content types from TemplateEngine cache\n const contentTypes = TemplateEngineBase.Instance.TemplateContentTypes;\n this.ContentTypeOptions = [\n { text: 'Select Type...', value: '' },\n ...contentTypes.map(ct => ({\n text: ct.Name,\n value: ct.ID\n }))\n ];\n } catch (error) {\n console.error('Error loading content types:', error);\n // Fallback to basic types\n this.ContentTypeOptions = [\n { text: 'Select Type...', value: '' },\n { text: 'HTML', value: 'HTML' },\n { text: 'Plain Text', value: 'Text' },\n { text: 'Markdown', value: 'Markdown' }\n ];\n }\n }\n\n /** @deprecated Use {@link LoadContentTypes}. */\n loadContentTypes() {\n return this.LoadContentTypes();\n }\n\n async AddNewTemplateContent() {\n if (!this.config.allowEdit) return;\n \n this.NewTemplateContent = await this._metadata.GetEntityObject<MJTemplateContentEntity>('MJ: Template Contents');\n this.NewTemplateContent.TemplateID = this.Template!.ID;\n this.NewTemplateContent.Priority = this.TemplateContents.length + 1;\n this.NewTemplateContent.IsActive = true;\n \n // Set default to first real content type (skip \"Select Type...\" if it exists)\n const validContentTypes = this.ContentTypeOptions.filter(option => option.value !== '');\n if (validContentTypes.length > 0) {\n this.NewTemplateContent.TypeID = validContentTypes[0].value;\n }\n this.NewTemplateContent.TemplateText = '';\n \n // Add immediately to the array\n this.TemplateContents.push(this.NewTemplateContent);\n this.SelectedContentIndex = this.TemplateContents.length - 1;\n this.IsAddingNewContent = true;\n \n // Sync editor value when adding new content\n this.syncEditorValue();\n }\n\n /** @deprecated Use {@link AddNewTemplateContent}. */\n async addNewTemplateContent() {\n return this.AddNewTemplateContent();\n }\n\n async DeleteTemplateContent(index: number) {\n if (!this.config.allowEdit || index < 0 || index >= this.TemplateContents.length) return;\n \n const contentToDelete = this.TemplateContents[index];\n \n // Check if the entity is actually saved, not just if it has an ID\n if (contentToDelete.IsSaved) {\n try {\n const result = await contentToDelete.Delete();\n if (result) {\n this.TemplateContents.splice(index, 1);\n \n // Adjust selected index if necessary\n if (this.SelectedContentIndex >= this.TemplateContents.length) {\n this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);\n }\n \n // If no contents remain, create a default one\n if (this.TemplateContents.length === 0) {\n await this.CreateDefaultTemplateContent();\n }\n \n this.ContentChange.emit(this.TemplateContents);\n } else {\n MJNotificationService.Instance.CreateSimpleNotification(`Failed to delete template content. ${contentToDelete.LatestResult?.Message}`, 'error');\n }\n } catch (error) {\n console.error('Error deleting template content:', error);\n MJNotificationService.Instance.CreateSimpleNotification(`Error deleting template content: ${error}`, 'error');\n }\n } else {\n // Not saved yet, just remove from array\n this.TemplateContents.splice(index, 1);\n if (this.SelectedContentIndex >= this.TemplateContents.length) {\n this.SelectedContentIndex = Math.max(0, this.TemplateContents.length - 1);\n }\n \n // Reset adding new content state if we're deleting the new content\n if (this.IsAddingNewContent && index === this.TemplateContents.length) {\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n }\n \n this.ContentChange.emit(this.TemplateContents);\n }\n }\n\n /** @deprecated Use {@link DeleteTemplateContent}. */\n async deleteTemplateContent(index: number) {\n return this.DeleteTemplateContent(index);\n }\n\n get CurrentTemplateContent(): MJTemplateContentEntity | null {\n if (this.IsAddingNewContent) {\n return this.NewTemplateContent;\n }\n return this.TemplateContents[this.SelectedContentIndex] || null;\n }\n\n /** @deprecated Use {@link CurrentTemplateContent}. */\n get currentTemplateContent(): MJTemplateContentEntity | null {\n return this.CurrentTemplateContent;\n }\n\n get HasMultipleContents(): boolean {\n return this.TemplateContents.length > 1 || this.IsAddingNewContent;\n }\n\n /** @deprecated Use {@link HasMultipleContents}. */\n get hasMultipleContents(): boolean {\n return this.HasMultipleContents;\n }\n\n OnContentTypeChange() {\n // Content type changes just modify the current content, no new record creation\n this.updateUnsavedChangesFlag();\n }\n\n /** @deprecated Use {@link OnContentTypeChange}. */\n onContentTypeChange() {\n return this.OnContentTypeChange();\n }\n\n OnContentChange() {\n this.updateUnsavedChangesFlag();\n }\n\n /** @deprecated Use {@link OnContentChange}. */\n onContentChange() {\n return this.OnContentChange();\n }\n\n /**\n * Updates the hasUnsavedChanges flag based on entity dirty states\n */\n private updateUnsavedChangesFlag() {\n this.HasUnsavedChanges = this.TemplateContents.some(content => content.Dirty) || \n this.IsAddingNewContent;\n }\n\n OnTemplateTextChange(event: any) {\n if (this.isUpdatingEditorValue) {\n // Ignore change events when we're programmatically updating the editor\n return;\n }\n \n if (this.CurrentTemplateContent) {\n // Extract value from event - might be event.target.value or just event depending on component\n const value = typeof event === 'string' ? event : (event.target?.value || event);\n this.CurrentTemplateContent.TemplateText = value;\n this.updateUnsavedChangesFlag();\n }\n }\n\n /** @deprecated Use {@link OnTemplateTextChange}. */\n onTemplateTextChange(event: any) {\n return this.OnTemplateTextChange(event);\n }\n\n /**\n * Helper method to track setTimeout calls for cleanup\n */\n private setTrackedTimeout(callback: () => void, delay: number): number {\n const timeoutId = setTimeout(() => {\n // Remove from tracking when it executes\n const index = this.activeTimeouts.indexOf(timeoutId);\n if (index > -1) {\n this.activeTimeouts.splice(index, 1);\n }\n callback();\n }, delay) as any as number;\n this.activeTimeouts.push(timeoutId);\n return timeoutId;\n }\n\n /**\n * Manually sync the editor value without triggering change events\n */\n private syncEditorValue() {\n // Use Promise.resolve() to wait for the next microtask after any pending changes\n Promise.resolve().then(() => {\n // Then tracked setTimeout for the next macrotask to ensure DOM is updated\n this.setTrackedTimeout(() => {\n if (!this.CodeEditor) {\n return;\n }\n \n this.isUpdatingEditorValue = true;\n const newValue = this.CurrentTemplateContent?.TemplateText || '';\n \n // Use the setValue method from mj-code-editor component\n this.CodeEditor.setValue(newValue); \n this.isUpdatingEditorValue = false;\n }, 0);\n });\n }\n\n async SaveTemplateContents(): Promise<boolean> {\n if (!this.config.allowEdit) return false;\n\n try {\n // Ensure FK is set on all contents, then persist the dirty/new ones atomically\n for (const content of this.TemplateContents) {\n content.TemplateID = this.Template!.ID;\n }\n const toSave = this.TemplateContents.filter(c => c.Dirty || !c.ID);\n\n if (toSave.length > 0) {\n const tg = await this._metadata.CreateTransactionGroup();\n for (const content of toSave) {\n content.TransactionGroup = tg;\n await content.Save();\n }\n const success = await tg.Submit();\n if (!success) {\n console.error('Failed to save template contents transaction');\n return false;\n }\n }\n\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n this.updateUnsavedChangesFlag();\n this.ContentChange.emit(this.TemplateContents);\n return true;\n } catch (error) {\n console.error('Error saving template contents:', error);\n return false;\n }\n }\n\n /**\n * The content rows a HOST FORM should persist inside its own save: every content that is new or\n * dirty, each stamped with the template's ID. Forms that embed this editor (Templates, AI Prompts)\n * call this from their `PopulatePendingRecords()` override, so the template and its contents\n * commit in one transaction and a content that fails validation blocks the save visibly instead\n * of being dropped on the floor. A brand-new content nobody typed into is not a change and is\n * skipped; a read-only editor contributes nothing.\n */\n public GetPendingChanges(): PendingRecordItem[] {\n if (!this.config.allowEdit || !this.Template) {\n return [];\n }\n const pending: PendingRecordItem[] = [];\n for (const content of this.TemplateContents) {\n // An unsaved entity always reports Dirty; the empty-text guard keeps a default row nobody used out.\n const untouchedNew = !content.IsSaved && !(content.TemplateText ?? '').trim();\n if (untouchedNew || !content.Dirty) {\n continue;\n }\n content.TemplateID = this.Template.ID;\n const item = new PendingRecordItem();\n item.entityObject = content;\n item.action = 'save';\n pending.push(item);\n }\n return pending;\n }\n\n /**\n * The host form has persisted the rows from {@link GetPendingChanges}: clear the local dirty state\n * and publish the saved set to listeners.\n */\n public MarkContentsSaved(): void {\n this.IsAddingNewContent = false;\n this.NewTemplateContent = null;\n this.updateUnsavedChangesFlag();\n this.ContentChange.emit(this.TemplateContents);\n }\n\n /** @deprecated Use {@link SaveTemplateContents}. */\n async saveTemplateContents(): Promise<boolean> {\n return this.SaveTemplateContents();\n }\n\n GetContentTypeDisplayText(typeId: string): string {\n if (!typeId) return '-';\n const option = this.ContentTypeOptions.find(opt => opt.value === typeId);\n return option ? option.text : typeId;\n }\n\n /** @deprecated Use {@link GetContentTypeDisplayText}. */\n getContentTypeDisplayText(typeId: string): string {\n return this.GetContentTypeDisplayText(typeId);\n }\n\n GetEditorLanguage(): string {\n if (!this.CurrentTemplateContent?.TypeID) {\n return 'jinja2'; // default to jinja2 for template syntax (compatible with Nunjucks)\n }\n\n const contentType = this.CurrentTemplateContent.TypeID.toLowerCase();\n \n // Map content types to CodeMirror language modes\n switch (contentType) {\n case 'html':\n return 'jinja2'; // Use jinja2 for HTML templates to get template syntax highlighting\n case 'markdown':\n case 'md':\n return 'markdown';\n case 'javascript':\n case 'js':\n return 'javascript';\n case 'css':\n return 'css';\n case 'json':\n return 'json';\n case 'xml':\n return 'xml';\n case 'sql':\n return 'sql';\n case 'text':\n case 'plain':\n default:\n return 'jinja2'; // Default to jinja2 since templates often contain template syntax\n }\n }\n\n /** @deprecated Use {@link GetEditorLanguage}. */\n getEditorLanguage(): string {\n return this.GetEditorLanguage();\n }\n\n /**\n * Test run the current template using the parameter dialog\n */\n async OnRunTemplate() {\n if (!this.Template?.IsSaved || !this.CurrentTemplateContent) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Please save the template before running it.', \n 'warning'\n );\n return;\n }\n\n // Save any unsaved changes first\n if (this.HasUnsavedChanges) {\n const saveResult = await this.SaveTemplateContents();\n if (!saveResult) {\n MJNotificationService.Instance.CreateSimpleNotification(\n 'Failed to save template changes.', \n 'error'\n );\n return;\n }\n }\n\n // Emit the run template event\n this.RunTemplate.emit(this.Template);\n }\n\n /** @deprecated Use {@link OnRunTemplate}. */\n async onRunTemplate() {\n return this.OnRunTemplate();\n }\n\n GetContentTypeOptionsForContent(): Array<{text: string, value: string}> {\n // Always exclude \"Select Type...\" option for all content\n return this.ContentTypeOptions.filter(option => option.value !== '');\n }\n\n /** @deprecated Use {@link GetContentTypeOptionsForContent}. */\n getContentTypeOptionsForContent(): Array<{text: string, value: string}> {\n return this.GetContentTypeOptionsForContent();\n }\n}","@if (template) {\n <div class=\"template-editor\" style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Content Versions List/Tabs -->\n @if (templateContents.length > 0) {\n <div class=\"content-versions-tabs\">\n <div class=\"content-tabs\">\n @for (content of templateContents; track content.ID || $index; let i = $index) {\n <div class=\"content-version-tab\"\n [class.active]=\"selectedContentIndex === i && !isAddingNewContent\"\n (click)=\"selectTemplateContent(i, false)\">\n <div style=\"flex: 1;\">\n <div class=\"tab-label\">\n {{ content.Type || 'Version ' + (i + 1) }}\n </div>\n <div class=\"tab-meta\">\n P:{{ content.Priority }}\n @if (!content.IsActive) {\n • <span class=\"inactive-label\">Inactive</span>\n }\n </div>\n </div>\n @if (templateContents.length > 1 && config.allowEdit) {\n <button type=\"button\"\n (click)=\"deleteTemplateContent(i); $event.stopPropagation()\"\n class=\"delete-btn\"\n title=\"Delete this content version\">\n <i class=\"fa-solid fa-trash fa-xs\"></i>\n </button>\n }\n </div>\n }\n @if (isAddingNewContent) {\n <div class=\"content-version-tab adding-new\">\n <i class=\"fa-solid fa-plus text-success\"></i>\n <span class=\"new-label\">New</span>\n </div>\n }\n <!-- Add New Content (Edit Mode Only) -->\n @if (config.allowEdit && !isAddingNewContent) {\n <div class=\"content-version-tab add-new\"\n (click)=\"addNewTemplateContent()\"\n title=\"Add new template content\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>New</span>\n </div>\n }\n </div>\n </div>\n }\n <!-- Content Editor -->\n @if (currentTemplateContent) {\n <div class=\"content-editor-container\">\n <!-- Content Metadata Bar -->\n <div class=\"content-metadata-bar\">\n <div class=\"metadata-grid\">\n <div class=\"form-group\">\n <label for=\"contentType\" class=\"form-label\">\n <i class=\"fa-solid fa-tag\"></i> Content Type\n </label>\n @if (config.allowEdit) {\n <mj-dropdown [(ngModel)]=\"currentTemplateContent.TypeID\"\n name=\"contentType\"\n [Data]=\"getContentTypeOptionsForContent()\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n (ValueChange)=\"onContentTypeChange()\">\n </mj-dropdown>\n } @else {\n <div class=\"form-control-plaintext\">\n {{ getContentTypeDisplayText(currentTemplateContent.TypeID) }}\n </div>\n }\n </div>\n <div class=\"form-group\">\n <label for=\"priority\" class=\"form-label\">\n <i class=\"fa-solid fa-sort-numeric-up\"></i> Priority\n </label>\n @if (config.allowEdit) {\n <mj-numeric-input [(ngModel)]=\"currentTemplateContent.Priority\"\n name=\"priority\"\n [Min]=\"1\"\n [Step]=\"1\"\n [Format]=\"'n0'\">\n </mj-numeric-input>\n } @else {\n <div class=\"form-control-plaintext\">\n {{ currentTemplateContent.Priority || '-' }}\n </div>\n }\n </div>\n <div class=\"form-group\">\n <label class=\"form-label\">\n <i class=\"fa-solid fa-toggle-on\"></i> Status\n </label>\n @if (config.allowEdit) {\n <div class=\"form-check\">\n <input type=\"checkbox\"\n id=\"isActive\"\n class=\"form-check-input\"\n [(ngModel)]=\"currentTemplateContent.IsActive\"\n name=\"isActive\">\n <label class=\"form-check-label\" for=\"isActive\">\n Active\n </label>\n </div>\n } @else {\n <div class=\"form-control-plaintext\">\n @if (currentTemplateContent.IsActive) {\n <span class=\"badge-success\">\n <i class=\"fa-solid fa-check-circle\"></i> Active\n </span>\n } @else {\n <span class=\"badge-secondary\">\n <i class=\"fa-solid fa-pause-circle\"></i> Inactive\n </span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n <!-- Content Text Editor -->\n <div class=\"content-text-editor\">\n <div class=\"editor-header\">\n <label for=\"templateContent\" class=\"editor-label\">\n <i class=\"fa-solid fa-code\"></i> Template Content\n <span class=\"content-type-badge\"\n [class.new]=\"!currentTemplateContent.ID\"\n [class.existing]=\"!!currentTemplateContent.ID\">\n @if (!currentTemplateContent.ID) {\n New\n } @else {\n {{ getContentTypeDisplayText(currentTemplateContent.TypeID) }}\n }\n </span>\n </label>\n <div class=\"editor-actions\">\n @if (!isAddingNewContent && hasUnsavedChanges) {\n <span class=\"unsaved-indicator\">\n <i class=\"fa-solid fa-circle\"></i>\n Unsaved changes\n </span>\n }\n @if (template.IsSaved && currentTemplateContent && config.showRunButton) {\n <button type=\"button\"\n class=\"run-btn\"\n [disabled]=\"isRunningTemplate\"\n (click)=\"onRunTemplate()\"\n title=\"Test run this template\">\n @if (isRunningTemplate) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i>\n Run\n }\n </button>\n }\n </div>\n </div>\n <mj-code-editor\n #codeEditor\n (change)=\"onTemplateTextChange($event)\"\n [readonly]=\"!config.allowEdit\"\n [language]=\"getEditorLanguage()\"\n [languages]=\"supportedLanguages\"\n class=\"code-editor-wrapper\">\n </mj-code-editor>\n <!-- Template Help Section with Tabs -->\n @if (!config.compactMode) {\n <div class=\"template-help-section\">\n <!-- Tab Navigation -->\n <div class=\"help-tabs\">\n <button type=\"button\"\n class=\"help-tab\"\n [class.active]=\"activeHelpTab === 'syntax'\"\n (click)=\"activeHelpTab = 'syntax'\">\n <i class=\"fa-solid fa-code\"></i> Template Syntax\n </button>\n <button type=\"button\"\n class=\"help-tab\"\n [class.active]=\"activeHelpTab === 'placeholders'\"\n (click)=\"activeHelpTab = 'placeholders'\">\n <i class=\"fa-solid fa-at\"></i> System Placeholders\n </button>\n </div>\n <!-- Tab Content -->\n <div class=\"help-content\">\n <!-- Template Syntax Tab -->\n @if (activeHelpTab === 'syntax') {\n <div class=\"syntax-help\">\n <div class=\"section-title\">\n <i class=\"fa-solid fa-lightbulb\"></i> Template Syntax Quick Reference\n </div>\n <div class=\"syntax-grid\">\n <div>\n <div class=\"syntax-item\">\n <strong>Parameters:</strong><br>\n <code>{{'{{'}} paramName {{'}}'}}</code>\n </div>\n <div>\n <strong>Template Includes:</strong><br>\n <code>{{'{% template \"TemplateName\" %}'}}</code>\n </div>\n </div>\n <div>\n <div class=\"syntax-item\">\n <strong>Conditionals:</strong><br>\n <code>{{'{% if condition %}'}} ... {{'{% endif %}'}}</code>\n </div>\n <div>\n <strong>Loops:</strong><br>\n <code>{{'{% for item in items %}'}} ... {{'{% endfor %}'}}</code>\n </div>\n </div>\n </div>\n </div>\n }\n <!-- System Placeholders Tab -->\n @if (activeHelpTab === 'placeholders') {\n <div class=\"placeholders-help\">\n <div class=\"section-title\">\n <i class=\"fa-solid fa-at\"></i> System Placeholders Reference\n </div>\n <p class=\"placeholders-description\">\n System placeholders are automatically available in all AI prompt templates. Simply use them in your template text and they will be replaced with their current values at execution time.\n </p>\n <!-- Category Sub-tabs -->\n <div class=\"category-tabs\">\n @for (categoryGroup of placeholderCategories; track categoryGroup.category.name) {\n <button type=\"button\"\n class=\"category-tab\"\n [class.active]=\"activePlaceholderCategory === categoryGroup.category.name\"\n (click)=\"activePlaceholderCategory = categoryGroup.category.name\">\n <i [class]=\"'fa-solid ' + categoryGroup.category.icon\" style=\"font-size: 0.9em;\"></i>\n {{ categoryGroup.category.name }}\n <span class=\"tab-badge\">\n {{ categoryGroup.placeholders.length }}\n </span>\n </button>\n }\n </div>\n <!-- Active Category Content -->\n <div class=\"placeholder-content\">\n @for (categoryGroup of placeholderCategories; track categoryGroup.category.name) {\n @if (activePlaceholderCategory === categoryGroup.category.name) {\n <div class=\"category-header\">\n <i [class]=\"'fa-solid ' + categoryGroup.category.icon\"\n [style.color]=\"categoryGroup.category.color\"></i>\n <h5>{{ categoryGroup.category.name }}</h5>\n </div>\n <div class=\"placeholder-grid\">\n @for (placeholder of categoryGroup.placeholders; track placeholder.name) {\n <div class=\"placeholder-item\">\n <div class=\"placeholder-item-inner\">\n <div>\n <div class=\"placeholder-name-row\">\n <code class=\"placeholder-code\">{{'{{'}} {{ placeholder.name }} {{'}}'}}</code>\n <button type=\"button\"\n class=\"copy-btn\"\n (click)=\"copyPlaceholder(placeholder.name)\"\n title=\"Copy placeholder to clipboard\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n @if (placeholder.description) {\n <div class=\"placeholder-description\">{{ placeholder.description }}</div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n <!-- Usage Example -->\n <div class=\"usage-example\">\n <div class=\"usage-example-inner\">\n <i class=\"fa-solid fa-info-circle\"></i>\n <div class=\"usage-example-text\">\n <strong>Usage Example:</strong> To use a system placeholder in your template, simply include it in double curly braces.\n For example: <code>\"Today is {{'{{'}} _CURRENT_DATE {{'}}'}} and the current user is {{'{{'}} _USER_NAME {{'}}'}}\"</code>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n } @else {\n <!-- No Content State -->\n <div class=\"no-content-state\">\n <i class=\"fa-solid fa-file-plus\"></i>\n <h5>No Template Content</h5>\n <p>Create your first template content version to get started.</p>\n @if (config.allowEdit) {\n <button type=\"button\"\n (click)=\"addNewTemplateContent()\"\n class=\"btn btn-primary\">\n <i class=\"fa-solid fa-plus\"></i> Create First Content Version\n </button>\n }\n </div>\n }\n </div>\n}\n"]}
@@ -20,6 +20,11 @@ export { MJTestRubricFormComponentExtended } from './lib/custom/Tests/test-rubri
20
20
  export { MJListFormComponentExtended } from './lib/custom/Lists/list-form.component';
21
21
  export { MJAIAgentSessionFormComponentExtended } from './lib/custom/AIAgentSessions/ai-agent-session-form.component';
22
22
  export { MJAIAgentChannelFormComponentExtended } from './lib/custom/AIAgentChannels/ai-agent-channel-form.component';
23
+ export { MJRubricFormComponentExtended, RubricFormPolicy } from './lib/custom/Rubrics/rubric-form.component';
24
+ export { RubricAuthorPanel, RubricDiffPanel, RubricPublishPanel, RubricVersionsPanel } from './lib/custom/Rubrics/rubric-form.panels';
25
+ export { MJRubricEvaluationFormComponentExtended, RubricEvaluationComparePanel, RubricEvaluationFormPolicy, RubricEvaluationResultPanel } from './lib/custom/Rubrics/evaluation-form.component';
26
+ export { MJRubricScaleFormComponentExtended, RubricScaleFormPolicy, RubricScaleLevelsPanel } from './lib/custom/Rubrics/scale-form.component';
27
+ export { MJAIAgentRubricFormComponentExtended, MJRubricBandFormComponentExtended, MJRubricCategoryFormComponentExtended, MJRubricCriterionFormComponentExtended, MJRubricEvaluationScoreFormComponentExtended, MJRubricScaleLevelFormComponentExtended, MJRubricVersionFormComponentExtended, RubricVersionFormPolicy, RubricVersionSummaryPanel } from './lib/custom/Rubrics/record-forms.component';
23
28
  export { MLModelFormComponentExtended, LoadMLModelFormComponentExtended, MLModelFormPolicy } from './lib/custom/MLModels/ml-model-form.component';
24
29
  export { RecordProcessFormComponentExtended, LoadRecordProcessFormComponentExtended, RecordProcessFormPolicy } from './lib/custom/RecordProcesses/record-process-form.component';
25
30
  export { PSModelDetailComponent } from './lib/custom/MLModels/ps-model-detail.component';
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,11 @@ export { MJTestRubricFormComponentExtended } from './lib/custom/Tests/test-rubri
24
24
  export { MJListFormComponentExtended } from './lib/custom/Lists/list-form.component';
25
25
  export { MJAIAgentSessionFormComponentExtended } from './lib/custom/AIAgentSessions/ai-agent-session-form.component';
26
26
  export { MJAIAgentChannelFormComponentExtended } from './lib/custom/AIAgentChannels/ai-agent-channel-form.component';
27
+ export { MJRubricFormComponentExtended, RubricFormPolicy } from './lib/custom/Rubrics/rubric-form.component';
28
+ export { RubricAuthorPanel, RubricDiffPanel, RubricPublishPanel, RubricVersionsPanel } from './lib/custom/Rubrics/rubric-form.panels';
29
+ export { MJRubricEvaluationFormComponentExtended, RubricEvaluationComparePanel, RubricEvaluationFormPolicy, RubricEvaluationResultPanel } from './lib/custom/Rubrics/evaluation-form.component';
30
+ export { MJRubricScaleFormComponentExtended, RubricScaleFormPolicy, RubricScaleLevelsPanel } from './lib/custom/Rubrics/scale-form.component';
31
+ export { MJAIAgentRubricFormComponentExtended, MJRubricBandFormComponentExtended, MJRubricCategoryFormComponentExtended, MJRubricCriterionFormComponentExtended, MJRubricEvaluationScoreFormComponentExtended, MJRubricScaleLevelFormComponentExtended, MJRubricVersionFormComponentExtended, RubricVersionFormPolicy, RubricVersionSummaryPanel } from './lib/custom/Rubrics/record-forms.component';
27
32
  export { MLModelFormComponentExtended, LoadMLModelFormComponentExtended, MLModelFormPolicy } from './lib/custom/MLModels/ml-model-form.component';
28
33
  export { RecordProcessFormComponentExtended, LoadRecordProcessFormComponentExtended, RecordProcessFormPolicy } from './lib/custom/RecordProcesses/record-process-form.component';
29
34
  export { PSModelDetailComponent } from './lib/custom/MLModels/ps-model-detail.component';
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Public API Surface of ng-core-entity-forms\n */\n\nexport * from './lib/generated/generated-forms.module';\nexport * from './lib/custom/custom-forms.module';\n\n// Custom entity form components (must be individually exported for manifest builder)\nexport { MJEntityFormComponentExtended } from './lib/custom/Entities/entity-form.component';\nexport { MJFileFormComponentExtended } from './lib/custom/Files/file-form.component';\nexport { MJEntityActionFormComponentExtended } from './lib/custom/EntityActions/entityaction.form.component';\nexport { MJTemplateFormComponentExtended } from './lib/custom/Templates/templates-form.component';\nexport { MJAIPromptFormComponentExtended } from './lib/custom/AIPrompts/ai-prompt-form.component';\nexport { MJAIAgentFormComponentExtended } from './lib/custom/AIAgents/ai-agent-form.component';\nexport { MJAIPromptRunFormComponentExtended } from './lib/custom/AIPromptRuns/ai-prompt-run-form.component';\nexport { MJActionFormComponentExtended } from './lib/custom/Actions/action-form.component';\nexport { MJActionExecutionLogFormComponentExtended } from './lib/custom/Actions/action-execution-log-form.component';\nexport { MJAIAgentRunFormComponentExtended } from './lib/custom/ai-agent-run/ai-agent-run.component';\nexport { MJQueryFormComponentExtended } from './lib/custom/Queries/query-form.component';\nexport { MJTestRunFormComponentExtended } from './lib/custom/Tests/test-run-form.component';\nexport { MJTestFormComponentExtended } from './lib/custom/Tests/test-form.component';\nexport { MJTestSuiteRunFormComponentExtended } from './lib/custom/Tests/test-suite-run-form.component';\nexport { MJTestSuiteFormComponentExtended } from './lib/custom/Tests/test-suite-form.component';\nexport { MJTestRunFeedbackFormComponentExtended } from './lib/custom/Tests/test-run-feedback-form.component';\nexport { MJTestRubricFormComponentExtended } from './lib/custom/Tests/test-rubric-form.component';\nexport { MJListFormComponentExtended } from './lib/custom/Lists/list-form.component';\nexport { MJAIAgentSessionFormComponentExtended } from './lib/custom/AIAgentSessions/ai-agent-session-form.component';\nexport { MJAIAgentChannelFormComponentExtended } from './lib/custom/AIAgentChannels/ai-agent-channel-form.component';\nexport { MLModelFormComponentExtended, LoadMLModelFormComponentExtended, MLModelFormPolicy } from './lib/custom/MLModels/ml-model-form.component';\nexport { RecordProcessFormComponentExtended, LoadRecordProcessFormComponentExtended, RecordProcessFormPolicy } from './lib/custom/RecordProcesses/record-process-form.component';\nexport { PSModelDetailComponent } from './lib/custom/MLModels/ps-model-detail.component';\nexport * from './lib/custom/MLModels/ml-model-view-models';\n\n// Custom form supporting components\nexport { TemplateEditorComponent } from './lib/shared/components/template-editor.component';\nexport { ChatMessageViewerComponent } from './lib/custom/AIPromptRuns/chat-message-viewer.component';\nexport { AIAgentRunTimelineComponent } from './lib/custom/ai-agent-run/ai-agent-run-timeline.component';\nexport { AIAgentRunStepNodeComponent } from './lib/custom/ai-agent-run/ai-agent-run-step-node.component';\nexport { AIAgentRunAnalyticsComponent } from './lib/custom/ai-agent-run/ai-agent-run-analytics.component';\nexport { EntityLinkPillComponent } from './lib/custom/Tests/entity-link-pill.component';\n\n// Hero Headers and Overview Mini-Dashboard Panels\nexport { AIAgentCategoryHeaderPanel } from './lib/custom/AIAgentCategories/ai-agent-category-header.panel';\nexport { AIAgentCategoryOverviewPanel } from './lib/custom/AIAgentCategories/ai-agent-category-overview.panel';\nexport { ConversationHeaderPanel } from './lib/custom/Conversations/conversation-header.panel';\nexport { ConversationOverviewPanel } from './lib/custom/Conversations/conversation-overview.panel';\nexport { EmployeeHeaderPanel } from './lib/custom/Employees/employee-header.panel';\nexport { EmployeeOverviewPanel } from './lib/custom/Employees/employee-overview.panel';\nexport { CompanyHeaderPanel } from './lib/custom/Companies/company-header.panel';\nexport { CompanyOverviewPanel } from './lib/custom/Companies/company-overview.panel';\nexport { UserHeaderPanel } from './lib/custom/Users/user-header.panel';\nexport { UserOverviewPanel } from './lib/custom/Users/user-overview.panel';\n\n// Agent Dialog components and service\nexport { NewAgentDialogComponent } from './lib/custom/AIAgents/new-agent-dialog.component';\nexport { NewAgentDialogService } from './lib/custom/AIAgents/new-agent-dialog.service';\n\n// Flow Agent components\nexport { FlowAgentFormSectionComponent } from './lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component';\n\n// Visual Hierarchy & Taxonomy Form Panels\nexport * from './lib/custom/HierarchyPanels/hierarchy-form-panels';"]}
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Public API Surface of ng-core-entity-forms\n */\n\nexport * from './lib/generated/generated-forms.module';\nexport * from './lib/custom/custom-forms.module';\n\n// Custom entity form components (must be individually exported for manifest builder)\nexport { MJEntityFormComponentExtended } from './lib/custom/Entities/entity-form.component';\nexport { MJFileFormComponentExtended } from './lib/custom/Files/file-form.component';\nexport { MJEntityActionFormComponentExtended } from './lib/custom/EntityActions/entityaction.form.component';\nexport { MJTemplateFormComponentExtended } from './lib/custom/Templates/templates-form.component';\nexport { MJAIPromptFormComponentExtended } from './lib/custom/AIPrompts/ai-prompt-form.component';\nexport { MJAIAgentFormComponentExtended } from './lib/custom/AIAgents/ai-agent-form.component';\nexport { MJAIPromptRunFormComponentExtended } from './lib/custom/AIPromptRuns/ai-prompt-run-form.component';\nexport { MJActionFormComponentExtended } from './lib/custom/Actions/action-form.component';\nexport { MJActionExecutionLogFormComponentExtended } from './lib/custom/Actions/action-execution-log-form.component';\nexport { MJAIAgentRunFormComponentExtended } from './lib/custom/ai-agent-run/ai-agent-run.component';\nexport { MJQueryFormComponentExtended } from './lib/custom/Queries/query-form.component';\nexport { MJTestRunFormComponentExtended } from './lib/custom/Tests/test-run-form.component';\nexport { MJTestFormComponentExtended } from './lib/custom/Tests/test-form.component';\nexport { MJTestSuiteRunFormComponentExtended } from './lib/custom/Tests/test-suite-run-form.component';\nexport { MJTestSuiteFormComponentExtended } from './lib/custom/Tests/test-suite-form.component';\nexport { MJTestRunFeedbackFormComponentExtended } from './lib/custom/Tests/test-run-feedback-form.component';\nexport { MJTestRubricFormComponentExtended } from './lib/custom/Tests/test-rubric-form.component';\nexport { MJListFormComponentExtended } from './lib/custom/Lists/list-form.component';\nexport { MJAIAgentSessionFormComponentExtended } from './lib/custom/AIAgentSessions/ai-agent-session-form.component';\nexport { MJAIAgentChannelFormComponentExtended } from './lib/custom/AIAgentChannels/ai-agent-channel-form.component';\nexport { MJRubricFormComponentExtended, RubricFormPolicy } from './lib/custom/Rubrics/rubric-form.component';\nexport { RubricAuthorPanel, RubricDiffPanel, RubricPublishPanel, RubricVersionsPanel } from './lib/custom/Rubrics/rubric-form.panels';\nexport { MJRubricEvaluationFormComponentExtended, RubricEvaluationComparePanel, RubricEvaluationFormPolicy, RubricEvaluationResultPanel } from './lib/custom/Rubrics/evaluation-form.component';\nexport { MJRubricScaleFormComponentExtended, RubricScaleFormPolicy, RubricScaleLevelsPanel } from './lib/custom/Rubrics/scale-form.component';\nexport { MJAIAgentRubricFormComponentExtended, MJRubricBandFormComponentExtended, MJRubricCategoryFormComponentExtended, MJRubricCriterionFormComponentExtended, MJRubricEvaluationScoreFormComponentExtended, MJRubricScaleLevelFormComponentExtended, MJRubricVersionFormComponentExtended, RubricVersionFormPolicy, RubricVersionSummaryPanel } from './lib/custom/Rubrics/record-forms.component';\nexport { MLModelFormComponentExtended, LoadMLModelFormComponentExtended, MLModelFormPolicy } from './lib/custom/MLModels/ml-model-form.component';\nexport { RecordProcessFormComponentExtended, LoadRecordProcessFormComponentExtended, RecordProcessFormPolicy } from './lib/custom/RecordProcesses/record-process-form.component';\nexport { PSModelDetailComponent } from './lib/custom/MLModels/ps-model-detail.component';\nexport * from './lib/custom/MLModels/ml-model-view-models';\n\n// Custom form supporting components\nexport { TemplateEditorComponent } from './lib/shared/components/template-editor.component';\nexport { ChatMessageViewerComponent } from './lib/custom/AIPromptRuns/chat-message-viewer.component';\nexport { AIAgentRunTimelineComponent } from './lib/custom/ai-agent-run/ai-agent-run-timeline.component';\nexport { AIAgentRunStepNodeComponent } from './lib/custom/ai-agent-run/ai-agent-run-step-node.component';\nexport { AIAgentRunAnalyticsComponent } from './lib/custom/ai-agent-run/ai-agent-run-analytics.component';\nexport { EntityLinkPillComponent } from './lib/custom/Tests/entity-link-pill.component';\n\n// Hero Headers and Overview Mini-Dashboard Panels\nexport { AIAgentCategoryHeaderPanel } from './lib/custom/AIAgentCategories/ai-agent-category-header.panel';\nexport { AIAgentCategoryOverviewPanel } from './lib/custom/AIAgentCategories/ai-agent-category-overview.panel';\nexport { ConversationHeaderPanel } from './lib/custom/Conversations/conversation-header.panel';\nexport { ConversationOverviewPanel } from './lib/custom/Conversations/conversation-overview.panel';\nexport { EmployeeHeaderPanel } from './lib/custom/Employees/employee-header.panel';\nexport { EmployeeOverviewPanel } from './lib/custom/Employees/employee-overview.panel';\nexport { CompanyHeaderPanel } from './lib/custom/Companies/company-header.panel';\nexport { CompanyOverviewPanel } from './lib/custom/Companies/company-overview.panel';\nexport { UserHeaderPanel } from './lib/custom/Users/user-header.panel';\nexport { UserOverviewPanel } from './lib/custom/Users/user-overview.panel';\n\n// Agent Dialog components and service\nexport { NewAgentDialogComponent } from './lib/custom/AIAgents/new-agent-dialog.component';\nexport { NewAgentDialogService } from './lib/custom/AIAgents/new-agent-dialog.service';\n\n// Flow Agent components\nexport { FlowAgentFormSectionComponent } from './lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component';\n\n// Visual Hierarchy & Taxonomy Form Panels\nexport * from './lib/custom/HierarchyPanels/hierarchy-form-panels';"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-core-entity-forms",
3
- "version": "6.2.0-edge.1",
3
+ "version": "6.2.0-edge.2",
4
4
  "description": "MemberJunction Core Entity Angular Forms",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -13,7 +13,7 @@
13
13
  "devDependencies": {
14
14
  "@angular/compiler": "21.2.22",
15
15
  "@angular/compiler-cli": "21.2.22",
16
- "@memberjunction/ng-test-utils": "6.2.0-edge.1"
16
+ "@memberjunction/ng-test-utils": "6.2.0-edge.2"
17
17
  },
18
18
  "peerDependencies": {
19
19
  "@angular/cdk": "^21.2.14",
@@ -25,47 +25,51 @@
25
25
  "dependencies": {
26
26
  "@codemirror/language": "^6.12.4",
27
27
  "@codemirror/language-data": "^6.5.2",
28
- "@memberjunction/actions-base": "6.2.0-edge.1",
29
- "@memberjunction/ai": "6.2.0-edge.1",
30
- "@memberjunction/ai-core-plus": "6.2.0-edge.1",
31
- "@memberjunction/ai-engine-base": "6.2.0-edge.1",
32
- "@memberjunction/core": "6.2.0-edge.1",
33
- "@memberjunction/core-entities": "6.2.0-edge.1",
34
- "@memberjunction/feature-pipelines": "6.2.0-edge.1",
35
- "@memberjunction/global": "6.2.0-edge.1",
36
- "@memberjunction/graphql-dataprovider": "6.2.0-edge.1",
37
- "@memberjunction/predictive-studio-core": "6.2.0-edge.1",
38
- "@memberjunction/ng-action-gallery": "6.2.0-edge.1",
39
- "@memberjunction/ng-actions": "6.2.0-edge.1",
40
- "@memberjunction/ng-agents": "6.2.0-edge.1",
41
- "@memberjunction/ng-ai-test-harness": "6.2.0-edge.1",
42
- "@memberjunction/ng-base-application": "6.2.0-edge.1",
43
- "@memberjunction/ng-base-forms": "6.2.0-edge.1",
44
- "@memberjunction/ng-base-types": "6.2.0-edge.1",
45
- "@memberjunction/ng-code-editor": "6.2.0-edge.1",
46
- "@memberjunction/ng-deep-diff": "6.2.0-edge.1",
47
- "@memberjunction/ng-entity-relationship-diagram": "6.2.0-edge.1",
48
- "@memberjunction/ng-entity-viewer": "6.2.0-edge.1",
49
- "@memberjunction/ng-flow-editor": "6.2.0-edge.1",
50
- "@memberjunction/ng-hierarchy-tree": "6.2.0-edge.1",
51
- "@memberjunction/ng-join-grid": "6.2.0-edge.1",
52
- "@memberjunction/ng-link-directives": "6.2.0-edge.1",
53
- "@memberjunction/ng-list-management": "6.2.0-edge.1",
54
- "@memberjunction/ng-markdown": "6.2.0-edge.1",
55
- "@memberjunction/ng-notifications": "6.2.0-edge.1",
56
- "@memberjunction/ng-record-process-studio": "6.2.0-edge.1",
57
- "@memberjunction/ng-resource-permissions": "6.2.0-edge.1",
58
- "@memberjunction/ng-search": "6.2.0-edge.1",
59
- "@memberjunction/ng-shared": "6.2.0-edge.1",
60
- "@memberjunction/ng-shared-generic": "6.2.0-edge.1",
61
- "@memberjunction/ng-tabstrip": "6.2.0-edge.1",
62
- "@memberjunction/ng-task-graph-editor": "6.2.0-edge.1",
63
- "@memberjunction/ng-testing": "6.2.0-edge.1",
64
- "@memberjunction/ng-timeline": "6.2.0-edge.1",
65
- "@memberjunction/ng-trees": "6.2.0-edge.1",
66
- "@memberjunction/ng-ui-components": "6.2.0-edge.1",
67
- "@memberjunction/ng-versions": "6.2.0-edge.1",
68
- "@memberjunction/templates-base-types": "6.2.0-edge.1",
28
+ "@memberjunction/actions-base": "6.2.0-edge.2",
29
+ "@memberjunction/ai": "6.2.0-edge.2",
30
+ "@memberjunction/ai-core-plus": "6.2.0-edge.2",
31
+ "@memberjunction/ai-engine-base": "6.2.0-edge.2",
32
+ "@memberjunction/core": "6.2.0-edge.2",
33
+ "@memberjunction/core-entities": "6.2.0-edge.2",
34
+ "@memberjunction/feature-pipelines": "6.2.0-edge.2",
35
+ "@memberjunction/global": "6.2.0-edge.2",
36
+ "@memberjunction/graphql-dataprovider": "6.2.0-edge.2",
37
+ "@memberjunction/ng-action-gallery": "6.2.0-edge.2",
38
+ "@memberjunction/ng-actions": "6.2.0-edge.2",
39
+ "@memberjunction/ng-agents": "6.2.0-edge.2",
40
+ "@memberjunction/ng-ai-test-harness": "6.2.0-edge.2",
41
+ "@memberjunction/ng-base-application": "6.2.0-edge.2",
42
+ "@memberjunction/ng-base-forms": "6.2.0-edge.2",
43
+ "@memberjunction/ng-base-types": "6.2.0-edge.2",
44
+ "@memberjunction/ng-code-editor": "6.2.0-edge.2",
45
+ "@memberjunction/ng-deep-diff": "6.2.0-edge.2",
46
+ "@memberjunction/ng-entity-relationship-diagram": "6.2.0-edge.2",
47
+ "@memberjunction/ng-entity-viewer": "6.2.0-edge.2",
48
+ "@memberjunction/ng-flow-editor": "6.2.0-edge.2",
49
+ "@memberjunction/ng-hierarchy-tree": "6.2.0-edge.2",
50
+ "@memberjunction/ng-join-grid": "6.2.0-edge.2",
51
+ "@memberjunction/ng-link-directives": "6.2.0-edge.2",
52
+ "@memberjunction/ng-list-management": "6.2.0-edge.2",
53
+ "@memberjunction/ng-markdown": "6.2.0-edge.2",
54
+ "@memberjunction/ng-notifications": "6.2.0-edge.2",
55
+ "@memberjunction/ng-record-clone": "6.2.0-edge.2",
56
+ "@memberjunction/ng-record-process-studio": "6.2.0-edge.2",
57
+ "@memberjunction/ng-rubrics": "6.2.0-edge.2",
58
+ "@memberjunction/ng-resource-permissions": "6.2.0-edge.2",
59
+ "@memberjunction/ng-search": "6.2.0-edge.2",
60
+ "@memberjunction/ng-shared": "6.2.0-edge.2",
61
+ "@memberjunction/ng-shared-generic": "6.2.0-edge.2",
62
+ "@memberjunction/ng-tabstrip": "6.2.0-edge.2",
63
+ "@memberjunction/ng-task-graph-editor": "6.2.0-edge.2",
64
+ "@memberjunction/ng-testing": "6.2.0-edge.2",
65
+ "@memberjunction/ng-timeline": "6.2.0-edge.2",
66
+ "@memberjunction/ng-trees": "6.2.0-edge.2",
67
+ "@memberjunction/ng-ui-components": "6.2.0-edge.2",
68
+ "@memberjunction/ng-versions": "6.2.0-edge.2",
69
+ "@memberjunction/predictive-studio-core": "6.2.0-edge.2",
70
+ "@memberjunction/record-cloning-base": "6.2.0-edge.2",
71
+ "@memberjunction/rubrics-base": "6.2.0-edge.2",
72
+ "@memberjunction/templates-base-types": "6.2.0-edge.2",
69
73
  "@types/d3": "^7.4.3",
70
74
  "ag-grid-angular": "^35.0.1",
71
75
  "ag-grid-community": "^35.0.1",