@memberjunction/ng-dashboards 5.30.1 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  2. package/dist/AI/components/agents/agent-configuration.component.js +4 -4
  3. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  4. package/dist/AI/components/agents/agent-editor.component.d.ts +2 -1
  5. package/dist/AI/components/agents/agent-editor.component.d.ts.map +1 -1
  6. package/dist/AI/components/agents/agent-editor.component.js +8 -6
  7. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  8. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts +2 -1
  9. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.d.ts.map +1 -1
  10. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +6 -5
  11. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  12. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts +2 -1
  13. package/dist/AI/components/analytics/cost-budget/cost-budget.component.d.ts.map +1 -1
  14. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js +6 -5
  15. package/dist/AI/components/analytics/cost-budget/cost-budget.component.js.map +1 -1
  16. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts +2 -1
  17. package/dist/AI/components/analytics/error-analysis/error-analysis.component.d.ts.map +1 -1
  18. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js +6 -5
  19. package/dist/AI/components/analytics/error-analysis/error-analysis.component.js.map +1 -1
  20. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts +2 -1
  21. package/dist/AI/components/analytics/executive-summary/executive-summary.component.d.ts.map +1 -1
  22. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js +7 -4
  23. package/dist/AI/components/analytics/executive-summary/executive-summary.component.js.map +1 -1
  24. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts +3 -2
  25. package/dist/AI/components/analytics/model-performance/model-performance.component.d.ts.map +1 -1
  26. package/dist/AI/components/analytics/model-performance/model-performance.component.js +10 -6
  27. package/dist/AI/components/analytics/model-performance/model-performance.component.js.map +1 -1
  28. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts +2 -1
  29. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.d.ts.map +1 -1
  30. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js +6 -5
  31. package/dist/AI/components/analytics/prompt-runs/prompt-run-analysis.component.js.map +1 -1
  32. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts +2 -1
  33. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.d.ts.map +1 -1
  34. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js +6 -5
  35. package/dist/AI/components/analytics/usage-patterns/usage-patterns.component.js.map +1 -1
  36. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  37. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +55 -52
  38. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  39. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +15 -15
  40. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  41. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  42. package/dist/AI/components/execution-monitoring.component.js +4 -3
  43. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  44. package/dist/AI/components/models/model-management.component.js +2 -2
  45. package/dist/AI/components/models/model-management.component.js.map +1 -1
  46. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +2 -1
  47. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
  48. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +10 -8
  49. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  50. package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
  51. package/dist/AI/components/prompts/prompt-management.component.js +2 -2
  52. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  53. package/dist/AI/components/prompts/prompt-version-control.component.d.ts +2 -1
  54. package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -1
  55. package/dist/AI/components/prompts/prompt-version-control.component.js +13 -10
  56. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  57. package/dist/AI/components/requests/agent-requests-resource.component.js +1 -1
  58. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -1
  59. package/dist/AI/components/tags/tags-resource.component.d.ts +1181 -0
  60. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -0
  61. package/dist/AI/components/tags/tags-resource.component.js +7487 -0
  62. package/dist/AI/components/tags/tags-resource.component.js.map +1 -0
  63. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  64. package/dist/AI/components/vectors/vector-management-resource.component.js +25 -21
  65. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  66. package/dist/AI/index.d.ts +1 -0
  67. package/dist/AI/index.d.ts.map +1 -1
  68. package/dist/AI/index.js +5 -0
  69. package/dist/AI/index.js.map +1 -1
  70. package/dist/AI/services/ai-instrumentation.service.d.ts +5 -0
  71. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  72. package/dist/AI/services/ai-instrumentation.service.js +12 -4
  73. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  74. package/dist/APIKeys/api-applications-panel.component.d.ts +3 -2
  75. package/dist/APIKeys/api-applications-panel.component.d.ts.map +1 -1
  76. package/dist/APIKeys/api-applications-panel.component.js +5 -4
  77. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  78. package/dist/APIKeys/api-key-create-dialog.component.d.ts +2 -1
  79. package/dist/APIKeys/api-key-create-dialog.component.d.ts.map +1 -1
  80. package/dist/APIKeys/api-key-create-dialog.component.js +5 -5
  81. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  82. package/dist/APIKeys/api-key-edit-panel.component.d.ts +3 -2
  83. package/dist/APIKeys/api-key-edit-panel.component.d.ts.map +1 -1
  84. package/dist/APIKeys/api-key-edit-panel.component.js +11 -10
  85. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  86. package/dist/APIKeys/api-key-list.component.d.ts +2 -1
  87. package/dist/APIKeys/api-key-list.component.d.ts.map +1 -1
  88. package/dist/APIKeys/api-key-list.component.js +6 -5
  89. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  90. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  91. package/dist/APIKeys/api-keys-resource.component.js +4 -4
  92. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  93. package/dist/APIKeys/api-scopes-panel.component.d.ts +3 -2
  94. package/dist/APIKeys/api-scopes-panel.component.d.ts.map +1 -1
  95. package/dist/APIKeys/api-scopes-panel.component.js +8 -6
  96. package/dist/APIKeys/api-scopes-panel.component.js.map +1 -1
  97. package/dist/APIKeys/api-usage-panel.component.d.ts +3 -2
  98. package/dist/APIKeys/api-usage-panel.component.d.ts.map +1 -1
  99. package/dist/APIKeys/api-usage-panel.component.js +10 -8
  100. package/dist/APIKeys/api-usage-panel.component.js.map +1 -1
  101. package/dist/Actions/components/actions-list-view.component.d.ts +2 -1
  102. package/dist/Actions/components/actions-list-view.component.d.ts.map +1 -1
  103. package/dist/Actions/components/actions-list-view.component.js +6 -5
  104. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  105. package/dist/Actions/components/actions-overview.component.js +2 -2
  106. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  107. package/dist/Actions/components/categories-list-view.component.d.ts +2 -1
  108. package/dist/Actions/components/categories-list-view.component.d.ts.map +1 -1
  109. package/dist/Actions/components/categories-list-view.component.js +6 -5
  110. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  111. package/dist/Actions/components/execution-monitoring.component.js +1 -1
  112. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  113. package/dist/Actions/components/explorer/action-card.component.d.ts +2 -1
  114. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  115. package/dist/Actions/components/explorer/action-card.component.js +6 -4
  116. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  117. package/dist/Actions/components/explorer/action-explorer.component.js +1 -1
  118. package/dist/Actions/components/explorer/action-explorer.component.js.map +1 -1
  119. package/dist/Actions/components/explorer/new-action-panel.component.d.ts +2 -1
  120. package/dist/Actions/components/explorer/new-action-panel.component.d.ts.map +1 -1
  121. package/dist/Actions/components/explorer/new-action-panel.component.js +7 -5
  122. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  123. package/dist/Actions/components/explorer/new-category-panel.component.d.ts +2 -1
  124. package/dist/Actions/components/explorer/new-category-panel.component.d.ts.map +1 -1
  125. package/dist/Actions/components/explorer/new-category-panel.component.js +7 -5
  126. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  127. package/dist/ApplicationRoles/application-roles-resource.component.js +4 -4
  128. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  129. package/dist/Communication/communication-logs-resource.component.js +1 -1
  130. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  131. package/dist/Communication/communication-monitor-resource.component.js +1 -1
  132. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  133. package/dist/Communication/communication-providers-resource.component.js +3 -3
  134. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  135. package/dist/Communication/communication-runs-resource.component.js +1 -1
  136. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  137. package/dist/Communication/communication-templates-resource.component.js +3 -3
  138. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  139. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
  140. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  141. package/dist/ComponentStudio/component-studio-dashboard.component.js +5 -4
  142. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  143. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts +2 -1
  144. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.d.ts.map +1 -1
  145. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +6 -4
  146. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js.map +1 -1
  147. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts +11 -2
  148. package/dist/ComponentStudio/components/artifact-load-dialog.component.d.ts.map +1 -1
  149. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +61 -27
  150. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  151. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts +4 -2
  152. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  153. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +19 -11
  154. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  155. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts +4 -2
  156. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.d.ts.map +1 -1
  157. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +11 -3
  158. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  159. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts +10 -1
  160. package/dist/ComponentStudio/components/workspace/component-preview.component.d.ts.map +1 -1
  161. package/dist/ComponentStudio/components/workspace/component-preview.component.js +18 -9
  162. package/dist/ComponentStudio/components/workspace/component-preview.component.js.map +1 -1
  163. package/dist/ComponentStudio/services/component-studio-state.service.d.ts +11 -1
  164. package/dist/ComponentStudio/services/component-studio-state.service.d.ts.map +1 -1
  165. package/dist/ComponentStudio/services/component-studio-state.service.js +23 -3
  166. package/dist/ComponentStudio/services/component-studio-state.service.js.map +1 -1
  167. package/dist/ComponentStudio/services/component-version.service.d.ts +6 -1
  168. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  169. package/dist/ComponentStudio/services/component-version.service.js +16 -6
  170. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  171. package/dist/Credentials/components/credentials-audit-resource.component.js +1 -1
  172. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  173. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  174. package/dist/Credentials/components/credentials-categories-resource.component.js +3 -3
  175. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  176. package/dist/Credentials/components/credentials-list-resource.component.d.ts.map +1 -1
  177. package/dist/Credentials/components/credentials-list-resource.component.js +3 -3
  178. package/dist/Credentials/components/credentials-list-resource.component.js.map +1 -1
  179. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  180. package/dist/Credentials/components/credentials-overview-resource.component.js +3 -3
  181. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  182. package/dist/Credentials/components/credentials-types-resource.component.d.ts.map +1 -1
  183. package/dist/Credentials/components/credentials-types-resource.component.js +3 -3
  184. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  185. package/dist/Credentials/credentials-dashboard.component.js +1 -1
  186. package/dist/Credentials/credentials-dashboard.component.js.map +1 -1
  187. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +13 -13
  188. package/dist/DashboardBrowser/dashboard-browser-resource.component.js.map +1 -1
  189. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts +4 -0
  190. package/dist/DashboardBrowser/dashboard-share-adapter.d.ts.map +1 -1
  191. package/dist/DashboardBrowser/dashboard-share-adapter.js +5 -2
  192. package/dist/DashboardBrowser/dashboard-share-adapter.js.map +1 -1
  193. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts +3 -1
  194. package/dist/DashboardBrowser/dashboard-share-dialog.component.d.ts.map +1 -1
  195. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +9 -4
  196. package/dist/DashboardBrowser/dashboard-share-dialog.component.js.map +1 -1
  197. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +3 -2
  198. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -1
  199. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +7 -6
  200. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -1
  201. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +3 -2
  202. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -1
  203. package/dist/DataExplorer/components/view-selector/view-selector.component.js +6 -5
  204. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -1
  205. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  206. package/dist/DataExplorer/data-explorer-dashboard.component.js +10 -9
  207. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  208. package/dist/DataExplorer/services/explorer-state.service.d.ts +6 -1
  209. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -1
  210. package/dist/DataExplorer/services/explorer-state.service.js +15 -5
  211. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -1
  212. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts +64 -0
  213. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.d.ts.map +1 -0
  214. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js +400 -0
  215. package/dist/DatabaseDesigner/components/create-wizard/database-create-wizard.component.js.map +1 -0
  216. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts +42 -0
  217. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.d.ts.map +1 -0
  218. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js +232 -0
  219. package/dist/DatabaseDesigner/components/create-wizard/steps/step-basics.component.js.map +1 -0
  220. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts +14 -0
  221. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.d.ts.map +1 -0
  222. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js +38 -0
  223. package/dist/DatabaseDesigner/components/create-wizard/steps/step-fields.component.js.map +1 -0
  224. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts +24 -0
  225. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.d.ts.map +1 -0
  226. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js +77 -0
  227. package/dist/DatabaseDesigner/components/create-wizard/steps/step-pipeline.component.js.map +1 -0
  228. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts +88 -0
  229. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.d.ts.map +1 -0
  230. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js +404 -0
  231. package/dist/DatabaseDesigner/components/create-wizard/steps/step-relationships.component.js.map +1 -0
  232. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts +12 -0
  233. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.d.ts.map +1 -0
  234. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js +116 -0
  235. package/dist/DatabaseDesigner/components/create-wizard/steps/step-review.component.js.map +1 -0
  236. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts +55 -0
  237. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.d.ts.map +1 -0
  238. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +204 -0
  239. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -0
  240. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +61 -0
  241. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -0
  242. package/dist/DatabaseDesigner/components/entity-list.component.js +485 -0
  243. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -0
  244. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts +52 -0
  245. package/dist/DatabaseDesigner/components/modify/database-modify.component.d.ts.map +1 -0
  246. package/dist/DatabaseDesigner/components/modify/database-modify.component.js +320 -0
  247. package/dist/DatabaseDesigner/components/modify/database-modify.component.js.map +1 -0
  248. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts +79 -0
  249. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.d.ts.map +1 -0
  250. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js +378 -0
  251. package/dist/DatabaseDesigner/components/shared/database-preview-pane.component.js.map +1 -0
  252. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts +85 -0
  253. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.d.ts.map +1 -0
  254. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js +429 -0
  255. package/dist/DatabaseDesigner/components/shared/entity-fields-grid.component.js.map +1 -0
  256. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts +58 -0
  257. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.d.ts.map +1 -0
  258. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js +333 -0
  259. package/dist/DatabaseDesigner/components/shared/entity-pipeline-panel.component.js.map +1 -0
  260. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts +36 -0
  261. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.d.ts.map +1 -0
  262. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js +345 -0
  263. package/dist/DatabaseDesigner/components/shared/entity-review-panel.component.js.map +1 -0
  264. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts +13 -0
  265. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.d.ts.map +1 -0
  266. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js +81 -0
  267. package/dist/DatabaseDesigner/components/shared/wizard-step-indicator.component.js.map +1 -0
  268. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +30 -0
  269. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -0
  270. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +131 -0
  271. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -0
  272. package/dist/DatabaseDesigner/database-designer-erd.d.ts +19 -0
  273. package/dist/DatabaseDesigner/database-designer-erd.d.ts.map +1 -0
  274. package/dist/DatabaseDesigner/database-designer-erd.js +84 -0
  275. package/dist/DatabaseDesigner/database-designer-erd.js.map +1 -0
  276. package/dist/DatabaseDesigner/database-designer.types.d.ts +167 -0
  277. package/dist/DatabaseDesigner/database-designer.types.d.ts.map +1 -0
  278. package/dist/DatabaseDesigner/database-designer.types.js +26 -0
  279. package/dist/DatabaseDesigner/database-designer.types.js.map +1 -0
  280. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts +94 -0
  281. package/dist/DatabaseDesigner/services/database-designer.engine.d.ts.map +1 -0
  282. package/dist/DatabaseDesigner/services/database-designer.engine.js +392 -0
  283. package/dist/DatabaseDesigner/services/database-designer.engine.js.map +1 -0
  284. package/dist/DatabaseDesigner/services/database-designer.service.d.ts +78 -0
  285. package/dist/DatabaseDesigner/services/database-designer.service.d.ts.map +1 -0
  286. package/dist/DatabaseDesigner/services/database-designer.service.js +273 -0
  287. package/dist/DatabaseDesigner/services/database-designer.service.js.map +1 -0
  288. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts +79 -0
  289. package/dist/DatabaseDesigner/services/entity-wizard-state.service.d.ts.map +1 -0
  290. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js +204 -0
  291. package/dist/DatabaseDesigner/services/entity-wizard-state.service.js.map +1 -0
  292. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  293. package/dist/EntityAdmin/entity-admin-dashboard.component.js +2 -2
  294. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  295. package/dist/Home/action-pin-config-dialog.component.d.ts +2 -1
  296. package/dist/Home/action-pin-config-dialog.component.d.ts.map +1 -1
  297. package/dist/Home/action-pin-config-dialog.component.js +6 -4
  298. package/dist/Home/action-pin-config-dialog.component.js.map +1 -1
  299. package/dist/Home/action-pin-runner-dialog.component.d.ts +2 -1
  300. package/dist/Home/action-pin-runner-dialog.component.d.ts.map +1 -1
  301. package/dist/Home/action-pin-runner-dialog.component.js +5 -4
  302. package/dist/Home/action-pin-runner-dialog.component.js.map +1 -1
  303. package/dist/Home/home-application.d.ts.map +1 -1
  304. package/dist/Home/home-application.js +10 -12
  305. package/dist/Home/home-application.js.map +1 -1
  306. package/dist/Home/home-dashboard.component.d.ts.map +1 -1
  307. package/dist/Home/home-dashboard.component.js +3 -3
  308. package/dist/Home/home-dashboard.component.js.map +1 -1
  309. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  310. package/dist/Integration/components/activity/activity.component.js +1 -0
  311. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  312. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  313. package/dist/Integration/components/connections/connections.component.js +11 -10
  314. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  315. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.d.ts.map +1 -1
  316. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +2 -2
  317. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  318. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  319. package/dist/Integration/components/overview/overview.component.js +1 -0
  320. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  321. package/dist/Integration/components/pipelines/pipelines.component.d.ts.map +1 -1
  322. package/dist/Integration/components/pipelines/pipelines.component.js +1 -0
  323. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  324. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  325. package/dist/Integration/components/schedules/schedules.component.js +5 -4
  326. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  327. package/dist/Integration/services/integration-data.service.d.ts +5 -1
  328. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  329. package/dist/Integration/services/integration-data.service.js +27 -19
  330. package/dist/Integration/services/integration-data.service.js.map +1 -1
  331. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +6 -6
  332. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  333. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  334. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +8 -6
  335. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  336. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +6 -6
  337. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  338. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js +3 -3
  339. package/dist/KnowledgeHub/components/scheduling/scheduling-resource.component.js.map +1 -1
  340. package/dist/Lists/components/lists-browse-resource.component.js +6 -6
  341. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  342. package/dist/Lists/components/lists-categories-resource.component.js +4 -4
  343. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  344. package/dist/Lists/components/lists-my-lists-resource.component.js +6 -6
  345. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  346. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  347. package/dist/Lists/components/lists-operations-resource.component.js +11 -10
  348. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  349. package/dist/Lists/services/list-set-operations.service.d.ts +5 -0
  350. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  351. package/dist/Lists/services/list-set-operations.service.js +11 -3
  352. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  353. package/dist/MCP/components/mcp-connection-dialog.component.d.ts +2 -1
  354. package/dist/MCP/components/mcp-connection-dialog.component.d.ts.map +1 -1
  355. package/dist/MCP/components/mcp-connection-dialog.component.js +8 -6
  356. package/dist/MCP/components/mcp-connection-dialog.component.js.map +1 -1
  357. package/dist/MCP/components/mcp-server-dialog.component.d.ts +2 -1
  358. package/dist/MCP/components/mcp-server-dialog.component.d.ts.map +1 -1
  359. package/dist/MCP/components/mcp-server-dialog.component.js +7 -5
  360. package/dist/MCP/components/mcp-server-dialog.component.js.map +1 -1
  361. package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
  362. package/dist/MCP/mcp-dashboard.component.js +12 -12
  363. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  364. package/dist/Permissions/permissions-shared.d.ts +3 -3
  365. package/dist/Permissions/permissions-shared.d.ts.map +1 -1
  366. package/dist/Permissions/permissions-shared.js +5 -5
  367. package/dist/Permissions/permissions-shared.js.map +1 -1
  368. package/dist/Permissions/resource-access-resource.component.js +1 -1
  369. package/dist/Permissions/resource-access-resource.component.js.map +1 -1
  370. package/dist/Permissions/user-access-resource.component.js +1 -2
  371. package/dist/Permissions/user-access-resource.component.js.map +1 -1
  372. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  373. package/dist/QueryBrowser/query-browser-resource.component.js +2 -2
  374. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  375. package/dist/Scheduling/scheduling-dashboard.component.d.ts.map +1 -1
  376. package/dist/Scheduling/scheduling-dashboard.component.js +1 -0
  377. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  378. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts +5 -0
  379. package/dist/Scheduling/services/scheduling-instrumentation.service.d.ts.map +1 -1
  380. package/dist/Scheduling/services/scheduling-instrumentation.service.js +21 -13
  381. package/dist/Scheduling/services/scheduling-instrumentation.service.js.map +1 -1
  382. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  383. package/dist/SystemDiagnostics/system-diagnostics.component.js +2 -2
  384. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  385. package/dist/Testing/components/testing-explorer.component.d.ts +2 -1
  386. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  387. package/dist/Testing/components/testing-explorer.component.js +9 -7
  388. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  389. package/dist/Testing/services/testing-instrumentation.service.d.ts +6 -1
  390. package/dist/Testing/services/testing-instrumentation.service.d.ts.map +1 -1
  391. package/dist/Testing/services/testing-instrumentation.service.js +21 -11
  392. package/dist/Testing/services/testing-instrumentation.service.js.map +1 -1
  393. package/dist/Testing/testing-dashboard.component.d.ts +3 -1
  394. package/dist/Testing/testing-dashboard.component.d.ts.map +1 -1
  395. package/dist/Testing/testing-dashboard.component.js +15 -11
  396. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  397. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  398. package/dist/VersionHistory/components/diff-resource.component.js +5 -5
  399. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  400. package/dist/VersionHistory/components/graph-resource.component.d.ts.map +1 -1
  401. package/dist/VersionHistory/components/graph-resource.component.js +1 -2
  402. package/dist/VersionHistory/components/graph-resource.component.js.map +1 -1
  403. package/dist/VersionHistory/components/labels-resource.component.d.ts.map +1 -1
  404. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  405. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  406. package/dist/VersionHistory/components/restore-resource.component.js +1 -1
  407. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  408. package/dist/ai-dashboards.module.d.ts +35 -34
  409. package/dist/ai-dashboards.module.d.ts.map +1 -1
  410. package/dist/ai-dashboards.module.js +6 -0
  411. package/dist/ai-dashboards.module.js.map +1 -1
  412. package/dist/module.d.ts +13 -12
  413. package/dist/module.d.ts.map +1 -1
  414. package/dist/module.js +7 -0
  415. package/dist/module.js.map +1 -1
  416. package/dist/public-api.d.ts +3 -1
  417. package/dist/public-api.d.ts.map +1 -1
  418. package/dist/public-api.js +3 -1
  419. package/dist/public-api.js.map +1 -1
  420. package/dist/shared/entity-field-display.d.ts +4 -3
  421. package/dist/shared/entity-field-display.d.ts.map +1 -1
  422. package/dist/shared/entity-field-display.js +9 -9
  423. package/dist/shared/entity-field-display.js.map +1 -1
  424. package/package.json +52 -51
@@ -0,0 +1,485 @@
1
+ /**
2
+ * @module entity-list.component
3
+ * @description Displays the list of entities accessible to the current user.
4
+ *
5
+ * Loaded from `DatabaseDesignerEngine.Instance.loadAccessibleEntities()` —
6
+ * data access goes through the engine singleton, not this component directly,
7
+ * so the cache is shared across wizard openings.
8
+ */
9
+ import { Component, Output, EventEmitter, ChangeDetectionStrategy, ChangeDetectorRef, inject, } from '@angular/core';
10
+ import { Subject, BehaviorSubject, combineLatest } from 'rxjs';
11
+ import { debounceTime, takeUntil, map } from 'rxjs/operators';
12
+ import { DatabaseDesignerEngine } from '../services/database-designer.engine.js';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/forms";
15
+ import * as i2 from "@memberjunction/ng-ui-components";
16
+ const _c0 = () => [1, 2, 3, 4];
17
+ function EntityListComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
18
+ const _r1 = i0.ɵɵgetCurrentView();
19
+ i0.ɵɵelementStart(0, "button", 16);
20
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SearchTerm = ""); });
21
+ i0.ɵɵelement(1, "i", 17);
22
+ i0.ɵɵelementEnd();
23
+ } }
24
+ function EntityListComponent_Conditional_13_For_4_Template(rf, ctx) { if (rf & 1) {
25
+ i0.ɵɵelementStart(0, "option", 20);
26
+ i0.ɵɵtext(1);
27
+ i0.ɵɵelementEnd();
28
+ } if (rf & 2) {
29
+ const schema_r4 = ctx.$implicit;
30
+ i0.ɵɵproperty("value", schema_r4);
31
+ i0.ɵɵadvance();
32
+ i0.ɵɵtextInterpolate(schema_r4);
33
+ } }
34
+ function EntityListComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
35
+ const _r3 = i0.ɵɵgetCurrentView();
36
+ i0.ɵɵelementStart(0, "select", 18);
37
+ i0.ɵɵlistener("change", function EntityListComponent_Conditional_13_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SelectedSchema = $event.target.value); });
38
+ i0.ɵɵelementStart(1, "option", 19);
39
+ i0.ɵɵtext(2, "All Schemas");
40
+ i0.ɵɵelementEnd();
41
+ i0.ɵɵrepeaterCreate(3, EntityListComponent_Conditional_13_For_4_Template, 2, 2, "option", 20, i0.ɵɵrepeaterTrackByIdentity);
42
+ i0.ɵɵelementEnd();
43
+ } if (rf & 2) {
44
+ const ctx_r1 = i0.ɵɵnextContext();
45
+ i0.ɵɵproperty("value", ctx_r1.SelectedSchema);
46
+ i0.ɵɵadvance(3);
47
+ i0.ɵɵrepeater(ctx_r1.AvailableFilterSchemas);
48
+ } }
49
+ function EntityListComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
50
+ i0.ɵɵelementStart(0, "div", 14);
51
+ i0.ɵɵelement(1, "i", 21);
52
+ i0.ɵɵtext(2);
53
+ i0.ɵɵelementEnd();
54
+ } if (rf & 2) {
55
+ const ctx_r1 = i0.ɵɵnextContext();
56
+ i0.ɵɵadvance(2);
57
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.ErrorMessage, " ");
58
+ } }
59
+ function EntityListComponent_Conditional_17_For_2_Template(rf, ctx) { if (rf & 1) {
60
+ i0.ɵɵelementStart(0, "div", 22);
61
+ i0.ɵɵelement(1, "div", 23)(2, "div", 24)(3, "div", 25)(4, "div", 25)(5, "div", 24)(6, "div", 25);
62
+ i0.ɵɵelementEnd();
63
+ } }
64
+ function EntityListComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵelementStart(0, "div", 15);
66
+ i0.ɵɵrepeaterCreate(1, EntityListComponent_Conditional_17_For_2_Template, 7, 0, "div", 22, i0.ɵɵrepeaterTrackByIndex);
67
+ i0.ɵɵelementEnd();
68
+ } if (rf & 2) {
69
+ i0.ɵɵadvance();
70
+ i0.ɵɵrepeater(i0.ɵɵpureFunction0(0, _c0));
71
+ } }
72
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵelement(0, "i", 40);
74
+ } if (rf & 2) {
75
+ const ctx_r1 = i0.ɵɵnextContext(3);
76
+ i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
77
+ } }
78
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
79
+ i0.ɵɵelement(0, "i", 32);
80
+ } }
81
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelement(0, "i", 40);
83
+ } if (rf & 2) {
84
+ const ctx_r1 = i0.ɵɵnextContext(3);
85
+ i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
86
+ } }
87
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
88
+ i0.ɵɵelement(0, "i", 32);
89
+ } }
90
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
91
+ i0.ɵɵelement(0, "i", 40);
92
+ } if (rf & 2) {
93
+ const ctx_r1 = i0.ɵɵnextContext(3);
94
+ i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
95
+ } }
96
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
97
+ i0.ɵɵelement(0, "i", 32);
98
+ } }
99
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_22_Template(rf, ctx) { if (rf & 1) {
100
+ i0.ɵɵelement(0, "i", 40);
101
+ } if (rf & 2) {
102
+ const ctx_r1 = i0.ɵɵnextContext(3);
103
+ i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
104
+ } }
105
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
106
+ i0.ɵɵelement(0, "i", 32);
107
+ } }
108
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelement(0, "i", 40);
110
+ } if (rf & 2) {
111
+ const ctx_r1 = i0.ɵɵnextContext(3);
112
+ i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
113
+ } }
114
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_28_Template(rf, ctx) { if (rf & 1) {
115
+ i0.ɵɵelement(0, "i", 32);
116
+ } }
117
+ function EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_5_Template(rf, ctx) { if (rf & 1) {
118
+ i0.ɵɵelementStart(0, "span", 44);
119
+ i0.ɵɵtext(1, "You");
120
+ i0.ɵɵelementEnd();
121
+ } }
122
+ function EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_13_Template(rf, ctx) { if (rf & 1) {
123
+ i0.ɵɵelementStart(0, "span", 50);
124
+ i0.ɵɵelement(1, "i", 58);
125
+ i0.ɵɵtext(2, " You ");
126
+ i0.ɵɵelementEnd();
127
+ } }
128
+ function EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_14_Template(rf, ctx) { if (rf & 1) {
129
+ i0.ɵɵelementStart(0, "span", 51);
130
+ i0.ɵɵtext(1);
131
+ i0.ɵɵelementEnd();
132
+ } if (rf & 2) {
133
+ const entity_r7 = i0.ɵɵnextContext().$implicit;
134
+ i0.ɵɵadvance();
135
+ i0.ɵɵtextInterpolate(entity_r7.ownerDisplayName);
136
+ } }
137
+ function EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_15_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelementStart(0, "span", 52);
139
+ i0.ɵɵtext(1, "\u2014");
140
+ i0.ɵɵelementEnd();
141
+ } }
142
+ function EntityListComponent_Conditional_18_Conditional_0_For_33_Template(rf, ctx) { if (rf & 1) {
143
+ const _r6 = i0.ɵɵgetCurrentView();
144
+ i0.ɵɵelementStart(0, "tr", 38)(1, "td", 41)(2, "div", 42)(3, "span", 43);
145
+ i0.ɵɵtext(4);
146
+ i0.ɵɵelementEnd();
147
+ i0.ɵɵconditionalCreate(5, EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_5_Template, 2, 0, "span", 44);
148
+ i0.ɵɵelementEnd()();
149
+ i0.ɵɵelementStart(6, "td", 45)(7, "span", 46);
150
+ i0.ɵɵtext(8);
151
+ i0.ɵɵelementEnd()();
152
+ i0.ɵɵelementStart(9, "td", 47)(10, "code", 48);
153
+ i0.ɵɵtext(11);
154
+ i0.ɵɵelementEnd()();
155
+ i0.ɵɵelementStart(12, "td", 49);
156
+ i0.ɵɵconditionalCreate(13, EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_13_Template, 3, 0, "span", 50)(14, EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_14_Template, 2, 1, "span", 51)(15, EntityListComponent_Conditional_18_Conditional_0_For_33_Conditional_15_Template, 2, 0, "span", 52);
157
+ i0.ɵɵelementEnd();
158
+ i0.ɵɵelementStart(16, "td", 53);
159
+ i0.ɵɵtext(17);
160
+ i0.ɵɵelementEnd();
161
+ i0.ɵɵelementStart(18, "td", 54)(19, "div", 55)(20, "button", 56);
162
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_0_For_33_Template_button_click_20_listener() { const entity_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnEditEntity(entity_r7)); });
163
+ i0.ɵɵelement(21, "i", 57);
164
+ i0.ɵɵtext(22, " Edit ");
165
+ i0.ɵɵelementEnd()()()();
166
+ } if (rf & 2) {
167
+ const entity_r7 = ctx.$implicit;
168
+ const ctx_r1 = i0.ɵɵnextContext(3);
169
+ i0.ɵɵadvance(4);
170
+ i0.ɵɵtextInterpolate(entity_r7.entityName);
171
+ i0.ɵɵadvance();
172
+ i0.ɵɵconditional(entity_r7.isOwner ? 5 : -1);
173
+ i0.ɵɵadvance(3);
174
+ i0.ɵɵtextInterpolate(entity_r7.schemaName);
175
+ i0.ɵɵadvance(3);
176
+ i0.ɵɵtextInterpolate(entity_r7.tableName);
177
+ i0.ɵɵadvance(2);
178
+ i0.ɵɵconditional(entity_r7.isOwner ? 13 : entity_r7.ownerDisplayName ? 14 : 15);
179
+ i0.ɵɵadvance(4);
180
+ i0.ɵɵtextInterpolate(ctx_r1.FormatDate(entity_r7.createdAt));
181
+ } }
182
+ function EntityListComponent_Conditional_18_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
183
+ i0.ɵɵtext(0);
184
+ } if (rf & 2) {
185
+ const ctx_r1 = i0.ɵɵnextContext(3);
186
+ i0.ɵɵtextInterpolate1(" matching \"", ctx_r1.SearchTerm, "\" ");
187
+ } }
188
+ function EntityListComponent_Conditional_18_Conditional_0_Template(rf, ctx) { if (rf & 1) {
189
+ const _r5 = i0.ɵɵgetCurrentView();
190
+ i0.ɵɵelementStart(0, "div", 27)(1, "table", 28)(2, "thead")(3, "tr")(4, "th", 29);
191
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_0_Template_th_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("entityName")); });
192
+ i0.ɵɵtext(5, " Entity Name ");
193
+ i0.ɵɵelementStart(6, "span", 30);
194
+ i0.ɵɵconditionalCreate(7, EntityListComponent_Conditional_18_Conditional_0_Conditional_7_Template, 1, 4, "i", 31)(8, EntityListComponent_Conditional_18_Conditional_0_Conditional_8_Template, 1, 0, "i", 32);
195
+ i0.ɵɵelementEnd()();
196
+ i0.ɵɵelementStart(9, "th", 33);
197
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_0_Template_th_click_9_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("schemaName")); });
198
+ i0.ɵɵtext(10, " Schema ");
199
+ i0.ɵɵelementStart(11, "span", 30);
200
+ i0.ɵɵconditionalCreate(12, EntityListComponent_Conditional_18_Conditional_0_Conditional_12_Template, 1, 4, "i", 31)(13, EntityListComponent_Conditional_18_Conditional_0_Conditional_13_Template, 1, 0, "i", 32);
201
+ i0.ɵɵelementEnd()();
202
+ i0.ɵɵelementStart(14, "th", 34);
203
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_0_Template_th_click_14_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("tableName")); });
204
+ i0.ɵɵtext(15, " Table ");
205
+ i0.ɵɵelementStart(16, "span", 30);
206
+ i0.ɵɵconditionalCreate(17, EntityListComponent_Conditional_18_Conditional_0_Conditional_17_Template, 1, 4, "i", 31)(18, EntityListComponent_Conditional_18_Conditional_0_Conditional_18_Template, 1, 0, "i", 32);
207
+ i0.ɵɵelementEnd()();
208
+ i0.ɵɵelementStart(19, "th", 35);
209
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_0_Template_th_click_19_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("owner")); });
210
+ i0.ɵɵtext(20, " Owner ");
211
+ i0.ɵɵelementStart(21, "span", 30);
212
+ i0.ɵɵconditionalCreate(22, EntityListComponent_Conditional_18_Conditional_0_Conditional_22_Template, 1, 4, "i", 31)(23, EntityListComponent_Conditional_18_Conditional_0_Conditional_23_Template, 1, 0, "i", 32);
213
+ i0.ɵɵelementEnd()();
214
+ i0.ɵɵelementStart(24, "th", 36);
215
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_0_Template_th_click_24_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("createdAt")); });
216
+ i0.ɵɵtext(25, " Created ");
217
+ i0.ɵɵelementStart(26, "span", 30);
218
+ i0.ɵɵconditionalCreate(27, EntityListComponent_Conditional_18_Conditional_0_Conditional_27_Template, 1, 4, "i", 31)(28, EntityListComponent_Conditional_18_Conditional_0_Conditional_28_Template, 1, 0, "i", 32);
219
+ i0.ɵɵelementEnd()();
220
+ i0.ɵɵelementStart(29, "th", 37);
221
+ i0.ɵɵtext(30, "Actions");
222
+ i0.ɵɵelementEnd()()();
223
+ i0.ɵɵelementStart(31, "tbody");
224
+ i0.ɵɵrepeaterCreate(32, EntityListComponent_Conditional_18_Conditional_0_For_33_Template, 23, 6, "tr", 38, i0.ɵɵcomponentInstance().TrackByEntityId, true);
225
+ i0.ɵɵelementEnd()()();
226
+ i0.ɵɵelementStart(34, "div", 39);
227
+ i0.ɵɵtext(35);
228
+ i0.ɵɵconditionalCreate(36, EntityListComponent_Conditional_18_Conditional_0_Conditional_36_Template, 1, 1);
229
+ i0.ɵɵelementEnd();
230
+ } if (rf & 2) {
231
+ const ctx_r1 = i0.ɵɵnextContext(2);
232
+ i0.ɵɵadvance(7);
233
+ i0.ɵɵconditional(ctx_r1.SortField === "entityName" ? 7 : 8);
234
+ i0.ɵɵadvance(5);
235
+ i0.ɵɵconditional(ctx_r1.SortField === "schemaName" ? 12 : 13);
236
+ i0.ɵɵadvance(5);
237
+ i0.ɵɵconditional(ctx_r1.SortField === "tableName" ? 17 : 18);
238
+ i0.ɵɵadvance(5);
239
+ i0.ɵɵconditional(ctx_r1.SortField === "owner" ? 22 : 23);
240
+ i0.ɵɵadvance(5);
241
+ i0.ɵɵconditional(ctx_r1.SortField === "createdAt" ? 27 : 28);
242
+ i0.ɵɵadvance(5);
243
+ i0.ɵɵrepeater(ctx_r1.FilteredEntities);
244
+ i0.ɵɵadvance(3);
245
+ i0.ɵɵtextInterpolate2(" ", ctx_r1.FilteredEntities.length, " ", ctx_r1.FilteredEntities.length === 1 ? "entity" : "entities", " ");
246
+ i0.ɵɵadvance();
247
+ i0.ɵɵconditional(ctx_r1.SearchTerm ? 36 : -1);
248
+ } }
249
+ function EntityListComponent_Conditional_18_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
250
+ const _r8 = i0.ɵɵgetCurrentView();
251
+ i0.ɵɵelementStart(0, "h3", 61);
252
+ i0.ɵɵtext(1);
253
+ i0.ɵɵelementEnd();
254
+ i0.ɵɵelementStart(2, "p", 62);
255
+ i0.ɵɵtext(3, "Try a different search term or clear the filter.");
256
+ i0.ɵɵelementEnd();
257
+ i0.ɵɵelementStart(4, "button", 63);
258
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_1_Conditional_3_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SearchTerm = ""); });
259
+ i0.ɵɵtext(5, " Clear search ");
260
+ i0.ɵɵelementEnd();
261
+ } if (rf & 2) {
262
+ const ctx_r1 = i0.ɵɵnextContext(3);
263
+ i0.ɵɵadvance();
264
+ i0.ɵɵtextInterpolate1("No entities match \"", ctx_r1.SearchTerm, "\"");
265
+ } }
266
+ function EntityListComponent_Conditional_18_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
267
+ const _r9 = i0.ɵɵgetCurrentView();
268
+ i0.ɵɵelementStart(0, "h3", 61);
269
+ i0.ɵɵtext(1, "No entities yet");
270
+ i0.ɵɵelementEnd();
271
+ i0.ɵɵelementStart(2, "p", 62);
272
+ i0.ɵɵtext(3, " Create your first user-defined entity. You can also use the Database Designer agent in a conversation for guided design. ");
273
+ i0.ɵɵelementEnd();
274
+ i0.ɵɵelementStart(4, "button", 64);
275
+ i0.ɵɵlistener("click", function EntityListComponent_Conditional_18_Conditional_1_Conditional_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnNewEntity()); });
276
+ i0.ɵɵelement(5, "i", 5);
277
+ i0.ɵɵtext(6, " Create Entity ");
278
+ i0.ɵɵelementEnd();
279
+ } }
280
+ function EntityListComponent_Conditional_18_Conditional_1_Template(rf, ctx) { if (rf & 1) {
281
+ i0.ɵɵelementStart(0, "div", 26)(1, "div", 59);
282
+ i0.ɵɵelement(2, "i", 60);
283
+ i0.ɵɵelementEnd();
284
+ i0.ɵɵconditionalCreate(3, EntityListComponent_Conditional_18_Conditional_1_Conditional_3_Template, 6, 1)(4, EntityListComponent_Conditional_18_Conditional_1_Conditional_4_Template, 7, 0);
285
+ i0.ɵɵelementEnd();
286
+ } if (rf & 2) {
287
+ const ctx_r1 = i0.ɵɵnextContext(2);
288
+ i0.ɵɵadvance(3);
289
+ i0.ɵɵconditional(ctx_r1.SearchTerm ? 3 : 4);
290
+ } }
291
+ function EntityListComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
292
+ i0.ɵɵconditionalCreate(0, EntityListComponent_Conditional_18_Conditional_0_Template, 37, 8)(1, EntityListComponent_Conditional_18_Conditional_1_Template, 5, 1, "div", 26);
293
+ } if (rf & 2) {
294
+ const ctx_r1 = i0.ɵɵnextContext();
295
+ i0.ɵɵconditional(ctx_r1.FilteredEntities.length > 0 ? 0 : !ctx_r1.IsLoading ? 1 : -1);
296
+ } }
297
+ export class EntityListComponent {
298
+ /** Emitted when the user clicks "Edit" on an entity row. */
299
+ EditEntity = new EventEmitter();
300
+ /** Emitted when the user clicks "View Details" on an entity row. */
301
+ ViewEntity = new EventEmitter();
302
+ /** Emitted when the user clicks "New Entity". */
303
+ NewEntity = new EventEmitter();
304
+ IsLoading = false;
305
+ ErrorMessage = null;
306
+ /** Full unfiltered list from the engine. */
307
+ _allEntities = [];
308
+ /** Cached sorted unique schema names — recomputed only when _allEntities changes. */
309
+ _availableFilterSchemas = [];
310
+ /** Currently displayed (filtered + sorted) rows. */
311
+ FilteredEntities = [];
312
+ _search$ = new BehaviorSubject('');
313
+ _schema$ = new BehaviorSubject('');
314
+ _sortField$ = new BehaviorSubject('entityName');
315
+ _sortDir$ = new BehaviorSubject('asc');
316
+ _destroy$ = new Subject();
317
+ cdr = inject(ChangeDetectorRef);
318
+ // ─── Lifecycle ─────────────────────────────────────────────────────────
319
+ ngOnInit() {
320
+ this.setupFilter();
321
+ this.loadEntities();
322
+ }
323
+ ngOnDestroy() {
324
+ this._destroy$.next();
325
+ this._destroy$.complete();
326
+ }
327
+ // ─── Template bindings ─────────────────────────────────────────────────
328
+ get SearchTerm() { return this._search$.value; }
329
+ set SearchTerm(v) { this._search$.next(v); }
330
+ get SelectedSchema() { return this._schema$.value; }
331
+ set SelectedSchema(v) { this._schema$.next(v); }
332
+ /** Unique schema names present in the loaded entity list, sorted alphabetically. */
333
+ get AvailableFilterSchemas() { return this._availableFilterSchemas; }
334
+ get SortField() { return this._sortField$.value; }
335
+ get SortDirection() { return this._sortDir$.value; }
336
+ /** Toggle sort: same field flips direction; new field defaults to asc. */
337
+ OnSortChange(field) {
338
+ if (this._sortField$.value === field) {
339
+ this._sortDir$.next(this._sortDir$.value === 'asc' ? 'desc' : 'asc');
340
+ }
341
+ else {
342
+ this._sortField$.next(field);
343
+ this._sortDir$.next('asc');
344
+ }
345
+ }
346
+ OnEditEntity(entity) {
347
+ this.EditEntity.emit(entity);
348
+ }
349
+ OnViewEntity(entity) {
350
+ this.ViewEntity.emit(entity);
351
+ }
352
+ OnNewEntity() {
353
+ this.NewEntity.emit();
354
+ }
355
+ OnRefresh() {
356
+ DatabaseDesignerEngine.Instance.invalidateCache();
357
+ this.loadEntities();
358
+ }
359
+ TrackByEntityId(_, entity) {
360
+ return entity.entityId;
361
+ }
362
+ FormatDate(date) {
363
+ return date.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });
364
+ }
365
+ // ─── Private helpers ───────────────────────────────────────────────────
366
+ setupFilter() {
367
+ combineLatest([this._search$, this._schema$, this._sortField$, this._sortDir$])
368
+ .pipe(debounceTime(150), map(([search, schema, field, dir]) => this.applyFilterAndSort(search, schema, field, dir)), takeUntil(this._destroy$))
369
+ .subscribe(result => {
370
+ this.FilteredEntities = result;
371
+ this.cdr.markForCheck();
372
+ });
373
+ }
374
+ async loadEntities() {
375
+ this.IsLoading = true;
376
+ this.ErrorMessage = null;
377
+ this.cdr.markForCheck();
378
+ try {
379
+ this._allEntities = await DatabaseDesignerEngine.Instance.loadAccessibleEntities();
380
+ this._availableFilterSchemas = [...new Set(this._allEntities.map(e => e.schemaName))].sort();
381
+ // Trigger the combineLatest pipe to recalculate; reset schema filter if
382
+ // the previously selected schema is no longer present in the new entity list.
383
+ const schemas = this._availableFilterSchemas;
384
+ if (this._schema$.value && !schemas.includes(this._schema$.value)) {
385
+ this._schema$.next('');
386
+ }
387
+ else {
388
+ this._search$.next(this._search$.value);
389
+ }
390
+ }
391
+ catch (err) {
392
+ this.ErrorMessage = err instanceof Error ? err.message : String(err);
393
+ }
394
+ finally {
395
+ this.IsLoading = false;
396
+ this.cdr.markForCheck();
397
+ }
398
+ }
399
+ applyFilterAndSort(search, schema, field, dir) {
400
+ const term = search.trim().toLowerCase();
401
+ let results = [...this._allEntities];
402
+ if (schema) {
403
+ results = results.filter(e => e.schemaName === schema);
404
+ }
405
+ if (term) {
406
+ results = results.filter(e => e.entityName.toLowerCase().includes(term) ||
407
+ e.tableName.toLowerCase().includes(term) ||
408
+ e.schemaName.toLowerCase().includes(term));
409
+ }
410
+ results.sort((a, b) => {
411
+ const aVal = this.sortValue(a, field);
412
+ const bVal = this.sortValue(b, field);
413
+ const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;
414
+ return dir === 'asc' ? cmp : -cmp;
415
+ });
416
+ return results;
417
+ }
418
+ sortValue(entity, field) {
419
+ switch (field) {
420
+ case 'entityName': return entity.entityName.toLowerCase();
421
+ case 'tableName': return entity.tableName.toLowerCase();
422
+ case 'schemaName': return entity.schemaName.toLowerCase();
423
+ case 'createdAt': return entity.createdAt.getTime();
424
+ case 'owner': return entity.isOwner ? 0 : 1;
425
+ default: return entity.entityName.toLowerCase();
426
+ }
427
+ }
428
+ static ɵfac = function EntityListComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntityListComponent)(); };
429
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityListComponent, selectors: [["mj-database-entity-list"]], outputs: { EditEntity: "EditEntity", ViewEntity: "ViewEntity", NewEntity: "NewEntity" }, standalone: false, decls: 19, vars: 9, consts: [[1, "entity-list-root"], [1, "entity-list-header"], [1, "entity-list-title"], [1, "fa-solid", "fa-table-cells-large"], ["mjButton", "", "buttonStyle", "primary", 1, "new-entity-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "entity-list-toolbar"], [1, "search-wrap"], [1, "fa-solid", "fa-magnifying-glass", "search-icon"], ["type", "text", "placeholder", "Search by name, table, or schema\u2026", "aria-label", "Search entities", 1, "mj-input", "search-input", 3, "ngModelChange", "ngModel"], ["aria-label", "Clear search", 1, "search-clear"], ["aria-label", "Filter by schema", 1, "mj-input", "schema-filter", 3, "value"], ["mjButton", "", "buttonStyle", "secondary", "title", "Refresh list", 1, "refresh-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-rotate"], ["role", "alert", 1, "entity-list-error"], ["aria-busy", "true", "aria-label", "Loading entities\u2026", 1, "skeleton-table"], ["aria-label", "Clear search", 1, "search-clear", 3, "click"], [1, "fa-solid", "fa-xmark"], ["aria-label", "Filter by schema", 1, "mj-input", "schema-filter", 3, "change", "value"], ["value", ""], [3, "value"], [1, "fa-solid", "fa-circle-exclamation"], [1, "skeleton-row"], [1, "skeleton-cell", "wide"], [1, "skeleton-cell", "medium"], [1, "skeleton-cell", "narrow"], [1, "zero-state"], [1, "table-wrap"], ["role", "grid", "aria-label", "User-defined entities", 1, "entity-table"], ["scope", "col", 1, "col-name", "sortable", 3, "click"], [1, "sort-icon"], [1, "fa-solid", 3, "fa-chevron-up", "fa-chevron-down"], [1, "fa-solid", "fa-chevron-up", "muted"], ["scope", "col", 1, "col-schema", "sortable", 3, "click"], ["scope", "col", 1, "col-table", "sortable", 3, "click"], ["scope", "col", 1, "col-owner", "sortable", 3, "click"], ["scope", "col", 1, "col-created", "sortable", 3, "click"], ["scope", "col", 1, "col-actions"], [1, "entity-row"], [1, "entity-count"], [1, "fa-solid"], [1, "col-name"], [1, "entity-name-cell"], [1, "entity-name"], ["title", "You own this entity", 1, "owner-badge", "owner-you"], [1, "col-schema"], [1, "schema-badge"], [1, "col-table"], [1, "table-name"], [1, "col-owner"], [1, "owner-self"], [1, "owner-other"], [1, "owner-other", "muted"], [1, "col-created"], [1, "col-actions"], [1, "row-actions"], ["mjButton", "", "buttonStyle", "secondary", "title", "Edit this entity", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "fa-solid", "fa-user-check"], [1, "zero-state-icon"], [1, "fa-regular", "fa-rectangle-list"], [1, "zero-state-title"], [1, "zero-state-body"], ["mjButton", "", "buttonStyle", "secondary", 3, "click"], ["mjButton", "", "buttonStyle", "primary", 3, "click"]], template: function EntityListComponent_Template(rf, ctx) { if (rf & 1) {
430
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "h2", 2);
431
+ i0.ɵɵelement(3, "i", 3);
432
+ i0.ɵɵtext(4, " Database Designer ");
433
+ i0.ɵɵelementEnd();
434
+ i0.ɵɵelementStart(5, "button", 4);
435
+ i0.ɵɵlistener("click", function EntityListComponent_Template_button_click_5_listener() { return ctx.OnNewEntity(); });
436
+ i0.ɵɵelement(6, "i", 5);
437
+ i0.ɵɵtext(7, " New Entity ");
438
+ i0.ɵɵelementEnd()();
439
+ i0.ɵɵelementStart(8, "div", 6)(9, "div", 7);
440
+ i0.ɵɵelement(10, "i", 8);
441
+ i0.ɵɵelementStart(11, "input", 9);
442
+ i0.ɵɵtwoWayListener("ngModelChange", function EntityListComponent_Template_input_ngModelChange_11_listener($event) { i0.ɵɵtwoWayBindingSet(ctx.SearchTerm, $event) || (ctx.SearchTerm = $event); return $event; });
443
+ i0.ɵɵelementEnd();
444
+ i0.ɵɵconditionalCreate(12, EntityListComponent_Conditional_12_Template, 2, 0, "button", 10);
445
+ i0.ɵɵelementEnd();
446
+ i0.ɵɵconditionalCreate(13, EntityListComponent_Conditional_13_Template, 5, 1, "select", 11);
447
+ i0.ɵɵelementStart(14, "button", 12);
448
+ i0.ɵɵlistener("click", function EntityListComponent_Template_button_click_14_listener() { return ctx.OnRefresh(); });
449
+ i0.ɵɵelement(15, "i", 13);
450
+ i0.ɵɵelementEnd()();
451
+ i0.ɵɵconditionalCreate(16, EntityListComponent_Conditional_16_Template, 3, 1, "div", 14);
452
+ i0.ɵɵconditionalCreate(17, EntityListComponent_Conditional_17_Template, 3, 1, "div", 15);
453
+ i0.ɵɵconditionalCreate(18, EntityListComponent_Conditional_18_Template, 2, 1);
454
+ i0.ɵɵelementEnd();
455
+ } if (rf & 2) {
456
+ i0.ɵɵadvance(11);
457
+ i0.ɵɵtwoWayProperty("ngModel", ctx.SearchTerm);
458
+ i0.ɵɵadvance();
459
+ i0.ɵɵconditional(ctx.SearchTerm ? 12 : -1);
460
+ i0.ɵɵadvance();
461
+ i0.ɵɵconditional(ctx.AvailableFilterSchemas.length > 1 ? 13 : -1);
462
+ i0.ɵɵadvance();
463
+ i0.ɵɵproperty("disabled", ctx.IsLoading);
464
+ i0.ɵɵadvance();
465
+ i0.ɵɵclassProp("fa-spin", ctx.IsLoading);
466
+ i0.ɵɵadvance();
467
+ i0.ɵɵconditional(ctx.ErrorMessage ? 16 : -1);
468
+ i0.ɵɵadvance();
469
+ i0.ɵɵconditional(ctx.IsLoading && ctx.FilteredEntities.length === 0 ? 17 : -1);
470
+ i0.ɵɵadvance();
471
+ i0.ɵɵconditional(!ctx.IsLoading || ctx.FilteredEntities.length > 0 ? 18 : -1);
472
+ } }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective], styles: ["\n\n\n.entity-list-root[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n}\n\n\n\n\n.entity-list-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.entity-list-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.entity-list-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n}\n\n\n\n\n.entity-list-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 24px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.search-wrap[_ngcontent-%COMP%] {\n position: relative;\n flex: 1;\n max-width: 400px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 10px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n pointer-events: none;\n font-size: 0.875rem;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 32px;\n padding-right: 32px;\n box-sizing: border-box;\n}\n\n.schema-filter[_ngcontent-%COMP%] {\n width: auto;\n min-width: 160px;\n max-width: 220px;\n flex-shrink: 0;\n}\n\n.search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n padding: 4px 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 4px;\n line-height: 1;\n transition: color 0.15s, background 0.15s;\n}\n\n.search-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n\n\n\n.entity-list-error[_ngcontent-%COMP%] {\n margin: 12px 24px;\n padding: 10px 14px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n}\n\n\n\n\n.skeleton-table[_ngcontent-%COMP%] {\n padding: 0 24px;\n margin-top: 8px;\n}\n\n.skeleton-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n padding: 12px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.skeleton-cell[_ngcontent-%COMP%] {\n height: 18px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n animation: _ngcontent-%COMP%_skeleton-pulse 1.4s ease-in-out infinite;\n}\n\n.skeleton-cell.wide[_ngcontent-%COMP%] { flex: 3; }\n.skeleton-cell.medium[_ngcontent-%COMP%] { flex: 2; }\n.skeleton-cell.narrow[_ngcontent-%COMP%] { flex: 1; }\n\n@keyframes _ngcontent-%COMP%_skeleton-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n\n\n\n\n.table-wrap[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n padding: 0 24px;\n}\n\n\n\n\n.entity-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9rem;\n}\n\n.entity-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.entity-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 10px 12px;\n text-align: left;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n white-space: nowrap;\n user-select: none;\n}\n\n.entity-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.entity-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 5px;\n font-size: 0.75rem;\n vertical-align: middle;\n min-width: 14px;\n}\n\n.sort-icon[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n opacity: 0.3;\n}\n\n.entity-row[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.1s;\n}\n\n.entity-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 12px;\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n\n\n\n\n\n.entity-table[_ngcontent-%COMP%] {\n table-layout: fixed;\n}\n\n.col-name[_ngcontent-%COMP%] { width: 28%; }\n.col-schema[_ngcontent-%COMP%] { width: 14%; }\n.col-table[_ngcontent-%COMP%] { width: 18%; }\n.col-owner[_ngcontent-%COMP%] { width: 15%; }\n.col-created[_ngcontent-%COMP%] { width: 13%; white-space: nowrap; }\n.col-actions[_ngcontent-%COMP%] { width: 12%; }\n\n\n\n\n.entity-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.owner-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.owner-badge.owner-you[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.schema-badge[_ngcontent-%COMP%] {\n display: inline-block;\n font-size: 0.8rem;\n font-family: monospace;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n}\n\ncode.table-name[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.owner-self[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n color: var(--mj-brand-primary);\n font-size: 0.875rem;\n}\n\n.owner-self[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n}\n\n.owner-other[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n}\n\n.owner-other.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n\n.row-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n padding: 6px 12px;\n}\n\n\n\n\n.entity-count[_ngcontent-%COMP%] {\n padding: 10px 24px;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n border-top: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n\n\n\n.zero-state[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n gap: 16px;\n}\n\n.zero-state-icon[_ngcontent-%COMP%] {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zero-state-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.zero-state-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.zero-state-body[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9rem;\n color: var(--mj-text-secondary);\n max-width: 420px;\n line-height: 1.6;\n word-break: break-word;\n overflow-wrap: break-word;\n}"], changeDetection: 0 });
473
+ }
474
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityListComponent, [{
475
+ type: Component,
476
+ args: [{ standalone: false, selector: 'mj-database-entity-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"entity-list-root\">\n\n <!-- \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <div class=\"entity-list-header\">\n <h2 class=\"entity-list-title\">\n <i class=\"fa-solid fa-table-cells-large\"></i>\n Database Designer\n </h2>\n <button\n mjButton\n buttonStyle=\"primary\"\n class=\"new-entity-btn\"\n (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Entity\n </button>\n </div>\n\n <!-- \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <div class=\"entity-list-toolbar\">\n <div class=\"search-wrap\">\n <i class=\"fa-solid fa-magnifying-glass search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-input search-input\"\n placeholder=\"Search by name, table, or schema\u2026\"\n [(ngModel)]=\"SearchTerm\"\n aria-label=\"Search entities\" />\n @if (SearchTerm) {\n <button\n class=\"search-clear\"\n (click)=\"SearchTerm = ''\"\n aria-label=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n @if (AvailableFilterSchemas.length > 1) {\n <select\n class=\"mj-input schema-filter\"\n [value]=\"SelectedSchema\"\n (change)=\"SelectedSchema = $any($event.target).value\"\n aria-label=\"Filter by schema\">\n <option value=\"\">All Schemas</option>\n @for (schema of AvailableFilterSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n }\n\n <button\n mjButton\n buttonStyle=\"secondary\"\n class=\"refresh-btn\"\n title=\"Refresh list\"\n [disabled]=\"IsLoading\"\n (click)=\"OnRefresh()\">\n <i class=\"fa-solid fa-rotate\" [class.fa-spin]=\"IsLoading\"></i>\n </button>\n </div>\n\n <!-- \u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (ErrorMessage) {\n <div class=\"entity-list-error\" role=\"alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ ErrorMessage }}\n </div>\n }\n\n <!-- \u2500\u2500 Loading skeleton \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (IsLoading && FilteredEntities.length === 0) {\n <div class=\"skeleton-table\" aria-busy=\"true\" aria-label=\"Loading entities\u2026\">\n @for (_ of [1, 2, 3, 4]; track $index) {\n <div class=\"skeleton-row\">\n <div class=\"skeleton-cell wide\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n </div>\n }\n </div>\n }\n\n <!-- \u2500\u2500 Entity table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!IsLoading || FilteredEntities.length > 0) {\n @if (FilteredEntities.length > 0) {\n <div class=\"table-wrap\">\n <table class=\"entity-table\" role=\"grid\" aria-label=\"User-defined entities\">\n <thead>\n <tr>\n <th class=\"col-name sortable\" (click)=\"OnSortChange('entityName')\" scope=\"col\">\n Entity Name\n <span class=\"sort-icon\">\n @if (SortField === 'entityName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-schema sortable\" (click)=\"OnSortChange('schemaName')\" scope=\"col\">\n Schema\n <span class=\"sort-icon\">\n @if (SortField === 'schemaName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-table sortable\" (click)=\"OnSortChange('tableName')\" scope=\"col\">\n Table\n <span class=\"sort-icon\">\n @if (SortField === 'tableName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-owner sortable\" (click)=\"OnSortChange('owner')\" scope=\"col\">\n Owner\n <span class=\"sort-icon\">\n @if (SortField === 'owner') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-created sortable\" (click)=\"OnSortChange('createdAt')\" scope=\"col\">\n Created\n <span class=\"sort-icon\">\n @if (SortField === 'createdAt') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-actions\" scope=\"col\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (entity of FilteredEntities; track TrackByEntityId($index, entity)) {\n <tr class=\"entity-row\">\n <td class=\"col-name\">\n <div class=\"entity-name-cell\">\n <span class=\"entity-name\">{{ entity.entityName }}</span>\n @if (entity.isOwner) {\n <span class=\"owner-badge owner-you\" title=\"You own this entity\">You</span>\n }\n </div>\n </td>\n <td class=\"col-schema\">\n <span class=\"schema-badge\">{{ entity.schemaName }}</span>\n </td>\n <td class=\"col-table\">\n <code class=\"table-name\">{{ entity.tableName }}</code>\n </td>\n <td class=\"col-owner\">\n @if (entity.isOwner) {\n <span class=\"owner-self\">\n <i class=\"fa-solid fa-user-check\"></i>\n You\n </span>\n } @else if (entity.ownerDisplayName) {\n <span class=\"owner-other\">{{ entity.ownerDisplayName }}</span>\n } @else {\n <span class=\"owner-other muted\">\u2014</span>\n }\n </td>\n <td class=\"col-created\">{{ FormatDate(entity.createdAt) }}</td>\n <td class=\"col-actions\">\n <div class=\"row-actions\">\n <button\n mjButton\n buttonStyle=\"secondary\"\n class=\"action-btn\"\n title=\"Edit this entity\"\n (click)=\"OnEditEntity(entity)\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"entity-count\">\n {{ FilteredEntities.length }} {{ FilteredEntities.length === 1 ? 'entity' : 'entities' }}\n @if (SearchTerm) { matching \"{{ SearchTerm }}\" }\n </div>\n } @else if (!IsLoading) {\n <!-- \u2500\u2500 Zero state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <div class=\"zero-state\">\n <div class=\"zero-state-icon\">\n <i class=\"fa-regular fa-rectangle-list\"></i>\n </div>\n @if (SearchTerm) {\n <h3 class=\"zero-state-title\">No entities match \"{{ SearchTerm }}\"</h3>\n <p class=\"zero-state-body\">Try a different search term or clear the filter.</p>\n <button mjButton buttonStyle=\"secondary\" (click)=\"SearchTerm = ''\">\n Clear search\n </button>\n } @else {\n <h3 class=\"zero-state-title\">No entities yet</h3>\n <p class=\"zero-state-body\">\n Create your first user-defined entity. You can also use the\n Database Designer agent in a conversation for guided design.\n </p>\n <button mjButton buttonStyle=\"primary\" (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Entity\n </button>\n }\n </div>\n }\n }\n</div>\n", styles: ["/* \u2500\u2500 Root \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-list-root {\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: 0;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-list-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.entity-list-title {\n margin: 0;\n font-size: 1.25rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.entity-list-title i {\n color: var(--mj-brand-primary);\n font-size: 1.1rem;\n}\n\n/* \u2500\u2500 Toolbar \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-list-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 24px;\n border-bottom: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n.search-wrap {\n position: relative;\n flex: 1;\n max-width: 400px;\n}\n\n.search-icon {\n position: absolute;\n left: 10px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n pointer-events: none;\n font-size: 0.875rem;\n}\n\n.search-input {\n width: 100%;\n padding-left: 32px;\n padding-right: 32px;\n box-sizing: border-box;\n}\n\n.schema-filter {\n width: auto;\n min-width: 160px;\n max-width: 220px;\n flex-shrink: 0;\n}\n\n.search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: none;\n border: none;\n padding: 4px 6px;\n color: var(--mj-text-muted);\n cursor: pointer;\n border-radius: 4px;\n line-height: 1;\n transition: color 0.15s, background 0.15s;\n}\n\n.search-clear:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-hover);\n}\n\n/* \u2500\u2500 Error banner \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-list-error {\n margin: 12px 24px;\n padding: 10px 14px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n}\n\n/* \u2500\u2500 Skeleton loader \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.skeleton-table {\n padding: 0 24px;\n margin-top: 8px;\n}\n\n.skeleton-row {\n display: flex;\n gap: 16px;\n padding: 12px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.skeleton-cell {\n height: 18px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n animation: skeleton-pulse 1.4s ease-in-out infinite;\n}\n\n.skeleton-cell.wide { flex: 3; }\n.skeleton-cell.medium { flex: 2; }\n.skeleton-cell.narrow { flex: 1; }\n\n@keyframes skeleton-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n\n/* \u2500\u2500 Table wrap \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.table-wrap {\n flex: 1;\n overflow: auto;\n padding: 0 24px;\n}\n\n/* \u2500\u2500 Entity table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9rem;\n}\n\n.entity-table thead tr {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.entity-table th {\n padding: 10px 12px;\n text-align: left;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n white-space: nowrap;\n user-select: none;\n}\n\n.entity-table th.sortable {\n cursor: pointer;\n}\n\n.entity-table th.sortable:hover {\n color: var(--mj-text-primary);\n}\n\n.sort-icon {\n display: inline-block;\n margin-left: 5px;\n font-size: 0.75rem;\n vertical-align: middle;\n min-width: 14px;\n}\n\n.sort-icon .muted {\n opacity: 0.3;\n}\n\n.entity-row {\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.1s;\n}\n\n.entity-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-table td {\n padding: 12px 12px;\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n/* \u2500\u2500 Column sizing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* Fixed layout \u2014 percentages for content columns, px only for utility columns */\n\n.entity-table {\n table-layout: fixed;\n}\n\n.col-name { width: 28%; }\n.col-schema { width: 14%; }\n.col-table { width: 18%; }\n.col-owner { width: 15%; }\n.col-created { width: 13%; white-space: nowrap; }\n.col-actions { width: 12%; }\n\n/* \u2500\u2500 Cell content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.owner-badge {\n display: inline-flex;\n align-items: center;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.owner-badge.owner-you {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.schema-badge {\n display: inline-block;\n font-size: 0.8rem;\n font-family: monospace;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n}\n\ncode.table-name {\n font-size: 0.8rem;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.owner-self {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n color: var(--mj-brand-primary);\n font-size: 0.875rem;\n}\n\n.owner-self i {\n font-size: 0.8rem;\n}\n\n.owner-other {\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n}\n\n.owner-other.muted {\n color: var(--mj-text-muted);\n}\n\n/* \u2500\u2500 Row actions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.row-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn {\n font-size: 0.8125rem;\n padding: 6px 12px;\n}\n\n/* \u2500\u2500 Row count footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-count {\n padding: 10px 24px;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n border-top: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Zero state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.zero-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n gap: 16px;\n}\n\n.zero-state-icon {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zero-state-icon i {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.zero-state-title {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.zero-state-body {\n margin: 0;\n font-size: 0.9rem;\n color: var(--mj-text-secondary);\n max-width: 420px;\n line-height: 1.6;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n"] }]
477
+ }], null, { EditEntity: [{
478
+ type: Output
479
+ }], ViewEntity: [{
480
+ type: Output
481
+ }], NewEntity: [{
482
+ type: Output
483
+ }] }); })();
484
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityListComponent, { className: "EntityListComponent", filePath: "src/DatabaseDesigner/components/entity-list.component.ts", lineNumber: 32 }); })();
485
+ //# sourceMappingURL=entity-list.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-list.component.js","sourceRoot":"","sources":["../../../src/DatabaseDesigner/components/entity-list.component.ts","../../../src/DatabaseDesigner/components/entity-list.component.html"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACH,SAAS,EAAqB,MAAM,EAAE,YAAY,EAClD,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,GACrD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;;;;mBCyD1E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;;;IA5CT,kCAG4B;IAD1B,4MAAsB,EAAE,KAAC;IAEzB,wBAAiC;IACnC,iBAAS;;;IAYP,kCAAyB;IAAA,YAAY;IAAA,iBAAS;;;IAAtC,iCAAgB;IAAC,cAAY;IAAZ,+BAAY;;;;IAPzC,kCAIgC;IAD9B,gPAAqD;IAErD,kCAAiB;IAAA,2BAAW;IAAA,iBAAS;IACrC,2HAEC;IACH,iBAAS;;;IAPP,6CAAwB;IAIxB,eAEC;IAFD,4CAEC;;;IAiBL,+BAA4C;IAC1C,wBAA8C;IAC9C,YACF;IAAA,iBAAM;;;IADJ,eACF;IADE,oDACF;;;IAOI,+BAA0B;IAMxB,AADA,AADA,AADA,AADA,AADA,0BAAsC,cACE,cACA,cACA,cACA,cACA;IAC1C,iBAAM;;;IATV,+BAA4E;IAC1E,qHASC;IACH,iBAAM;;IAVJ,cASC;IATD,yCASC;;;IAea,wBAA2H;;;IAAvD,AAAhD,+DAA+C,oDAAmD;;;IAEtH,wBAA4C;;;IAQ5C,wBAA2H;;;IAAvD,AAAhD,+DAA+C,oDAAmD;;;IAEtH,wBAA4C;;;IAQ5C,wBAA2H;;;IAAvD,AAAhD,+DAA+C,oDAAmD;;;IAEtH,wBAA4C;;;IAQ5C,wBAA2H;;;IAAvD,AAAhD,+DAA+C,oDAAmD;;;IAEtH,wBAA4C;;;IAQ5C,wBAA2H;;;IAAvD,AAAhD,+DAA+C,oDAAmD;;;IAEtH,wBAA4C;;;IAc1C,gCAAgE;IAAA,mBAAG;IAAA,iBAAO;;;IAY5E,gCAAyB;IACvB,wBAAsC;IACtC,qBACF;IAAA,iBAAO;;;IAEP,gCAA0B;IAAA,YAA6B;IAAA,iBAAO;;;IAApC,cAA6B;IAA7B,gDAA6B;;;IAEvD,gCAAgC;IAAA,sBAAC;IAAA,iBAAO;;;;IArBxC,AADF,AADF,AADF,8BAAuB,aACA,cACW,eACF;IAAA,YAAuB;IAAA,iBAAO;IACxD,2HAAsB;IAI1B,AADE,iBAAM,EACH;IAEH,AADF,8BAAuB,eACM;IAAA,YAAuB;IACpD,AADoD,iBAAO,EACtD;IAEH,AADF,8BAAsB,gBACK;IAAA,aAAsB;IACjD,AADiD,iBAAO,EACnD;IACL,+BAAsB;IAQlB,AAFA,AALF,6HAAsB,uGAKgB,uGAE7B;IAGX,iBAAK;IACL,+BAAwB;IAAA,aAAkC;IAAA,iBAAK;IAG3D,AADF,AADF,+BAAwB,eACG,kBAMU;IAA/B,2OAAS,8BAAoB,KAAC;IAC9B,yBAAyC;IACzC,uBACF;IAGN,AADE,AADE,AADE,iBAAS,EACL,EACH,EACF;;;;IAtC2B,eAAuB;IAAvB,0CAAuB;IACjD,cAEC;IAFD,4CAEC;IAIwB,eAAuB;IAAvB,0CAAuB;IAGzB,eAAsB;IAAtB,yCAAsB;IAG/C,eASC;IATD,+EASC;IAEqB,eAAkC;IAAlC,4DAAkC;;;IAsB/C,YAA4B;;;IAA5B,+DAA4B;;;;IAxGzC,AADF,AADF,AADF,AADF,+BAAwB,gBACqD,YAClE,SACD,aAC6E;IAAjD,mMAAS,oBAAa,YAAY,CAAC,KAAC;IAChE,6BACA;IAAA,gCAAwB;IAGpB,AAFF,iHAAkC,2FAEzB;IAIb,AADE,iBAAO,EACJ;IACL,8BAAiF;IAAjD,mMAAS,oBAAa,YAAY,CAAC,KAAC;IAClE,yBACA;IAAA,iCAAwB;IAGpB,AAFF,mHAAkC,6FAEzB;IAIb,AADE,iBAAO,EACJ;IACL,+BAA+E;IAAhD,oMAAS,oBAAa,WAAW,CAAC,KAAC;IAChE,wBACA;IAAA,iCAAwB;IAGpB,AAFF,mHAAiC,6FAExB;IAIb,AADE,iBAAO,EACJ;IACL,+BAA2E;IAA5C,oMAAS,oBAAa,OAAO,CAAC,KAAC;IAC5D,wBACA;IAAA,iCAAwB;IAGpB,AAFF,mHAA6B,6FAEpB;IAIb,AADE,iBAAO,EACJ;IACL,+BAAiF;IAAhD,oMAAS,oBAAa,WAAW,CAAC,KAAC;IAClE,0BACA;IAAA,iCAAwB;IAGpB,AAFF,mHAAiC,6FAExB;IAIb,AADE,iBAAO,EACJ;IACL,+BAAoC;IAAA,wBAAO;IAE/C,AADE,AAD6C,iBAAK,EAC7C,EACC;IACR,8BAAO;IACL,0JA2CC;IAGP,AADE,AADE,iBAAQ,EACF,EACJ;IAEN,gCAA0B;IACxB,aACA;IAAA,0GAAkB;IACpB,iBAAM;;;IAtGM,eAIC;IAJD,2DAIC;IAMD,eAIC;IAJD,6DAIC;IAMD,eAIC;IAJD,4DAIC;IAMD,eAIC;IAJD,wDAIC;IAMD,eAIC;IAJD,4DAIC;IAOP,eA2CC;IA3CD,sCA2CC;IAML,eACA;IADA,kIACA;IAAA,cAAgD;IAAhD,6CAAgD;;;;IAS9C,8BAA6B;IAAA,YAAoC;IAAA,iBAAK;IACtE,6BAA2B;IAAA,gEAAgD;IAAA,iBAAI;IAC/E,kCAAmE;IAA1B,yOAAsB,EAAE,KAAC;IAChE,8BACF;IAAA,iBAAS;;;IAJoB,cAAoC;IAApC,sEAAoC;;;;IAMjE,8BAA6B;IAAA,+BAAe;IAAA,iBAAK;IACjD,6BAA2B;IACzB,0IAEF;IAAA,iBAAI;IACJ,kCAA+D;IAAxB,qNAAS,oBAAa,KAAC;IAC5D,uBAAgC;IAChC,+BACF;IAAA,iBAAS;;;IAlBX,AADF,+BAAwB,cACO;IAC3B,wBAA4C;IAC9C,iBAAM;IAOJ,AANF,wGAAkB,kFAMT;IAWX,iBAAM;;;IAjBJ,eAgBC;IAhBD,2CAgBC;;;IAtBH,AA/GF,2FAAmC,+EA+GV;;;IA/GzB,qFAuIC;;ADhML,MAAM,OAAO,mBAAmB;IAE5B,4DAA4D;IAClC,UAAU,GAAG,IAAI,YAAY,EAAoB,CAAC;IAC5E,oEAAoE;IAC1C,UAAU,GAAG,IAAI,YAAY,EAAoB,CAAC;IAC5E,iDAAiD;IACvB,SAAS,GAAG,IAAI,YAAY,EAAQ,CAAC;IAExD,SAAS,GAAG,KAAK,CAAC;IAClB,YAAY,GAAkB,IAAI,CAAC;IAE1C,4CAA4C;IACpC,YAAY,GAAuB,EAAE,CAAC;IAE9C,qFAAqF;IAC7E,uBAAuB,GAAa,EAAE,CAAC;IAE/C,oDAAoD;IAC7C,gBAAgB,GAAuB,EAAE,CAAC;IAEhC,QAAQ,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;IAC3C,QAAQ,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;IAC3C,WAAW,GAAG,IAAI,eAAe,CAAY,YAAY,CAAC,CAAC;IAC3D,SAAS,GAAG,IAAI,eAAe,CAAgB,KAAK,CAAC,CAAC;IACtD,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAC;IAEhC,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAEjD,0EAA0E;IAE1E,QAAQ;QACJ,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,WAAW;QACP,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAED,0EAA0E;IAE1E,IAAI,UAAU,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,CAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,cAAc,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,IAAI,cAAc,CAAC,CAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,oFAAoF;IACpF,IAAI,sBAAsB,KAAe,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAE/E,IAAI,SAAS,KAAgB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,IAAI,aAAa,KAAoB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEnE,0EAA0E;IACnE,YAAY,CAAC,KAAgB;QAChC,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAEM,YAAY,CAAC,MAAwB;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAEM,YAAY,CAAC,MAAwB;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAEM,SAAS;QACZ,sBAAsB,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC;IAEM,eAAe,CAAC,CAAS,EAAE,MAAwB;QACtD,OAAO,MAAM,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAEM,UAAU,CAAC,IAAU;QACxB,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IACnG,CAAC;IAED,0EAA0E;IAElE,WAAW;QACf,aAAa,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAC1E,IAAI,CACD,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,EAC1F,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAC5B;aACA,SAAS,CAAC,MAAM,CAAC,EAAE;YAChB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACX,CAAC;IAEO,KAAK,CAAC,YAAY;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACnF,IAAI,CAAC,uBAAuB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7F,wEAAwE;YACxE,8EAA8E;YAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzE,CAAC;gBAAS,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAEO,kBAAkB,CAAC,MAAc,EAAE,MAAc,EAAE,KAAgB,EAAE,GAAkB;QAC3F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QAErC,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACP,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACzB,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACzC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACxC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC5C,CAAC;QACN,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,SAAS,CAAC,MAAwB,EAAE,KAAgB;QACxD,QAAQ,KAAK,EAAE,CAAC;YACZ,KAAK,YAAY,CAAC,CAAE,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3D,KAAK,WAAW,CAAC,CAAG,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;YAC1D,KAAK,YAAY,CAAC,CAAE,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC3D,KAAK,WAAW,CAAC,CAAG,OAAO,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACtD,KAAK,OAAO,CAAC,CAAO,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,OAAO,CAAC,CAAY,OAAO,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;QAC/D,CAAC;IACL,CAAC;6GApKQ,mBAAmB;6DAAnB,mBAAmB;YC3B5B,AADF,AAHF,8BAA8B,aAGI,YACA;YAC5B,uBAA6C;YAC7C,mCACF;YAAA,iBAAK;YACL,iCAI0B;YAAxB,gGAAS,iBAAa,IAAC;YACvB,uBAAgC;YAChC,4BACF;YACF,AADE,iBAAS,EACL;YAIJ,AADF,8BAAiC,aACN;YACvB,wBAAwD;YACxD,iCAKiC;YAD/B,kNAAwB;YAJ1B,iBAKiC;YACjC,2FAAkB;YAQpB,iBAAM;YAEN,2FAAyC;YAazC,mCAMwB;YAAtB,iGAAS,eAAW,IAAC;YACrB,yBAA8D;YAElE,AADE,iBAAS,EACL;YAGN,wFAAoB;YAQpB,wFAAkD;YAgBlD,6EAAiD;YA0InD,iBAAM;;YAvME,gBAAwB;YAAxB,8CAAwB;YAE1B,cAOC;YAPD,0CAOC;YAGH,cAWC;YAXD,iEAWC;YAOC,cAAsB;YAAtB,wCAAsB;YAEQ,cAA2B;YAA3B,wCAA2B;YAK7D,cAKC;YALD,4CAKC;YAGD,cAaC;YAbD,8EAaC;YAGD,cAyIC;YAzID,6EAyIC;;;iFDjMU,mBAAmB;cAP/B,SAAS;6BACM,KAAK,YACP,yBAAyB,mBAGlB,uBAAuB,CAAC,MAAM;;kBAK9C,MAAM;;kBAEN,MAAM;;kBAEN,MAAM;;kFAPE,mBAAmB","sourcesContent":["/**\n * @module entity-list.component\n * @description Displays the list of entities accessible to the current user.\n *\n * Loaded from `DatabaseDesignerEngine.Instance.loadAccessibleEntities()` —\n * data access goes through the engine singleton, not this component directly,\n * so the cache is shared across wizard openings.\n */\n\nimport {\n Component, OnInit, OnDestroy, Output, EventEmitter,\n ChangeDetectionStrategy, ChangeDetectorRef, inject,\n} from '@angular/core';\nimport { Subject, BehaviorSubject, combineLatest } from 'rxjs';\nimport { debounceTime, takeUntil, map } from 'rxjs/operators';\n\nimport { DatabaseDesignerEngine } from '../services/database-designer.engine.js';\nimport type { AccessibleEntity } from '../database-designer.types.js';\n\n// ─── Sort state ───────────────────────────────────────────────────────────────\n\ntype SortField = 'entityName' | 'tableName' | 'schemaName' | 'createdAt' | 'owner';\ntype SortDirection = 'asc' | 'desc';\n\n@Component({\n standalone: false,\n selector: 'mj-database-entity-list',\n templateUrl: './entity-list.component.html',\n styleUrls: ['./entity-list.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EntityListComponent implements OnInit, OnDestroy {\n\n /** Emitted when the user clicks \"Edit\" on an entity row. */\n @Output() public readonly EditEntity = new EventEmitter<AccessibleEntity>();\n /** Emitted when the user clicks \"View Details\" on an entity row. */\n @Output() public readonly ViewEntity = new EventEmitter<AccessibleEntity>();\n /** Emitted when the user clicks \"New Entity\". */\n @Output() public readonly NewEntity = new EventEmitter<void>();\n\n public IsLoading = false;\n public ErrorMessage: string | null = null;\n\n /** Full unfiltered list from the engine. */\n private _allEntities: AccessibleEntity[] = [];\n\n /** Cached sorted unique schema names — recomputed only when _allEntities changes. */\n private _availableFilterSchemas: string[] = [];\n\n /** Currently displayed (filtered + sorted) rows. */\n public FilteredEntities: AccessibleEntity[] = [];\n\n private readonly _search$ = new BehaviorSubject<string>('');\n private readonly _schema$ = new BehaviorSubject<string>('');\n private readonly _sortField$ = new BehaviorSubject<SortField>('entityName');\n private readonly _sortDir$ = new BehaviorSubject<SortDirection>('asc');\n private readonly _destroy$ = new Subject<void>();\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n // ─── Lifecycle ─────────────────────────────────────────────────────────\n\n ngOnInit(): void {\n this.setupFilter();\n this.loadEntities();\n }\n\n ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n }\n\n // ─── Template bindings ─────────────────────────────────────────────────\n\n get SearchTerm(): string { return this._search$.value; }\n set SearchTerm(v: string) { this._search$.next(v); }\n\n get SelectedSchema(): string { return this._schema$.value; }\n set SelectedSchema(v: string) { this._schema$.next(v); }\n\n /** Unique schema names present in the loaded entity list, sorted alphabetically. */\n get AvailableFilterSchemas(): string[] { return this._availableFilterSchemas; }\n\n get SortField(): SortField { return this._sortField$.value; }\n get SortDirection(): SortDirection { return this._sortDir$.value; }\n\n /** Toggle sort: same field flips direction; new field defaults to asc. */\n public OnSortChange(field: SortField): void {\n if (this._sortField$.value === field) {\n this._sortDir$.next(this._sortDir$.value === 'asc' ? 'desc' : 'asc');\n } else {\n this._sortField$.next(field);\n this._sortDir$.next('asc');\n }\n }\n\n public OnEditEntity(entity: AccessibleEntity): void {\n this.EditEntity.emit(entity);\n }\n\n public OnViewEntity(entity: AccessibleEntity): void {\n this.ViewEntity.emit(entity);\n }\n\n public OnNewEntity(): void {\n this.NewEntity.emit();\n }\n\n public OnRefresh(): void {\n DatabaseDesignerEngine.Instance.invalidateCache();\n this.loadEntities();\n }\n\n public TrackByEntityId(_: number, entity: AccessibleEntity): string {\n return entity.entityId;\n }\n\n public FormatDate(date: Date): string {\n return date.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n }\n\n // ─── Private helpers ───────────────────────────────────────────────────\n\n private setupFilter(): void {\n combineLatest([this._search$, this._schema$, this._sortField$, this._sortDir$])\n .pipe(\n debounceTime(150),\n map(([search, schema, field, dir]) => this.applyFilterAndSort(search, schema, field, dir)),\n takeUntil(this._destroy$),\n )\n .subscribe(result => {\n this.FilteredEntities = result;\n this.cdr.markForCheck();\n });\n }\n\n private async loadEntities(): Promise<void> {\n this.IsLoading = true;\n this.ErrorMessage = null;\n this.cdr.markForCheck();\n\n try {\n this._allEntities = await DatabaseDesignerEngine.Instance.loadAccessibleEntities();\n this._availableFilterSchemas = [...new Set(this._allEntities.map(e => e.schemaName))].sort();\n // Trigger the combineLatest pipe to recalculate; reset schema filter if\n // the previously selected schema is no longer present in the new entity list.\n const schemas = this._availableFilterSchemas;\n if (this._schema$.value && !schemas.includes(this._schema$.value)) {\n this._schema$.next('');\n } else {\n this._search$.next(this._search$.value);\n }\n } catch (err) {\n this.ErrorMessage = err instanceof Error ? err.message : String(err);\n } finally {\n this.IsLoading = false;\n this.cdr.markForCheck();\n }\n }\n\n private applyFilterAndSort(search: string, schema: string, field: SortField, dir: SortDirection): AccessibleEntity[] {\n const term = search.trim().toLowerCase();\n let results = [...this._allEntities];\n\n if (schema) {\n results = results.filter(e => e.schemaName === schema);\n }\n\n if (term) {\n results = results.filter(e =>\n e.entityName.toLowerCase().includes(term) ||\n e.tableName.toLowerCase().includes(term) ||\n e.schemaName.toLowerCase().includes(term)\n );\n }\n\n results.sort((a, b) => {\n const aVal = this.sortValue(a, field);\n const bVal = this.sortValue(b, field);\n const cmp = aVal < bVal ? -1 : aVal > bVal ? 1 : 0;\n return dir === 'asc' ? cmp : -cmp;\n });\n\n return results;\n }\n\n private sortValue(entity: AccessibleEntity, field: SortField): string | number {\n switch (field) {\n case 'entityName': return entity.entityName.toLowerCase();\n case 'tableName': return entity.tableName.toLowerCase();\n case 'schemaName': return entity.schemaName.toLowerCase();\n case 'createdAt': return entity.createdAt.getTime();\n case 'owner': return entity.isOwner ? 0 : 1;\n default: return entity.entityName.toLowerCase();\n }\n }\n}\n","<div class=\"entity-list-root\">\n\n <!-- ── Header ─────────────────────────────────────────────────────────── -->\n <div class=\"entity-list-header\">\n <h2 class=\"entity-list-title\">\n <i class=\"fa-solid fa-table-cells-large\"></i>\n Database Designer\n </h2>\n <button\n mjButton\n buttonStyle=\"primary\"\n class=\"new-entity-btn\"\n (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Entity\n </button>\n </div>\n\n <!-- ── Toolbar ────────────────────────────────────────────────────────── -->\n <div class=\"entity-list-toolbar\">\n <div class=\"search-wrap\">\n <i class=\"fa-solid fa-magnifying-glass search-icon\"></i>\n <input\n type=\"text\"\n class=\"mj-input search-input\"\n placeholder=\"Search by name, table, or schema…\"\n [(ngModel)]=\"SearchTerm\"\n aria-label=\"Search entities\" />\n @if (SearchTerm) {\n <button\n class=\"search-clear\"\n (click)=\"SearchTerm = ''\"\n aria-label=\"Clear search\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n\n @if (AvailableFilterSchemas.length > 1) {\n <select\n class=\"mj-input schema-filter\"\n [value]=\"SelectedSchema\"\n (change)=\"SelectedSchema = $any($event.target).value\"\n aria-label=\"Filter by schema\">\n <option value=\"\">All Schemas</option>\n @for (schema of AvailableFilterSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n }\n\n <button\n mjButton\n buttonStyle=\"secondary\"\n class=\"refresh-btn\"\n title=\"Refresh list\"\n [disabled]=\"IsLoading\"\n (click)=\"OnRefresh()\">\n <i class=\"fa-solid fa-rotate\" [class.fa-spin]=\"IsLoading\"></i>\n </button>\n </div>\n\n <!-- ── Error ──────────────────────────────────────────────────────────── -->\n @if (ErrorMessage) {\n <div class=\"entity-list-error\" role=\"alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ ErrorMessage }}\n </div>\n }\n\n <!-- ── Loading skeleton ───────────────────────────────────────────────── -->\n @if (IsLoading && FilteredEntities.length === 0) {\n <div class=\"skeleton-table\" aria-busy=\"true\" aria-label=\"Loading entities…\">\n @for (_ of [1, 2, 3, 4]; track $index) {\n <div class=\"skeleton-row\">\n <div class=\"skeleton-cell wide\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n </div>\n }\n </div>\n }\n\n <!-- ── Entity table ───────────────────────────────────────────────────── -->\n @if (!IsLoading || FilteredEntities.length > 0) {\n @if (FilteredEntities.length > 0) {\n <div class=\"table-wrap\">\n <table class=\"entity-table\" role=\"grid\" aria-label=\"User-defined entities\">\n <thead>\n <tr>\n <th class=\"col-name sortable\" (click)=\"OnSortChange('entityName')\" scope=\"col\">\n Entity Name\n <span class=\"sort-icon\">\n @if (SortField === 'entityName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-schema sortable\" (click)=\"OnSortChange('schemaName')\" scope=\"col\">\n Schema\n <span class=\"sort-icon\">\n @if (SortField === 'schemaName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-table sortable\" (click)=\"OnSortChange('tableName')\" scope=\"col\">\n Table\n <span class=\"sort-icon\">\n @if (SortField === 'tableName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-owner sortable\" (click)=\"OnSortChange('owner')\" scope=\"col\">\n Owner\n <span class=\"sort-icon\">\n @if (SortField === 'owner') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-created sortable\" (click)=\"OnSortChange('createdAt')\" scope=\"col\">\n Created\n <span class=\"sort-icon\">\n @if (SortField === 'createdAt') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-actions\" scope=\"col\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (entity of FilteredEntities; track TrackByEntityId($index, entity)) {\n <tr class=\"entity-row\">\n <td class=\"col-name\">\n <div class=\"entity-name-cell\">\n <span class=\"entity-name\">{{ entity.entityName }}</span>\n @if (entity.isOwner) {\n <span class=\"owner-badge owner-you\" title=\"You own this entity\">You</span>\n }\n </div>\n </td>\n <td class=\"col-schema\">\n <span class=\"schema-badge\">{{ entity.schemaName }}</span>\n </td>\n <td class=\"col-table\">\n <code class=\"table-name\">{{ entity.tableName }}</code>\n </td>\n <td class=\"col-owner\">\n @if (entity.isOwner) {\n <span class=\"owner-self\">\n <i class=\"fa-solid fa-user-check\"></i>\n You\n </span>\n } @else if (entity.ownerDisplayName) {\n <span class=\"owner-other\">{{ entity.ownerDisplayName }}</span>\n } @else {\n <span class=\"owner-other muted\">—</span>\n }\n </td>\n <td class=\"col-created\">{{ FormatDate(entity.createdAt) }}</td>\n <td class=\"col-actions\">\n <div class=\"row-actions\">\n <button\n mjButton\n buttonStyle=\"secondary\"\n class=\"action-btn\"\n title=\"Edit this entity\"\n (click)=\"OnEditEntity(entity)\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"entity-count\">\n {{ FilteredEntities.length }} {{ FilteredEntities.length === 1 ? 'entity' : 'entities' }}\n @if (SearchTerm) { matching \"{{ SearchTerm }}\" }\n </div>\n } @else if (!IsLoading) {\n <!-- ── Zero state ───────────────────────────────────────────────── -->\n <div class=\"zero-state\">\n <div class=\"zero-state-icon\">\n <i class=\"fa-regular fa-rectangle-list\"></i>\n </div>\n @if (SearchTerm) {\n <h3 class=\"zero-state-title\">No entities match \"{{ SearchTerm }}\"</h3>\n <p class=\"zero-state-body\">Try a different search term or clear the filter.</p>\n <button mjButton buttonStyle=\"secondary\" (click)=\"SearchTerm = ''\">\n Clear search\n </button>\n } @else {\n <h3 class=\"zero-state-title\">No entities yet</h3>\n <p class=\"zero-state-body\">\n Create your first user-defined entity. You can also use the\n Database Designer agent in a conversation for guided design.\n </p>\n <button mjButton buttonStyle=\"primary\" (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Entity\n </button>\n }\n </div>\n }\n }\n</div>\n"]}