@en-solutions/tgm-client-sdk 1.6.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +788 -0
  3. package/esm2022/en-solutions-tgm-client-sdk.mjs +5 -0
  4. package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs +308 -0
  5. package/esm2022/lib/components/database-manager/database-manager.module.mjs +66 -0
  6. package/esm2022/lib/components/database-manager/object-browser/object-browser.component.mjs +98 -0
  7. package/esm2022/lib/components/database-manager/query-editor/query-editor.component.mjs +196 -0
  8. package/esm2022/lib/components/database-manager/query-toolbar/query-toolbar.component.mjs +70 -0
  9. package/esm2022/lib/components/database-manager/record-detail/record-detail.component.mjs +112 -0
  10. package/esm2022/lib/components/database-manager/registry/entity-registry.mjs +512 -0
  11. package/esm2022/lib/components/database-manager/results-grid/results-grid.component.mjs +165 -0
  12. package/esm2022/lib/components/database-manager/services/entity-schema.service.mjs +91 -0
  13. package/esm2022/lib/components/database-manager/services/query-executor.service.mjs +204 -0
  14. package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs +166 -0
  15. package/esm2022/lib/components/database-manager/table-structure/table-structure.component.mjs +42 -0
  16. package/esm2022/lib/components/database-manager/types/database-manager.types.mjs +6 -0
  17. package/esm2022/lib/components/reporting/export-button/export-button.component.mjs +203 -0
  18. package/esm2022/lib/components/reporting/generated-report-list/generated-report-list.component.mjs +285 -0
  19. package/esm2022/lib/components/reporting/report-definition-form/report-definition-form.component.mjs +206 -0
  20. package/esm2022/lib/components/reporting/report-definition-list/report-definition-list.component.mjs +252 -0
  21. package/esm2022/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.mjs +122 -0
  22. package/esm2022/lib/components/reporting/report-stats/report-stats.component.mjs +164 -0
  23. package/esm2022/lib/components/reporting/report-template-list/report-template-list.component.mjs +114 -0
  24. package/esm2022/lib/components/reporting/reporting.module.mjs +60 -0
  25. package/esm2022/lib/components/video-call/incoming-call/incoming-call.component.mjs +80 -0
  26. package/esm2022/lib/components/video-call/services/livekit-room.service.mjs +142 -0
  27. package/esm2022/lib/components/video-call/services/video-call-signaling.service.mjs +42 -0
  28. package/esm2022/lib/components/video-call/services/video-call-state.service.mjs +52 -0
  29. package/esm2022/lib/components/video-call/types/video-call.types.mjs +2 -0
  30. package/esm2022/lib/components/video-call/video-call.module.mjs +42 -0
  31. package/esm2022/lib/components/video-call/video-controls/video-controls.component.mjs +33 -0
  32. package/esm2022/lib/components/video-call/video-participant/video-participant.component.mjs +68 -0
  33. package/esm2022/lib/components/video-call/video-room/video-room.component.mjs +89 -0
  34. package/esm2022/lib/core/auth-interceptor.mjs +33 -0
  35. package/esm2022/lib/core/client-interceptor.mjs +34 -0
  36. package/esm2022/lib/core/error-handler.mjs +32 -0
  37. package/esm2022/lib/core/http-client.service.mjs +254 -0
  38. package/esm2022/lib/core/websocket.service.mjs +185 -0
  39. package/esm2022/lib/models/admin/audit.models.mjs +2 -0
  40. package/esm2022/lib/models/admin/backup.models.mjs +2 -0
  41. package/esm2022/lib/models/admin/client.models.mjs +2 -0
  42. package/esm2022/lib/models/admin/email-provider.models.mjs +2 -0
  43. package/esm2022/lib/models/admin/erp.models.mjs +2 -0
  44. package/esm2022/lib/models/admin/identity-provider.models.mjs +2 -0
  45. package/esm2022/lib/models/admin/index.mjs +14 -0
  46. package/esm2022/lib/models/admin/messaging-provider.models.mjs +2 -0
  47. package/esm2022/lib/models/admin/platform-admin.models.mjs +2 -0
  48. package/esm2022/lib/models/admin/queue.models.mjs +2 -0
  49. package/esm2022/lib/models/admin/role.models.mjs +2 -0
  50. package/esm2022/lib/models/admin/sandbox.models.mjs +2 -0
  51. package/esm2022/lib/models/admin/ticket.models.mjs +2 -0
  52. package/esm2022/lib/models/admin/webhook.models.mjs +2 -0
  53. package/esm2022/lib/models/api/ai.models.mjs +2 -0
  54. package/esm2022/lib/models/api/aip.models.mjs +2 -0
  55. package/esm2022/lib/models/api/cat.models.mjs +2 -0
  56. package/esm2022/lib/models/api/company.models.mjs +2 -0
  57. package/esm2022/lib/models/api/compliance.models.mjs +2 -0
  58. package/esm2022/lib/models/api/component.models.mjs +2 -0
  59. package/esm2022/lib/models/api/cortex-edge.models.mjs +2 -0
  60. package/esm2022/lib/models/api/cortex-event.models.mjs +2 -0
  61. package/esm2022/lib/models/api/cortex-insight.models.mjs +2 -0
  62. package/esm2022/lib/models/api/cortex-node.models.mjs +2 -0
  63. package/esm2022/lib/models/api/custom-field.models.mjs +2 -0
  64. package/esm2022/lib/models/api/deferral.models.mjs +2 -0
  65. package/esm2022/lib/models/api/diagnostic-report.models.mjs +2 -0
  66. package/esm2022/lib/models/api/document.models.mjs +2 -0
  67. package/esm2022/lib/models/api/energy.models.mjs +2 -0
  68. package/esm2022/lib/models/api/failure.models.mjs +2 -0
  69. package/esm2022/lib/models/api/fleet.models.mjs +2 -0
  70. package/esm2022/lib/models/api/inspection.models.mjs +2 -0
  71. package/esm2022/lib/models/api/intervention.models.mjs +2 -0
  72. package/esm2022/lib/models/api/iot.models.mjs +2 -0
  73. package/esm2022/lib/models/api/knowledge.models.mjs +2 -0
  74. package/esm2022/lib/models/api/loto.models.mjs +2 -0
  75. package/esm2022/lib/models/api/maintenance-record.models.mjs +2 -0
  76. package/esm2022/lib/models/api/maintenance.models.mjs +2 -0
  77. package/esm2022/lib/models/api/material.models.mjs +2 -0
  78. package/esm2022/lib/models/api/media.models.mjs +2 -0
  79. package/esm2022/lib/models/api/misc.models.mjs +2 -0
  80. package/esm2022/lib/models/api/project.models.mjs +2 -0
  81. package/esm2022/lib/models/api/quality.models.mjs +2 -0
  82. package/esm2022/lib/models/api/reporting.models.mjs +3 -0
  83. package/esm2022/lib/models/api/reservoir-websocket.models.mjs +17 -0
  84. package/esm2022/lib/models/api/reservoir.models.mjs +2 -0
  85. package/esm2022/lib/models/api/search.models.mjs +2 -0
  86. package/esm2022/lib/models/api/sensor.models.mjs +2 -0
  87. package/esm2022/lib/models/api/unit.models.mjs +2 -0
  88. package/esm2022/lib/models/api/user.models.mjs +2 -0
  89. package/esm2022/lib/models/api/warranty.models.mjs +2 -0
  90. package/esm2022/lib/models/api/work-permit.models.mjs +2 -0
  91. package/esm2022/lib/models/api/workflow.models.mjs +2 -0
  92. package/esm2022/lib/models/auth/index.mjs +4 -0
  93. package/esm2022/lib/models/auth/login.models.mjs +2 -0
  94. package/esm2022/lib/models/auth/sso.models.mjs +2 -0
  95. package/esm2022/lib/models/auth/totp.models.mjs +2 -0
  96. package/esm2022/lib/models/base.models.mjs +99 -0
  97. package/esm2022/lib/models/chat/chat.models.mjs +2 -0
  98. package/esm2022/lib/models/enums/cat.enums.mjs +17 -0
  99. package/esm2022/lib/models/enums/energy.enums.mjs +8 -0
  100. package/esm2022/lib/models/enums/erp.enums.mjs +5 -0
  101. package/esm2022/lib/models/enums/index.mjs +15 -0
  102. package/esm2022/lib/models/enums/inspection.enums.mjs +7 -0
  103. package/esm2022/lib/models/enums/loto.enums.mjs +25 -0
  104. package/esm2022/lib/models/enums/misc.enums.mjs +19 -0
  105. package/esm2022/lib/models/enums/quality.enums.mjs +22 -0
  106. package/esm2022/lib/models/enums/reservoir.enums.mjs +13 -0
  107. package/esm2022/lib/models/enums/sso.enums.mjs +3 -0
  108. package/esm2022/lib/models/enums/status.enums.mjs +41 -0
  109. package/esm2022/lib/models/enums/time.enums.mjs +5 -0
  110. package/esm2022/lib/models/enums/type.enums.mjs +45 -0
  111. package/esm2022/lib/models/enums/user.enums.mjs +6 -0
  112. package/esm2022/lib/models/enums/work-permit.enums.mjs +33 -0
  113. package/esm2022/lib/models/index.mjs +42 -0
  114. package/esm2022/lib/models/realtime/realtime-event.models.mjs +9 -0
  115. package/esm2022/lib/models/video/video-call.models.mjs +2 -0
  116. package/esm2022/lib/services/admin/activity-log.service.mjs +28 -0
  117. package/esm2022/lib/services/admin/announcement.service.mjs +37 -0
  118. package/esm2022/lib/services/admin/article-admin.service.mjs +37 -0
  119. package/esm2022/lib/services/admin/audit-log.service.mjs +53 -0
  120. package/esm2022/lib/services/admin/backup.service.mjs +28 -0
  121. package/esm2022/lib/services/admin/cache-admin.service.mjs +64 -0
  122. package/esm2022/lib/services/admin/client-admin.service.mjs +101 -0
  123. package/esm2022/lib/services/admin/client-api-key.service.mjs +31 -0
  124. package/esm2022/lib/services/admin/client-ocr.service.mjs +28 -0
  125. package/esm2022/lib/services/admin/client-usage.service.mjs +31 -0
  126. package/esm2022/lib/services/admin/data-export.service.mjs +19 -0
  127. package/esm2022/lib/services/admin/document-admin.service.mjs +40 -0
  128. package/esm2022/lib/services/admin/email-admin.service.mjs +28 -0
  129. package/esm2022/lib/services/admin/email-provider.service.mjs +58 -0
  130. package/esm2022/lib/services/admin/erp-admin.service.mjs +111 -0
  131. package/esm2022/lib/services/admin/identity-provider.service.mjs +46 -0
  132. package/esm2022/lib/services/admin/impersonation.service.mjs +19 -0
  133. package/esm2022/lib/services/admin/index.mjs +31 -0
  134. package/esm2022/lib/services/admin/messaging-provider.service.mjs +55 -0
  135. package/esm2022/lib/services/admin/notification.service.mjs +31 -0
  136. package/esm2022/lib/services/admin/platform-admin.service.mjs +34 -0
  137. package/esm2022/lib/services/admin/platform-webhook.service.mjs +34 -0
  138. package/esm2022/lib/services/admin/queue-admin.service.mjs +55 -0
  139. package/esm2022/lib/services/admin/role-admin.service.mjs +81 -0
  140. package/esm2022/lib/services/admin/sandbox-admin.service.mjs +34 -0
  141. package/esm2022/lib/services/admin/scheduler-admin.service.mjs +34 -0
  142. package/esm2022/lib/services/admin/subscription.service.mjs +28 -0
  143. package/esm2022/lib/services/admin/system-health.service.mjs +22 -0
  144. package/esm2022/lib/services/admin/user-admin.service.mjs +67 -0
  145. package/esm2022/lib/services/admin/user-permission.service.mjs +40 -0
  146. package/esm2022/lib/services/admin/webhook-admin.service.mjs +61 -0
  147. package/esm2022/lib/services/api/agent.service.mjs +29 -0
  148. package/esm2022/lib/services/api/ai-feedback.service.mjs +17 -0
  149. package/esm2022/lib/services/api/ai.service.mjs +66 -0
  150. package/esm2022/lib/services/api/aip-analysis.service.mjs +20 -0
  151. package/esm2022/lib/services/api/aip-financial.service.mjs +29 -0
  152. package/esm2022/lib/services/api/aip-geographic.service.mjs +30 -0
  153. package/esm2022/lib/services/api/aip-network.service.mjs +29 -0
  154. package/esm2022/lib/services/api/aip-performance.service.mjs +29 -0
  155. package/esm2022/lib/services/api/aip-resource.service.mjs +23 -0
  156. package/esm2022/lib/services/api/aip-workflow.service.mjs +32 -0
  157. package/esm2022/lib/services/api/aip.service.mjs +158 -0
  158. package/esm2022/lib/services/api/alert.service.mjs +26 -0
  159. package/esm2022/lib/services/api/anomaly-detection.service.mjs +40 -0
  160. package/esm2022/lib/services/api/asset-lifecycle.service.mjs +78 -0
  161. package/esm2022/lib/services/api/audit-entry.service.mjs +22 -0
  162. package/esm2022/lib/services/api/base-crud.service.mjs +37 -0
  163. package/esm2022/lib/services/api/bid.service.mjs +17 -0
  164. package/esm2022/lib/services/api/budget.service.mjs +17 -0
  165. package/esm2022/lib/services/api/bulk-operation.service.mjs +65 -0
  166. package/esm2022/lib/services/api/capex-project.service.mjs +17 -0
  167. package/esm2022/lib/services/api/cat.service.mjs +77 -0
  168. package/esm2022/lib/services/api/client-article.service.mjs +23 -0
  169. package/esm2022/lib/services/api/community.service.mjs +41 -0
  170. package/esm2022/lib/services/api/company-material-type.service.mjs +17 -0
  171. package/esm2022/lib/services/api/company-material.service.mjs +17 -0
  172. package/esm2022/lib/services/api/company.service.mjs +30 -0
  173. package/esm2022/lib/services/api/compliance.service.mjs +74 -0
  174. package/esm2022/lib/services/api/component-info.service.mjs +17 -0
  175. package/esm2022/lib/services/api/component-location.service.mjs +17 -0
  176. package/esm2022/lib/services/api/component.service.mjs +53 -0
  177. package/esm2022/lib/services/api/cortex-event.service.mjs +17 -0
  178. package/esm2022/lib/services/api/cortex-insight.service.mjs +23 -0
  179. package/esm2022/lib/services/api/cortex-node.service.mjs +17 -0
  180. package/esm2022/lib/services/api/cortex.service.mjs +29 -0
  181. package/esm2022/lib/services/api/custom-field.service.mjs +70 -0
  182. package/esm2022/lib/services/api/custom.service.mjs +43 -0
  183. package/esm2022/lib/services/api/dashboard.service.mjs +44 -0
  184. package/esm2022/lib/services/api/deferral.service.mjs +54 -0
  185. package/esm2022/lib/services/api/department.service.mjs +17 -0
  186. package/esm2022/lib/services/api/device-gateway.service.mjs +33 -0
  187. package/esm2022/lib/services/api/diagnostic-report.service.mjs +23 -0
  188. package/esm2022/lib/services/api/digital-twin.service.mjs +56 -0
  189. package/esm2022/lib/services/api/document.service.mjs +53 -0
  190. package/esm2022/lib/services/api/dynamic-crud.service.mjs +67 -0
  191. package/esm2022/lib/services/api/energy-analytics.service.mjs +42 -0
  192. package/esm2022/lib/services/api/energy-production.service.mjs +17 -0
  193. package/esm2022/lib/services/api/energy.service.mjs +91 -0
  194. package/esm2022/lib/services/api/entity-comment.service.mjs +31 -0
  195. package/esm2022/lib/services/api/event.service.mjs +17 -0
  196. package/esm2022/lib/services/api/export.service.mjs +216 -0
  197. package/esm2022/lib/services/api/extension.service.mjs +56 -0
  198. package/esm2022/lib/services/api/failure.service.mjs +53 -0
  199. package/esm2022/lib/services/api/fleet.service.mjs +140 -0
  200. package/esm2022/lib/services/api/inactive-component.service.mjs +17 -0
  201. package/esm2022/lib/services/api/index.mjs +101 -0
  202. package/esm2022/lib/services/api/inspection.service.mjs +29 -0
  203. package/esm2022/lib/services/api/intervention-request.service.mjs +17 -0
  204. package/esm2022/lib/services/api/intervention.service.mjs +17 -0
  205. package/esm2022/lib/services/api/knowledge.service.mjs +209 -0
  206. package/esm2022/lib/services/api/license.service.mjs +25 -0
  207. package/esm2022/lib/services/api/location.service.mjs +17 -0
  208. package/esm2022/lib/services/api/log.service.mjs +17 -0
  209. package/esm2022/lib/services/api/login-history.service.mjs +17 -0
  210. package/esm2022/lib/services/api/maintenance-plan.service.mjs +17 -0
  211. package/esm2022/lib/services/api/maintenance-record.service.mjs +17 -0
  212. package/esm2022/lib/services/api/material-consumable.service.mjs +41 -0
  213. package/esm2022/lib/services/api/material-instrument.service.mjs +29 -0
  214. package/esm2022/lib/services/api/material-item.service.mjs +53 -0
  215. package/esm2022/lib/services/api/material-tooling.service.mjs +41 -0
  216. package/esm2022/lib/services/api/measurement-unit.service.mjs +17 -0
  217. package/esm2022/lib/services/api/misc-crud.service.mjs +329 -0
  218. package/esm2022/lib/services/api/note.service.mjs +37 -0
  219. package/esm2022/lib/services/api/outage-resource.service.mjs +28 -0
  220. package/esm2022/lib/services/api/plant-data.service.mjs +31 -0
  221. package/esm2022/lib/services/api/procurement.service.mjs +53 -0
  222. package/esm2022/lib/services/api/project.service.mjs +17 -0
  223. package/esm2022/lib/services/api/property-template.service.mjs +17 -0
  224. package/esm2022/lib/services/api/quality.service.mjs +29 -0
  225. package/esm2022/lib/services/api/recurring-event.service.mjs +17 -0
  226. package/esm2022/lib/services/api/reporting.service.mjs +117 -0
  227. package/esm2022/lib/services/api/reservoir-data.service.mjs +19 -0
  228. package/esm2022/lib/services/api/reservoir.service.mjs +209 -0
  229. package/esm2022/lib/services/api/room.service.mjs +17 -0
  230. package/esm2022/lib/services/api/sandbox.service.mjs +62 -0
  231. package/esm2022/lib/services/api/scheduled-report.service.mjs +17 -0
  232. package/esm2022/lib/services/api/search.service.mjs +77 -0
  233. package/esm2022/lib/services/api/sensor.service.mjs +36 -0
  234. package/esm2022/lib/services/api/sla-policy.service.mjs +17 -0
  235. package/esm2022/lib/services/api/sla.service.mjs +17 -0
  236. package/esm2022/lib/services/api/threshold-alert-rule.service.mjs +17 -0
  237. package/esm2022/lib/services/api/ticket.service.mjs +73 -0
  238. package/esm2022/lib/services/api/time-entry.service.mjs +17 -0
  239. package/esm2022/lib/services/api/todo.service.mjs +17 -0
  240. package/esm2022/lib/services/api/unit.service.mjs +17 -0
  241. package/esm2022/lib/services/api/upload.service.mjs +84 -0
  242. package/esm2022/lib/services/api/user.service.mjs +107 -0
  243. package/esm2022/lib/services/api/warehouse.service.mjs +29 -0
  244. package/esm2022/lib/services/api/warranty.service.mjs +29 -0
  245. package/esm2022/lib/services/api/work-order.service.mjs +28 -0
  246. package/esm2022/lib/services/api/work-permit.service.mjs +17 -0
  247. package/esm2022/lib/services/api/workflow.service.mjs +86 -0
  248. package/esm2022/lib/services/auth/auth.service.mjs +97 -0
  249. package/esm2022/lib/services/auth/index.mjs +5 -0
  250. package/esm2022/lib/services/auth/platform-auth.service.mjs +39 -0
  251. package/esm2022/lib/services/auth/sso-auth.service.mjs +46 -0
  252. package/esm2022/lib/services/auth/totp.service.mjs +34 -0
  253. package/esm2022/lib/services/chat/chat-rest.service.mjs +104 -0
  254. package/esm2022/lib/services/chat/chat-websocket.service.mjs +70 -0
  255. package/esm2022/lib/services/chat/index.mjs +3 -0
  256. package/esm2022/lib/services/index.mjs +8 -0
  257. package/esm2022/lib/services/realtime/index.mjs +2 -0
  258. package/esm2022/lib/services/realtime/realtime-event.service.mjs +187 -0
  259. package/esm2022/lib/services/reservoir/index.mjs +2 -0
  260. package/esm2022/lib/services/reservoir/reservoir-websocket.service.mjs +105 -0
  261. package/esm2022/lib/services/video/index.mjs +3 -0
  262. package/esm2022/lib/services/video/video-call-rest.service.mjs +42 -0
  263. package/esm2022/lib/services/video/video-call-websocket.service.mjs +55 -0
  264. package/esm2022/lib/tgm-sdk.config.mjs +32 -0
  265. package/esm2022/lib/tgm-sdk.module.mjs +38 -0
  266. package/esm2022/public-api.mjs +52 -0
  267. package/fesm2022/en-solutions-tgm-client-sdk.mjs +11029 -0
  268. package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -0
  269. package/index.d.ts +5 -0
  270. package/lib/components/database-manager/database-manager/database-manager.component.d.ts +70 -0
  271. package/lib/components/database-manager/database-manager.module.d.ts +15 -0
  272. package/lib/components/database-manager/object-browser/object-browser.component.d.ts +35 -0
  273. package/lib/components/database-manager/query-editor/query-editor.component.d.ts +31 -0
  274. package/lib/components/database-manager/query-toolbar/query-toolbar.component.d.ts +23 -0
  275. package/lib/components/database-manager/record-detail/record-detail.component.d.ts +35 -0
  276. package/lib/components/database-manager/registry/entity-registry.d.ts +16 -0
  277. package/lib/components/database-manager/results-grid/results-grid.component.d.ts +62 -0
  278. package/lib/components/database-manager/services/entity-schema.service.d.ts +37 -0
  279. package/lib/components/database-manager/services/query-executor.service.d.ts +57 -0
  280. package/lib/components/database-manager/table-data-viewer/table-data-viewer.component.d.ts +54 -0
  281. package/lib/components/database-manager/table-structure/table-structure.component.d.ts +16 -0
  282. package/lib/components/database-manager/types/database-manager.types.d.ts +71 -0
  283. package/lib/components/reporting/export-button/export-button.component.d.ts +50 -0
  284. package/lib/components/reporting/generated-report-list/generated-report-list.component.d.ts +93 -0
  285. package/lib/components/reporting/report-definition-form/report-definition-form.component.d.ts +65 -0
  286. package/lib/components/reporting/report-definition-list/report-definition-list.component.d.ts +90 -0
  287. package/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.d.ts +46 -0
  288. package/lib/components/reporting/report-stats/report-stats.component.d.ts +47 -0
  289. package/lib/components/reporting/report-template-list/report-template-list.component.d.ts +39 -0
  290. package/lib/components/reporting/reporting.module.d.ts +14 -0
  291. package/lib/components/video-call/incoming-call/incoming-call.component.d.ts +20 -0
  292. package/lib/components/video-call/services/livekit-room.service.d.ts +28 -0
  293. package/lib/components/video-call/services/video-call-signaling.service.d.ts +21 -0
  294. package/lib/components/video-call/services/video-call-state.service.d.ts +25 -0
  295. package/lib/components/video-call/types/video-call.types.d.ts +49 -0
  296. package/lib/components/video-call/video-call.module.d.ts +11 -0
  297. package/lib/components/video-call/video-controls/video-controls.component.d.ts +13 -0
  298. package/lib/components/video-call/video-participant/video-participant.component.d.ts +17 -0
  299. package/lib/components/video-call/video-room/video-room.component.d.ts +30 -0
  300. package/lib/core/auth-interceptor.d.ts +13 -0
  301. package/lib/core/client-interceptor.d.ts +14 -0
  302. package/lib/core/error-handler.d.ts +13 -0
  303. package/lib/core/http-client.service.d.ts +61 -0
  304. package/lib/core/websocket.service.d.ts +37 -0
  305. package/lib/models/admin/audit.models.d.ts +73 -0
  306. package/lib/models/admin/backup.models.d.ts +101 -0
  307. package/lib/models/admin/client.models.d.ts +99 -0
  308. package/lib/models/admin/email-provider.models.d.ts +56 -0
  309. package/lib/models/admin/erp.models.d.ts +188 -0
  310. package/lib/models/admin/identity-provider.models.d.ts +1 -0
  311. package/lib/models/admin/index.d.ts +13 -0
  312. package/lib/models/admin/messaging-provider.models.d.ts +49 -0
  313. package/lib/models/admin/platform-admin.models.d.ts +33 -0
  314. package/lib/models/admin/queue.models.d.ts +54 -0
  315. package/lib/models/admin/role.models.d.ts +50 -0
  316. package/lib/models/admin/sandbox.models.d.ts +54 -0
  317. package/lib/models/admin/ticket.models.d.ts +48 -0
  318. package/lib/models/admin/webhook.models.d.ts +65 -0
  319. package/lib/models/api/ai.models.d.ts +75 -0
  320. package/lib/models/api/aip.models.d.ts +545 -0
  321. package/lib/models/api/cat.models.d.ts +260 -0
  322. package/lib/models/api/company.models.d.ts +125 -0
  323. package/lib/models/api/compliance.models.d.ts +74 -0
  324. package/lib/models/api/component.models.d.ts +294 -0
  325. package/lib/models/api/cortex-edge.models.d.ts +14 -0
  326. package/lib/models/api/cortex-event.models.d.ts +12 -0
  327. package/lib/models/api/cortex-insight.models.d.ts +25 -0
  328. package/lib/models/api/cortex-node.models.d.ts +10 -0
  329. package/lib/models/api/custom-field.models.d.ts +37 -0
  330. package/lib/models/api/deferral.models.d.ts +81 -0
  331. package/lib/models/api/diagnostic-report.models.d.ts +29 -0
  332. package/lib/models/api/document.models.d.ts +95 -0
  333. package/lib/models/api/energy.models.d.ts +210 -0
  334. package/lib/models/api/failure.models.d.ts +171 -0
  335. package/lib/models/api/fleet.models.d.ts +193 -0
  336. package/lib/models/api/inspection.models.d.ts +110 -0
  337. package/lib/models/api/intervention.models.d.ts +254 -0
  338. package/lib/models/api/iot.models.d.ts +15 -0
  339. package/lib/models/api/knowledge.models.d.ts +340 -0
  340. package/lib/models/api/loto.models.d.ts +51 -0
  341. package/lib/models/api/maintenance-record.models.d.ts +100 -0
  342. package/lib/models/api/maintenance.models.d.ts +188 -0
  343. package/lib/models/api/material.models.d.ts +261 -0
  344. package/lib/models/api/media.models.d.ts +106 -0
  345. package/lib/models/api/misc.models.d.ts +929 -0
  346. package/lib/models/api/project.models.d.ts +118 -0
  347. package/lib/models/api/quality.models.d.ts +153 -0
  348. package/lib/models/api/reporting.models.d.ts +76 -0
  349. package/lib/models/api/reservoir-websocket.models.d.ts +48 -0
  350. package/lib/models/api/reservoir.models.d.ts +274 -0
  351. package/lib/models/api/search.models.d.ts +30 -0
  352. package/lib/models/api/sensor.models.d.ts +117 -0
  353. package/lib/models/api/unit.models.d.ts +82 -0
  354. package/lib/models/api/user.models.d.ts +253 -0
  355. package/lib/models/api/warranty.models.d.ts +51 -0
  356. package/lib/models/api/work-permit.models.d.ts +70 -0
  357. package/lib/models/api/workflow.models.d.ts +52 -0
  358. package/lib/models/auth/index.d.ts +3 -0
  359. package/lib/models/auth/login.models.d.ts +134 -0
  360. package/lib/models/auth/sso.models.d.ts +136 -0
  361. package/lib/models/auth/totp.models.d.ts +19 -0
  362. package/lib/models/base.models.d.ts +90 -0
  363. package/lib/models/chat/chat.models.d.ts +171 -0
  364. package/lib/models/enums/cat.enums.d.ts +114 -0
  365. package/lib/models/enums/energy.enums.d.ts +50 -0
  366. package/lib/models/enums/erp.enums.d.ts +49 -0
  367. package/lib/models/enums/index.d.ts +14 -0
  368. package/lib/models/enums/inspection.enums.d.ts +61 -0
  369. package/lib/models/enums/loto.enums.d.ts +41 -0
  370. package/lib/models/enums/misc.enums.d.ts +151 -0
  371. package/lib/models/enums/quality.enums.d.ts +25 -0
  372. package/lib/models/enums/reservoir.enums.d.ts +80 -0
  373. package/lib/models/enums/sso.enums.d.ts +15 -0
  374. package/lib/models/enums/status.enums.d.ts +296 -0
  375. package/lib/models/enums/time.enums.d.ts +51 -0
  376. package/lib/models/enums/type.enums.d.ts +324 -0
  377. package/lib/models/enums/user.enums.d.ts +31 -0
  378. package/lib/models/enums/work-permit.enums.d.ts +56 -0
  379. package/lib/models/index.d.ts +41 -0
  380. package/lib/models/realtime/realtime-event.models.d.ts +95 -0
  381. package/lib/models/video/video-call.models.d.ts +65 -0
  382. package/lib/services/admin/activity-log.service.d.ts +13 -0
  383. package/lib/services/admin/announcement.service.d.ts +17 -0
  384. package/lib/services/admin/article-admin.service.d.ts +17 -0
  385. package/lib/services/admin/audit-log.service.d.ts +22 -0
  386. package/lib/services/admin/backup.service.d.ts +15 -0
  387. package/lib/services/admin/cache-admin.service.d.ts +26 -0
  388. package/lib/services/admin/client-admin.service.d.ts +38 -0
  389. package/lib/services/admin/client-api-key.service.d.ts +15 -0
  390. package/lib/services/admin/client-ocr.service.d.ts +14 -0
  391. package/lib/services/admin/client-usage.service.d.ts +15 -0
  392. package/lib/services/admin/data-export.service.d.ts +10 -0
  393. package/lib/services/admin/document-admin.service.d.ts +18 -0
  394. package/lib/services/admin/email-admin.service.d.ts +14 -0
  395. package/lib/services/admin/email-provider.service.d.ts +25 -0
  396. package/lib/services/admin/erp-admin.service.d.ts +41 -0
  397. package/lib/services/admin/identity-provider.service.d.ts +21 -0
  398. package/lib/services/admin/impersonation.service.d.ts +11 -0
  399. package/lib/services/admin/index.d.ts +30 -0
  400. package/lib/services/admin/messaging-provider.service.d.ts +24 -0
  401. package/lib/services/admin/notification.service.d.ts +15 -0
  402. package/lib/services/admin/platform-admin.service.d.ts +17 -0
  403. package/lib/services/admin/platform-webhook.service.d.ts +16 -0
  404. package/lib/services/admin/queue-admin.service.d.ts +24 -0
  405. package/lib/services/admin/role-admin.service.d.ts +37 -0
  406. package/lib/services/admin/sandbox-admin.service.d.ts +17 -0
  407. package/lib/services/admin/scheduler-admin.service.d.ts +61 -0
  408. package/lib/services/admin/subscription.service.d.ts +15 -0
  409. package/lib/services/admin/system-health.service.d.ts +11 -0
  410. package/lib/services/admin/user-admin.service.d.ts +27 -0
  411. package/lib/services/admin/user-permission.service.d.ts +18 -0
  412. package/lib/services/admin/webhook-admin.service.d.ts +26 -0
  413. package/lib/services/api/agent.service.d.ts +16 -0
  414. package/lib/services/api/ai-feedback.service.d.ts +9 -0
  415. package/lib/services/api/ai.service.d.ts +36 -0
  416. package/lib/services/api/aip-analysis.service.d.ts +13 -0
  417. package/lib/services/api/aip-financial.service.d.ts +16 -0
  418. package/lib/services/api/aip-geographic.service.d.ts +16 -0
  419. package/lib/services/api/aip-network.service.d.ts +16 -0
  420. package/lib/services/api/aip-performance.service.d.ts +16 -0
  421. package/lib/services/api/aip-resource.service.d.ts +14 -0
  422. package/lib/services/api/aip-workflow.service.d.ts +24 -0
  423. package/lib/services/api/aip.service.d.ts +73 -0
  424. package/lib/services/api/alert.service.d.ts +15 -0
  425. package/lib/services/api/anomaly-detection.service.d.ts +26 -0
  426. package/lib/services/api/asset-lifecycle.service.d.ts +29 -0
  427. package/lib/services/api/audit-entry.service.d.ts +13 -0
  428. package/lib/services/api/base-crud.service.d.ts +18 -0
  429. package/lib/services/api/bid.service.d.ts +10 -0
  430. package/lib/services/api/budget.service.d.ts +10 -0
  431. package/lib/services/api/bulk-operation.service.d.ts +26 -0
  432. package/lib/services/api/capex-project.service.d.ts +10 -0
  433. package/lib/services/api/cat.service.d.ts +40 -0
  434. package/lib/services/api/client-article.service.d.ts +14 -0
  435. package/lib/services/api/community.service.d.ts +21 -0
  436. package/lib/services/api/company-material-type.service.d.ts +10 -0
  437. package/lib/services/api/company-material.service.d.ts +9 -0
  438. package/lib/services/api/company.service.d.ts +15 -0
  439. package/lib/services/api/compliance.service.d.ts +35 -0
  440. package/lib/services/api/component-info.service.d.ts +10 -0
  441. package/lib/services/api/component-location.service.d.ts +10 -0
  442. package/lib/services/api/component.service.d.ts +32 -0
  443. package/lib/services/api/cortex-event.service.d.ts +10 -0
  444. package/lib/services/api/cortex-insight.service.d.ts +14 -0
  445. package/lib/services/api/cortex-node.service.d.ts +10 -0
  446. package/lib/services/api/cortex.service.d.ts +15 -0
  447. package/lib/services/api/custom-field.service.d.ts +33 -0
  448. package/lib/services/api/custom.service.d.ts +23 -0
  449. package/lib/services/api/dashboard.service.d.ts +18 -0
  450. package/lib/services/api/deferral.service.d.ts +29 -0
  451. package/lib/services/api/department.service.d.ts +9 -0
  452. package/lib/services/api/device-gateway.service.d.ts +16 -0
  453. package/lib/services/api/diagnostic-report.service.d.ts +14 -0
  454. package/lib/services/api/digital-twin.service.d.ts +29 -0
  455. package/lib/services/api/document.service.d.ts +28 -0
  456. package/lib/services/api/dynamic-crud.service.d.ts +41 -0
  457. package/lib/services/api/energy-analytics.service.d.ts +16 -0
  458. package/lib/services/api/energy-production.service.d.ts +10 -0
  459. package/lib/services/api/energy.service.d.ts +46 -0
  460. package/lib/services/api/entity-comment.service.d.ts +16 -0
  461. package/lib/services/api/event.service.d.ts +10 -0
  462. package/lib/services/api/export.service.d.ts +48 -0
  463. package/lib/services/api/extension.service.d.ts +24 -0
  464. package/lib/services/api/failure.service.d.ts +28 -0
  465. package/lib/services/api/fleet.service.d.ts +71 -0
  466. package/lib/services/api/inactive-component.service.d.ts +10 -0
  467. package/lib/services/api/index.d.ts +101 -0
  468. package/lib/services/api/inspection.service.d.ts +16 -0
  469. package/lib/services/api/intervention-request.service.d.ts +10 -0
  470. package/lib/services/api/intervention.service.d.ts +10 -0
  471. package/lib/services/api/knowledge.service.d.ts +106 -0
  472. package/lib/services/api/license.service.d.ts +14 -0
  473. package/lib/services/api/location.service.d.ts +9 -0
  474. package/lib/services/api/log.service.d.ts +9 -0
  475. package/lib/services/api/login-history.service.d.ts +10 -0
  476. package/lib/services/api/maintenance-plan.service.d.ts +10 -0
  477. package/lib/services/api/maintenance-record.service.d.ts +10 -0
  478. package/lib/services/api/material-consumable.service.d.ts +22 -0
  479. package/lib/services/api/material-instrument.service.d.ts +16 -0
  480. package/lib/services/api/material-item.service.d.ts +28 -0
  481. package/lib/services/api/material-tooling.service.d.ts +22 -0
  482. package/lib/services/api/measurement-unit.service.d.ts +10 -0
  483. package/lib/services/api/misc-crud.service.d.ts +167 -0
  484. package/lib/services/api/note.service.d.ts +14 -0
  485. package/lib/services/api/outage-resource.service.d.ts +15 -0
  486. package/lib/services/api/plant-data.service.d.ts +14 -0
  487. package/lib/services/api/procurement.service.d.ts +27 -0
  488. package/lib/services/api/project.service.d.ts +10 -0
  489. package/lib/services/api/property-template.service.d.ts +10 -0
  490. package/lib/services/api/quality.service.d.ts +16 -0
  491. package/lib/services/api/recurring-event.service.d.ts +10 -0
  492. package/lib/services/api/reporting.service.d.ts +38 -0
  493. package/lib/services/api/reservoir-data.service.d.ts +10 -0
  494. package/lib/services/api/reservoir.service.d.ts +109 -0
  495. package/lib/services/api/room.service.d.ts +10 -0
  496. package/lib/services/api/sandbox.service.d.ts +26 -0
  497. package/lib/services/api/scheduled-report.service.d.ts +10 -0
  498. package/lib/services/api/search.service.d.ts +54 -0
  499. package/lib/services/api/sensor.service.d.ts +17 -0
  500. package/lib/services/api/sla-policy.service.d.ts +10 -0
  501. package/lib/services/api/sla.service.d.ts +10 -0
  502. package/lib/services/api/threshold-alert-rule.service.d.ts +10 -0
  503. package/lib/services/api/ticket.service.d.ts +60 -0
  504. package/lib/services/api/time-entry.service.d.ts +10 -0
  505. package/lib/services/api/todo.service.d.ts +10 -0
  506. package/lib/services/api/unit.service.d.ts +10 -0
  507. package/lib/services/api/upload.service.d.ts +50 -0
  508. package/lib/services/api/user.service.d.ts +59 -0
  509. package/lib/services/api/warehouse.service.d.ts +15 -0
  510. package/lib/services/api/warranty.service.d.ts +16 -0
  511. package/lib/services/api/work-order.service.d.ts +17 -0
  512. package/lib/services/api/work-permit.service.d.ts +10 -0
  513. package/lib/services/api/workflow.service.d.ts +33 -0
  514. package/lib/services/auth/auth.service.d.ts +33 -0
  515. package/lib/services/auth/index.d.ts +4 -0
  516. package/lib/services/auth/platform-auth.service.d.ts +16 -0
  517. package/lib/services/auth/sso-auth.service.d.ts +21 -0
  518. package/lib/services/auth/totp.service.d.ts +18 -0
  519. package/lib/services/chat/chat-rest.service.d.ts +40 -0
  520. package/lib/services/chat/chat-websocket.service.d.ts +34 -0
  521. package/lib/services/chat/index.d.ts +2 -0
  522. package/lib/services/index.d.ts +7 -0
  523. package/lib/services/realtime/index.d.ts +1 -0
  524. package/lib/services/realtime/realtime-event.service.d.ts +137 -0
  525. package/lib/services/reservoir/index.d.ts +1 -0
  526. package/lib/services/reservoir/reservoir-websocket.service.d.ts +47 -0
  527. package/lib/services/video/index.d.ts +2 -0
  528. package/lib/services/video/video-call-rest.service.d.ts +19 -0
  529. package/lib/services/video/video-call-websocket.service.d.ts +31 -0
  530. package/lib/tgm-sdk.config.d.ts +36 -0
  531. package/lib/tgm-sdk.module.d.ts +13 -0
  532. package/package.json +40 -0
  533. package/public-api.d.ts +42 -0
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4tc29sdXRpb25zLXRnbS1jbGllbnQtc2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VuLXNvbHV0aW9ucy10Z20tY2xpZW50LXNkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,308 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { ObjectBrowserComponent } from '../object-browser/object-browser.component';
4
+ import { QueryEditorComponent } from '../query-editor/query-editor.component';
5
+ import { QueryToolbarComponent } from '../query-toolbar/query-toolbar.component';
6
+ import { ResultsGridComponent } from '../results-grid/results-grid.component';
7
+ import { TableStructureComponent } from '../table-structure/table-structure.component';
8
+ import { TableDataViewerComponent } from '../table-data-viewer/table-data-viewer.component';
9
+ import { RecordDetailComponent } from '../record-detail/record-detail.component';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "../services/entity-schema.service";
12
+ import * as i2 from "../services/query-executor.service";
13
+ import * as i3 from "@angular/common";
14
+ export class DatabaseManagerComponent {
15
+ entitySchema;
16
+ queryExecutor;
17
+ // ── Config ──
18
+ config = {};
19
+ // ── CSS overrides ──
20
+ containerClass = '';
21
+ sidebarClass = '';
22
+ mainClass = '';
23
+ // ── Labels ──
24
+ title = 'Database Manager';
25
+ noResultsMessage = 'No results found.';
26
+ loadingMessage = 'Executing query...';
27
+ // ── Custom templates ──
28
+ headerTemplate;
29
+ sidebarHeaderTemplate;
30
+ tabTemplate;
31
+ emptyTemplate;
32
+ // ── Events ──
33
+ entitySelected = new EventEmitter();
34
+ queryExecuted = new EventEmitter();
35
+ recordSelected = new EventEmitter();
36
+ recordCreated = new EventEmitter();
37
+ recordUpdated = new EventEmitter();
38
+ recordDeleted = new EventEmitter();
39
+ error = new EventEmitter();
40
+ // ── State ──
41
+ selectedEntity;
42
+ tabs = [];
43
+ activeTabId;
44
+ queryText = '';
45
+ executing = false;
46
+ activeResult;
47
+ selectedRecord;
48
+ recordMode = 'view';
49
+ showRecordDetail = false;
50
+ tabCounter = 0;
51
+ subscription;
52
+ constructor(entitySchema, queryExecutor) {
53
+ this.entitySchema = entitySchema;
54
+ this.queryExecutor = queryExecutor;
55
+ }
56
+ ngOnInit() {
57
+ this.addQueryTab();
58
+ }
59
+ ngOnChanges(changes) {
60
+ if (changes['config']) {
61
+ this.entitySchema.invalidateCache();
62
+ }
63
+ }
64
+ ngOnDestroy() {
65
+ this.subscription?.unsubscribe();
66
+ }
67
+ // ── Tab Management ──
68
+ get activeTab() {
69
+ return this.tabs.find(t => t.id === this.activeTabId);
70
+ }
71
+ addQueryTab() {
72
+ const tab = {
73
+ id: `query-${++this.tabCounter}`,
74
+ title: `Query ${this.tabCounter}`,
75
+ type: 'query',
76
+ query: '',
77
+ };
78
+ this.tabs.push(tab);
79
+ this.activeTabId = tab.id;
80
+ this.queryText = '';
81
+ this.activeResult = undefined;
82
+ }
83
+ addTableDataTab(entity) {
84
+ const existing = this.tabs.find(t => t.type === 'table-data' && t.entityKey === entity.key);
85
+ if (existing) {
86
+ this.activeTabId = existing.id;
87
+ return;
88
+ }
89
+ const tab = {
90
+ id: `data-${entity.key}-${++this.tabCounter}`,
91
+ title: entity.name,
92
+ type: 'table-data',
93
+ entityKey: entity.key,
94
+ };
95
+ this.tabs.push(tab);
96
+ this.activeTabId = tab.id;
97
+ }
98
+ addTableStructureTab(entity) {
99
+ const existing = this.tabs.find(t => t.type === 'table-structure' && t.entityKey === entity.key);
100
+ if (existing) {
101
+ this.activeTabId = existing.id;
102
+ return;
103
+ }
104
+ const tab = {
105
+ id: `struct-${entity.key}-${++this.tabCounter}`,
106
+ title: `${entity.name} (Structure)`,
107
+ type: 'table-structure',
108
+ entityKey: entity.key,
109
+ };
110
+ this.tabs.push(tab);
111
+ this.activeTabId = tab.id;
112
+ }
113
+ selectTab(tab) {
114
+ this.activeTabId = tab.id;
115
+ if (tab.type === 'query') {
116
+ this.queryText = tab.query ?? '';
117
+ this.activeResult = tab.result;
118
+ }
119
+ }
120
+ closeTab(tab, event) {
121
+ event.stopPropagation();
122
+ const idx = this.tabs.indexOf(tab);
123
+ if (idx < 0)
124
+ return;
125
+ this.tabs.splice(idx, 1);
126
+ if (this.activeTabId === tab.id) {
127
+ this.activeTabId = this.tabs[Math.min(idx, this.tabs.length - 1)]?.id;
128
+ if (this.activeTab?.type === 'query') {
129
+ this.queryText = this.activeTab.query ?? '';
130
+ this.activeResult = this.activeTab.result;
131
+ }
132
+ }
133
+ }
134
+ // ── Entity Selection ──
135
+ onEntitySelected(entity) {
136
+ this.selectedEntity = entity;
137
+ this.entitySelected.emit(entity);
138
+ }
139
+ onEntityDoubleClick(entity) {
140
+ this.addTableDataTab(entity);
141
+ }
142
+ // ── Query Execution ──
143
+ onQueryChange(text) {
144
+ this.queryText = text;
145
+ if (this.activeTab?.type === 'query') {
146
+ this.activeTab.query = text;
147
+ this.activeTab.dirty = true;
148
+ }
149
+ }
150
+ onExecute() {
151
+ this.executeQuery(this.queryText);
152
+ }
153
+ onExecuteFromEditor(text) {
154
+ this.queryText = text;
155
+ if (this.activeTab?.type === 'query') {
156
+ this.activeTab.query = text;
157
+ }
158
+ this.executeQuery(text);
159
+ }
160
+ onFormat() {
161
+ try {
162
+ const parsed = this.queryExecutor.parseQuery(this.queryText);
163
+ this.queryText = this.queryExecutor.formatQuery(parsed);
164
+ if (this.activeTab?.type === 'query') {
165
+ this.activeTab.query = this.queryText;
166
+ }
167
+ }
168
+ catch {
169
+ // Leave as is if invalid
170
+ }
171
+ }
172
+ onClear() {
173
+ this.queryText = '';
174
+ this.activeResult = undefined;
175
+ if (this.activeTab?.type === 'query') {
176
+ this.activeTab.query = '';
177
+ this.activeTab.result = undefined;
178
+ this.activeTab.dirty = false;
179
+ }
180
+ }
181
+ // ── Record Detail ──
182
+ onRecordClick(record) {
183
+ if (!this.activeTab?.entityKey)
184
+ return;
185
+ this.selectedRecord = record;
186
+ this.recordMode = 'view';
187
+ this.showRecordDetail = true;
188
+ this.recordSelected.emit({ entity: this.activeTab.entityKey, record });
189
+ }
190
+ onRecordDoubleClick(record) {
191
+ if (this.config.readOnly)
192
+ return;
193
+ this.selectedRecord = record;
194
+ this.recordMode = 'edit';
195
+ this.showRecordDetail = true;
196
+ }
197
+ closeRecordDetail() {
198
+ this.showRecordDetail = false;
199
+ this.selectedRecord = undefined;
200
+ }
201
+ onRecordSave(data) {
202
+ if (this.recordMode === 'create') {
203
+ this.recordCreated.emit(data);
204
+ }
205
+ else {
206
+ this.recordUpdated.emit(data);
207
+ }
208
+ this.closeRecordDetail();
209
+ }
210
+ onRecordDelete(record) {
211
+ this.recordDeleted.emit(record);
212
+ this.closeRecordDetail();
213
+ }
214
+ // ── Helpers ──
215
+ getEntityForTab(tab) {
216
+ if (!tab.entityKey)
217
+ return undefined;
218
+ return this.entitySchema.getEntityByKey(tab.entityKey, this.config);
219
+ }
220
+ trackByTabId(_index, tab) {
221
+ return tab.id;
222
+ }
223
+ executeQuery(raw) {
224
+ if (!raw.trim())
225
+ return;
226
+ let query;
227
+ try {
228
+ query = this.queryExecutor.parseQuery(raw);
229
+ }
230
+ catch (err) {
231
+ this.error.emit({ message: err.message });
232
+ return;
233
+ }
234
+ // Auto-populate query for selected entity
235
+ if (this.selectedEntity && !query.entity) {
236
+ query.entity = this.selectedEntity.key;
237
+ }
238
+ this.executing = true;
239
+ this.subscription?.unsubscribe();
240
+ this.subscription = this.queryExecutor.execute(query, this.config).subscribe({
241
+ next: (result) => {
242
+ this.activeResult = result;
243
+ this.executing = false;
244
+ if (this.activeTab?.type === 'query') {
245
+ this.activeTab.result = result;
246
+ this.activeTab.dirty = false;
247
+ }
248
+ this.queryExecuted.emit(result);
249
+ },
250
+ error: (err) => {
251
+ this.executing = false;
252
+ this.error.emit(err);
253
+ },
254
+ });
255
+ }
256
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerComponent, deps: [{ token: i1.EntitySchemaService }, { token: i2.QueryExecutorService }], target: i0.ɵɵFactoryTarget.Component });
257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DatabaseManagerComponent, isStandalone: true, selector: "tgm-database-manager", inputs: { config: "config", containerClass: "containerClass", sidebarClass: "sidebarClass", mainClass: "mainClass", title: "title", noResultsMessage: "noResultsMessage", loadingMessage: "loadingMessage", headerTemplate: "headerTemplate", sidebarHeaderTemplate: "sidebarHeaderTemplate", tabTemplate: "tabTemplate", emptyTemplate: "emptyTemplate" }, outputs: { entitySelected: "entitySelected", queryExecuted: "queryExecuted", recordSelected: "recordSelected", recordCreated: "recordCreated", recordUpdated: "recordUpdated", recordDeleted: "recordDeleted", error: "error" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tgm-database-manager\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <div class=\"tgm-database-manager__header\">\n <h3 class=\"tgm-database-manager__title\">{{ title }}</h3>\n </div>\n </ng-template>\n\n <div class=\"tgm-database-manager__layout\">\n <!-- Sidebar: Object Browser -->\n <div class=\"tgm-database-manager__sidebar\" [ngClass]=\"sidebarClass\">\n <ng-container *ngIf=\"sidebarHeaderTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarHeaderTemplate\"></ng-container>\n </ng-container>\n <tgm-object-browser\n [config]=\"config\"\n [selectedEntity]=\"selectedEntity\"\n (selectEntity)=\"onEntitySelected($event)\"\n (doubleClickEntity)=\"onEntityDoubleClick($event)\"\n ></tgm-object-browser>\n </div>\n\n <!-- Main Area -->\n <div class=\"tgm-database-manager__main\" [ngClass]=\"mainClass\">\n <!-- Tabs -->\n <div class=\"tgm-database-manager__tabs\">\n <div class=\"tgm-database-manager__tab-list\">\n <div\n *ngFor=\"let tab of tabs; trackBy: trackByTabId\"\n class=\"tgm-database-manager__tab\"\n [class.tgm-database-manager__tab--active]=\"tab.id === activeTabId\"\n (click)=\"selectTab(tab)\"\n >\n <ng-container *ngIf=\"tabTemplate; else defaultTab\">\n <ng-container *ngTemplateOutlet=\"tabTemplate; context: { $implicit: tab }\"></ng-container>\n </ng-container>\n <ng-template #defaultTab>\n <span class=\"tgm-database-manager__tab-icon\">\n {{ tab.type === 'query' ? '&#10095;' : (tab.type === 'table-structure' ? '&#9776;' : '&#9635;') }}\n </span>\n <span class=\"tgm-database-manager__tab-title\">{{ tab.title }}</span>\n <span class=\"tgm-database-manager__tab-dirty\" *ngIf=\"tab.dirty\">&#9679;</span>\n <button\n class=\"tgm-database-manager__tab-close\"\n (click)=\"closeTab(tab, $event)\"\n >&times;</button>\n </ng-template>\n </div>\n <button\n class=\"tgm-database-manager__tab-add\"\n (click)=\"addQueryTab()\"\n title=\"New Query Tab\"\n >+</button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tgm-database-manager__content\">\n <!-- Empty state -->\n <ng-container *ngIf=\"!activeTab\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultEmpty>\n <div class=\"tgm-database-manager__empty\">\n <p>Select an entity from the sidebar or open a new query tab.</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Query Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'query'\">\n <div class=\"tgm-database-manager__query-area\">\n <tgm-query-editor\n [value]=\"queryText\"\n [enableMonaco]=\"config.enableMonaco !== false\"\n [entitySchema]=\"selectedEntity\"\n [monacoOptions]=\"config.monacoOptions\"\n (valueChange)=\"onQueryChange($event)\"\n (execute)=\"onExecuteFromEditor($event)\"\n ></tgm-query-editor>\n\n <tgm-query-toolbar\n [executing]=\"executing\"\n (execute)=\"onExecute()\"\n (format)=\"onFormat()\"\n (clear)=\"onClear()\"\n ></tgm-query-toolbar>\n </div>\n\n <div class=\"tgm-database-manager__results\">\n <tgm-results-grid\n *ngIf=\"activeResult\"\n [data]=\"activeResult.data\"\n [columns]=\"selectedEntity?.fields || []\"\n [total]=\"activeResult.total\"\n [page]=\"activeResult.page\"\n [pageSize]=\"activeResult.pageSize\"\n [loading]=\"executing\"\n [noResultsMessage]=\"noResultsMessage\"\n [loadingMessage]=\"loadingMessage\"\n (rowClick)=\"onRecordClick($event)\"\n (rowDoubleClick)=\"onRecordDoubleClick($event)\"\n ></tgm-results-grid>\n\n <div class=\"tgm-database-manager__result-info\" *ngIf=\"activeResult\">\n <span>{{ activeResult.total }} rows &middot; {{ activeResult.executionTime }}ms</span>\n </div>\n\n <div class=\"tgm-database-manager__no-results\" *ngIf=\"!activeResult && !executing\">\n <p>Execute a query to see results.</p>\n </div>\n </div>\n </ng-container>\n\n <!-- Table Data Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-data'\">\n <tgm-table-data-viewer\n [entityKey]=\"activeTab.entityKey!\"\n [config]=\"config\"\n [pageSize]=\"config.defaultPageSize || 25\"\n [showCreate]=\"!config.readOnly\"\n [showDelete]=\"!config.readOnly\"\n (view)=\"onRecordClick($event)\"\n (edit)=\"onRecordDoubleClick($event)\"\n ></tgm-table-data-viewer>\n </ng-container>\n\n <!-- Table Structure Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-structure'\">\n <tgm-table-structure\n [entity]=\"getEntityForTab(activeTab!)\"\n ></tgm-table-structure>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Record Detail Panel (overlay) -->\n <div class=\"tgm-database-manager__detail-overlay\" *ngIf=\"showRecordDetail\" (click)=\"closeRecordDetail()\">\n <div class=\"tgm-database-manager__detail-panel\" (click)=\"$event.stopPropagation()\">\n <tgm-record-detail\n [record]=\"selectedRecord\"\n [entity]=\"getEntityForTab(activeTab!) || selectedEntity\"\n [mode]=\"recordMode\"\n (save)=\"onRecordSave($event)\"\n (cancel)=\"closeRecordDetail()\"\n (delete)=\"onRecordDelete($event)\"\n ></tgm-record-detail>\n </div>\n </div>\n</div>\n", styles: [":host{--tgm-db-bg: #1e1e2e;--tgm-db-bg-secondary: rgba(255, 255, 255, .05);--tgm-db-bg-hover: rgba(255, 255, 255, .08);--tgm-db-bg-active: rgba(59, 130, 246, .15);--tgm-db-border: rgba(255, 255, 255, .1);--tgm-db-text: #e5e7eb;--tgm-db-text-secondary: #9ca3af;--tgm-db-text-muted: #6b7280;--tgm-db-primary: #3b82f6;--tgm-db-primary-hover: #2563eb;--tgm-db-success: #22c55e;--tgm-db-warning: #eab308;--tgm-db-danger: #ef4444;--tgm-db-radius: 8px;--tgm-db-radius-sm: 4px;--tgm-db-font-family: inherit;--tgm-db-font-mono: \"Fira Code\", \"Cascadia Code\", \"JetBrains Mono\", monospace;--tgm-db-font-size: 14px;--tgm-db-spacing: 16px;--tgm-db-spacing-sm: 8px;--tgm-db-sidebar-width: 260px;--tgm-db-editor-height: 200px;--tgm-db-shadow: 0 1px 3px rgba(0, 0, 0, .3);display:block;font-family:var(--tgm-db-font-family);font-size:var(--tgm-db-font-size);color:var(--tgm-db-text)}.tgm-database-manager{display:flex;flex-direction:column;height:100%;min-height:500px;background:var(--tgm-db-bg);border-radius:var(--tgm-db-radius);overflow:hidden;border:1px solid var(--tgm-db-border)}.tgm-database-manager__header{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm) var(--tgm-db-spacing);border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__title{margin:0;font-size:16px;font-weight:600;color:var(--tgm-db-text)}.tgm-database-manager__layout{display:flex;flex:1;min-height:0}.tgm-database-manager__sidebar{width:var(--tgm-db-sidebar-width);min-width:200px;border-right:1px solid var(--tgm-db-border);background:var(--tgm-db-bg);display:flex;flex-direction:column;overflow:hidden}.tgm-database-manager__main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.tgm-database-manager__tabs{border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__tab-list{display:flex;align-items:center;overflow-x:auto;gap:0}.tgm-database-manager__tab-list::-webkit-scrollbar{height:2px}.tgm-database-manager__tab-list::-webkit-scrollbar-thumb{background:var(--tgm-db-border)}.tgm-database-manager__tab{display:flex;align-items:center;gap:4px;padding:8px 12px;font-size:12px;color:var(--tgm-db-text-secondary);cursor:pointer;border-right:1px solid var(--tgm-db-border);white-space:nowrap;transition:background .1s;-webkit-user-select:none;user-select:none}.tgm-database-manager__tab:hover{background:var(--tgm-db-bg-hover);color:var(--tgm-db-text)}.tgm-database-manager__tab--active{background:var(--tgm-db-bg);color:var(--tgm-db-text);border-bottom:2px solid var(--tgm-db-primary)}.tgm-database-manager__tab-icon{font-size:10px;opacity:.6}.tgm-database-manager__tab-title{max-width:150px;overflow:hidden;text-overflow:ellipsis}.tgm-database-manager__tab-dirty{font-size:8px;color:var(--tgm-db-warning)}.tgm-database-manager__tab-close{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:14px;padding:0 2px;line-height:1;border-radius:2px}.tgm-database-manager__tab-close:hover{color:var(--tgm-db-text);background:var(--tgm-db-bg-hover)}.tgm-database-manager__tab-add{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:16px;padding:4px 12px;transition:color .1s}.tgm-database-manager__tab-add:hover{color:var(--tgm-db-text)}.tgm-database-manager__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.tgm-database-manager__query-area{flex-shrink:0}.tgm-database-manager__results{flex:1;min-height:0;display:flex;flex-direction:column}.tgm-database-manager__result-info{padding:4px var(--tgm-db-spacing-sm);font-size:11px;color:var(--tgm-db-text-muted);background:var(--tgm-db-bg-secondary);border-top:1px solid var(--tgm-db-border)}.tgm-database-manager__no-results{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__no-results p{margin:0}.tgm-database-manager__empty{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__empty p{margin:0}.tgm-database-manager__detail-overlay{position:absolute;inset:0;background:#00000080;display:flex;align-items:center;justify-content:flex-end;z-index:100}.tgm-database-manager__detail-panel{width:480px;max-width:90%;height:100%;background:var(--tgm-db-bg);border-left:1px solid var(--tgm-db-border);box-shadow:-4px 0 16px #0000004d;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ObjectBrowserComponent, selector: "tgm-object-browser", inputs: ["config", "selectedEntity", "searchPlaceholder", "groupLabels", "entityTemplate", "groupTemplate"], outputs: ["selectEntity", "doubleClickEntity"] }, { kind: "component", type: QueryEditorComponent, selector: "tgm-query-editor", inputs: ["value", "entitySchema", "enableMonaco", "monacoOptions", "placeholder", "editorClass"], outputs: ["valueChange", "execute"] }, { kind: "component", type: QueryToolbarComponent, selector: "tgm-query-toolbar", inputs: ["executing", "disabled", "showHistory", "showFormat", "executeLabel", "formatLabel", "clearLabel", "historyLabel", "toolbarTemplate"], outputs: ["execute", "format", "clear", "toggleHistory"] }, { kind: "component", type: ResultsGridComponent, selector: "tgm-results-grid", inputs: ["data", "columns", "total", "page", "pageSize", "loading", "sortField", "sortOrder", "showPagination", "showExport", "noResultsMessage", "loadingMessage", "rowClass", "cellTemplate", "headerTemplate", "emptyTemplate", "paginationTemplate"], outputs: ["sort", "pageChange", "rowClick", "rowDoubleClick", "cellClick", "exportData"] }, { kind: "component", type: TableStructureComponent, selector: "tgm-table-structure", inputs: ["entity", "containerClass", "fieldTemplate"], outputs: ["fieldClick"] }, { kind: "component", type: TableDataViewerComponent, selector: "tgm-table-data-viewer", inputs: ["entityKey", "config", "pageSize", "showFilters", "showCreate", "showDelete", "emptyMessage", "loadingMessage", "rowTemplate", "filterTemplate", "toolbarTemplate"], outputs: ["view", "edit", "delete", "create", "pageChange", "filterChange"] }, { kind: "component", type: RecordDetailComponent, selector: "tgm-record-detail", inputs: ["record", "entity", "mode", "saving", "saveLabel", "cancelLabel", "deleteLabel", "editLabel", "fieldTemplate", "headerTemplate", "footerTemplate"], outputs: ["save", "cancel", "delete"] }] });
258
+ }
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerComponent, decorators: [{
260
+ type: Component,
261
+ args: [{ selector: 'tgm-database-manager', standalone: true, imports: [
262
+ CommonModule,
263
+ ObjectBrowserComponent,
264
+ QueryEditorComponent,
265
+ QueryToolbarComponent,
266
+ ResultsGridComponent,
267
+ TableStructureComponent,
268
+ TableDataViewerComponent,
269
+ RecordDetailComponent,
270
+ ], template: "<div class=\"tgm-database-manager\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <div class=\"tgm-database-manager__header\">\n <h3 class=\"tgm-database-manager__title\">{{ title }}</h3>\n </div>\n </ng-template>\n\n <div class=\"tgm-database-manager__layout\">\n <!-- Sidebar: Object Browser -->\n <div class=\"tgm-database-manager__sidebar\" [ngClass]=\"sidebarClass\">\n <ng-container *ngIf=\"sidebarHeaderTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarHeaderTemplate\"></ng-container>\n </ng-container>\n <tgm-object-browser\n [config]=\"config\"\n [selectedEntity]=\"selectedEntity\"\n (selectEntity)=\"onEntitySelected($event)\"\n (doubleClickEntity)=\"onEntityDoubleClick($event)\"\n ></tgm-object-browser>\n </div>\n\n <!-- Main Area -->\n <div class=\"tgm-database-manager__main\" [ngClass]=\"mainClass\">\n <!-- Tabs -->\n <div class=\"tgm-database-manager__tabs\">\n <div class=\"tgm-database-manager__tab-list\">\n <div\n *ngFor=\"let tab of tabs; trackBy: trackByTabId\"\n class=\"tgm-database-manager__tab\"\n [class.tgm-database-manager__tab--active]=\"tab.id === activeTabId\"\n (click)=\"selectTab(tab)\"\n >\n <ng-container *ngIf=\"tabTemplate; else defaultTab\">\n <ng-container *ngTemplateOutlet=\"tabTemplate; context: { $implicit: tab }\"></ng-container>\n </ng-container>\n <ng-template #defaultTab>\n <span class=\"tgm-database-manager__tab-icon\">\n {{ tab.type === 'query' ? '&#10095;' : (tab.type === 'table-structure' ? '&#9776;' : '&#9635;') }}\n </span>\n <span class=\"tgm-database-manager__tab-title\">{{ tab.title }}</span>\n <span class=\"tgm-database-manager__tab-dirty\" *ngIf=\"tab.dirty\">&#9679;</span>\n <button\n class=\"tgm-database-manager__tab-close\"\n (click)=\"closeTab(tab, $event)\"\n >&times;</button>\n </ng-template>\n </div>\n <button\n class=\"tgm-database-manager__tab-add\"\n (click)=\"addQueryTab()\"\n title=\"New Query Tab\"\n >+</button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tgm-database-manager__content\">\n <!-- Empty state -->\n <ng-container *ngIf=\"!activeTab\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultEmpty>\n <div class=\"tgm-database-manager__empty\">\n <p>Select an entity from the sidebar or open a new query tab.</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Query Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'query'\">\n <div class=\"tgm-database-manager__query-area\">\n <tgm-query-editor\n [value]=\"queryText\"\n [enableMonaco]=\"config.enableMonaco !== false\"\n [entitySchema]=\"selectedEntity\"\n [monacoOptions]=\"config.monacoOptions\"\n (valueChange)=\"onQueryChange($event)\"\n (execute)=\"onExecuteFromEditor($event)\"\n ></tgm-query-editor>\n\n <tgm-query-toolbar\n [executing]=\"executing\"\n (execute)=\"onExecute()\"\n (format)=\"onFormat()\"\n (clear)=\"onClear()\"\n ></tgm-query-toolbar>\n </div>\n\n <div class=\"tgm-database-manager__results\">\n <tgm-results-grid\n *ngIf=\"activeResult\"\n [data]=\"activeResult.data\"\n [columns]=\"selectedEntity?.fields || []\"\n [total]=\"activeResult.total\"\n [page]=\"activeResult.page\"\n [pageSize]=\"activeResult.pageSize\"\n [loading]=\"executing\"\n [noResultsMessage]=\"noResultsMessage\"\n [loadingMessage]=\"loadingMessage\"\n (rowClick)=\"onRecordClick($event)\"\n (rowDoubleClick)=\"onRecordDoubleClick($event)\"\n ></tgm-results-grid>\n\n <div class=\"tgm-database-manager__result-info\" *ngIf=\"activeResult\">\n <span>{{ activeResult.total }} rows &middot; {{ activeResult.executionTime }}ms</span>\n </div>\n\n <div class=\"tgm-database-manager__no-results\" *ngIf=\"!activeResult && !executing\">\n <p>Execute a query to see results.</p>\n </div>\n </div>\n </ng-container>\n\n <!-- Table Data Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-data'\">\n <tgm-table-data-viewer\n [entityKey]=\"activeTab.entityKey!\"\n [config]=\"config\"\n [pageSize]=\"config.defaultPageSize || 25\"\n [showCreate]=\"!config.readOnly\"\n [showDelete]=\"!config.readOnly\"\n (view)=\"onRecordClick($event)\"\n (edit)=\"onRecordDoubleClick($event)\"\n ></tgm-table-data-viewer>\n </ng-container>\n\n <!-- Table Structure Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-structure'\">\n <tgm-table-structure\n [entity]=\"getEntityForTab(activeTab!)\"\n ></tgm-table-structure>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Record Detail Panel (overlay) -->\n <div class=\"tgm-database-manager__detail-overlay\" *ngIf=\"showRecordDetail\" (click)=\"closeRecordDetail()\">\n <div class=\"tgm-database-manager__detail-panel\" (click)=\"$event.stopPropagation()\">\n <tgm-record-detail\n [record]=\"selectedRecord\"\n [entity]=\"getEntityForTab(activeTab!) || selectedEntity\"\n [mode]=\"recordMode\"\n (save)=\"onRecordSave($event)\"\n (cancel)=\"closeRecordDetail()\"\n (delete)=\"onRecordDelete($event)\"\n ></tgm-record-detail>\n </div>\n </div>\n</div>\n", styles: [":host{--tgm-db-bg: #1e1e2e;--tgm-db-bg-secondary: rgba(255, 255, 255, .05);--tgm-db-bg-hover: rgba(255, 255, 255, .08);--tgm-db-bg-active: rgba(59, 130, 246, .15);--tgm-db-border: rgba(255, 255, 255, .1);--tgm-db-text: #e5e7eb;--tgm-db-text-secondary: #9ca3af;--tgm-db-text-muted: #6b7280;--tgm-db-primary: #3b82f6;--tgm-db-primary-hover: #2563eb;--tgm-db-success: #22c55e;--tgm-db-warning: #eab308;--tgm-db-danger: #ef4444;--tgm-db-radius: 8px;--tgm-db-radius-sm: 4px;--tgm-db-font-family: inherit;--tgm-db-font-mono: \"Fira Code\", \"Cascadia Code\", \"JetBrains Mono\", monospace;--tgm-db-font-size: 14px;--tgm-db-spacing: 16px;--tgm-db-spacing-sm: 8px;--tgm-db-sidebar-width: 260px;--tgm-db-editor-height: 200px;--tgm-db-shadow: 0 1px 3px rgba(0, 0, 0, .3);display:block;font-family:var(--tgm-db-font-family);font-size:var(--tgm-db-font-size);color:var(--tgm-db-text)}.tgm-database-manager{display:flex;flex-direction:column;height:100%;min-height:500px;background:var(--tgm-db-bg);border-radius:var(--tgm-db-radius);overflow:hidden;border:1px solid var(--tgm-db-border)}.tgm-database-manager__header{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm) var(--tgm-db-spacing);border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__title{margin:0;font-size:16px;font-weight:600;color:var(--tgm-db-text)}.tgm-database-manager__layout{display:flex;flex:1;min-height:0}.tgm-database-manager__sidebar{width:var(--tgm-db-sidebar-width);min-width:200px;border-right:1px solid var(--tgm-db-border);background:var(--tgm-db-bg);display:flex;flex-direction:column;overflow:hidden}.tgm-database-manager__main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.tgm-database-manager__tabs{border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__tab-list{display:flex;align-items:center;overflow-x:auto;gap:0}.tgm-database-manager__tab-list::-webkit-scrollbar{height:2px}.tgm-database-manager__tab-list::-webkit-scrollbar-thumb{background:var(--tgm-db-border)}.tgm-database-manager__tab{display:flex;align-items:center;gap:4px;padding:8px 12px;font-size:12px;color:var(--tgm-db-text-secondary);cursor:pointer;border-right:1px solid var(--tgm-db-border);white-space:nowrap;transition:background .1s;-webkit-user-select:none;user-select:none}.tgm-database-manager__tab:hover{background:var(--tgm-db-bg-hover);color:var(--tgm-db-text)}.tgm-database-manager__tab--active{background:var(--tgm-db-bg);color:var(--tgm-db-text);border-bottom:2px solid var(--tgm-db-primary)}.tgm-database-manager__tab-icon{font-size:10px;opacity:.6}.tgm-database-manager__tab-title{max-width:150px;overflow:hidden;text-overflow:ellipsis}.tgm-database-manager__tab-dirty{font-size:8px;color:var(--tgm-db-warning)}.tgm-database-manager__tab-close{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:14px;padding:0 2px;line-height:1;border-radius:2px}.tgm-database-manager__tab-close:hover{color:var(--tgm-db-text);background:var(--tgm-db-bg-hover)}.tgm-database-manager__tab-add{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:16px;padding:4px 12px;transition:color .1s}.tgm-database-manager__tab-add:hover{color:var(--tgm-db-text)}.tgm-database-manager__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.tgm-database-manager__query-area{flex-shrink:0}.tgm-database-manager__results{flex:1;min-height:0;display:flex;flex-direction:column}.tgm-database-manager__result-info{padding:4px var(--tgm-db-spacing-sm);font-size:11px;color:var(--tgm-db-text-muted);background:var(--tgm-db-bg-secondary);border-top:1px solid var(--tgm-db-border)}.tgm-database-manager__no-results{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__no-results p{margin:0}.tgm-database-manager__empty{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__empty p{margin:0}.tgm-database-manager__detail-overlay{position:absolute;inset:0;background:#00000080;display:flex;align-items:center;justify-content:flex-end;z-index:100}.tgm-database-manager__detail-panel{width:480px;max-width:90%;height:100%;background:var(--tgm-db-bg);border-left:1px solid var(--tgm-db-border);box-shadow:-4px 0 16px #0000004d;overflow:hidden}\n"] }]
271
+ }], ctorParameters: () => [{ type: i1.EntitySchemaService }, { type: i2.QueryExecutorService }], propDecorators: { config: [{
272
+ type: Input
273
+ }], containerClass: [{
274
+ type: Input
275
+ }], sidebarClass: [{
276
+ type: Input
277
+ }], mainClass: [{
278
+ type: Input
279
+ }], title: [{
280
+ type: Input
281
+ }], noResultsMessage: [{
282
+ type: Input
283
+ }], loadingMessage: [{
284
+ type: Input
285
+ }], headerTemplate: [{
286
+ type: Input
287
+ }], sidebarHeaderTemplate: [{
288
+ type: Input
289
+ }], tabTemplate: [{
290
+ type: Input
291
+ }], emptyTemplate: [{
292
+ type: Input
293
+ }], entitySelected: [{
294
+ type: Output
295
+ }], queryExecuted: [{
296
+ type: Output
297
+ }], recordSelected: [{
298
+ type: Output
299
+ }], recordCreated: [{
300
+ type: Output
301
+ }], recordUpdated: [{
302
+ type: Output
303
+ }], recordDeleted: [{
304
+ type: Output
305
+ }], error: [{
306
+ type: Output
307
+ }] } });
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyL2RhdGFiYXNlLW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBVy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7OztBQWtCakYsTUFBTSxPQUFPLHdCQUF3QjtJQTRDekI7SUFDQTtJQTVDVixlQUFlO0lBQ04sTUFBTSxHQUEwQixFQUFFLENBQUM7SUFFNUMsc0JBQXNCO0lBQ2IsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNwQixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFNBQVMsR0FBRyxFQUFF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LHdCQUF3Qjs0RkFBeEIsd0JBQXdCLGtxQkM5Q3JDLCt3TUEySkEsazdJRHpISSxZQUFZLHFnQkFDWixzQkFBc0IsNE5BQ3RCLG9CQUFvQixvTUFDcEIscUJBQXFCLHdRQUNyQixvQkFBb0IsaVpBQ3BCLHVCQUF1QixnSkFDdkIsd0JBQXdCLDZUQUN4QixxQkFBcUI7OzRGQUtaLHdCQUF3QjtrQkFoQnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjtxQkFDdEI7MkhBTVEsTUFBTTtzQkFBZCxLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFiYXNlTWFuYWdlckNvbmZpZyxcbiAgRWRpdG9yVGFiLFxuICBFbnRpdHlSZWdpc3RyeUVudHJ5LFxuICBRdWVyeU1vZGVsLFxuICBRdWVyeVJlc3VsdCxcbn0gZnJvbSAnLi4vdHlwZXMvZGF0YWJhc2UtbWFuYWdlci50eXBlcyc7XG5pbXBvcnQgeyBFbnRpdHlTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZW50aXR5LXNjaGVtYS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXJ5RXhlY3V0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnktZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBPYmplY3RCcm93c2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vb2JqZWN0LWJyb3dzZXIvb2JqZWN0LWJyb3dzZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXJ5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcXVlcnktZWRpdG9yL3F1ZXJ5LWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlcnlUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vcXVlcnktdG9vbGJhci9xdWVyeS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXN1bHRzR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL3Jlc3VsdHMtZ3JpZC9yZXN1bHRzLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlU3RydWN0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtc3RydWN0dXJlL3RhYmxlLXN0cnVjdHVyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVEYXRhVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtZGF0YS12aWV3ZXIvdGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY29yZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4uL3JlY29yZC1kZXRhaWwvcmVjb3JkLWRldGFpbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Z20tZGF0YWJhc2UtbWFuYWdlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgT2JqZWN0QnJvd3NlckNvbXBvbmVudCxcbiAgICBRdWVyeUVkaXRvckNvbXBvbmVudCxcbiAgICBRdWVyeVRvb2xiYXJDb21wb25lbnQsXG4gICAgUmVzdWx0c0dyaWRDb21wb25lbnQsXG4gICAgVGFibGVTdHJ1Y3R1cmVDb21wb25lbnQsXG4gICAgVGFibGVEYXRhVmlld2VyQ29tcG9uZW50LFxuICAgIFJlY29yZERldGFpbENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFiYXNlLW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhYmFzZS1tYW5hZ2VyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFiYXNlTWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvLyDilIDilIAgQ29uZmlnIOKUgOKUgFxuICBASW5wdXQoKSBjb25maWc6IERhdGFiYXNlTWFuYWdlckNvbmZpZyA9IHt9O1xuXG4gIC8vIOKUgOKUgCBDU1Mgb3ZlcnJpZGVzIOKUgOKUgFxuICBASW5wdXQoKSBjb250YWluZXJDbGFzcyA9ICcnO1xuICBASW5wdXQoKSBzaWRlYmFyQ2xhc3MgPSAnJztcbiAgQElucHV0KCkgbWFpbkNsYXNzID0gJyc7XG5cbiAgLy8g4pSA4pSAIExhYmVscyDilIDilIBcbiAgQElucHV0KCkgdGl0bGUgPSAnRGF0YWJhc2UgTWFuYWdlcic7XG4gIEBJbnB1dCgpIG5vUmVzdWx0c01lc3NhZ2UgPSAnTm8gcmVzdWx0cyBmb3VuZC4nO1xuICBASW5wdXQoKSBsb2FkaW5nTWVzc2FnZSA9ICdFeGVjdXRpbmcgcXVlcnkuLi4nO1xuXG4gIC8vIOKUgOKUgCBDdXN0b20gdGVtcGxhdGVzIOKUgOKUgFxuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBASW5wdXQoKSBzaWRlYmFySGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgQElucHV0KCkgdGFiVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogRWRpdG9yVGFiIH0+O1xuICBASW5wdXQoKSBlbXB0eVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgLy8g4pSA4pSAIEV2ZW50cyDilIDilIBcbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxFbnRpdHlSZWdpc3RyeUVudHJ5PigpO1xuICBAT3V0cHV0KCkgcXVlcnlFeGVjdXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UXVlcnlSZXN1bHQ+KCk7XG4gIEBPdXRwdXQoKSByZWNvcmRTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBlbnRpdHk6IHN0cmluZzsgcmVjb3JkOiBhbnkgfT4oKTtcbiAgQE91dHB1dCgpIHJlY29yZENyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlY29yZFVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlY29yZERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLy8g4pSA4pSAIFN0YXRlIOKUgOKUgFxuICBzZWxlY3RlZEVudGl0eT86IEVudGl0eVJlZ2lzdHJ5RW50cnk7XG4gIHRhYnM6IEVkaXRvclRhYltdID0gW107XG4gIGFjdGl2ZVRhYklkPzogc3RyaW5nO1xuICBxdWVyeVRleHQgPSAnJztcbiAgZXhlY3V0aW5nID0gZmFsc2U7XG4gIGFjdGl2ZVJlc3VsdD86IFF1ZXJ5UmVzdWx0O1xuICBzZWxlY3RlZFJlY29yZD86IGFueTtcbiAgcmVjb3JkTW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ2NyZWF0ZScgPSAndmlldyc7XG4gIHNob3dSZWNvcmREZXRhaWwgPSBmYWxzZTtcblxuICBwcml2YXRlIHRhYkNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVudGl0eVNjaGVtYTogRW50aXR5U2NoZW1hU2VydmljZSxcbiAgICBwcml2YXRlIHF1ZXJ5RXhlY3V0b3I6IFF1ZXJ5RXhlY3V0b3JTZXJ2aWNlLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRRdWVyeVRhYigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgdGhpcy5lbnRpdHlTY2hlbWEuaW52YWxpZGF0ZUNhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyDilIDilIAgVGFiIE1hbmFnZW1lbnQg4pSA4pSAXG5cbiAgZ2V0IGFjdGl2ZVRhYigpOiBFZGl0b3JUYWIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYnMuZmluZCh0ID0+IHQuaWQgPT09IHRoaXMuYWN0aXZlVGFiSWQpO1xuICB9XG5cbiAgYWRkUXVlcnlUYWIoKTogdm9pZCB7XG4gICAgY29uc3QgdGFiOiBFZGl0b3JUYWIgPSB7XG4gICAgICBpZDogYHF1ZXJ5LSR7Kyt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHRpdGxlOiBgUXVlcnkgJHt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHR5cGU6ICdxdWVyeScsXG4gICAgICBxdWVyeTogJycsXG4gICAgfTtcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWIuaWQ7XG4gICAgdGhpcy5xdWVyeVRleHQgPSAnJztcbiAgICB0aGlzLmFjdGl2ZVJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFkZFRhYmxlRGF0YVRhYihlbnRpdHk6IEVudGl0eVJlZ2lzdHJ5RW50cnkpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMudGFicy5maW5kKHQgPT4gdC50eXBlID09PSAndGFibGUtZGF0YScgJiYgdC5lbnRpdHlLZXkgPT09IGVudGl0eS5rZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IGV4aXN0aW5nLmlkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWI6IEVkaXRvclRhYiA9IHtcbiAgICAgIGlkOiBgZGF0YS0ke2VudGl0eS5rZXl9LSR7Kyt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHRpdGxlOiBlbnRpdHkubmFtZSxcbiAgICAgIHR5cGU6ICd0YWJsZS1kYXRhJyxcbiAgICAgIGVudGl0eUtleTogZW50aXR5LmtleSxcbiAgICB9O1xuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYi5pZDtcbiAgfVxuXG4gIGFkZFRhYmxlU3RydWN0dXJlVGFiKGVudGl0eTogRW50aXR5UmVnaXN0cnlFbnRyeSk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy50YWJzLmZpbmQodCA9PiB0LnR5cGUgPT09ICd0YWJsZS1zdHJ1Y3R1cmUnICYmIHQuZW50aXR5S2V5ID09PSBlbnRpdHkua2V5KTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBleGlzdGluZy5pZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFiOiBFZGl0b3JUYWIgPSB7XG4gICAgICBpZDogYHN0cnVjdC0ke2VudGl0eS5rZXl9LSR7Kyt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHRpdGxlOiBgJHtlbnRpdHkubmFtZX0gKFN0cnVjdHVyZSlgLFxuICAgICAgdHlwZTogJ3RhYmxlLXN0cnVjdHVyZScsXG4gICAgICBlbnRpdHlLZXk6IGVudGl0eS5rZXksXG4gICAgfTtcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWIuaWQ7XG4gIH1cblxuICBzZWxlY3RUYWIodGFiOiBFZGl0b3JUYWIpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdGFiLmlkO1xuICAgIGlmICh0YWIudHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgdGhpcy5xdWVyeVRleHQgPSB0YWIucXVlcnkgPz8gJyc7XG4gICAgICB0aGlzLmFjdGl2ZVJlc3VsdCA9IHRhYi5yZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VUYWIodGFiOiBFZGl0b3JUYWIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGlkeCA9IHRoaXMudGFicy5pbmRleE9mKHRhYik7XG4gICAgaWYgKGlkeCA8IDApIHJldHVybjtcbiAgICB0aGlzLnRhYnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiSWQgPT09IHRhYi5pZCkge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRoaXMudGFic1tNYXRoLm1pbihpZHgsIHRoaXMudGFicy5sZW5ndGggLSAxKV0/LmlkO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknKSB7XG4gICAgICAgIHRoaXMucXVlcnlUZXh0ID0gdGhpcy5hY3RpdmVUYWIucXVlcnkgPz8gJyc7XG4gICAgICAgIHRoaXMuYWN0aXZlUmVzdWx0ID0gdGhpcy5hY3RpdmVUYWIucmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBFbnRpdHkgU2VsZWN0aW9uIOKUgOKUgFxuXG4gIG9uRW50aXR5U2VsZWN0ZWQoZW50aXR5OiBFbnRpdHlSZWdpc3RyeUVudHJ5KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEVudGl0eSA9IGVudGl0eTtcbiAgICB0aGlzLmVudGl0eVNlbGVjdGVkLmVtaXQoZW50aXR5KTtcbiAgfVxuXG4gIG9uRW50aXR5RG91YmxlQ2xpY2soZW50aXR5OiBFbnRpdHlSZWdpc3RyeUVudHJ5KTogdm9pZCB7XG4gICAgdGhpcy5hZGRUYWJsZURhdGFUYWIoZW50aXR5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBFeGVjdXRpb24g4pSA4pSAXG5cbiAgb25RdWVyeUNoYW5nZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5VGV4dCA9IHRleHQ7XG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5xdWVyeSA9IHRleHQ7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5kaXJ0eSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25FeGVjdXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY3V0ZVF1ZXJ5KHRoaXMucXVlcnlUZXh0KTtcbiAgfVxuXG4gIG9uRXhlY3V0ZUZyb21FZGl0b3IodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVRleHQgPSB0ZXh0O1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYj8udHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgdGhpcy5hY3RpdmVUYWIucXVlcnkgPSB0ZXh0O1xuICAgIH1cbiAgICB0aGlzLmV4ZWN1dGVRdWVyeSh0ZXh0KTtcbiAgfVxuXG4gIG9uRm9ybWF0KCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnF1ZXJ5RXhlY3V0b3IucGFyc2VRdWVyeSh0aGlzLnF1ZXJ5VGV4dCk7XG4gICAgICB0aGlzLnF1ZXJ5VGV4dCA9IHRoaXMucXVlcnlFeGVjdXRvci5mb3JtYXRRdWVyeShwYXJzZWQpO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiLnF1ZXJ5ID0gdGhpcy5xdWVyeVRleHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMZWF2ZSBhcyBpcyBpZiBpbnZhbGlkXG4gICAgfVxuICB9XG5cbiAgb25DbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5VGV4dCA9ICcnO1xuICAgIHRoaXMuYWN0aXZlUmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYj8udHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgdGhpcy5hY3RpdmVUYWIucXVlcnkgPSAnJztcbiAgICAgIHRoaXMuYWN0aXZlVGFiLnJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYWN0aXZlVGFiLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFJlY29yZCBEZXRhaWwg4pSA4pSAXG5cbiAgb25SZWNvcmRDbGljayhyZWNvcmQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hY3RpdmVUYWI/LmVudGl0eUtleSkgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSByZWNvcmQ7XG4gICAgdGhpcy5yZWNvcmRNb2RlID0gJ3ZpZXcnO1xuICAgIHRoaXMuc2hvd1JlY29yZERldGFpbCA9IHRydWU7XG4gICAgdGhpcy5yZWNvcmRTZWxlY3RlZC5lbWl0KHsgZW50aXR5OiB0aGlzLmFjdGl2ZVRhYi5lbnRpdHlLZXksIHJlY29yZCB9KTtcbiAgfVxuXG4gIG9uUmVjb3JkRG91YmxlQ2xpY2socmVjb3JkOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcucmVhZE9ubHkpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcmVjb3JkO1xuICAgIHRoaXMucmVjb3JkTW9kZSA9ICdlZGl0JztcbiAgICB0aGlzLnNob3dSZWNvcmREZXRhaWwgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VSZWNvcmREZXRhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVjb3JkRGV0YWlsID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIG9uUmVjb3JkU2F2ZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRNb2RlID09PSAnY3JlYXRlJykge1xuICAgICAgdGhpcy5yZWNvcmRDcmVhdGVkLmVtaXQoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVjb3JkVXBkYXRlZC5lbWl0KGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlUmVjb3JkRGV0YWlsKCk7XG4gIH1cblxuICBvblJlY29yZERlbGV0ZShyZWNvcmQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVsZXRlZC5lbWl0KHJlY29yZCk7XG4gICAgdGhpcy5jbG9zZVJlY29yZERldGFpbCgpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEhlbHBlcnMg4pSA4pSAXG5cbiAgZ2V0RW50aXR5Rm9yVGFiKHRhYjogRWRpdG9yVGFiKTogRW50aXR5UmVnaXN0cnlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0YWIuZW50aXR5S2V5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmVudGl0eVNjaGVtYS5nZXRFbnRpdHlCeUtleSh0YWIuZW50aXR5S2V5LCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICB0cmFja0J5VGFiSWQoX2luZGV4OiBudW1iZXIsIHRhYjogRWRpdG9yVGFiKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGFiLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUXVlcnkocmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhdy50cmltKCkpIHJldHVybjtcblxuICAgIGxldCBxdWVyeTogUXVlcnlNb2RlbDtcbiAgICB0cnkge1xuICAgICAgcXVlcnkgPSB0aGlzLnF1ZXJ5RXhlY3V0b3IucGFyc2VRdWVyeShyYXcpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLmVycm9yLmVtaXQoeyBtZXNzYWdlOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBdXRvLXBvcHVsYXRlIHF1ZXJ5IGZvciBzZWxlY3RlZCBlbnRpdHlcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVudGl0eSAmJiAhcXVlcnkuZW50aXR5KSB7XG4gICAgICBxdWVyeS5lbnRpdHkgPSB0aGlzLnNlbGVjdGVkRW50aXR5LmtleTtcbiAgICB9XG5cbiAgICB0aGlzLmV4ZWN1dGluZyA9IHRydWU7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlFeGVjdXRvci5leGVjdXRlKHF1ZXJ5LCB0aGlzLmNvbmZpZykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuZXhlY3V0aW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYj8udHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYi5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucXVlcnlFeGVjdXRlZC5lbWl0KHJlc3VsdCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5leGVjdXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJcIiBbbmdDbGFzc109XCJjb250YWluZXJDbGFzc1wiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlOyBlbHNlIGRlZmF1bHRIZWFkZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJfX2hlYWRlclwiPlxuICAgICAgPGgzIGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJfX3RpdGxlXCI+e3sgdGl0bGUgfX08L2gzPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fbGF5b3V0XCI+XG4gICAgPCEtLSBTaWRlYmFyOiBPYmplY3QgQnJvd3NlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJfX3NpZGViYXJcIiBbbmdDbGFzc109XCJzaWRlYmFyQ2xhc3NcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaWRlYmFySGVhZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGViYXJIZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8dGdtLW9iamVjdC1icm93c2VyXG4gICAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgICAgW3NlbGVjdGVkRW50aXR5XT1cInNlbGVjdGVkRW50aXR5XCJcbiAgICAgICAgKHNlbGVjdEVudGl0eSk9XCJvbkVudGl0eVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAoZG91YmxlQ2xpY2tFbnRpdHkpPVwib25FbnRpdHlEb3VibGVDbGljaygkZXZlbnQpXCJcbiAgICAgID48L3RnbS1vYmplY3QtYnJvd3Nlcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWFpbiBBcmVhIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fbWFpblwiIFtuZ0NsYXNzXT1cIm1haW5DbGFzc1wiPlxuICAgICAgPCEtLSBUYWJzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWJzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fdGFiLWxpc3RcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IHRyYWNrQnk6IHRyYWNrQnlUYWJJZFwiXG4gICAgICAgICAgICBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWJcIlxuICAgICAgICAgICAgW2NsYXNzLnRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItLWFjdGl2ZV09XCJ0YWIuaWQgPT09IGFjdGl2ZVRhYklkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYWIodGFiKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYlRlbXBsYXRlOyBlbHNlIGRlZmF1bHRUYWJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdGFiIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGFiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItaWNvblwiPlxuICAgICAgICAgICAgICAgIHt7IHRhYi50eXBlID09PSAncXVlcnknID8gJyYjMTAwOTU7JyA6ICh0YWIudHlwZSA9PT0gJ3RhYmxlLXN0cnVjdHVyZScgPyAnJiM5Nzc2OycgOiAnJiM5NjM1OycpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fdGFiLXRpdGxlXCI+e3sgdGFiLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItZGlydHlcIiAqbmdJZj1cInRhYi5kaXJ0eVwiPiYjOTY3OTs8L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItY2xvc2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVRhYih0YWIsICRldmVudClcIlxuICAgICAgICAgICAgICA+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItYWRkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRRdWVyeVRhYigpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiTmV3IFF1ZXJ5IFRhYlwiXG4gICAgICAgICAgPis8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBUYWIgQ29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fY29udGVudFwiPlxuICAgICAgICA8IS0tIEVtcHR5IHN0YXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGl2ZVRhYlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbXB0eVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRFbXB0eVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRFbXB0eT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fZW1wdHlcIj5cbiAgICAgICAgICAgICAgPHA+U2VsZWN0IGFuIGVudGl0eSBmcm9tIHRoZSBzaWRlYmFyIG9yIG9wZW4gYSBuZXcgcXVlcnkgdGFiLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUXVlcnkgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19xdWVyeS1hcmVhXCI+XG4gICAgICAgICAgICA8dGdtLXF1ZXJ5LWVkaXRvclxuICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcnlUZXh0XCJcbiAgICAgICAgICAgICAgW2VuYWJsZU1vbmFjb109XCJjb25maWcuZW5hYmxlTW9uYWNvICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgIFtlbnRpdHlTY2hlbWFdPVwic2VsZWN0ZWRFbnRpdHlcIlxuICAgICAgICAgICAgICBbbW9uYWNvT3B0aW9uc109XCJjb25maWcubW9uYWNvT3B0aW9uc1wiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblF1ZXJ5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAoZXhlY3V0ZSk9XCJvbkV4ZWN1dGVGcm9tRWRpdG9yKCRldmVudClcIlxuICAgICAgICAgICAgPjwvdGdtLXF1ZXJ5LWVkaXRvcj5cblxuICAgICAgICAgICAgPHRnbS1xdWVyeS10b29sYmFyXG4gICAgICAgICAgICAgIFtleGVjdXRpbmddPVwiZXhlY3V0aW5nXCJcbiAgICAgICAgICAgICAgKGV4ZWN1dGUpPVwib25FeGVjdXRlKClcIlxuICAgICAgICAgICAgICAoZm9ybWF0KT1cIm9uRm9ybWF0KClcIlxuICAgICAgICAgICAgICAoY2xlYXIpPVwib25DbGVhcigpXCJcbiAgICAgICAgICAgID48L3RnbS1xdWVyeS10b29sYmFyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19yZXN1bHRzXCI+XG4gICAgICAgICAgICA8dGdtLXJlc3VsdHMtZ3JpZFxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVJlc3VsdFwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cImFjdGl2ZVJlc3VsdC5kYXRhXCJcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwic2VsZWN0ZWRFbnRpdHk/LmZpZWxkcyB8fCBbXVwiXG4gICAgICAgICAgICAgIFt0b3RhbF09XCJhY3RpdmVSZXN1bHQudG90YWxcIlxuICAgICAgICAgICAgICBbcGFnZV09XCJhY3RpdmVSZXN1bHQucGFnZVwiXG4gICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJhY3RpdmVSZXN1bHQucGFnZVNpemVcIlxuICAgICAgICAgICAgICBbbG9hZGluZ109XCJleGVjdXRpbmdcIlxuICAgICAgICAgICAgICBbbm9SZXN1bHRzTWVzc2FnZV09XCJub1Jlc3VsdHNNZXNzYWdlXCJcbiAgICAgICAgICAgICAgW2xvYWRpbmdNZXNzYWdlXT1cImxvYWRpbmdNZXNzYWdlXCJcbiAgICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uUmVjb3JkQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJlY29yZERvdWJsZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgPjwvdGdtLXJlc3VsdHMtZ3JpZD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19yZXN1bHQtaW5mb1wiICpuZ0lmPVwiYWN0aXZlUmVzdWx0XCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGl2ZVJlc3VsdC50b3RhbCB9fSByb3dzICZtaWRkb3Q7IHt7IGFjdGl2ZVJlc3VsdC5leGVjdXRpb25UaW1lIH19bXM8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19uby1yZXN1bHRzXCIgKm5nSWY9XCIhYWN0aXZlUmVzdWx0ICYmICFleGVjdXRpbmdcIj5cbiAgICAgICAgICAgICAgPHA+RXhlY3V0ZSBhIHF1ZXJ5IHRvIHNlZSByZXN1bHRzLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFRhYmxlIERhdGEgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVGFiPy50eXBlID09PSAndGFibGUtZGF0YSdcIj5cbiAgICAgICAgICA8dGdtLXRhYmxlLWRhdGEtdmlld2VyXG4gICAgICAgICAgICBbZW50aXR5S2V5XT1cImFjdGl2ZVRhYi5lbnRpdHlLZXkhXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJjb25maWcuZGVmYXVsdFBhZ2VTaXplIHx8IDI1XCJcbiAgICAgICAgICAgIFtzaG93Q3JlYXRlXT1cIiFjb25maWcucmVhZE9ubHlcIlxuICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwiIWNvbmZpZy5yZWFkT25seVwiXG4gICAgICAgICAgICAodmlldyk9XCJvblJlY29yZENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKGVkaXQpPVwib25SZWNvcmREb3VibGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICA+PC90Z20tdGFibGUtZGF0YS12aWV3ZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGFibGUgU3RydWN0dXJlIFRhYiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRhYj8udHlwZSA9PT0gJ3RhYmxlLXN0cnVjdHVyZSdcIj5cbiAgICAgICAgICA8dGdtLXRhYmxlLXN0cnVjdHVyZVxuICAgICAgICAgICAgW2VudGl0eV09XCJnZXRFbnRpdHlGb3JUYWIoYWN0aXZlVGFiISlcIlxuICAgICAgICAgID48L3RnbS10YWJsZS1zdHJ1Y3R1cmU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmVjb3JkIERldGFpbCBQYW5lbCAob3ZlcmxheSkgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fZGV0YWlsLW92ZXJsYXlcIiAqbmdJZj1cInNob3dSZWNvcmREZXRhaWxcIiAoY2xpY2spPVwiY2xvc2VSZWNvcmREZXRhaWwoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fZGV0YWlsLXBhbmVsXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgPHRnbS1yZWNvcmQtZGV0YWlsXG4gICAgICAgIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxuICAgICAgICBbZW50aXR5XT1cImdldEVudGl0eUZvclRhYihhY3RpdmVUYWIhKSB8fCBzZWxlY3RlZEVudGl0eVwiXG4gICAgICAgIFttb2RlXT1cInJlY29yZE1vZGVcIlxuICAgICAgICAoc2F2ZSk9XCJvblJlY29yZFNhdmUoJGV2ZW50KVwiXG4gICAgICAgIChjYW5jZWwpPVwiY2xvc2VSZWNvcmREZXRhaWwoKVwiXG4gICAgICAgIChkZWxldGUpPVwib25SZWNvcmREZWxldGUoJGV2ZW50KVwiXG4gICAgICA+PC90Z20tcmVjb3JkLWRldGFpbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,66 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { DatabaseManagerComponent } from './database-manager/database-manager.component';
4
+ import { ObjectBrowserComponent } from './object-browser/object-browser.component';
5
+ import { QueryEditorComponent } from './query-editor/query-editor.component';
6
+ import { QueryToolbarComponent } from './query-toolbar/query-toolbar.component';
7
+ import { ResultsGridComponent } from './results-grid/results-grid.component';
8
+ import { TableStructureComponent } from './table-structure/table-structure.component';
9
+ import { TableDataViewerComponent } from './table-data-viewer/table-data-viewer.component';
10
+ import { RecordDetailComponent } from './record-detail/record-detail.component';
11
+ import * as i0 from "@angular/core";
12
+ export class DatabaseManagerModule {
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, imports: [CommonModule,
15
+ DatabaseManagerComponent,
16
+ ObjectBrowserComponent,
17
+ QueryEditorComponent,
18
+ QueryToolbarComponent,
19
+ ResultsGridComponent,
20
+ TableStructureComponent,
21
+ TableDataViewerComponent,
22
+ RecordDetailComponent], exports: [DatabaseManagerComponent,
23
+ ObjectBrowserComponent,
24
+ QueryEditorComponent,
25
+ QueryToolbarComponent,
26
+ ResultsGridComponent,
27
+ TableStructureComponent,
28
+ TableDataViewerComponent,
29
+ RecordDetailComponent] });
30
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, imports: [CommonModule,
31
+ DatabaseManagerComponent,
32
+ ObjectBrowserComponent,
33
+ QueryEditorComponent,
34
+ QueryToolbarComponent,
35
+ ResultsGridComponent,
36
+ TableStructureComponent,
37
+ TableDataViewerComponent,
38
+ RecordDetailComponent] });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, decorators: [{
41
+ type: NgModule,
42
+ args: [{
43
+ imports: [
44
+ CommonModule,
45
+ DatabaseManagerComponent,
46
+ ObjectBrowserComponent,
47
+ QueryEditorComponent,
48
+ QueryToolbarComponent,
49
+ ResultsGridComponent,
50
+ TableStructureComponent,
51
+ TableDataViewerComponent,
52
+ RecordDetailComponent,
53
+ ],
54
+ exports: [
55
+ DatabaseManagerComponent,
56
+ ObjectBrowserComponent,
57
+ QueryEditorComponent,
58
+ QueryToolbarComponent,
59
+ ResultsGridComponent,
60
+ TableStructureComponent,
61
+ TableDataViewerComponent,
62
+ RecordDetailComponent,
63
+ ],
64
+ }]
65
+ }] });
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtbWFuYWdlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUF5QmhGLE1BQU0sT0FBTyxxQkFBcUI7d0dBQXJCLHFCQUFxQjt5R0FBckIscUJBQXFCLFlBckI5QixZQUFZO1lBQ1osd0JBQXdCO1lBQ3hCLHNCQUFzQjtZQUN0QixvQkFBb0I7WUFDcEIscUJBQXFCO1lBQ3JCLG9CQUFvQjtZQUNwQix1QkFBdUI7WUFDdkIsd0JBQXdCO1lBQ3hCLHFCQUFxQixhQUdyQix3QkFBd0I7WUFDeEIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIsb0JBQW9CO1lBQ3BCLHVCQUF1QjtZQUN2Qix3QkFBd0I7WUFDeEIscUJBQXFCO3lHQUdaLHFCQUFxQixZQXJCOUIsWUFBWTtZQUNaLHdCQUF3QjtZQUN4QixzQkFBc0I7WUFDdEIsb0JBQW9CO1lBQ3BCLHFCQUFxQjtZQUNyQixvQkFBb0I7WUFDcEIsdUJBQXVCO1lBQ3ZCLHdCQUF3QjtZQUN4QixxQkFBcUI7OzRGQWFaLHFCQUFxQjtrQkF2QmpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3dCQUN4QixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCx3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjtxQkFDdEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERhdGFiYXNlTWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYmplY3RCcm93c2VyQ29tcG9uZW50IH0gZnJvbSAnLi9vYmplY3QtYnJvd3Nlci9vYmplY3QtYnJvd3Nlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlcnlFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL3F1ZXJ5LWVkaXRvci9xdWVyeS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXJ5VG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vcXVlcnktdG9vbGJhci9xdWVyeS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXN1bHRzR3JpZENvbXBvbmVudCB9IGZyb20gJy4vcmVzdWx0cy1ncmlkL3Jlc3VsdHMtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVTdHJ1Y3R1cmVDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXN0cnVjdHVyZS90YWJsZS1zdHJ1Y3R1cmUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlRGF0YVZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtZGF0YS12aWV3ZXIvdGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY29yZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vcmVjb3JkLWRldGFpbC9yZWNvcmQtZGV0YWlsLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRGF0YWJhc2VNYW5hZ2VyQ29tcG9uZW50LFxuICAgIE9iamVjdEJyb3dzZXJDb21wb25lbnQsXG4gICAgUXVlcnlFZGl0b3JDb21wb25lbnQsXG4gICAgUXVlcnlUb29sYmFyQ29tcG9uZW50LFxuICAgIFJlc3VsdHNHcmlkQ29tcG9uZW50LFxuICAgIFRhYmxlU3RydWN0dXJlQ29tcG9uZW50LFxuICAgIFRhYmxlRGF0YVZpZXdlckNvbXBvbmVudCxcbiAgICBSZWNvcmREZXRhaWxDb21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBEYXRhYmFzZU1hbmFnZXJDb21wb25lbnQsXG4gICAgT2JqZWN0QnJvd3NlckNvbXBvbmVudCxcbiAgICBRdWVyeUVkaXRvckNvbXBvbmVudCxcbiAgICBRdWVyeVRvb2xiYXJDb21wb25lbnQsXG4gICAgUmVzdWx0c0dyaWRDb21wb25lbnQsXG4gICAgVGFibGVTdHJ1Y3R1cmVDb21wb25lbnQsXG4gICAgVGFibGVEYXRhVmlld2VyQ29tcG9uZW50LFxuICAgIFJlY29yZERldGFpbENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyTW9kdWxlIHt9XG4iXX0=