@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,98 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../services/entity-schema.service";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/forms";
8
+ export class ObjectBrowserComponent {
9
+ entitySchema;
10
+ // ── Data ──
11
+ config;
12
+ selectedEntity;
13
+ // ── Labels ──
14
+ searchPlaceholder = 'Search entities...';
15
+ groupLabels;
16
+ // ── Custom templates ──
17
+ entityTemplate;
18
+ groupTemplate;
19
+ // ── Events ──
20
+ selectEntity = new EventEmitter();
21
+ doubleClickEntity = new EventEmitter();
22
+ searchTerm = '';
23
+ groups = [];
24
+ filteredGroups = [];
25
+ constructor(entitySchema) {
26
+ this.entitySchema = entitySchema;
27
+ }
28
+ ngOnChanges(changes) {
29
+ if (changes['config'] || changes['groupLabels']) {
30
+ this.loadGroups();
31
+ }
32
+ }
33
+ onSearch() {
34
+ this.filterGroups();
35
+ }
36
+ toggleGroup(group) {
37
+ group.expanded = !group.expanded;
38
+ }
39
+ onSelectEntity(entity) {
40
+ this.selectEntity.emit(entity);
41
+ }
42
+ onDoubleClick(entity) {
43
+ this.doubleClickEntity.emit(entity);
44
+ }
45
+ isSelected(entity) {
46
+ return this.selectedEntity?.key === entity.key;
47
+ }
48
+ trackByCode(_index, group) {
49
+ return group.code;
50
+ }
51
+ trackByKey(_index, entity) {
52
+ return entity.key;
53
+ }
54
+ loadGroups() {
55
+ this.groups = this.entitySchema.getEntityGroups(this.config, this.groupLabels).map(g => ({
56
+ ...g,
57
+ expanded: true,
58
+ }));
59
+ this.filterGroups();
60
+ }
61
+ filterGroups() {
62
+ const term = this.searchTerm.toLowerCase().trim();
63
+ if (!term) {
64
+ this.filteredGroups = this.groups;
65
+ return;
66
+ }
67
+ this.filteredGroups = this.groups
68
+ .map(group => ({
69
+ ...group,
70
+ expanded: true,
71
+ entities: group.entities.filter(e => e.name.toLowerCase().includes(term) || e.key.toLowerCase().includes(term)),
72
+ }))
73
+ .filter(g => g.entities.length > 0);
74
+ }
75
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ObjectBrowserComponent, deps: [{ token: i1.EntitySchemaService }], target: i0.ɵɵFactoryTarget.Component });
76
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ObjectBrowserComponent, isStandalone: true, selector: "tgm-object-browser", inputs: { config: "config", selectedEntity: "selectedEntity", searchPlaceholder: "searchPlaceholder", groupLabels: "groupLabels", entityTemplate: "entityTemplate", groupTemplate: "groupTemplate" }, outputs: { selectEntity: "selectEntity", doubleClickEntity: "doubleClickEntity" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tgm-object-browser\">\n <!-- Search -->\n <div class=\"tgm-object-browser__search\">\n <input\n type=\"text\"\n class=\"tgm-object-browser__input\"\n [placeholder]=\"searchPlaceholder\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearch()\"\n />\n </div>\n\n <!-- Tree -->\n <div class=\"tgm-object-browser__tree\">\n <ng-container *ngFor=\"let group of filteredGroups; trackBy: trackByCode\">\n <!-- Custom group template -->\n <ng-container *ngIf=\"groupTemplate; else defaultGroup\">\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: group }\"></ng-container>\n </ng-container>\n\n <ng-template #defaultGroup>\n <div class=\"tgm-object-browser__group\">\n <div\n class=\"tgm-object-browser__group-header\"\n (click)=\"toggleGroup(group)\"\n >\n <span class=\"tgm-object-browser__arrow\" [class.tgm-object-browser__arrow--expanded]=\"group.expanded\">\n &#9654;\n </span>\n <span class=\"tgm-object-browser__group-label\">{{ group.label }}</span>\n <span class=\"tgm-object-browser__group-count\">{{ group.entities.length }}</span>\n </div>\n\n <div class=\"tgm-object-browser__entities\" *ngIf=\"group.expanded\">\n <ng-container *ngFor=\"let entity of group.entities; trackBy: trackByKey\">\n <!-- Custom entity template -->\n <ng-container *ngIf=\"entityTemplate; else defaultEntity\">\n <ng-container *ngTemplateOutlet=\"entityTemplate; context: { $implicit: entity }\"></ng-container>\n </ng-container>\n\n <ng-template #defaultEntity>\n <div\n class=\"tgm-object-browser__entity\"\n [class.tgm-object-browser__entity--selected]=\"isSelected(entity)\"\n (click)=\"onSelectEntity(entity)\"\n (dblclick)=\"onDoubleClick(entity)\"\n [title]=\"entity.description || entity.name\"\n >\n <span class=\"tgm-object-browser__entity-icon\">&#9635;</span>\n <span class=\"tgm-object-browser__entity-name\">{{ entity.name }}</span>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Empty state -->\n <div class=\"tgm-object-browser__empty\" *ngIf=\"filteredGroups.length === 0\">\n <p>No entities found.</p>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;overflow:hidden}.tgm-object-browser{display:flex;flex-direction:column;height:100%}.tgm-object-browser__search{padding:var(--tgm-db-spacing-sm, 8px);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-object-browser__input{width:100%;padding:6px 10px;background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05));border:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));border-radius:var(--tgm-db-radius-sm, 4px);color:var(--tgm-db-text, #e5e7eb);font-size:13px;font-family:var(--tgm-db-font-family, inherit);outline:none;box-sizing:border-box}.tgm-object-browser__input::placeholder{color:var(--tgm-db-text-muted, #6b7280)}.tgm-object-browser__input:focus{border-color:var(--tgm-db-primary, #3b82f6)}.tgm-object-browser__tree{flex:1;overflow-y:auto;padding:var(--tgm-db-spacing-sm, 8px) 0}.tgm-object-browser__group{margin-bottom:2px}.tgm-object-browser__group-header{display:flex;align-items:center;gap:6px;padding:4px var(--tgm-db-spacing-sm, 8px);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;font-weight:600;color:var(--tgm-db-text-secondary, #9ca3af);text-transform:uppercase;letter-spacing:.5px}.tgm-object-browser__group-header:hover{color:var(--tgm-db-text, #e5e7eb)}.tgm-object-browser__arrow{font-size:8px;transition:transform .15s;display:inline-block}.tgm-object-browser__arrow--expanded{transform:rotate(90deg)}.tgm-object-browser__group-label{flex:1}.tgm-object-browser__group-count{font-size:11px;color:var(--tgm-db-text-muted, #6b7280);font-weight:400}.tgm-object-browser__entities{padding-left:8px}.tgm-object-browser__entity{display:flex;align-items:center;gap:6px;padding:4px 8px 4px 16px;cursor:pointer;font-size:13px;color:var(--tgm-db-text, #e5e7eb);border-radius:var(--tgm-db-radius-sm, 4px);transition:background .1s}.tgm-object-browser__entity:hover{background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08))}.tgm-object-browser__entity--selected{background:var(--tgm-db-bg-active, rgba(59, 130, 246, .15));color:var(--tgm-db-primary, #3b82f6)}.tgm-object-browser__entity-icon{font-size:12px;opacity:.6}.tgm-object-browser__entity-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tgm-object-browser__empty{display:flex;align-items:center;justify-content:center;padding:24px;color:var(--tgm-db-text-muted, #6b7280);font-size:13px}.tgm-object-browser__empty p{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ObjectBrowserComponent, decorators: [{
79
+ type: Component,
80
+ args: [{ selector: 'tgm-object-browser', standalone: true, imports: [CommonModule, FormsModule], template: "<div class=\"tgm-object-browser\">\n <!-- Search -->\n <div class=\"tgm-object-browser__search\">\n <input\n type=\"text\"\n class=\"tgm-object-browser__input\"\n [placeholder]=\"searchPlaceholder\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"onSearch()\"\n />\n </div>\n\n <!-- Tree -->\n <div class=\"tgm-object-browser__tree\">\n <ng-container *ngFor=\"let group of filteredGroups; trackBy: trackByCode\">\n <!-- Custom group template -->\n <ng-container *ngIf=\"groupTemplate; else defaultGroup\">\n <ng-container *ngTemplateOutlet=\"groupTemplate; context: { $implicit: group }\"></ng-container>\n </ng-container>\n\n <ng-template #defaultGroup>\n <div class=\"tgm-object-browser__group\">\n <div\n class=\"tgm-object-browser__group-header\"\n (click)=\"toggleGroup(group)\"\n >\n <span class=\"tgm-object-browser__arrow\" [class.tgm-object-browser__arrow--expanded]=\"group.expanded\">\n &#9654;\n </span>\n <span class=\"tgm-object-browser__group-label\">{{ group.label }}</span>\n <span class=\"tgm-object-browser__group-count\">{{ group.entities.length }}</span>\n </div>\n\n <div class=\"tgm-object-browser__entities\" *ngIf=\"group.expanded\">\n <ng-container *ngFor=\"let entity of group.entities; trackBy: trackByKey\">\n <!-- Custom entity template -->\n <ng-container *ngIf=\"entityTemplate; else defaultEntity\">\n <ng-container *ngTemplateOutlet=\"entityTemplate; context: { $implicit: entity }\"></ng-container>\n </ng-container>\n\n <ng-template #defaultEntity>\n <div\n class=\"tgm-object-browser__entity\"\n [class.tgm-object-browser__entity--selected]=\"isSelected(entity)\"\n (click)=\"onSelectEntity(entity)\"\n (dblclick)=\"onDoubleClick(entity)\"\n [title]=\"entity.description || entity.name\"\n >\n <span class=\"tgm-object-browser__entity-icon\">&#9635;</span>\n <span class=\"tgm-object-browser__entity-name\">{{ entity.name }}</span>\n </div>\n </ng-template>\n </ng-container>\n </div>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Empty state -->\n <div class=\"tgm-object-browser__empty\" *ngIf=\"filteredGroups.length === 0\">\n <p>No entities found.</p>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;overflow:hidden}.tgm-object-browser{display:flex;flex-direction:column;height:100%}.tgm-object-browser__search{padding:var(--tgm-db-spacing-sm, 8px);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-object-browser__input{width:100%;padding:6px 10px;background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05));border:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));border-radius:var(--tgm-db-radius-sm, 4px);color:var(--tgm-db-text, #e5e7eb);font-size:13px;font-family:var(--tgm-db-font-family, inherit);outline:none;box-sizing:border-box}.tgm-object-browser__input::placeholder{color:var(--tgm-db-text-muted, #6b7280)}.tgm-object-browser__input:focus{border-color:var(--tgm-db-primary, #3b82f6)}.tgm-object-browser__tree{flex:1;overflow-y:auto;padding:var(--tgm-db-spacing-sm, 8px) 0}.tgm-object-browser__group{margin-bottom:2px}.tgm-object-browser__group-header{display:flex;align-items:center;gap:6px;padding:4px var(--tgm-db-spacing-sm, 8px);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;font-weight:600;color:var(--tgm-db-text-secondary, #9ca3af);text-transform:uppercase;letter-spacing:.5px}.tgm-object-browser__group-header:hover{color:var(--tgm-db-text, #e5e7eb)}.tgm-object-browser__arrow{font-size:8px;transition:transform .15s;display:inline-block}.tgm-object-browser__arrow--expanded{transform:rotate(90deg)}.tgm-object-browser__group-label{flex:1}.tgm-object-browser__group-count{font-size:11px;color:var(--tgm-db-text-muted, #6b7280);font-weight:400}.tgm-object-browser__entities{padding-left:8px}.tgm-object-browser__entity{display:flex;align-items:center;gap:6px;padding:4px 8px 4px 16px;cursor:pointer;font-size:13px;color:var(--tgm-db-text, #e5e7eb);border-radius:var(--tgm-db-radius-sm, 4px);transition:background .1s}.tgm-object-browser__entity:hover{background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08))}.tgm-object-browser__entity--selected{background:var(--tgm-db-bg-active, rgba(59, 130, 246, .15));color:var(--tgm-db-primary, #3b82f6)}.tgm-object-browser__entity-icon{font-size:12px;opacity:.6}.tgm-object-browser__entity-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tgm-object-browser__empty{display:flex;align-items:center;justify-content:center;padding:24px;color:var(--tgm-db-text-muted, #6b7280);font-size:13px}.tgm-object-browser__empty p{margin:0}\n"] }]
81
+ }], ctorParameters: () => [{ type: i1.EntitySchemaService }], propDecorators: { config: [{
82
+ type: Input
83
+ }], selectedEntity: [{
84
+ type: Input
85
+ }], searchPlaceholder: [{
86
+ type: Input
87
+ }], groupLabels: [{
88
+ type: Input
89
+ }], entityTemplate: [{
90
+ type: Input
91
+ }], groupTemplate: [{
92
+ type: Input
93
+ }], selectEntity: [{
94
+ type: Output
95
+ }], doubleClickEntity: [{
96
+ type: Output
97
+ }] } });
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWJyb3dzZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvb2JqZWN0LWJyb3dzZXIvb2JqZWN0LWJyb3dzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvb2JqZWN0LWJyb3dzZXIvb2JqZWN0LWJyb3dzZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVc3QyxNQUFNLE9BQU8sc0JBQXNCO0lBcUJiO0lBcEJwQixhQUFhO0lBQ0osTUFBTSxDQUF5QjtJQUMvQixjQUFjLENBQXVCO0lBRTlDLGVBQWU7SUFDTixpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQztJQUN6QyxXQUFXLENBQTBCO0lBRTlDLHlCQUF5QjtJQUNoQixjQUFjLENBQW1EO0lBQ2pFLGFBQWEsQ0FBaUQ7SUFFdkUsZUFBZTtJQUNMLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUN2RCxpQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztJQUV0RSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLE1BQU0sR0FBd0IsRUFBRSxDQUFDO0lBQ2pDLGNBQWMsR0FBd0IsRUFBRSxDQUFDO0lBRXpDLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtJQUFHLENBQUM7SUFFekQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxD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QTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFbnRpdHlSZWdpc3RyeUVudHJ5LCBFbnRpdHlNb2R1bGVHcm91cCwgRGF0YWJhc2VNYW5hZ2VyQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvZGF0YWJhc2UtbWFuYWdlci50eXBlcyc7XG5pbXBvcnQgeyBFbnRpdHlTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZW50aXR5LXNjaGVtYS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGdtLW9iamVjdC1icm93c2VyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vb2JqZWN0LWJyb3dzZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vYmplY3QtYnJvd3Nlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RCcm93c2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLy8g4pSA4pSAIERhdGEg4pSA4pSAXG4gIEBJbnB1dCgpIGNvbmZpZz86IERhdGFiYXNlTWFuYWdlckNvbmZpZztcbiAgQElucHV0KCkgc2VsZWN0ZWRFbnRpdHk/OiBFbnRpdHlSZWdpc3RyeUVudHJ5O1xuXG4gIC8vIOKUgOKUgCBMYWJlbHMg4pSA4pSAXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyID0gJ1NlYXJjaCBlbnRpdGllcy4uLic7XG4gIEBJbnB1dCgpIGdyb3VwTGFiZWxzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvLyDilIDilIAgQ3VzdG9tIHRlbXBsYXRlcyDilIDilIBcbiAgQElucHV0KCkgZW50aXR5VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogRW50aXR5UmVnaXN0cnlFbnRyeSB9PjtcbiAgQElucHV0KCkgZ3JvdXBUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgJGltcGxpY2l0OiBFbnRpdHlNb2R1bGVHcm91cCB9PjtcblxuICAvLyDilIDilIAgRXZlbnRzIOKUgOKUgFxuICBAT3V0cHV0KCkgc2VsZWN0RW50aXR5ID0gbmV3IEV2ZW50RW1pdHRlcjxFbnRpdHlSZWdpc3RyeUVudHJ5PigpO1xuICBAT3V0cHV0KCkgZG91YmxlQ2xpY2tFbnRpdHkgPSBuZXcgRXZlbnRFbWl0dGVyPEVudGl0eVJlZ2lzdHJ5RW50cnk+KCk7XG5cbiAgc2VhcmNoVGVybSA9ICcnO1xuICBncm91cHM6IEVudGl0eU1vZHVsZUdyb3VwW10gPSBbXTtcbiAgZmlsdGVyZWRHcm91cHM6IEVudGl0eU1vZHVsZUdyb3VwW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVudGl0eVNjaGVtYTogRW50aXR5U2NoZW1hU2VydmljZSkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZyddIHx8IGNoYW5nZXNbJ2dyb3VwTGFiZWxzJ10pIHtcbiAgICAgIHRoaXMubG9hZEdyb3VwcygpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyR3JvdXBzKCk7XG4gIH1cblxuICB0b2dnbGVHcm91cChncm91cDogRW50aXR5TW9kdWxlR3JvdXApOiB2b2lkIHtcbiAgICBncm91cC5leHBhbmRlZCA9ICFncm91cC5leHBhbmRlZDtcbiAgfVxuXG4gIG9uU2VsZWN0RW50aXR5KGVudGl0eTogRW50aXR5UmVnaXN0cnlFbnRyeSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0RW50aXR5LmVtaXQoZW50aXR5KTtcbiAgfVxuXG4gIG9uRG91YmxlQ2xpY2soZW50aXR5OiBFbnRpdHlSZWdpc3RyeUVudHJ5KTogdm9pZCB7XG4gICAgdGhpcy5kb3VibGVDbGlja0VudGl0eS5lbWl0KGVudGl0eSk7XG4gIH1cblxuICBpc1NlbGVjdGVkKGVudGl0eTogRW50aXR5UmVnaXN0cnlFbnRyeSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRW50aXR5Py5rZXkgPT09IGVudGl0eS5rZXk7XG4gIH1cblxuICB0cmFja0J5Q29kZShfaW5kZXg6IG51bWJlciwgZ3JvdXA6IEVudGl0eU1vZHVsZUdyb3VwKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ3JvdXAuY29kZTtcbiAgfVxuXG4gIHRyYWNrQnlLZXkoX2luZGV4OiBudW1iZXIsIGVudGl0eTogRW50aXR5UmVnaXN0cnlFbnRyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVudGl0eS5rZXk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRHcm91cHMoKTogdm9pZCB7XG4gICAgdGhpcy5ncm91cHMgPSB0aGlzLmVudGl0eVNjaGVtYS5nZXRFbnRpdHlHcm91cHModGhpcy5jb25maWcsIHRoaXMuZ3JvdXBMYWJlbHMpLm1hcChnID0+ICh7XG4gICAgICAuLi5nLFxuICAgICAgZXhwYW5kZWQ6IHRydWUsXG4gICAgfSkpO1xuICAgIHRoaXMuZmlsdGVyR3JvdXBzKCk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckdyb3VwcygpOiB2b2lkIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy5zZWFyY2hUZXJtLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghdGVybSkge1xuICAgICAgdGhpcy5maWx0ZXJlZEdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZmlsdGVyZWRHcm91cHMgPSB0aGlzLmdyb3Vwc1xuICAgICAgLm1hcChncm91cCA9PiAoe1xuICAgICAgICAuLi5ncm91cCxcbiAgICAgICAgZXhwYW5kZWQ6IHRydWUsXG4gICAgICAgIGVudGl0aWVzOiBncm91cC5lbnRpdGllcy5maWx0ZXIoXG4gICAgICAgICAgZSA9PiBlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSB8fCBlLmtleS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxuICAgICAgICApLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKGcgPT4gZy5lbnRpdGllcy5sZW5ndGggPiAwKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRnbS1vYmplY3QtYnJvd3NlclwiPlxuICA8IS0tIFNlYXJjaCAtLT5cbiAgPGRpdiBjbGFzcz1cInRnbS1vYmplY3QtYnJvd3Nlcl9fc2VhcmNoXCI+XG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBjbGFzcz1cInRnbS1vYmplY3QtYnJvd3Nlcl9faW5wdXRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaCgpXCJcbiAgICAvPlxuICA8L2Rpdj5cblxuICA8IS0tIFRyZWUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0Z20tb2JqZWN0LWJyb3dzZXJfX3RyZWVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBmaWx0ZXJlZEdyb3VwczsgdHJhY2tCeTogdHJhY2tCeUNvZGVcIj5cbiAgICAgIDwhLS0gQ3VzdG9tIGdyb3VwIHRlbXBsYXRlIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwVGVtcGxhdGU7IGVsc2UgZGVmYXVsdEdyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogZ3JvdXAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEdyb3VwPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGdtLW9iamVjdC1icm93c2VyX19ncm91cFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidGdtLW9iamVjdC1icm93c2VyX19ncm91cC1oZWFkZXJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUdyb3VwKGdyb3VwKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tb2JqZWN0LWJyb3dzZXJfX2Fycm93XCIgW2NsYXNzLnRnbS1vYmplY3QtYnJvd3Nlcl9fYXJyb3ctLWV4cGFuZGVkXT1cImdyb3VwLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICYjOTY1NDtcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGdtLW9iamVjdC1icm93c2VyX19ncm91cC1sYWJlbFwiPnt7IGdyb3VwLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tb2JqZWN0LWJyb3dzZXJfX2dyb3VwLWNvdW50XCI+e3sgZ3JvdXAuZW50aXRpZXMubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1vYmplY3QtYnJvd3Nlcl9fZW50aXRpZXNcIiAqbmdJZj1cImdyb3VwLmV4cGFuZGVkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbnRpdHkgb2YgZ3JvdXAuZW50aXRpZXM7IHRyYWNrQnk6IHRyYWNrQnlLZXlcIj5cbiAgICAgICAgICAgICAgPCEtLSBDdXN0b20gZW50aXR5IHRlbXBsYXRlIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW50aXR5VGVtcGxhdGU7IGVsc2UgZGVmYXVsdEVudGl0eVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbnRpdHlUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGVudGl0eSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVudGl0eT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRnbS1vYmplY3QtYnJvd3Nlcl9fZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy50Z20tb2JqZWN0LWJyb3dzZXJfX2VudGl0eS0tc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChlbnRpdHkpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdEVudGl0eShlbnRpdHkpXCJcbiAgICAgICAgICAgICAgICAgIChkYmxjbGljayk9XCJvbkRvdWJsZUNsaWNrKGVudGl0eSlcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImVudGl0eS5kZXNjcmlwdGlvbiB8fCBlbnRpdHkubmFtZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tb2JqZWN0LWJyb3dzZXJfX2VudGl0eS1pY29uXCI+JiM5NjM1Ozwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGdtLW9iamVjdC1icm93c2VyX19lbnRpdHktbmFtZVwiPnt7IGVudGl0eS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRW1wdHkgc3RhdGUgLS0+XG4gICAgPGRpdiBjbGFzcz1cInRnbS1vYmplY3QtYnJvd3Nlcl9fZW1wdHlcIiAqbmdJZj1cImZpbHRlcmVkR3JvdXBzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgPHA+Tm8gZW50aXRpZXMgZm91bmQuPC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,196 @@
1
+ import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { ENTITY_REGISTRY } from '../registry/entity-registry';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class QueryEditorComponent {
8
+ // ── Data ──
9
+ value = '';
10
+ entitySchema;
11
+ enableMonaco = true;
12
+ monacoOptions;
13
+ // ── Labels ──
14
+ placeholder = '{ "entity": "inspections", "filters": { "status": "PENDING" }, "sort": "createdAt", "order": "DESC" }';
15
+ editorClass = '';
16
+ // ── Events ──
17
+ valueChange = new EventEmitter();
18
+ execute = new EventEmitter();
19
+ monacoContainer;
20
+ textareaEl;
21
+ monacoAvailable = false;
22
+ monacoEditor = null;
23
+ completionDisposable = null;
24
+ ngOnInit() {
25
+ this.monacoAvailable = this.enableMonaco && typeof monaco !== 'undefined';
26
+ }
27
+ ngOnChanges(changes) {
28
+ if (changes['value'] && this.monacoEditor) {
29
+ const currentVal = this.monacoEditor.getValue();
30
+ if (currentVal !== this.value) {
31
+ this.monacoEditor.setValue(this.value);
32
+ }
33
+ }
34
+ }
35
+ ngOnDestroy() {
36
+ this.completionDisposable?.dispose();
37
+ this.monacoEditor?.dispose();
38
+ }
39
+ onMonacoInit() {
40
+ if (!this.monacoAvailable || !this.monacoContainer)
41
+ return;
42
+ const defaultOptions = {
43
+ value: this.value,
44
+ language: 'json',
45
+ theme: 'vs-dark',
46
+ minimap: { enabled: false },
47
+ lineNumbers: 'on',
48
+ scrollBeyondLastLine: false,
49
+ automaticLayout: true,
50
+ fontSize: 14,
51
+ fontFamily: 'var(--tgm-db-font-mono)',
52
+ tabSize: 2,
53
+ wordWrap: 'on',
54
+ padding: { top: 8 },
55
+ };
56
+ const opts = { ...defaultOptions, ...this.monacoOptions };
57
+ try {
58
+ this.monacoEditor = monaco.editor.create(this.monacoContainer.nativeElement, opts);
59
+ // Listen for changes
60
+ this.monacoEditor.onDidChangeModelContent(() => {
61
+ const val = this.monacoEditor.getValue();
62
+ this.value = val;
63
+ this.valueChange.emit(val);
64
+ });
65
+ // Ctrl+Enter → execute
66
+ this.monacoEditor.addCommand(monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter, () => this.execute.emit(this.monacoEditor.getValue()));
67
+ // Register auto-completion
68
+ this.registerCompletionProvider();
69
+ }
70
+ catch {
71
+ this.monacoAvailable = false;
72
+ }
73
+ }
74
+ onTextareaInput(event) {
75
+ const val = event.target.value;
76
+ this.value = val;
77
+ this.valueChange.emit(val);
78
+ }
79
+ onTextareaKeydown(event) {
80
+ if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {
81
+ event.preventDefault();
82
+ this.execute.emit(this.value);
83
+ }
84
+ }
85
+ /**
86
+ * Called after view init if Monaco is available.
87
+ */
88
+ ngAfterViewInit() {
89
+ if (this.monacoAvailable) {
90
+ // Small delay to ensure the container is rendered
91
+ setTimeout(() => this.onMonacoInit(), 50);
92
+ }
93
+ }
94
+ registerCompletionProvider() {
95
+ if (!monaco?.languages)
96
+ return;
97
+ this.completionDisposable = monaco.languages.registerCompletionItemProvider('json', {
98
+ provideCompletionItems: (model, position) => {
99
+ const textUntilPosition = model.getValueInRange({
100
+ startLineNumber: 1,
101
+ startColumn: 1,
102
+ endLineNumber: position.lineNumber,
103
+ endColumn: position.column,
104
+ });
105
+ const suggestions = [];
106
+ const word = model.getWordUntilPosition(position);
107
+ const range = {
108
+ startLineNumber: position.lineNumber,
109
+ endLineNumber: position.lineNumber,
110
+ startColumn: word.startColumn,
111
+ endColumn: word.endColumn,
112
+ };
113
+ // Suggest entity names after "entity":
114
+ if (/"entity"\s*:\s*"[^"]*$/.test(textUntilPosition)) {
115
+ for (const entry of ENTITY_REGISTRY) {
116
+ suggestions.push({
117
+ label: entry.key,
118
+ kind: monaco.languages.CompletionItemKind.Value,
119
+ insertText: entry.key,
120
+ detail: entry.name,
121
+ documentation: entry.description,
122
+ range,
123
+ });
124
+ }
125
+ }
126
+ // Suggest top-level keys
127
+ else if (/{\s*("[^"]*"\s*:\s*[^,]*,\s*)*"?[^"]*$/.test(textUntilPosition) && !/"filters"\s*:\s*\{/.test(textUntilPosition.slice(-100))) {
128
+ const keys = ['entity', 'select', 'filters', 'sort', 'order', 'page', 'pageSize'];
129
+ for (const key of keys) {
130
+ suggestions.push({
131
+ label: key,
132
+ kind: monaco.languages.CompletionItemKind.Property,
133
+ insertText: `"${key}"`,
134
+ range,
135
+ });
136
+ }
137
+ }
138
+ // Suggest sort order values
139
+ else if (/"order"\s*:\s*"[^"]*$/.test(textUntilPosition)) {
140
+ for (const val of ['ASC', 'DESC']) {
141
+ suggestions.push({
142
+ label: val,
143
+ kind: monaco.languages.CompletionItemKind.Value,
144
+ insertText: val,
145
+ range,
146
+ });
147
+ }
148
+ }
149
+ // Suggest field names for filters/sort
150
+ else if (this.entitySchema) {
151
+ const fields = this.entitySchema.fields;
152
+ for (const field of fields) {
153
+ suggestions.push({
154
+ label: field.name,
155
+ kind: monaco.languages.CompletionItemKind.Field,
156
+ insertText: field.type === 'enum' || field.type === 'string' ? `"${field.name}"` : `"${field.name}"`,
157
+ detail: `${field.type}${field.enumValues ? ` (${field.enumValues.length} values)` : ''}`,
158
+ documentation: field.description || field.label,
159
+ range,
160
+ });
161
+ }
162
+ }
163
+ return { suggestions };
164
+ },
165
+ });
166
+ }
167
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QueryEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
168
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: QueryEditorComponent, isStandalone: true, selector: "tgm-query-editor", inputs: { value: "value", entitySchema: "entitySchema", enableMonaco: "enableMonaco", monacoOptions: "monacoOptions", placeholder: "placeholder", editorClass: "editorClass" }, outputs: { valueChange: "valueChange", execute: "execute" }, viewQueries: [{ propertyName: "monacoContainer", first: true, predicate: ["monacoContainer"], descendants: true }, { propertyName: "textareaEl", first: true, predicate: ["textareaEl"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"tgm-query-editor\" [ngClass]=\"editorClass\">\n <!-- Monaco Editor -->\n <div\n *ngIf=\"monacoAvailable\"\n #monacoContainer\n class=\"tgm-query-editor__monaco\"\n ></div>\n\n <!-- Textarea Fallback -->\n <textarea\n *ngIf=\"!monacoAvailable\"\n #textareaEl\n class=\"tgm-query-editor__textarea\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (input)=\"onTextareaInput($event)\"\n (keydown)=\"onTextareaKeydown($event)\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n ></textarea>\n\n <div class=\"tgm-query-editor__hint\">\n Press <kbd>Ctrl</kbd>+<kbd>Enter</kbd> to execute\n </div>\n</div>\n", styles: [":host{display:block}.tgm-query-editor{position:relative;display:flex;flex-direction:column;height:var(--tgm-db-editor-height, 200px);background:var(--tgm-db-bg, #1e1e2e);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-query-editor__monaco{flex:1;min-height:0}.tgm-query-editor__textarea{flex:1;width:100%;padding:12px;background:var(--tgm-db-bg, #1e1e2e);border:none;color:var(--tgm-db-text, #e5e7eb);font-family:var(--tgm-db-font-mono, monospace);font-size:var(--tgm-db-font-size, 14px);line-height:1.6;resize:none;outline:none;box-sizing:border-box;overflow-y:auto}.tgm-query-editor__textarea::placeholder{color:var(--tgm-db-text-muted, #6b7280)}.tgm-query-editor__hint{position:absolute;bottom:4px;right:8px;font-size:11px;color:var(--tgm-db-text-muted, #6b7280);pointer-events:none}.tgm-query-editor__hint kbd{display:inline-block;padding:1px 4px;font-size:10px;font-family:var(--tgm-db-font-mono, monospace);background:#ffffff14;border:1px solid rgba(255,255,255,.15);border-radius:3px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }] });
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QueryEditorComponent, decorators: [{
171
+ type: Component,
172
+ args: [{ selector: 'tgm-query-editor', standalone: true, imports: [CommonModule, FormsModule], template: "<div class=\"tgm-query-editor\" [ngClass]=\"editorClass\">\n <!-- Monaco Editor -->\n <div\n *ngIf=\"monacoAvailable\"\n #monacoContainer\n class=\"tgm-query-editor__monaco\"\n ></div>\n\n <!-- Textarea Fallback -->\n <textarea\n *ngIf=\"!monacoAvailable\"\n #textareaEl\n class=\"tgm-query-editor__textarea\"\n [value]=\"value\"\n [placeholder]=\"placeholder\"\n (input)=\"onTextareaInput($event)\"\n (keydown)=\"onTextareaKeydown($event)\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n ></textarea>\n\n <div class=\"tgm-query-editor__hint\">\n Press <kbd>Ctrl</kbd>+<kbd>Enter</kbd> to execute\n </div>\n</div>\n", styles: [":host{display:block}.tgm-query-editor{position:relative;display:flex;flex-direction:column;height:var(--tgm-db-editor-height, 200px);background:var(--tgm-db-bg, #1e1e2e);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-query-editor__monaco{flex:1;min-height:0}.tgm-query-editor__textarea{flex:1;width:100%;padding:12px;background:var(--tgm-db-bg, #1e1e2e);border:none;color:var(--tgm-db-text, #e5e7eb);font-family:var(--tgm-db-font-mono, monospace);font-size:var(--tgm-db-font-size, 14px);line-height:1.6;resize:none;outline:none;box-sizing:border-box;overflow-y:auto}.tgm-query-editor__textarea::placeholder{color:var(--tgm-db-text-muted, #6b7280)}.tgm-query-editor__hint{position:absolute;bottom:4px;right:8px;font-size:11px;color:var(--tgm-db-text-muted, #6b7280);pointer-events:none}.tgm-query-editor__hint kbd{display:inline-block;padding:1px 4px;font-size:10px;font-family:var(--tgm-db-font-mono, monospace);background:#ffffff14;border:1px solid rgba(255,255,255,.15);border-radius:3px}\n"] }]
173
+ }], propDecorators: { value: [{
174
+ type: Input
175
+ }], entitySchema: [{
176
+ type: Input
177
+ }], enableMonaco: [{
178
+ type: Input
179
+ }], monacoOptions: [{
180
+ type: Input
181
+ }], placeholder: [{
182
+ type: Input
183
+ }], editorClass: [{
184
+ type: Input
185
+ }], valueChange: [{
186
+ type: Output
187
+ }], execute: [{
188
+ type: Output
189
+ }], monacoContainer: [{
190
+ type: ViewChild,
191
+ args: ['monacoContainer', { static: false }]
192
+ }], textareaEl: [{
193
+ type: ViewChild,
194
+ args: ['textareaEl', { static: false }]
195
+ }] } });
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXRhYmFzZS1tYW5hZ2VyL3F1ZXJ5LWVkaXRvci9xdWVyeS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvcXVlcnktZWRpdG9yL3F1ZXJ5LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7O0FBVzlELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsYUFBYTtJQUNKLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxZQUFZLENBQXVCO0lBQ25DLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDcEIsYUFBYSxDQUFPO0lBRTdCLGVBQWU7SUFDTixXQUFXLEdBQUcsdUdBQXVHLENBQUM7SUFDdEgsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUUxQixlQUFlO0lBQ0wsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFDekMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFRSxlQUFlLENBQWM7SUFDbEMsVUFBVSxDQUFjO0lBRXBFLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDaEIsWUFBWSxHQUFRLElBQUksQ0FBQztJQUN6QixvQkFBb0IsR0FBUSxJQUFJLENBQUM7SUFFekMsUUFBUTtRQUNOLElBQUksQ0FB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O3lCQUNOLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXJMVSxvQkFBb0I7NEZBQXBCLG9CQUFvQiw2aEJDM0JqQyx5cEJBeUJBLHFqQ0RGWSxZQUFZLGdPQUFFLFdBQVc7OzRGQUl4QixvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0Usa0JBQWtCLGNBQ2hCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7OEJBTTNCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUUwQyxlQUFlO3NCQUEvRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDSCxVQUFVO3NCQUFyRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEVudGl0eVJlZ2lzdHJ5RW50cnkgfSBmcm9tICcuLi90eXBlcy9kYXRhYmFzZS1tYW5hZ2VyLnR5cGVzJztcbmltcG9ydCB7IEVOVElUWV9SRUdJU1RSWSB9IGZyb20gJy4uL3JlZ2lzdHJ5L2VudGl0eS1yZWdpc3RyeSc7XG5cbmRlY2xhcmUgY29uc3QgbW9uYWNvOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RnbS1xdWVyeS1lZGl0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWVyeS1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVlcnlFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgLy8g4pSA4pSAIERhdGEg4pSA4pSAXG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIEBJbnB1dCgpIGVudGl0eVNjaGVtYT86IEVudGl0eVJlZ2lzdHJ5RW50cnk7XG4gIEBJbnB1dCgpIGVuYWJsZU1vbmFjbyA9IHRydWU7XG4gIEBJbnB1dCgpIG1vbmFjb09wdGlvbnM/OiBhbnk7XG5cbiAgLy8g4pSA4pSAIExhYmVscyDilIDilIBcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAneyBcImVudGl0eVwiOiBcImluc3BlY3Rpb25zXCIsIFwiZmlsdGVyc1wiOiB7IFwic3RhdHVzXCI6IFwiUEVORElOR1wiIH0sIFwic29ydFwiOiBcImNyZWF0ZWRBdFwiLCBcIm9yZGVyXCI6IFwiREVTQ1wiIH0nO1xuICBASW5wdXQoKSBlZGl0b3JDbGFzcyA9ICcnO1xuXG4gIC8vIOKUgOKUgCBFdmVudHMg4pSA4pSAXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgZXhlY3V0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ21vbmFjb0NvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSB9KSBtb25hY29Db250YWluZXI/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCd0ZXh0YXJlYUVsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHRleHRhcmVhRWw/OiBFbGVtZW50UmVmO1xuXG4gIG1vbmFjb0F2YWlsYWJsZSA9IGZhbHNlO1xuICBwcml2YXRlIG1vbmFjb0VkaXRvcjogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBjb21wbGV0aW9uRGlzcG9zYWJsZTogYW55ID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm1vbmFjb0F2YWlsYWJsZSA9IHRoaXMuZW5hYmxlTW9uYWNvICYmIHR5cGVvZiBtb25hY28gIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddICYmIHRoaXMubW9uYWNvRWRpdG9yKSB7XG4gICAgICBjb25zdCBjdXJyZW50VmFsID0gdGhpcy5tb25hY29FZGl0b3IuZ2V0VmFsdWUoKTtcbiAgICAgIGlmIChjdXJyZW50VmFsICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHRoaXMubW9uYWNvRWRpdG9yLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29tcGxldGlvbkRpc3Bvc2FibGU/LmRpc3Bvc2UoKTtcbiAgICB0aGlzLm1vbmFjb0VkaXRvcj8uZGlzcG9zZSgpO1xuICB9XG5cbiAgb25Nb25hY29Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb25hY29BdmFpbGFibGUgfHwgIXRoaXMubW9uYWNvQ29udGFpbmVyKSByZXR1cm47XG5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgbGFuZ3VhZ2U6ICdqc29uJyxcbiAgICAgIHRoZW1lOiAndnMtZGFyaycsXG4gICAgICBtaW5pbWFwOiB7IGVuYWJsZWQ6IGZhbHNlIH0sXG4gICAgICBsaW5lTnVtYmVyczogJ29uJyBhcyBjb25zdCxcbiAgICAgIHNjcm9sbEJleW9uZExhc3RMaW5lOiBmYWxzZSxcbiAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSxcbiAgICAgIGZvbnRTaXplOiAxNCxcbiAgICAgIGZvbnRGYW1pbHk6ICd2YXIoLS10Z20tZGItZm9udC1tb25vKScsXG4gICAgICB0YWJTaXplOiAyLFxuICAgICAgd29yZFdyYXA6ICdvbicgYXMgY29uc3QsXG4gICAgICBwYWRkaW5nOiB7IHRvcDogOCB9LFxuICAgIH07XG5cbiAgICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4udGhpcy5tb25hY29PcHRpb25zIH07XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5tb25hY29FZGl0b3IgPSBtb25hY28uZWRpdG9yLmNyZWF0ZSh0aGlzLm1vbmFjb0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBvcHRzKTtcblxuICAgICAgLy8gTGlzdGVuIGZvciBjaGFuZ2VzXG4gICAgICB0aGlzLm1vbmFjb0VkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMubW9uYWNvRWRpdG9yLmdldFZhbHVlKCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWwpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEN0cmwrRW50ZXIg4oaSIGV4ZWN1dGVcbiAgICAgIHRoaXMubW9uYWNvRWRpdG9yLmFkZENvbW1hbmQoXG4gICAgICAgIG1vbmFjby5LZXlNb2QuQ3RybENtZCB8IG1vbmFjby5LZXlDb2RlLkVudGVyLFxuICAgICAgICAoKSA9PiB0aGlzLmV4ZWN1dGUuZW1pdCh0aGlzLm1vbmFjb0VkaXRvci5nZXRWYWx1ZSgpKSxcbiAgICAgICk7XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGF1dG8tY29tcGxldGlvblxuICAgICAgdGhpcy5yZWdpc3RlckNvbXBsZXRpb25Qcm92aWRlcigpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5tb25hY29BdmFpbGFibGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvblRleHRhcmVhSW5wdXQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdmFsID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50KS52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWwpO1xuICB9XG5cbiAgb25UZXh0YXJlYUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5leGVjdXRlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciB2aWV3IGluaXQgaWYgTW9uYWNvIGlzIGF2YWlsYWJsZS5cbiAgICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb25hY29BdmFpbGFibGUpIHtcbiAgICAgIC8vIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSB0aGUgY29udGFpbmVyIGlzIHJlbmRlcmVkXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub25Nb25hY29Jbml0KCksIDUwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ29tcGxldGlvblByb3ZpZGVyKCk6IHZvaWQge1xuICAgIGlmICghbW9uYWNvPy5sYW5ndWFnZXMpIHJldHVybjtcblxuICAgIHRoaXMuY29tcGxldGlvbkRpc3Bvc2FibGUgPSBtb25hY28ubGFuZ3VhZ2VzLnJlZ2lzdGVyQ29tcGxldGlvbkl0ZW1Qcm92aWRlcignanNvbicsIHtcbiAgICAgIHByb3ZpZGVDb21wbGV0aW9uSXRlbXM6IChtb2RlbDogYW55LCBwb3NpdGlvbjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHRleHRVbnRpbFBvc2l0aW9uID0gbW9kZWwuZ2V0VmFsdWVJblJhbmdlKHtcbiAgICAgICAgICBzdGFydExpbmVOdW1iZXI6IDEsXG4gICAgICAgICAgc3RhcnRDb2x1bW46IDEsXG4gICAgICAgICAgZW5kTGluZU51bWJlcjogcG9zaXRpb24ubGluZU51bWJlcixcbiAgICAgICAgICBlbmRDb2x1bW46IHBvc2l0aW9uLmNvbHVtbixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IHdvcmQgPSBtb2RlbC5nZXRXb3JkVW50aWxQb3NpdGlvbihwb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHJhbmdlID0ge1xuICAgICAgICAgIHN0YXJ0TGluZU51bWJlcjogcG9zaXRpb24ubGluZU51bWJlcixcbiAgICAgICAgICBlbmRMaW5lTnVtYmVyOiBwb3NpdGlvbi5saW5lTnVtYmVyLFxuICAgICAgICAgIHN0YXJ0Q29sdW1uOiB3b3JkLnN0YXJ0Q29sdW1uLFxuICAgICAgICAgIGVuZENvbHVtbjogd29yZC5lbmRDb2x1bW4sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU3VnZ2VzdCBlbnRpdHkgbmFtZXMgYWZ0ZXIgXCJlbnRpdHlcIjpcbiAgICAgICAgaWYgKC9cImVudGl0eVwiXFxzKjpcXHMqXCJbXlwiXSokLy50ZXN0KHRleHRVbnRpbFBvc2l0aW9uKSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgRU5USVRZX1JFR0lTVFJZKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgbGFiZWw6IGVudHJ5LmtleSxcbiAgICAgICAgICAgICAga2luZDogbW9uYWNvLmxhbmd1YWdlcy5Db21wbGV0aW9uSXRlbUtpbmQuVmFsdWUsXG4gICAgICAgICAgICAgIGluc2VydFRleHQ6IGVudHJ5LmtleSxcbiAgICAgICAgICAgICAgZGV0YWlsOiBlbnRyeS5uYW1lLFxuICAgICAgICAgICAgICBkb2N1bWVudGF0aW9uOiBlbnRyeS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3VnZ2VzdCB0b3AtbGV2ZWwga2V5c1xuICAgICAgICBlbHNlIGlmICgve1xccyooXCJbXlwiXSpcIlxccyo6XFxzKlteLF0qLFxccyopKlwiP1teXCJdKiQvLnRlc3QodGV4dFVudGlsUG9zaXRpb24pICYmICEvXCJmaWx0ZXJzXCJcXHMqOlxccypcXHsvLnRlc3QodGV4dFVudGlsUG9zaXRpb24uc2xpY2UoLTEwMCkpKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IFsnZW50aXR5JywgJ3NlbGVjdCcsICdmaWx0ZXJzJywgJ3NvcnQnLCAnb3JkZXInLCAncGFnZScsICdwYWdlU2l6ZSddO1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICBsYWJlbDoga2V5LFxuICAgICAgICAgICAgICBraW5kOiBtb25hY28ubGFuZ3VhZ2VzLkNvbXBsZXRpb25JdGVtS2luZC5Qcm9wZXJ0eSxcbiAgICAgICAgICAgICAgaW5zZXJ0VGV4dDogYFwiJHtrZXl9XCJgLFxuICAgICAgICAgICAgICByYW5nZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTdWdnZXN0IHNvcnQgb3JkZXIgdmFsdWVzXG4gICAgICAgIGVsc2UgaWYgKC9cIm9yZGVyXCJcXHMqOlxccypcIlteXCJdKiQvLnRlc3QodGV4dFVudGlsUG9zaXRpb24pKSB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgWydBU0MnLCAnREVTQyddKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgbGFiZWw6IHZhbCxcbiAgICAgICAgICAgICAga2luZDogbW9uYWNvLmxhbmd1YWdlcy5Db21wbGV0aW9uSXRlbUtpbmQuVmFsdWUsXG4gICAgICAgICAgICAgIGluc2VydFRleHQ6IHZhbCxcbiAgICAgICAgICAgICAgcmFuZ2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3VnZ2VzdCBmaWVsZCBuYW1lcyBmb3IgZmlsdGVycy9zb3J0XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZW50aXR5U2NoZW1hKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5lbnRpdHlTY2hlbWEuZmllbGRzO1xuICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICBzdWdnZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgbGFiZWw6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgICAgIGtpbmQ6IG1vbmFjby5sYW5ndWFnZXMuQ29tcGxldGlvbkl0ZW1LaW5kLkZpZWxkLFxuICAgICAgICAgICAgICBpbnNlcnRUZXh0OiBmaWVsZC50eXBlID09PSAnZW51bScgfHwgZmllbGQudHlwZSA9PT0gJ3N0cmluZycgPyBgXCIke2ZpZWxkLm5hbWV9XCJgIDogYFwiJHtmaWVsZC5uYW1lfVwiYCxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgJHtmaWVsZC50eXBlfSR7ZmllbGQuZW51bVZhbHVlcyA/IGAgKCR7ZmllbGQuZW51bVZhbHVlcy5sZW5ndGh9IHZhbHVlcylgIDogJyd9YCxcbiAgICAgICAgICAgICAgZG9jdW1lbnRhdGlvbjogZmllbGQuZGVzY3JpcHRpb24gfHwgZmllbGQubGFiZWwsXG4gICAgICAgICAgICAgIHJhbmdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgc3VnZ2VzdGlvbnMgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0Z20tcXVlcnktZWRpdG9yXCIgW25nQ2xhc3NdPVwiZWRpdG9yQ2xhc3NcIj5cbiAgPCEtLSBNb25hY28gRWRpdG9yIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCJtb25hY29BdmFpbGFibGVcIlxuICAgICNtb25hY29Db250YWluZXJcbiAgICBjbGFzcz1cInRnbS1xdWVyeS1lZGl0b3JfX21vbmFjb1wiXG4gID48L2Rpdj5cblxuICA8IS0tIFRleHRhcmVhIEZhbGxiYWNrIC0tPlxuICA8dGV4dGFyZWFcbiAgICAqbmdJZj1cIiFtb25hY29BdmFpbGFibGVcIlxuICAgICN0ZXh0YXJlYUVsXG4gICAgY2xhc3M9XCJ0Z20tcXVlcnktZWRpdG9yX190ZXh0YXJlYVwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIChpbnB1dCk9XCJvblRleHRhcmVhSW5wdXQoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwib25UZXh0YXJlYUtleWRvd24oJGV2ZW50KVwiXG4gICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICA+PC90ZXh0YXJlYT5cblxuICA8ZGl2IGNsYXNzPVwidGdtLXF1ZXJ5LWVkaXRvcl9faGludFwiPlxuICAgIFByZXNzIDxrYmQ+Q3RybDwva2JkPis8a2JkPkVudGVyPC9rYmQ+IHRvIGV4ZWN1dGVcbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,70 @@
1
+ import { Component, EventEmitter, Input, Output, } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class QueryToolbarComponent {
6
+ // ── State ──
7
+ executing = false;
8
+ disabled = false;
9
+ showHistory = true;
10
+ showFormat = true;
11
+ // ── Labels ──
12
+ executeLabel = 'Execute';
13
+ formatLabel = 'Format';
14
+ clearLabel = 'Clear';
15
+ historyLabel = 'History';
16
+ // ── Custom templates ──
17
+ toolbarTemplate;
18
+ // ── Events ──
19
+ execute = new EventEmitter();
20
+ format = new EventEmitter();
21
+ clear = new EventEmitter();
22
+ toggleHistory = new EventEmitter();
23
+ onExecute() {
24
+ if (!this.executing && !this.disabled) {
25
+ this.execute.emit();
26
+ }
27
+ }
28
+ onFormat() {
29
+ this.format.emit();
30
+ }
31
+ onClear() {
32
+ this.clear.emit();
33
+ }
34
+ onToggleHistory() {
35
+ this.toggleHistory.emit();
36
+ }
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QueryToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: QueryToolbarComponent, isStandalone: true, selector: "tgm-query-toolbar", inputs: { executing: "executing", disabled: "disabled", showHistory: "showHistory", showFormat: "showFormat", executeLabel: "executeLabel", formatLabel: "formatLabel", clearLabel: "clearLabel", historyLabel: "historyLabel", toolbarTemplate: "toolbarTemplate" }, outputs: { execute: "execute", format: "format", clear: "clear", toggleHistory: "toggleHistory" }, ngImport: i0, template: "<div class=\"tgm-query-toolbar\">\n <ng-container *ngIf=\"toolbarTemplate; else defaultToolbar\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n\n <ng-template #defaultToolbar>\n <div class=\"tgm-query-toolbar__left\">\n <button\n class=\"tgm-db-btn tgm-db-btn--primary\"\n [disabled]=\"executing || disabled\"\n (click)=\"onExecute()\"\n >\n <span class=\"tgm-db-btn__icon\" *ngIf=\"!executing\">&#9654;</span>\n <span class=\"tgm-db-spinner--sm\" *ngIf=\"executing\"></span>\n {{ executeLabel }}\n </button>\n\n <button\n *ngIf=\"showFormat\"\n class=\"tgm-db-btn tgm-db-btn--ghost\"\n [disabled]=\"disabled\"\n (click)=\"onFormat()\"\n >\n {{ formatLabel }}\n </button>\n\n <button\n class=\"tgm-db-btn tgm-db-btn--ghost\"\n [disabled]=\"disabled\"\n (click)=\"onClear()\"\n >\n {{ clearLabel }}\n </button>\n </div>\n\n <div class=\"tgm-query-toolbar__right\">\n <button\n *ngIf=\"showHistory\"\n class=\"tgm-db-btn tgm-db-btn--ghost\"\n (click)=\"onToggleHistory()\"\n >\n {{ historyLabel }}\n </button>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:block}.tgm-query-toolbar{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm, 8px);background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05));border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-query-toolbar__left,.tgm-query-toolbar__right{display:flex;align-items:center;gap:6px}.tgm-db-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:5px 12px;font-size:13px;font-weight:500;border:none;border-radius:var(--tgm-db-radius-sm, 4px);cursor:pointer;transition:background .15s,opacity .15s;font-family:var(--tgm-db-font-family, inherit);white-space:nowrap}.tgm-db-btn--primary{background:var(--tgm-db-primary, #3b82f6);color:#fff}.tgm-db-btn--primary:hover:not(:disabled){background:var(--tgm-db-primary-hover, #2563eb)}.tgm-db-btn--ghost{background:transparent;color:var(--tgm-db-text-secondary, #9ca3af)}.tgm-db-btn--ghost:hover:not(:disabled){background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08));color:var(--tgm-db-text, #e5e7eb)}.tgm-db-btn:disabled{opacity:.5;cursor:not-allowed}.tgm-db-btn__icon{font-size:10px}.tgm-db-spinner--sm{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:tgm-db-spin .6s linear infinite}@keyframes tgm-db-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QueryToolbarComponent, decorators: [{
41
+ type: Component,
42
+ args: [{ selector: 'tgm-query-toolbar', standalone: true, imports: [CommonModule], template: "<div class=\"tgm-query-toolbar\">\n <ng-container *ngIf=\"toolbarTemplate; else defaultToolbar\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n\n <ng-template #defaultToolbar>\n <div class=\"tgm-query-toolbar__left\">\n <button\n class=\"tgm-db-btn tgm-db-btn--primary\"\n [disabled]=\"executing || disabled\"\n (click)=\"onExecute()\"\n >\n <span class=\"tgm-db-btn__icon\" *ngIf=\"!executing\">&#9654;</span>\n <span class=\"tgm-db-spinner--sm\" *ngIf=\"executing\"></span>\n {{ executeLabel }}\n </button>\n\n <button\n *ngIf=\"showFormat\"\n class=\"tgm-db-btn tgm-db-btn--ghost\"\n [disabled]=\"disabled\"\n (click)=\"onFormat()\"\n >\n {{ formatLabel }}\n </button>\n\n <button\n class=\"tgm-db-btn tgm-db-btn--ghost\"\n [disabled]=\"disabled\"\n (click)=\"onClear()\"\n >\n {{ clearLabel }}\n </button>\n </div>\n\n <div class=\"tgm-query-toolbar__right\">\n <button\n *ngIf=\"showHistory\"\n class=\"tgm-db-btn tgm-db-btn--ghost\"\n (click)=\"onToggleHistory()\"\n >\n {{ historyLabel }}\n </button>\n </div>\n </ng-template>\n</div>\n", styles: [":host{display:block}.tgm-query-toolbar{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm, 8px);background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05));border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-query-toolbar__left,.tgm-query-toolbar__right{display:flex;align-items:center;gap:6px}.tgm-db-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:5px 12px;font-size:13px;font-weight:500;border:none;border-radius:var(--tgm-db-radius-sm, 4px);cursor:pointer;transition:background .15s,opacity .15s;font-family:var(--tgm-db-font-family, inherit);white-space:nowrap}.tgm-db-btn--primary{background:var(--tgm-db-primary, #3b82f6);color:#fff}.tgm-db-btn--primary:hover:not(:disabled){background:var(--tgm-db-primary-hover, #2563eb)}.tgm-db-btn--ghost{background:transparent;color:var(--tgm-db-text-secondary, #9ca3af)}.tgm-db-btn--ghost:hover:not(:disabled){background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08));color:var(--tgm-db-text, #e5e7eb)}.tgm-db-btn:disabled{opacity:.5;cursor:not-allowed}.tgm-db-btn__icon{font-size:10px}.tgm-db-spinner--sm{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:tgm-db-spin .6s linear infinite}@keyframes tgm-db-spin{to{transform:rotate(360deg)}}\n"] }]
43
+ }], propDecorators: { executing: [{
44
+ type: Input
45
+ }], disabled: [{
46
+ type: Input
47
+ }], showHistory: [{
48
+ type: Input
49
+ }], showFormat: [{
50
+ type: Input
51
+ }], executeLabel: [{
52
+ type: Input
53
+ }], formatLabel: [{
54
+ type: Input
55
+ }], clearLabel: [{
56
+ type: Input
57
+ }], historyLabel: [{
58
+ type: Input
59
+ }], toolbarTemplate: [{
60
+ type: Input
61
+ }], execute: [{
62
+ type: Output
63
+ }], format: [{
64
+ type: Output
65
+ }], clear: [{
66
+ type: Output
67
+ }], toggleHistory: [{
68
+ type: Output
69
+ }] } });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWJhc2UtbWFuYWdlci9xdWVyeS10b29sYmFyL3F1ZXJ5LXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvcXVlcnktdG9vbGJhci9xdWVyeS10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFTL0MsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxjQUFjO0lBQ0wsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNsQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDbkIsVUFBVSxHQUFHLElBQUksQ0FBQztJQUUzQixlQUFlO0lBQ04sWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUN6QixXQUFXLEdBQUcsUUFBUSxDQUFDO0lBQ3ZCLFVBQVUsR0FBRyxPQUFPLENBQUM7SUFDckIsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUVsQyx5QkFBeUI7SUFDaEIsZUFBZSxDQUFxQjtJQUU3QyxlQUFlO0lBQ0wsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDbkMsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDbEMsS0FBSyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFDakMsYUFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFbkQsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBdENVLHFCQUFxQjs0RkFBckIscUJBQXFCLHNiQ2hCbEMscXhDQThDQSx5NUNEbENZLFlBQVk7OzRGQUlYLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDOzhCQU1kLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdJLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RnbS1xdWVyeS10b29sYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWVyeS10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcXVlcnktdG9vbGJhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVyeVRvb2xiYXJDb21wb25lbnQge1xuICAvLyDilIDilIAgU3RhdGUg4pSA4pSAXG4gIEBJbnB1dCgpIGV4ZWN1dGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93SGlzdG9yeSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dGb3JtYXQgPSB0cnVlO1xuXG4gIC8vIOKUgOKUgCBMYWJlbHMg4pSA4pSAXG4gIEBJbnB1dCgpIGV4ZWN1dGVMYWJlbCA9ICdFeGVjdXRlJztcbiAgQElucHV0KCkgZm9ybWF0TGFiZWwgPSAnRm9ybWF0JztcbiAgQElucHV0KCkgY2xlYXJMYWJlbCA9ICdDbGVhcic7XG4gIEBJbnB1dCgpIGhpc3RvcnlMYWJlbCA9ICdIaXN0b3J5JztcblxuICAvLyDilIDilIAgQ3VzdG9tIHRlbXBsYXRlcyDilIDilIBcbiAgQElucHV0KCkgdG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgLy8g4pSA4pSAIEV2ZW50cyDilIDilIBcbiAgQE91dHB1dCgpIGV4ZWN1dGUgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBmb3JtYXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjbGVhciA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHRvZ2dsZUhpc3RvcnkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgb25FeGVjdXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5leGVjdXRpbmcgJiYgIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZXhlY3V0ZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb3JtYXQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtYXQuZW1pdCgpO1xuICB9XG5cbiAgb25DbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyLmVtaXQoKTtcbiAgfVxuXG4gIG9uVG9nZ2xlSGlzdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvZ2dsZUhpc3RvcnkuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGdtLXF1ZXJ5LXRvb2xiYXJcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRvb2xiYXJUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0VG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPVwidGdtLXF1ZXJ5LXRvb2xiYXJfX2xlZnRcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJ0Z20tZGItYnRuIHRnbS1kYi1idG4tLXByaW1hcnlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZXhlY3V0aW5nIHx8IGRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uRXhlY3V0ZSgpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tZGItYnRuX19pY29uXCIgKm5nSWY9XCIhZXhlY3V0aW5nXCI+JiM5NjU0Ozwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tZGItc3Bpbm5lci0tc21cIiAqbmdJZj1cImV4ZWN1dGluZ1wiPjwvc3Bhbj5cbiAgICAgICAge3sgZXhlY3V0ZUxhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dGb3JtYXRcIlxuICAgICAgICBjbGFzcz1cInRnbS1kYi1idG4gdGdtLWRiLWJ0bi0tZ2hvc3RcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib25Gb3JtYXQoKVwiXG4gICAgICA+XG4gICAgICAgIHt7IGZvcm1hdExhYmVsIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInRnbS1kYi1idG4gdGdtLWRiLWJ0bi0tZ2hvc3RcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoY2xpY2spPVwib25DbGVhcigpXCJcbiAgICAgID5cbiAgICAgICAge3sgY2xlYXJMYWJlbCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGdtLXF1ZXJ5LXRvb2xiYXJfX3JpZ2h0XCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd0hpc3RvcnlcIlxuICAgICAgICBjbGFzcz1cInRnbS1kYi1idG4gdGdtLWRiLWJ0bi0tZ2hvc3RcIlxuICAgICAgICAoY2xpY2spPVwib25Ub2dnbGVIaXN0b3J5KClcIlxuICAgICAgPlxuICAgICAgICB7eyBoaXN0b3J5TGFiZWwgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=