@memberjunction/ng-core-entity-forms 6.1.0-edge.1 → 6.1.0-edge.3

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 (533) hide show
  1. package/LICENSE +180 -4
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts +12 -0
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -0
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +138 -0
  5. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -0
  6. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +20 -0
  7. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts.map +1 -0
  8. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +173 -0
  9. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -0
  10. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts +19 -2
  11. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +50 -9
  13. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts +59 -0
  15. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -0
  16. package/dist/lib/custom/AIAgents/agent-form-tabs.js +53 -0
  17. package/dist/lib/custom/AIAgents/agent-form-tabs.js.map +1 -0
  18. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +54 -0
  19. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1300 -1143
  21. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  22. package/dist/lib/custom/Actions/action-execution-log-form.component.js +193 -182
  23. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  24. package/dist/lib/custom/Companies/company-header.panel.d.ts +12 -0
  25. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -0
  26. package/dist/lib/custom/Companies/company-header.panel.js +190 -0
  27. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -0
  28. package/dist/lib/custom/Companies/company-overview.panel.d.ts +21 -0
  29. package/dist/lib/custom/Companies/company-overview.panel.d.ts.map +1 -0
  30. package/dist/lib/custom/Companies/company-overview.panel.js +180 -0
  31. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -0
  32. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts +12 -0
  33. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -0
  34. package/dist/lib/custom/Conversations/conversation-header.panel.js +150 -0
  35. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -0
  36. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +23 -0
  37. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts.map +1 -0
  38. package/dist/lib/custom/Conversations/conversation-overview.panel.js +199 -0
  39. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -0
  40. package/dist/lib/custom/Employees/employee-header.panel.d.ts +12 -0
  41. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -0
  42. package/dist/lib/custom/Employees/employee-header.panel.js +180 -0
  43. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -0
  44. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +21 -0
  45. package/dist/lib/custom/Employees/employee-overview.panel.d.ts.map +1 -0
  46. package/dist/lib/custom/Employees/employee-overview.panel.js +180 -0
  47. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -0
  48. package/dist/lib/custom/Entities/entity-form.component.d.ts +4 -1
  49. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  50. package/dist/lib/custom/Entities/entity-form.component.js +216 -173
  51. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  52. package/dist/lib/custom/Files/file-form.component.d.ts +40 -0
  53. package/dist/lib/custom/Files/file-form.component.d.ts.map +1 -0
  54. package/dist/lib/custom/Files/file-form.component.js +654 -0
  55. package/dist/lib/custom/Files/file-form.component.js.map +1 -0
  56. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.d.ts +101 -0
  57. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.d.ts.map +1 -0
  58. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js +1202 -0
  59. package/dist/lib/custom/HierarchyPanels/hierarchy-form-panels.js.map +1 -0
  60. package/dist/lib/custom/Users/user-header.panel.d.ts +12 -0
  61. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -0
  62. package/dist/lib/custom/Users/user-header.panel.js +164 -0
  63. package/dist/lib/custom/Users/user-header.panel.js.map +1 -0
  64. package/dist/lib/custom/Users/user-overview.panel.d.ts +19 -0
  65. package/dist/lib/custom/Users/user-overview.panel.d.ts.map +1 -0
  66. package/dist/lib/custom/Users/user-overview.panel.js +172 -0
  67. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -0
  68. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +25 -1
  69. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  70. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +228 -170
  71. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  72. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +49 -2
  73. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  74. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +272 -157
  75. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  76. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +9 -0
  77. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  78. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +86 -51
  79. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  80. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +118 -4
  81. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  82. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +263 -14
  83. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  84. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +49 -1
  85. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  86. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +384 -265
  87. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  88. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +10 -1
  89. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
  90. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +25 -3
  91. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
  92. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +21 -1
  93. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
  94. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +11 -0
  95. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +28 -0
  97. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -0
  98. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +120 -0
  99. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -0
  100. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts +98 -0
  101. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.d.ts.map +1 -0
  102. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js +403 -0
  103. package/dist/lib/custom/ai-agent-run/run-tree-timeline-projection.js.map +1 -0
  104. package/dist/lib/custom/custom-forms.module.d.ts +33 -29
  105. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.js +27 -9
  107. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js +3 -3
  109. package/dist/lib/generated/Entities/MJAIAction/mjaiaction.form.component.js.map +1 -1
  110. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +300 -294
  111. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  112. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js +31 -23
  113. package/dist/lib/generated/Entities/MJAIAgentCategory/mjaiagentcategory.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +3 -3
  115. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -1
  116. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js +14 -16
  117. package/dist/lib/generated/Entities/MJAIAgentNote/mjaiagentnote.form.component.js.map +1 -1
  118. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js +2 -2
  119. package/dist/lib/generated/Entities/MJAIAgentNoteType/mjaiagentnotetype.form.component.js.map +1 -1
  120. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js +8 -6
  121. package/dist/lib/generated/Entities/MJAIAgentRequest/mjaiagentrequest.form.component.js.map +1 -1
  122. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js +2 -2
  123. package/dist/lib/generated/Entities/MJAIAgentRequestType/mjaiagentrequesttype.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +123 -117
  125. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  126. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +35 -27
  127. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +47 -49
  129. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  130. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js +2 -2
  131. package/dist/lib/generated/Entities/MJAIAgentSessionBridge/mjaiagentsessionbridge.form.component.js.map +1 -1
  132. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js +3 -3
  133. package/dist/lib/generated/Entities/MJAIAgentStep/mjaiagentstep.form.component.js.map +1 -1
  134. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js +3 -3
  135. package/dist/lib/generated/Entities/MJAIAgentType/mjaiagenttype.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js +30 -22
  137. package/dist/lib/generated/Entities/MJAIArchitecture/mjaiarchitecture.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js +4 -4
  139. package/dist/lib/generated/Entities/MJAIBridgeProvider/mjaibridgeprovider.form.component.js.map +1 -1
  140. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +2 -2
  141. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -1
  142. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js +72 -64
  143. package/dist/lib/generated/Entities/MJAIConfiguration/mjaiconfiguration.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js +8 -8
  145. package/dist/lib/generated/Entities/MJAIModality/mjaimodality.form.component.js.map +1 -1
  146. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +198 -196
  147. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js +2 -2
  149. package/dist/lib/generated/Entities/MJAIModelPriceType/mjaimodelpricetype.form.component.js.map +1 -1
  150. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js +2 -2
  151. package/dist/lib/generated/Entities/MJAIModelPriceUnitType/mjaimodelpriceunittype.form.component.js.map +1 -1
  152. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +27 -25
  153. package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
  154. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +16 -14
  155. package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
  156. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  157. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +162 -146
  158. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  159. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.d.ts.map +1 -1
  160. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js +33 -19
  161. package/dist/lib/generated/Entities/MJAIPromptCategory/mjaipromptcategory.form.component.js.map +1 -1
  162. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +2 -2
  163. package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
  164. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +85 -79
  165. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  166. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js +2 -2
  167. package/dist/lib/generated/Entities/MJAIPromptRunMedia/mjaipromptrunmedia.form.component.js.map +1 -1
  168. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js +2 -2
  169. package/dist/lib/generated/Entities/MJAIPromptType/mjaiprompttype.form.component.js.map +1 -1
  170. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +7 -7
  171. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +11 -11
  173. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js +3 -3
  175. package/dist/lib/generated/Entities/MJAIVendorTypeDefinition/mjaivendortypedefinition.form.component.js.map +1 -1
  176. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js +4 -4
  177. package/dist/lib/generated/Entities/MJAPIApplication/mjapiapplication.form.component.js.map +1 -1
  178. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js +4 -4
  179. package/dist/lib/generated/Entities/MJAPIKey/mjapikey.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js +36 -28
  181. package/dist/lib/generated/Entities/MJAPIScope/mjapiscope.form.component.js.map +1 -1
  182. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  183. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +121 -95
  184. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  185. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js +36 -28
  186. package/dist/lib/generated/Entities/MJActionCategory/mjactioncategory.form.component.js.map +1 -1
  187. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js +2 -2
  188. package/dist/lib/generated/Entities/MJActionContextType/mjactioncontexttype.form.component.js.map +1 -1
  189. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js +13 -13
  190. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js.map +1 -1
  191. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js +2 -2
  192. package/dist/lib/generated/Entities/MJActionFilter/mjactionfilter.form.component.js.map +1 -1
  193. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js +2 -2
  194. package/dist/lib/generated/Entities/MJActionParam/mjactionparam.form.component.js.map +1 -1
  195. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +11 -11
  196. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  197. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js +3 -3
  198. package/dist/lib/generated/Entities/MJArchiveConfiguration/mjarchiveconfiguration.form.component.js.map +1 -1
  199. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js +2 -2
  200. package/dist/lib/generated/Entities/MJArchiveRun/mjarchiverun.form.component.js.map +1 -1
  201. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js +4 -4
  202. package/dist/lib/generated/Entities/MJArtifact/mjartifact.form.component.js.map +1 -1
  203. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js +48 -40
  204. package/dist/lib/generated/Entities/MJArtifactType/mjartifacttype.form.component.js.map +1 -1
  205. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js +7 -7
  206. package/dist/lib/generated/Entities/MJArtifactVersion/mjartifactversion.form.component.js.map +1 -1
  207. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js +29 -21
  208. package/dist/lib/generated/Entities/MJAuditLogType/mjauditlogtype.form.component.js.map +1 -1
  209. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.d.ts +10 -0
  210. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.d.ts.map +1 -0
  211. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.js +108 -0
  212. package/dist/lib/generated/Entities/MJAuthenticationProvider/mjauthenticationprovider.form.component.js.map +1 -0
  213. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js +50 -42
  214. package/dist/lib/generated/Entities/MJAuthorization/mjauthorization.form.component.js.map +1 -1
  215. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js +2 -2
  216. package/dist/lib/generated/Entities/MJClusterAnalysis/mjclusteranalysis.form.component.js.map +1 -1
  217. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +44 -36
  218. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  219. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js +3 -3
  220. package/dist/lib/generated/Entities/MJCommunicationBaseMessageType/mjcommunicationbasemessagetype.form.component.js.map +1 -1
  221. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js +2 -2
  222. package/dist/lib/generated/Entities/MJCommunicationProvider/mjcommunicationprovider.form.component.js.map +1 -1
  223. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js +2 -2
  224. package/dist/lib/generated/Entities/MJCommunicationProviderMessageType/mjcommunicationprovidermessagetype.form.component.js.map +1 -1
  225. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js +2 -2
  226. package/dist/lib/generated/Entities/MJCommunicationRun/mjcommunicationrun.form.component.js.map +1 -1
  227. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js +7 -7
  228. package/dist/lib/generated/Entities/MJCompany/mjcompany.form.component.js.map +1 -1
  229. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.d.ts.map +1 -1
  230. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +32 -14
  231. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
  232. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js +3 -3
  233. package/dist/lib/generated/Entities/MJCompanyIntegrationEntityMap/mjcompanyintegrationentitymap.form.component.js.map +1 -1
  234. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.d.ts.map +1 -1
  235. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js +44 -26
  236. package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js.map +1 -1
  237. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js +2 -2
  238. package/dist/lib/generated/Entities/MJCompanyIntegrationRunDetail/mjcompanyintegrationrundetail.form.component.js.map +1 -1
  239. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js +5 -5
  240. package/dist/lib/generated/Entities/MJComponent/mjcomponent.form.component.js.map +1 -1
  241. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js +2 -2
  242. package/dist/lib/generated/Entities/MJComponentLibrary/mjcomponentlibrary.form.component.js.map +1 -1
  243. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js +2 -2
  244. package/dist/lib/generated/Entities/MJComponentRegistry/mjcomponentregistry.form.component.js.map +1 -1
  245. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js +3 -3
  246. package/dist/lib/generated/Entities/MJContentFileType/mjcontentfiletype.form.component.js.map +1 -1
  247. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js +60 -52
  248. package/dist/lib/generated/Entities/MJContentItem/mjcontentitem.form.component.js.map +1 -1
  249. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js +28 -20
  250. package/dist/lib/generated/Entities/MJContentItemChunk/mjcontentitemchunk.form.component.js.map +1 -1
  251. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js +2 -2
  252. package/dist/lib/generated/Entities/MJContentProcessRun/mjcontentprocessrun.form.component.js.map +1 -1
  253. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js +2 -2
  254. package/dist/lib/generated/Entities/MJContentProcessRunDetail/mjcontentprocessrundetail.form.component.js.map +1 -1
  255. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +6 -6
  256. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  257. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js +4 -4
  258. package/dist/lib/generated/Entities/MJContentSourceType/mjcontentsourcetype.form.component.js.map +1 -1
  259. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +3 -3
  260. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  261. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +77 -79
  262. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  263. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js +4 -4
  264. package/dist/lib/generated/Entities/MJConversationArtifact/mjconversationartifact.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js +2 -2
  266. package/dist/lib/generated/Entities/MJConversationArtifactVersion/mjconversationartifactversion.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +76 -68
  268. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  269. package/dist/lib/generated/Entities/MJCountry/mjcountry.form.component.js +3 -3
  270. package/dist/lib/generated/Entities/MJCountry/mjcountry.form.component.js.map +1 -1
  271. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  272. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +42 -24
  273. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  274. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.d.ts.map +1 -1
  275. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js +33 -19
  276. package/dist/lib/generated/Entities/MJCredentialCategory/mjcredentialcategory.form.component.js.map +1 -1
  277. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js +6 -6
  278. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js.map +1 -1
  279. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js +5 -5
  280. package/dist/lib/generated/Entities/MJDashboard/mjdashboard.form.component.js.map +1 -1
  281. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.d.ts.map +1 -1
  282. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js +47 -33
  283. package/dist/lib/generated/Entities/MJDashboardCategory/mjdashboardcategory.form.component.js.map +1 -1
  284. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js +3 -3
  285. package/dist/lib/generated/Entities/MJDataContext/mjdatacontext.form.component.js.map +1 -1
  286. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js +2 -2
  287. package/dist/lib/generated/Entities/MJDataset/mjdataset.form.component.js.map +1 -1
  288. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js +2 -2
  289. package/dist/lib/generated/Entities/MJDuplicateRun/mjduplicaterun.form.component.js.map +1 -1
  290. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +2 -2
  291. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  292. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js +6 -6
  293. package/dist/lib/generated/Entities/MJEmployee/mjemployee.form.component.js.map +1 -1
  294. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js +2 -2
  295. package/dist/lib/generated/Entities/MJEncryptionAlgorithm/mjencryptionalgorithm.form.component.js.map +1 -1
  296. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js +2 -2
  297. package/dist/lib/generated/Entities/MJEncryptionKey/mjencryptionkey.form.component.js.map +1 -1
  298. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js +2 -2
  299. package/dist/lib/generated/Entities/MJEncryptionKeySource/mjencryptionkeysource.form.component.js.map +1 -1
  300. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  301. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +604 -530
  302. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  303. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js +42 -40
  304. package/dist/lib/generated/Entities/MJEntityAction/mjentityaction.form.component.js.map +1 -1
  305. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js +3 -3
  306. package/dist/lib/generated/Entities/MJEntityActionInvocationType/mjentityactioninvocationtype.form.component.js.map +1 -1
  307. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.d.ts.map +1 -1
  308. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js +7 -13
  309. package/dist/lib/generated/Entities/MJEntityActionParam/mjentityactionparam.form.component.js.map +1 -1
  310. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js +2 -2
  311. package/dist/lib/generated/Entities/MJEntityCommunicationMessageType/mjentitycommunicationmessagetype.form.component.js.map +1 -1
  312. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +5 -5
  313. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  314. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js +2 -2
  315. package/dist/lib/generated/Entities/MJEntityDocumentType/mjentitydocumenttype.form.component.js.map +1 -1
  316. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  317. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +28 -18
  318. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  319. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +2 -2
  320. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  321. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js +2 -2
  322. package/dist/lib/generated/Entities/MJEntityRecordDocument/mjentityrecorddocument.form.component.js.map +1 -1
  323. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js +10 -8
  324. package/dist/lib/generated/Entities/MJEntityRelationship/mjentityrelationship.form.component.js.map +1 -1
  325. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js +2 -2
  326. package/dist/lib/generated/Entities/MJEntityRelationshipDisplayComponent/mjentityrelationshipdisplaycomponent.form.component.js.map +1 -1
  327. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +8 -8
  328. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  329. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js +2 -2
  330. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js.map +1 -1
  331. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js +2 -2
  332. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js.map +1 -1
  333. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js +2 -2
  334. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js.map +1 -1
  335. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.js +3 -3
  336. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.js.map +1 -1
  337. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.js +2 -2
  338. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.js.map +1 -1
  339. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +9 -9
  340. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  341. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.d.ts.map +1 -1
  342. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js +33 -19
  343. package/dist/lib/generated/Entities/MJFileCategory/mjfilecategory.form.component.js.map +1 -1
  344. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js +7 -7
  345. package/dist/lib/generated/Entities/MJFileStorageAccount/mjfilestorageaccount.form.component.js.map +1 -1
  346. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +6 -6
  347. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  348. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.d.ts +10 -0
  349. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.d.ts.map +1 -0
  350. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.js +82 -0
  351. package/dist/lib/generated/Entities/MJFormChromeRule/mjformchromerule.form.component.js.map +1 -0
  352. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.d.ts.map +1 -1
  353. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js +33 -19
  354. package/dist/lib/generated/Entities/MJGeneratedCodeCategory/mjgeneratedcodecategory.form.component.js.map +1 -1
  355. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +5 -5
  356. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  357. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +3 -3
  358. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -1
  359. package/dist/lib/generated/Entities/MJIntegrationSourceType/mjintegrationsourcetype.form.component.js +2 -2
  360. package/dist/lib/generated/Entities/MJIntegrationSourceType/mjintegrationsourcetype.form.component.js.map +1 -1
  361. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js +3 -3
  362. package/dist/lib/generated/Entities/MJLibrary/mjlibrary.form.component.js.map +1 -1
  363. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js +6 -6
  364. package/dist/lib/generated/Entities/MJList/mjlist.form.component.js.map +1 -1
  365. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.d.ts.map +1 -1
  366. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js +33 -19
  367. package/dist/lib/generated/Entities/MJListCategory/mjlistcategory.form.component.js.map +1 -1
  368. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js +4 -4
  369. package/dist/lib/generated/Entities/MJMCPServer/mjmcpserver.form.component.js.map +1 -1
  370. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js +7 -7
  371. package/dist/lib/generated/Entities/MJMCPServerConnection/mjmcpserverconnection.form.component.js.map +1 -1
  372. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js +4 -4
  373. package/dist/lib/generated/Entities/MJMCPServerTool/mjmcpservertool.form.component.js.map +1 -1
  374. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js +5 -5
  375. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js.map +1 -1
  376. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js +2 -2
  377. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js.map +1 -1
  378. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +3 -3
  379. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
  380. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +3 -3
  381. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
  382. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js +6 -6
  383. package/dist/lib/generated/Entities/MJMagicLinkInvite/mjmagiclinkinvite.form.component.js.map +1 -1
  384. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.d.ts +10 -0
  385. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.d.ts.map +1 -0
  386. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.js +117 -0
  387. package/dist/lib/generated/Entities/MJMaterializedResult/mjmaterializedresult.form.component.js.map +1 -0
  388. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.d.ts +10 -0
  389. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.d.ts.map +1 -0
  390. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.js +58 -0
  391. package/dist/lib/generated/Entities/MJMaterializedResultQuery/mjmaterializedresultquery.form.component.js.map +1 -0
  392. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +4 -4
  393. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  394. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +2 -2
  395. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  396. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +38 -30
  397. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  398. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  399. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +85 -65
  400. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  401. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.d.ts.map +1 -1
  402. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js +33 -19
  403. package/dist/lib/generated/Entities/MJQueryCategory/mjquerycategory.form.component.js.map +1 -1
  404. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js +2 -2
  405. package/dist/lib/generated/Entities/MJQueue/mjqueue.form.component.js.map +1 -1
  406. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js +2 -2
  407. package/dist/lib/generated/Entities/MJQueueType/mjqueuetype.form.component.js.map +1 -1
  408. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.d.ts +10 -0
  409. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.d.ts.map +1 -0
  410. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.js +64 -0
  411. package/dist/lib/generated/Entities/MJRSUPendingWork/mjrsupendingwork.form.component.js.map +1 -0
  412. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js +2 -2
  413. package/dist/lib/generated/Entities/MJRecommendation/mjrecommendation.form.component.js.map +1 -1
  414. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js +2 -2
  415. package/dist/lib/generated/Entities/MJRecommendationProvider/mjrecommendationprovider.form.component.js.map +1 -1
  416. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js +2 -2
  417. package/dist/lib/generated/Entities/MJRecommendationRun/mjrecommendationrun.form.component.js.map +1 -1
  418. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +21 -23
  419. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
  420. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js +2 -2
  421. package/dist/lib/generated/Entities/MJRecordChangeReplayRun/mjrecordchangereplayrun.form.component.js.map +1 -1
  422. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js +3 -3
  423. package/dist/lib/generated/Entities/MJRecordMergeLog/mjrecordmergelog.form.component.js.map +1 -1
  424. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +4 -4
  425. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  426. package/dist/lib/generated/Entities/MJRecordProcessCategory/mjrecordprocesscategory.form.component.d.ts.map +1 -1
  427. package/dist/lib/generated/Entities/MJRecordProcessCategory/mjrecordprocesscategory.form.component.js +33 -19
  428. package/dist/lib/generated/Entities/MJRecordProcessCategory/mjrecordprocesscategory.form.component.js.map +1 -1
  429. package/dist/lib/generated/Entities/MJRemoteOperationCategory/mjremoteoperationcategory.form.component.d.ts.map +1 -1
  430. package/dist/lib/generated/Entities/MJRemoteOperationCategory/mjremoteoperationcategory.form.component.js +33 -19
  431. package/dist/lib/generated/Entities/MJRemoteOperationCategory/mjremoteoperationcategory.form.component.js.map +1 -1
  432. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js +6 -6
  433. package/dist/lib/generated/Entities/MJResourceType/mjresourcetype.form.component.js.map +1 -1
  434. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +17 -17
  435. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  436. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js +7 -7
  437. package/dist/lib/generated/Entities/MJRowLevelSecurityFilter/mjrowlevelsecurityfilter.form.component.js.map +1 -1
  438. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js +3 -3
  439. package/dist/lib/generated/Entities/MJSQLDialect/mjsqldialect.form.component.js.map +1 -1
  440. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +4 -4
  441. package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
  442. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js +4 -4
  443. package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js.map +1 -1
  444. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js +2 -2
  445. package/dist/lib/generated/Entities/MJScheduledJobType/mjscheduledjobtype.form.component.js.map +1 -1
  446. package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js +2 -2
  447. package/dist/lib/generated/Entities/MJSearchProvider/mjsearchprovider.form.component.js.map +1 -1
  448. package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js +10 -10
  449. package/dist/lib/generated/Entities/MJSearchScope/mjsearchscope.form.component.js.map +1 -1
  450. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js +2 -2
  451. package/dist/lib/generated/Entities/MJSignatureAccount/mjsignatureaccount.form.component.js.map +1 -1
  452. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js +2 -2
  453. package/dist/lib/generated/Entities/MJSignatureProvider/mjsignatureprovider.form.component.js.map +1 -1
  454. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js +4 -4
  455. package/dist/lib/generated/Entities/MJSignatureRequest/mjsignaturerequest.form.component.js.map +1 -1
  456. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js +29 -21
  457. package/dist/lib/generated/Entities/MJSkill/mjskill.form.component.js.map +1 -1
  458. package/dist/lib/generated/Entities/MJStateProvince/mjstateprovince.form.component.js +2 -2
  459. package/dist/lib/generated/Entities/MJStateProvince/mjstateprovince.form.component.js.map +1 -1
  460. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.d.ts.map +1 -1
  461. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js +104 -92
  462. package/dist/lib/generated/Entities/MJTag/mjtag.form.component.js.map +1 -1
  463. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  464. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +69 -29
  465. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  466. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.d.ts.map +1 -1
  467. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js +16 -4
  468. package/dist/lib/generated/Entities/MJTaskDependency/mjtaskdependency.form.component.js.map +1 -1
  469. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js +2 -2
  470. package/dist/lib/generated/Entities/MJTaskType/mjtasktype.form.component.js.map +1 -1
  471. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js +10 -10
  472. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js.map +1 -1
  473. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.d.ts.map +1 -1
  474. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js +33 -19
  475. package/dist/lib/generated/Entities/MJTemplateCategory/mjtemplatecategory.form.component.js.map +1 -1
  476. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js +2 -2
  477. package/dist/lib/generated/Entities/MJTemplateContent/mjtemplatecontent.form.component.js.map +1 -1
  478. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js +2 -2
  479. package/dist/lib/generated/Entities/MJTemplateContentType/mjtemplatecontenttype.form.component.js.map +1 -1
  480. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +3 -3
  481. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  482. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js +7 -7
  483. package/dist/lib/generated/Entities/MJTestRun/mjtestrun.form.component.js.map +1 -1
  484. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js +2 -2
  485. package/dist/lib/generated/Entities/MJTestRunOutputType/mjtestrunoutputtype.form.component.js.map +1 -1
  486. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +39 -31
  487. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  488. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +2 -2
  489. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
  490. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js +3 -3
  491. package/dist/lib/generated/Entities/MJTestType/mjtesttype.form.component.js.map +1 -1
  492. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +105 -105
  493. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  494. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js +2 -2
  495. package/dist/lib/generated/Entities/MJUserApplication/mjuserapplication.form.component.js.map +1 -1
  496. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js +3 -3
  497. package/dist/lib/generated/Entities/MJUserNotificationType/mjusernotificationtype.form.component.js.map +1 -1
  498. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js +3 -3
  499. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js.map +1 -1
  500. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js +6 -6
  501. package/dist/lib/generated/Entities/MJUserView/mjuserview.form.component.js.map +1 -1
  502. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.d.ts.map +1 -1
  503. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js +33 -19
  504. package/dist/lib/generated/Entities/MJUserViewCategory/mjuserviewcategory.form.component.js.map +1 -1
  505. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js +2 -2
  506. package/dist/lib/generated/Entities/MJUserViewRun/mjuserviewrun.form.component.js.map +1 -1
  507. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +3 -3
  508. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
  509. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +6 -6
  510. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  511. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js +44 -36
  512. package/dist/lib/generated/Entities/MJVersionLabel/mjversionlabel.form.component.js.map +1 -1
  513. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js +2 -2
  514. package/dist/lib/generated/Entities/MJViewType/mjviewtype.form.component.js.map +1 -1
  515. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js +2 -2
  516. package/dist/lib/generated/Entities/MJWorkspace/mjworkspace.form.component.js.map +1 -1
  517. package/dist/lib/generated/generated-forms.module.d.ts +290 -285
  518. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  519. package/dist/lib/generated/generated-forms.module.js +126 -111
  520. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  521. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.d.ts +37 -0
  522. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.d.ts.map +1 -0
  523. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.js +185 -0
  524. package/dist/lib/panels/form-chrome/entity-form-chrome-editor.component.js.map +1 -0
  525. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.d.ts +20 -0
  526. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.d.ts.map +1 -0
  527. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js +87 -0
  528. package/dist/lib/panels/form-chrome/entity-relationship-form-role.panel.js.map +1 -0
  529. package/dist/public-api.d.ts +12 -0
  530. package/dist/public-api.d.ts.map +1 -1
  531. package/dist/public-api.js +14 -2
  532. package/dist/public-api.js.map +1 -1
  533. package/package.json +44 -42
@@ -7,7 +7,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { Component, ChangeDetectionStrategy, inject } from '@angular/core';
8
8
  import { Subject } from 'rxjs';
9
9
  import { debounceTime, takeUntil } from 'rxjs/operators';
10
- import { CompositeKey, RunView } from '@memberjunction/core';
10
+ import { CompositeKey, RunView, } from '@memberjunction/core';
11
11
  import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
12
12
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
13
13
  import { SharedService } from '@memberjunction/ng-shared';
@@ -20,6 +20,7 @@ import * as i4 from "@memberjunction/ng-code-editor";
20
20
  import * as i5 from "@memberjunction/ng-shared-generic";
21
21
  import * as i6 from "@memberjunction/ng-entity-relationship-diagram";
22
22
  import * as i7 from "@memberjunction/ng-entity-viewer";
23
+ import * as i8 from "../../panels/form-chrome/entity-form-chrome-editor.component";
23
24
  const _c0 = () => [1, 2, 3, 4, 5];
24
25
  const _c1 = a0 => [a0];
25
26
  const _c2 = () => [];
@@ -1804,17 +1805,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template(rf,
1804
1805
  i0.ɵɵconditional(ctx_r2.entity.TrackRecordChanges ? 17 : -1);
1805
1806
  } }
1806
1807
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
1807
- i0.ɵɵelement(0, "i", 308);
1808
+ i0.ɵɵelement(0, "i", 309);
1808
1809
  i0.ɵɵtext(1, " Yes \u2014 read-only view ");
1809
1810
  } }
1810
1811
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
1811
- i0.ɵɵelement(0, "i", 309);
1812
+ i0.ɵɵelement(0, "i", 310);
1812
1813
  i0.ɵɵtext(1, " No ");
1813
1814
  } }
1814
1815
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1815
- const _r43 = i0.ɵɵgetCurrentView();
1816
- i0.ɵɵelementStart(0, "span", 310);
1817
- i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r43); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
1816
+ const _r44 = i0.ɵɵgetCurrentView();
1817
+ i0.ɵɵelementStart(0, "span", 311);
1818
+ i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
1818
1819
  i0.ɵɵtext(1);
1819
1820
  i0.ɵɵelement(2, "i", 63);
1820
1821
  i0.ɵɵelementEnd();
@@ -1824,18 +1825,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
1824
1825
  i0.ɵɵtextInterpolate1(" ", ctx_r2.ParentChain[0] == null ? null : ctx_r2.ParentChain[0].Name, " ");
1825
1826
  } }
1826
1827
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
1827
- i0.ɵɵelementStart(0, "span", 307);
1828
+ i0.ɵɵelementStart(0, "span", 308);
1828
1829
  i0.ɵɵtext(1, "None");
1829
1830
  i0.ɵɵelementEnd();
1830
1831
  } }
1831
1832
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
1832
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
1833
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
1833
1834
  i0.ɵɵtext(2, "Full Inheritance Chain");
1834
1835
  i0.ɵɵelementEnd();
1835
1836
  i0.ɵɵelementStart(3, "span", 286);
1836
1837
  i0.ɵɵtext(4);
1837
1838
  i0.ɵɵelementEnd()();
1838
- i0.ɵɵelementStart(5, "div", 305)(6, "span", 285);
1839
+ i0.ɵɵelementStart(5, "div", 306)(6, "span", 285);
1839
1840
  i0.ɵɵtext(7, "Inherited Fields");
1840
1841
  i0.ɵɵelementEnd();
1841
1842
  i0.ɵɵelementStart(8, "span", 286);
@@ -1849,23 +1850,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
1849
1850
  i0.ɵɵtextInterpolate2("", ctx_r2.InheritedFieldCount, " field", ctx_r2.InheritedFieldCount !== 1 ? "s" : "");
1850
1851
  } }
1851
1852
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_For_5_Template(rf, ctx) { if (rf & 1) {
1852
- const _r44 = i0.ɵɵgetCurrentView();
1853
- i0.ɵɵelementStart(0, "span", 311);
1854
- i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_For_5_Template_span_click_0_listener() { const child_r45 = i0.ɵɵrestoreView(_r44).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(child_r45)); });
1853
+ const _r45 = i0.ɵɵgetCurrentView();
1854
+ i0.ɵɵelementStart(0, "span", 312);
1855
+ i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_For_5_Template_span_click_0_listener() { const child_r46 = i0.ɵɵrestoreView(_r45).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(child_r46)); });
1855
1856
  i0.ɵɵtext(1);
1856
1857
  i0.ɵɵelementEnd();
1857
1858
  i0.ɵɵtext(2);
1858
1859
  } if (rf & 2) {
1859
- const child_r45 = ctx.$implicit;
1860
- const ɵ$index_1413_r46 = ctx.$index;
1861
- const ɵ$count_1413_r47 = ctx.$count;
1860
+ const child_r46 = ctx.$implicit;
1861
+ const ɵ$index_1413_r47 = ctx.$index;
1862
+ const ɵ$count_1413_r48 = ctx.$count;
1862
1863
  i0.ɵɵadvance();
1863
- i0.ɵɵtextInterpolate(child_r45.Name);
1864
+ i0.ɵɵtextInterpolate(child_r46.Name);
1864
1865
  i0.ɵɵadvance();
1865
- i0.ɵɵtextInterpolate1("", ɵ$index_1413_r46 === ɵ$count_1413_r47 - 1 ? "" : ", ", " ");
1866
+ i0.ɵɵtextInterpolate1("", ɵ$index_1413_r47 === ɵ$count_1413_r48 - 1 ? "" : ", ", " ");
1866
1867
  } }
1867
1868
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
1868
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
1869
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
1869
1870
  i0.ɵɵtext(2, "Child Types");
1870
1871
  i0.ɵɵelementEnd();
1871
1872
  i0.ɵɵelementStart(3, "span", 286);
@@ -1877,23 +1878,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
1877
1878
  i0.ɵɵrepeater(ctx_r2.ChildEntities);
1878
1879
  } }
1879
1880
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_For_5_Template(rf, ctx) { if (rf & 1) {
1880
- const _r48 = i0.ɵɵgetCurrentView();
1881
- i0.ɵɵelementStart(0, "span", 311);
1882
- i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_For_5_Template_span_click_0_listener() { const sibling_r49 = i0.ɵɵrestoreView(_r48).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(sibling_r49)); });
1881
+ const _r49 = i0.ɵɵgetCurrentView();
1882
+ i0.ɵɵelementStart(0, "span", 312);
1883
+ i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_For_5_Template_span_click_0_listener() { const sibling_r50 = i0.ɵɵrestoreView(_r49).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(sibling_r50)); });
1883
1884
  i0.ɵɵtext(1);
1884
1885
  i0.ɵɵelementEnd();
1885
1886
  i0.ɵɵtext(2);
1886
1887
  } if (rf & 2) {
1887
- const sibling_r49 = ctx.$implicit;
1888
- const ɵ$index_1426_r50 = ctx.$index;
1889
- const ɵ$count_1426_r51 = ctx.$count;
1888
+ const sibling_r50 = ctx.$implicit;
1889
+ const ɵ$index_1426_r51 = ctx.$index;
1890
+ const ɵ$count_1426_r52 = ctx.$count;
1890
1891
  i0.ɵɵadvance();
1891
- i0.ɵɵtextInterpolate(sibling_r49.Name);
1892
+ i0.ɵɵtextInterpolate(sibling_r50.Name);
1892
1893
  i0.ɵɵadvance();
1893
- i0.ɵɵtextInterpolate1("", ɵ$index_1426_r50 === ɵ$count_1426_r51 - 1 ? "" : ", ", " ");
1894
+ i0.ɵɵtextInterpolate1("", ɵ$index_1426_r51 === ɵ$count_1426_r52 - 1 ? "" : ", ", " ");
1894
1895
  } }
1895
1896
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1896
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
1897
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
1897
1898
  i0.ɵɵtext(2, "Sibling Types");
1898
1899
  i0.ɵɵelementEnd();
1899
1900
  i0.ɵɵelementStart(3, "span", 286);
@@ -1905,11 +1906,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
1905
1906
  i0.ɵɵrepeater(ctx_r2.SiblingEntities);
1906
1907
  } }
1907
1908
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
1908
- i0.ɵɵelement(0, "i", 312);
1909
+ i0.ɵɵelement(0, "i", 313);
1909
1910
  i0.ɵɵtext(1, " Enforced \u2014 a parent record can only be one child type ");
1910
1911
  } }
1911
1912
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
1912
- i0.ɵɵelementStart(0, "span", 307);
1913
+ i0.ɵɵelementStart(0, "span", 308);
1913
1914
  i0.ɵɵtext(1, "N/A");
1914
1915
  i0.ɵɵelementEnd();
1915
1916
  } }
@@ -1918,26 +1919,26 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
1918
1919
  i0.ɵɵelement(2, "i", 49);
1919
1920
  i0.ɵɵtext(3, " Type Relationship (IS-A) ");
1920
1921
  i0.ɵɵelementEnd();
1921
- i0.ɵɵelementStart(4, "div", 283)(5, "div", 305)(6, "span", 285);
1922
+ i0.ɵɵelementStart(4, "div", 283)(5, "div", 306)(6, "span", 285);
1922
1923
  i0.ɵɵtext(7, "Virtual Entity");
1923
1924
  i0.ɵɵelementEnd();
1924
1925
  i0.ɵɵelementStart(8, "span", 286);
1925
1926
  i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_9_Template, 2, 0)(10, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_10_Template, 2, 0);
1926
1927
  i0.ɵɵelementEnd()();
1927
- i0.ɵɵelementStart(11, "div", 305)(12, "span", 285);
1928
+ i0.ɵɵelementStart(11, "div", 306)(12, "span", 285);
1928
1929
  i0.ɵɵtext(13, "Parent Entity");
1929
1930
  i0.ɵɵelementEnd();
1930
1931
  i0.ɵɵelementStart(14, "span", 286);
1931
- i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template, 3, 1, "span", 306)(16, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_16_Template, 2, 0, "span", 307);
1932
+ i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template, 3, 1, "span", 307)(16, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_16_Template, 2, 0, "span", 308);
1932
1933
  i0.ɵɵelementEnd()();
1933
1934
  i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_17_Template, 10, 3);
1934
- i0.ɵɵconditionalCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_Template, 6, 0, "div", 305);
1935
- i0.ɵɵconditionalCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_Template, 6, 0, "div", 305);
1936
- i0.ɵɵelementStart(20, "div", 305)(21, "span", 285);
1935
+ i0.ɵɵconditionalCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_Template, 6, 0, "div", 306);
1936
+ i0.ɵɵconditionalCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_Template, 6, 0, "div", 306);
1937
+ i0.ɵɵelementStart(20, "div", 306)(21, "span", 285);
1937
1938
  i0.ɵɵtext(22, "Disjoint Subtypes");
1938
1939
  i0.ɵɵelementEnd();
1939
1940
  i0.ɵɵelementStart(23, "span", 286);
1940
- i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_24_Template, 2, 0)(25, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_25_Template, 2, 0, "span", 307);
1941
+ i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_24_Template, 2, 0)(25, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_25_Template, 2, 0, "span", 308);
1941
1942
  i0.ɵɵelementEnd()()()();
1942
1943
  } if (rf & 2) {
1943
1944
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -1955,53 +1956,53 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
1955
1956
  i0.ɵɵconditional(ctx_r2.IsParentType || ctx_r2.IsChildType ? 24 : 25);
1956
1957
  } }
1957
1958
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1958
- i0.ɵɵelementStart(0, "div", 315);
1959
- i0.ɵɵelement(1, "mj-code-editor", 318);
1959
+ i0.ɵɵelementStart(0, "div", 316);
1960
+ i0.ɵɵelement(1, "mj-code-editor", 319);
1960
1961
  i0.ɵɵelementEnd();
1961
1962
  } if (rf & 2) {
1962
- const setting_r52 = i0.ɵɵnextContext().$implicit;
1963
+ const setting_r53 = i0.ɵɵnextContext().$implicit;
1963
1964
  const ctx_r2 = i0.ɵɵnextContext(4);
1964
1965
  i0.ɵɵadvance();
1965
- i0.ɵɵproperty("value", ctx_r2.formatJsonValue(setting_r52.Value))("readonly", true)("lineWrapping", true);
1966
+ i0.ɵɵproperty("value", ctx_r2.formatJsonValue(setting_r53.Value))("readonly", true)("lineWrapping", true);
1966
1967
  } }
1967
1968
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1968
- i0.ɵɵelementStart(0, "div", 316);
1969
+ i0.ɵɵelementStart(0, "div", 317);
1969
1970
  i0.ɵɵtext(1);
1970
1971
  i0.ɵɵelementEnd();
1971
1972
  } if (rf & 2) {
1972
- const setting_r52 = i0.ɵɵnextContext().$implicit;
1973
+ const setting_r53 = i0.ɵɵnextContext().$implicit;
1973
1974
  i0.ɵɵadvance();
1974
- i0.ɵɵtextInterpolate(setting_r52.Value);
1975
+ i0.ɵɵtextInterpolate(setting_r53.Value);
1975
1976
  } }
1976
1977
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
1977
- i0.ɵɵelementStart(0, "div", 317);
1978
+ i0.ɵɵelementStart(0, "div", 318);
1978
1979
  i0.ɵɵtext(1);
1979
1980
  i0.ɵɵelementEnd();
1980
1981
  } if (rf & 2) {
1981
- const setting_r52 = i0.ɵɵnextContext().$implicit;
1982
+ const setting_r53 = i0.ɵɵnextContext().$implicit;
1982
1983
  i0.ɵɵadvance();
1983
- i0.ɵɵtextInterpolate(setting_r52.Comments);
1984
+ i0.ɵɵtextInterpolate(setting_r53.Comments);
1984
1985
  } }
1985
1986
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
1986
- i0.ɵɵelementStart(0, "div", 313)(1, "div", 314);
1987
+ i0.ɵɵelementStart(0, "div", 314)(1, "div", 315);
1987
1988
  i0.ɵɵtext(2);
1988
1989
  i0.ɵɵelementEnd();
1989
- i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_3_Template, 2, 3, "div", 315)(4, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_4_Template, 2, 1, "div", 316);
1990
- i0.ɵɵconditionalCreate(5, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_5_Template, 2, 1, "div", 317);
1990
+ i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_3_Template, 2, 3, "div", 316)(4, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_4_Template, 2, 1, "div", 317);
1991
+ i0.ɵɵconditionalCreate(5, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_5_Template, 2, 1, "div", 318);
1991
1992
  i0.ɵɵelementEnd();
1992
1993
  } if (rf & 2) {
1993
- const setting_r52 = ctx.$implicit;
1994
+ const setting_r53 = ctx.$implicit;
1994
1995
  const ctx_r2 = i0.ɵɵnextContext(4);
1995
1996
  i0.ɵɵadvance(2);
1996
- i0.ɵɵtextInterpolate(setting_r52.Name);
1997
+ i0.ɵɵtextInterpolate(setting_r53.Name);
1997
1998
  i0.ɵɵadvance();
1998
- i0.ɵɵconditional(ctx_r2.isJsonValue(setting_r52.Value) ? 3 : 4);
1999
+ i0.ɵɵconditional(ctx_r2.isJsonValue(setting_r53.Value) ? 3 : 4);
1999
2000
  i0.ɵɵadvance(2);
2000
- i0.ɵɵconditional(setting_r52.Comments ? 5 : -1);
2001
+ i0.ɵɵconditional(setting_r53.Comments ? 5 : -1);
2001
2002
  } }
2002
2003
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_Template(rf, ctx) { if (rf & 1) {
2003
2004
  i0.ɵɵelementStart(0, "div", 299);
2004
- i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Template, 6, 3, "div", 313, i0.ɵɵrepeaterTrackByIdentity);
2005
+ i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Template, 6, 3, "div", 314, i0.ɵɵrepeaterTrackByIdentity);
2005
2006
  i0.ɵɵelementEnd();
2006
2007
  } if (rf & 2) {
2007
2008
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -2012,10 +2013,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
2012
2013
  i0.ɵɵelement(0, "mj-empty-state", 300);
2013
2014
  } }
2014
2015
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
2015
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
2016
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
2016
2017
  i0.ɵɵtext(2, "Catalog");
2017
2018
  i0.ɵɵelementEnd();
2018
- i0.ɵɵelementStart(3, "span", 321);
2019
+ i0.ɵɵelementStart(3, "span", 322);
2019
2020
  i0.ɵɵtext(4);
2020
2021
  i0.ɵɵelementEnd()();
2021
2022
  } if (rf & 2) {
@@ -2024,10 +2025,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
2024
2025
  i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextCatalog);
2025
2026
  } }
2026
2027
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
2027
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
2028
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
2028
2029
  i0.ɵɵtext(2, "Index");
2029
2030
  i0.ɵɵelementEnd();
2030
- i0.ɵɵelementStart(3, "span", 321);
2031
+ i0.ɵɵelementStart(3, "span", 322);
2031
2032
  i0.ɵɵtext(4);
2032
2033
  i0.ɵɵelementEnd()();
2033
2034
  } if (rf & 2) {
@@ -2036,10 +2037,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
2036
2037
  i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextIndex);
2037
2038
  } }
2038
2039
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
2039
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
2040
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
2040
2041
  i0.ɵɵtext(2, "Function");
2041
2042
  i0.ɵɵelementEnd();
2042
- i0.ɵɵelementStart(3, "span", 321);
2043
+ i0.ɵɵelementStart(3, "span", 322);
2043
2044
  i0.ɵɵtext(4);
2044
2045
  i0.ɵɵelementEnd()();
2045
2046
  } if (rf & 2) {
@@ -2048,16 +2049,16 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
2048
2049
  i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextSearchFunction);
2049
2050
  } }
2050
2051
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Template(rf, ctx) { if (rf & 1) {
2051
- i0.ɵɵelementStart(0, "div", 302)(1, "div", 305)(2, "span", 285);
2052
+ i0.ɵɵelementStart(0, "div", 302)(1, "div", 306)(2, "span", 285);
2052
2053
  i0.ɵɵtext(3, "Status");
2053
2054
  i0.ɵɵelementEnd();
2054
- i0.ɵɵelementStart(4, "span", 319);
2055
- i0.ɵɵelement(5, "i", 320);
2055
+ i0.ɵɵelementStart(4, "span", 320);
2056
+ i0.ɵɵelement(5, "i", 321);
2056
2057
  i0.ɵɵtext(6, " Enabled ");
2057
2058
  i0.ɵɵelementEnd()();
2058
- i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_7_Template, 5, 1, "div", 305);
2059
- i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_8_Template, 5, 1, "div", 305);
2060
- i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_9_Template, 5, 1, "div", 305);
2059
+ i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_7_Template, 5, 1, "div", 306);
2060
+ i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_8_Template, 5, 1, "div", 306);
2061
+ i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_9_Template, 5, 1, "div", 306);
2061
2062
  i0.ɵɵelementEnd();
2062
2063
  } if (rf & 2) {
2063
2064
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -2071,8 +2072,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
2071
2072
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_14_Template(rf, ctx) { if (rf & 1) {
2072
2073
  i0.ɵɵelement(0, "mj-empty-state", 303);
2073
2074
  } }
2074
- function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_25_Template(rf, ctx) { if (rf & 1) {
2075
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
2075
+ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_30_Template(rf, ctx) { if (rf & 1) {
2076
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
2076
2077
  i0.ɵɵtext(2, "Sample Count");
2077
2078
  i0.ɵɵelementEnd();
2078
2079
  i0.ɵɵelementStart(3, "span", 286);
@@ -2083,8 +2084,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
2083
2084
  i0.ɵɵadvance(4);
2084
2085
  i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleCount);
2085
2086
  } }
2086
- function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_26_Template(rf, ctx) { if (rf & 1) {
2087
- i0.ɵɵelementStart(0, "div", 305)(1, "span", 285);
2087
+ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_31_Template(rf, ctx) { if (rf & 1) {
2088
+ i0.ɵɵelementStart(0, "div", 306)(1, "span", 285);
2088
2089
  i0.ɵɵtext(2, "Sample Method");
2089
2090
  i0.ɵɵelementEnd();
2090
2091
  i0.ɵɵelementStart(3, "span", 286);
@@ -2096,6 +2097,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
2096
2097
  i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleMethod);
2097
2098
  } }
2098
2099
  function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template(rf, ctx) { if (rf & 1) {
2100
+ const _r43 = i0.ɵɵgetCurrentView();
2099
2101
  i0.ɵɵelementStart(0, "section", 36)(1, "div", 54);
2100
2102
  i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Template, 26, 6, "div", 296);
2101
2103
  i0.ɵɵelementStart(3, "div", 297)(4, "h3", 70);
@@ -2113,17 +2115,24 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template(rf,
2113
2115
  i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_14_Template, 1, 0, "mj-empty-state", 303);
2114
2116
  i0.ɵɵelementEnd();
2115
2117
  i0.ɵɵelementStart(15, "div", 297)(16, "h3", 70);
2116
- i0.ɵɵelement(17, "i", 304);
2117
- i0.ɵɵtext(18, " Schema Packaging ");
2118
+ i0.ɵɵelement(17, "i", 17);
2119
+ i0.ɵɵtext(18, " Form chrome ");
2118
2120
  i0.ɵɵelementEnd();
2119
- i0.ɵɵelementStart(19, "div", 283)(20, "div", 305)(21, "span", 285);
2120
- i0.ɵɵtext(22, "Rows to Pack");
2121
+ i0.ɵɵelementStart(19, "mj-entity-form-chrome-editor", 304);
2122
+ i0.ɵɵlistener("FormConfigChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template_mj_entity_form_chrome_editor_FormConfigChange_19_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnFormChromeConfigChange($event)); });
2123
+ i0.ɵɵelementEnd()();
2124
+ i0.ɵɵelementStart(20, "div", 297)(21, "h3", 70);
2125
+ i0.ɵɵelement(22, "i", 305);
2126
+ i0.ɵɵtext(23, " Schema Packaging ");
2121
2127
  i0.ɵɵelementEnd();
2122
- i0.ɵɵelementStart(23, "span", 286);
2123
- i0.ɵɵtext(24);
2128
+ i0.ɵɵelementStart(24, "div", 283)(25, "div", 306)(26, "span", 285);
2129
+ i0.ɵɵtext(27, "Rows to Pack");
2130
+ i0.ɵɵelementEnd();
2131
+ i0.ɵɵelementStart(28, "span", 286);
2132
+ i0.ɵɵtext(29);
2124
2133
  i0.ɵɵelementEnd()();
2125
- i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_25_Template, 5, 1, "div", 305);
2126
- i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_26_Template, 5, 1, "div", 305);
2134
+ i0.ɵɵconditionalCreate(30, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_30_Template, 5, 1, "div", 306);
2135
+ i0.ɵɵconditionalCreate(31, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_31_Template, 5, 1, "div", 306);
2127
2136
  i0.ɵɵelementEnd()()()();
2128
2137
  } if (rf & 2) {
2129
2138
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -2137,12 +2146,14 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template(rf,
2137
2146
  i0.ɵɵconditional(ctx_r2.entity.FullTextSearchEnabled ? 13 : -1);
2138
2147
  i0.ɵɵadvance();
2139
2148
  i0.ɵɵconditional(!ctx_r2.entity.FullTextSearchEnabled ? 14 : -1);
2149
+ i0.ɵɵadvance(5);
2150
+ i0.ɵɵproperty("FormConfig", ctx_r2.FormChromeConfig)("ParentSchemaName", ctx_r2.entity.SchemaName)("Candidates", ctx_r2.FormChromeCandidates)("EditMode", ctx_r2.EditMode);
2140
2151
  i0.ɵɵadvance(10);
2141
2152
  i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackWithSchema || "None");
2142
2153
  i0.ɵɵadvance();
2143
- i0.ɵɵconditional(ctx_r2.entity.RowsToPackSampleCount ? 25 : -1);
2154
+ i0.ɵɵconditional(ctx_r2.entity.RowsToPackSampleCount ? 30 : -1);
2144
2155
  i0.ɵɵadvance();
2145
- i0.ɵɵconditional(ctx_r2.entity.RowsToPackSampleMethod ? 26 : -1);
2156
+ i0.ɵɵconditional(ctx_r2.entity.RowsToPackSampleMethod ? 31 : -1);
2146
2157
  } }
2147
2158
  function MJEntityFormComponentExtended_Conditional_0_Conditional_62_Template(rf, ctx) { if (rf & 1) {
2148
2159
  i0.ɵɵelementStart(0, "h3");
@@ -2155,7 +2166,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_63_Template(rf,
2155
2166
  i0.ɵɵelementEnd();
2156
2167
  } }
2157
2168
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_6_Template(rf, ctx) { if (rf & 1) {
2158
- i0.ɵɵelementStart(0, "p", 324);
2169
+ i0.ɵɵelementStart(0, "p", 325);
2159
2170
  i0.ɵɵtext(1);
2160
2171
  i0.ɵɵelementEnd();
2161
2172
  } if (rf & 2) {
@@ -2164,10 +2175,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
2164
2175
  i0.ɵɵtextInterpolate(ctx_r2.selectedField.Description);
2165
2176
  } }
2166
2177
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_26_Template(rf, ctx) { if (rf & 1) {
2167
- i0.ɵɵelementStart(0, "div", 326)(1, "span", 327);
2178
+ i0.ɵɵelementStart(0, "div", 327)(1, "span", 328);
2168
2179
  i0.ɵɵtext(2, "Default");
2169
2180
  i0.ɵɵelementEnd();
2170
- i0.ɵɵelementStart(3, "span", 328);
2181
+ i0.ɵɵelementStart(3, "span", 329);
2171
2182
  i0.ɵɵtext(4);
2172
2183
  i0.ɵɵelementEnd()();
2173
2184
  } if (rf & 2) {
@@ -2176,23 +2187,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
2176
2187
  i0.ɵɵtextInterpolate(ctx_r2.selectedField.DefaultValue);
2177
2188
  } }
2178
2189
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template(rf, ctx) { if (rf & 1) {
2179
- const _r53 = i0.ɵɵgetCurrentView();
2180
- i0.ɵɵelementStart(0, "div", 330)(1, "h5");
2190
+ const _r54 = i0.ɵɵgetCurrentView();
2191
+ i0.ɵɵelementStart(0, "div", 331)(1, "h5");
2181
2192
  i0.ɵɵelement(2, "i", 44);
2182
2193
  i0.ɵɵtext(3, " IS-A Inherited Field ");
2183
2194
  i0.ɵɵelementEnd();
2184
- i0.ɵɵelementStart(4, "div", 325)(5, "div", 326)(6, "span", 327);
2195
+ i0.ɵɵelementStart(4, "div", 326)(5, "div", 327)(6, "span", 328);
2185
2196
  i0.ɵɵtext(7, "Source Entity");
2186
2197
  i0.ɵɵelementEnd();
2187
- i0.ɵɵelementStart(8, "span", 331);
2188
- i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template_span_click_8_listener() { i0.ɵɵrestoreView(_r53); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
2198
+ i0.ɵɵelementStart(8, "span", 332);
2199
+ i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template_span_click_8_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
2189
2200
  i0.ɵɵtext(9);
2190
2201
  i0.ɵɵelement(10, "i", 63);
2191
2202
  i0.ɵɵelementEnd()();
2192
- i0.ɵɵelementStart(11, "div", 326)(12, "span", 327);
2203
+ i0.ɵɵelementStart(11, "div", 327)(12, "span", 328);
2193
2204
  i0.ɵɵtext(13, "Routing");
2194
2205
  i0.ɵɵelementEnd();
2195
- i0.ɵɵelementStart(14, "span", 329);
2206
+ i0.ɵɵelementStart(14, "span", 330);
2196
2207
  i0.ɵɵtext(15, "ORM routes Set/Get to parent");
2197
2208
  i0.ɵɵelementEnd()()()();
2198
2209
  } if (rf & 2) {
@@ -2201,22 +2212,22 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
2201
2212
  i0.ɵɵtextInterpolate1(" ", ctx_r2.GetISAFieldSource(ctx_r2.selectedField), " ");
2202
2213
  } }
2203
2214
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template(rf, ctx) { if (rf & 1) {
2204
- const _r54 = i0.ɵɵgetCurrentView();
2205
- i0.ɵɵelementStart(0, "div", 322)(1, "h5");
2215
+ const _r55 = i0.ɵɵgetCurrentView();
2216
+ i0.ɵɵelementStart(0, "div", 323)(1, "h5");
2206
2217
  i0.ɵɵtext(2, "Relationship");
2207
2218
  i0.ɵɵelementEnd();
2208
- i0.ɵɵelementStart(3, "div", 325)(4, "div", 326)(5, "span", 327);
2219
+ i0.ɵɵelementStart(3, "div", 326)(4, "div", 327)(5, "span", 328);
2209
2220
  i0.ɵɵtext(6, "Related Entity");
2210
2221
  i0.ɵɵelementEnd();
2211
- i0.ɵɵelementStart(7, "span", 332);
2212
- i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template_span_click_7_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.navigateToRelatedEntity(ctx_r2.selectedField)); });
2222
+ i0.ɵɵelementStart(7, "span", 333);
2223
+ i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template_span_click_7_listener() { i0.ɵɵrestoreView(_r55); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.navigateToRelatedEntity(ctx_r2.selectedField)); });
2213
2224
  i0.ɵɵtext(8);
2214
2225
  i0.ɵɵelement(9, "i", 63);
2215
2226
  i0.ɵɵelementEnd()();
2216
- i0.ɵɵelementStart(10, "div", 326)(11, "span", 327);
2227
+ i0.ɵɵelementStart(10, "div", 327)(11, "span", 328);
2217
2228
  i0.ɵɵtext(12, "Display Type");
2218
2229
  i0.ɵɵelementEnd();
2219
- i0.ɵɵelementStart(13, "span", 329);
2230
+ i0.ɵɵelementStart(13, "span", 330);
2220
2231
  i0.ɵɵtext(14);
2221
2232
  i0.ɵɵelementEnd()()()();
2222
2233
  } if (rf & 2) {
@@ -2227,19 +2238,19 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
2227
2238
  i0.ɵɵtextInterpolate(ctx_r2.selectedField.RelatedEntityDisplayType);
2228
2239
  } }
2229
2240
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_29_Template(rf, ctx) { if (rf & 1) {
2230
- i0.ɵɵelementStart(0, "div", 322)(1, "h5");
2241
+ i0.ɵɵelementStart(0, "div", 323)(1, "h5");
2231
2242
  i0.ɵɵtext(2, "Encryption");
2232
2243
  i0.ɵɵelementEnd();
2233
- i0.ɵɵelementStart(3, "div", 325)(4, "div", 326)(5, "span", 327);
2244
+ i0.ɵɵelementStart(3, "div", 326)(4, "div", 327)(5, "span", 328);
2234
2245
  i0.ɵɵtext(6, "Encrypted");
2235
2246
  i0.ɵɵelementEnd();
2236
- i0.ɵɵelementStart(7, "span", 329);
2247
+ i0.ɵɵelementStart(7, "span", 330);
2237
2248
  i0.ɵɵtext(8, "Yes");
2238
2249
  i0.ɵɵelementEnd()();
2239
- i0.ɵɵelementStart(9, "div", 326)(10, "span", 327);
2250
+ i0.ɵɵelementStart(9, "div", 327)(10, "span", 328);
2240
2251
  i0.ɵɵtext(11, "Decrypt in API");
2241
2252
  i0.ɵɵelementEnd();
2242
- i0.ɵɵelementStart(12, "span", 329);
2253
+ i0.ɵɵelementStart(12, "span", 330);
2243
2254
  i0.ɵɵtext(13);
2244
2255
  i0.ɵɵelementEnd()()()();
2245
2256
  } if (rf & 2) {
@@ -2248,10 +2259,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
2248
2259
  i0.ɵɵtextInterpolate(ctx_r2.selectedField.AllowDecryptInAPI ? "Yes" : "No");
2249
2260
  } }
2250
2261
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_63_Template(rf, ctx) { if (rf & 1) {
2251
- i0.ɵɵelementStart(0, "div", 326)(1, "span", 327);
2262
+ i0.ɵɵelementStart(0, "div", 327)(1, "span", 328);
2252
2263
  i0.ɵɵtext(2, "Category");
2253
2264
  i0.ɵɵelementEnd();
2254
- i0.ɵɵelementStart(3, "span", 329);
2265
+ i0.ɵɵelementStart(3, "span", 330);
2255
2266
  i0.ɵɵtext(4);
2256
2267
  i0.ɵɵelementEnd()();
2257
2268
  } if (rf & 2) {
@@ -2260,33 +2271,33 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
2260
2271
  i0.ɵɵtextInterpolate(ctx_r2.selectedField.Category);
2261
2272
  } }
2262
2273
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
2263
- i0.ɵɵelementStart(0, "span", 335);
2274
+ i0.ɵɵelementStart(0, "span", 336);
2264
2275
  i0.ɵɵtext(1);
2265
2276
  i0.ɵɵelementEnd();
2266
2277
  } if (rf & 2) {
2267
- const val_r55 = i0.ɵɵnextContext().$implicit;
2278
+ const val_r56 = i0.ɵɵnextContext().$implicit;
2268
2279
  i0.ɵɵadvance();
2269
- i0.ɵɵtextInterpolate(val_r55.Code);
2280
+ i0.ɵɵtextInterpolate(val_r56.Code);
2270
2281
  } }
2271
2282
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Template(rf, ctx) { if (rf & 1) {
2272
- i0.ɵɵelementStart(0, "div", 334);
2273
- i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Conditional_1_Template, 2, 1, "span", 335);
2274
- i0.ɵɵelementStart(2, "span", 336);
2283
+ i0.ɵɵelementStart(0, "div", 335);
2284
+ i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Conditional_1_Template, 2, 1, "span", 336);
2285
+ i0.ɵɵelementStart(2, "span", 337);
2275
2286
  i0.ɵɵtext(3);
2276
2287
  i0.ɵɵelementEnd()();
2277
2288
  } if (rf & 2) {
2278
- const val_r55 = ctx.$implicit;
2289
+ const val_r56 = ctx.$implicit;
2279
2290
  i0.ɵɵadvance();
2280
- i0.ɵɵconditional(val_r55.Code !== val_r55.Value ? 1 : -1);
2291
+ i0.ɵɵconditional(val_r56.Code !== val_r56.Value ? 1 : -1);
2281
2292
  i0.ɵɵadvance(2);
2282
- i0.ɵɵtextInterpolate(val_r55.Value);
2293
+ i0.ɵɵtextInterpolate(val_r56.Value);
2283
2294
  } }
2284
2295
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_Template(rf, ctx) { if (rf & 1) {
2285
- i0.ɵɵelementStart(0, "div", 322)(1, "h5");
2296
+ i0.ɵɵelementStart(0, "div", 323)(1, "h5");
2286
2297
  i0.ɵɵtext(2, "Allowed Values");
2287
2298
  i0.ɵɵelementEnd();
2288
- i0.ɵɵelementStart(3, "div", 333);
2289
- i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Template, 4, 2, "div", 334, i0.ɵɵrepeaterTrackByIdentity);
2299
+ i0.ɵɵelementStart(3, "div", 334);
2300
+ i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Template, 4, 2, "div", 335, i0.ɵɵrepeaterTrackByIdentity);
2290
2301
  i0.ɵɵelementEnd()();
2291
2302
  } if (rf & 2) {
2292
2303
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -2294,84 +2305,84 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
2294
2305
  i0.ɵɵrepeater(ctx_r2.selectedField.EntityFieldValues);
2295
2306
  } }
2296
2307
  function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
2297
- i0.ɵɵelementStart(0, "div", 41)(1, "div", 322)(2, "h4");
2308
+ i0.ɵɵelementStart(0, "div", 41)(1, "div", 323)(2, "h4");
2298
2309
  i0.ɵɵtext(3);
2299
2310
  i0.ɵɵelementEnd();
2300
- i0.ɵɵelementStart(4, "div", 323);
2311
+ i0.ɵɵelementStart(4, "div", 324);
2301
2312
  i0.ɵɵtext(5);
2302
2313
  i0.ɵɵelementEnd();
2303
- i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_6_Template, 2, 1, "p", 324);
2314
+ i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_6_Template, 2, 1, "p", 325);
2304
2315
  i0.ɵɵelementEnd();
2305
- i0.ɵɵelementStart(7, "div", 322)(8, "h5");
2316
+ i0.ɵɵelementStart(7, "div", 323)(8, "h5");
2306
2317
  i0.ɵɵtext(9, "Type Information");
2307
2318
  i0.ɵɵelementEnd();
2308
- i0.ɵɵelementStart(10, "div", 325)(11, "div", 326)(12, "span", 327);
2319
+ i0.ɵɵelementStart(10, "div", 326)(11, "div", 327)(12, "span", 328);
2309
2320
  i0.ɵɵtext(13, "SQL Type");
2310
2321
  i0.ɵɵelementEnd();
2311
- i0.ɵɵelementStart(14, "span", 328);
2322
+ i0.ɵɵelementStart(14, "span", 329);
2312
2323
  i0.ɵɵtext(15);
2313
2324
  i0.ɵɵelementEnd()();
2314
- i0.ɵɵelementStart(16, "div", 326)(17, "span", 327);
2325
+ i0.ɵɵelementStart(16, "div", 327)(17, "span", 328);
2315
2326
  i0.ɵɵtext(18, "TypeScript Type");
2316
2327
  i0.ɵɵelementEnd();
2317
- i0.ɵɵelementStart(19, "span", 328);
2328
+ i0.ɵɵelementStart(19, "span", 329);
2318
2329
  i0.ɵɵtext(20);
2319
2330
  i0.ɵɵelementEnd()();
2320
- i0.ɵɵelementStart(21, "div", 326)(22, "span", 327);
2331
+ i0.ɵɵelementStart(21, "div", 327)(22, "span", 328);
2321
2332
  i0.ɵɵtext(23, "Nullable");
2322
2333
  i0.ɵɵelementEnd();
2323
- i0.ɵɵelementStart(24, "span", 329);
2334
+ i0.ɵɵelementStart(24, "span", 330);
2324
2335
  i0.ɵɵtext(25);
2325
2336
  i0.ɵɵelementEnd()();
2326
- i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_26_Template, 5, 1, "div", 326);
2337
+ i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_26_Template, 5, 1, "div", 327);
2327
2338
  i0.ɵɵelementEnd()();
2328
- i0.ɵɵconditionalCreate(27, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template, 16, 1, "div", 330);
2329
- i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template, 15, 2, "div", 322);
2330
- i0.ɵɵconditionalCreate(29, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_29_Template, 14, 1, "div", 322);
2331
- i0.ɵɵelementStart(30, "div", 322)(31, "h5");
2339
+ i0.ɵɵconditionalCreate(27, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template, 16, 1, "div", 331);
2340
+ i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template, 15, 2, "div", 323);
2341
+ i0.ɵɵconditionalCreate(29, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_29_Template, 14, 1, "div", 323);
2342
+ i0.ɵɵelementStart(30, "div", 323)(31, "h5");
2332
2343
  i0.ɵɵtext(32, "API Settings");
2333
2344
  i0.ɵɵelementEnd();
2334
- i0.ɵɵelementStart(33, "div", 325)(34, "div", 326)(35, "span", 327);
2345
+ i0.ɵɵelementStart(33, "div", 326)(34, "div", 327)(35, "span", 328);
2335
2346
  i0.ɵɵtext(36, "Allow Update");
2336
2347
  i0.ɵɵelementEnd();
2337
- i0.ɵɵelementStart(37, "span", 329);
2348
+ i0.ɵɵelementStart(37, "span", 330);
2338
2349
  i0.ɵɵtext(38);
2339
2350
  i0.ɵɵelementEnd()();
2340
- i0.ɵɵelementStart(39, "div", 326)(40, "span", 327);
2351
+ i0.ɵɵelementStart(39, "div", 327)(40, "span", 328);
2341
2352
  i0.ɵɵtext(41, "Include in Search");
2342
2353
  i0.ɵɵelementEnd();
2343
- i0.ɵɵelementStart(42, "span", 329);
2354
+ i0.ɵɵelementStart(42, "span", 330);
2344
2355
  i0.ɵɵtext(43);
2345
2356
  i0.ɵɵelementEnd()();
2346
- i0.ɵɵelementStart(44, "div", 326)(45, "span", 327);
2357
+ i0.ɵɵelementStart(44, "div", 327)(45, "span", 328);
2347
2358
  i0.ɵɵtext(46, "Full-Text Search");
2348
2359
  i0.ɵɵelementEnd();
2349
- i0.ɵɵelementStart(47, "span", 329);
2360
+ i0.ɵɵelementStart(47, "span", 330);
2350
2361
  i0.ɵɵtext(48);
2351
2362
  i0.ɵɵelementEnd()()()();
2352
- i0.ɵɵelementStart(49, "div", 322)(50, "h5");
2363
+ i0.ɵɵelementStart(49, "div", 323)(50, "h5");
2353
2364
  i0.ɵɵtext(51, "Form Settings");
2354
2365
  i0.ɵɵelementEnd();
2355
- i0.ɵɵelementStart(52, "div", 325)(53, "div", 326)(54, "span", 327);
2366
+ i0.ɵɵelementStart(52, "div", 326)(53, "div", 327)(54, "span", 328);
2356
2367
  i0.ɵɵtext(55, "Include in Form");
2357
2368
  i0.ɵɵelementEnd();
2358
- i0.ɵɵelementStart(56, "span", 329);
2369
+ i0.ɵɵelementStart(56, "span", 330);
2359
2370
  i0.ɵɵtext(57);
2360
2371
  i0.ɵɵelementEnd()();
2361
- i0.ɵɵelementStart(58, "div", 326)(59, "span", 327);
2372
+ i0.ɵɵelementStart(58, "div", 327)(59, "span", 328);
2362
2373
  i0.ɵɵtext(60, "Section");
2363
2374
  i0.ɵɵelementEnd();
2364
- i0.ɵɵelementStart(61, "span", 329);
2375
+ i0.ɵɵelementStart(61, "span", 330);
2365
2376
  i0.ɵɵtext(62);
2366
2377
  i0.ɵɵelementEnd()();
2367
- i0.ɵɵconditionalCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_63_Template, 5, 1, "div", 326);
2368
- i0.ɵɵelementStart(64, "div", 326)(65, "span", 327);
2378
+ i0.ɵɵconditionalCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_63_Template, 5, 1, "div", 327);
2379
+ i0.ɵɵelementStart(64, "div", 327)(65, "span", 328);
2369
2380
  i0.ɵɵtext(66, "Sequence");
2370
2381
  i0.ɵɵelementEnd();
2371
- i0.ɵɵelementStart(67, "span", 329);
2382
+ i0.ɵɵelementStart(67, "span", 330);
2372
2383
  i0.ɵɵtext(68);
2373
2384
  i0.ɵɵelementEnd()()()();
2374
- i0.ɵɵconditionalCreate(69, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_Template, 6, 0, "div", 322);
2385
+ i0.ɵɵconditionalCreate(69, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_Template, 6, 0, "div", 323);
2375
2386
  i0.ɵɵelementEnd();
2376
2387
  } if (rf & 2) {
2377
2388
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -2413,49 +2424,49 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Template(rf,
2413
2424
  i0.ɵɵconditional(ctx_r2.selectedField.EntityFieldValues.length > 0 ? 69 : -1);
2414
2425
  } }
2415
2426
  function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Template(rf, ctx) { if (rf & 1) {
2416
- i0.ɵɵelementStart(0, "div", 41)(1, "div", 322)(2, "h4");
2427
+ i0.ɵɵelementStart(0, "div", 41)(1, "div", 323)(2, "h4");
2417
2428
  i0.ɵɵtext(3);
2418
2429
  i0.ɵɵelementEnd()();
2419
- i0.ɵɵelementStart(4, "div", 322)(5, "h5");
2430
+ i0.ɵɵelementStart(4, "div", 323)(5, "h5");
2420
2431
  i0.ɵɵtext(6, "Connection");
2421
2432
  i0.ɵɵelementEnd();
2422
- i0.ɵɵelementStart(7, "div", 325)(8, "div", 326)(9, "span", 327);
2433
+ i0.ɵɵelementStart(7, "div", 326)(8, "div", 327)(9, "span", 328);
2423
2434
  i0.ɵɵtext(10, "From Entity");
2424
2435
  i0.ɵɵelementEnd();
2425
- i0.ɵɵelementStart(11, "span", 329);
2436
+ i0.ɵɵelementStart(11, "span", 330);
2426
2437
  i0.ɵɵtext(12);
2427
2438
  i0.ɵɵelementEnd()();
2428
- i0.ɵɵelementStart(13, "div", 326)(14, "span", 327);
2439
+ i0.ɵɵelementStart(13, "div", 327)(14, "span", 328);
2429
2440
  i0.ɵɵtext(15, "Join Field");
2430
2441
  i0.ɵɵelementEnd();
2431
- i0.ɵɵelementStart(16, "span", 328);
2442
+ i0.ɵɵelementStart(16, "span", 329);
2432
2443
  i0.ɵɵtext(17);
2433
2444
  i0.ɵɵelementEnd()();
2434
- i0.ɵɵelementStart(18, "div", 326)(19, "span", 327);
2445
+ i0.ɵɵelementStart(18, "div", 327)(19, "span", 328);
2435
2446
  i0.ɵɵtext(20, "Type");
2436
2447
  i0.ɵɵelementEnd();
2437
- i0.ɵɵelementStart(21, "span", 329);
2448
+ i0.ɵɵelementStart(21, "span", 330);
2438
2449
  i0.ɵɵtext(22);
2439
2450
  i0.ɵɵelementEnd()()()();
2440
- i0.ɵɵelementStart(23, "div", 322)(24, "h5");
2451
+ i0.ɵɵelementStart(23, "div", 323)(24, "h5");
2441
2452
  i0.ɵɵtext(25, "Display Settings");
2442
2453
  i0.ɵɵelementEnd();
2443
- i0.ɵɵelementStart(26, "div", 325)(27, "div", 326)(28, "span", 327);
2454
+ i0.ɵɵelementStart(26, "div", 326)(27, "div", 327)(28, "span", 328);
2444
2455
  i0.ɵɵtext(29, "Display in Form");
2445
2456
  i0.ɵɵelementEnd();
2446
- i0.ɵɵelementStart(30, "span", 329);
2457
+ i0.ɵɵelementStart(30, "span", 330);
2447
2458
  i0.ɵɵtext(31);
2448
2459
  i0.ɵɵelementEnd()();
2449
- i0.ɵɵelementStart(32, "div", 326)(33, "span", 327);
2460
+ i0.ɵɵelementStart(32, "div", 327)(33, "span", 328);
2450
2461
  i0.ɵɵtext(34, "Location");
2451
2462
  i0.ɵɵelementEnd();
2452
- i0.ɵɵelementStart(35, "span", 329);
2463
+ i0.ɵɵelementStart(35, "span", 330);
2453
2464
  i0.ɵɵtext(36);
2454
2465
  i0.ɵɵelementEnd()();
2455
- i0.ɵɵelementStart(37, "div", 326)(38, "span", 327);
2466
+ i0.ɵɵelementStart(37, "div", 327)(38, "span", 328);
2456
2467
  i0.ɵɵtext(39, "Bundle in API");
2457
2468
  i0.ɵɵelementEnd();
2458
- i0.ɵɵelementStart(40, "span", 329);
2469
+ i0.ɵɵelementStart(40, "span", 330);
2459
2470
  i0.ɵɵtext(41);
2460
2471
  i0.ɵɵelementEnd()()()()();
2461
2472
  } if (rf & 2) {
@@ -2546,7 +2557,7 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
2546
2557
  i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template, 3, 1, "section", 33);
2547
2558
  i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template, 72, 26, "section", 34);
2548
2559
  i0.ɵɵconditionalCreate(58, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template, 18, 7, "section", 35);
2549
- i0.ɵɵconditionalCreate(59, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template, 27, 8, "section", 36);
2560
+ i0.ɵɵconditionalCreate(59, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template, 32, 12, "section", 36);
2550
2561
  i0.ɵɵelementEnd();
2551
2562
  i0.ɵɵelementStart(60, "aside", 37)(61, "div", 38);
2552
2563
  i0.ɵɵconditionalCreate(62, MJEntityFormComponentExtended_Conditional_0_Conditional_62_Template, 2, 0, "h3");
@@ -2626,23 +2637,23 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
2626
2637
  i0.ɵɵconditional(ctx_r2.selectedRelationship ? 67 : -1);
2627
2638
  } }
2628
2639
  function MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
2629
- i0.ɵɵelementStart(0, "div", 337);
2630
- i0.ɵɵelement(1, "mj-loading", 340);
2640
+ i0.ɵɵelementStart(0, "div", 338);
2641
+ i0.ɵɵelement(1, "mj-loading", 341);
2631
2642
  i0.ɵɵelementEnd();
2632
2643
  } }
2633
2644
  function MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
2634
- i0.ɵɵelement(0, "mj-empty-state", 338);
2645
+ i0.ɵɵelement(0, "mj-empty-state", 339);
2635
2646
  } if (rf & 2) {
2636
2647
  const ctx_r2 = i0.ɵɵnextContext(2);
2637
2648
  i0.ɵɵproperty("Message", ctx_r2.explorerError);
2638
2649
  } }
2639
2650
  function MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
2640
- i0.ɵɵelement(0, "mj-empty-state", 339);
2651
+ i0.ɵɵelement(0, "mj-empty-state", 340);
2641
2652
  } }
2642
2653
  function MJEntityFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
2643
- i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div", 337);
2644
- i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 1, 1, "mj-empty-state", 338);
2645
- i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 1, 0, "mj-empty-state", 339);
2654
+ i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div", 338);
2655
+ i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 1, 1, "mj-empty-state", 339);
2656
+ i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 1, 0, "mj-empty-state", 340);
2646
2657
  } if (rf & 2) {
2647
2658
  const ctx_r2 = i0.ɵɵnextContext();
2648
2659
  i0.ɵɵconditional(ctx_r2.isExplorerLoading ? 0 : -1);
@@ -3171,6 +3182,38 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
3171
3182
  this.closeDetailPanel();
3172
3183
  this.cdr.markForCheck();
3173
3184
  }
3185
+ get FormChromeConfig() {
3186
+ return this.record?.ConfigurationObject?.UI?.Form ?? null;
3187
+ }
3188
+ get FormChromeCandidates() {
3189
+ if (!this.entity)
3190
+ return [];
3191
+ return this.entity.RelatedEntities.map((rel) => ({
3192
+ ID: rel.ID,
3193
+ RelatedEntity: rel.RelatedEntity,
3194
+ RelatedEntityID: rel.RelatedEntityID,
3195
+ RelatedEntityJoinField: rel.RelatedEntityJoinField,
3196
+ RelatedEntitySchemaName: this.allEntities.find((e) => UUIDsEqual(e.ID, rel.RelatedEntityID))?.SchemaName ?? '',
3197
+ DisplayInForm: rel.DisplayInForm,
3198
+ DisplayLocation: rel.DisplayLocation,
3199
+ DisplayComponentID: rel.DisplayComponentID,
3200
+ RelatedRecordCollection: rel.RelatedRecordCollection,
3201
+ JoinView: rel.JoinView,
3202
+ Type: rel.Type,
3203
+ Sequence: rel.Sequence,
3204
+ Configuration: rel.Configuration,
3205
+ }));
3206
+ }
3207
+ OnFormChromeConfigChange(form) {
3208
+ if (!this.record)
3209
+ return;
3210
+ const current = this.record.ConfigurationObject ?? {};
3211
+ this.record.ConfigurationObject = {
3212
+ ...current,
3213
+ UI: { ...(current.UI ?? {}), Form: form },
3214
+ };
3215
+ this.cdr.markForCheck();
3216
+ }
3174
3217
  /**
3175
3218
  * Handle record opened from the entity viewer (double-click or open button).
3176
3219
  * Emits a Navigate event so the host app can open the record.
@@ -3610,11 +3653,11 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
3610
3653
  }
3611
3654
  }
3612
3655
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJEntityFormComponentExtended_BaseFactory; return function MJEntityFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJEntityFormComponentExtended_BaseFactory || (ɵMJEntityFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJEntityFormComponentExtended)))(__ngFactoryType__ || MJEntityFormComponentExtended); }; })(); }
3613
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJEntityFormComponentExtended, selectors: [["mj-entity-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "entity-explorer"], [1, "explorer-header"], [1, "entity-identity"], [1, "entity-icon"], [1, "entity-info"], [1, "entity-title-row"], [1, "entity-name"], [1, "status-badge", 3, "ngClass"], [1, "status-badge", "isa-badge", "virtual"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type"], [1, "isa-breadcrumb"], [1, "entity-subtitle"], [1, "schema-table"], [1, "separator"], [1, "entity-description", 3, "title"], [1, "header-stats"], [1, "stat-item", 3, "click"], [1, "fa-solid", "fa-table-columns"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-shield-halved"], [1, "fa-solid", "fa-database"], [1, "stat-value", "loading"], [1, "explorer-body"], [1, "nav-rail"], [1, "nav-item", 3, "active", "title"], [1, "main-canvas"], [1, "section", "overview-section"], [1, "section", "fields-section"], [1, "section", "relationships-section"], [1, "section", "organic-keys-section"], [1, "section", "permissions-section"], [1, "section", "data-section"], [1, "section", "lineage-section"], [1, "section", "history-section"], [1, "section", "settings-section"], [1, "detail-panel"], [1, "panel-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "panel-content"], [1, "fa-solid", "fa-eye"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type", 3, "click"], [1, "fa-solid", "fa-arrow-up"], [1, "status-badge", "isa-badge", "parent-type"], [1, "fa-solid", "fa-sitemap"], ["title", "Multiple child types can coexist for a single parent record", 1, "status-badge", "isa-badge", "overlapping"], [1, "fa-solid", "fa-clone"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "nav-item", 3, "click", "title"], [1, "nav-label"], [1, "nav-badge"], [1, "section-content"], [1, "stats-cards"], ["title", "View all fields", 1, "stat-card", "clickable", 3, "click"], [1, "stat-card-header"], [1, "fa-solid", "fa-table-cells"], [1, "stat-card-body"], [1, "stat-main"], [1, "stat-details"], [1, "stat-card-action"], [1, "fa-solid", "fa-arrow-right"], ["title", "View relationships", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-diagram-project"], ["title", "View security settings", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-lock"], [1, "stat-card"], [1, "info-panel", "capabilities-panel"], [1, "panel-title"], [1, "fa-solid", "fa-bolt"], [1, "capability-tags"], [1, "capability-tag"], [1, "capability-tag", "disabled"], [1, "info-panel", "isa-panel"], [1, "info-panel", "database-panel"], [1, "fa-solid", "fa-server"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "info-panel", "codegen-panel"], [1, "fa-solid", "fa-code"], [1, "info-value", "code"], [1, "fa-solid", "fa-check"], [1, "isa-info-row", "virtual-info"], [1, "isa-children"], [1, "code"], [1, "isa-chain"], [1, "isa-chain-label"], [1, "isa-chain-nodes"], [1, "isa-node", "current"], [1, "isa-inherited-fields"], [1, "isa-field-inspector"], [1, "isa-siblings"], [1, "fa-solid", "fa-arrow-right", "isa-arrow"], [1, "isa-node", "parent", "clickable", 3, "click", "title"], ["Size", "sm", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], [1, "isa-inspector-groups"], [1, "isa-inspector-group", 3, "own", "inherited"], [1, "isa-inspector-group"], [1, "isa-inspector-header"], [1, "isa-inspector-entity"], [1, "fa-solid", "fa-circle", 2, "color", "var(--mj-brand-primary)", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "var(--mj-brand-primary)", "font-size", "10px"], [1, "isa-inspector-count"], [1, "isa-inspector-fields"], [1, "isa-inspector-field", 3, "title"], [1, "isa-inspector-type"], [1, "isa-child-list"], [1, "isa-sibling-chip", "clickable", 3, "title"], [1, "isa-sibling-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrows-left-right"], [1, "isa-child-chip", "clickable", 3, "title"], [1, "isa-child-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "isa-child-count"], [1, "section-header"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search fields...", 3, "ngModelChange", "ngModel"], [1, "header-controls"], [1, "view-mode-toggle"], ["title", "Group by category", 1, "toggle-btn", 3, "click"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "expand-collapse-controls"], [1, "section-content", "fields-content"], [1, "field-groups"], [1, "fields-list-view"], ["title", "Expand all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], ["Size", "sm", 3, "FlushBody", "Expanded"], [1, "group-icon"], [1, "group-label"], [1, "mj-accordion-badge", "mj-accordion-badge--right"], [1, "group-content"], [1, "field-item", 3, "selected"], [1, "field-item", 3, "click"], [1, "field-icon"], [1, "field-info"], [1, "field-name"], [1, "field-db-name"], [1, "field-meta"], [1, "field-type"], [1, "field-nullable"], [1, "field-related"], [1, "field-badges"], ["title", "Primary Key", 1, "badge", "pk"], ["title", "Foreign Key", 1, "badge", "fk"], ["title", "Encrypted", 1, "badge", "encrypted"], [1, "badge", "inherited", 3, "title"], [1, "field-related", 3, "click"], [1, "list-header"], [1, "list-col", "col-seq", "sortable", 3, "click"], [1, "sort-icon", "fa-solid", 3, "ngClass"], [1, "list-col", "col-name", "sortable", 3, "click"], [1, "list-col", "col-display-name", "sortable", 3, "click"], [1, "list-col", "col-type", "sortable", 3, "click"], [1, "list-col", "col-length", "sortable", 3, "click"], [1, "list-col", "col-nullable", "sortable", 3, "click"], [1, "list-col", "col-flags"], [1, "list-col", "col-desc", "sortable", 3, "click"], [1, "list-body"], [1, "list-row", 3, "selected"], ["Variant", "no-results", "Size", "compact", "Title", "No fields match your search"], [1, "list-row", 3, "click"], [1, "list-col", "col-seq"], [1, "seq-num"], [1, "list-col", "col-name"], [1, "field-type-icon"], [1, "field-name-text"], [1, "list-col", "col-display-name"], [1, "display-name-text"], [1, "list-col", "col-type"], [1, "type-tag"], [1, "list-col", "col-length"], [1, "length-value"], [1, "length-value", "muted"], [1, "list-col", "col-nullable"], [1, "required-indicator"], [1, "flag-badges"], ["title", "Primary Key", 1, "flag-badge", "pk"], ["title", "Foreign Key", 1, "flag-badge", "fk"], ["title", "Encrypted", 1, "flag-badge", "encrypted"], [1, "flag-badge", "inherited", 3, "title"], [1, "list-col", "col-desc"], [1, "desc-text", 3, "title"], [1, "fa-solid", "fa-key"], [1, "view-toggle"], [1, "toggle-btn", 3, "click"], [1, "depth-selector"], [1, "relationships-graph"], [1, "relationships-list"], [1, "depth-label"], [1, "depth-buttons"], [1, "depth-btn", 3, "active", "title"], [1, "depth-btn", 3, "click", "title"], [3, "stateChange", "openRecord", "focusEntities", "showFilterPanel", "showHeader", "depth"], [1, "relationship-group"], [1, "relationship-group-title"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "group-count"], [1, "relationship-items", "grouped"], [1, "relationship-item-grouped"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-from-bracket", "Title", "No outgoing relationships"], [1, "fa-solid", "fa-arrow-right-to-bracket"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-to-bracket", "Title", "No incoming relationships"], [1, "rel-header"], [1, "rel-icon", "outgoing"], [1, "rel-entity-name"], [1, "rel-fields-chips"], [1, "field-chip", "outgoing", 3, "title"], [1, "field-chip", "outgoing", 3, "click", "title"], [1, "rel-icon", "incoming"], [1, "fa-solid", "fa-arrow-left"], [1, "field-chip", "incoming", 3, "title"], ["title", "Bundled in API", 1, "fa-solid", "fa-box", "bundle-icon"], ["Icon", "fa-solid fa-fingerprint", "Title", "No Organic Keys", "Message", "This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints."], [1, "organic-key-cards"], [1, "organic-key-card"], [1, "organic-key-card-header"], [1, "organic-key-name"], [1, "fa-solid", "fa-fingerprint", "organic-key-icon"], [1, "organic-key-badges"], [1, "organic-key-badge", "strategy"], [1, "organic-key-badge", "fields"], [1, "organic-key-description"], [1, "organic-key-targets"], [1, "organic-key-target", "clickable"], [1, "organic-key-target", "clickable", 3, "click"], [1, "target-main"], [1, "target-header"], [1, "target-entity-icon"], [1, "target-entity-name"], [1, "fa-solid", "fa-external-link-alt", "target-nav-icon"], [1, "target-match-detail"], [1, "match-type-badge", "direct"], [1, "match-fields"], [1, "match-type-badge", "transitive"], [1, "match-fields", 3, "title"], [1, "organic-key-card", "incoming", "clickable"], [1, "organic-key-card", "incoming", "clickable", 3, "click"], [1, "match-type-badge"], [1, "organic-key-detail-row"], [1, "detail-label"], [1, "detail-value"], [1, "permissions-matrix"], [1, "matrix-table"], [1, "center"], ["Size", "compact", "Icon", "fa-solid fa-shield-halved", "Title", "No permissions configured"], [1, "api-capabilities"], [1, "fa-solid", "fa-plug"], [1, "capability-grid"], [1, "capability-item"], [1, "fa-solid", 3, "ngClass"], [1, "role-name"], [1, "permission-icon", 3, "ngClass"], [1, "rls-info"], ["title", "Read RLS", 1, "rls-badge"], ["title", "Create RLS", 1, "rls-badge"], ["title", "Update RLS", 1, "rls-badge"], ["title", "Delete RLS", 1, "rls-badge"], [1, "no-rls"], [1, "data-viewer-container"], [3, "Entity", "Provider"], [3, "RecordOpened", "CreateRecordRequested", "Entity", "Provider"], [1, "lineage-diagram"], [1, "lineage-stage", "sources"], [1, "lineage-items"], [1, "lineage-item"], [1, "fa-solid", "fa-keyboard"], [1, "lineage-arrow"], [1, "lineage-stage", "entity-node"], [1, "entity-box"], [1, "lineage-stage", "sinks"], [1, "tracking-config"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "config-grid"], [1, "config-item"], [1, "config-label"], [1, "config-value"], [1, "fa-solid", "fa-map-location-dot"], [1, "helper-text"], [1, "history-config"], [1, "config-status"], [1, "config-text"], [1, "history-info"], [1, "info-card"], [1, "fa-solid", "fa-info-circle"], [1, "audit-fields-list"], [1, "settings-panel", "isa-settings-panel"], [1, "settings-panel"], [1, "fa-solid", "fa-sliders"], [1, "settings-list"], ["Size", "compact", "Icon", "fa-solid fa-sliders", "Title", "No custom settings configured"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fts-config"], ["Variant", "warning", "Size", "compact", "Title", "Full-text search is not enabled for this entity"], [1, "fa-solid", "fa-box"], [1, "config-row"], ["title", "Navigate to parent entity", 1, "link"], [1, "muted"], [1, "fa-solid", "fa-circle-check", 2, "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-circle-minus", 2, "color", "var(--mj-text-muted)"], ["title", "Navigate to parent entity", 1, "link", 3, "click"], [1, "link", 3, "click"], [1, "fa-solid", "fa-circle-check", 2, "color", "#059669"], [1, "setting-item"], [1, "setting-name"], [1, "setting-value-json"], [1, "setting-value"], [1, "setting-comment"], ["language", "json", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], [1, "config-value", "enabled"], [1, "fa-solid", "fa-circle-check"], [1, "config-value", "code"], [1, "detail-section"], [1, "detail-field-db-name"], [1, "field-description"], [1, "detail-grid"], [1, "detail-item"], [1, "label"], [1, "value", "code"], [1, "value"], [1, "detail-section", "isa-source-section"], ["title", "Navigate to source entity", 1, "value", "link", 3, "click"], [1, "value", "link", 3, "click"], [1, "value-list"], [1, "value-item"], [1, "value-code"], [1, "value-display"], [1, "explorer-loading"], ["Variant", "error", "Icon", "fa-solid fa-triangle-exclamation", "Title", "Failed to load entity", 1, "explorer-fill", 3, "Message"], ["Icon", "fa-solid fa-database", "Title", "Entity metadata not available", 1, "explorer-fill"], ["text", "Loading entity..."]], template: function MJEntityFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
3656
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJEntityFormComponentExtended, selectors: [["mj-entity-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "entity-explorer"], [1, "explorer-header"], [1, "entity-identity"], [1, "entity-icon"], [1, "entity-info"], [1, "entity-title-row"], [1, "entity-name"], [1, "status-badge", 3, "ngClass"], [1, "status-badge", "isa-badge", "virtual"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type"], [1, "isa-breadcrumb"], [1, "entity-subtitle"], [1, "schema-table"], [1, "separator"], [1, "entity-description", 3, "title"], [1, "header-stats"], [1, "stat-item", 3, "click"], [1, "fa-solid", "fa-table-columns"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-shield-halved"], [1, "fa-solid", "fa-database"], [1, "stat-value", "loading"], [1, "explorer-body"], [1, "nav-rail"], [1, "nav-item", 3, "active", "title"], [1, "main-canvas"], [1, "section", "overview-section"], [1, "section", "fields-section"], [1, "section", "relationships-section"], [1, "section", "organic-keys-section"], [1, "section", "permissions-section"], [1, "section", "data-section"], [1, "section", "lineage-section"], [1, "section", "history-section"], [1, "section", "settings-section"], [1, "detail-panel"], [1, "panel-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "panel-content"], [1, "fa-solid", "fa-eye"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type", 3, "click"], [1, "fa-solid", "fa-arrow-up"], [1, "status-badge", "isa-badge", "parent-type"], [1, "fa-solid", "fa-sitemap"], ["title", "Multiple child types can coexist for a single parent record", 1, "status-badge", "isa-badge", "overlapping"], [1, "fa-solid", "fa-clone"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "nav-item", 3, "click", "title"], [1, "nav-label"], [1, "nav-badge"], [1, "section-content"], [1, "stats-cards"], ["title", "View all fields", 1, "stat-card", "clickable", 3, "click"], [1, "stat-card-header"], [1, "fa-solid", "fa-table-cells"], [1, "stat-card-body"], [1, "stat-main"], [1, "stat-details"], [1, "stat-card-action"], [1, "fa-solid", "fa-arrow-right"], ["title", "View relationships", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-diagram-project"], ["title", "View security settings", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-lock"], [1, "stat-card"], [1, "info-panel", "capabilities-panel"], [1, "panel-title"], [1, "fa-solid", "fa-bolt"], [1, "capability-tags"], [1, "capability-tag"], [1, "capability-tag", "disabled"], [1, "info-panel", "isa-panel"], [1, "info-panel", "database-panel"], [1, "fa-solid", "fa-server"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "info-panel", "codegen-panel"], [1, "fa-solid", "fa-code"], [1, "info-value", "code"], [1, "fa-solid", "fa-check"], [1, "isa-info-row", "virtual-info"], [1, "isa-children"], [1, "code"], [1, "isa-chain"], [1, "isa-chain-label"], [1, "isa-chain-nodes"], [1, "isa-node", "current"], [1, "isa-inherited-fields"], [1, "isa-field-inspector"], [1, "isa-siblings"], [1, "fa-solid", "fa-arrow-right", "isa-arrow"], [1, "isa-node", "parent", "clickable", 3, "click", "title"], ["Size", "sm", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], [1, "isa-inspector-groups"], [1, "isa-inspector-group", 3, "own", "inherited"], [1, "isa-inspector-group"], [1, "isa-inspector-header"], [1, "isa-inspector-entity"], [1, "fa-solid", "fa-circle", 2, "color", "var(--mj-brand-primary)", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "var(--mj-brand-primary)", "font-size", "10px"], [1, "isa-inspector-count"], [1, "isa-inspector-fields"], [1, "isa-inspector-field", 3, "title"], [1, "isa-inspector-type"], [1, "isa-child-list"], [1, "isa-sibling-chip", "clickable", 3, "title"], [1, "isa-sibling-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrows-left-right"], [1, "isa-child-chip", "clickable", 3, "title"], [1, "isa-child-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "isa-child-count"], [1, "section-header"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search fields...", 3, "ngModelChange", "ngModel"], [1, "header-controls"], [1, "view-mode-toggle"], ["title", "Group by category", 1, "toggle-btn", 3, "click"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "expand-collapse-controls"], [1, "section-content", "fields-content"], [1, "field-groups"], [1, "fields-list-view"], ["title", "Expand all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], ["Size", "sm", 3, "FlushBody", "Expanded"], [1, "group-icon"], [1, "group-label"], [1, "mj-accordion-badge", "mj-accordion-badge--right"], [1, "group-content"], [1, "field-item", 3, "selected"], [1, "field-item", 3, "click"], [1, "field-icon"], [1, "field-info"], [1, "field-name"], [1, "field-db-name"], [1, "field-meta"], [1, "field-type"], [1, "field-nullable"], [1, "field-related"], [1, "field-badges"], ["title", "Primary Key", 1, "badge", "pk"], ["title", "Foreign Key", 1, "badge", "fk"], ["title", "Encrypted", 1, "badge", "encrypted"], [1, "badge", "inherited", 3, "title"], [1, "field-related", 3, "click"], [1, "list-header"], [1, "list-col", "col-seq", "sortable", 3, "click"], [1, "sort-icon", "fa-solid", 3, "ngClass"], [1, "list-col", "col-name", "sortable", 3, "click"], [1, "list-col", "col-display-name", "sortable", 3, "click"], [1, "list-col", "col-type", "sortable", 3, "click"], [1, "list-col", "col-length", "sortable", 3, "click"], [1, "list-col", "col-nullable", "sortable", 3, "click"], [1, "list-col", "col-flags"], [1, "list-col", "col-desc", "sortable", 3, "click"], [1, "list-body"], [1, "list-row", 3, "selected"], ["Variant", "no-results", "Size", "compact", "Title", "No fields match your search"], [1, "list-row", 3, "click"], [1, "list-col", "col-seq"], [1, "seq-num"], [1, "list-col", "col-name"], [1, "field-type-icon"], [1, "field-name-text"], [1, "list-col", "col-display-name"], [1, "display-name-text"], [1, "list-col", "col-type"], [1, "type-tag"], [1, "list-col", "col-length"], [1, "length-value"], [1, "length-value", "muted"], [1, "list-col", "col-nullable"], [1, "required-indicator"], [1, "flag-badges"], ["title", "Primary Key", 1, "flag-badge", "pk"], ["title", "Foreign Key", 1, "flag-badge", "fk"], ["title", "Encrypted", 1, "flag-badge", "encrypted"], [1, "flag-badge", "inherited", 3, "title"], [1, "list-col", "col-desc"], [1, "desc-text", 3, "title"], [1, "fa-solid", "fa-key"], [1, "view-toggle"], [1, "toggle-btn", 3, "click"], [1, "depth-selector"], [1, "relationships-graph"], [1, "relationships-list"], [1, "depth-label"], [1, "depth-buttons"], [1, "depth-btn", 3, "active", "title"], [1, "depth-btn", 3, "click", "title"], [3, "stateChange", "openRecord", "focusEntities", "showFilterPanel", "showHeader", "depth"], [1, "relationship-group"], [1, "relationship-group-title"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "group-count"], [1, "relationship-items", "grouped"], [1, "relationship-item-grouped"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-from-bracket", "Title", "No outgoing relationships"], [1, "fa-solid", "fa-arrow-right-to-bracket"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-to-bracket", "Title", "No incoming relationships"], [1, "rel-header"], [1, "rel-icon", "outgoing"], [1, "rel-entity-name"], [1, "rel-fields-chips"], [1, "field-chip", "outgoing", 3, "title"], [1, "field-chip", "outgoing", 3, "click", "title"], [1, "rel-icon", "incoming"], [1, "fa-solid", "fa-arrow-left"], [1, "field-chip", "incoming", 3, "title"], ["title", "Bundled in API", 1, "fa-solid", "fa-box", "bundle-icon"], ["Icon", "fa-solid fa-fingerprint", "Title", "No Organic Keys", "Message", "This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints."], [1, "organic-key-cards"], [1, "organic-key-card"], [1, "organic-key-card-header"], [1, "organic-key-name"], [1, "fa-solid", "fa-fingerprint", "organic-key-icon"], [1, "organic-key-badges"], [1, "organic-key-badge", "strategy"], [1, "organic-key-badge", "fields"], [1, "organic-key-description"], [1, "organic-key-targets"], [1, "organic-key-target", "clickable"], [1, "organic-key-target", "clickable", 3, "click"], [1, "target-main"], [1, "target-header"], [1, "target-entity-icon"], [1, "target-entity-name"], [1, "fa-solid", "fa-external-link-alt", "target-nav-icon"], [1, "target-match-detail"], [1, "match-type-badge", "direct"], [1, "match-fields"], [1, "match-type-badge", "transitive"], [1, "match-fields", 3, "title"], [1, "organic-key-card", "incoming", "clickable"], [1, "organic-key-card", "incoming", "clickable", 3, "click"], [1, "match-type-badge"], [1, "organic-key-detail-row"], [1, "detail-label"], [1, "detail-value"], [1, "permissions-matrix"], [1, "matrix-table"], [1, "center"], ["Size", "compact", "Icon", "fa-solid fa-shield-halved", "Title", "No permissions configured"], [1, "api-capabilities"], [1, "fa-solid", "fa-plug"], [1, "capability-grid"], [1, "capability-item"], [1, "fa-solid", 3, "ngClass"], [1, "role-name"], [1, "permission-icon", 3, "ngClass"], [1, "rls-info"], ["title", "Read RLS", 1, "rls-badge"], ["title", "Create RLS", 1, "rls-badge"], ["title", "Update RLS", 1, "rls-badge"], ["title", "Delete RLS", 1, "rls-badge"], [1, "no-rls"], [1, "data-viewer-container"], [3, "Entity", "Provider"], [3, "RecordOpened", "CreateRecordRequested", "Entity", "Provider"], [1, "lineage-diagram"], [1, "lineage-stage", "sources"], [1, "lineage-items"], [1, "lineage-item"], [1, "fa-solid", "fa-keyboard"], [1, "lineage-arrow"], [1, "lineage-stage", "entity-node"], [1, "entity-box"], [1, "lineage-stage", "sinks"], [1, "tracking-config"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "config-grid"], [1, "config-item"], [1, "config-label"], [1, "config-value"], [1, "fa-solid", "fa-map-location-dot"], [1, "helper-text"], [1, "history-config"], [1, "config-status"], [1, "config-text"], [1, "history-info"], [1, "info-card"], [1, "fa-solid", "fa-info-circle"], [1, "audit-fields-list"], [1, "settings-panel", "isa-settings-panel"], [1, "settings-panel"], [1, "fa-solid", "fa-sliders"], [1, "settings-list"], ["Size", "compact", "Icon", "fa-solid fa-sliders", "Title", "No custom settings configured"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fts-config"], ["Variant", "warning", "Size", "compact", "Title", "Full-text search is not enabled for this entity"], [3, "FormConfigChange", "FormConfig", "ParentSchemaName", "Candidates", "EditMode"], [1, "fa-solid", "fa-box"], [1, "config-row"], ["title", "Navigate to parent entity", 1, "link"], [1, "muted"], [1, "fa-solid", "fa-circle-check", 2, "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-circle-minus", 2, "color", "var(--mj-text-muted)"], ["title", "Navigate to parent entity", 1, "link", 3, "click"], [1, "link", 3, "click"], [1, "fa-solid", "fa-circle-check", 2, "color", "#059669"], [1, "setting-item"], [1, "setting-name"], [1, "setting-value-json"], [1, "setting-value"], [1, "setting-comment"], ["language", "json", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], [1, "config-value", "enabled"], [1, "fa-solid", "fa-circle-check"], [1, "config-value", "code"], [1, "detail-section"], [1, "detail-field-db-name"], [1, "field-description"], [1, "detail-grid"], [1, "detail-item"], [1, "label"], [1, "value", "code"], [1, "value"], [1, "detail-section", "isa-source-section"], ["title", "Navigate to source entity", 1, "value", "link", 3, "click"], [1, "value", "link", 3, "click"], [1, "value-list"], [1, "value-item"], [1, "value-code"], [1, "value-display"], [1, "explorer-loading"], ["Variant", "error", "Icon", "fa-solid fa-triangle-exclamation", "Title", "Failed to load entity", 1, "explorer-fill", 3, "Message"], ["Icon", "fa-solid fa-database", "Title", "Entity metadata not available", 1, "explorer-fill"], ["text", "Loading entity..."]], template: function MJEntityFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
3614
3657
  i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Template, 68, 36, "div", 0)(1, MJEntityFormComponentExtended_Conditional_1_Template, 3, 3);
3615
3658
  } if (rf & 2) {
3616
3659
  i0.ɵɵconditional(!ctx.isExplorerLoading && ctx.entity ? 0 : 1);
3617
- } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJAccordionBodyDirective, i4.CodeEditorComponent, i5.LoadingComponent, i6.ERDCompositeComponent, i7.EntityViewerComponent, i1.SlicePipe, i1.DecimalPipe, i1.DatePipe], styles: ["\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n\n.explorer-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info[_ngcontent-%COMP%] {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n\n\n\n.explorer-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n\n\n.nav-rail[_ngcontent-%COMP%] {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.nav-item.active[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n\n\n\n\n\n.main-canvas[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n\n.section[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-muted);\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.depth-selector[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n\n\n.fields-list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n.col-seq[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.seq-num[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row[_ngcontent-%COMP%]:hover .seq-num[_ngcontent-%COMP%], \n.list-row.selected[_ngcontent-%COMP%] .seq-num[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n.col-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon[_ngcontent-%COMP%] {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.display-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required[_ngcontent-%COMP%] {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.col-desc[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.desc-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n\n\n\n\n\n.stats-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover .stat-card-action[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action[_ngcontent-%COMP%] {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-main[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n\n\n.info-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n\n\n.capability-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n\n\n\n\n\n.fields-content[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n\n\n\n\n\n\n\n\n.group-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count[_ngcontent-%COMP%] {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content[_ngcontent-%COMP%] {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.field-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.field-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.field-related[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n.relationships-graph[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-erd[_ngcontent-%COMP%], \n.relationships-graph[_ngcontent-%COMP%] mj-erd-composite[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n\n\n.relationships-graph[_ngcontent-%COMP%] .erd-splitter[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-details[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.relationship-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.relationship-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.rel-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.rel-entity[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.rel-field[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type[_ngcontent-%COMP%], \n.rel-display-type[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n.relationship-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%] {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.rel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n\n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success);\n color: white;\n}\n\n.field-chip[_ngcontent-%COMP%] .bundle-icon[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n\n\n\n\n\n.permissions-matrix[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table[_ngcontent-%COMP%] th.center[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td.center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.matrix-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.permission-icon.granted[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.permission-icon.denied[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.rls-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n\n\n.api-capabilities[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n\n.lineage-diagram[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.lineage-stage[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.lineage-arrow[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.tracking-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config[_ngcontent-%COMP%] .helper-text[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n\n\n\n\n\n.history-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.config-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.info-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n\n\n\n.settings-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json[_ngcontent-%COMP%] {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%] {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.value-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display[_ngcontent-%COMP%] {\n color: var(--text-primary);\n}\n\n\n\n\n\n\n.explorer-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n\n\n.explorer-fill[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n\n\n\n\n\n.isa-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n\n\n.isa-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n opacity: 0.7;\n}\n\n\n\n.isa-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row[_ngcontent-%COMP%] .code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-chain[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-chain-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-children[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-child-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.isa-source-section[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n\n\n.isa-settings-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n\n\n.isa-field-inspector[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n\n\n\n\n\n\n.isa-inspector-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group[_ngcontent-%COMP%] {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n\n\n.isa-siblings[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-sibling-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n\n\n.data-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n\n\n.organic-key-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover, \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}", ".k-pane[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n}\n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}"], changeDetection: 0 }); }
3660
+ } }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJAccordionBodyDirective, i4.CodeEditorComponent, i5.LoadingComponent, i6.ERDCompositeComponent, i7.EntityViewerComponent, i8.EntityFormChromeEditorComponent, i1.SlicePipe, i1.DecimalPipe, i1.DatePipe], styles: ["\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n\n.explorer-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info[_ngcontent-%COMP%] {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n\n\n\n.explorer-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n\n\n.nav-rail[_ngcontent-%COMP%] {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.nav-item.active[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n\n\n\n\n\n.main-canvas[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n\n.section[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-muted);\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.depth-selector[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n\n\n.fields-list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n.col-seq[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.seq-num[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row[_ngcontent-%COMP%]:hover .seq-num[_ngcontent-%COMP%], \n.list-row.selected[_ngcontent-%COMP%] .seq-num[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n.col-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon[_ngcontent-%COMP%] {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.display-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required[_ngcontent-%COMP%] {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.col-desc[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.desc-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n\n\n\n\n\n.stats-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover .stat-card-action[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action[_ngcontent-%COMP%] {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-main[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n\n\n.info-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n\n\n.capability-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n\n\n\n\n\n.fields-content[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n\n\n\n\n\n\n\n\n.group-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count[_ngcontent-%COMP%] {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content[_ngcontent-%COMP%] {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.field-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.field-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.field-related[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n.relationships-graph[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-erd[_ngcontent-%COMP%], \n.relationships-graph[_ngcontent-%COMP%] mj-erd-composite[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n\n\n.relationships-graph[_ngcontent-%COMP%] .erd-splitter[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-details[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.relationship-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.relationship-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.rel-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.rel-entity[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.rel-field[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type[_ngcontent-%COMP%], \n.rel-display-type[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n.relationship-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%] {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.rel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n\n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success);\n color: white;\n}\n\n.field-chip[_ngcontent-%COMP%] .bundle-icon[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n\n\n\n\n\n.permissions-matrix[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table[_ngcontent-%COMP%] th.center[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td.center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.matrix-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.permission-icon.granted[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.permission-icon.denied[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.rls-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n\n\n.api-capabilities[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n\n.lineage-diagram[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.lineage-stage[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.lineage-arrow[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.tracking-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config[_ngcontent-%COMP%] .helper-text[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n\n\n\n\n\n.history-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.config-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.info-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n\n\n\n.settings-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json[_ngcontent-%COMP%] {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%] {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.value-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display[_ngcontent-%COMP%] {\n color: var(--text-primary);\n}\n\n\n\n\n\n\n.explorer-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n\n\n.explorer-fill[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n\n\n\n\n\n.isa-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n\n\n.isa-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n opacity: 0.7;\n}\n\n\n\n.isa-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row[_ngcontent-%COMP%] .code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-chain[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-chain-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-children[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-child-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.isa-source-section[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n\n\n.isa-settings-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n\n\n.isa-field-inspector[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n\n\n\n\n\n\n.isa-inspector-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group[_ngcontent-%COMP%] {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n\n\n.isa-siblings[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-sibling-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n\n\n.data-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n\n\n.organic-key-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover, \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}", ".k-pane[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n}\n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}"], changeDetection: 0 }); }
3618
3661
  };
3619
3662
  MJEntityFormComponentExtended = __decorate([
3620
3663
  RegisterClass(BaseFormComponent, 'MJ: Entities')
@@ -3622,7 +3665,7 @@ MJEntityFormComponentExtended = __decorate([
3622
3665
  export { MJEntityFormComponentExtended };
3623
3666
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJEntityFormComponentExtended, [{
3624
3667
  type: Component,
3625
- args: [{ standalone: false, selector: 'mj-entity-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity \u2014 read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isaFieldInspectorExpanded\" (ExpandedChange)=\"isaFieldInspectorExpanded = $event\">\n <ng-template mjAccordionTitle>\n <span>Field Source Inspector</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isFieldGroupExpanded(group.id)\"\n (ExpandedChange)=\"onFieldGroupExpandedChange(group.id, $event)\">\n <ng-template mjAccordionTitle>\n <i [class]=\"group.icon\" class=\"group-icon\"></i>\n <span class=\"group-label\">{{ group.label }}</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.fields.length }}</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">\u2014</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '\u2014' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Title=\"No fields match your search\" />\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-from-bracket\" Title=\"No outgoing relationships\" />\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-to-bracket\" Title=\"No incoming relationships\" />\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- ORGANIC KEYS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'organicKeys') {\n <section class=\"section organic-keys-section\">\n <div class=\"section-content\">\n @if (organicKeysOutgoing.length === 0 && organicKeysIncoming.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-fingerprint\"\n Title=\"No Organic Keys\"\n Message=\"This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints.\" />\n } @else {\n <!-- Outgoing: Keys defined on THIS entity -->\n @if (organicKeysOutgoing.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (Matches from this entity)\n <span class=\"group-count\">{{ organicKeysOutgoing.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (okGroup of organicKeysOutgoing; track okGroup.OrganicKey.ID) {\n <div class=\"organic-key-card\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <i class=\"fa-solid fa-fingerprint organic-key-icon\"></i>\n {{ okGroup.OrganicKey.Name }}\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"organic-key-badge strategy\">{{ okGroup.OrganicKey.NormalizationStrategy }}</span>\n <span class=\"organic-key-badge fields\">{{ okGroup.OrganicKey.MatchFieldNames }}</span>\n </div>\n </div>\n @if (okGroup.OrganicKey.Description) {\n <p class=\"organic-key-description\">{{ okGroup.OrganicKey.Description }}</p>\n }\n <div class=\"organic-key-targets\">\n @for (target of okGroup.RelatedEntities; track target.Info.ID) {\n <div class=\"organic-key-target clickable\" (click)=\"NavigateToEntityByID(target.Info.RelatedEntityID)\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"target-main\">\n <div class=\"target-header\">\n <i [class]=\"target.EntityIcon\" class=\"target-entity-icon\"></i>\n <span class=\"target-entity-name\">{{ target.Info.DisplayName || target.EntityName }}</span>\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"target-match-detail\">\n @if (target.Info.IsDirectMatch) {\n <span class=\"match-type-badge direct\">Direct</span>\n <span class=\"match-fields\">{{ okGroup.OrganicKey.MatchFieldNames }} \u2192 {{ target.Info.RelatedEntityFieldNames }}</span>\n } @else {\n <span class=\"match-type-badge transitive\">Transitive</span>\n <span class=\"match-fields\" [title]=\"target.Info.TransitiveObjectName || ''\">via {{ target.Info.TransitiveObjectName }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Incoming: Keys on OTHER entities targeting THIS entity -->\n @if (organicKeysIncoming.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Other entities matching to this one)\n <span class=\"group-count\">{{ organicKeysIncoming.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (incoming of organicKeysIncoming; track incoming.OrganicKey.ID + incoming.SourceEntityName) {\n <div class=\"organic-key-card incoming clickable\" (click)=\"NavigateToEntityByID(incoming.SourceEntityID)\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <i [class]=\"incoming.SourceEntityIcon\" class=\"target-entity-icon\"></i>\n {{ incoming.SourceEntityName }}\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"match-type-badge\" [class.direct]=\"incoming.MatchType === 'Direct'\" [class.transitive]=\"incoming.MatchType === 'Transitive'\">{{ incoming.MatchType }}</span>\n </div>\n </div>\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Key:</span>\n <span class=\"detail-value\">{{ incoming.OrganicKey.Name }}</span>\n <span class=\"organic-key-badge fields\">{{ incoming.OrganicKey.MatchFieldNames }}</span>\n <span class=\"organic-key-badge strategy\">{{ incoming.OrganicKey.NormalizationStrategy }}</span>\n </div>\n @if (incoming.RelatedEntityConfig.IsDirectMatch) {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Matched via:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.RelatedEntityFieldNames }}</span>\n </div>\n } @else {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Bridge:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.TransitiveObjectName }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-shield-halved\" Title=\"No permissions configured\" />\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [Entity]=\"entity\"\n [Provider]=\"Provider\"\n (RecordOpened)=\"OnRecordOpened($event)\"\n (CreateRecordRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-map-location-dot\"></i>\n Geocoding\n </h3>\n <p class=\"helper-text\">When enabled, CodeGen auto-detects geo fields and generates map view support</p>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.SupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.SupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Supports Geocoding</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AutoUpdateSupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AutoUpdateSupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Auto-Detect Geocoding</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced \u2014 a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-sliders\" Title=\"No custom settings configured\" />\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <mj-empty-state Variant=\"warning\" Size=\"compact\" Title=\"Full-text search is not enabled for this entity\" />\n }\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <mj-empty-state\n class=\"explorer-fill\"\n Variant=\"error\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n Title=\"Failed to load entity\"\n [Message]=\"explorerError\" />\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <mj-empty-state\n class=\"explorer-fill\"\n Icon=\"fa-solid fa-database\"\n Title=\"Entity metadata not available\" />\n }\n}\n\n<!-- Loading / Error State -->\n", styles: ["/* ============================================================\n ENTITY EXPLORER FORM - MAIN STYLES\n A world-class exploration-focused entity intelligence hub\n ============================================================ */\n\n/* CSS Variables */\n:host {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item:hover i {\n transform: scale(1.1);\n}\n\n.nav-item.active {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active i {\n transform: scale(1.05);\n}\n\n.nav-item.active::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n/* ============================================================\n MAIN CANVAS\n ============================================================ */\n\n.main-canvas {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Depth Selector */\n.depth-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Header Controls (view mode + expand/collapse) */\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls {\n display: flex;\n gap: 4px;\n}\n\n.control-btn {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Fields List View - Modern Design */\n.fields-list-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n/* Column-specific styling */\n.col-seq {\n text-align: center;\n}\n\n.seq-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row:hover .seq-num,\n.list-row.selected .seq-num {\n background: var(--accent-color);\n color: white;\n}\n\n.col-name {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name {\n min-width: 0;\n}\n\n.display-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted {\n color: var(--text-muted);\n}\n\n.required-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.col-desc {\n min-width: 0;\n}\n\n.desc-text {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n/* ============================================================\n OVERVIEW SECTION\n ============================================================ */\n\n.stats-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable {\n cursor: pointer;\n}\n\n.stat-card.clickable:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable:hover .stat-card-action {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action i {\n font-size: 14px;\n}\n\n.stat-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header i {\n font-size: 14px;\n}\n\n.stat-card-body .stat-main {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body .stat-details {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n/* Info Panels */\n.info-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title i {\n color: var(--accent-color);\n}\n\n/* Capability Tags */\n.capability-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n/* Field-group disclosure migrated to <mj-accordion-panel>. The bespoke\n .field-group separators, .group-header bar + .group-header:hover, and the\n .expand-icon chevron are now owned by the accordion and were removed. The\n title-slot content styling (.group-icon / .group-label) is kept below. The\n field-group count now uses the shared .mj-accordion-badge; .group-count below\n is retained only for the non-accordion relationship / organic-key titles. */\n\n.group-icon {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item:last-child {\n border-bottom: none;\n}\n\n.field-item:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info {\n flex: 1;\n min-width: 0;\n}\n\n.field-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable {\n color: var(--danger-color);\n}\n\n.field-related {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related:hover {\n text-decoration: underline;\n}\n\n.field-badges {\n display: flex;\n gap: 4px;\n}\n\n.badge {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph mj-entity-details {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder p {\n margin: 0;\n}\n\n.graph-placeholder .hint {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title i {\n color: var(--accent-color);\n}\n\n.relationship-items {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item:last-child {\n border-bottom: none;\n}\n\n.relationship-item:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden {\n display: none;\n}\n\n.rel-icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info {\n flex: 1;\n}\n\n.rel-entity {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity:hover {\n text-decoration: underline;\n}\n\n.rel-field {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type,\n.rel-display-type {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle {\n color: var(--success-color);\n}\n\n/* Grouped relationship styles */\n.relationship-group-title .group-count {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped {\n padding: 8px 0;\n}\n\n.relationship-item-grouped {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped:last-child {\n border-bottom: none;\n}\n\n.rel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming:hover {\n background: var(--mj-status-success);\n color: white;\n}\n\n.field-chip .bundle-icon {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n/* ============================================================\n PERMISSIONS SECTION\n ============================================================ */\n\n.permissions-matrix {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table th,\n.matrix-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table th {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table th.center,\n.matrix-table td.center {\n text-align: center;\n}\n\n.matrix-table tbody tr:hover {\n background: var(--bg-secondary);\n}\n\n.role-name {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon {\n font-size: 14px;\n}\n\n.permission-icon.granted {\n color: var(--success-color);\n}\n\n.permission-icon.denied {\n color: var(--text-muted);\n}\n\n.rls-info {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n/* API Capabilities */\n.api-capabilities {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item i {\n font-size: 12px;\n}\n\n.capability-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node .entity-box i {\n font-size: 24px;\n}\n\n.tracking-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config .helper-text {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item .label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item .value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item .value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item .value.link {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item .value.link:hover {\n text-decoration: underline;\n}\n\n.value-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display {\n color: var(--text-primary);\n}\n\n/* ============================================================\n LOADING / ERROR STATES\n ============================================================ */\n\n.explorer-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n/* Full-pane empty/error placeholders (rule 6b flex-fill). */\n.explorer-fill {\n height: 100%;\n}\n\n/* ============================================================\n IS-A TYPE HIERARCHY & VIRTUAL ENTITY STYLES\n ============================================================ */\n\n/* Badge variants for header */\n.isa-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n/* Breadcrumb under title */\n.isa-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb i {\n font-size: 11px;\n opacity: 0.7;\n}\n\n/* IS-A Panel (overview section) */\n.isa-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row .code {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n/* Inheritance chain */\n.isa-chain {\n padding: 8px 0;\n}\n\n.isa-chain-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n/* Child types list */\n.isa-children {\n padding: 8px 0;\n}\n\n.isa-child-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n/* Clickable elements */\n.clickable {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited i {\n font-size: 9px;\n}\n\n/* IS-A source section in field detail panel */\n.isa-source-section {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section h5 i {\n margin-right: 4px;\n}\n\n/* IS-A settings panel */\n.isa-settings-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel .link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted);\n}\n\n/* IS-A Field Inspector */\n.isa-field-inspector {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n/* Field Source Inspector disclosure migrated to <mj-accordion-panel>; the\n bespoke .isa-chain-label header (with chevron) is now the accordion header\n and its layout rule was removed. The .isa-field-inspector wrapper is kept\n for its top-border separator from the inheritance chain above. */\n\n.isa-inspector-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n/* Sibling chips */\n.isa-siblings {\n padding: 8px 0;\n}\n\n.isa-sibling-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count i {\n font-size: 10px;\n}\n\n/* ============================================================\n DATA SECTION\n ============================================================ */\n.data-section {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* ============================================================\n ORGANIC KEYS SECTION\n ============================================================ */\n\n.organic-key-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable,\n.organic-key-card.clickable {\n cursor: pointer;\n}\n\n.organic-key-target.clickable:hover,\n.organic-key-card.clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable:hover .target-nav-icon,\n.organic-key-card.clickable:hover .target-nav-icon {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n", ".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n"] }]
3668
+ args: [{ standalone: false, selector: 'mj-entity-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity \u2014 read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isaFieldInspectorExpanded\" (ExpandedChange)=\"isaFieldInspectorExpanded = $event\">\n <ng-template mjAccordionTitle>\n <span>Field Source Inspector</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isFieldGroupExpanded(group.id)\"\n (ExpandedChange)=\"onFieldGroupExpandedChange(group.id, $event)\">\n <ng-template mjAccordionTitle>\n <i [class]=\"group.icon\" class=\"group-icon\"></i>\n <span class=\"group-label\">{{ group.label }}</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.fields.length }}</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">\u2014</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '\u2014' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Title=\"No fields match your search\" />\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-from-bracket\" Title=\"No outgoing relationships\" />\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-to-bracket\" Title=\"No incoming relationships\" />\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- ORGANIC KEYS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'organicKeys') {\n <section class=\"section organic-keys-section\">\n <div class=\"section-content\">\n @if (organicKeysOutgoing.length === 0 && organicKeysIncoming.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-fingerprint\"\n Title=\"No Organic Keys\"\n Message=\"This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints.\" />\n } @else {\n <!-- Outgoing: Keys defined on THIS entity -->\n @if (organicKeysOutgoing.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (Matches from this entity)\n <span class=\"group-count\">{{ organicKeysOutgoing.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (okGroup of organicKeysOutgoing; track okGroup.OrganicKey.ID) {\n <div class=\"organic-key-card\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <i class=\"fa-solid fa-fingerprint organic-key-icon\"></i>\n {{ okGroup.OrganicKey.Name }}\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"organic-key-badge strategy\">{{ okGroup.OrganicKey.NormalizationStrategy }}</span>\n <span class=\"organic-key-badge fields\">{{ okGroup.OrganicKey.MatchFieldNames }}</span>\n </div>\n </div>\n @if (okGroup.OrganicKey.Description) {\n <p class=\"organic-key-description\">{{ okGroup.OrganicKey.Description }}</p>\n }\n <div class=\"organic-key-targets\">\n @for (target of okGroup.RelatedEntities; track target.Info.ID) {\n <div class=\"organic-key-target clickable\" (click)=\"NavigateToEntityByID(target.Info.RelatedEntityID)\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"target-main\">\n <div class=\"target-header\">\n <i [class]=\"target.EntityIcon\" class=\"target-entity-icon\"></i>\n <span class=\"target-entity-name\">{{ target.Info.DisplayName || target.EntityName }}</span>\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"target-match-detail\">\n @if (target.Info.IsDirectMatch) {\n <span class=\"match-type-badge direct\">Direct</span>\n <span class=\"match-fields\">{{ okGroup.OrganicKey.MatchFieldNames }} \u2192 {{ target.Info.RelatedEntityFieldNames }}</span>\n } @else {\n <span class=\"match-type-badge transitive\">Transitive</span>\n <span class=\"match-fields\" [title]=\"target.Info.TransitiveObjectName || ''\">via {{ target.Info.TransitiveObjectName }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Incoming: Keys on OTHER entities targeting THIS entity -->\n @if (organicKeysIncoming.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Other entities matching to this one)\n <span class=\"group-count\">{{ organicKeysIncoming.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (incoming of organicKeysIncoming; track incoming.OrganicKey.ID + incoming.SourceEntityName) {\n <div class=\"organic-key-card incoming clickable\" (click)=\"NavigateToEntityByID(incoming.SourceEntityID)\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <i [class]=\"incoming.SourceEntityIcon\" class=\"target-entity-icon\"></i>\n {{ incoming.SourceEntityName }}\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"match-type-badge\" [class.direct]=\"incoming.MatchType === 'Direct'\" [class.transitive]=\"incoming.MatchType === 'Transitive'\">{{ incoming.MatchType }}</span>\n </div>\n </div>\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Key:</span>\n <span class=\"detail-value\">{{ incoming.OrganicKey.Name }}</span>\n <span class=\"organic-key-badge fields\">{{ incoming.OrganicKey.MatchFieldNames }}</span>\n <span class=\"organic-key-badge strategy\">{{ incoming.OrganicKey.NormalizationStrategy }}</span>\n </div>\n @if (incoming.RelatedEntityConfig.IsDirectMatch) {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Matched via:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.RelatedEntityFieldNames }}</span>\n </div>\n } @else {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Bridge:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.TransitiveObjectName }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-shield-halved\" Title=\"No permissions configured\" />\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [Entity]=\"entity\"\n [Provider]=\"Provider\"\n (RecordOpened)=\"OnRecordOpened($event)\"\n (CreateRecordRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-map-location-dot\"></i>\n Geocoding\n </h3>\n <p class=\"helper-text\">When enabled, CodeGen auto-detects geo fields and generates map view support</p>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.SupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.SupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Supports Geocoding</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AutoUpdateSupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AutoUpdateSupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Auto-Detect Geocoding</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced \u2014 a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-sliders\" Title=\"No custom settings configured\" />\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <mj-empty-state Variant=\"warning\" Size=\"compact\" Title=\"Full-text search is not enabled for this entity\" />\n }\n </div>\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-table-columns\"></i>\n Form chrome\n </h3>\n <mj-entity-form-chrome-editor\n [FormConfig]=\"FormChromeConfig\"\n [ParentSchemaName]=\"entity.SchemaName\"\n [Candidates]=\"FormChromeCandidates\"\n [EditMode]=\"EditMode\"\n (FormConfigChange)=\"OnFormChromeConfigChange($event)\">\n </mj-entity-form-chrome-editor>\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <mj-empty-state\n class=\"explorer-fill\"\n Variant=\"error\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n Title=\"Failed to load entity\"\n [Message]=\"explorerError\" />\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <mj-empty-state\n class=\"explorer-fill\"\n Icon=\"fa-solid fa-database\"\n Title=\"Entity metadata not available\" />\n }\n}\n\n<!-- Loading / Error State -->\n", styles: ["/* ============================================================\n ENTITY EXPLORER FORM - MAIN STYLES\n A world-class exploration-focused entity intelligence hub\n ============================================================ */\n\n/* CSS Variables */\n:host {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item:hover i {\n transform: scale(1.1);\n}\n\n.nav-item.active {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active i {\n transform: scale(1.05);\n}\n\n.nav-item.active::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n/* ============================================================\n MAIN CANVAS\n ============================================================ */\n\n.main-canvas {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Depth Selector */\n.depth-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Header Controls (view mode + expand/collapse) */\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls {\n display: flex;\n gap: 4px;\n}\n\n.control-btn {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Fields List View - Modern Design */\n.fields-list-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n/* Column-specific styling */\n.col-seq {\n text-align: center;\n}\n\n.seq-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row:hover .seq-num,\n.list-row.selected .seq-num {\n background: var(--accent-color);\n color: white;\n}\n\n.col-name {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name {\n min-width: 0;\n}\n\n.display-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted {\n color: var(--text-muted);\n}\n\n.required-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.col-desc {\n min-width: 0;\n}\n\n.desc-text {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n/* ============================================================\n OVERVIEW SECTION\n ============================================================ */\n\n.stats-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable {\n cursor: pointer;\n}\n\n.stat-card.clickable:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable:hover .stat-card-action {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action i {\n font-size: 14px;\n}\n\n.stat-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header i {\n font-size: 14px;\n}\n\n.stat-card-body .stat-main {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body .stat-details {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n/* Info Panels */\n.info-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title i {\n color: var(--accent-color);\n}\n\n/* Capability Tags */\n.capability-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n/* Field-group disclosure migrated to <mj-accordion-panel>. The bespoke\n .field-group separators, .group-header bar + .group-header:hover, and the\n .expand-icon chevron are now owned by the accordion and were removed. The\n title-slot content styling (.group-icon / .group-label) is kept below. The\n field-group count now uses the shared .mj-accordion-badge; .group-count below\n is retained only for the non-accordion relationship / organic-key titles. */\n\n.group-icon {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item:last-child {\n border-bottom: none;\n}\n\n.field-item:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info {\n flex: 1;\n min-width: 0;\n}\n\n.field-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable {\n color: var(--danger-color);\n}\n\n.field-related {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related:hover {\n text-decoration: underline;\n}\n\n.field-badges {\n display: flex;\n gap: 4px;\n}\n\n.badge {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph mj-entity-details {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder p {\n margin: 0;\n}\n\n.graph-placeholder .hint {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title i {\n color: var(--accent-color);\n}\n\n.relationship-items {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item:last-child {\n border-bottom: none;\n}\n\n.relationship-item:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden {\n display: none;\n}\n\n.rel-icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info {\n flex: 1;\n}\n\n.rel-entity {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity:hover {\n text-decoration: underline;\n}\n\n.rel-field {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type,\n.rel-display-type {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle {\n color: var(--success-color);\n}\n\n/* Grouped relationship styles */\n.relationship-group-title .group-count {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped {\n padding: 8px 0;\n}\n\n.relationship-item-grouped {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped:last-child {\n border-bottom: none;\n}\n\n.rel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming:hover {\n background: var(--mj-status-success);\n color: white;\n}\n\n.field-chip .bundle-icon {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n/* ============================================================\n PERMISSIONS SECTION\n ============================================================ */\n\n.permissions-matrix {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table th,\n.matrix-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table th {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table th.center,\n.matrix-table td.center {\n text-align: center;\n}\n\n.matrix-table tbody tr:hover {\n background: var(--bg-secondary);\n}\n\n.role-name {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon {\n font-size: 14px;\n}\n\n.permission-icon.granted {\n color: var(--success-color);\n}\n\n.permission-icon.denied {\n color: var(--text-muted);\n}\n\n.rls-info {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n/* API Capabilities */\n.api-capabilities {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item i {\n font-size: 12px;\n}\n\n.capability-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node .entity-box i {\n font-size: 24px;\n}\n\n.tracking-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config .helper-text {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item .label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item .value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item .value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item .value.link {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item .value.link:hover {\n text-decoration: underline;\n}\n\n.value-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display {\n color: var(--text-primary);\n}\n\n/* ============================================================\n LOADING / ERROR STATES\n ============================================================ */\n\n.explorer-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n/* Full-pane empty/error placeholders (rule 6b flex-fill). */\n.explorer-fill {\n height: 100%;\n}\n\n/* ============================================================\n IS-A TYPE HIERARCHY & VIRTUAL ENTITY STYLES\n ============================================================ */\n\n/* Badge variants for header */\n.isa-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n/* Breadcrumb under title */\n.isa-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb i {\n font-size: 11px;\n opacity: 0.7;\n}\n\n/* IS-A Panel (overview section) */\n.isa-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row .code {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n/* Inheritance chain */\n.isa-chain {\n padding: 8px 0;\n}\n\n.isa-chain-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n/* Child types list */\n.isa-children {\n padding: 8px 0;\n}\n\n.isa-child-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n/* Clickable elements */\n.clickable {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited i {\n font-size: 9px;\n}\n\n/* IS-A source section in field detail panel */\n.isa-source-section {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section h5 i {\n margin-right: 4px;\n}\n\n/* IS-A settings panel */\n.isa-settings-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel .link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted);\n}\n\n/* IS-A Field Inspector */\n.isa-field-inspector {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n/* Field Source Inspector disclosure migrated to <mj-accordion-panel>; the\n bespoke .isa-chain-label header (with chevron) is now the accordion header\n and its layout rule was removed. The .isa-field-inspector wrapper is kept\n for its top-border separator from the inheritance chain above. */\n\n.isa-inspector-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n/* Sibling chips */\n.isa-siblings {\n padding: 8px 0;\n}\n\n.isa-sibling-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count i {\n font-size: 10px;\n}\n\n/* ============================================================\n DATA SECTION\n ============================================================ */\n.data-section {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* ============================================================\n ORGANIC KEYS SECTION\n ============================================================ */\n\n.organic-key-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable,\n.organic-key-card.clickable {\n cursor: pointer;\n}\n\n.organic-key-target.clickable:hover,\n.organic-key-card.clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable:hover .target-nav-icon,\n.organic-key-card.clickable:hover .target-nav-icon {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n", ".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n"] }]
3626
3669
  }], null, null); })();
3627
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber: 155 }); })();
3670
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber: 158 }); })();
3628
3671
  //# sourceMappingURL=entity-form.component.js.map