@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
package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { ResultsGridComponent } from '../results-grid/results-grid.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../services/query-executor.service";
|
|
7
|
+
import * as i2 from "../services/entity-schema.service";
|
|
8
|
+
import * as i3 from "@angular/common";
|
|
9
|
+
import * as i4 from "@angular/forms";
|
|
10
|
+
export class TableDataViewerComponent {
|
|
11
|
+
queryExecutor;
|
|
12
|
+
entitySchema;
|
|
13
|
+
// ── Data ──
|
|
14
|
+
entityKey;
|
|
15
|
+
config;
|
|
16
|
+
pageSize = 25;
|
|
17
|
+
// ── Behavior ──
|
|
18
|
+
showFilters = true;
|
|
19
|
+
showCreate = false;
|
|
20
|
+
showDelete = false;
|
|
21
|
+
// ── Labels ──
|
|
22
|
+
emptyMessage = 'No records found.';
|
|
23
|
+
loadingMessage = 'Loading data...';
|
|
24
|
+
// ── Custom templates ──
|
|
25
|
+
rowTemplate;
|
|
26
|
+
filterTemplate;
|
|
27
|
+
toolbarTemplate;
|
|
28
|
+
// ── Events ──
|
|
29
|
+
view = new EventEmitter();
|
|
30
|
+
edit = new EventEmitter();
|
|
31
|
+
delete = new EventEmitter();
|
|
32
|
+
create = new EventEmitter();
|
|
33
|
+
pageChange = new EventEmitter();
|
|
34
|
+
filterChange = new EventEmitter();
|
|
35
|
+
entity;
|
|
36
|
+
data = [];
|
|
37
|
+
total = 0;
|
|
38
|
+
page = 0;
|
|
39
|
+
loading = false;
|
|
40
|
+
sortField = 'id';
|
|
41
|
+
sortOrder = 'DESC';
|
|
42
|
+
filters = {};
|
|
43
|
+
executionTime = 0;
|
|
44
|
+
subscription;
|
|
45
|
+
constructor(queryExecutor, entitySchema) {
|
|
46
|
+
this.queryExecutor = queryExecutor;
|
|
47
|
+
this.entitySchema = entitySchema;
|
|
48
|
+
}
|
|
49
|
+
ngOnChanges(changes) {
|
|
50
|
+
if (changes['entityKey'] && this.entityKey) {
|
|
51
|
+
this.entity = this.entitySchema.getEntityByKey(this.entityKey, this.config);
|
|
52
|
+
this.page = 0;
|
|
53
|
+
this.filters = {};
|
|
54
|
+
this.fetchData();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
ngOnDestroy() {
|
|
58
|
+
this.subscription?.unsubscribe();
|
|
59
|
+
}
|
|
60
|
+
get columns() {
|
|
61
|
+
return this.entity?.fields.filter(f => !f.hidden) ?? [];
|
|
62
|
+
}
|
|
63
|
+
onSort(event) {
|
|
64
|
+
this.sortField = event.field;
|
|
65
|
+
this.sortOrder = event.order;
|
|
66
|
+
this.fetchData();
|
|
67
|
+
}
|
|
68
|
+
onPageChange(page) {
|
|
69
|
+
this.page = page;
|
|
70
|
+
this.pageChange.emit(page);
|
|
71
|
+
this.fetchData();
|
|
72
|
+
}
|
|
73
|
+
onView(row) {
|
|
74
|
+
this.view.emit(row);
|
|
75
|
+
}
|
|
76
|
+
onEdit(row) {
|
|
77
|
+
this.edit.emit(row);
|
|
78
|
+
}
|
|
79
|
+
onDelete(row) {
|
|
80
|
+
this.delete.emit(row);
|
|
81
|
+
}
|
|
82
|
+
onCreate() {
|
|
83
|
+
this.create.emit();
|
|
84
|
+
}
|
|
85
|
+
onFilterChange(field, value) {
|
|
86
|
+
if (value === '' || value == null) {
|
|
87
|
+
delete this.filters[field];
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
this.filters[field] = value;
|
|
91
|
+
}
|
|
92
|
+
this.page = 0;
|
|
93
|
+
this.filterChange.emit(this.filters);
|
|
94
|
+
this.fetchData();
|
|
95
|
+
}
|
|
96
|
+
refresh() {
|
|
97
|
+
this.fetchData();
|
|
98
|
+
}
|
|
99
|
+
fetchData() {
|
|
100
|
+
if (!this.entityKey || !this.entity)
|
|
101
|
+
return;
|
|
102
|
+
this.loading = true;
|
|
103
|
+
this.subscription?.unsubscribe();
|
|
104
|
+
this.subscription = this.queryExecutor.execute({
|
|
105
|
+
entity: this.entityKey,
|
|
106
|
+
filters: Object.keys(this.filters).length > 0 ? this.filters : undefined,
|
|
107
|
+
sort: this.sortField,
|
|
108
|
+
order: this.sortOrder,
|
|
109
|
+
page: this.page,
|
|
110
|
+
pageSize: this.pageSize,
|
|
111
|
+
}, this.config).subscribe({
|
|
112
|
+
next: (result) => {
|
|
113
|
+
this.data = result.data;
|
|
114
|
+
this.total = result.total;
|
|
115
|
+
this.executionTime = result.executionTime;
|
|
116
|
+
this.loading = false;
|
|
117
|
+
},
|
|
118
|
+
error: () => {
|
|
119
|
+
this.data = [];
|
|
120
|
+
this.total = 0;
|
|
121
|
+
this.loading = false;
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableDataViewerComponent, deps: [{ token: i1.QueryExecutorService }, { token: i2.EntitySchemaService }], target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TableDataViewerComponent, isStandalone: true, selector: "tgm-table-data-viewer", inputs: { entityKey: "entityKey", config: "config", pageSize: "pageSize", showFilters: "showFilters", showCreate: "showCreate", showDelete: "showDelete", emptyMessage: "emptyMessage", loadingMessage: "loadingMessage", rowTemplate: "rowTemplate", filterTemplate: "filterTemplate", toolbarTemplate: "toolbarTemplate" }, outputs: { view: "view", edit: "edit", delete: "delete", create: "create", pageChange: "pageChange", filterChange: "filterChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tgm-table-data-viewer\">\n <!-- Toolbar -->\n <div class=\"tgm-table-data-viewer__toolbar\">\n <ng-container *ngIf=\"toolbarTemplate; else defaultToolbar\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultToolbar>\n <div class=\"tgm-table-data-viewer__toolbar-left\">\n <span class=\"tgm-table-data-viewer__entity-name\" *ngIf=\"entity\">\n {{ entity.name }}\n </span>\n <span class=\"tgm-table-data-viewer__stats\" *ngIf=\"!loading && total > 0\">\n {{ total }} records ({{ executionTime }}ms)\n </span>\n </div>\n <div class=\"tgm-table-data-viewer__toolbar-right\">\n <button\n class=\"tgm-db-btn tgm-db-btn--ghost tgm-db-btn--sm\"\n (click)=\"refresh()\"\n [disabled]=\"loading\"\n >Refresh</button>\n <button\n *ngIf=\"showCreate\"\n class=\"tgm-db-btn tgm-db-btn--primary tgm-db-btn--sm\"\n (click)=\"onCreate()\"\n >+ New</button>\n </div>\n </ng-template>\n </div>\n\n <!-- Filters -->\n <div class=\"tgm-table-data-viewer__filters\" *ngIf=\"showFilters && entity\">\n <ng-container *ngIf=\"filterTemplate; else defaultFilters\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultFilters>\n <div class=\"tgm-table-data-viewer__filter-bar\">\n <ng-container *ngFor=\"let field of columns | slice:0:5\">\n <div class=\"tgm-table-data-viewer__filter-item\" *ngIf=\"field.filterable !== false\">\n <label class=\"tgm-table-data-viewer__filter-label\">{{ field.label }}</label>\n <ng-container [ngSwitch]=\"field.type\">\n <select\n *ngSwitchCase=\"'enum'\"\n class=\"tgm-table-data-viewer__filter-input\"\n (change)=\"onFilterChange(field.name, $any($event.target).value)\"\n >\n <option value=\"\">All</option>\n <option *ngFor=\"let val of field.enumValues\" [value]=\"val\">{{ val }}</option>\n </select>\n <select\n *ngSwitchCase=\"'boolean'\"\n class=\"tgm-table-data-viewer__filter-input\"\n (change)=\"onFilterChange(field.name, $any($event.target).value)\"\n >\n <option value=\"\">All</option>\n <option value=\"true\">Yes</option>\n <option value=\"false\">No</option>\n </select>\n <input\n *ngSwitchDefault\n type=\"text\"\n class=\"tgm-table-data-viewer__filter-input\"\n [placeholder]=\"'Filter ' + field.label\"\n (input)=\"onFilterChange(field.name, $any($event.target).value)\"\n />\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n\n <!-- Results Grid (reuses results-grid via inline rendering) -->\n <div class=\"tgm-table-data-viewer__grid\">\n <tgm-results-grid\n [data]=\"data\"\n [columns]=\"columns\"\n [total]=\"total\"\n [page]=\"page\"\n [pageSize]=\"pageSize\"\n [loading]=\"loading\"\n [sortField]=\"sortField\"\n [sortOrder]=\"sortOrder\"\n [noResultsMessage]=\"emptyMessage\"\n [loadingMessage]=\"loadingMessage\"\n (sort)=\"onSort($event)\"\n (pageChange)=\"onPageChange($event)\"\n (rowClick)=\"onView($event)\"\n (rowDoubleClick)=\"onEdit($event)\"\n ></tgm-results-grid>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;overflow:hidden}.tgm-table-data-viewer{display:flex;flex-direction:column;height:100%}.tgm-table-data-viewer__toolbar{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm, 8px) var(--tgm-db-spacing, 16px);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05))}.tgm-table-data-viewer__toolbar-left{display:flex;align-items:center;gap:12px}.tgm-table-data-viewer__toolbar-right{display:flex;align-items:center;gap:6px}.tgm-table-data-viewer__entity-name{font-size:14px;font-weight:600;color:var(--tgm-db-text, #e5e7eb)}.tgm-table-data-viewer__stats{font-size:12px;color:var(--tgm-db-text-muted, #6b7280)}.tgm-table-data-viewer__filters{border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-table-data-viewer__filter-bar{display:flex;gap:8px;padding:var(--tgm-db-spacing-sm, 8px) var(--tgm-db-spacing, 16px);overflow-x:auto;flex-wrap:nowrap}.tgm-table-data-viewer__filter-item{display:flex;flex-direction:column;gap:2px;min-width:120px}.tgm-table-data-viewer__filter-label{font-size:11px;color:var(--tgm-db-text-muted, #6b7280);white-space:nowrap}.tgm-table-data-viewer__filter-input{padding:4px 8px;background:var(--tgm-db-bg, #1e1e2e);border:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));border-radius:var(--tgm-db-radius-sm, 4px);color:var(--tgm-db-text, #e5e7eb);font-size:12px;font-family:var(--tgm-db-font-family, inherit);outline:none}.tgm-table-data-viewer__filter-input:focus{border-color:var(--tgm-db-primary, #3b82f6)}.tgm-table-data-viewer__filter-input option{background:var(--tgm-db-bg, #1e1e2e);color:var(--tgm-db-text, #e5e7eb)}.tgm-table-data-viewer__grid{flex:1;min-height:0}.tgm-db-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:none;border-radius:var(--tgm-db-radius-sm, 4px);cursor:pointer;transition:background .15s;font-family:var(--tgm-db-font-family, inherit);white-space:nowrap}.tgm-db-btn--sm{padding:4px 10px;font-size:12px}.tgm-db-btn--primary{background:var(--tgm-db-primary, #3b82f6);color:#fff;font-weight:500}.tgm-db-btn--primary:hover:not(:disabled){background:var(--tgm-db-primary-hover, #2563eb)}.tgm-db-btn--ghost{background:transparent;color:var(--tgm-db-text-secondary, #9ca3af)}.tgm-db-btn--ghost:hover:not(:disabled){background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08));color:var(--tgm-db-text, #e5e7eb)}.tgm-db-btn:disabled{opacity:.5;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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"] }] });
|
|
127
|
+
}
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableDataViewerComponent, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ selector: 'tgm-table-data-viewer', standalone: true, imports: [CommonModule, FormsModule, ResultsGridComponent], template: "<div class=\"tgm-table-data-viewer\">\n <!-- Toolbar -->\n <div class=\"tgm-table-data-viewer__toolbar\">\n <ng-container *ngIf=\"toolbarTemplate; else defaultToolbar\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultToolbar>\n <div class=\"tgm-table-data-viewer__toolbar-left\">\n <span class=\"tgm-table-data-viewer__entity-name\" *ngIf=\"entity\">\n {{ entity.name }}\n </span>\n <span class=\"tgm-table-data-viewer__stats\" *ngIf=\"!loading && total > 0\">\n {{ total }} records ({{ executionTime }}ms)\n </span>\n </div>\n <div class=\"tgm-table-data-viewer__toolbar-right\">\n <button\n class=\"tgm-db-btn tgm-db-btn--ghost tgm-db-btn--sm\"\n (click)=\"refresh()\"\n [disabled]=\"loading\"\n >Refresh</button>\n <button\n *ngIf=\"showCreate\"\n class=\"tgm-db-btn tgm-db-btn--primary tgm-db-btn--sm\"\n (click)=\"onCreate()\"\n >+ New</button>\n </div>\n </ng-template>\n </div>\n\n <!-- Filters -->\n <div class=\"tgm-table-data-viewer__filters\" *ngIf=\"showFilters && entity\">\n <ng-container *ngIf=\"filterTemplate; else defaultFilters\">\n <ng-container *ngTemplateOutlet=\"filterTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultFilters>\n <div class=\"tgm-table-data-viewer__filter-bar\">\n <ng-container *ngFor=\"let field of columns | slice:0:5\">\n <div class=\"tgm-table-data-viewer__filter-item\" *ngIf=\"field.filterable !== false\">\n <label class=\"tgm-table-data-viewer__filter-label\">{{ field.label }}</label>\n <ng-container [ngSwitch]=\"field.type\">\n <select\n *ngSwitchCase=\"'enum'\"\n class=\"tgm-table-data-viewer__filter-input\"\n (change)=\"onFilterChange(field.name, $any($event.target).value)\"\n >\n <option value=\"\">All</option>\n <option *ngFor=\"let val of field.enumValues\" [value]=\"val\">{{ val }}</option>\n </select>\n <select\n *ngSwitchCase=\"'boolean'\"\n class=\"tgm-table-data-viewer__filter-input\"\n (change)=\"onFilterChange(field.name, $any($event.target).value)\"\n >\n <option value=\"\">All</option>\n <option value=\"true\">Yes</option>\n <option value=\"false\">No</option>\n </select>\n <input\n *ngSwitchDefault\n type=\"text\"\n class=\"tgm-table-data-viewer__filter-input\"\n [placeholder]=\"'Filter ' + field.label\"\n (input)=\"onFilterChange(field.name, $any($event.target).value)\"\n />\n </ng-container>\n </div>\n </ng-container>\n </div>\n </ng-template>\n </div>\n\n <!-- Results Grid (reuses results-grid via inline rendering) -->\n <div class=\"tgm-table-data-viewer__grid\">\n <tgm-results-grid\n [data]=\"data\"\n [columns]=\"columns\"\n [total]=\"total\"\n [page]=\"page\"\n [pageSize]=\"pageSize\"\n [loading]=\"loading\"\n [sortField]=\"sortField\"\n [sortOrder]=\"sortOrder\"\n [noResultsMessage]=\"emptyMessage\"\n [loadingMessage]=\"loadingMessage\"\n (sort)=\"onSort($event)\"\n (pageChange)=\"onPageChange($event)\"\n (rowClick)=\"onView($event)\"\n (rowDoubleClick)=\"onEdit($event)\"\n ></tgm-results-grid>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;overflow:hidden}.tgm-table-data-viewer{display:flex;flex-direction:column;height:100%}.tgm-table-data-viewer__toolbar{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm, 8px) var(--tgm-db-spacing, 16px);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05))}.tgm-table-data-viewer__toolbar-left{display:flex;align-items:center;gap:12px}.tgm-table-data-viewer__toolbar-right{display:flex;align-items:center;gap:6px}.tgm-table-data-viewer__entity-name{font-size:14px;font-weight:600;color:var(--tgm-db-text, #e5e7eb)}.tgm-table-data-viewer__stats{font-size:12px;color:var(--tgm-db-text-muted, #6b7280)}.tgm-table-data-viewer__filters{border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-table-data-viewer__filter-bar{display:flex;gap:8px;padding:var(--tgm-db-spacing-sm, 8px) var(--tgm-db-spacing, 16px);overflow-x:auto;flex-wrap:nowrap}.tgm-table-data-viewer__filter-item{display:flex;flex-direction:column;gap:2px;min-width:120px}.tgm-table-data-viewer__filter-label{font-size:11px;color:var(--tgm-db-text-muted, #6b7280);white-space:nowrap}.tgm-table-data-viewer__filter-input{padding:4px 8px;background:var(--tgm-db-bg, #1e1e2e);border:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));border-radius:var(--tgm-db-radius-sm, 4px);color:var(--tgm-db-text, #e5e7eb);font-size:12px;font-family:var(--tgm-db-font-family, inherit);outline:none}.tgm-table-data-viewer__filter-input:focus{border-color:var(--tgm-db-primary, #3b82f6)}.tgm-table-data-viewer__filter-input option{background:var(--tgm-db-bg, #1e1e2e);color:var(--tgm-db-text, #e5e7eb)}.tgm-table-data-viewer__grid{flex:1;min-height:0}.tgm-db-btn{display:inline-flex;align-items:center;justify-content:center;gap:4px;border:none;border-radius:var(--tgm-db-radius-sm, 4px);cursor:pointer;transition:background .15s;font-family:var(--tgm-db-font-family, inherit);white-space:nowrap}.tgm-db-btn--sm{padding:4px 10px;font-size:12px}.tgm-db-btn--primary{background:var(--tgm-db-primary, #3b82f6);color:#fff;font-weight:500}.tgm-db-btn--primary:hover:not(:disabled){background:var(--tgm-db-primary-hover, #2563eb)}.tgm-db-btn--ghost{background:transparent;color:var(--tgm-db-text-secondary, #9ca3af)}.tgm-db-btn--ghost:hover:not(:disabled){background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08));color:var(--tgm-db-text, #e5e7eb)}.tgm-db-btn:disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
131
|
+
}], ctorParameters: () => [{ type: i1.QueryExecutorService }, { type: i2.EntitySchemaService }], propDecorators: { entityKey: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], config: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], pageSize: [{
|
|
136
|
+
type: Input
|
|
137
|
+
}], showFilters: [{
|
|
138
|
+
type: Input
|
|
139
|
+
}], showCreate: [{
|
|
140
|
+
type: Input
|
|
141
|
+
}], showDelete: [{
|
|
142
|
+
type: Input
|
|
143
|
+
}], emptyMessage: [{
|
|
144
|
+
type: Input
|
|
145
|
+
}], loadingMessage: [{
|
|
146
|
+
type: Input
|
|
147
|
+
}], rowTemplate: [{
|
|
148
|
+
type: Input
|
|
149
|
+
}], filterTemplate: [{
|
|
150
|
+
type: Input
|
|
151
|
+
}], toolbarTemplate: [{
|
|
152
|
+
type: Input
|
|
153
|
+
}], view: [{
|
|
154
|
+
type: Output
|
|
155
|
+
}], edit: [{
|
|
156
|
+
type: Output
|
|
157
|
+
}], delete: [{
|
|
158
|
+
type: Output
|
|
159
|
+
}], create: [{
|
|
160
|
+
type: Output
|
|
161
|
+
}], pageChange: [{
|
|
162
|
+
type: Output
|
|
163
|
+
}], filterChange: [{
|
|
164
|
+
type: Output
|
|
165
|
+
}] } });
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvdGFibGUtZGF0YS12aWV3ZXIvdGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvdGFibGUtZGF0YS12aWV3ZXIvdGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7Ozs7QUFTOUUsTUFBTSxPQUFPLHdCQUF3QjtJQXlDekI7SUFDQTtJQXpDVixhQUFhO0lBQ0osU0FBUyxDQUFVO0lBQ25CLE1BQU0sQ0FBeUI7SUFDL0IsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUV2QixpQkFBaUI7SUFDUixXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ25CLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUU1QixlQUFlO0lBQ04sWUFBWSxHQUFHLG1CQUFtQixDQUFDO0lBQ25DLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQztJQUU1Qyx5QkFBeUI7SUFDaEIsV0FBVyxDQUFvQjtJQUMvQixjQUFjLENBQW9CO0lBQ2xDLGVBQWUsQ0FBb0I7SUFFNUMsZUFBZTtJQUNMLElBQUksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBQy9CLElB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Q0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDdkIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBbklVLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLHlpQkN6QnJDLG9tSEE0RkEsZ2hGRHZFWSxZQUFZLHV1QkFBRSxXQUFXLDRPQUFFLG9CQUFvQjs7NEZBSTlDLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FDckIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQzsySEFNakQsU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0ksSUFBSTtzQkFBYixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbnRpdHlSZWdpc3RyeUVudHJ5LCBFbnRpdHlGaWVsZE1ldGEsIFF1ZXJ5UmVzdWx0LCBEYXRhYmFzZU1hbmFnZXJDb25maWcgfSBmcm9tICcuLi90eXBlcy9kYXRhYmFzZS1tYW5hZ2VyLnR5cGVzJztcbmltcG9ydCB7IFF1ZXJ5RXhlY3V0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcXVlcnktZXhlY3V0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFbnRpdHlTY2hlbWFTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZW50aXR5LXNjaGVtYS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3VsdHNHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVzdWx0cy1ncmlkL3Jlc3VsdHMtZ3JpZC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Z20tdGFibGUtZGF0YS12aWV3ZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVzdWx0c0dyaWRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtZGF0YS12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1kYXRhLXZpZXdlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIOKUgOKUgCBEYXRhIOKUgOKUgFxuICBASW5wdXQoKSBlbnRpdHlLZXk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNvbmZpZz86IERhdGFiYXNlTWFuYWdlckNvbmZpZztcbiAgQElucHV0KCkgcGFnZVNpemUgPSAyNTtcblxuICAvLyDilIDilIAgQmVoYXZpb3Ig4pSA4pSAXG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJzID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NyZWF0ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RGVsZXRlID0gZmFsc2U7XG5cbiAgLy8g4pSA4pSAIExhYmVscyDilIDilIBcbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05vIHJlY29yZHMgZm91bmQuJztcbiAgQElucHV0KCkgbG9hZGluZ01lc3NhZ2UgPSAnTG9hZGluZyBkYXRhLi4uJztcblxuICAvLyDilIDilIAgQ3VzdG9tIHRlbXBsYXRlcyDilIDilIBcbiAgQElucHV0KCkgcm93VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBmaWx0ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHRvb2xiYXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLy8g4pSA4pSAIEV2ZW50cyDilIDilIBcbiAgQE91dHB1dCgpIHZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY3JlYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuXG4gIGVudGl0eT86IEVudGl0eVJlZ2lzdHJ5RW50cnk7XG4gIGRhdGE6IGFueVtdID0gW107XG4gIHRvdGFsID0gMDtcbiAgcGFnZSA9IDA7XG4gIGxvYWRpbmcgPSBmYWxzZTtcbiAgc29ydEZpZWxkID0gJ2lkJztcbiAgc29ydE9yZGVyOiAnQVNDJyB8ICdERVNDJyA9ICdERVNDJztcbiAgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBleGVjdXRpb25UaW1lID0gMDtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHF1ZXJ5RXhlY3V0b3I6IFF1ZXJ5RXhlY3V0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW50aXR5U2NoZW1hOiBFbnRpdHlTY2hlbWFTZXJ2aWNlLFxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydlbnRpdHlLZXknXSAmJiB0aGlzLmVudGl0eUtleSkge1xuICAgICAgdGhpcy5lbnRpdHkgPSB0aGlzLmVudGl0eVNjaGVtYS5nZXRFbnRpdHlCeUtleSh0aGlzLmVudGl0eUtleSwgdGhpcy5jb25maWcpO1xuICAgICAgdGhpcy5wYWdlID0gMDtcbiAgICAgIHRoaXMuZmlsdGVycyA9IHt9O1xuICAgICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IEVudGl0eUZpZWxkTWV0YVtdIHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHk/LmZpZWxkcy5maWx0ZXIoZiA9PiAhZi5oaWRkZW4pID8/IFtdO1xuICB9XG5cbiAgb25Tb3J0KGV2ZW50OiB7IGZpZWxkOiBzdHJpbmc7IG9yZGVyOiAnQVNDJyB8ICdERVNDJyB9KTogdm9pZCB7XG4gICAgdGhpcy5zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICB0aGlzLnNvcnRPcmRlciA9IGV2ZW50Lm9yZGVyO1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UocGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlID0gcGFnZTtcbiAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChwYWdlKTtcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xuICB9XG5cbiAgb25WaWV3KHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy52aWV3LmVtaXQocm93KTtcbiAgfVxuXG4gIG9uRWRpdChyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdC5lbWl0KHJvdyk7XG4gIH1cblxuICBvbkRlbGV0ZShyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlLmVtaXQocm93KTtcbiAgfVxuXG4gIG9uQ3JlYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlLmVtaXQoKTtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcnNbZmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpbHRlcnNbZmllbGRdID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMucGFnZSA9IDA7XG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcnMpO1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gIH1cblxuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoRGF0YSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZW50aXR5S2V5IHx8ICF0aGlzLmVudGl0eSkgcmV0dXJuO1xuXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeUV4ZWN1dG9yLmV4ZWN1dGUoe1xuICAgICAgZW50aXR5OiB0aGlzLmVudGl0eUtleSxcbiAgICAgIGZpbHRlcnM6IE9iamVjdC5rZXlzKHRoaXMuZmlsdGVycykubGVuZ3RoID4gMCA/IHRoaXMuZmlsdGVycyA6IHVuZGVmaW5lZCxcbiAgICAgIHNvcnQ6IHRoaXMuc29ydEZpZWxkLFxuICAgICAgb3JkZXI6IHRoaXMuc29ydE9yZGVyLFxuICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgfSwgdGhpcy5jb25maWcpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzdWx0OiBRdWVyeVJlc3VsdCkgPT4ge1xuICAgICAgICB0aGlzLmRhdGEgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhpcy50b3RhbCA9IHJlc3VsdC50b3RhbDtcbiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lID0gcmVzdWx0LmV4ZWN1dGlvblRpbWU7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGdtLXRhYmxlLWRhdGEtdmlld2VyXCI+XG4gIDwhLS0gVG9vbGJhciAtLT5cbiAgPGRpdiBjbGFzcz1cInRnbS10YWJsZS1kYXRhLXZpZXdlcl9fdG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRvb2xiYXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUb29sYmFyPlxuICAgICAgPGRpdiBjbGFzcz1cInRnbS10YWJsZS1kYXRhLXZpZXdlcl9fdG9vbGJhci1sZWZ0XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGdtLXRhYmxlLWRhdGEtdmlld2VyX19lbnRpdHktbmFtZVwiICpuZ0lmPVwiZW50aXR5XCI+XG4gICAgICAgICAge3sgZW50aXR5Lm5hbWUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRnbS10YWJsZS1kYXRhLXZpZXdlcl9fc3RhdHNcIiAqbmdJZj1cIiFsb2FkaW5nICYmIHRvdGFsID4gMFwiPlxuICAgICAgICAgIHt7IHRvdGFsIH19IHJlY29yZHMgKHt7IGV4ZWN1dGlvblRpbWUgfX1tcylcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGdtLXRhYmxlLWRhdGEtdmlld2VyX190b29sYmFyLXJpZ2h0XCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cInRnbS1kYi1idG4gdGdtLWRiLWJ0bi0tZ2hvc3QgdGdtLWRiLWJ0bi0tc21cIlxuICAgICAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgPlJlZnJlc2g8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0NyZWF0ZVwiXG4gICAgICAgICAgY2xhc3M9XCJ0Z20tZGItYnRuIHRnbS1kYi1idG4tLXByaW1hcnkgdGdtLWRiLWJ0bi0tc21cIlxuICAgICAgICAgIChjbGljayk9XCJvbkNyZWF0ZSgpXCJcbiAgICAgICAgPisgTmV3PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cblxuICA8IS0tIEZpbHRlcnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0Z20tdGFibGUtZGF0YS12aWV3ZXJfX2ZpbHRlcnNcIiAqbmdJZj1cInNob3dGaWx0ZXJzICYmIGVudGl0eVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0RmlsdGVyc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RmlsdGVycz5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tdGFibGUtZGF0YS12aWV3ZXJfX2ZpbHRlci1iYXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgY29sdW1ucyB8IHNsaWNlOjA6NVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Z20tdGFibGUtZGF0YS12aWV3ZXJfX2ZpbHRlci1pdGVtXCIgKm5nSWY9XCJmaWVsZC5maWx0ZXJhYmxlICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGdtLXRhYmxlLWRhdGEtdmlld2VyX19maWx0ZXItbGFiZWxcIj57eyBmaWVsZC5sYWJlbCB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZC50eXBlXCI+XG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2VudW0nXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRnbS10YWJsZS1kYXRhLXZpZXdlcl9fZmlsdGVyLWlucHV0XCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKGZpZWxkLm5hbWUsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5BbGw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWwgb2YgZmllbGQuZW51bVZhbHVlc1wiIFt2YWx1ZV09XCJ2YWxcIj57eyB2YWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRnbS10YWJsZS1kYXRhLXZpZXdlcl9fZmlsdGVyLWlucHV0XCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRmlsdGVyQ2hhbmdlKGZpZWxkLm5hbWUsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5BbGw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidHJ1ZVwiPlllczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmYWxzZVwiPk5vPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hEZWZhdWx0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGdtLXRhYmxlLWRhdGEtdmlld2VyX19maWx0ZXItaW5wdXRcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRmlsdGVyICcgKyBmaWVsZC5sYWJlbFwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRmlsdGVyQ2hhbmdlKGZpZWxkLm5hbWUsICRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmVzdWx0cyBHcmlkIChyZXVzZXMgcmVzdWx0cy1ncmlkIHZpYSBpbmxpbmUgcmVuZGVyaW5nKSAtLT5cbiAgPGRpdiBjbGFzcz1cInRnbS10YWJsZS1kYXRhLXZpZXdlcl9fZ3JpZFwiPlxuICAgIDx0Z20tcmVzdWx0cy1ncmlkXG4gICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgW3RvdGFsXT1cInRvdGFsXCJcbiAgICAgIFtwYWdlXT1cInBhZ2VcIlxuICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgW3NvcnRGaWVsZF09XCJzb3J0RmllbGRcIlxuICAgICAgW3NvcnRPcmRlcl09XCJzb3J0T3JkZXJcIlxuICAgICAgW25vUmVzdWx0c01lc3NhZ2VdPVwiZW1wdHlNZXNzYWdlXCJcbiAgICAgIFtsb2FkaW5nTWVzc2FnZV09XCJsb2FkaW5nTWVzc2FnZVwiXG4gICAgICAoc29ydCk9XCJvblNvcnQoJGV2ZW50KVwiXG4gICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAocm93Q2xpY2spPVwib25WaWV3KCRldmVudClcIlxuICAgICAgKHJvd0RvdWJsZUNsaWNrKT1cIm9uRWRpdCgkZXZlbnQpXCJcbiAgICA+PC90Z20tcmVzdWx0cy1ncmlkPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
export class TableStructureComponent {
|
|
6
|
+
entity;
|
|
7
|
+
containerClass = '';
|
|
8
|
+
fieldTemplate;
|
|
9
|
+
fieldClick = new EventEmitter();
|
|
10
|
+
onFieldClick(field) {
|
|
11
|
+
this.fieldClick.emit(field);
|
|
12
|
+
}
|
|
13
|
+
getTypeBadgeClass(type) {
|
|
14
|
+
switch (type) {
|
|
15
|
+
case 'number': return 'tgm-type-badge--number';
|
|
16
|
+
case 'boolean': return 'tgm-type-badge--boolean';
|
|
17
|
+
case 'date': return 'tgm-type-badge--date';
|
|
18
|
+
case 'enum': return 'tgm-type-badge--enum';
|
|
19
|
+
case 'json': return 'tgm-type-badge--json';
|
|
20
|
+
case 'array': return 'tgm-type-badge--array';
|
|
21
|
+
default: return 'tgm-type-badge--string';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
trackByName(_index, field) {
|
|
25
|
+
return field.name;
|
|
26
|
+
}
|
|
27
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableStructureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TableStructureComponent, isStandalone: true, selector: "tgm-table-structure", inputs: { entity: "entity", containerClass: "containerClass", fieldTemplate: "fieldTemplate" }, outputs: { fieldClick: "fieldClick" }, ngImport: i0, template: "<div class=\"tgm-table-structure\" [ngClass]=\"containerClass\" *ngIf=\"entity\">\n <div class=\"tgm-table-structure__header\">\n <h4 class=\"tgm-table-structure__title\">{{ entity.name }} — Structure</h4>\n <span class=\"tgm-table-structure__count\">{{ entity.fields.length }} fields</span>\n </div>\n\n <div class=\"tgm-table-structure__table-wrapper\">\n <table class=\"tgm-table-structure__table\">\n <thead>\n <tr>\n <th class=\"tgm-table-structure__th\">#</th>\n <th class=\"tgm-table-structure__th\">Field</th>\n <th class=\"tgm-table-structure__th\">Type</th>\n <th class=\"tgm-table-structure__th\">Label</th>\n <th class=\"tgm-table-structure__th\">Sortable</th>\n <th class=\"tgm-table-structure__th\">Filterable</th>\n <th class=\"tgm-table-structure__th\">Editable</th>\n <th class=\"tgm-table-structure__th\">Required</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let field of entity.fields; let i = index; trackBy: trackByName\">\n <ng-container *ngIf=\"fieldTemplate; else defaultField\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { $implicit: field }\"></ng-container>\n </ng-container>\n\n <ng-template #defaultField>\n <tr\n class=\"tgm-table-structure__tr\"\n (click)=\"onFieldClick(field)\"\n >\n <td class=\"tgm-table-structure__td tgm-table-structure__td--num\">{{ i + 1 }}</td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--name\">\n <code>{{ field.name }}</code>\n </td>\n <td class=\"tgm-table-structure__td\">\n <span class=\"tgm-type-badge\" [ngClass]=\"getTypeBadgeClass(field.type)\">\n {{ field.type }}\n </span>\n </td>\n <td class=\"tgm-table-structure__td\">{{ field.label }}</td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.sortable !== false ? '✓' : '' }}\n </td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.filterable !== false ? '✓' : '' }}\n </td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.editable !== false ? '✓' : '' }}\n </td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.required ? '✓' : '' }}\n </td>\n </tr>\n\n <!-- Show enum values if applicable -->\n <tr *ngIf=\"field.enumValues && field.enumValues.length > 0\" class=\"tgm-table-structure__enum-row\">\n <td></td>\n <td colspan=\"7\" class=\"tgm-table-structure__td tgm-table-structure__enum-values\">\n <span class=\"tgm-table-structure__enum-label\">Values:</span>\n <span class=\"tgm-enum-chip\" *ngFor=\"let val of field.enumValues\">{{ val }}</span>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </tbody>\n </table>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;overflow:hidden}.tgm-table-structure{display:flex;flex-direction:column;height:100%}.tgm-table-structure__header{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm, 8px) var(--tgm-db-spacing, 16px);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-table-structure__title{margin:0;font-size:14px;font-weight:600;color:var(--tgm-db-text, #e5e7eb)}.tgm-table-structure__count{font-size:12px;color:var(--tgm-db-text-muted, #6b7280)}.tgm-table-structure__table-wrapper{flex:1;overflow:auto}.tgm-table-structure__table{width:100%;border-collapse:collapse;font-size:13px}.tgm-table-structure__th{position:sticky;top:0;padding:8px 12px;text-align:left;font-weight:600;font-size:12px;color:var(--tgm-db-text-secondary, #9ca3af);background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05));border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));white-space:nowrap;z-index:1}.tgm-table-structure__tr{cursor:pointer;transition:background .1s}.tgm-table-structure__tr:hover{background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08))}.tgm-table-structure__td{padding:6px 12px;border-bottom:1px solid rgba(255,255,255,.04);color:var(--tgm-db-text, #e5e7eb)}.tgm-table-structure__td--num{color:var(--tgm-db-text-muted, #6b7280);font-size:12px;width:40px;text-align:center}.tgm-table-structure__td--name code{font-family:var(--tgm-db-font-mono, monospace);font-size:13px;color:var(--tgm-db-primary, #3b82f6)}.tgm-table-structure__td--bool{text-align:center;color:var(--tgm-db-success, #22c55e);font-size:14px}.tgm-table-structure__enum-row{background:#ffffff05}.tgm-table-structure__enum-values{padding:4px 12px 8px;display:flex;flex-wrap:wrap;align-items:center;gap:4px}.tgm-table-structure__enum-label{font-size:11px;color:var(--tgm-db-text-muted, #6b7280);margin-right:4px}.tgm-type-badge{display:inline-block;padding:2px 6px;font-size:11px;font-weight:500;border-radius:3px;font-family:var(--tgm-db-font-mono, monospace)}.tgm-type-badge--string{background:#22c55e26;color:#22c55e}.tgm-type-badge--number{background:#3b82f626;color:#3b82f6}.tgm-type-badge--boolean{background:#a855f726;color:#a855f7}.tgm-type-badge--date{background:#eab30826;color:#eab308}.tgm-type-badge--enum{background:#ec489926;color:#ec4899}.tgm-type-badge--json{background:#f9731626;color:#f97316}.tgm-type-badge--array{background:#14b8a626;color:#14b8a6}.tgm-enum-chip{display:inline-block;padding:1px 6px;font-size:10px;font-family:var(--tgm-db-font-mono, monospace);background:#ec48991a;color:var(--tgm-db-text-secondary, #9ca3af);border-radius:3px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
29
|
+
}
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TableStructureComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{ selector: 'tgm-table-structure', standalone: true, imports: [CommonModule], template: "<div class=\"tgm-table-structure\" [ngClass]=\"containerClass\" *ngIf=\"entity\">\n <div class=\"tgm-table-structure__header\">\n <h4 class=\"tgm-table-structure__title\">{{ entity.name }} — Structure</h4>\n <span class=\"tgm-table-structure__count\">{{ entity.fields.length }} fields</span>\n </div>\n\n <div class=\"tgm-table-structure__table-wrapper\">\n <table class=\"tgm-table-structure__table\">\n <thead>\n <tr>\n <th class=\"tgm-table-structure__th\">#</th>\n <th class=\"tgm-table-structure__th\">Field</th>\n <th class=\"tgm-table-structure__th\">Type</th>\n <th class=\"tgm-table-structure__th\">Label</th>\n <th class=\"tgm-table-structure__th\">Sortable</th>\n <th class=\"tgm-table-structure__th\">Filterable</th>\n <th class=\"tgm-table-structure__th\">Editable</th>\n <th class=\"tgm-table-structure__th\">Required</th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let field of entity.fields; let i = index; trackBy: trackByName\">\n <ng-container *ngIf=\"fieldTemplate; else defaultField\">\n <ng-container *ngTemplateOutlet=\"fieldTemplate; context: { $implicit: field }\"></ng-container>\n </ng-container>\n\n <ng-template #defaultField>\n <tr\n class=\"tgm-table-structure__tr\"\n (click)=\"onFieldClick(field)\"\n >\n <td class=\"tgm-table-structure__td tgm-table-structure__td--num\">{{ i + 1 }}</td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--name\">\n <code>{{ field.name }}</code>\n </td>\n <td class=\"tgm-table-structure__td\">\n <span class=\"tgm-type-badge\" [ngClass]=\"getTypeBadgeClass(field.type)\">\n {{ field.type }}\n </span>\n </td>\n <td class=\"tgm-table-structure__td\">{{ field.label }}</td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.sortable !== false ? '✓' : '' }}\n </td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.filterable !== false ? '✓' : '' }}\n </td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.editable !== false ? '✓' : '' }}\n </td>\n <td class=\"tgm-table-structure__td tgm-table-structure__td--bool\">\n {{ field.required ? '✓' : '' }}\n </td>\n </tr>\n\n <!-- Show enum values if applicable -->\n <tr *ngIf=\"field.enumValues && field.enumValues.length > 0\" class=\"tgm-table-structure__enum-row\">\n <td></td>\n <td colspan=\"7\" class=\"tgm-table-structure__td tgm-table-structure__enum-values\">\n <span class=\"tgm-table-structure__enum-label\">Values:</span>\n <span class=\"tgm-enum-chip\" *ngFor=\"let val of field.enumValues\">{{ val }}</span>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </tbody>\n </table>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;overflow:hidden}.tgm-table-structure{display:flex;flex-direction:column;height:100%}.tgm-table-structure__header{display:flex;align-items:center;justify-content:space-between;padding:var(--tgm-db-spacing-sm, 8px) var(--tgm-db-spacing, 16px);border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1))}.tgm-table-structure__title{margin:0;font-size:14px;font-weight:600;color:var(--tgm-db-text, #e5e7eb)}.tgm-table-structure__count{font-size:12px;color:var(--tgm-db-text-muted, #6b7280)}.tgm-table-structure__table-wrapper{flex:1;overflow:auto}.tgm-table-structure__table{width:100%;border-collapse:collapse;font-size:13px}.tgm-table-structure__th{position:sticky;top:0;padding:8px 12px;text-align:left;font-weight:600;font-size:12px;color:var(--tgm-db-text-secondary, #9ca3af);background:var(--tgm-db-bg-secondary, rgba(255, 255, 255, .05));border-bottom:1px solid var(--tgm-db-border, rgba(255, 255, 255, .1));white-space:nowrap;z-index:1}.tgm-table-structure__tr{cursor:pointer;transition:background .1s}.tgm-table-structure__tr:hover{background:var(--tgm-db-bg-hover, rgba(255, 255, 255, .08))}.tgm-table-structure__td{padding:6px 12px;border-bottom:1px solid rgba(255,255,255,.04);color:var(--tgm-db-text, #e5e7eb)}.tgm-table-structure__td--num{color:var(--tgm-db-text-muted, #6b7280);font-size:12px;width:40px;text-align:center}.tgm-table-structure__td--name code{font-family:var(--tgm-db-font-mono, monospace);font-size:13px;color:var(--tgm-db-primary, #3b82f6)}.tgm-table-structure__td--bool{text-align:center;color:var(--tgm-db-success, #22c55e);font-size:14px}.tgm-table-structure__enum-row{background:#ffffff05}.tgm-table-structure__enum-values{padding:4px 12px 8px;display:flex;flex-wrap:wrap;align-items:center;gap:4px}.tgm-table-structure__enum-label{font-size:11px;color:var(--tgm-db-text-muted, #6b7280);margin-right:4px}.tgm-type-badge{display:inline-block;padding:2px 6px;font-size:11px;font-weight:500;border-radius:3px;font-family:var(--tgm-db-font-mono, monospace)}.tgm-type-badge--string{background:#22c55e26;color:#22c55e}.tgm-type-badge--number{background:#3b82f626;color:#3b82f6}.tgm-type-badge--boolean{background:#a855f726;color:#a855f7}.tgm-type-badge--date{background:#eab30826;color:#eab308}.tgm-type-badge--enum{background:#ec489926;color:#ec4899}.tgm-type-badge--json{background:#f9731626;color:#f97316}.tgm-type-badge--array{background:#14b8a626;color:#14b8a6}.tgm-enum-chip{display:inline-block;padding:1px 6px;font-size:10px;font-family:var(--tgm-db-font-mono, monospace);background:#ec48991a;color:var(--tgm-db-text-secondary, #9ca3af);border-radius:3px}\n"] }]
|
|
33
|
+
}], propDecorators: { entity: [{
|
|
34
|
+
type: Input
|
|
35
|
+
}], containerClass: [{
|
|
36
|
+
type: Input
|
|
37
|
+
}], fieldTemplate: [{
|
|
38
|
+
type: Input
|
|
39
|
+
}], fieldClick: [{
|
|
40
|
+
type: Output
|
|
41
|
+
}] } });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc3RydWN0dXJlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXRhYmFzZS1tYW5hZ2VyL3RhYmxlLXN0cnVjdHVyZS90YWJsZS1zdHJ1Y3R1cmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2RhdGFiYXNlLW1hbmFnZXIvdGFibGUtc3RydWN0dXJlL3RhYmxlLXN0cnVjdHVyZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBVS9DLE1BQU0sT0FBTyx1QkFBdUI7SUFDekIsTUFBTSxDQUF1QjtJQUM3QixjQUFjLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLGFBQWEsQ0FBK0M7SUFFM0QsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFtQixDQUFDO0lBRTNELFlBQVksQ0FBQyxLQUFzQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWTtRQUM1QixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLHdCQUF3QixDQUFDO1lBQy9DLEtBQUssU0FBUyxDQUFDLENBQUMsT0FBTyx5QkFBeUIsQ0FBQztZQUNqRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sc0JBQXNCLENBQUM7WUFDM0MsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLHNCQUFzQixDQUFDO1lBQzNDLEtBQUssTUFBTSxDQUFDLENBQUMsT0FBTyxzQkFBc0IsQ0FBQztZQUMzQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sdUJBQXVCLENBQUM7WUFDN0MsT0FBTyxDQUFDLENBQUMsT0FBTyx3QkFBd0IsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjLEVBQUUsS0FBc0I7UUFDaEQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3BCLENBQUM7d0dBekJVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLHNOQ2pCcEMsb3dHQXFFQSxrb0ZEeERZLFlBQVk7OzRGQUlYLHVCQUF1QjtrQkFQbkMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDOzhCQUtkLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRW50aXR5UmVnaXN0cnlFbnRyeSwgRW50aXR5RmllbGRNZXRhIH0gZnJvbSAnLi4vdHlwZXMvZGF0YWJhc2UtbWFuYWdlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RnbS10YWJsZS1zdHJ1Y3R1cmUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXN0cnVjdHVyZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLXN0cnVjdHVyZS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVN0cnVjdHVyZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGVudGl0eT86IEVudGl0eVJlZ2lzdHJ5RW50cnk7XG4gIEBJbnB1dCgpIGNvbnRhaW5lckNsYXNzID0gJyc7XG4gIEBJbnB1dCgpIGZpZWxkVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogRW50aXR5RmllbGRNZXRhIH0+O1xuXG4gIEBPdXRwdXQoKSBmaWVsZENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFbnRpdHlGaWVsZE1ldGE+KCk7XG5cbiAgb25GaWVsZENsaWNrKGZpZWxkOiBFbnRpdHlGaWVsZE1ldGEpOiB2b2lkIHtcbiAgICB0aGlzLmZpZWxkQ2xpY2suZW1pdChmaWVsZCk7XG4gIH1cblxuICBnZXRUeXBlQmFkZ2VDbGFzcyh0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICd0Z20tdHlwZS1iYWRnZS0tbnVtYmVyJztcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOiByZXR1cm4gJ3RnbS10eXBlLWJhZGdlLS1ib29sZWFuJztcbiAgICAgIGNhc2UgJ2RhdGUnOiByZXR1cm4gJ3RnbS10eXBlLWJhZGdlLS1kYXRlJztcbiAgICAgIGNhc2UgJ2VudW0nOiByZXR1cm4gJ3RnbS10eXBlLWJhZGdlLS1lbnVtJztcbiAgICAgIGNhc2UgJ2pzb24nOiByZXR1cm4gJ3RnbS10eXBlLWJhZGdlLS1qc29uJztcbiAgICAgIGNhc2UgJ2FycmF5JzogcmV0dXJuICd0Z20tdHlwZS1iYWRnZS0tYXJyYXknO1xuICAgICAgZGVmYXVsdDogcmV0dXJuICd0Z20tdHlwZS1iYWRnZS0tc3RyaW5nJztcbiAgICB9XG4gIH1cblxuICB0cmFja0J5TmFtZShfaW5kZXg6IG51bWJlciwgZmllbGQ6IEVudGl0eUZpZWxkTWV0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpZWxkLm5hbWU7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlXCIgW25nQ2xhc3NdPVwiY29udGFpbmVyQ2xhc3NcIiAqbmdJZj1cImVudGl0eVwiPlxuICA8ZGl2IGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9faGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9fdGl0bGVcIj57eyBlbnRpdHkubmFtZSB9fSAmbWRhc2g7IFN0cnVjdHVyZTwvaDQ+XG4gICAgPHNwYW4gY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX19jb3VudFwiPnt7IGVudGl0eS5maWVsZHMubGVuZ3RoIH19IGZpZWxkczwvc3Bhbj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInRnbS10YWJsZS1zdHJ1Y3R1cmVfX3RhYmxlLXdyYXBwZXJcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9fdGhcIj4jPC90aD5cbiAgICAgICAgICA8dGggY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190aFwiPkZpZWxkPC90aD5cbiAgICAgICAgICA8dGggY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190aFwiPlR5cGU8L3RoPlxuICAgICAgICAgIDx0aCBjbGFzcz1cInRnbS10YWJsZS1zdHJ1Y3R1cmVfX3RoXCI+TGFiZWw8L3RoPlxuICAgICAgICAgIDx0aCBjbGFzcz1cInRnbS10YWJsZS1zdHJ1Y3R1cmVfX3RoXCI+U29ydGFibGU8L3RoPlxuICAgICAgICAgIDx0aCBjbGFzcz1cInRnbS10YWJsZS1zdHJ1Y3R1cmVfX3RoXCI+RmlsdGVyYWJsZTwvdGg+XG4gICAgICAgICAgPHRoIGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9fdGhcIj5FZGl0YWJsZTwvdGg+XG4gICAgICAgICAgPHRoIGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9fdGhcIj5SZXF1aXJlZDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBlbnRpdHkuZmllbGRzOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5TmFtZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWVsZFRlbXBsYXRlOyBlbHNlIGRlZmF1bHRGaWVsZFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBmaWVsZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWVsZD5cbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICBjbGFzcz1cInRnbS10YWJsZS1zdHJ1Y3R1cmVfX3RyXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmllbGRDbGljayhmaWVsZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190ZCB0Z20tdGFibGUtc3RydWN0dXJlX190ZC0tbnVtXCI+e3sgaSArIDEgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190ZCB0Z20tdGFibGUtc3RydWN0dXJlX190ZC0tbmFtZVwiPlxuICAgICAgICAgICAgICAgIDxjb2RlPnt7IGZpZWxkLm5hbWUgfX08L2NvZGU+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRnbS10YWJsZS1zdHJ1Y3R1cmVfX3RkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tdHlwZS1iYWRnZVwiIFtuZ0NsYXNzXT1cImdldFR5cGVCYWRnZUNsYXNzKGZpZWxkLnR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBmaWVsZC50eXBlIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190ZFwiPnt7IGZpZWxkLmxhYmVsIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9fdGQgdGdtLXRhYmxlLXN0cnVjdHVyZV9fdGQtLWJvb2xcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWVsZC5zb3J0YWJsZSAhPT0gZmFsc2UgPyAnJiMxMDAwMzsnIDogJycgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9fdGQgdGdtLXRhYmxlLXN0cnVjdHVyZV9fdGQtLWJvb2xcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWVsZC5maWx0ZXJhYmxlICE9PSBmYWxzZSA/ICcmIzEwMDAzOycgOiAnJyB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190ZCB0Z20tdGFibGUtc3RydWN0dXJlX190ZC0tYm9vbFwiPlxuICAgICAgICAgICAgICAgIHt7IGZpZWxkLmVkaXRhYmxlICE9PSBmYWxzZSA/ICcmIzEwMDAzOycgOiAnJyB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190ZCB0Z20tdGFibGUtc3RydWN0dXJlX190ZC0tYm9vbFwiPlxuICAgICAgICAgICAgICAgIHt7IGZpZWxkLnJlcXVpcmVkID8gJyYjMTAwMDM7JyA6ICcnIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgICA8IS0tIFNob3cgZW51bSB2YWx1ZXMgaWYgYXBwbGljYWJsZSAtLT5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImZpZWxkLmVudW1WYWx1ZXMgJiYgZmllbGQuZW51bVZhbHVlcy5sZW5ndGggPiAwXCIgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX19lbnVtLXJvd1wiPlxuICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI3XCIgY2xhc3M9XCJ0Z20tdGFibGUtc3RydWN0dXJlX190ZCB0Z20tdGFibGUtc3RydWN0dXJlX19lbnVtLXZhbHVlc1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGdtLXRhYmxlLXN0cnVjdHVyZV9fZW51bS1sYWJlbFwiPlZhbHVlczo8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tZW51bS1jaGlwXCIgKm5nRm9yPVwibGV0IHZhbCBvZiBmaWVsZC5lbnVtVmFsdWVzXCI+e3sgdmFsIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Manager Types
|
|
3
|
+
* All interfaces for the Navicat/DBeaver-style entity browser UI.
|
|
4
|
+
*/
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtbWFuYWdlci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9kYXRhYmFzZS1tYW5hZ2VyL3R5cGVzL2RhdGFiYXNlLW1hbmFnZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRhYmFzZSBNYW5hZ2VyIFR5cGVzXG4gKiBBbGwgaW50ZXJmYWNlcyBmb3IgdGhlIE5hdmljYXQvREJlYXZlci1zdHlsZSBlbnRpdHkgYnJvd3NlciBVSS5cbiAqL1xuXG4vLyDilIDilIAgRmllbGQgTWV0YWRhdGEg4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5RmllbGRNZXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnIHwgJ2VudW0nIHwgJ2pzb24nIHwgJ2FycmF5JztcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbiAgZWRpdGFibGU/OiBib29sZWFuO1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIGVudW1WYWx1ZXM/OiBzdHJpbmdbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW47XG59XG5cbi8vIOKUgOKUgCBFbnRpdHkgUmVnaXN0cnkgRW50cnkg4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5UmVnaXN0cnlFbnRyeSB7XG4gIGtleTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG1vZHVsZTogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZmllbGRzOiBFbnRpdHlGaWVsZE1ldGFbXTtcbiAgc2VydmljZUNsYXNzPzogc3RyaW5nO1xuICByZXNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gIGV4Y2x1ZGFibGU/OiBib29sZWFuO1xufVxuXG4vLyDilIDilIAgUXVlcnkgTW9kZWwgKEpTT04gaW4gZWRpdG9yKSDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeU1vZGVsIHtcbiAgZW50aXR5OiBzdHJpbmc7XG4gIHNlbGVjdD86IHN0cmluZ1tdO1xuICBmaWx0ZXJzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc29ydD86IHN0cmluZztcbiAgb3JkZXI/OiAnQVNDJyB8ICdERVNDJztcbiAgcGFnZT86IG51bWJlcjtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBRdWVyeSBFeGVjdXRpb24gUmVzdWx0IOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UmVzdWx0IHtcbiAgZGF0YTogYW55W107XG4gIHRvdGFsOiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbiAgZXhlY3V0aW9uVGltZTogbnVtYmVyO1xuICBlbnRpdHk6IHN0cmluZztcbn1cblxuLy8g4pSA4pSAIENvbmZpZ3VyYXRpb24g4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VNYW5hZ2VyQ29uZmlnIHtcbiAgZW5hYmxlZE1vZHVsZXM/OiBzdHJpbmdbXTtcbiAgZXhjbHVkZWRFbnRpdGllcz86IHN0cmluZ1tdO1xuICBkZWZhdWx0UGFnZVNpemU/OiBudW1iZXI7XG4gIG1heFBhZ2VTaXplPzogbnVtYmVyO1xuICBlbmFibGVNb25hY28/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG4gIHRoZW1lPzogJ2RhcmsnIHwgJ2xpZ2h0JztcbiAgbW9uYWNvT3B0aW9ucz86IGFueTtcbiAgc2lkZWJhcldpZHRoPzogbnVtYmVyO1xuICBlZGl0b3JIZWlnaHQ/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBUYWIgU3RhdGUg4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRWRpdG9yVGFiIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgdHlwZTogJ3F1ZXJ5JyB8ICd0YWJsZS1kYXRhJyB8ICd0YWJsZS1zdHJ1Y3R1cmUnO1xuICBlbnRpdHlLZXk/OiBzdHJpbmc7XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICByZXN1bHQ/OiBRdWVyeVJlc3VsdDtcbiAgZGlydHk/OiBib29sZWFuO1xufVxuXG4vLyDilIDilIAgTW9kdWxlIGdyb3VwIGZvciBvYmplY3QgYnJvd3NlciDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlNb2R1bGVHcm91cCB7XG4gIGNvZGU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgZW50aXRpZXM6IEVudGl0eVJlZ2lzdHJ5RW50cnlbXTtcbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xufVxuIl19
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../../services/api/export.service";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
export class ExportButtonComponent {
|
|
7
|
+
exportService;
|
|
8
|
+
// ── Data ──
|
|
9
|
+
entityType = '';
|
|
10
|
+
entityIds;
|
|
11
|
+
formats = ['excel', 'csv', 'pdf'];
|
|
12
|
+
disabled = false;
|
|
13
|
+
autoExport = true;
|
|
14
|
+
// ── Labels ──
|
|
15
|
+
label = 'Export';
|
|
16
|
+
excelLabel = 'Excel';
|
|
17
|
+
csvLabel = 'CSV';
|
|
18
|
+
pdfLabel = 'PDF';
|
|
19
|
+
// ── CSS overrides ──
|
|
20
|
+
buttonClass = '';
|
|
21
|
+
dropdownClass = '';
|
|
22
|
+
// ── Custom templates ──
|
|
23
|
+
buttonTemplate;
|
|
24
|
+
menuItemTemplate;
|
|
25
|
+
// ── Events ──
|
|
26
|
+
exportStarted = new EventEmitter();
|
|
27
|
+
exportCompleted = new EventEmitter();
|
|
28
|
+
exportError = new EventEmitter();
|
|
29
|
+
dropdownOpen = false;
|
|
30
|
+
exporting = false;
|
|
31
|
+
entityMethodMap = {};
|
|
32
|
+
constructor(exportService) {
|
|
33
|
+
this.exportService = exportService;
|
|
34
|
+
this.buildEntityMethodMap();
|
|
35
|
+
}
|
|
36
|
+
onDocumentClick() {
|
|
37
|
+
this.dropdownOpen = false;
|
|
38
|
+
}
|
|
39
|
+
toggleDropdown = () => {
|
|
40
|
+
this.dropdownOpen = !this.dropdownOpen;
|
|
41
|
+
};
|
|
42
|
+
onButtonClick(event) {
|
|
43
|
+
event.stopPropagation();
|
|
44
|
+
if (this.formats.length === 1) {
|
|
45
|
+
this.onExport(this.formats[0]);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.toggleDropdown();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
onMenuClick(event) {
|
|
52
|
+
event.stopPropagation();
|
|
53
|
+
}
|
|
54
|
+
onExport(format) {
|
|
55
|
+
this.dropdownOpen = false;
|
|
56
|
+
this.exportStarted.emit({ format, entityType: this.entityType });
|
|
57
|
+
if (!this.autoExport)
|
|
58
|
+
return;
|
|
59
|
+
const config = this.entityMethodMap[this.entityType];
|
|
60
|
+
const method = config?.[format];
|
|
61
|
+
if (!method) {
|
|
62
|
+
this.exportError.emit(new Error(`Export not available for ${this.entityType} in ${format} format`));
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.exporting = true;
|
|
66
|
+
method(this.entityIds).subscribe({
|
|
67
|
+
next: (blob) => {
|
|
68
|
+
this.exporting = false;
|
|
69
|
+
this.exportCompleted.emit(blob);
|
|
70
|
+
},
|
|
71
|
+
error: (err) => {
|
|
72
|
+
this.exporting = false;
|
|
73
|
+
this.exportError.emit(err);
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
getFormatLabel(format) {
|
|
78
|
+
switch (format) {
|
|
79
|
+
case 'excel':
|
|
80
|
+
return this.excelLabel;
|
|
81
|
+
case 'csv':
|
|
82
|
+
return this.csvLabel;
|
|
83
|
+
case 'pdf':
|
|
84
|
+
return this.pdfLabel;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
trackByFormat(_index, format) {
|
|
88
|
+
return format;
|
|
89
|
+
}
|
|
90
|
+
buildEntityMethodMap() {
|
|
91
|
+
const svc = this.exportService;
|
|
92
|
+
this.entityMethodMap = {
|
|
93
|
+
inspections: {
|
|
94
|
+
excel: (ids) => svc.exportInspectionsExcel(ids),
|
|
95
|
+
csv: (ids) => svc.exportInspectionsCsv(ids),
|
|
96
|
+
pdf: (ids) => svc.exportInspectionsPdf(ids),
|
|
97
|
+
},
|
|
98
|
+
interventions: {
|
|
99
|
+
excel: (ids) => svc.exportInterventionsExcel(ids),
|
|
100
|
+
csv: (ids) => svc.exportInterventionsCsv(ids),
|
|
101
|
+
pdf: (ids) => svc.exportInterventionsPdf(ids),
|
|
102
|
+
},
|
|
103
|
+
failures: {
|
|
104
|
+
excel: (ids) => svc.exportFailuresExcel(ids),
|
|
105
|
+
csv: (ids) => svc.exportFailuresCsv(ids),
|
|
106
|
+
pdf: (ids) => svc.exportFailuresPdf(ids),
|
|
107
|
+
},
|
|
108
|
+
components: {
|
|
109
|
+
excel: (ids) => svc.exportComponentsExcel(ids),
|
|
110
|
+
},
|
|
111
|
+
units: {
|
|
112
|
+
excel: (ids) => svc.exportUnitsExcel(ids),
|
|
113
|
+
},
|
|
114
|
+
'gate-systems': {
|
|
115
|
+
excel: (ids) => svc.exportGateSystemsExcel(ids),
|
|
116
|
+
csv: (ids) => svc.exportGateSystemsCsv(ids),
|
|
117
|
+
pdf: (ids) => svc.exportGateSystemsPdf(ids),
|
|
118
|
+
},
|
|
119
|
+
'fish-monitoring': {
|
|
120
|
+
excel: (ids) => svc.exportFishMonitoringExcel(ids),
|
|
121
|
+
csv: (ids) => svc.exportFishMonitoringCsv(ids),
|
|
122
|
+
pdf: (ids) => svc.exportFishMonitoringPdf(ids),
|
|
123
|
+
},
|
|
124
|
+
'bathymetric-surveys': {
|
|
125
|
+
excel: (ids) => svc.exportBathymetricSurveysExcel(ids),
|
|
126
|
+
csv: (ids) => svc.exportBathymetricSurveysCsv(ids),
|
|
127
|
+
pdf: (ids) => svc.exportBathymetricSurveysPdf(ids),
|
|
128
|
+
},
|
|
129
|
+
'laboratory-results': {
|
|
130
|
+
excel: (ids) => svc.exportLaboratoryResultsExcel(ids),
|
|
131
|
+
csv: (ids) => svc.exportLaboratoryResultsCsv(ids),
|
|
132
|
+
pdf: (ids) => svc.exportLaboratoryResultsPdf(ids),
|
|
133
|
+
},
|
|
134
|
+
'manual-readings': {
|
|
135
|
+
excel: (ids) => svc.exportManualReadingsExcel(ids),
|
|
136
|
+
csv: (ids) => svc.exportManualReadingsCsv(ids),
|
|
137
|
+
pdf: (ids) => svc.exportManualReadingsPdf(ids),
|
|
138
|
+
},
|
|
139
|
+
'operational-observations': {
|
|
140
|
+
excel: (ids) => svc.exportOperationalObservationsExcel(ids),
|
|
141
|
+
csv: (ids) => svc.exportOperationalObservationsCsv(ids),
|
|
142
|
+
pdf: (ids) => svc.exportOperationalObservationsPdf(ids),
|
|
143
|
+
},
|
|
144
|
+
'regulatory-updates': {
|
|
145
|
+
excel: (ids) => svc.exportRegulatoryUpdatesExcel(ids),
|
|
146
|
+
csv: (ids) => svc.exportRegulatoryUpdatesCsv(ids),
|
|
147
|
+
pdf: (ids) => svc.exportRegulatoryUpdatesPdf(ids),
|
|
148
|
+
},
|
|
149
|
+
'ai-scenarios': {
|
|
150
|
+
excel: (ids) => svc.exportAIScenariosExcel(ids),
|
|
151
|
+
csv: (ids) => svc.exportAIScenariosCsv(ids),
|
|
152
|
+
pdf: (ids) => svc.exportAIScenariosPdf(ids),
|
|
153
|
+
},
|
|
154
|
+
'alert-definitions': {
|
|
155
|
+
excel: (ids) => svc.exportAlertDefinitionsExcel(ids),
|
|
156
|
+
csv: (ids) => svc.exportAlertDefinitionsCsv(ids),
|
|
157
|
+
pdf: (ids) => svc.exportAlertDefinitionsPdf(ids),
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportButtonComponent, deps: [{ token: i1.ExportService }], target: i0.ɵɵFactoryTarget.Component });
|
|
162
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ExportButtonComponent, isStandalone: true, selector: "tgm-export-button", inputs: { entityType: "entityType", entityIds: "entityIds", formats: "formats", disabled: "disabled", autoExport: "autoExport", label: "label", excelLabel: "excelLabel", csvLabel: "csvLabel", pdfLabel: "pdfLabel", buttonClass: "buttonClass", dropdownClass: "dropdownClass", buttonTemplate: "buttonTemplate", menuItemTemplate: "menuItemTemplate" }, outputs: { exportStarted: "exportStarted", exportCompleted: "exportCompleted", exportError: "exportError" }, host: { listeners: { "document:click": "onDocumentClick()" } }, ngImport: i0, template: "<div class=\"tgm-export\">\n <!-- Custom button template -->\n <ng-container *ngIf=\"buttonTemplate; else defaultButton\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: {\n label: label,\n open: dropdownOpen,\n disabled: disabled,\n exporting: exporting,\n toggle: toggleDropdown\n }\"></ng-container>\n </ng-container>\n\n <!-- Default button -->\n <ng-template #defaultButton>\n <button\n class=\"tgm-export__btn\"\n [ngClass]=\"buttonClass\"\n [disabled]=\"disabled || exporting\"\n (click)=\"onButtonClick($event)\"\n type=\"button\"\n >\n <span class=\"tgm-spinner tgm-spinner--sm\" *ngIf=\"exporting\"></span>\n <span>{{ label }}</span>\n <span class=\"tgm-export__caret\" *ngIf=\"formats.length > 1\">▾</span>\n </button>\n </ng-template>\n\n <!-- Dropdown Menu -->\n <div class=\"tgm-export__dropdown\" [ngClass]=\"dropdownClass\" *ngIf=\"dropdownOpen && formats.length > 1\" (click)=\"onMenuClick($event)\">\n <ng-container *ngFor=\"let fmt of formats; trackBy: trackByFormat\">\n <!-- Custom menu item -->\n <ng-container *ngIf=\"menuItemTemplate; else defaultMenuItem\">\n <ng-container *ngTemplateOutlet=\"menuItemTemplate; context: {\n $implicit: fmt,\n label: getFormatLabel(fmt),\n onExport: onExport.bind(this, fmt)\n }\"></ng-container>\n </ng-container>\n\n <!-- Default menu item -->\n <ng-template #defaultMenuItem>\n <button class=\"tgm-export__item\" (click)=\"onExport(fmt)\" type=\"button\">\n {{ getFormatLabel(fmt) }}\n </button>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [":host{--tgm-report-bg: rgba(255, 255, 255, .05);--tgm-report-bg-hover: rgba(255, 255, 255, .08);--tgm-report-border: rgba(255, 255, 255, .1);--tgm-report-text: #e5e7eb;--tgm-report-text-secondary: #9ca3af;--tgm-report-primary: #3b82f6;--tgm-report-primary-hover: #2563eb;--tgm-report-radius: 8px;--tgm-report-radius-sm: 4px;--tgm-report-font-family: inherit;--tgm-report-font-size: 14px;--tgm-report-spacing-sm: 8px;--tgm-report-shadow: 0 4px 16px rgba(0, 0, 0, .4);--tgm-report-dropdown-bg: rgba(30, 30, 46, 1);display:inline-block;position:relative;font-family:var(--tgm-report-font-family);font-size:var(--tgm-report-font-size);color:var(--tgm-report-text)}.tgm-export{position:relative;display:inline-flex}.tgm-export__btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;font-size:13px;font-weight:500;font-family:var(--tgm-report-font-family);color:#fff;background:var(--tgm-report-primary);border:none;border-radius:var(--tgm-report-radius-sm);cursor:pointer;transition:background .15s}.tgm-export__btn:hover:not(:disabled){background:var(--tgm-report-primary-hover)}.tgm-export__btn:disabled{opacity:.5;cursor:not-allowed}.tgm-export__caret{font-size:10px;margin-left:2px}.tgm-export__dropdown{position:absolute;top:calc(100% + 4px);right:0;min-width:140px;background:var(--tgm-report-dropdown-bg);border:1px solid var(--tgm-report-border);border-radius:var(--tgm-report-radius-sm);box-shadow:var(--tgm-report-shadow);z-index:100;animation:tgm-dropIn .12s ease-out;overflow:hidden}.tgm-export__item{display:block;width:100%;padding:8px 14px;font-size:13px;font-family:var(--tgm-report-font-family);color:var(--tgm-report-text);background:transparent;border:none;text-align:left;cursor:pointer;transition:background .1s}.tgm-export__item:hover{background:var(--tgm-report-bg-hover)}.tgm-export__item+.tgm-export__item{border-top:1px solid var(--tgm-report-border)}.tgm-spinner{width:32px;height:32px;border:3px solid var(--tgm-report-border);border-top-color:#fff;border-radius:50%;animation:tgm-spin .8s linear infinite}.tgm-spinner--sm{width:14px;height:14px;border-width:2px}@keyframes tgm-spin{to{transform:rotate(360deg)}}@keyframes tgm-dropIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
163
|
+
}
|
|
164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ExportButtonComponent, decorators: [{
|
|
165
|
+
type: Component,
|
|
166
|
+
args: [{ selector: 'tgm-export-button', standalone: true, imports: [CommonModule], template: "<div class=\"tgm-export\">\n <!-- Custom button template -->\n <ng-container *ngIf=\"buttonTemplate; else defaultButton\">\n <ng-container *ngTemplateOutlet=\"buttonTemplate; context: {\n label: label,\n open: dropdownOpen,\n disabled: disabled,\n exporting: exporting,\n toggle: toggleDropdown\n }\"></ng-container>\n </ng-container>\n\n <!-- Default button -->\n <ng-template #defaultButton>\n <button\n class=\"tgm-export__btn\"\n [ngClass]=\"buttonClass\"\n [disabled]=\"disabled || exporting\"\n (click)=\"onButtonClick($event)\"\n type=\"button\"\n >\n <span class=\"tgm-spinner tgm-spinner--sm\" *ngIf=\"exporting\"></span>\n <span>{{ label }}</span>\n <span class=\"tgm-export__caret\" *ngIf=\"formats.length > 1\">▾</span>\n </button>\n </ng-template>\n\n <!-- Dropdown Menu -->\n <div class=\"tgm-export__dropdown\" [ngClass]=\"dropdownClass\" *ngIf=\"dropdownOpen && formats.length > 1\" (click)=\"onMenuClick($event)\">\n <ng-container *ngFor=\"let fmt of formats; trackBy: trackByFormat\">\n <!-- Custom menu item -->\n <ng-container *ngIf=\"menuItemTemplate; else defaultMenuItem\">\n <ng-container *ngTemplateOutlet=\"menuItemTemplate; context: {\n $implicit: fmt,\n label: getFormatLabel(fmt),\n onExport: onExport.bind(this, fmt)\n }\"></ng-container>\n </ng-container>\n\n <!-- Default menu item -->\n <ng-template #defaultMenuItem>\n <button class=\"tgm-export__item\" (click)=\"onExport(fmt)\" type=\"button\">\n {{ getFormatLabel(fmt) }}\n </button>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: [":host{--tgm-report-bg: rgba(255, 255, 255, .05);--tgm-report-bg-hover: rgba(255, 255, 255, .08);--tgm-report-border: rgba(255, 255, 255, .1);--tgm-report-text: #e5e7eb;--tgm-report-text-secondary: #9ca3af;--tgm-report-primary: #3b82f6;--tgm-report-primary-hover: #2563eb;--tgm-report-radius: 8px;--tgm-report-radius-sm: 4px;--tgm-report-font-family: inherit;--tgm-report-font-size: 14px;--tgm-report-spacing-sm: 8px;--tgm-report-shadow: 0 4px 16px rgba(0, 0, 0, .4);--tgm-report-dropdown-bg: rgba(30, 30, 46, 1);display:inline-block;position:relative;font-family:var(--tgm-report-font-family);font-size:var(--tgm-report-font-size);color:var(--tgm-report-text)}.tgm-export{position:relative;display:inline-flex}.tgm-export__btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;font-size:13px;font-weight:500;font-family:var(--tgm-report-font-family);color:#fff;background:var(--tgm-report-primary);border:none;border-radius:var(--tgm-report-radius-sm);cursor:pointer;transition:background .15s}.tgm-export__btn:hover:not(:disabled){background:var(--tgm-report-primary-hover)}.tgm-export__btn:disabled{opacity:.5;cursor:not-allowed}.tgm-export__caret{font-size:10px;margin-left:2px}.tgm-export__dropdown{position:absolute;top:calc(100% + 4px);right:0;min-width:140px;background:var(--tgm-report-dropdown-bg);border:1px solid var(--tgm-report-border);border-radius:var(--tgm-report-radius-sm);box-shadow:var(--tgm-report-shadow);z-index:100;animation:tgm-dropIn .12s ease-out;overflow:hidden}.tgm-export__item{display:block;width:100%;padding:8px 14px;font-size:13px;font-family:var(--tgm-report-font-family);color:var(--tgm-report-text);background:transparent;border:none;text-align:left;cursor:pointer;transition:background .1s}.tgm-export__item:hover{background:var(--tgm-report-bg-hover)}.tgm-export__item+.tgm-export__item{border-top:1px solid var(--tgm-report-border)}.tgm-spinner{width:32px;height:32px;border:3px solid var(--tgm-report-border);border-top-color:#fff;border-radius:50%;animation:tgm-spin .8s linear infinite}.tgm-spinner--sm{width:14px;height:14px;border-width:2px}@keyframes tgm-spin{to{transform:rotate(360deg)}}@keyframes tgm-dropIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
167
|
+
}], ctorParameters: () => [{ type: i1.ExportService }], propDecorators: { entityType: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], entityIds: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], formats: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], disabled: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], autoExport: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], label: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], excelLabel: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], csvLabel: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], pdfLabel: [{
|
|
184
|
+
type: Input
|
|
185
|
+
}], buttonClass: [{
|
|
186
|
+
type: Input
|
|
187
|
+
}], dropdownClass: [{
|
|
188
|
+
type: Input
|
|
189
|
+
}], buttonTemplate: [{
|
|
190
|
+
type: Input
|
|
191
|
+
}], menuItemTemplate: [{
|
|
192
|
+
type: Input
|
|
193
|
+
}], exportStarted: [{
|
|
194
|
+
type: Output
|
|
195
|
+
}], exportCompleted: [{
|
|
196
|
+
type: Output
|
|
197
|
+
}], exportError: [{
|
|
198
|
+
type: Output
|
|
199
|
+
}], onDocumentClick: [{
|
|
200
|
+
type: HostListener,
|
|
201
|
+
args: ['document:click']
|
|
202
|
+
}] } });
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcmVwb3J0aW5nL2V4cG9ydC1idXR0b24vZXhwb3J0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcmVwb3J0aW5nL2V4cG9ydC1idXR0b24vZXhwb3J0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFrQi9DLE1BQU0sT0FBTyxxQkFBcUI7SUEwQ1o7SUF6Q3BCLGFBQWE7SUFDSixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFNBQVMsQ0FBWTtJQUNyQixPQUFPLEdBQW1CLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFFM0IsZUFBZTtJQUNOLEtBQUssR0FBRyxRQUFRLENBQUM7SUFDakIsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUNyQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFMUIsc0JBQXNCO0lBQ2IsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUNqQixhQUFhLEdBQUcsRUFBRSxDQUFDO0lBRTVCLHlCQUF5QjtJQUNoQixjQUFjLENBTXBCO0lBQ00sZ0JBQWdCLENBSXRCO0lBRUgsZUFBZTtJQUNMLGFBQWEsR0FBRyxJQUFJLFlBQVksRUFBZ0QsQ0FBQztJQUNqRixlQUFlLEdBQUcsSUFBSSxZQUFZLEVB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Z0JBQWdCO3NCQUF4QixLQUFLO2dCQU9JLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQVlQLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwaS9leHBvcnQuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIEV4cG9ydEZvcm1hdCA9ICdleGNlbCcgfCAnY3N2JyB8ICdwZGYnO1xuXG5pbnRlcmZhY2UgRXhwb3J0RW50aXR5Q29uZmlnIHtcbiAgZXhjZWw/OiAoaWRzPzogbnVtYmVyW10pID0+IGFueTtcbiAgY3N2PzogKGlkcz86IG51bWJlcltdKSA9PiBhbnk7XG4gIHBkZj86IChpZHM/OiBudW1iZXJbXSkgPT4gYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0Z20tZXhwb3J0LWJ1dHRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vZXhwb3J0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4cG9ydC1idXR0b24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0QnV0dG9uQ29tcG9uZW50IHtcbiAgLy8g4pSA4pSAIERhdGEg4pSA4pSAXG4gIEBJbnB1dCgpIGVudGl0eVR5cGUgPSAnJztcbiAgQElucHV0KCkgZW50aXR5SWRzPzogbnVtYmVyW107XG4gIEBJbnB1dCgpIGZvcm1hdHM6IEV4cG9ydEZvcm1hdFtdID0gWydleGNlbCcsICdjc3YnLCAncGRmJ107XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9FeHBvcnQgPSB0cnVlO1xuXG4gIC8vIOKUgOKUgCBMYWJlbHMg4pSA4pSAXG4gIEBJbnB1dCgpIGxhYmVsID0gJ0V4cG9ydCc7XG4gIEBJbnB1dCgpIGV4Y2VsTGFiZWwgPSAnRXhjZWwnO1xuICBASW5wdXQoKSBjc3ZMYWJlbCA9ICdDU1YnO1xuICBASW5wdXQoKSBwZGZMYWJlbCA9ICdQREYnO1xuXG4gIC8vIOKUgOKUgCBDU1Mgb3ZlcnJpZGVzIOKUgOKUgFxuICBASW5wdXQoKSBidXR0b25DbGFzcyA9ICcnO1xuICBASW5wdXQoKSBkcm9wZG93bkNsYXNzID0gJyc7XG5cbiAgLy8g4pSA4pSAIEN1c3RvbSB0ZW1wbGF0ZXMg4pSA4pSAXG4gIEBJbnB1dCgpIGJ1dHRvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8e1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgb3BlbjogYm9vbGVhbjtcbiAgICBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBleHBvcnRpbmc6IGJvb2xlYW47XG4gICAgdG9nZ2xlOiAoKSA9PiB2b2lkO1xuICB9PjtcbiAgQElucHV0KCkgbWVudUl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IEV4cG9ydEZvcm1hdDtcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIG9uRXhwb3J0OiAoKSA9PiB2b2lkO1xuICB9PjtcblxuICAvLyDilIDilIAgRXZlbnRzIOKUgOKUgFxuICBAT3V0cHV0KCkgZXhwb3J0U3RhcnRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmb3JtYXQ6IEV4cG9ydEZvcm1hdDsgZW50aXR5VHlwZTogc3RyaW5nIH0+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnRDb21wbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEJsb2I+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnRFcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG5cbiAgZHJvcGRvd25PcGVuID0gZmFsc2U7XG4gIGV4cG9ydGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZW50aXR5TWV0aG9kTWFwOiBSZWNvcmQ8c3RyaW5nLCBFeHBvcnRFbnRpdHlDb25maWc+ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlKSB7XG4gICAgdGhpcy5idWlsZEVudGl0eU1ldGhvZE1hcCgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snKVxuICBvbkRvY3VtZW50Q2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHRvZ2dsZURyb3Bkb3duID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gIXRoaXMuZHJvcGRvd25PcGVuO1xuICB9O1xuXG4gIG9uQnV0dG9uQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZm9ybWF0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMub25FeHBvcnQodGhpcy5mb3JtYXRzWzBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50b2dnbGVEcm9wZG93bigpO1xuICAgIH1cbiAgfVxuXG4gIG9uTWVudUNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgb25FeHBvcnQoZm9ybWF0OiBFeHBvcnRGb3JtYXQpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuZXhwb3J0U3RhcnRlZC5lbWl0KHsgZm9ybWF0LCBlbnRpdHlUeXBlOiB0aGlzLmVudGl0eVR5cGUgfSk7XG5cbiAgICBpZiAoIXRoaXMuYXV0b0V4cG9ydCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5lbnRpdHlNZXRob2RNYXBbdGhpcy5lbnRpdHlUeXBlXTtcbiAgICBjb25zdCBtZXRob2QgPSBjb25maWc/Lltmb3JtYXRdO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICB0aGlzLmV4cG9ydEVycm9yLmVtaXQobmV3IEVycm9yKGBFeHBvcnQgbm90IGF2YWlsYWJsZSBmb3IgJHt0aGlzLmVudGl0eVR5cGV9IGluICR7Zm9ybWF0fSBmb3JtYXRgKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5leHBvcnRpbmcgPSB0cnVlO1xuICAgIG1ldGhvZCh0aGlzLmVudGl0eUlkcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChibG9iOiBCbG9iKSA9PiB7XG4gICAgICAgIHRoaXMuZXhwb3J0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXhwb3J0Q29tcGxldGVkLmVtaXQoYmxvYik7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmV4cG9ydEVycm9yLmVtaXQoZXJyKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRGb3JtYXRMYWJlbChmb3JtYXQ6IEV4cG9ydEZvcm1hdCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2V4Y2VsJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjZWxMYWJlbDtcbiAgICAgIGNhc2UgJ2Nzdic6XG4gICAgICAgIHJldHVybiB0aGlzLmNzdkxhYmVsO1xuICAgICAgY2FzZSAncGRmJzpcbiAgICAgICAgcmV0dXJuIHRoaXMucGRmTGFiZWw7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeUZvcm1hdChfaW5kZXg6IG51bWJlciwgZm9ybWF0OiBFeHBvcnRGb3JtYXQpOiBzdHJpbmcge1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRW50aXR5TWV0aG9kTWFwKCk6IHZvaWQge1xuICAgIGNvbnN0IHN2YyA9IHRoaXMuZXhwb3J0U2VydmljZTtcbiAgICB0aGlzLmVudGl0eU1ldGhvZE1hcCA9IHtcbiAgICAgIGluc3BlY3Rpb25zOiB7XG4gICAgICAgIGV4Y2VsOiAoaWRzKSA9PiBzdmMuZXhwb3J0SW5zcGVjdGlvbnNFeGNlbChpZHMpLFxuICAgICAgICBjc3Y6IChpZHMpID0+IHN2Yy5leHBvcnRJbnNwZWN0aW9uc0NzdihpZHMpLFxuICAgICAgICBwZGY6IChpZHMpID0+IHN2Yy5leHBvcnRJbnNwZWN0aW9uc1BkZihpZHMpLFxuICAgICAgfSxcbiAgICAgIGludGVydmVudGlvbnM6IHtcbiAgICAgICAgZXhjZWw6IChpZHMpID0+IHN2Yy5leHBvcnRJbnRlcnZlbnRpb25zRXhjZWwoaWRzKSxcbiAgICAgICAgY3N2OiAoaWRzKSA9PiBzdmMuZXhwb3J0SW50ZXJ2ZW50aW9uc0NzdihpZHMpLFxuICAgICAgICBwZGY6IChpZHMpID0+IHN2Yy5leHBvcnRJbnRlcnZlbnRpb25zUGRmKGlkcyksXG4gICAgICB9LFxuICAgICAgZmFpbHVyZXM6IHtcbiAgICAgICAgZXhjZWw6IChpZHMpID0+IHN2Yy5leHBvcnRGYWlsdXJlc0V4Y2VsKGlkcyksXG4gICAgICAgIGNzdjogKGlkcykgPT4gc3ZjLmV4cG9ydEZhaWx1cmVzQ3N2KGlkcyksXG4gICAgICAgIHBkZjogKGlkcykgPT4gc3ZjLmV4cG9ydEZhaWx1cmVzUGRmKGlkcyksXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBleGNlbDogKGlkcykgPT4gc3ZjLmV4cG9ydENvbXBvbmVudHNFeGNlbChpZHMpLFxuICAgICAgfSxcbiAgICAgIHVuaXRzOiB7XG4gICAgICAgIGV4Y2VsOiAoaWRzKSA9PiBzdmMuZXhwb3J0VW5pdHNFeGNlbChpZHMpLFxuICAgICAgfSxcbiAgICAgICdnYXRlLXN5c3RlbXMnOiB7XG4gICAgICAgIGV4Y2VsOiAoaWRzKSA9PiBzdmMuZXhwb3J0R2F0ZVN5c3RlbXNFeGNlbChpZHMpLFxuICAgICAgICBjc3Y6IChpZHMpID0+IHN2Yy5leHBvcnRHYXRlU3lzdGVtc0NzdihpZHMpLFxuICAgICAgICBwZGY6IChpZHMpID0+IHN2Yy5leHBvcnRHYXRlU3lzdGVtc1BkZihpZHMpLFxuICAgICAgfSxcbiAgICAgICdmaXNoLW1vbml0b3JpbmcnOiB7XG4gICAgICAgIGV4Y2VsOiAoaWRzKSA9PiBzdmMuZXhwb3J0RmlzaE1vbml0b3JpbmdFeGNlbChpZHMpLFxuICAgICAgICBjc3Y6IChpZHMpID0+IHN2Yy5leHBvcnRGaXNoTW9uaXRvcmluZ0NzdihpZHMpLFxuICAgICAgICBwZGY6IChpZHMpID0+IHN2Yy5leHBvcnRGaXNoTW9uaXRvcmluZ1BkZihpZHMpLFxuICAgICAgfSxcbiAgICAgICdiYXRoeW1ldHJpYy1zdXJ2ZXlzJzoge1xuICAgICAgICBleGNlbDogKGlkcykgPT4gc3ZjLmV4cG9ydEJhdGh5bWV0cmljU3VydmV5c0V4Y2VsKGlkcyksXG4gICAgICAgIGNzdjogKGlkcykgPT4gc3ZjLmV4cG9ydEJhdGh5bWV0cmljU3VydmV5c0NzdihpZHMpLFxuICAgICAgICBwZGY6IChpZHMpID0+IHN2Yy5leHBvcnRCYXRoeW1ldHJpY1N1cnZleXNQZGYoaWRzKSxcbiAgICAgIH0sXG4gICAgICAnbGFib3JhdG9yeS1yZXN1bHRzJzoge1xuICAgICAgICBleGNlbDogKGlkcykgPT4gc3ZjLmV4cG9ydExhYm9yYXRvcnlSZXN1bHRzRXhjZWwoaWRzKSxcbiAgICAgICAgY3N2OiAoaWRzKSA9PiBzdmMuZXhwb3J0TGFib3JhdG9yeVJlc3VsdHNDc3YoaWRzKSxcbiAgICAgICAgcGRmOiAoaWRzKSA9PiBzdmMuZXhwb3J0TGFib3JhdG9yeVJlc3VsdHNQZGYoaWRzKSxcbiAgICAgIH0sXG4gICAgICAnbWFudWFsLXJlYWRpbmdzJzoge1xuICAgICAgICBleGNlbDogKGlkcykgPT4gc3ZjLmV4cG9ydE1hbnVhbFJlYWRpbmdzRXhjZWwoaWRzKSxcbiAgICAgICAgY3N2OiAoaWRzKSA9PiBzdmMuZXhwb3J0TWFudWFsUmVhZGluZ3NDc3YoaWRzKSxcbiAgICAgICAgcGRmOiAoaWRzKSA9PiBzdmMuZXhwb3J0TWFudWFsUmVhZGluZ3NQZGYoaWRzKSxcbiAgICAgIH0sXG4gICAgICAnb3BlcmF0aW9uYWwtb2JzZXJ2YXRpb25zJzoge1xuICAgICAgICBleGNlbDogKGlkcykgPT4gc3ZjLmV4cG9ydE9wZXJhdGlvbmFsT2JzZXJ2YXRpb25zRXhjZWwoaWRzKSxcbiAgICAgICAgY3N2OiAoaWRzKSA9PiBzdmMuZXhwb3J0T3BlcmF0aW9uYWxPYnNlcnZhdGlvbnNDc3YoaWRzKSxcbiAgICAgICAgcGRmOiAoaWRzKSA9PiBzdmMuZXhwb3J0T3BlcmF0aW9uYWxPYnNlcnZhdGlvbnNQZGYoaWRzKSxcbiAgICAgIH0sXG4gICAgICAncmVndWxhdG9yeS11cGRhdGVzJzoge1xuICAgICAgICBleGNlbDogKGlkcykgPT4gc3ZjLmV4cG9ydFJlZ3VsYXRvcnlVcGRhdGVzRXhjZWwoaWRzKSxcbiAgICAgICAgY3N2OiAoaWRzKSA9PiBzdmMuZXhwb3J0UmVndWxhdG9yeVVwZGF0ZXNDc3YoaWRzKSxcbiAgICAgICAgcGRmOiAoaWRzKSA9PiBzdmMuZXhwb3J0UmVndWxhdG9yeVVwZGF0ZXNQZGYoaWRzKSxcbiAgICAgIH0sXG4gICAgICAnYWktc2NlbmFyaW9zJzoge1xuICAgICAgICBleGNlbDogKGlkcykgPT4gc3ZjLmV4cG9ydEFJU2NlbmFyaW9zRXhjZWwoaWRzKSxcbiAgICAgICAgY3N2OiAoaWRzKSA9PiBzdmMuZXhwb3J0QUlTY2VuYXJpb3NDc3YoaWRzKSxcbiAgICAgICAgcGRmOiAoaWRzKSA9PiBzdmMuZXhwb3J0QUlTY2VuYXJpb3NQZGYoaWRzKSxcbiAgICAgIH0sXG4gICAgICAnYWxlcnQtZGVmaW5pdGlvbnMnOiB7XG4gICAgICAgIGV4Y2VsOiAoaWRzKSA9PiBzdmMuZXhwb3J0QWxlcnREZWZpbml0aW9uc0V4Y2VsKGlkcyksXG4gICAgICAgIGNzdjogKGlkcykgPT4gc3ZjLmV4cG9ydEFsZXJ0RGVmaW5pdGlvbnNDc3YoaWRzKSxcbiAgICAgICAgcGRmOiAoaWRzKSA9PiBzdmMuZXhwb3J0QWxlcnREZWZpbml0aW9uc1BkZihpZHMpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGdtLWV4cG9ydFwiPlxuICA8IS0tIEN1c3RvbSBidXR0b24gdGVtcGxhdGUgLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b25UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0QnV0dG9uXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlOyBjb250ZXh0OiB7XG4gICAgICBsYWJlbDogbGFiZWwsXG4gICAgICBvcGVuOiBkcm9wZG93bk9wZW4sXG4gICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICBleHBvcnRpbmc6IGV4cG9ydGluZyxcbiAgICAgIHRvZ2dsZTogdG9nZ2xlRHJvcGRvd25cbiAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDwhLS0gRGVmYXVsdCBidXR0b24gLS0+XG4gIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEJ1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInRnbS1leHBvcnRfX2J0blwiXG4gICAgICBbbmdDbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgZXhwb3J0aW5nXCJcbiAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKCRldmVudClcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tc3Bpbm5lciB0Z20tc3Bpbm5lci0tc21cIiAqbmdJZj1cImV4cG9ydGluZ1wiPjwvc3Bhbj5cbiAgICAgIDxzcGFuPnt7IGxhYmVsIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0Z20tZXhwb3J0X19jYXJldFwiICpuZ0lmPVwiZm9ybWF0cy5sZW5ndGggPiAxXCI+JiM5NjYyOzwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8IS0tIERyb3Bkb3duIE1lbnUgLS0+XG4gIDxkaXYgY2xhc3M9XCJ0Z20tZXhwb3J0X19kcm9wZG93blwiIFtuZ0NsYXNzXT1cImRyb3Bkb3duQ2xhc3NcIiAqbmdJZj1cImRyb3Bkb3duT3BlbiAmJiBmb3JtYXRzLmxlbmd0aCA+IDFcIiAoY2xpY2spPVwib25NZW51Q2xpY2soJGV2ZW50KVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZtdCBvZiBmb3JtYXRzOyB0cmFja0J5OiB0cmFja0J5Rm9ybWF0XCI+XG4gICAgICA8IS0tIEN1c3RvbSBtZW51IGl0ZW0gLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW1UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0TWVudUl0ZW1cIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHtcbiAgICAgICAgICAkaW1wbGljaXQ6IGZtdCxcbiAgICAgICAgICBsYWJlbDogZ2V0Rm9ybWF0TGFiZWwoZm10KSxcbiAgICAgICAgICBvbkV4cG9ydDogb25FeHBvcnQuYmluZCh0aGlzLCBmbXQpXG4gICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIERlZmF1bHQgbWVudSBpdGVtIC0tPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TWVudUl0ZW0+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ0Z20tZXhwb3J0X19pdGVtXCIgKGNsaWNrKT1cIm9uRXhwb3J0KGZtdClcIiB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAge3sgZ2V0Rm9ybWF0TGFiZWwoZm10KSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|