@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.
- package/LICENSE +19 -0
- package/README.md +788 -0
- package/esm2022/en-solutions-tgm-client-sdk.mjs +5 -0
- package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs +308 -0
- package/esm2022/lib/components/database-manager/database-manager.module.mjs +66 -0
- package/esm2022/lib/components/database-manager/object-browser/object-browser.component.mjs +98 -0
- package/esm2022/lib/components/database-manager/query-editor/query-editor.component.mjs +196 -0
- package/esm2022/lib/components/database-manager/query-toolbar/query-toolbar.component.mjs +70 -0
- package/esm2022/lib/components/database-manager/record-detail/record-detail.component.mjs +112 -0
- package/esm2022/lib/components/database-manager/registry/entity-registry.mjs +512 -0
- package/esm2022/lib/components/database-manager/results-grid/results-grid.component.mjs +165 -0
- package/esm2022/lib/components/database-manager/services/entity-schema.service.mjs +91 -0
- package/esm2022/lib/components/database-manager/services/query-executor.service.mjs +204 -0
- package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs +166 -0
- package/esm2022/lib/components/database-manager/table-structure/table-structure.component.mjs +42 -0
- package/esm2022/lib/components/database-manager/types/database-manager.types.mjs +6 -0
- package/esm2022/lib/components/reporting/export-button/export-button.component.mjs +203 -0
- package/esm2022/lib/components/reporting/generated-report-list/generated-report-list.component.mjs +285 -0
- package/esm2022/lib/components/reporting/report-definition-form/report-definition-form.component.mjs +206 -0
- package/esm2022/lib/components/reporting/report-definition-list/report-definition-list.component.mjs +252 -0
- package/esm2022/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.mjs +122 -0
- package/esm2022/lib/components/reporting/report-stats/report-stats.component.mjs +164 -0
- package/esm2022/lib/components/reporting/report-template-list/report-template-list.component.mjs +114 -0
- package/esm2022/lib/components/reporting/reporting.module.mjs +60 -0
- package/esm2022/lib/components/video-call/incoming-call/incoming-call.component.mjs +80 -0
- package/esm2022/lib/components/video-call/services/livekit-room.service.mjs +142 -0
- package/esm2022/lib/components/video-call/services/video-call-signaling.service.mjs +42 -0
- package/esm2022/lib/components/video-call/services/video-call-state.service.mjs +52 -0
- package/esm2022/lib/components/video-call/types/video-call.types.mjs +2 -0
- package/esm2022/lib/components/video-call/video-call.module.mjs +42 -0
- package/esm2022/lib/components/video-call/video-controls/video-controls.component.mjs +33 -0
- package/esm2022/lib/components/video-call/video-participant/video-participant.component.mjs +68 -0
- package/esm2022/lib/components/video-call/video-room/video-room.component.mjs +89 -0
- package/esm2022/lib/core/auth-interceptor.mjs +33 -0
- package/esm2022/lib/core/client-interceptor.mjs +34 -0
- package/esm2022/lib/core/error-handler.mjs +32 -0
- package/esm2022/lib/core/http-client.service.mjs +254 -0
- package/esm2022/lib/core/websocket.service.mjs +185 -0
- package/esm2022/lib/models/admin/audit.models.mjs +2 -0
- package/esm2022/lib/models/admin/backup.models.mjs +2 -0
- package/esm2022/lib/models/admin/client.models.mjs +2 -0
- package/esm2022/lib/models/admin/email-provider.models.mjs +2 -0
- package/esm2022/lib/models/admin/erp.models.mjs +2 -0
- package/esm2022/lib/models/admin/identity-provider.models.mjs +2 -0
- package/esm2022/lib/models/admin/index.mjs +14 -0
- package/esm2022/lib/models/admin/messaging-provider.models.mjs +2 -0
- package/esm2022/lib/models/admin/platform-admin.models.mjs +2 -0
- package/esm2022/lib/models/admin/queue.models.mjs +2 -0
- package/esm2022/lib/models/admin/role.models.mjs +2 -0
- package/esm2022/lib/models/admin/sandbox.models.mjs +2 -0
- package/esm2022/lib/models/admin/ticket.models.mjs +2 -0
- package/esm2022/lib/models/admin/webhook.models.mjs +2 -0
- package/esm2022/lib/models/api/ai.models.mjs +2 -0
- package/esm2022/lib/models/api/aip.models.mjs +2 -0
- package/esm2022/lib/models/api/cat.models.mjs +2 -0
- package/esm2022/lib/models/api/company.models.mjs +2 -0
- package/esm2022/lib/models/api/compliance.models.mjs +2 -0
- package/esm2022/lib/models/api/component.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-edge.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-event.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-insight.models.mjs +2 -0
- package/esm2022/lib/models/api/cortex-node.models.mjs +2 -0
- package/esm2022/lib/models/api/custom-field.models.mjs +2 -0
- package/esm2022/lib/models/api/deferral.models.mjs +2 -0
- package/esm2022/lib/models/api/diagnostic-report.models.mjs +2 -0
- package/esm2022/lib/models/api/document.models.mjs +2 -0
- package/esm2022/lib/models/api/energy.models.mjs +2 -0
- package/esm2022/lib/models/api/failure.models.mjs +2 -0
- package/esm2022/lib/models/api/fleet.models.mjs +2 -0
- package/esm2022/lib/models/api/inspection.models.mjs +2 -0
- package/esm2022/lib/models/api/intervention.models.mjs +2 -0
- package/esm2022/lib/models/api/iot.models.mjs +2 -0
- package/esm2022/lib/models/api/knowledge.models.mjs +2 -0
- package/esm2022/lib/models/api/loto.models.mjs +2 -0
- package/esm2022/lib/models/api/maintenance-record.models.mjs +2 -0
- package/esm2022/lib/models/api/maintenance.models.mjs +2 -0
- package/esm2022/lib/models/api/material.models.mjs +2 -0
- package/esm2022/lib/models/api/media.models.mjs +2 -0
- package/esm2022/lib/models/api/misc.models.mjs +2 -0
- package/esm2022/lib/models/api/project.models.mjs +2 -0
- package/esm2022/lib/models/api/quality.models.mjs +2 -0
- package/esm2022/lib/models/api/reporting.models.mjs +3 -0
- package/esm2022/lib/models/api/reservoir-websocket.models.mjs +17 -0
- package/esm2022/lib/models/api/reservoir.models.mjs +2 -0
- package/esm2022/lib/models/api/search.models.mjs +2 -0
- package/esm2022/lib/models/api/sensor.models.mjs +2 -0
- package/esm2022/lib/models/api/unit.models.mjs +2 -0
- package/esm2022/lib/models/api/user.models.mjs +2 -0
- package/esm2022/lib/models/api/warranty.models.mjs +2 -0
- package/esm2022/lib/models/api/work-permit.models.mjs +2 -0
- package/esm2022/lib/models/api/workflow.models.mjs +2 -0
- package/esm2022/lib/models/auth/index.mjs +4 -0
- package/esm2022/lib/models/auth/login.models.mjs +2 -0
- package/esm2022/lib/models/auth/sso.models.mjs +2 -0
- package/esm2022/lib/models/auth/totp.models.mjs +2 -0
- package/esm2022/lib/models/base.models.mjs +99 -0
- package/esm2022/lib/models/chat/chat.models.mjs +2 -0
- package/esm2022/lib/models/enums/cat.enums.mjs +17 -0
- package/esm2022/lib/models/enums/energy.enums.mjs +8 -0
- package/esm2022/lib/models/enums/erp.enums.mjs +5 -0
- package/esm2022/lib/models/enums/index.mjs +15 -0
- package/esm2022/lib/models/enums/inspection.enums.mjs +7 -0
- package/esm2022/lib/models/enums/loto.enums.mjs +25 -0
- package/esm2022/lib/models/enums/misc.enums.mjs +19 -0
- package/esm2022/lib/models/enums/quality.enums.mjs +22 -0
- package/esm2022/lib/models/enums/reservoir.enums.mjs +13 -0
- package/esm2022/lib/models/enums/sso.enums.mjs +3 -0
- package/esm2022/lib/models/enums/status.enums.mjs +41 -0
- package/esm2022/lib/models/enums/time.enums.mjs +5 -0
- package/esm2022/lib/models/enums/type.enums.mjs +45 -0
- package/esm2022/lib/models/enums/user.enums.mjs +6 -0
- package/esm2022/lib/models/enums/work-permit.enums.mjs +33 -0
- package/esm2022/lib/models/index.mjs +42 -0
- package/esm2022/lib/models/realtime/realtime-event.models.mjs +9 -0
- package/esm2022/lib/models/video/video-call.models.mjs +2 -0
- package/esm2022/lib/services/admin/activity-log.service.mjs +28 -0
- package/esm2022/lib/services/admin/announcement.service.mjs +37 -0
- package/esm2022/lib/services/admin/article-admin.service.mjs +37 -0
- package/esm2022/lib/services/admin/audit-log.service.mjs +53 -0
- package/esm2022/lib/services/admin/backup.service.mjs +28 -0
- package/esm2022/lib/services/admin/cache-admin.service.mjs +64 -0
- package/esm2022/lib/services/admin/client-admin.service.mjs +101 -0
- package/esm2022/lib/services/admin/client-api-key.service.mjs +31 -0
- package/esm2022/lib/services/admin/client-ocr.service.mjs +28 -0
- package/esm2022/lib/services/admin/client-usage.service.mjs +31 -0
- package/esm2022/lib/services/admin/data-export.service.mjs +19 -0
- package/esm2022/lib/services/admin/document-admin.service.mjs +40 -0
- package/esm2022/lib/services/admin/email-admin.service.mjs +28 -0
- package/esm2022/lib/services/admin/email-provider.service.mjs +58 -0
- package/esm2022/lib/services/admin/erp-admin.service.mjs +111 -0
- package/esm2022/lib/services/admin/identity-provider.service.mjs +46 -0
- package/esm2022/lib/services/admin/impersonation.service.mjs +19 -0
- package/esm2022/lib/services/admin/index.mjs +31 -0
- package/esm2022/lib/services/admin/messaging-provider.service.mjs +55 -0
- package/esm2022/lib/services/admin/notification.service.mjs +31 -0
- package/esm2022/lib/services/admin/platform-admin.service.mjs +34 -0
- package/esm2022/lib/services/admin/platform-webhook.service.mjs +34 -0
- package/esm2022/lib/services/admin/queue-admin.service.mjs +55 -0
- package/esm2022/lib/services/admin/role-admin.service.mjs +81 -0
- package/esm2022/lib/services/admin/sandbox-admin.service.mjs +34 -0
- package/esm2022/lib/services/admin/scheduler-admin.service.mjs +34 -0
- package/esm2022/lib/services/admin/subscription.service.mjs +28 -0
- package/esm2022/lib/services/admin/system-health.service.mjs +22 -0
- package/esm2022/lib/services/admin/user-admin.service.mjs +67 -0
- package/esm2022/lib/services/admin/user-permission.service.mjs +40 -0
- package/esm2022/lib/services/admin/webhook-admin.service.mjs +61 -0
- package/esm2022/lib/services/api/agent.service.mjs +29 -0
- package/esm2022/lib/services/api/ai-feedback.service.mjs +17 -0
- package/esm2022/lib/services/api/ai.service.mjs +66 -0
- package/esm2022/lib/services/api/aip-analysis.service.mjs +20 -0
- package/esm2022/lib/services/api/aip-financial.service.mjs +29 -0
- package/esm2022/lib/services/api/aip-geographic.service.mjs +30 -0
- package/esm2022/lib/services/api/aip-network.service.mjs +29 -0
- package/esm2022/lib/services/api/aip-performance.service.mjs +29 -0
- package/esm2022/lib/services/api/aip-resource.service.mjs +23 -0
- package/esm2022/lib/services/api/aip-workflow.service.mjs +32 -0
- package/esm2022/lib/services/api/aip.service.mjs +158 -0
- package/esm2022/lib/services/api/alert.service.mjs +26 -0
- package/esm2022/lib/services/api/anomaly-detection.service.mjs +40 -0
- package/esm2022/lib/services/api/asset-lifecycle.service.mjs +78 -0
- package/esm2022/lib/services/api/audit-entry.service.mjs +22 -0
- package/esm2022/lib/services/api/base-crud.service.mjs +37 -0
- package/esm2022/lib/services/api/bid.service.mjs +17 -0
- package/esm2022/lib/services/api/budget.service.mjs +17 -0
- package/esm2022/lib/services/api/bulk-operation.service.mjs +65 -0
- package/esm2022/lib/services/api/capex-project.service.mjs +17 -0
- package/esm2022/lib/services/api/cat.service.mjs +77 -0
- package/esm2022/lib/services/api/client-article.service.mjs +23 -0
- package/esm2022/lib/services/api/community.service.mjs +41 -0
- package/esm2022/lib/services/api/company-material-type.service.mjs +17 -0
- package/esm2022/lib/services/api/company-material.service.mjs +17 -0
- package/esm2022/lib/services/api/company.service.mjs +30 -0
- package/esm2022/lib/services/api/compliance.service.mjs +74 -0
- package/esm2022/lib/services/api/component-info.service.mjs +17 -0
- package/esm2022/lib/services/api/component-location.service.mjs +17 -0
- package/esm2022/lib/services/api/component.service.mjs +53 -0
- package/esm2022/lib/services/api/cortex-event.service.mjs +17 -0
- package/esm2022/lib/services/api/cortex-insight.service.mjs +23 -0
- package/esm2022/lib/services/api/cortex-node.service.mjs +17 -0
- package/esm2022/lib/services/api/cortex.service.mjs +29 -0
- package/esm2022/lib/services/api/custom-field.service.mjs +70 -0
- package/esm2022/lib/services/api/custom.service.mjs +43 -0
- package/esm2022/lib/services/api/dashboard.service.mjs +44 -0
- package/esm2022/lib/services/api/deferral.service.mjs +54 -0
- package/esm2022/lib/services/api/department.service.mjs +17 -0
- package/esm2022/lib/services/api/device-gateway.service.mjs +33 -0
- package/esm2022/lib/services/api/diagnostic-report.service.mjs +23 -0
- package/esm2022/lib/services/api/digital-twin.service.mjs +56 -0
- package/esm2022/lib/services/api/document.service.mjs +53 -0
- package/esm2022/lib/services/api/dynamic-crud.service.mjs +67 -0
- package/esm2022/lib/services/api/energy-analytics.service.mjs +42 -0
- package/esm2022/lib/services/api/energy-production.service.mjs +17 -0
- package/esm2022/lib/services/api/energy.service.mjs +91 -0
- package/esm2022/lib/services/api/entity-comment.service.mjs +31 -0
- package/esm2022/lib/services/api/event.service.mjs +17 -0
- package/esm2022/lib/services/api/export.service.mjs +216 -0
- package/esm2022/lib/services/api/extension.service.mjs +56 -0
- package/esm2022/lib/services/api/failure.service.mjs +53 -0
- package/esm2022/lib/services/api/fleet.service.mjs +140 -0
- package/esm2022/lib/services/api/inactive-component.service.mjs +17 -0
- package/esm2022/lib/services/api/index.mjs +101 -0
- package/esm2022/lib/services/api/inspection.service.mjs +29 -0
- package/esm2022/lib/services/api/intervention-request.service.mjs +17 -0
- package/esm2022/lib/services/api/intervention.service.mjs +17 -0
- package/esm2022/lib/services/api/knowledge.service.mjs +209 -0
- package/esm2022/lib/services/api/license.service.mjs +25 -0
- package/esm2022/lib/services/api/location.service.mjs +17 -0
- package/esm2022/lib/services/api/log.service.mjs +17 -0
- package/esm2022/lib/services/api/login-history.service.mjs +17 -0
- package/esm2022/lib/services/api/maintenance-plan.service.mjs +17 -0
- package/esm2022/lib/services/api/maintenance-record.service.mjs +17 -0
- package/esm2022/lib/services/api/material-consumable.service.mjs +41 -0
- package/esm2022/lib/services/api/material-instrument.service.mjs +29 -0
- package/esm2022/lib/services/api/material-item.service.mjs +53 -0
- package/esm2022/lib/services/api/material-tooling.service.mjs +41 -0
- package/esm2022/lib/services/api/measurement-unit.service.mjs +17 -0
- package/esm2022/lib/services/api/misc-crud.service.mjs +329 -0
- package/esm2022/lib/services/api/note.service.mjs +37 -0
- package/esm2022/lib/services/api/outage-resource.service.mjs +28 -0
- package/esm2022/lib/services/api/plant-data.service.mjs +31 -0
- package/esm2022/lib/services/api/procurement.service.mjs +53 -0
- package/esm2022/lib/services/api/project.service.mjs +17 -0
- package/esm2022/lib/services/api/property-template.service.mjs +17 -0
- package/esm2022/lib/services/api/quality.service.mjs +29 -0
- package/esm2022/lib/services/api/recurring-event.service.mjs +17 -0
- package/esm2022/lib/services/api/reporting.service.mjs +117 -0
- package/esm2022/lib/services/api/reservoir-data.service.mjs +19 -0
- package/esm2022/lib/services/api/reservoir.service.mjs +209 -0
- package/esm2022/lib/services/api/room.service.mjs +17 -0
- package/esm2022/lib/services/api/sandbox.service.mjs +62 -0
- package/esm2022/lib/services/api/scheduled-report.service.mjs +17 -0
- package/esm2022/lib/services/api/search.service.mjs +77 -0
- package/esm2022/lib/services/api/sensor.service.mjs +36 -0
- package/esm2022/lib/services/api/sla-policy.service.mjs +17 -0
- package/esm2022/lib/services/api/sla.service.mjs +17 -0
- package/esm2022/lib/services/api/threshold-alert-rule.service.mjs +17 -0
- package/esm2022/lib/services/api/ticket.service.mjs +73 -0
- package/esm2022/lib/services/api/time-entry.service.mjs +17 -0
- package/esm2022/lib/services/api/todo.service.mjs +17 -0
- package/esm2022/lib/services/api/unit.service.mjs +17 -0
- package/esm2022/lib/services/api/upload.service.mjs +84 -0
- package/esm2022/lib/services/api/user.service.mjs +107 -0
- package/esm2022/lib/services/api/warehouse.service.mjs +29 -0
- package/esm2022/lib/services/api/warranty.service.mjs +29 -0
- package/esm2022/lib/services/api/work-order.service.mjs +28 -0
- package/esm2022/lib/services/api/work-permit.service.mjs +17 -0
- package/esm2022/lib/services/api/workflow.service.mjs +86 -0
- package/esm2022/lib/services/auth/auth.service.mjs +97 -0
- package/esm2022/lib/services/auth/index.mjs +5 -0
- package/esm2022/lib/services/auth/platform-auth.service.mjs +39 -0
- package/esm2022/lib/services/auth/sso-auth.service.mjs +46 -0
- package/esm2022/lib/services/auth/totp.service.mjs +34 -0
- package/esm2022/lib/services/chat/chat-rest.service.mjs +104 -0
- package/esm2022/lib/services/chat/chat-websocket.service.mjs +70 -0
- package/esm2022/lib/services/chat/index.mjs +3 -0
- package/esm2022/lib/services/index.mjs +8 -0
- package/esm2022/lib/services/realtime/index.mjs +2 -0
- package/esm2022/lib/services/realtime/realtime-event.service.mjs +187 -0
- package/esm2022/lib/services/reservoir/index.mjs +2 -0
- package/esm2022/lib/services/reservoir/reservoir-websocket.service.mjs +105 -0
- package/esm2022/lib/services/video/index.mjs +3 -0
- package/esm2022/lib/services/video/video-call-rest.service.mjs +42 -0
- package/esm2022/lib/services/video/video-call-websocket.service.mjs +55 -0
- package/esm2022/lib/tgm-sdk.config.mjs +32 -0
- package/esm2022/lib/tgm-sdk.module.mjs +38 -0
- package/esm2022/public-api.mjs +52 -0
- package/fesm2022/en-solutions-tgm-client-sdk.mjs +11029 -0
- package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/database-manager/database-manager/database-manager.component.d.ts +70 -0
- package/lib/components/database-manager/database-manager.module.d.ts +15 -0
- package/lib/components/database-manager/object-browser/object-browser.component.d.ts +35 -0
- package/lib/components/database-manager/query-editor/query-editor.component.d.ts +31 -0
- package/lib/components/database-manager/query-toolbar/query-toolbar.component.d.ts +23 -0
- package/lib/components/database-manager/record-detail/record-detail.component.d.ts +35 -0
- package/lib/components/database-manager/registry/entity-registry.d.ts +16 -0
- package/lib/components/database-manager/results-grid/results-grid.component.d.ts +62 -0
- package/lib/components/database-manager/services/entity-schema.service.d.ts +37 -0
- package/lib/components/database-manager/services/query-executor.service.d.ts +57 -0
- package/lib/components/database-manager/table-data-viewer/table-data-viewer.component.d.ts +54 -0
- package/lib/components/database-manager/table-structure/table-structure.component.d.ts +16 -0
- package/lib/components/database-manager/types/database-manager.types.d.ts +71 -0
- package/lib/components/reporting/export-button/export-button.component.d.ts +50 -0
- package/lib/components/reporting/generated-report-list/generated-report-list.component.d.ts +93 -0
- package/lib/components/reporting/report-definition-form/report-definition-form.component.d.ts +65 -0
- package/lib/components/reporting/report-definition-list/report-definition-list.component.d.ts +90 -0
- package/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.d.ts +46 -0
- package/lib/components/reporting/report-stats/report-stats.component.d.ts +47 -0
- package/lib/components/reporting/report-template-list/report-template-list.component.d.ts +39 -0
- package/lib/components/reporting/reporting.module.d.ts +14 -0
- package/lib/components/video-call/incoming-call/incoming-call.component.d.ts +20 -0
- package/lib/components/video-call/services/livekit-room.service.d.ts +28 -0
- package/lib/components/video-call/services/video-call-signaling.service.d.ts +21 -0
- package/lib/components/video-call/services/video-call-state.service.d.ts +25 -0
- package/lib/components/video-call/types/video-call.types.d.ts +49 -0
- package/lib/components/video-call/video-call.module.d.ts +11 -0
- package/lib/components/video-call/video-controls/video-controls.component.d.ts +13 -0
- package/lib/components/video-call/video-participant/video-participant.component.d.ts +17 -0
- package/lib/components/video-call/video-room/video-room.component.d.ts +30 -0
- package/lib/core/auth-interceptor.d.ts +13 -0
- package/lib/core/client-interceptor.d.ts +14 -0
- package/lib/core/error-handler.d.ts +13 -0
- package/lib/core/http-client.service.d.ts +61 -0
- package/lib/core/websocket.service.d.ts +37 -0
- package/lib/models/admin/audit.models.d.ts +73 -0
- package/lib/models/admin/backup.models.d.ts +101 -0
- package/lib/models/admin/client.models.d.ts +99 -0
- package/lib/models/admin/email-provider.models.d.ts +56 -0
- package/lib/models/admin/erp.models.d.ts +188 -0
- package/lib/models/admin/identity-provider.models.d.ts +1 -0
- package/lib/models/admin/index.d.ts +13 -0
- package/lib/models/admin/messaging-provider.models.d.ts +49 -0
- package/lib/models/admin/platform-admin.models.d.ts +33 -0
- package/lib/models/admin/queue.models.d.ts +54 -0
- package/lib/models/admin/role.models.d.ts +50 -0
- package/lib/models/admin/sandbox.models.d.ts +54 -0
- package/lib/models/admin/ticket.models.d.ts +48 -0
- package/lib/models/admin/webhook.models.d.ts +65 -0
- package/lib/models/api/ai.models.d.ts +75 -0
- package/lib/models/api/aip.models.d.ts +545 -0
- package/lib/models/api/cat.models.d.ts +260 -0
- package/lib/models/api/company.models.d.ts +125 -0
- package/lib/models/api/compliance.models.d.ts +74 -0
- package/lib/models/api/component.models.d.ts +294 -0
- package/lib/models/api/cortex-edge.models.d.ts +14 -0
- package/lib/models/api/cortex-event.models.d.ts +12 -0
- package/lib/models/api/cortex-insight.models.d.ts +25 -0
- package/lib/models/api/cortex-node.models.d.ts +10 -0
- package/lib/models/api/custom-field.models.d.ts +37 -0
- package/lib/models/api/deferral.models.d.ts +81 -0
- package/lib/models/api/diagnostic-report.models.d.ts +29 -0
- package/lib/models/api/document.models.d.ts +95 -0
- package/lib/models/api/energy.models.d.ts +210 -0
- package/lib/models/api/failure.models.d.ts +171 -0
- package/lib/models/api/fleet.models.d.ts +193 -0
- package/lib/models/api/inspection.models.d.ts +110 -0
- package/lib/models/api/intervention.models.d.ts +254 -0
- package/lib/models/api/iot.models.d.ts +15 -0
- package/lib/models/api/knowledge.models.d.ts +340 -0
- package/lib/models/api/loto.models.d.ts +51 -0
- package/lib/models/api/maintenance-record.models.d.ts +100 -0
- package/lib/models/api/maintenance.models.d.ts +188 -0
- package/lib/models/api/material.models.d.ts +261 -0
- package/lib/models/api/media.models.d.ts +106 -0
- package/lib/models/api/misc.models.d.ts +929 -0
- package/lib/models/api/project.models.d.ts +118 -0
- package/lib/models/api/quality.models.d.ts +153 -0
- package/lib/models/api/reporting.models.d.ts +76 -0
- package/lib/models/api/reservoir-websocket.models.d.ts +48 -0
- package/lib/models/api/reservoir.models.d.ts +274 -0
- package/lib/models/api/search.models.d.ts +30 -0
- package/lib/models/api/sensor.models.d.ts +117 -0
- package/lib/models/api/unit.models.d.ts +82 -0
- package/lib/models/api/user.models.d.ts +253 -0
- package/lib/models/api/warranty.models.d.ts +51 -0
- package/lib/models/api/work-permit.models.d.ts +70 -0
- package/lib/models/api/workflow.models.d.ts +52 -0
- package/lib/models/auth/index.d.ts +3 -0
- package/lib/models/auth/login.models.d.ts +134 -0
- package/lib/models/auth/sso.models.d.ts +136 -0
- package/lib/models/auth/totp.models.d.ts +19 -0
- package/lib/models/base.models.d.ts +90 -0
- package/lib/models/chat/chat.models.d.ts +171 -0
- package/lib/models/enums/cat.enums.d.ts +114 -0
- package/lib/models/enums/energy.enums.d.ts +50 -0
- package/lib/models/enums/erp.enums.d.ts +49 -0
- package/lib/models/enums/index.d.ts +14 -0
- package/lib/models/enums/inspection.enums.d.ts +61 -0
- package/lib/models/enums/loto.enums.d.ts +41 -0
- package/lib/models/enums/misc.enums.d.ts +151 -0
- package/lib/models/enums/quality.enums.d.ts +25 -0
- package/lib/models/enums/reservoir.enums.d.ts +80 -0
- package/lib/models/enums/sso.enums.d.ts +15 -0
- package/lib/models/enums/status.enums.d.ts +296 -0
- package/lib/models/enums/time.enums.d.ts +51 -0
- package/lib/models/enums/type.enums.d.ts +324 -0
- package/lib/models/enums/user.enums.d.ts +31 -0
- package/lib/models/enums/work-permit.enums.d.ts +56 -0
- package/lib/models/index.d.ts +41 -0
- package/lib/models/realtime/realtime-event.models.d.ts +95 -0
- package/lib/models/video/video-call.models.d.ts +65 -0
- package/lib/services/admin/activity-log.service.d.ts +13 -0
- package/lib/services/admin/announcement.service.d.ts +17 -0
- package/lib/services/admin/article-admin.service.d.ts +17 -0
- package/lib/services/admin/audit-log.service.d.ts +22 -0
- package/lib/services/admin/backup.service.d.ts +15 -0
- package/lib/services/admin/cache-admin.service.d.ts +26 -0
- package/lib/services/admin/client-admin.service.d.ts +38 -0
- package/lib/services/admin/client-api-key.service.d.ts +15 -0
- package/lib/services/admin/client-ocr.service.d.ts +14 -0
- package/lib/services/admin/client-usage.service.d.ts +15 -0
- package/lib/services/admin/data-export.service.d.ts +10 -0
- package/lib/services/admin/document-admin.service.d.ts +18 -0
- package/lib/services/admin/email-admin.service.d.ts +14 -0
- package/lib/services/admin/email-provider.service.d.ts +25 -0
- package/lib/services/admin/erp-admin.service.d.ts +41 -0
- package/lib/services/admin/identity-provider.service.d.ts +21 -0
- package/lib/services/admin/impersonation.service.d.ts +11 -0
- package/lib/services/admin/index.d.ts +30 -0
- package/lib/services/admin/messaging-provider.service.d.ts +24 -0
- package/lib/services/admin/notification.service.d.ts +15 -0
- package/lib/services/admin/platform-admin.service.d.ts +17 -0
- package/lib/services/admin/platform-webhook.service.d.ts +16 -0
- package/lib/services/admin/queue-admin.service.d.ts +24 -0
- package/lib/services/admin/role-admin.service.d.ts +37 -0
- package/lib/services/admin/sandbox-admin.service.d.ts +17 -0
- package/lib/services/admin/scheduler-admin.service.d.ts +61 -0
- package/lib/services/admin/subscription.service.d.ts +15 -0
- package/lib/services/admin/system-health.service.d.ts +11 -0
- package/lib/services/admin/user-admin.service.d.ts +27 -0
- package/lib/services/admin/user-permission.service.d.ts +18 -0
- package/lib/services/admin/webhook-admin.service.d.ts +26 -0
- package/lib/services/api/agent.service.d.ts +16 -0
- package/lib/services/api/ai-feedback.service.d.ts +9 -0
- package/lib/services/api/ai.service.d.ts +36 -0
- package/lib/services/api/aip-analysis.service.d.ts +13 -0
- package/lib/services/api/aip-financial.service.d.ts +16 -0
- package/lib/services/api/aip-geographic.service.d.ts +16 -0
- package/lib/services/api/aip-network.service.d.ts +16 -0
- package/lib/services/api/aip-performance.service.d.ts +16 -0
- package/lib/services/api/aip-resource.service.d.ts +14 -0
- package/lib/services/api/aip-workflow.service.d.ts +24 -0
- package/lib/services/api/aip.service.d.ts +73 -0
- package/lib/services/api/alert.service.d.ts +15 -0
- package/lib/services/api/anomaly-detection.service.d.ts +26 -0
- package/lib/services/api/asset-lifecycle.service.d.ts +29 -0
- package/lib/services/api/audit-entry.service.d.ts +13 -0
- package/lib/services/api/base-crud.service.d.ts +18 -0
- package/lib/services/api/bid.service.d.ts +10 -0
- package/lib/services/api/budget.service.d.ts +10 -0
- package/lib/services/api/bulk-operation.service.d.ts +26 -0
- package/lib/services/api/capex-project.service.d.ts +10 -0
- package/lib/services/api/cat.service.d.ts +40 -0
- package/lib/services/api/client-article.service.d.ts +14 -0
- package/lib/services/api/community.service.d.ts +21 -0
- package/lib/services/api/company-material-type.service.d.ts +10 -0
- package/lib/services/api/company-material.service.d.ts +9 -0
- package/lib/services/api/company.service.d.ts +15 -0
- package/lib/services/api/compliance.service.d.ts +35 -0
- package/lib/services/api/component-info.service.d.ts +10 -0
- package/lib/services/api/component-location.service.d.ts +10 -0
- package/lib/services/api/component.service.d.ts +32 -0
- package/lib/services/api/cortex-event.service.d.ts +10 -0
- package/lib/services/api/cortex-insight.service.d.ts +14 -0
- package/lib/services/api/cortex-node.service.d.ts +10 -0
- package/lib/services/api/cortex.service.d.ts +15 -0
- package/lib/services/api/custom-field.service.d.ts +33 -0
- package/lib/services/api/custom.service.d.ts +23 -0
- package/lib/services/api/dashboard.service.d.ts +18 -0
- package/lib/services/api/deferral.service.d.ts +29 -0
- package/lib/services/api/department.service.d.ts +9 -0
- package/lib/services/api/device-gateway.service.d.ts +16 -0
- package/lib/services/api/diagnostic-report.service.d.ts +14 -0
- package/lib/services/api/digital-twin.service.d.ts +29 -0
- package/lib/services/api/document.service.d.ts +28 -0
- package/lib/services/api/dynamic-crud.service.d.ts +41 -0
- package/lib/services/api/energy-analytics.service.d.ts +16 -0
- package/lib/services/api/energy-production.service.d.ts +10 -0
- package/lib/services/api/energy.service.d.ts +46 -0
- package/lib/services/api/entity-comment.service.d.ts +16 -0
- package/lib/services/api/event.service.d.ts +10 -0
- package/lib/services/api/export.service.d.ts +48 -0
- package/lib/services/api/extension.service.d.ts +24 -0
- package/lib/services/api/failure.service.d.ts +28 -0
- package/lib/services/api/fleet.service.d.ts +71 -0
- package/lib/services/api/inactive-component.service.d.ts +10 -0
- package/lib/services/api/index.d.ts +101 -0
- package/lib/services/api/inspection.service.d.ts +16 -0
- package/lib/services/api/intervention-request.service.d.ts +10 -0
- package/lib/services/api/intervention.service.d.ts +10 -0
- package/lib/services/api/knowledge.service.d.ts +106 -0
- package/lib/services/api/license.service.d.ts +14 -0
- package/lib/services/api/location.service.d.ts +9 -0
- package/lib/services/api/log.service.d.ts +9 -0
- package/lib/services/api/login-history.service.d.ts +10 -0
- package/lib/services/api/maintenance-plan.service.d.ts +10 -0
- package/lib/services/api/maintenance-record.service.d.ts +10 -0
- package/lib/services/api/material-consumable.service.d.ts +22 -0
- package/lib/services/api/material-instrument.service.d.ts +16 -0
- package/lib/services/api/material-item.service.d.ts +28 -0
- package/lib/services/api/material-tooling.service.d.ts +22 -0
- package/lib/services/api/measurement-unit.service.d.ts +10 -0
- package/lib/services/api/misc-crud.service.d.ts +167 -0
- package/lib/services/api/note.service.d.ts +14 -0
- package/lib/services/api/outage-resource.service.d.ts +15 -0
- package/lib/services/api/plant-data.service.d.ts +14 -0
- package/lib/services/api/procurement.service.d.ts +27 -0
- package/lib/services/api/project.service.d.ts +10 -0
- package/lib/services/api/property-template.service.d.ts +10 -0
- package/lib/services/api/quality.service.d.ts +16 -0
- package/lib/services/api/recurring-event.service.d.ts +10 -0
- package/lib/services/api/reporting.service.d.ts +38 -0
- package/lib/services/api/reservoir-data.service.d.ts +10 -0
- package/lib/services/api/reservoir.service.d.ts +109 -0
- package/lib/services/api/room.service.d.ts +10 -0
- package/lib/services/api/sandbox.service.d.ts +26 -0
- package/lib/services/api/scheduled-report.service.d.ts +10 -0
- package/lib/services/api/search.service.d.ts +54 -0
- package/lib/services/api/sensor.service.d.ts +17 -0
- package/lib/services/api/sla-policy.service.d.ts +10 -0
- package/lib/services/api/sla.service.d.ts +10 -0
- package/lib/services/api/threshold-alert-rule.service.d.ts +10 -0
- package/lib/services/api/ticket.service.d.ts +60 -0
- package/lib/services/api/time-entry.service.d.ts +10 -0
- package/lib/services/api/todo.service.d.ts +10 -0
- package/lib/services/api/unit.service.d.ts +10 -0
- package/lib/services/api/upload.service.d.ts +50 -0
- package/lib/services/api/user.service.d.ts +59 -0
- package/lib/services/api/warehouse.service.d.ts +15 -0
- package/lib/services/api/warranty.service.d.ts +16 -0
- package/lib/services/api/work-order.service.d.ts +17 -0
- package/lib/services/api/work-permit.service.d.ts +10 -0
- package/lib/services/api/workflow.service.d.ts +33 -0
- package/lib/services/auth/auth.service.d.ts +33 -0
- package/lib/services/auth/index.d.ts +4 -0
- package/lib/services/auth/platform-auth.service.d.ts +16 -0
- package/lib/services/auth/sso-auth.service.d.ts +21 -0
- package/lib/services/auth/totp.service.d.ts +18 -0
- package/lib/services/chat/chat-rest.service.d.ts +40 -0
- package/lib/services/chat/chat-websocket.service.d.ts +34 -0
- package/lib/services/chat/index.d.ts +2 -0
- package/lib/services/index.d.ts +7 -0
- package/lib/services/realtime/index.d.ts +1 -0
- package/lib/services/realtime/realtime-event.service.d.ts +137 -0
- package/lib/services/reservoir/index.d.ts +1 -0
- package/lib/services/reservoir/reservoir-websocket.service.d.ts +47 -0
- package/lib/services/video/index.d.ts +2 -0
- package/lib/services/video/video-call-rest.service.d.ts +19 -0
- package/lib/services/video/video-call-websocket.service.d.ts +31 -0
- package/lib/tgm-sdk.config.d.ts +36 -0
- package/lib/tgm-sdk.module.d.ts +13 -0
- package/package.json +40 -0
- package/public-api.d.ts +42 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW4tc29sdXRpb25zLXRnbS1jbGllbnQtc2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VuLXNvbHV0aW9ucy10Z20tY2xpZW50LXNkay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { ObjectBrowserComponent } from '../object-browser/object-browser.component';
|
|
4
|
+
import { QueryEditorComponent } from '../query-editor/query-editor.component';
|
|
5
|
+
import { QueryToolbarComponent } from '../query-toolbar/query-toolbar.component';
|
|
6
|
+
import { ResultsGridComponent } from '../results-grid/results-grid.component';
|
|
7
|
+
import { TableStructureComponent } from '../table-structure/table-structure.component';
|
|
8
|
+
import { TableDataViewerComponent } from '../table-data-viewer/table-data-viewer.component';
|
|
9
|
+
import { RecordDetailComponent } from '../record-detail/record-detail.component';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "../services/entity-schema.service";
|
|
12
|
+
import * as i2 from "../services/query-executor.service";
|
|
13
|
+
import * as i3 from "@angular/common";
|
|
14
|
+
export class DatabaseManagerComponent {
|
|
15
|
+
entitySchema;
|
|
16
|
+
queryExecutor;
|
|
17
|
+
// ── Config ──
|
|
18
|
+
config = {};
|
|
19
|
+
// ── CSS overrides ──
|
|
20
|
+
containerClass = '';
|
|
21
|
+
sidebarClass = '';
|
|
22
|
+
mainClass = '';
|
|
23
|
+
// ── Labels ──
|
|
24
|
+
title = 'Database Manager';
|
|
25
|
+
noResultsMessage = 'No results found.';
|
|
26
|
+
loadingMessage = 'Executing query...';
|
|
27
|
+
// ── Custom templates ──
|
|
28
|
+
headerTemplate;
|
|
29
|
+
sidebarHeaderTemplate;
|
|
30
|
+
tabTemplate;
|
|
31
|
+
emptyTemplate;
|
|
32
|
+
// ── Events ──
|
|
33
|
+
entitySelected = new EventEmitter();
|
|
34
|
+
queryExecuted = new EventEmitter();
|
|
35
|
+
recordSelected = new EventEmitter();
|
|
36
|
+
recordCreated = new EventEmitter();
|
|
37
|
+
recordUpdated = new EventEmitter();
|
|
38
|
+
recordDeleted = new EventEmitter();
|
|
39
|
+
error = new EventEmitter();
|
|
40
|
+
// ── State ──
|
|
41
|
+
selectedEntity;
|
|
42
|
+
tabs = [];
|
|
43
|
+
activeTabId;
|
|
44
|
+
queryText = '';
|
|
45
|
+
executing = false;
|
|
46
|
+
activeResult;
|
|
47
|
+
selectedRecord;
|
|
48
|
+
recordMode = 'view';
|
|
49
|
+
showRecordDetail = false;
|
|
50
|
+
tabCounter = 0;
|
|
51
|
+
subscription;
|
|
52
|
+
constructor(entitySchema, queryExecutor) {
|
|
53
|
+
this.entitySchema = entitySchema;
|
|
54
|
+
this.queryExecutor = queryExecutor;
|
|
55
|
+
}
|
|
56
|
+
ngOnInit() {
|
|
57
|
+
this.addQueryTab();
|
|
58
|
+
}
|
|
59
|
+
ngOnChanges(changes) {
|
|
60
|
+
if (changes['config']) {
|
|
61
|
+
this.entitySchema.invalidateCache();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
ngOnDestroy() {
|
|
65
|
+
this.subscription?.unsubscribe();
|
|
66
|
+
}
|
|
67
|
+
// ── Tab Management ──
|
|
68
|
+
get activeTab() {
|
|
69
|
+
return this.tabs.find(t => t.id === this.activeTabId);
|
|
70
|
+
}
|
|
71
|
+
addQueryTab() {
|
|
72
|
+
const tab = {
|
|
73
|
+
id: `query-${++this.tabCounter}`,
|
|
74
|
+
title: `Query ${this.tabCounter}`,
|
|
75
|
+
type: 'query',
|
|
76
|
+
query: '',
|
|
77
|
+
};
|
|
78
|
+
this.tabs.push(tab);
|
|
79
|
+
this.activeTabId = tab.id;
|
|
80
|
+
this.queryText = '';
|
|
81
|
+
this.activeResult = undefined;
|
|
82
|
+
}
|
|
83
|
+
addTableDataTab(entity) {
|
|
84
|
+
const existing = this.tabs.find(t => t.type === 'table-data' && t.entityKey === entity.key);
|
|
85
|
+
if (existing) {
|
|
86
|
+
this.activeTabId = existing.id;
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const tab = {
|
|
90
|
+
id: `data-${entity.key}-${++this.tabCounter}`,
|
|
91
|
+
title: entity.name,
|
|
92
|
+
type: 'table-data',
|
|
93
|
+
entityKey: entity.key,
|
|
94
|
+
};
|
|
95
|
+
this.tabs.push(tab);
|
|
96
|
+
this.activeTabId = tab.id;
|
|
97
|
+
}
|
|
98
|
+
addTableStructureTab(entity) {
|
|
99
|
+
const existing = this.tabs.find(t => t.type === 'table-structure' && t.entityKey === entity.key);
|
|
100
|
+
if (existing) {
|
|
101
|
+
this.activeTabId = existing.id;
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const tab = {
|
|
105
|
+
id: `struct-${entity.key}-${++this.tabCounter}`,
|
|
106
|
+
title: `${entity.name} (Structure)`,
|
|
107
|
+
type: 'table-structure',
|
|
108
|
+
entityKey: entity.key,
|
|
109
|
+
};
|
|
110
|
+
this.tabs.push(tab);
|
|
111
|
+
this.activeTabId = tab.id;
|
|
112
|
+
}
|
|
113
|
+
selectTab(tab) {
|
|
114
|
+
this.activeTabId = tab.id;
|
|
115
|
+
if (tab.type === 'query') {
|
|
116
|
+
this.queryText = tab.query ?? '';
|
|
117
|
+
this.activeResult = tab.result;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
closeTab(tab, event) {
|
|
121
|
+
event.stopPropagation();
|
|
122
|
+
const idx = this.tabs.indexOf(tab);
|
|
123
|
+
if (idx < 0)
|
|
124
|
+
return;
|
|
125
|
+
this.tabs.splice(idx, 1);
|
|
126
|
+
if (this.activeTabId === tab.id) {
|
|
127
|
+
this.activeTabId = this.tabs[Math.min(idx, this.tabs.length - 1)]?.id;
|
|
128
|
+
if (this.activeTab?.type === 'query') {
|
|
129
|
+
this.queryText = this.activeTab.query ?? '';
|
|
130
|
+
this.activeResult = this.activeTab.result;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// ── Entity Selection ──
|
|
135
|
+
onEntitySelected(entity) {
|
|
136
|
+
this.selectedEntity = entity;
|
|
137
|
+
this.entitySelected.emit(entity);
|
|
138
|
+
}
|
|
139
|
+
onEntityDoubleClick(entity) {
|
|
140
|
+
this.addTableDataTab(entity);
|
|
141
|
+
}
|
|
142
|
+
// ── Query Execution ──
|
|
143
|
+
onQueryChange(text) {
|
|
144
|
+
this.queryText = text;
|
|
145
|
+
if (this.activeTab?.type === 'query') {
|
|
146
|
+
this.activeTab.query = text;
|
|
147
|
+
this.activeTab.dirty = true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
onExecute() {
|
|
151
|
+
this.executeQuery(this.queryText);
|
|
152
|
+
}
|
|
153
|
+
onExecuteFromEditor(text) {
|
|
154
|
+
this.queryText = text;
|
|
155
|
+
if (this.activeTab?.type === 'query') {
|
|
156
|
+
this.activeTab.query = text;
|
|
157
|
+
}
|
|
158
|
+
this.executeQuery(text);
|
|
159
|
+
}
|
|
160
|
+
onFormat() {
|
|
161
|
+
try {
|
|
162
|
+
const parsed = this.queryExecutor.parseQuery(this.queryText);
|
|
163
|
+
this.queryText = this.queryExecutor.formatQuery(parsed);
|
|
164
|
+
if (this.activeTab?.type === 'query') {
|
|
165
|
+
this.activeTab.query = this.queryText;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Leave as is if invalid
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
onClear() {
|
|
173
|
+
this.queryText = '';
|
|
174
|
+
this.activeResult = undefined;
|
|
175
|
+
if (this.activeTab?.type === 'query') {
|
|
176
|
+
this.activeTab.query = '';
|
|
177
|
+
this.activeTab.result = undefined;
|
|
178
|
+
this.activeTab.dirty = false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// ── Record Detail ──
|
|
182
|
+
onRecordClick(record) {
|
|
183
|
+
if (!this.activeTab?.entityKey)
|
|
184
|
+
return;
|
|
185
|
+
this.selectedRecord = record;
|
|
186
|
+
this.recordMode = 'view';
|
|
187
|
+
this.showRecordDetail = true;
|
|
188
|
+
this.recordSelected.emit({ entity: this.activeTab.entityKey, record });
|
|
189
|
+
}
|
|
190
|
+
onRecordDoubleClick(record) {
|
|
191
|
+
if (this.config.readOnly)
|
|
192
|
+
return;
|
|
193
|
+
this.selectedRecord = record;
|
|
194
|
+
this.recordMode = 'edit';
|
|
195
|
+
this.showRecordDetail = true;
|
|
196
|
+
}
|
|
197
|
+
closeRecordDetail() {
|
|
198
|
+
this.showRecordDetail = false;
|
|
199
|
+
this.selectedRecord = undefined;
|
|
200
|
+
}
|
|
201
|
+
onRecordSave(data) {
|
|
202
|
+
if (this.recordMode === 'create') {
|
|
203
|
+
this.recordCreated.emit(data);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
this.recordUpdated.emit(data);
|
|
207
|
+
}
|
|
208
|
+
this.closeRecordDetail();
|
|
209
|
+
}
|
|
210
|
+
onRecordDelete(record) {
|
|
211
|
+
this.recordDeleted.emit(record);
|
|
212
|
+
this.closeRecordDetail();
|
|
213
|
+
}
|
|
214
|
+
// ── Helpers ──
|
|
215
|
+
getEntityForTab(tab) {
|
|
216
|
+
if (!tab.entityKey)
|
|
217
|
+
return undefined;
|
|
218
|
+
return this.entitySchema.getEntityByKey(tab.entityKey, this.config);
|
|
219
|
+
}
|
|
220
|
+
trackByTabId(_index, tab) {
|
|
221
|
+
return tab.id;
|
|
222
|
+
}
|
|
223
|
+
executeQuery(raw) {
|
|
224
|
+
if (!raw.trim())
|
|
225
|
+
return;
|
|
226
|
+
let query;
|
|
227
|
+
try {
|
|
228
|
+
query = this.queryExecutor.parseQuery(raw);
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
this.error.emit({ message: err.message });
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
// Auto-populate query for selected entity
|
|
235
|
+
if (this.selectedEntity && !query.entity) {
|
|
236
|
+
query.entity = this.selectedEntity.key;
|
|
237
|
+
}
|
|
238
|
+
this.executing = true;
|
|
239
|
+
this.subscription?.unsubscribe();
|
|
240
|
+
this.subscription = this.queryExecutor.execute(query, this.config).subscribe({
|
|
241
|
+
next: (result) => {
|
|
242
|
+
this.activeResult = result;
|
|
243
|
+
this.executing = false;
|
|
244
|
+
if (this.activeTab?.type === 'query') {
|
|
245
|
+
this.activeTab.result = result;
|
|
246
|
+
this.activeTab.dirty = false;
|
|
247
|
+
}
|
|
248
|
+
this.queryExecuted.emit(result);
|
|
249
|
+
},
|
|
250
|
+
error: (err) => {
|
|
251
|
+
this.executing = false;
|
|
252
|
+
this.error.emit(err);
|
|
253
|
+
},
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerComponent, deps: [{ token: i1.EntitySchemaService }, { token: i2.QueryExecutorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
257
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DatabaseManagerComponent, isStandalone: true, selector: "tgm-database-manager", inputs: { config: "config", containerClass: "containerClass", sidebarClass: "sidebarClass", mainClass: "mainClass", title: "title", noResultsMessage: "noResultsMessage", loadingMessage: "loadingMessage", headerTemplate: "headerTemplate", sidebarHeaderTemplate: "sidebarHeaderTemplate", tabTemplate: "tabTemplate", emptyTemplate: "emptyTemplate" }, outputs: { entitySelected: "entitySelected", queryExecuted: "queryExecuted", recordSelected: "recordSelected", recordCreated: "recordCreated", recordUpdated: "recordUpdated", recordDeleted: "recordDeleted", error: "error" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tgm-database-manager\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <div class=\"tgm-database-manager__header\">\n <h3 class=\"tgm-database-manager__title\">{{ title }}</h3>\n </div>\n </ng-template>\n\n <div class=\"tgm-database-manager__layout\">\n <!-- Sidebar: Object Browser -->\n <div class=\"tgm-database-manager__sidebar\" [ngClass]=\"sidebarClass\">\n <ng-container *ngIf=\"sidebarHeaderTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarHeaderTemplate\"></ng-container>\n </ng-container>\n <tgm-object-browser\n [config]=\"config\"\n [selectedEntity]=\"selectedEntity\"\n (selectEntity)=\"onEntitySelected($event)\"\n (doubleClickEntity)=\"onEntityDoubleClick($event)\"\n ></tgm-object-browser>\n </div>\n\n <!-- Main Area -->\n <div class=\"tgm-database-manager__main\" [ngClass]=\"mainClass\">\n <!-- Tabs -->\n <div class=\"tgm-database-manager__tabs\">\n <div class=\"tgm-database-manager__tab-list\">\n <div\n *ngFor=\"let tab of tabs; trackBy: trackByTabId\"\n class=\"tgm-database-manager__tab\"\n [class.tgm-database-manager__tab--active]=\"tab.id === activeTabId\"\n (click)=\"selectTab(tab)\"\n >\n <ng-container *ngIf=\"tabTemplate; else defaultTab\">\n <ng-container *ngTemplateOutlet=\"tabTemplate; context: { $implicit: tab }\"></ng-container>\n </ng-container>\n <ng-template #defaultTab>\n <span class=\"tgm-database-manager__tab-icon\">\n {{ tab.type === 'query' ? '❯' : (tab.type === 'table-structure' ? '☰' : '▣') }}\n </span>\n <span class=\"tgm-database-manager__tab-title\">{{ tab.title }}</span>\n <span class=\"tgm-database-manager__tab-dirty\" *ngIf=\"tab.dirty\">●</span>\n <button\n class=\"tgm-database-manager__tab-close\"\n (click)=\"closeTab(tab, $event)\"\n >×</button>\n </ng-template>\n </div>\n <button\n class=\"tgm-database-manager__tab-add\"\n (click)=\"addQueryTab()\"\n title=\"New Query Tab\"\n >+</button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tgm-database-manager__content\">\n <!-- Empty state -->\n <ng-container *ngIf=\"!activeTab\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultEmpty>\n <div class=\"tgm-database-manager__empty\">\n <p>Select an entity from the sidebar or open a new query tab.</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Query Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'query'\">\n <div class=\"tgm-database-manager__query-area\">\n <tgm-query-editor\n [value]=\"queryText\"\n [enableMonaco]=\"config.enableMonaco !== false\"\n [entitySchema]=\"selectedEntity\"\n [monacoOptions]=\"config.monacoOptions\"\n (valueChange)=\"onQueryChange($event)\"\n (execute)=\"onExecuteFromEditor($event)\"\n ></tgm-query-editor>\n\n <tgm-query-toolbar\n [executing]=\"executing\"\n (execute)=\"onExecute()\"\n (format)=\"onFormat()\"\n (clear)=\"onClear()\"\n ></tgm-query-toolbar>\n </div>\n\n <div class=\"tgm-database-manager__results\">\n <tgm-results-grid\n *ngIf=\"activeResult\"\n [data]=\"activeResult.data\"\n [columns]=\"selectedEntity?.fields || []\"\n [total]=\"activeResult.total\"\n [page]=\"activeResult.page\"\n [pageSize]=\"activeResult.pageSize\"\n [loading]=\"executing\"\n [noResultsMessage]=\"noResultsMessage\"\n [loadingMessage]=\"loadingMessage\"\n (rowClick)=\"onRecordClick($event)\"\n (rowDoubleClick)=\"onRecordDoubleClick($event)\"\n ></tgm-results-grid>\n\n <div class=\"tgm-database-manager__result-info\" *ngIf=\"activeResult\">\n <span>{{ activeResult.total }} rows · {{ activeResult.executionTime }}ms</span>\n </div>\n\n <div class=\"tgm-database-manager__no-results\" *ngIf=\"!activeResult && !executing\">\n <p>Execute a query to see results.</p>\n </div>\n </div>\n </ng-container>\n\n <!-- Table Data Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-data'\">\n <tgm-table-data-viewer\n [entityKey]=\"activeTab.entityKey!\"\n [config]=\"config\"\n [pageSize]=\"config.defaultPageSize || 25\"\n [showCreate]=\"!config.readOnly\"\n [showDelete]=\"!config.readOnly\"\n (view)=\"onRecordClick($event)\"\n (edit)=\"onRecordDoubleClick($event)\"\n ></tgm-table-data-viewer>\n </ng-container>\n\n <!-- Table Structure Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-structure'\">\n <tgm-table-structure\n [entity]=\"getEntityForTab(activeTab!)\"\n ></tgm-table-structure>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Record Detail Panel (overlay) -->\n <div class=\"tgm-database-manager__detail-overlay\" *ngIf=\"showRecordDetail\" (click)=\"closeRecordDetail()\">\n <div class=\"tgm-database-manager__detail-panel\" (click)=\"$event.stopPropagation()\">\n <tgm-record-detail\n [record]=\"selectedRecord\"\n [entity]=\"getEntityForTab(activeTab!) || selectedEntity\"\n [mode]=\"recordMode\"\n (save)=\"onRecordSave($event)\"\n (cancel)=\"closeRecordDetail()\"\n (delete)=\"onRecordDelete($event)\"\n ></tgm-record-detail>\n </div>\n </div>\n</div>\n", styles: [":host{--tgm-db-bg: #1e1e2e;--tgm-db-bg-secondary: rgba(255, 255, 255, .05);--tgm-db-bg-hover: rgba(255, 255, 255, .08);--tgm-db-bg-active: rgba(59, 130, 246, .15);--tgm-db-border: rgba(255, 255, 255, .1);--tgm-db-text: #e5e7eb;--tgm-db-text-secondary: #9ca3af;--tgm-db-text-muted: #6b7280;--tgm-db-primary: #3b82f6;--tgm-db-primary-hover: #2563eb;--tgm-db-success: #22c55e;--tgm-db-warning: #eab308;--tgm-db-danger: #ef4444;--tgm-db-radius: 8px;--tgm-db-radius-sm: 4px;--tgm-db-font-family: inherit;--tgm-db-font-mono: \"Fira Code\", \"Cascadia Code\", \"JetBrains Mono\", monospace;--tgm-db-font-size: 14px;--tgm-db-spacing: 16px;--tgm-db-spacing-sm: 8px;--tgm-db-sidebar-width: 260px;--tgm-db-editor-height: 200px;--tgm-db-shadow: 0 1px 3px rgba(0, 0, 0, .3);display:block;font-family:var(--tgm-db-font-family);font-size:var(--tgm-db-font-size);color:var(--tgm-db-text)}.tgm-database-manager{display:flex;flex-direction:column;height:100%;min-height:500px;background:var(--tgm-db-bg);border-radius:var(--tgm-db-radius);overflow:hidden;border:1px solid var(--tgm-db-border)}.tgm-database-manager__header{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm) var(--tgm-db-spacing);border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__title{margin:0;font-size:16px;font-weight:600;color:var(--tgm-db-text)}.tgm-database-manager__layout{display:flex;flex:1;min-height:0}.tgm-database-manager__sidebar{width:var(--tgm-db-sidebar-width);min-width:200px;border-right:1px solid var(--tgm-db-border);background:var(--tgm-db-bg);display:flex;flex-direction:column;overflow:hidden}.tgm-database-manager__main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.tgm-database-manager__tabs{border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__tab-list{display:flex;align-items:center;overflow-x:auto;gap:0}.tgm-database-manager__tab-list::-webkit-scrollbar{height:2px}.tgm-database-manager__tab-list::-webkit-scrollbar-thumb{background:var(--tgm-db-border)}.tgm-database-manager__tab{display:flex;align-items:center;gap:4px;padding:8px 12px;font-size:12px;color:var(--tgm-db-text-secondary);cursor:pointer;border-right:1px solid var(--tgm-db-border);white-space:nowrap;transition:background .1s;-webkit-user-select:none;user-select:none}.tgm-database-manager__tab:hover{background:var(--tgm-db-bg-hover);color:var(--tgm-db-text)}.tgm-database-manager__tab--active{background:var(--tgm-db-bg);color:var(--tgm-db-text);border-bottom:2px solid var(--tgm-db-primary)}.tgm-database-manager__tab-icon{font-size:10px;opacity:.6}.tgm-database-manager__tab-title{max-width:150px;overflow:hidden;text-overflow:ellipsis}.tgm-database-manager__tab-dirty{font-size:8px;color:var(--tgm-db-warning)}.tgm-database-manager__tab-close{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:14px;padding:0 2px;line-height:1;border-radius:2px}.tgm-database-manager__tab-close:hover{color:var(--tgm-db-text);background:var(--tgm-db-bg-hover)}.tgm-database-manager__tab-add{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:16px;padding:4px 12px;transition:color .1s}.tgm-database-manager__tab-add:hover{color:var(--tgm-db-text)}.tgm-database-manager__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.tgm-database-manager__query-area{flex-shrink:0}.tgm-database-manager__results{flex:1;min-height:0;display:flex;flex-direction:column}.tgm-database-manager__result-info{padding:4px var(--tgm-db-spacing-sm);font-size:11px;color:var(--tgm-db-text-muted);background:var(--tgm-db-bg-secondary);border-top:1px solid var(--tgm-db-border)}.tgm-database-manager__no-results{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__no-results p{margin:0}.tgm-database-manager__empty{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__empty p{margin:0}.tgm-database-manager__detail-overlay{position:absolute;inset:0;background:#00000080;display:flex;align-items:center;justify-content:flex-end;z-index:100}.tgm-database-manager__detail-panel{width:480px;max-width:90%;height:100%;background:var(--tgm-db-bg);border-left:1px solid var(--tgm-db-border);box-shadow:-4px 0 16px #0000004d;overflow:hidden}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ObjectBrowserComponent, selector: "tgm-object-browser", inputs: ["config", "selectedEntity", "searchPlaceholder", "groupLabels", "entityTemplate", "groupTemplate"], outputs: ["selectEntity", "doubleClickEntity"] }, { kind: "component", type: QueryEditorComponent, selector: "tgm-query-editor", inputs: ["value", "entitySchema", "enableMonaco", "monacoOptions", "placeholder", "editorClass"], outputs: ["valueChange", "execute"] }, { kind: "component", type: QueryToolbarComponent, selector: "tgm-query-toolbar", inputs: ["executing", "disabled", "showHistory", "showFormat", "executeLabel", "formatLabel", "clearLabel", "historyLabel", "toolbarTemplate"], outputs: ["execute", "format", "clear", "toggleHistory"] }, { kind: "component", type: ResultsGridComponent, selector: "tgm-results-grid", inputs: ["data", "columns", "total", "page", "pageSize", "loading", "sortField", "sortOrder", "showPagination", "showExport", "noResultsMessage", "loadingMessage", "rowClass", "cellTemplate", "headerTemplate", "emptyTemplate", "paginationTemplate"], outputs: ["sort", "pageChange", "rowClick", "rowDoubleClick", "cellClick", "exportData"] }, { kind: "component", type: TableStructureComponent, selector: "tgm-table-structure", inputs: ["entity", "containerClass", "fieldTemplate"], outputs: ["fieldClick"] }, { kind: "component", type: TableDataViewerComponent, selector: "tgm-table-data-viewer", inputs: ["entityKey", "config", "pageSize", "showFilters", "showCreate", "showDelete", "emptyMessage", "loadingMessage", "rowTemplate", "filterTemplate", "toolbarTemplate"], outputs: ["view", "edit", "delete", "create", "pageChange", "filterChange"] }, { kind: "component", type: RecordDetailComponent, selector: "tgm-record-detail", inputs: ["record", "entity", "mode", "saving", "saveLabel", "cancelLabel", "deleteLabel", "editLabel", "fieldTemplate", "headerTemplate", "footerTemplate"], outputs: ["save", "cancel", "delete"] }] });
|
|
258
|
+
}
|
|
259
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerComponent, decorators: [{
|
|
260
|
+
type: Component,
|
|
261
|
+
args: [{ selector: 'tgm-database-manager', standalone: true, imports: [
|
|
262
|
+
CommonModule,
|
|
263
|
+
ObjectBrowserComponent,
|
|
264
|
+
QueryEditorComponent,
|
|
265
|
+
QueryToolbarComponent,
|
|
266
|
+
ResultsGridComponent,
|
|
267
|
+
TableStructureComponent,
|
|
268
|
+
TableDataViewerComponent,
|
|
269
|
+
RecordDetailComponent,
|
|
270
|
+
], template: "<div class=\"tgm-database-manager\" [ngClass]=\"containerClass\">\n <!-- Header -->\n <ng-container *ngIf=\"headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <div class=\"tgm-database-manager__header\">\n <h3 class=\"tgm-database-manager__title\">{{ title }}</h3>\n </div>\n </ng-template>\n\n <div class=\"tgm-database-manager__layout\">\n <!-- Sidebar: Object Browser -->\n <div class=\"tgm-database-manager__sidebar\" [ngClass]=\"sidebarClass\">\n <ng-container *ngIf=\"sidebarHeaderTemplate\">\n <ng-container *ngTemplateOutlet=\"sidebarHeaderTemplate\"></ng-container>\n </ng-container>\n <tgm-object-browser\n [config]=\"config\"\n [selectedEntity]=\"selectedEntity\"\n (selectEntity)=\"onEntitySelected($event)\"\n (doubleClickEntity)=\"onEntityDoubleClick($event)\"\n ></tgm-object-browser>\n </div>\n\n <!-- Main Area -->\n <div class=\"tgm-database-manager__main\" [ngClass]=\"mainClass\">\n <!-- Tabs -->\n <div class=\"tgm-database-manager__tabs\">\n <div class=\"tgm-database-manager__tab-list\">\n <div\n *ngFor=\"let tab of tabs; trackBy: trackByTabId\"\n class=\"tgm-database-manager__tab\"\n [class.tgm-database-manager__tab--active]=\"tab.id === activeTabId\"\n (click)=\"selectTab(tab)\"\n >\n <ng-container *ngIf=\"tabTemplate; else defaultTab\">\n <ng-container *ngTemplateOutlet=\"tabTemplate; context: { $implicit: tab }\"></ng-container>\n </ng-container>\n <ng-template #defaultTab>\n <span class=\"tgm-database-manager__tab-icon\">\n {{ tab.type === 'query' ? '❯' : (tab.type === 'table-structure' ? '☰' : '▣') }}\n </span>\n <span class=\"tgm-database-manager__tab-title\">{{ tab.title }}</span>\n <span class=\"tgm-database-manager__tab-dirty\" *ngIf=\"tab.dirty\">●</span>\n <button\n class=\"tgm-database-manager__tab-close\"\n (click)=\"closeTab(tab, $event)\"\n >×</button>\n </ng-template>\n </div>\n <button\n class=\"tgm-database-manager__tab-add\"\n (click)=\"addQueryTab()\"\n title=\"New Query Tab\"\n >+</button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tgm-database-manager__content\">\n <!-- Empty state -->\n <ng-container *ngIf=\"!activeTab\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultEmpty>\n <div class=\"tgm-database-manager__empty\">\n <p>Select an entity from the sidebar or open a new query tab.</p>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- Query Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'query'\">\n <div class=\"tgm-database-manager__query-area\">\n <tgm-query-editor\n [value]=\"queryText\"\n [enableMonaco]=\"config.enableMonaco !== false\"\n [entitySchema]=\"selectedEntity\"\n [monacoOptions]=\"config.monacoOptions\"\n (valueChange)=\"onQueryChange($event)\"\n (execute)=\"onExecuteFromEditor($event)\"\n ></tgm-query-editor>\n\n <tgm-query-toolbar\n [executing]=\"executing\"\n (execute)=\"onExecute()\"\n (format)=\"onFormat()\"\n (clear)=\"onClear()\"\n ></tgm-query-toolbar>\n </div>\n\n <div class=\"tgm-database-manager__results\">\n <tgm-results-grid\n *ngIf=\"activeResult\"\n [data]=\"activeResult.data\"\n [columns]=\"selectedEntity?.fields || []\"\n [total]=\"activeResult.total\"\n [page]=\"activeResult.page\"\n [pageSize]=\"activeResult.pageSize\"\n [loading]=\"executing\"\n [noResultsMessage]=\"noResultsMessage\"\n [loadingMessage]=\"loadingMessage\"\n (rowClick)=\"onRecordClick($event)\"\n (rowDoubleClick)=\"onRecordDoubleClick($event)\"\n ></tgm-results-grid>\n\n <div class=\"tgm-database-manager__result-info\" *ngIf=\"activeResult\">\n <span>{{ activeResult.total }} rows · {{ activeResult.executionTime }}ms</span>\n </div>\n\n <div class=\"tgm-database-manager__no-results\" *ngIf=\"!activeResult && !executing\">\n <p>Execute a query to see results.</p>\n </div>\n </div>\n </ng-container>\n\n <!-- Table Data Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-data'\">\n <tgm-table-data-viewer\n [entityKey]=\"activeTab.entityKey!\"\n [config]=\"config\"\n [pageSize]=\"config.defaultPageSize || 25\"\n [showCreate]=\"!config.readOnly\"\n [showDelete]=\"!config.readOnly\"\n (view)=\"onRecordClick($event)\"\n (edit)=\"onRecordDoubleClick($event)\"\n ></tgm-table-data-viewer>\n </ng-container>\n\n <!-- Table Structure Tab -->\n <ng-container *ngIf=\"activeTab?.type === 'table-structure'\">\n <tgm-table-structure\n [entity]=\"getEntityForTab(activeTab!)\"\n ></tgm-table-structure>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Record Detail Panel (overlay) -->\n <div class=\"tgm-database-manager__detail-overlay\" *ngIf=\"showRecordDetail\" (click)=\"closeRecordDetail()\">\n <div class=\"tgm-database-manager__detail-panel\" (click)=\"$event.stopPropagation()\">\n <tgm-record-detail\n [record]=\"selectedRecord\"\n [entity]=\"getEntityForTab(activeTab!) || selectedEntity\"\n [mode]=\"recordMode\"\n (save)=\"onRecordSave($event)\"\n (cancel)=\"closeRecordDetail()\"\n (delete)=\"onRecordDelete($event)\"\n ></tgm-record-detail>\n </div>\n </div>\n</div>\n", styles: [":host{--tgm-db-bg: #1e1e2e;--tgm-db-bg-secondary: rgba(255, 255, 255, .05);--tgm-db-bg-hover: rgba(255, 255, 255, .08);--tgm-db-bg-active: rgba(59, 130, 246, .15);--tgm-db-border: rgba(255, 255, 255, .1);--tgm-db-text: #e5e7eb;--tgm-db-text-secondary: #9ca3af;--tgm-db-text-muted: #6b7280;--tgm-db-primary: #3b82f6;--tgm-db-primary-hover: #2563eb;--tgm-db-success: #22c55e;--tgm-db-warning: #eab308;--tgm-db-danger: #ef4444;--tgm-db-radius: 8px;--tgm-db-radius-sm: 4px;--tgm-db-font-family: inherit;--tgm-db-font-mono: \"Fira Code\", \"Cascadia Code\", \"JetBrains Mono\", monospace;--tgm-db-font-size: 14px;--tgm-db-spacing: 16px;--tgm-db-spacing-sm: 8px;--tgm-db-sidebar-width: 260px;--tgm-db-editor-height: 200px;--tgm-db-shadow: 0 1px 3px rgba(0, 0, 0, .3);display:block;font-family:var(--tgm-db-font-family);font-size:var(--tgm-db-font-size);color:var(--tgm-db-text)}.tgm-database-manager{display:flex;flex-direction:column;height:100%;min-height:500px;background:var(--tgm-db-bg);border-radius:var(--tgm-db-radius);overflow:hidden;border:1px solid var(--tgm-db-border)}.tgm-database-manager__header{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm) var(--tgm-db-spacing);border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__title{margin:0;font-size:16px;font-weight:600;color:var(--tgm-db-text)}.tgm-database-manager__layout{display:flex;flex:1;min-height:0}.tgm-database-manager__sidebar{width:var(--tgm-db-sidebar-width);min-width:200px;border-right:1px solid var(--tgm-db-border);background:var(--tgm-db-bg);display:flex;flex-direction:column;overflow:hidden}.tgm-database-manager__main{flex:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}.tgm-database-manager__tabs{border-bottom:1px solid var(--tgm-db-border);background:var(--tgm-db-bg-secondary)}.tgm-database-manager__tab-list{display:flex;align-items:center;overflow-x:auto;gap:0}.tgm-database-manager__tab-list::-webkit-scrollbar{height:2px}.tgm-database-manager__tab-list::-webkit-scrollbar-thumb{background:var(--tgm-db-border)}.tgm-database-manager__tab{display:flex;align-items:center;gap:4px;padding:8px 12px;font-size:12px;color:var(--tgm-db-text-secondary);cursor:pointer;border-right:1px solid var(--tgm-db-border);white-space:nowrap;transition:background .1s;-webkit-user-select:none;user-select:none}.tgm-database-manager__tab:hover{background:var(--tgm-db-bg-hover);color:var(--tgm-db-text)}.tgm-database-manager__tab--active{background:var(--tgm-db-bg);color:var(--tgm-db-text);border-bottom:2px solid var(--tgm-db-primary)}.tgm-database-manager__tab-icon{font-size:10px;opacity:.6}.tgm-database-manager__tab-title{max-width:150px;overflow:hidden;text-overflow:ellipsis}.tgm-database-manager__tab-dirty{font-size:8px;color:var(--tgm-db-warning)}.tgm-database-manager__tab-close{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:14px;padding:0 2px;line-height:1;border-radius:2px}.tgm-database-manager__tab-close:hover{color:var(--tgm-db-text);background:var(--tgm-db-bg-hover)}.tgm-database-manager__tab-add{background:none;border:none;color:var(--tgm-db-text-muted);cursor:pointer;font-size:16px;padding:4px 12px;transition:color .1s}.tgm-database-manager__tab-add:hover{color:var(--tgm-db-text)}.tgm-database-manager__content{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.tgm-database-manager__query-area{flex-shrink:0}.tgm-database-manager__results{flex:1;min-height:0;display:flex;flex-direction:column}.tgm-database-manager__result-info{padding:4px var(--tgm-db-spacing-sm);font-size:11px;color:var(--tgm-db-text-muted);background:var(--tgm-db-bg-secondary);border-top:1px solid var(--tgm-db-border)}.tgm-database-manager__no-results{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__no-results p{margin:0}.tgm-database-manager__empty{display:flex;align-items:center;justify-content:center;flex:1;color:var(--tgm-db-text-muted);font-size:14px}.tgm-database-manager__empty p{margin:0}.tgm-database-manager__detail-overlay{position:absolute;inset:0;background:#00000080;display:flex;align-items:center;justify-content:flex-end;z-index:100}.tgm-database-manager__detail-panel{width:480px;max-width:90%;height:100%;background:var(--tgm-db-bg);border-left:1px solid var(--tgm-db-border);box-shadow:-4px 0 16px #0000004d;overflow:hidden}\n"] }]
|
|
271
|
+
}], ctorParameters: () => [{ type: i1.EntitySchemaService }, { type: i2.QueryExecutorService }], propDecorators: { config: [{
|
|
272
|
+
type: Input
|
|
273
|
+
}], containerClass: [{
|
|
274
|
+
type: Input
|
|
275
|
+
}], sidebarClass: [{
|
|
276
|
+
type: Input
|
|
277
|
+
}], mainClass: [{
|
|
278
|
+
type: Input
|
|
279
|
+
}], title: [{
|
|
280
|
+
type: Input
|
|
281
|
+
}], noResultsMessage: [{
|
|
282
|
+
type: Input
|
|
283
|
+
}], loadingMessage: [{
|
|
284
|
+
type: Input
|
|
285
|
+
}], headerTemplate: [{
|
|
286
|
+
type: Input
|
|
287
|
+
}], sidebarHeaderTemplate: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], tabTemplate: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], emptyTemplate: [{
|
|
292
|
+
type: Input
|
|
293
|
+
}], entitySelected: [{
|
|
294
|
+
type: Output
|
|
295
|
+
}], queryExecuted: [{
|
|
296
|
+
type: Output
|
|
297
|
+
}], recordSelected: [{
|
|
298
|
+
type: Output
|
|
299
|
+
}], recordCreated: [{
|
|
300
|
+
type: Output
|
|
301
|
+
}], recordUpdated: [{
|
|
302
|
+
type: Output
|
|
303
|
+
}], recordDeleted: [{
|
|
304
|
+
type: Output
|
|
305
|
+
}], error: [{
|
|
306
|
+
type: Output
|
|
307
|
+
}] } });
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtbWFuYWdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyL2RhdGFiYXNlLW1hbmFnZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEdBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBVy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7OztBQWtCakYsTUFBTSxPQUFPLHdCQUF3QjtJQTRDekI7SUFDQTtJQTVDVixlQUFlO0lBQ04sTUFBTSxHQUEwQixFQUFFLENBQUM7SUFFNUMsc0JBQXNCO0lBQ2IsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNwQixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLFNBQVMsR0FBRyxFQUFF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LHdCQUF3Qjs0RkFBeEIsd0JBQXdCLGtxQkM5Q3JDLCt3TUEySkEsazdJRHpISSxZQUFZLHFnQkFDWixzQkFBc0IsNE5BQ3RCLG9CQUFvQixvTUFDcEIscUJBQXFCLHdRQUNyQixvQkFBb0IsaVpBQ3BCLHVCQUF1QixnSkFDdkIsd0JBQXdCLDZUQUN4QixxQkFBcUI7OzRGQUtaLHdCQUF3QjtrQkFoQnBDLFNBQVM7K0JBQ0Usc0JBQXNCLGNBQ3BCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjtxQkFDdEI7MkhBTVEsTUFBTTtzQkFBZCxLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0ksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERhdGFiYXNlTWFuYWdlckNvbmZpZyxcbiAgRWRpdG9yVGFiLFxuICBFbnRpdHlSZWdpc3RyeUVudHJ5LFxuICBRdWVyeU1vZGVsLFxuICBRdWVyeVJlc3VsdCxcbn0gZnJvbSAnLi4vdHlwZXMvZGF0YWJhc2UtbWFuYWdlci50eXBlcyc7XG5pbXBvcnQgeyBFbnRpdHlTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZW50aXR5LXNjaGVtYS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1ZXJ5RXhlY3V0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnktZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBPYmplY3RCcm93c2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vb2JqZWN0LWJyb3dzZXIvb2JqZWN0LWJyb3dzZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXJ5RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcXVlcnktZWRpdG9yL3F1ZXJ5LWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlcnlUb29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vcXVlcnktdG9vbGJhci9xdWVyeS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXN1bHRzR3JpZENvbXBvbmVudCB9IGZyb20gJy4uL3Jlc3VsdHMtZ3JpZC9yZXN1bHRzLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlU3RydWN0dXJlQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtc3RydWN0dXJlL3RhYmxlLXN0cnVjdHVyZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVEYXRhVmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFibGUtZGF0YS12aWV3ZXIvdGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY29yZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4uL3JlY29yZC1kZXRhaWwvcmVjb3JkLWRldGFpbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Z20tZGF0YWJhc2UtbWFuYWdlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgT2JqZWN0QnJvd3NlckNvbXBvbmVudCxcbiAgICBRdWVyeUVkaXRvckNvbXBvbmVudCxcbiAgICBRdWVyeVRvb2xiYXJDb21wb25lbnQsXG4gICAgUmVzdWx0c0dyaWRDb21wb25lbnQsXG4gICAgVGFibGVTdHJ1Y3R1cmVDb21wb25lbnQsXG4gICAgVGFibGVEYXRhVmlld2VyQ29tcG9uZW50LFxuICAgIFJlY29yZERldGFpbENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFiYXNlLW1hbmFnZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhYmFzZS1tYW5hZ2VyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFiYXNlTWFuYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvLyDilIDilIAgQ29uZmlnIOKUgOKUgFxuICBASW5wdXQoKSBjb25maWc6IERhdGFiYXNlTWFuYWdlckNvbmZpZyA9IHt9O1xuXG4gIC8vIOKUgOKUgCBDU1Mgb3ZlcnJpZGVzIOKUgOKUgFxuICBASW5wdXQoKSBjb250YWluZXJDbGFzcyA9ICcnO1xuICBASW5wdXQoKSBzaWRlYmFyQ2xhc3MgPSAnJztcbiAgQElucHV0KCkgbWFpbkNsYXNzID0gJyc7XG5cbiAgLy8g4pSA4pSAIExhYmVscyDilIDilIBcbiAgQElucHV0KCkgdGl0bGUgPSAnRGF0YWJhc2UgTWFuYWdlcic7XG4gIEBJbnB1dCgpIG5vUmVzdWx0c01lc3NhZ2UgPSAnTm8gcmVzdWx0cyBmb3VuZC4nO1xuICBASW5wdXQoKSBsb2FkaW5nTWVzc2FnZSA9ICdFeGVjdXRpbmcgcXVlcnkuLi4nO1xuXG4gIC8vIOKUgOKUgCBDdXN0b20gdGVtcGxhdGVzIOKUgOKUgFxuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBASW5wdXQoKSBzaWRlYmFySGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx2b2lkPjtcbiAgQElucHV0KCkgdGFiVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogRWRpdG9yVGFiIH0+O1xuICBASW5wdXQoKSBlbXB0eVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgLy8g4pSA4pSAIEV2ZW50cyDilIDilIBcbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxFbnRpdHlSZWdpc3RyeUVudHJ5PigpO1xuICBAT3V0cHV0KCkgcXVlcnlFeGVjdXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8UXVlcnlSZXN1bHQ+KCk7XG4gIEBPdXRwdXQoKSByZWNvcmRTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBlbnRpdHk6IHN0cmluZzsgcmVjb3JkOiBhbnkgfT4oKTtcbiAgQE91dHB1dCgpIHJlY29yZENyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlY29yZFVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlY29yZERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLy8g4pSA4pSAIFN0YXRlIOKUgOKUgFxuICBzZWxlY3RlZEVudGl0eT86IEVudGl0eVJlZ2lzdHJ5RW50cnk7XG4gIHRhYnM6IEVkaXRvclRhYltdID0gW107XG4gIGFjdGl2ZVRhYklkPzogc3RyaW5nO1xuICBxdWVyeVRleHQgPSAnJztcbiAgZXhlY3V0aW5nID0gZmFsc2U7XG4gIGFjdGl2ZVJlc3VsdD86IFF1ZXJ5UmVzdWx0O1xuICBzZWxlY3RlZFJlY29yZD86IGFueTtcbiAgcmVjb3JkTW9kZTogJ3ZpZXcnIHwgJ2VkaXQnIHwgJ2NyZWF0ZScgPSAndmlldyc7XG4gIHNob3dSZWNvcmREZXRhaWwgPSBmYWxzZTtcblxuICBwcml2YXRlIHRhYkNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVudGl0eVNjaGVtYTogRW50aXR5U2NoZW1hU2VydmljZSxcbiAgICBwcml2YXRlIHF1ZXJ5RXhlY3V0b3I6IFF1ZXJ5RXhlY3V0b3JTZXJ2aWNlLFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRRdWVyeVRhYigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgdGhpcy5lbnRpdHlTY2hlbWEuaW52YWxpZGF0ZUNhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvLyDilIDilIAgVGFiIE1hbmFnZW1lbnQg4pSA4pSAXG5cbiAgZ2V0IGFjdGl2ZVRhYigpOiBFZGl0b3JUYWIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnRhYnMuZmluZCh0ID0+IHQuaWQgPT09IHRoaXMuYWN0aXZlVGFiSWQpO1xuICB9XG5cbiAgYWRkUXVlcnlUYWIoKTogdm9pZCB7XG4gICAgY29uc3QgdGFiOiBFZGl0b3JUYWIgPSB7XG4gICAgICBpZDogYHF1ZXJ5LSR7Kyt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHRpdGxlOiBgUXVlcnkgJHt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHR5cGU6ICdxdWVyeScsXG4gICAgICBxdWVyeTogJycsXG4gICAgfTtcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWIuaWQ7XG4gICAgdGhpcy5xdWVyeVRleHQgPSAnJztcbiAgICB0aGlzLmFjdGl2ZVJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFkZFRhYmxlRGF0YVRhYihlbnRpdHk6IEVudGl0eVJlZ2lzdHJ5RW50cnkpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMudGFicy5maW5kKHQgPT4gdC50eXBlID09PSAndGFibGUtZGF0YScgJiYgdC5lbnRpdHlLZXkgPT09IGVudGl0eS5rZXkpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IGV4aXN0aW5nLmlkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWI6IEVkaXRvclRhYiA9IHtcbiAgICAgIGlkOiBgZGF0YS0ke2VudGl0eS5rZXl9LSR7Kyt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHRpdGxlOiBlbnRpdHkubmFtZSxcbiAgICAgIHR5cGU6ICd0YWJsZS1kYXRhJyxcbiAgICAgIGVudGl0eUtleTogZW50aXR5LmtleSxcbiAgICB9O1xuICAgIHRoaXMudGFicy5wdXNoKHRhYik7XG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYi5pZDtcbiAgfVxuXG4gIGFkZFRhYmxlU3RydWN0dXJlVGFiKGVudGl0eTogRW50aXR5UmVnaXN0cnlFbnRyeSk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy50YWJzLmZpbmQodCA9PiB0LnR5cGUgPT09ICd0YWJsZS1zdHJ1Y3R1cmUnICYmIHQuZW50aXR5S2V5ID09PSBlbnRpdHkua2V5KTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBleGlzdGluZy5pZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFiOiBFZGl0b3JUYWIgPSB7XG4gICAgICBpZDogYHN0cnVjdC0ke2VudGl0eS5rZXl9LSR7Kyt0aGlzLnRhYkNvdW50ZXJ9YCxcbiAgICAgIHRpdGxlOiBgJHtlbnRpdHkubmFtZX0gKFN0cnVjdHVyZSlgLFxuICAgICAgdHlwZTogJ3RhYmxlLXN0cnVjdHVyZScsXG4gICAgICBlbnRpdHlLZXk6IGVudGl0eS5rZXksXG4gICAgfTtcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWIuaWQ7XG4gIH1cblxuICBzZWxlY3RUYWIodGFiOiBFZGl0b3JUYWIpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdGFiLmlkO1xuICAgIGlmICh0YWIudHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgdGhpcy5xdWVyeVRleHQgPSB0YWIucXVlcnkgPz8gJyc7XG4gICAgICB0aGlzLmFjdGl2ZVJlc3VsdCA9IHRhYi5yZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VUYWIodGFiOiBFZGl0b3JUYWIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGlkeCA9IHRoaXMudGFicy5pbmRleE9mKHRhYik7XG4gICAgaWYgKGlkeCA8IDApIHJldHVybjtcbiAgICB0aGlzLnRhYnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiSWQgPT09IHRhYi5pZCkge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRoaXMudGFic1tNYXRoLm1pbihpZHgsIHRoaXMudGFicy5sZW5ndGggLSAxKV0/LmlkO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknKSB7XG4gICAgICAgIHRoaXMucXVlcnlUZXh0ID0gdGhpcy5hY3RpdmVUYWIucXVlcnkgPz8gJyc7XG4gICAgICAgIHRoaXMuYWN0aXZlUmVzdWx0ID0gdGhpcy5hY3RpdmVUYWIucmVzdWx0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBFbnRpdHkgU2VsZWN0aW9uIOKUgOKUgFxuXG4gIG9uRW50aXR5U2VsZWN0ZWQoZW50aXR5OiBFbnRpdHlSZWdpc3RyeUVudHJ5KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEVudGl0eSA9IGVudGl0eTtcbiAgICB0aGlzLmVudGl0eVNlbGVjdGVkLmVtaXQoZW50aXR5KTtcbiAgfVxuXG4gIG9uRW50aXR5RG91YmxlQ2xpY2soZW50aXR5OiBFbnRpdHlSZWdpc3RyeUVudHJ5KTogdm9pZCB7XG4gICAgdGhpcy5hZGRUYWJsZURhdGFUYWIoZW50aXR5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBFeGVjdXRpb24g4pSA4pSAXG5cbiAgb25RdWVyeUNoYW5nZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5VGV4dCA9IHRleHQ7XG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknKSB7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5xdWVyeSA9IHRleHQ7XG4gICAgICB0aGlzLmFjdGl2ZVRhYi5kaXJ0eSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgb25FeGVjdXRlKCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY3V0ZVF1ZXJ5KHRoaXMucXVlcnlUZXh0KTtcbiAgfVxuXG4gIG9uRXhlY3V0ZUZyb21FZGl0b3IodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVRleHQgPSB0ZXh0O1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYj8udHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgdGhpcy5hY3RpdmVUYWIucXVlcnkgPSB0ZXh0O1xuICAgIH1cbiAgICB0aGlzLmV4ZWN1dGVRdWVyeSh0ZXh0KTtcbiAgfVxuXG4gIG9uRm9ybWF0KCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnF1ZXJ5RXhlY3V0b3IucGFyc2VRdWVyeSh0aGlzLnF1ZXJ5VGV4dCk7XG4gICAgICB0aGlzLnF1ZXJ5VGV4dCA9IHRoaXMucXVlcnlFeGVjdXRvci5mb3JtYXRRdWVyeShwYXJzZWQpO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiLnF1ZXJ5ID0gdGhpcy5xdWVyeVRleHQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMZWF2ZSBhcyBpcyBpZiBpbnZhbGlkXG4gICAgfVxuICB9XG5cbiAgb25DbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5VGV4dCA9ICcnO1xuICAgIHRoaXMuYWN0aXZlUmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFjdGl2ZVRhYj8udHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgdGhpcy5hY3RpdmVUYWIucXVlcnkgPSAnJztcbiAgICAgIHRoaXMuYWN0aXZlVGFiLnJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYWN0aXZlVGFiLmRpcnR5ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFJlY29yZCBEZXRhaWwg4pSA4pSAXG5cbiAgb25SZWNvcmRDbGljayhyZWNvcmQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5hY3RpdmVUYWI/LmVudGl0eUtleSkgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRSZWNvcmQgPSByZWNvcmQ7XG4gICAgdGhpcy5yZWNvcmRNb2RlID0gJ3ZpZXcnO1xuICAgIHRoaXMuc2hvd1JlY29yZERldGFpbCA9IHRydWU7XG4gICAgdGhpcy5yZWNvcmRTZWxlY3RlZC5lbWl0KHsgZW50aXR5OiB0aGlzLmFjdGl2ZVRhYi5lbnRpdHlLZXksIHJlY29yZCB9KTtcbiAgfVxuXG4gIG9uUmVjb3JkRG91YmxlQ2xpY2socmVjb3JkOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcucmVhZE9ubHkpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkUmVjb3JkID0gcmVjb3JkO1xuICAgIHRoaXMucmVjb3JkTW9kZSA9ICdlZGl0JztcbiAgICB0aGlzLnNob3dSZWNvcmREZXRhaWwgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VSZWNvcmREZXRhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UmVjb3JkRGV0YWlsID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFJlY29yZCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIG9uUmVjb3JkU2F2ZShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRNb2RlID09PSAnY3JlYXRlJykge1xuICAgICAgdGhpcy5yZWNvcmRDcmVhdGVkLmVtaXQoZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVjb3JkVXBkYXRlZC5lbWl0KGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlUmVjb3JkRGV0YWlsKCk7XG4gIH1cblxuICBvblJlY29yZERlbGV0ZShyZWNvcmQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRGVsZXRlZC5lbWl0KHJlY29yZCk7XG4gICAgdGhpcy5jbG9zZVJlY29yZERldGFpbCgpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEhlbHBlcnMg4pSA4pSAXG5cbiAgZ2V0RW50aXR5Rm9yVGFiKHRhYjogRWRpdG9yVGFiKTogRW50aXR5UmVnaXN0cnlFbnRyeSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0YWIuZW50aXR5S2V5KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmVudGl0eVNjaGVtYS5nZXRFbnRpdHlCeUtleSh0YWIuZW50aXR5S2V5LCB0aGlzLmNvbmZpZyk7XG4gIH1cblxuICB0cmFja0J5VGFiSWQoX2luZGV4OiBudW1iZXIsIHRhYjogRWRpdG9yVGFiKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGFiLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBleGVjdXRlUXVlcnkocmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXJhdy50cmltKCkpIHJldHVybjtcblxuICAgIGxldCBxdWVyeTogUXVlcnlNb2RlbDtcbiAgICB0cnkge1xuICAgICAgcXVlcnkgPSB0aGlzLnF1ZXJ5RXhlY3V0b3IucGFyc2VRdWVyeShyYXcpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLmVycm9yLmVtaXQoeyBtZXNzYWdlOiBlcnIubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBdXRvLXBvcHVsYXRlIHF1ZXJ5IGZvciBzZWxlY3RlZCBlbnRpdHlcbiAgICBpZiAodGhpcy5zZWxlY3RlZEVudGl0eSAmJiAhcXVlcnkuZW50aXR5KSB7XG4gICAgICBxdWVyeS5lbnRpdHkgPSB0aGlzLnNlbGVjdGVkRW50aXR5LmtleTtcbiAgICB9XG5cbiAgICB0aGlzLmV4ZWN1dGluZyA9IHRydWU7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlFeGVjdXRvci5leGVjdXRlKHF1ZXJ5LCB0aGlzLmNvbmZpZykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgICAgdGhpcy5hY3RpdmVSZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMuZXhlY3V0aW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYj8udHlwZSA9PT0gJ3F1ZXJ5Jykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVGFiLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRhYi5kaXJ0eSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucXVlcnlFeGVjdXRlZC5lbWl0KHJlc3VsdCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5leGVjdXRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJcIiBbbmdDbGFzc109XCJjb250YWluZXJDbGFzc1wiPlxuICA8IS0tIEhlYWRlciAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlclRlbXBsYXRlOyBlbHNlIGRlZmF1bHRIZWFkZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlcj5cbiAgICA8ZGl2IGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJfX2hlYWRlclwiPlxuICAgICAgPGgzIGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJfX3RpdGxlXCI+e3sgdGl0bGUgfX08L2gzPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fbGF5b3V0XCI+XG4gICAgPCEtLSBTaWRlYmFyOiBPYmplY3QgQnJvd3NlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwidGdtLWRhdGFiYXNlLW1hbmFnZXJfX3NpZGViYXJcIiBbbmdDbGFzc109XCJzaWRlYmFyQ2xhc3NcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaWRlYmFySGVhZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNpZGViYXJIZWFkZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8dGdtLW9iamVjdC1icm93c2VyXG4gICAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgICAgW3NlbGVjdGVkRW50aXR5XT1cInNlbGVjdGVkRW50aXR5XCJcbiAgICAgICAgKHNlbGVjdEVudGl0eSk9XCJvbkVudGl0eVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAoZG91YmxlQ2xpY2tFbnRpdHkpPVwib25FbnRpdHlEb3VibGVDbGljaygkZXZlbnQpXCJcbiAgICAgID48L3RnbS1vYmplY3QtYnJvd3Nlcj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTWFpbiBBcmVhIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fbWFpblwiIFtuZ0NsYXNzXT1cIm1haW5DbGFzc1wiPlxuICAgICAgPCEtLSBUYWJzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWJzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fdGFiLWxpc3RcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IHRyYWNrQnk6IHRyYWNrQnlUYWJJZFwiXG4gICAgICAgICAgICBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWJcIlxuICAgICAgICAgICAgW2NsYXNzLnRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItLWFjdGl2ZV09XCJ0YWIuaWQgPT09IGFjdGl2ZVRhYklkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYWIodGFiKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYlRlbXBsYXRlOyBlbHNlIGRlZmF1bHRUYWJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhYlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogdGFiIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGFiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItaWNvblwiPlxuICAgICAgICAgICAgICAgIHt7IHRhYi50eXBlID09PSAncXVlcnknID8gJyYjMTAwOTU7JyA6ICh0YWIudHlwZSA9PT0gJ3RhYmxlLXN0cnVjdHVyZScgPyAnJiM5Nzc2OycgOiAnJiM5NjM1OycpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fdGFiLXRpdGxlXCI+e3sgdGFiLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItZGlydHlcIiAqbmdJZj1cInRhYi5kaXJ0eVwiPiYjOTY3OTs8L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItY2xvc2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZVRhYih0YWIsICRldmVudClcIlxuICAgICAgICAgICAgICA+JnRpbWVzOzwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX190YWItYWRkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhZGRRdWVyeVRhYigpXCJcbiAgICAgICAgICAgIHRpdGxlPVwiTmV3IFF1ZXJ5IFRhYlwiXG4gICAgICAgICAgPis8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBUYWIgQ29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fY29udGVudFwiPlxuICAgICAgICA8IS0tIEVtcHR5IHN0YXRlIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGl2ZVRhYlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbXB0eVRlbXBsYXRlOyBlbHNlIGRlZmF1bHRFbXB0eVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRFbXB0eT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fZW1wdHlcIj5cbiAgICAgICAgICAgICAgPHA+U2VsZWN0IGFuIGVudGl0eSBmcm9tIHRoZSBzaWRlYmFyIG9yIG9wZW4gYSBuZXcgcXVlcnkgdGFiLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gUXVlcnkgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVGFiPy50eXBlID09PSAncXVlcnknXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19xdWVyeS1hcmVhXCI+XG4gICAgICAgICAgICA8dGdtLXF1ZXJ5LWVkaXRvclxuICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcnlUZXh0XCJcbiAgICAgICAgICAgICAgW2VuYWJsZU1vbmFjb109XCJjb25maWcuZW5hYmxlTW9uYWNvICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgIFtlbnRpdHlTY2hlbWFdPVwic2VsZWN0ZWRFbnRpdHlcIlxuICAgICAgICAgICAgICBbbW9uYWNvT3B0aW9uc109XCJjb25maWcubW9uYWNvT3B0aW9uc1wiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblF1ZXJ5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAoZXhlY3V0ZSk9XCJvbkV4ZWN1dGVGcm9tRWRpdG9yKCRldmVudClcIlxuICAgICAgICAgICAgPjwvdGdtLXF1ZXJ5LWVkaXRvcj5cblxuICAgICAgICAgICAgPHRnbS1xdWVyeS10b29sYmFyXG4gICAgICAgICAgICAgIFtleGVjdXRpbmddPVwiZXhlY3V0aW5nXCJcbiAgICAgICAgICAgICAgKGV4ZWN1dGUpPVwib25FeGVjdXRlKClcIlxuICAgICAgICAgICAgICAoZm9ybWF0KT1cIm9uRm9ybWF0KClcIlxuICAgICAgICAgICAgICAoY2xlYXIpPVwib25DbGVhcigpXCJcbiAgICAgICAgICAgID48L3RnbS1xdWVyeS10b29sYmFyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19yZXN1bHRzXCI+XG4gICAgICAgICAgICA8dGdtLXJlc3VsdHMtZ3JpZFxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVJlc3VsdFwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cImFjdGl2ZVJlc3VsdC5kYXRhXCJcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwic2VsZWN0ZWRFbnRpdHk/LmZpZWxkcyB8fCBbXVwiXG4gICAgICAgICAgICAgIFt0b3RhbF09XCJhY3RpdmVSZXN1bHQudG90YWxcIlxuICAgICAgICAgICAgICBbcGFnZV09XCJhY3RpdmVSZXN1bHQucGFnZVwiXG4gICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJhY3RpdmVSZXN1bHQucGFnZVNpemVcIlxuICAgICAgICAgICAgICBbbG9hZGluZ109XCJleGVjdXRpbmdcIlxuICAgICAgICAgICAgICBbbm9SZXN1bHRzTWVzc2FnZV09XCJub1Jlc3VsdHNNZXNzYWdlXCJcbiAgICAgICAgICAgICAgW2xvYWRpbmdNZXNzYWdlXT1cImxvYWRpbmdNZXNzYWdlXCJcbiAgICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uUmVjb3JkQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJlY29yZERvdWJsZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgPjwvdGdtLXJlc3VsdHMtZ3JpZD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19yZXN1bHQtaW5mb1wiICpuZ0lmPVwiYWN0aXZlUmVzdWx0XCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGFjdGl2ZVJlc3VsdC50b3RhbCB9fSByb3dzICZtaWRkb3Q7IHt7IGFjdGl2ZVJlc3VsdC5leGVjdXRpb25UaW1lIH19bXM8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnbS1kYXRhYmFzZS1tYW5hZ2VyX19uby1yZXN1bHRzXCIgKm5nSWY9XCIhYWN0aXZlUmVzdWx0ICYmICFleGVjdXRpbmdcIj5cbiAgICAgICAgICAgICAgPHA+RXhlY3V0ZSBhIHF1ZXJ5IHRvIHNlZSByZXN1bHRzLjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFRhYmxlIERhdGEgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlVGFiPy50eXBlID09PSAndGFibGUtZGF0YSdcIj5cbiAgICAgICAgICA8dGdtLXRhYmxlLWRhdGEtdmlld2VyXG4gICAgICAgICAgICBbZW50aXR5S2V5XT1cImFjdGl2ZVRhYi5lbnRpdHlLZXkhXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiY29uZmlnXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJjb25maWcuZGVmYXVsdFBhZ2VTaXplIHx8IDI1XCJcbiAgICAgICAgICAgIFtzaG93Q3JlYXRlXT1cIiFjb25maWcucmVhZE9ubHlcIlxuICAgICAgICAgICAgW3Nob3dEZWxldGVdPVwiIWNvbmZpZy5yZWFkT25seVwiXG4gICAgICAgICAgICAodmlldyk9XCJvblJlY29yZENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKGVkaXQpPVwib25SZWNvcmREb3VibGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICA+PC90Z20tdGFibGUtZGF0YS12aWV3ZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGFibGUgU3RydWN0dXJlIFRhYiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVRhYj8udHlwZSA9PT0gJ3RhYmxlLXN0cnVjdHVyZSdcIj5cbiAgICAgICAgICA8dGdtLXRhYmxlLXN0cnVjdHVyZVxuICAgICAgICAgICAgW2VudGl0eV09XCJnZXRFbnRpdHlGb3JUYWIoYWN0aXZlVGFiISlcIlxuICAgICAgICAgID48L3RnbS10YWJsZS1zdHJ1Y3R1cmU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmVjb3JkIERldGFpbCBQYW5lbCAob3ZlcmxheSkgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fZGV0YWlsLW92ZXJsYXlcIiAqbmdJZj1cInNob3dSZWNvcmREZXRhaWxcIiAoY2xpY2spPVwiY2xvc2VSZWNvcmREZXRhaWwoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0Z20tZGF0YWJhc2UtbWFuYWdlcl9fZGV0YWlsLXBhbmVsXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgPHRnbS1yZWNvcmQtZGV0YWlsXG4gICAgICAgIFtyZWNvcmRdPVwic2VsZWN0ZWRSZWNvcmRcIlxuICAgICAgICBbZW50aXR5XT1cImdldEVudGl0eUZvclRhYihhY3RpdmVUYWIhKSB8fCBzZWxlY3RlZEVudGl0eVwiXG4gICAgICAgIFttb2RlXT1cInJlY29yZE1vZGVcIlxuICAgICAgICAoc2F2ZSk9XCJvblJlY29yZFNhdmUoJGV2ZW50KVwiXG4gICAgICAgIChjYW5jZWwpPVwiY2xvc2VSZWNvcmREZXRhaWwoKVwiXG4gICAgICAgIChkZWxldGUpPVwib25SZWNvcmREZWxldGUoJGV2ZW50KVwiXG4gICAgICA+PC90Z20tcmVjb3JkLWRldGFpbD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { DatabaseManagerComponent } from './database-manager/database-manager.component';
|
|
4
|
+
import { ObjectBrowserComponent } from './object-browser/object-browser.component';
|
|
5
|
+
import { QueryEditorComponent } from './query-editor/query-editor.component';
|
|
6
|
+
import { QueryToolbarComponent } from './query-toolbar/query-toolbar.component';
|
|
7
|
+
import { ResultsGridComponent } from './results-grid/results-grid.component';
|
|
8
|
+
import { TableStructureComponent } from './table-structure/table-structure.component';
|
|
9
|
+
import { TableDataViewerComponent } from './table-data-viewer/table-data-viewer.component';
|
|
10
|
+
import { RecordDetailComponent } from './record-detail/record-detail.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export class DatabaseManagerModule {
|
|
13
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
14
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, imports: [CommonModule,
|
|
15
|
+
DatabaseManagerComponent,
|
|
16
|
+
ObjectBrowserComponent,
|
|
17
|
+
QueryEditorComponent,
|
|
18
|
+
QueryToolbarComponent,
|
|
19
|
+
ResultsGridComponent,
|
|
20
|
+
TableStructureComponent,
|
|
21
|
+
TableDataViewerComponent,
|
|
22
|
+
RecordDetailComponent], exports: [DatabaseManagerComponent,
|
|
23
|
+
ObjectBrowserComponent,
|
|
24
|
+
QueryEditorComponent,
|
|
25
|
+
QueryToolbarComponent,
|
|
26
|
+
ResultsGridComponent,
|
|
27
|
+
TableStructureComponent,
|
|
28
|
+
TableDataViewerComponent,
|
|
29
|
+
RecordDetailComponent] });
|
|
30
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, imports: [CommonModule,
|
|
31
|
+
DatabaseManagerComponent,
|
|
32
|
+
ObjectBrowserComponent,
|
|
33
|
+
QueryEditorComponent,
|
|
34
|
+
QueryToolbarComponent,
|
|
35
|
+
ResultsGridComponent,
|
|
36
|
+
TableStructureComponent,
|
|
37
|
+
TableDataViewerComponent,
|
|
38
|
+
RecordDetailComponent] });
|
|
39
|
+
}
|
|
40
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DatabaseManagerModule, decorators: [{
|
|
41
|
+
type: NgModule,
|
|
42
|
+
args: [{
|
|
43
|
+
imports: [
|
|
44
|
+
CommonModule,
|
|
45
|
+
DatabaseManagerComponent,
|
|
46
|
+
ObjectBrowserComponent,
|
|
47
|
+
QueryEditorComponent,
|
|
48
|
+
QueryToolbarComponent,
|
|
49
|
+
ResultsGridComponent,
|
|
50
|
+
TableStructureComponent,
|
|
51
|
+
TableDataViewerComponent,
|
|
52
|
+
RecordDetailComponent,
|
|
53
|
+
],
|
|
54
|
+
exports: [
|
|
55
|
+
DatabaseManagerComponent,
|
|
56
|
+
ObjectBrowserComponent,
|
|
57
|
+
QueryEditorComponent,
|
|
58
|
+
QueryToolbarComponent,
|
|
59
|
+
ResultsGridComponent,
|
|
60
|
+
TableStructureComponent,
|
|
61
|
+
TableDataViewerComponent,
|
|
62
|
+
RecordDetailComponent,
|
|
63
|
+
],
|
|
64
|
+
}]
|
|
65
|
+
}] });
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtbWFuYWdlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUN6RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUF5QmhGLE1BQU0sT0FBTyxxQkFBcUI7d0dBQXJCLHFCQUFxQjt5R0FBckIscUJBQXFCLFlBckI5QixZQUFZO1lBQ1osd0JBQXdCO1lBQ3hCLHNCQUFzQjtZQUN0QixvQkFBb0I7WUFDcEIscUJBQXFCO1lBQ3JCLG9CQUFvQjtZQUNwQix1QkFBdUI7WUFDdkIsd0JBQXdCO1lBQ3hCLHFCQUFxQixhQUdyQix3QkFBd0I7WUFDeEIsc0JBQXNCO1lBQ3RCLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIsb0JBQW9CO1lBQ3BCLHVCQUF1QjtZQUN2Qix3QkFBd0I7WUFDeEIscUJBQXFCO3lHQUdaLHFCQUFxQixZQXJCOUIsWUFBWTtZQUNaLHdCQUF3QjtZQUN4QixzQkFBc0I7WUFDdEIsb0JBQW9CO1lBQ3BCLHFCQUFxQjtZQUNyQixvQkFBb0I7WUFDcEIsdUJBQXVCO1lBQ3ZCLHdCQUF3QjtZQUN4QixxQkFBcUI7OzRGQWFaLHFCQUFxQjtrQkF2QmpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLFlBQVk7d0JBQ1osd0JBQXdCO3dCQUN4QixzQkFBc0I7d0JBQ3RCLG9CQUFvQjt3QkFDcEIscUJBQXFCO3dCQUNyQixvQkFBb0I7d0JBQ3BCLHVCQUF1Qjt3QkFDdkIsd0JBQXdCO3dCQUN4QixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCx3QkFBd0I7d0JBQ3hCLHNCQUFzQjt3QkFDdEIsb0JBQW9CO3dCQUNwQixxQkFBcUI7d0JBQ3JCLG9CQUFvQjt3QkFDcEIsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLHFCQUFxQjtxQkFDdEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERhdGFiYXNlTWFuYWdlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0YWJhc2UtbWFuYWdlci9kYXRhYmFzZS1tYW5hZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPYmplY3RCcm93c2VyQ29tcG9uZW50IH0gZnJvbSAnLi9vYmplY3QtYnJvd3Nlci9vYmplY3QtYnJvd3Nlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXVlcnlFZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL3F1ZXJ5LWVkaXRvci9xdWVyeS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFF1ZXJ5VG9vbGJhckNvbXBvbmVudCB9IGZyb20gJy4vcXVlcnktdG9vbGJhci9xdWVyeS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXN1bHRzR3JpZENvbXBvbmVudCB9IGZyb20gJy4vcmVzdWx0cy1ncmlkL3Jlc3VsdHMtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVTdHJ1Y3R1cmVDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXN0cnVjdHVyZS90YWJsZS1zdHJ1Y3R1cmUuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlRGF0YVZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtZGF0YS12aWV3ZXIvdGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFJlY29yZERldGFpbENvbXBvbmVudCB9IGZyb20gJy4vcmVjb3JkLWRldGFpbC9yZWNvcmQtZGV0YWlsLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRGF0YWJhc2VNYW5hZ2VyQ29tcG9uZW50LFxuICAgIE9iamVjdEJyb3dzZXJDb21wb25lbnQsXG4gICAgUXVlcnlFZGl0b3JDb21wb25lbnQsXG4gICAgUXVlcnlUb29sYmFyQ29tcG9uZW50LFxuICAgIFJlc3VsdHNHcmlkQ29tcG9uZW50LFxuICAgIFRhYmxlU3RydWN0dXJlQ29tcG9uZW50LFxuICAgIFRhYmxlRGF0YVZpZXdlckNvbXBvbmVudCxcbiAgICBSZWNvcmREZXRhaWxDb21wb25lbnQsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBEYXRhYmFzZU1hbmFnZXJDb21wb25lbnQsXG4gICAgT2JqZWN0QnJvd3NlckNvbXBvbmVudCxcbiAgICBRdWVyeUVkaXRvckNvbXBvbmVudCxcbiAgICBRdWVyeVRvb2xiYXJDb21wb25lbnQsXG4gICAgUmVzdWx0c0dyaWRDb21wb25lbnQsXG4gICAgVGFibGVTdHJ1Y3R1cmVDb21wb25lbnQsXG4gICAgVGFibGVEYXRhVmlld2VyQ29tcG9uZW50LFxuICAgIFJlY29yZERldGFpbENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YWJhc2VNYW5hZ2VyTW9kdWxlIHt9XG4iXX0=
|