@memberjunction/ng-core-entity-forms 5.40.1 → 5.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/__tests__/bridge-provider-features.test.d.ts +2 -0
  2. package/dist/__tests__/bridge-provider-features.test.d.ts.map +1 -0
  3. package/dist/__tests__/bridge-provider-features.test.js +70 -0
  4. package/dist/__tests__/bridge-provider-features.test.js.map +1 -0
  5. package/dist/lib/custom/AIAgentChannels/ai-agent-channel-form.component.d.ts +17 -0
  6. package/dist/lib/custom/AIAgentChannels/ai-agent-channel-form.component.d.ts.map +1 -0
  7. package/dist/lib/custom/AIAgentChannels/ai-agent-channel-form.component.js +170 -0
  8. package/dist/lib/custom/AIAgentChannels/ai-agent-channel-form.component.js.map +1 -0
  9. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +133 -0
  10. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -0
  11. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +1190 -0
  12. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -0
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +69 -0
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +911 -562
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  17. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  18. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +2 -2
  19. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  20. package/dist/lib/custom/BridgeAgentIdentities/bridge-agent-identity-form.component.d.ts +20 -0
  21. package/dist/lib/custom/BridgeAgentIdentities/bridge-agent-identity-form.component.d.ts.map +1 -0
  22. package/dist/lib/custom/BridgeAgentIdentities/bridge-agent-identity-form.component.js +115 -0
  23. package/dist/lib/custom/BridgeAgentIdentities/bridge-agent-identity-form.component.js.map +1 -0
  24. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +50 -0
  25. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -0
  26. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +75 -0
  27. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -0
  28. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.d.ts +48 -0
  29. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.d.ts.map +1 -0
  30. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +256 -0
  31. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -0
  32. package/dist/lib/custom/Entities/entity-form.component.d.ts +28 -4
  33. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  34. package/dist/lib/custom/Entities/entity-form.component.js +42 -12
  35. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  36. package/dist/lib/custom/Lists/list-form.component.d.ts +6 -0
  37. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Lists/list-form.component.js +11 -1
  39. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  40. package/dist/lib/custom/SessionBridges/session-bridge-form.component.d.ts +43 -0
  41. package/dist/lib/custom/SessionBridges/session-bridge-form.component.d.ts.map +1 -0
  42. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js +278 -0
  43. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -0
  44. package/dist/lib/custom/custom-forms.module.d.ts +32 -26
  45. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  46. package/dist/lib/custom/custom-forms.module.js +34 -1
  47. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  48. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  49. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +284 -180
  50. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  51. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.d.ts +10 -0
  52. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.d.ts.map +1 -0
  53. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +117 -0
  54. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -0
  55. package/dist/lib/generated/Entities/MJAIAgentCoAgent/mjaiagentcoagent.form.component.d.ts +10 -0
  56. package/dist/lib/generated/Entities/MJAIAgentCoAgent/mjaiagentcoagent.form.component.d.ts.map +1 -0
  57. package/dist/lib/generated/Entities/MJAIAgentCoAgent/mjaiagentcoagent.form.component.js +82 -0
  58. package/dist/lib/generated/Entities/MJAIAgentCoAgent/mjaiagentcoagent.form.component.js.map +1 -0
  59. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +27 -25
  60. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
  61. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  62. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +16 -20
  63. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  64. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts +10 -0
  65. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -0
  66. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +185 -0
  67. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -0
  68. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.d.ts +10 -0
  69. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.d.ts.map +1 -0
  70. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js +121 -0
  71. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js.map +1 -0
  72. package/dist/lib/generated/Entities/MJAIAgentSessionBridgeParticipant/mjaiagentsessionbridgeparticipant.form.component.d.ts +10 -0
  73. package/dist/lib/generated/Entities/MJAIAgentSessionBridgeParticipant/mjaiagentsessionbridgeparticipant.form.component.d.ts.map +1 -0
  74. package/dist/lib/generated/Entities/MJAIAgentSessionBridgeParticipant/mjaiagentsessionbridgeparticipant.form.component.js +94 -0
  75. package/dist/lib/generated/Entities/MJAIAgentSessionBridgeParticipant/mjaiagentsessionbridgeparticipant.form.component.js.map +1 -0
  76. package/dist/lib/generated/Entities/MJAIAgentSessionChannel/mjaiagentsessionchannel.form.component.d.ts +10 -0
  77. package/dist/lib/generated/Entities/MJAIAgentSessionChannel/mjaiagentsessionchannel.form.component.d.ts.map +1 -0
  78. package/dist/lib/generated/Entities/MJAIAgentSessionChannel/mjaiagentsessionchannel.form.component.js +86 -0
  79. package/dist/lib/generated/Entities/MJAIAgentSessionChannel/mjaiagentsessionchannel.form.component.js.map +1 -0
  80. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.d.ts.map +1 -1
  81. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +37 -15
  82. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
  83. package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.d.ts +10 -0
  84. package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.d.ts.map +1 -0
  85. package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js +86 -0
  86. package/dist/lib/generated/Entities/MJAIBridgeAgentIdentity/mjaibridgeagentidentity.form.component.js.map +1 -0
  87. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.d.ts +10 -0
  88. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.d.ts.map +1 -0
  89. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js +143 -0
  90. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js.map +1 -0
  91. package/dist/lib/generated/Entities/MJAIBridgeProviderChannel/mjaibridgeproviderchannel.form.component.d.ts +10 -0
  92. package/dist/lib/generated/Entities/MJAIBridgeProviderChannel/mjaibridgeproviderchannel.form.component.d.ts.map +1 -0
  93. package/dist/lib/generated/Entities/MJAIBridgeProviderChannel/mjaibridgeproviderchannel.form.component.js +76 -0
  94. package/dist/lib/generated/Entities/MJAIBridgeProviderChannel/mjaibridgeproviderchannel.form.component.js.map +1 -0
  95. package/dist/lib/generated/Entities/MJAIRemoteBrowserProvider/mjairemotebrowserprovider.form.component.d.ts +10 -0
  96. package/dist/lib/generated/Entities/MJAIRemoteBrowserProvider/mjairemotebrowserprovider.form.component.d.ts.map +1 -0
  97. package/dist/lib/generated/Entities/MJAIRemoteBrowserProvider/mjairemotebrowserprovider.form.component.js +90 -0
  98. package/dist/lib/generated/Entities/MJAIRemoteBrowserProvider/mjairemotebrowserprovider.form.component.js.map +1 -0
  99. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  100. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +28 -10
  101. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  102. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  103. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +7 -9
  104. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  105. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +27 -25
  106. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  107. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  108. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +143 -107
  109. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  110. package/dist/lib/generated/generated-forms.module.d.ts +358 -343
  111. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  112. package/dist/lib/generated/generated-forms.module.js +426 -366
  113. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  114. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts +74 -0
  115. package/dist/lib/panels/ai-agents/agent-realtime.panel.d.ts.map +1 -0
  116. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +365 -0
  117. package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -0
  118. package/dist/public-api.d.ts +2 -0
  119. package/dist/public-api.d.ts.map +1 -1
  120. package/dist/public-api.js +2 -0
  121. package/dist/public-api.js.map +1 -1
  122. package/package.json +36 -36
@@ -0,0 +1,256 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { RegisterClass } from '@memberjunction/global';
9
+ import { BaseFormComponent } from '@memberjunction/ng-base-forms';
10
+ import { MJAIBridgeProviderFormComponent } from '../../generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component';
11
+ import { BRIDGE_FEATURE_GROUPS, countEnabledFeatures, isFeatureEnabled, setFeature, } from './bridge-provider-features';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "@memberjunction/ng-base-forms";
14
+ const _forTrack0 = ($index, $item) => $item.title;
15
+ const _forTrack1 = ($index, $item) => $item.key;
16
+ function MJAIBridgeProviderFormComponentExtended_Conditional_0_For_17_For_7_Template(rf, ctx) { if (rf & 1) {
17
+ const _r3 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementStart(0, "div", 26)(1, "div", 27)(2, "span", 28);
19
+ i0.ɵɵtext(3);
20
+ i0.ɵɵelementEnd();
21
+ i0.ɵɵelementStart(4, "span", 29);
22
+ i0.ɵɵtext(5);
23
+ i0.ɵɵelementEnd()();
24
+ i0.ɵɵelementStart(6, "div", 30);
25
+ i0.ɵɵlistener("click", function MJAIBridgeProviderFormComponentExtended_Conditional_0_For_17_For_7_Template_div_click_6_listener() { const feature_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleFeature(feature_r4.key, !ctx_r1.IsFeatureOn(feature_r4.key))); });
26
+ i0.ɵɵelementEnd()();
27
+ } if (rf & 2) {
28
+ const feature_r4 = ctx.$implicit;
29
+ const ctx_r1 = i0.ɵɵnextContext(3);
30
+ i0.ɵɵadvance(3);
31
+ i0.ɵɵtextInterpolate(feature_r4.label);
32
+ i0.ɵɵadvance(2);
33
+ i0.ɵɵtextInterpolate(feature_r4.description);
34
+ i0.ɵɵadvance();
35
+ i0.ɵɵclassProp("on", ctx_r1.IsFeatureOn(feature_r4.key))("disabled", !ctx_r1.EditMode);
36
+ } }
37
+ function MJAIBridgeProviderFormComponentExtended_Conditional_0_For_17_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelementStart(0, "div", 13)(1, "div", 24);
39
+ i0.ɵɵelement(2, "i");
40
+ i0.ɵɵelementStart(3, "span");
41
+ i0.ɵɵtext(4);
42
+ i0.ɵɵelementEnd()();
43
+ i0.ɵɵelementStart(5, "div", 25);
44
+ i0.ɵɵrepeaterCreate(6, MJAIBridgeProviderFormComponentExtended_Conditional_0_For_17_For_7_Template, 7, 6, "div", 26, _forTrack1);
45
+ i0.ɵɵelementEnd()();
46
+ } if (rf & 2) {
47
+ const group_r5 = ctx.$implicit;
48
+ i0.ɵɵadvance(2);
49
+ i0.ɵɵclassMap(i0.ɵɵinterpolate1("fa-solid ", group_r5.icon));
50
+ i0.ɵɵadvance(2);
51
+ i0.ɵɵtextInterpolate(group_r5.title);
52
+ i0.ɵɵadvance(2);
53
+ i0.ɵɵrepeater(group_r5.features);
54
+ } }
55
+ function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
56
+ const _r6 = i0.ɵɵgetCurrentView();
57
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 31);
58
+ i0.ɵɵlistener("Navigate", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_25_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_25_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJAIAgentSessionBridges", $event.totalRowCount)); });
59
+ i0.ɵɵelementEnd()();
60
+ } if (rf & 2) {
61
+ const ctx_r1 = i0.ɵɵnextContext(2);
62
+ i0.ɵɵadvance();
63
+ i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Agent Session Bridges", "ProviderID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Agent Session Bridges"))("AllowLoad", ctx_r1.IsSectionExpanded("mJAIAgentSessionBridges"))("ShowToolbar", false);
64
+ } }
65
+ function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
66
+ const _r7 = i0.ɵɵgetCurrentView();
67
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 31);
68
+ i0.ɵɵlistener("Navigate", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_27_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_27_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJAIBridgeProviderChannels", $event.totalRowCount)); });
69
+ i0.ɵɵelementEnd()();
70
+ } if (rf & 2) {
71
+ const ctx_r1 = i0.ɵɵnextContext(2);
72
+ i0.ɵɵadvance();
73
+ i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Bridge Provider Channels", "ProviderID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Bridge Provider Channels"))("AllowLoad", ctx_r1.IsSectionExpanded("mJAIBridgeProviderChannels"))("ShowToolbar", false);
74
+ } }
75
+ function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_29_Template(rf, ctx) { if (rf & 1) {
76
+ const _r8 = i0.ɵɵgetCurrentView();
77
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 31);
78
+ i0.ɵɵlistener("Navigate", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_29_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_29_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJAIBridgeAgentIdentities", $event.totalRowCount)); });
79
+ i0.ɵɵelementEnd()();
80
+ } if (rf & 2) {
81
+ const ctx_r1 = i0.ɵɵnextContext(2);
82
+ i0.ɵɵadvance();
83
+ i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: AI Bridge Agent Identities", "ProviderID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: AI Bridge Agent Identities"))("AllowLoad", ctx_r1.IsSectionExpanded("mJAIBridgeAgentIdentities"))("ShowToolbar", false);
84
+ } }
85
+ function MJAIBridgeProviderFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf & 1) {
86
+ const _r1 = i0.ɵɵgetCurrentView();
87
+ i0.ɵɵelementStart(0, "mj-record-form-container", 1);
88
+ i0.ɵɵlistener("Navigate", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Template_mj_record_form_container_Navigate_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("DeleteRequested", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Template_mj_record_form_container_DeleteRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDeleteRequested()); })("FavoriteToggled", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Template_mj_record_form_container_FavoriteToggled_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFavoriteToggled()); })("HistoryRequested", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Template_mj_record_form_container_HistoryRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnHistoryRequested()); })("ListManagementRequested", function MJAIBridgeProviderFormComponentExtended_Conditional_0_Template_mj_record_form_container_ListManagementRequested_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnListManagementRequested()); });
89
+ i0.ɵɵelement(1, "mj-form-panel-slot", 2);
90
+ i0.ɵɵelementStart(2, "mj-collapsible-panel", 3);
91
+ i0.ɵɵelement(3, "mj-form-field", 4)(4, "mj-form-field", 5);
92
+ i0.ɵɵelementEnd();
93
+ i0.ɵɵelementStart(5, "mj-collapsible-panel", 6);
94
+ i0.ɵɵelement(6, "mj-form-field", 7)(7, "mj-form-field", 8)(8, "mj-form-field", 9)(9, "mj-form-field", 10);
95
+ i0.ɵɵelementEnd();
96
+ i0.ɵɵelementStart(10, "mj-collapsible-panel", 11)(11, "p", 12);
97
+ i0.ɵɵtext(12, " The platform's declared capabilities. The engine gates optional driver calls on these flags \u2014 the base driver throws ");
98
+ i0.ɵɵelementStart(13, "code");
99
+ i0.ɵɵtext(14, "BridgeCapabilityNotSupportedError");
100
+ i0.ɵɵelementEnd();
101
+ i0.ɵɵtext(15, " when a feature is claimed but unimplemented. Leave a capability off if the platform / driver does not support it. ");
102
+ i0.ɵɵelementEnd();
103
+ i0.ɵɵrepeaterCreate(16, MJAIBridgeProviderFormComponentExtended_Conditional_0_For_17_Template, 8, 4, "div", 13, _forTrack0);
104
+ i0.ɵɵelementEnd();
105
+ i0.ɵɵelementStart(18, "mj-collapsible-panel", 14);
106
+ i0.ɵɵelement(19, "mj-form-field", 15);
107
+ i0.ɵɵelementEnd();
108
+ i0.ɵɵelementStart(20, "mj-collapsible-panel", 16);
109
+ i0.ɵɵelement(21, "mj-form-field", 17)(22, "mj-form-field", 18);
110
+ i0.ɵɵelementEnd();
111
+ i0.ɵɵelement(23, "mj-form-panel-slot", 19);
112
+ i0.ɵɵelementStart(24, "mj-collapsible-panel", 20);
113
+ i0.ɵɵconditionalCreate(25, MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_25_Template, 2, 4, "div");
114
+ i0.ɵɵelementEnd();
115
+ i0.ɵɵelementStart(26, "mj-collapsible-panel", 21);
116
+ i0.ɵɵconditionalCreate(27, MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_27_Template, 2, 4, "div");
117
+ i0.ɵɵelementEnd();
118
+ i0.ɵɵelementStart(28, "mj-collapsible-panel", 22);
119
+ i0.ɵɵconditionalCreate(29, MJAIBridgeProviderFormComponentExtended_Conditional_0_Conditional_29_Template, 2, 4, "div");
120
+ i0.ɵɵelementEnd();
121
+ i0.ɵɵelement(30, "mj-form-panel-slot", 23);
122
+ i0.ɵɵelementEnd();
123
+ } if (rf & 2) {
124
+ const ctx_r1 = i0.ɵɵnextContext();
125
+ i0.ɵɵproperty("Record", ctx_r1.record)("FormComponent", ctx_r1);
126
+ i0.ɵɵadvance();
127
+ i0.ɵɵproperty("Entity", i0.ɵɵinterpolate(ctx_r1.record.EntityInfo.Name))("Record", ctx_r1.record)("FormComponent", ctx_r1)("FormContext", ctx_r1.formContext);
128
+ i0.ɵɵadvance();
129
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
130
+ i0.ɵɵadvance();
131
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
132
+ i0.ɵɵadvance();
133
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
134
+ i0.ɵɵadvance();
135
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
136
+ i0.ɵɵadvance();
137
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
138
+ i0.ɵɵadvance();
139
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
140
+ i0.ɵɵadvance();
141
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
142
+ i0.ɵɵadvance();
143
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
144
+ i0.ɵɵadvance();
145
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.EnabledFeatureCount)("DefaultExpanded", true);
146
+ i0.ɵɵadvance(6);
147
+ i0.ɵɵrepeater(ctx_r1.FeatureGroups);
148
+ i0.ɵɵadvance(2);
149
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
150
+ i0.ɵɵadvance();
151
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
152
+ i0.ɵɵadvance();
153
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
154
+ i0.ɵɵadvance();
155
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
156
+ i0.ɵɵadvance();
157
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
158
+ i0.ɵɵadvance();
159
+ i0.ɵɵproperty("Entity", i0.ɵɵinterpolate(ctx_r1.record.EntityInfo.Name))("Record", ctx_r1.record)("FormComponent", ctx_r1)("FormContext", ctx_r1.formContext);
160
+ i0.ɵɵadvance();
161
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJAIAgentSessionBridges"))("DefaultExpanded", false);
162
+ i0.ɵɵadvance();
163
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 25 : -1);
164
+ i0.ɵɵadvance();
165
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJAIBridgeProviderChannels"))("DefaultExpanded", false);
166
+ i0.ɵɵadvance();
167
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 27 : -1);
168
+ i0.ɵɵadvance();
169
+ i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJAIBridgeAgentIdentities"))("DefaultExpanded", false);
170
+ i0.ɵɵadvance();
171
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 29 : -1);
172
+ i0.ɵɵadvance();
173
+ i0.ɵɵproperty("Entity", i0.ɵɵinterpolate(ctx_r1.record.EntityInfo.Name))("Record", ctx_r1.record)("FormComponent", ctx_r1)("FormContext", ctx_r1.formContext);
174
+ } }
175
+ /**
176
+ * Custom form for 'MJ: AI Bridge Providers' (Pattern 2 — full override of the
177
+ * generated form). The standout addition is a **capability editor**: the 16
178
+ * `SupportedFeatures` flags rendered as labeled toggles, grouped into Join
179
+ * methods / Media tracks / Signals & telephony.
180
+ *
181
+ * The toggles bind through the entity's typed `SupportedFeaturesObject`
182
+ * accessor (which serializes to/from the `SupportedFeatures` JSON column). On
183
+ * each toggle we read the current object, produce a fresh object via the pure
184
+ * `setFeature` helper, and write it back through the setter — a fresh reference
185
+ * is required so the accessor's parse-cache invalidates and dirty tracking
186
+ * fires. Disabling omits the key (matching "NULL/omitted = unsupported").
187
+ *
188
+ * The remaining provider fields (Name / Description / BridgeType / DriverClass
189
+ * / Status / Configuration / ConfigSchema) and the related-entity grids keep
190
+ * the generated panels.
191
+ */
192
+ let MJAIBridgeProviderFormComponentExtended = class MJAIBridgeProviderFormComponentExtended extends MJAIBridgeProviderFormComponent {
193
+ constructor() {
194
+ super(...arguments);
195
+ /** Static editor layout (16 flags, 3 groups). */
196
+ this.FeatureGroups = BRIDGE_FEATURE_GROUPS;
197
+ }
198
+ /**
199
+ * Register section state for the custom layout. We don't call
200
+ * `super.ngOnInit()`'s `initSections` because this form restructures the
201
+ * sections (adds `supportedFeatures` + `configurationSchema`, splits the
202
+ * generated "Technical Capabilities" panel), so we register our own keys.
203
+ */
204
+ async ngOnInit() {
205
+ await super.ngOnInit();
206
+ this.initSections([
207
+ { sectionKey: 'providerInformation', sectionName: 'Provider Information', isExpanded: true },
208
+ { sectionKey: 'providerConfiguration', sectionName: 'Provider Configuration', isExpanded: true },
209
+ { sectionKey: 'supportedFeatures', sectionName: 'Supported Features', isExpanded: true },
210
+ { sectionKey: 'configurationSchema', sectionName: 'Configuration Schema', isExpanded: false },
211
+ { sectionKey: 'systemMetadata', sectionName: 'System Metadata', isExpanded: false },
212
+ { sectionKey: 'mJAIAgentSessionBridges', sectionName: 'AI Agent Session Bridges', isExpanded: false },
213
+ { sectionKey: 'mJAIBridgeProviderChannels', sectionName: 'AI Bridge Provider Channels', isExpanded: false },
214
+ { sectionKey: 'mJAIBridgeAgentIdentities', sectionName: 'AI Bridge Agent Identities', isExpanded: false },
215
+ ]);
216
+ }
217
+ /** Count of enabled capabilities — drives the panel badge. */
218
+ get EnabledFeatureCount() {
219
+ return countEnabledFeatures(this.record?.SupportedFeaturesObject ?? null);
220
+ }
221
+ /** Read a single capability flag for the template. */
222
+ IsFeatureOn(key) {
223
+ return isFeatureEnabled(this.record?.SupportedFeaturesObject ?? null, key);
224
+ }
225
+ /**
226
+ * Toggle a capability flag. Reads the current typed object, builds a fresh
227
+ * object with the flag changed, and assigns it back through the typed
228
+ * setter (which re-serializes to the JSON column and marks the field dirty).
229
+ */
230
+ ToggleFeature(key, enabled) {
231
+ if (!this.record || !this.EditMode) {
232
+ return;
233
+ }
234
+ this.record.SupportedFeaturesObject = setFeature(this.record.SupportedFeaturesObject ?? null, key, enabled);
235
+ }
236
+ static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJAIBridgeProviderFormComponentExtended_BaseFactory; return function MJAIBridgeProviderFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJAIBridgeProviderFormComponentExtended_BaseFactory || (ɵMJAIBridgeProviderFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJAIBridgeProviderFormComponentExtended)))(__ngFactoryType__ || MJAIBridgeProviderFormComponentExtended); }; })(); }
237
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJAIBridgeProviderFormComponentExtended, selectors: [["mj-ai-bridge-provider-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Record", "FormComponent"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent"], ["Slot", "before-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "providerInformation", "SectionName", "Provider Information", "Icon", "fa fa-info-circle", 3, "Form", "FormContext"], ["FieldName", "Name", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Description", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "providerConfiguration", "SectionName", "Provider Configuration", "Icon", "fa fa-sliders-h", 3, "Form", "FormContext"], ["FieldName", "BridgeType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "DriverClass", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Status", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Configuration", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "supportedFeatures", "SectionName", "Supported Features", "Icon", "fa fa-toggle-on", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], [1, "bp-intro"], [1, "bp-group"], ["SectionKey", "configurationSchema", "SectionName", "Configuration Schema", "Icon", "fa fa-code", 3, "Form", "FormContext", "DefaultExpanded"], ["FieldName", "ConfigSchema", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "systemMetadata", "SectionName", "System Metadata", "Icon", "fa fa-database", 3, "Form", "FormContext", "DefaultExpanded"], ["FieldName", "__mj_CreatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "__mj_UpdatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["Slot", "after-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "mJAIAgentSessionBridges", "SectionName", "AI Agent Session Bridges", "Icon", "fa fa-network-wired", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJAIBridgeProviderChannels", "SectionName", "AI Bridge Provider Channels", "Icon", "fa fa-project-diagram", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJAIBridgeAgentIdentities", "SectionName", "AI Bridge Agent Identities", "Icon", "fa fa-id-card", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["Slot", "after-related", 3, "Entity", "Record", "FormComponent", "FormContext"], [1, "bp-group-header"], [1, "bp-feature-list"], [1, "bp-feature-row"], [1, "label"], [1, "t"], [1, "d"], [1, "bp-switch", 3, "click"], [3, "Navigate", "AfterDataLoad", "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"]], template: function MJAIBridgeProviderFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
238
+ i0.ɵɵconditionalCreate(0, MJAIBridgeProviderFormComponentExtended_Conditional_0_Template, 31, 82, "mj-record-form-container", 0);
239
+ } if (rf & 2) {
240
+ i0.ɵɵconditional(ctx.record ? 0 : -1);
241
+ } }, dependencies: [i1.MjFormFieldComponent, i1.MjCollapsiblePanelComponent, i1.MjRecordFormContainerComponent, i1.ExplorerEntityDataGridComponent, i1.FormPanelSlotComponent], styles: ["\n\n\n\n.bp-intro[_ngcontent-%COMP%] {\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n margin: 0 0 14px;\n max-width: 92ch;\n}\n.bp-intro[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n padding: 1px 5px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.bp-group[_ngcontent-%COMP%] { margin-bottom: 18px; }\n.bp-group[_ngcontent-%COMP%]:last-child { margin-bottom: 0; }\n\n.bp-group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 700;\n color: var(--mj-text-muted);\n margin: 0 0 8px;\n}\n.bp-group-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n\n.bp-feature-list[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.bp-feature-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 10px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n.bp-feature-row[_ngcontent-%COMP%]:first-child { border-top: 0; }\n\n.bp-feature-row[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n.bp-feature-row[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] .t[_ngcontent-%COMP%] { font-size: 13px; font-weight: 600; color: var(--mj-text-primary); }\n.bp-feature-row[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] .d[_ngcontent-%COMP%] { font-size: 11px; color: var(--mj-text-muted); line-height: 1.35; }\n\n.bp-switch[_ngcontent-%COMP%] {\n position: relative;\n flex: 0 0 auto;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.bp-switch[_ngcontent-%COMP%]::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n.bp-switch.on[_ngcontent-%COMP%] { background: var(--mj-brand-primary); }\n.bp-switch.on[_ngcontent-%COMP%]::after { left: 18px; }\n.bp-switch.disabled[_ngcontent-%COMP%] { opacity: 0.5; cursor: not-allowed; }"] }); }
242
+ };
243
+ MJAIBridgeProviderFormComponentExtended = __decorate([
244
+ RegisterClass(BaseFormComponent, 'MJ: AI Bridge Providers')
245
+ ], MJAIBridgeProviderFormComponentExtended);
246
+ export { MJAIBridgeProviderFormComponentExtended };
247
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJAIBridgeProviderFormComponentExtended, [{
248
+ type: Component,
249
+ args: [{ standalone: false, selector: 'mj-ai-bridge-provider-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- Provider Information -->\n <mj-collapsible-panel\n SectionKey=\"providerInformation\"\n SectionName=\"Provider Information\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Name\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Description\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Provider Configuration -->\n <mj-collapsible-panel\n SectionKey=\"providerConfiguration\"\n SectionName=\"Provider Configuration\"\n Icon=\"fa fa-sliders-h\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BridgeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"DriverClass\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Status\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Supported Features \u2014 capability editor (the standout custom UI) -->\n <mj-collapsible-panel\n SectionKey=\"supportedFeatures\"\n SectionName=\"Supported Features\"\n Icon=\"fa fa-toggle-on\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"EnabledFeatureCount\"\n [DefaultExpanded]=\"true\">\n\n <p class=\"bp-intro\">\n The platform's declared capabilities. The engine gates optional driver calls on these flags \u2014\n the base driver throws <code>BridgeCapabilityNotSupportedError</code> when a feature is claimed but\n unimplemented. Leave a capability off if the platform / driver does not support it.\n </p>\n\n @for (group of FeatureGroups; track group.title) {\n <div class=\"bp-group\">\n <div class=\"bp-group-header\">\n <i class=\"fa-solid {{ group.icon }}\"></i>\n <span>{{ group.title }}</span>\n </div>\n <div class=\"bp-feature-list\">\n @for (feature of group.features; track feature.key) {\n <div class=\"bp-feature-row\">\n <div class=\"label\">\n <span class=\"t\">{{ feature.label }}</span>\n <span class=\"d\">{{ feature.description }}</span>\n </div>\n <div class=\"bp-switch\"\n [class.on]=\"IsFeatureOn(feature.key)\"\n [class.disabled]=\"!EditMode\"\n (click)=\"ToggleFeature(feature.key, !IsFeatureOn(feature.key))\">\n </div>\n </div>\n }\n </div>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Configuration Schema -->\n <mj-collapsible-panel\n SectionKey=\"configurationSchema\"\n SectionName=\"Configuration Schema\"\n Icon=\"fa fa-code\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ConfigSchema\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- System Metadata -->\n <mj-collapsible-panel\n SectionKey=\"systemMetadata\"\n SectionName=\"System Metadata\"\n Icon=\"fa fa-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_CreatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_UpdatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n RELATED ENTITY PANELS\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"mJAIAgentSessionBridges\"\n SectionName=\"AI Agent Session Bridges\"\n Icon=\"fa fa-network-wired\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJAIAgentSessionBridges')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Session Bridges','ProviderID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Session Bridges')\"\n [AllowLoad]=\"IsSectionExpanded('mJAIAgentSessionBridges')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJAIAgentSessionBridges', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-collapsible-panel\n SectionKey=\"mJAIBridgeProviderChannels\"\n SectionName=\"AI Bridge Provider Channels\"\n Icon=\"fa fa-project-diagram\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJAIBridgeProviderChannels')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Bridge Provider Channels','ProviderID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Bridge Provider Channels')\"\n [AllowLoad]=\"IsSectionExpanded('mJAIBridgeProviderChannels')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJAIBridgeProviderChannels', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-collapsible-panel\n SectionKey=\"mJAIBridgeAgentIdentities\"\n SectionName=\"AI Bridge Agent Identities\"\n Icon=\"fa fa-id-card\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJAIBridgeAgentIdentities')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Bridge Agent Identities','ProviderID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Bridge Agent Identities')\"\n [AllowLoad]=\"IsSectionExpanded('mJAIBridgeAgentIdentities')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJAIBridgeAgentIdentities', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-related\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n</mj-record-form-container>\n}\n", styles: ["/* AI Bridge Provider capability editor \u2014 labeled-toggle groups for the\n 16 SupportedFeatures flags. All colors via design tokens (dark-mode safe). */\n\n.bp-intro {\n font-size: 12px;\n line-height: 1.5;\n color: var(--mj-text-secondary);\n margin: 0 0 14px;\n max-width: 92ch;\n}\n.bp-intro code {\n font-family: ui-monospace, monospace;\n font-size: 11px;\n padding: 1px 5px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.bp-group { margin-bottom: 18px; }\n.bp-group:last-child { margin-bottom: 0; }\n\n.bp-group-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.06em;\n font-weight: 700;\n color: var(--mj-text-muted);\n margin: 0 0 8px;\n}\n.bp-group-header i { color: var(--mj-brand-primary); }\n\n.bp-feature-list {\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.bp-feature-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 16px;\n padding: 10px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n.bp-feature-row:first-child { border-top: 0; }\n\n.bp-feature-row .label { display: flex; flex-direction: column; gap: 2px; min-width: 0; }\n.bp-feature-row .label .t { font-size: 13px; font-weight: 600; color: var(--mj-text-primary); }\n.bp-feature-row .label .d { font-size: 11px; color: var(--mj-text-muted); line-height: 1.35; }\n\n.bp-switch {\n position: relative;\n flex: 0 0 auto;\n width: 36px;\n height: 20px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n cursor: pointer;\n transition: background 0.15s;\n}\n.bp-switch::after {\n content: \"\";\n position: absolute;\n top: 2px;\n left: 2px;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n background: var(--mj-bg-surface);\n transition: left 0.15s;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n.bp-switch.on { background: var(--mj-brand-primary); }\n.bp-switch.on::after { left: 18px; }\n.bp-switch.disabled { opacity: 0.5; cursor: not-allowed; }\n"] }]
250
+ }], null, null); })();
251
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJAIBridgeProviderFormComponentExtended, { className: "MJAIBridgeProviderFormComponentExtended", filePath: "src/lib/custom/BridgeProviders/bridge-provider-form.component.ts", lineNumber: 39 }); })();
252
+ /** Tree-shake guard — invoked from the custom-forms module loader. */
253
+ export function LoadMJAIBridgeProviderFormComponentExtended() {
254
+ /* no-op marker */
255
+ }
256
+ //# sourceMappingURL=bridge-provider-form.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-provider-form.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/BridgeProviders/bridge-provider-form.component.ts","../../../../src/lib/custom/BridgeProviders/bridge-provider-form.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { RegisterClass } from '@memberjunction/global';\nimport { BaseFormComponent } from '@memberjunction/ng-base-forms';\nimport { MJAIBridgeProviderEntity } from '@memberjunction/core-entities';\nimport { MJAIBridgeProviderFormComponent } from '../../generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component';\nimport {\n BRIDGE_FEATURE_GROUPS,\n BridgeFeatureGroup,\n BridgeFeatureKey,\n countEnabledFeatures,\n isFeatureEnabled,\n setFeature,\n} from './bridge-provider-features';\n\n/**\n * Custom form for 'MJ: AI Bridge Providers' (Pattern 2 — full override of the\n * generated form). The standout addition is a **capability editor**: the 16\n * `SupportedFeatures` flags rendered as labeled toggles, grouped into Join\n * methods / Media tracks / Signals & telephony.\n *\n * The toggles bind through the entity's typed `SupportedFeaturesObject`\n * accessor (which serializes to/from the `SupportedFeatures` JSON column). On\n * each toggle we read the current object, produce a fresh object via the pure\n * `setFeature` helper, and write it back through the setter — a fresh reference\n * is required so the accessor's parse-cache invalidates and dirty tracking\n * fires. Disabling omits the key (matching \"NULL/omitted = unsupported\").\n *\n * The remaining provider fields (Name / Description / BridgeType / DriverClass\n * / Status / Configuration / ConfigSchema) and the related-entity grids keep\n * the generated panels.\n */\n@RegisterClass(BaseFormComponent, 'MJ: AI Bridge Providers')\n@Component({\n standalone: false,\n selector: 'mj-ai-bridge-provider-form',\n templateUrl: './bridge-provider-form.component.html',\n styleUrls: ['./bridge-provider-form.component.css'],\n})\nexport class MJAIBridgeProviderFormComponentExtended extends MJAIBridgeProviderFormComponent {\n public override record!: MJAIBridgeProviderEntity;\n\n /** Static editor layout (16 flags, 3 groups). */\n public readonly FeatureGroups: readonly BridgeFeatureGroup[] = BRIDGE_FEATURE_GROUPS;\n\n /**\n * Register section state for the custom layout. We don't call\n * `super.ngOnInit()`'s `initSections` because this form restructures the\n * sections (adds `supportedFeatures` + `configurationSchema`, splits the\n * generated \"Technical Capabilities\" panel), so we register our own keys.\n */\n override async ngOnInit(): Promise<void> {\n await super.ngOnInit();\n this.initSections([\n { sectionKey: 'providerInformation', sectionName: 'Provider Information', isExpanded: true },\n { sectionKey: 'providerConfiguration', sectionName: 'Provider Configuration', isExpanded: true },\n { sectionKey: 'supportedFeatures', sectionName: 'Supported Features', isExpanded: true },\n { sectionKey: 'configurationSchema', sectionName: 'Configuration Schema', isExpanded: false },\n { sectionKey: 'systemMetadata', sectionName: 'System Metadata', isExpanded: false },\n { sectionKey: 'mJAIAgentSessionBridges', sectionName: 'AI Agent Session Bridges', isExpanded: false },\n { sectionKey: 'mJAIBridgeProviderChannels', sectionName: 'AI Bridge Provider Channels', isExpanded: false },\n { sectionKey: 'mJAIBridgeAgentIdentities', sectionName: 'AI Bridge Agent Identities', isExpanded: false },\n ]);\n }\n\n /** Count of enabled capabilities — drives the panel badge. */\n public get EnabledFeatureCount(): number {\n return countEnabledFeatures(this.record?.SupportedFeaturesObject ?? null);\n }\n\n /** Read a single capability flag for the template. */\n public IsFeatureOn(key: BridgeFeatureKey): boolean {\n return isFeatureEnabled(this.record?.SupportedFeaturesObject ?? null, key);\n }\n\n /**\n * Toggle a capability flag. Reads the current typed object, builds a fresh\n * object with the flag changed, and assigns it back through the typed\n * setter (which re-serializes to the JSON column and marks the field dirty).\n */\n public ToggleFeature(key: BridgeFeatureKey, enabled: boolean): void {\n if (!this.record || !this.EditMode) {\n return;\n }\n this.record.SupportedFeaturesObject = setFeature(\n this.record.SupportedFeaturesObject ?? null,\n key,\n enabled,\n );\n }\n}\n\n/** Tree-shake guard — invoked from the custom-forms module loader. */\nexport function LoadMJAIBridgeProviderFormComponentExtended(): void {\n /* no-op marker */\n}\n","@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- Provider Information -->\n <mj-collapsible-panel\n SectionKey=\"providerInformation\"\n SectionName=\"Provider Information\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Name\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Description\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Provider Configuration -->\n <mj-collapsible-panel\n SectionKey=\"providerConfiguration\"\n SectionName=\"Provider Configuration\"\n Icon=\"fa fa-sliders-h\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BridgeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"DriverClass\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Status\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Supported Features — capability editor (the standout custom UI) -->\n <mj-collapsible-panel\n SectionKey=\"supportedFeatures\"\n SectionName=\"Supported Features\"\n Icon=\"fa fa-toggle-on\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"EnabledFeatureCount\"\n [DefaultExpanded]=\"true\">\n\n <p class=\"bp-intro\">\n The platform's declared capabilities. The engine gates optional driver calls on these flags —\n the base driver throws <code>BridgeCapabilityNotSupportedError</code> when a feature is claimed but\n unimplemented. Leave a capability off if the platform / driver does not support it.\n </p>\n\n @for (group of FeatureGroups; track group.title) {\n <div class=\"bp-group\">\n <div class=\"bp-group-header\">\n <i class=\"fa-solid {{ group.icon }}\"></i>\n <span>{{ group.title }}</span>\n </div>\n <div class=\"bp-feature-list\">\n @for (feature of group.features; track feature.key) {\n <div class=\"bp-feature-row\">\n <div class=\"label\">\n <span class=\"t\">{{ feature.label }}</span>\n <span class=\"d\">{{ feature.description }}</span>\n </div>\n <div class=\"bp-switch\"\n [class.on]=\"IsFeatureOn(feature.key)\"\n [class.disabled]=\"!EditMode\"\n (click)=\"ToggleFeature(feature.key, !IsFeatureOn(feature.key))\">\n </div>\n </div>\n }\n </div>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Configuration Schema -->\n <mj-collapsible-panel\n SectionKey=\"configurationSchema\"\n SectionName=\"Configuration Schema\"\n Icon=\"fa fa-code\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ConfigSchema\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- System Metadata -->\n <mj-collapsible-panel\n SectionKey=\"systemMetadata\"\n SectionName=\"System Metadata\"\n Icon=\"fa fa-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_CreatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_UpdatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n RELATED ENTITY PANELS\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"mJAIAgentSessionBridges\"\n SectionName=\"AI Agent Session Bridges\"\n Icon=\"fa fa-network-wired\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJAIAgentSessionBridges')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Agent Session Bridges','ProviderID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Agent Session Bridges')\"\n [AllowLoad]=\"IsSectionExpanded('mJAIAgentSessionBridges')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJAIAgentSessionBridges', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-collapsible-panel\n SectionKey=\"mJAIBridgeProviderChannels\"\n SectionName=\"AI Bridge Provider Channels\"\n Icon=\"fa fa-project-diagram\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJAIBridgeProviderChannels')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Bridge Provider Channels','ProviderID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Bridge Provider Channels')\"\n [AllowLoad]=\"IsSectionExpanded('mJAIBridgeProviderChannels')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJAIBridgeProviderChannels', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-collapsible-panel\n SectionKey=\"mJAIBridgeAgentIdentities\"\n SectionName=\"AI Bridge Agent Identities\"\n Icon=\"fa fa-id-card\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJAIBridgeAgentIdentities')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: AI Bridge Agent Identities','ProviderID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: AI Bridge Agent Identities')\"\n [AllowLoad]=\"IsSectionExpanded('mJAIBridgeAgentIdentities')\"\n [ShowToolbar]=\"false\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJAIBridgeAgentIdentities', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-related\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n</mj-record-form-container>\n}\n"]}
@@ -279,10 +279,34 @@ export declare class MJEntityFormComponentExtended extends MJEntityFormComponent
279
279
  * Returns true if the given field is inherited from a parent entity via IS-A.
280
280
  */
281
281
  IsInheritedField(field: EntityFieldInfo): boolean;
282
- /** All entities available as potential IS-A parents (excluding self and descendants) */
283
- get AvailableParentEntities(): EntityInfo[];
284
- /** Sibling entities that share the same parent type */
285
- get SiblingEntities(): EntityInfo[];
282
+ /**
283
+ * All entities available as potential IS-A parents (excluding self and
284
+ * descendants), sorted by name. Precomputed by {@link recomputeIsaEntityLists}
285
+ * whenever {@link entity} changes — previously a getter that filtered/sorted
286
+ * `md.Entities` (hundreds of rows) with per-item `UUIDsEqual` on every CD
287
+ * cycle while bound inside a template `@for`.
288
+ */
289
+ AvailableParentEntities: EntityInfo[];
290
+ /**
291
+ * Sibling entities that share the same IS-A parent type. Precomputed by
292
+ * {@link recomputeIsaEntityLists} when {@link entity} changes — previously a
293
+ * per-CD getter filtering `ParentEntityInfo.ChildEntities` with `UUIDsEqual`.
294
+ */
295
+ SiblingEntities: EntityInfo[];
296
+ /**
297
+ * Recomputes {@link AvailableParentEntities} and {@link SiblingEntities} from
298
+ * the current {@link entity}. Called from `loadExplorerData()` once the entity
299
+ * metadata is resolved — never during change detection.
300
+ *
301
+ * Accepted staleness tradeoff: these IS-A lists are built from `md.Entities`
302
+ * once per entity-load and are NOT reactive — a mid-session metadata reload
303
+ * (a newly added/removed entity) would not refresh them until this form
304
+ * re-loads. That is acceptable for the entity form (its IS-A parent/sibling
305
+ * set is effectively static within an editing session); we deliberately do
306
+ * NOT wire observable reactivity here. The former getters re-filtered/sorted
307
+ * hundreds of rows on every CD, which was the perf cost we removed.
308
+ */
309
+ private recomputeIsaEntityLists;
286
310
  get statusClass(): string;
287
311
  get entityIcon(): string;
288
312
  get entityDisplayName(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"entity-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Entities/entity-form.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/Entities/entity-form.component.ts"],"names":[],"mappings":"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"}
@@ -2777,6 +2777,20 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
2777
2777
  this.selectedRelationship = null;
2778
2778
  this.destroy$ = new Subject();
2779
2779
  this.stateChange$ = new Subject();
2780
+ /**
2781
+ * All entities available as potential IS-A parents (excluding self and
2782
+ * descendants), sorted by name. Precomputed by {@link recomputeIsaEntityLists}
2783
+ * whenever {@link entity} changes — previously a getter that filtered/sorted
2784
+ * `md.Entities` (hundreds of rows) with per-item `UUIDsEqual` on every CD
2785
+ * cycle while bound inside a template `@for`.
2786
+ */
2787
+ this.AvailableParentEntities = [];
2788
+ /**
2789
+ * Sibling entities that share the same IS-A parent type. Precomputed by
2790
+ * {@link recomputeIsaEntityLists} when {@link entity} changes — previously a
2791
+ * per-CD getter filtering `ParentEntityInfo.ChildEntities` with `UUIDsEqual`.
2792
+ */
2793
+ this.SiblingEntities = [];
2780
2794
  }
2781
2795
  get _metadata() { return this.ProviderToUse; }
2782
2796
  async ngOnInit() {
@@ -2811,6 +2825,7 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
2811
2825
  this.buildISAFieldGroups();
2812
2826
  this.buildRelationships();
2813
2827
  this.buildOrganicKeys();
2828
+ this.recomputeIsaEntityLists();
2814
2829
  this.updateNavBadges();
2815
2830
  // Load row count asynchronously (don't block UI)
2816
2831
  this.loadRowCountAsync();
@@ -3429,10 +3444,25 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
3429
3444
  IsInheritedField(field) {
3430
3445
  return this.GetISAFieldSource(field) !== null;
3431
3446
  }
3432
- /** All entities available as potential IS-A parents (excluding self and descendants) */
3433
- get AvailableParentEntities() {
3434
- if (!this.entity)
3435
- return [];
3447
+ /**
3448
+ * Recomputes {@link AvailableParentEntities} and {@link SiblingEntities} from
3449
+ * the current {@link entity}. Called from `loadExplorerData()` once the entity
3450
+ * metadata is resolved — never during change detection.
3451
+ *
3452
+ * Accepted staleness tradeoff: these IS-A lists are built from `md.Entities`
3453
+ * once per entity-load and are NOT reactive — a mid-session metadata reload
3454
+ * (a newly added/removed entity) would not refresh them until this form
3455
+ * re-loads. That is acceptable for the entity form (its IS-A parent/sibling
3456
+ * set is effectively static within an editing session); we deliberately do
3457
+ * NOT wire observable reactivity here. The former getters re-filtered/sorted
3458
+ * hundreds of rows on every CD, which was the perf cost we removed.
3459
+ */
3460
+ recomputeIsaEntityLists() {
3461
+ if (!this.entity) {
3462
+ this.AvailableParentEntities = [];
3463
+ this.SiblingEntities = [];
3464
+ return;
3465
+ }
3436
3466
  const md = this.ProviderToUse;
3437
3467
  const descendantIds = new Set();
3438
3468
  const collectDescendants = (e) => {
@@ -3442,16 +3472,16 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
3442
3472
  }
3443
3473
  };
3444
3474
  collectDescendants(this.entity);
3445
- return md.Entities
3475
+ this.AvailableParentEntities = md.Entities
3446
3476
  .filter(e => !descendantIds.has(e.ID) && !UUIDsEqual(e.ID, this.entity.ID) && !e.VirtualEntity)
3447
3477
  .sort((a, b) => a.Name.localeCompare(b.Name));
3448
- }
3449
- /** Sibling entities that share the same parent type */
3450
- get SiblingEntities() {
3451
- if (!this.IsChildType || !this.entity?.ParentEntityInfo)
3452
- return [];
3453
- return this.entity.ParentEntityInfo.ChildEntities
3454
- .filter(e => !UUIDsEqual(e.ID, this.entity.ID));
3478
+ if (this.IsChildType && this.entity.ParentEntityInfo) {
3479
+ this.SiblingEntities = this.entity.ParentEntityInfo.ChildEntities
3480
+ .filter(e => !UUIDsEqual(e.ID, this.entity.ID));
3481
+ }
3482
+ else {
3483
+ this.SiblingEntities = [];
3484
+ }
3455
3485
  }
3456
3486
  get statusClass() {
3457
3487
  if (!this.entity)