@memberjunction/ng-dashboards 6.2.0-edge.5 → 6.2.0-edge.7
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/README.md +35 -0
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
- package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
- package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
- package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
- package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
- package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
- package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +21 -13
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
- package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
- package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
- package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
- package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts +7 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +210 -57
- package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts +12 -11
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.d.ts.map +1 -1
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js +15 -15
- package/dist/AI/components/duplicates/duplicate-detection-run-scope.js.map +1 -1
- package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/AI/components/execution-monitoring.component.js +28 -16
- package/dist/AI/components/execution-monitoring.component.js.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +32 -8
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +18 -9
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.d.ts +9 -4
- package/dist/AI/components/vectors/sensitive-fields.d.ts.map +1 -1
- package/dist/AI/components/vectors/sensitive-fields.js +39 -14
- package/dist/AI/components/vectors/sensitive-fields.js.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.d.ts +13 -0
- package/dist/AI/components/vectors/vector-document-rules.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-document-rules.js +14 -0
- package/dist/AI/components/vectors/vector-document-rules.js.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts +34 -14
- package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
- package/dist/AI/components/vectors/vector-management-resource.component.js +134 -51
- package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
- package/dist/AI/components/vectors/vector-store-selection.d.ts +32 -0
- package/dist/AI/components/vectors/vector-store-selection.d.ts.map +1 -0
- package/dist/AI/components/vectors/vector-store-selection.js +57 -0
- package/dist/AI/components/vectors/vector-store-selection.js.map +1 -0
- package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
- package/dist/AI/services/ai-instrumentation.service.js +4 -2
- package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
- package/dist/Actions/action-result-code.d.ts +80 -0
- package/dist/Actions/action-result-code.d.ts.map +1 -0
- package/dist/Actions/action-result-code.js +163 -0
- package/dist/Actions/action-result-code.js.map +1 -0
- package/dist/Actions/components/actions-overview.component.d.ts +8 -0
- package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +12 -9
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
- package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +65 -42
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
- package/dist/Actions/components/explorer/action-card.component.js +5 -4
- package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +198 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +289 -0
- package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
- package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
- package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
- package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
- package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
- package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
- package/dist/ChiefOfStaff/index.d.ts +6 -0
- package/dist/ChiefOfStaff/index.d.ts.map +1 -0
- package/dist/ChiefOfStaff/index.js +6 -0
- package/dist/ChiefOfStaff/index.js.map +1 -0
- package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-logs-resource.component.js +2 -1
- package/dist/Communication/communication-logs-resource.component.js.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-monitor-resource.component.js +26 -21
- package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
- package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
- package/dist/Communication/communication-runs-resource.component.js +14 -13
- package/dist/Communication/communication-runs-resource.component.js.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
- package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
- package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
- package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
- package/dist/ComponentStudio/services/component-version.service.js +3 -0
- package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.d.ts +17 -2
- package/dist/DashboardEditor/dashboard-editor.component.d.ts.map +1 -1
- package/dist/DashboardEditor/dashboard-editor.component.js +94 -43
- package/dist/DashboardEditor/dashboard-editor.component.js.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +45 -2
- package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
- package/dist/DataExplorer/data-explorer-dashboard.component.js +178 -55
- package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.d.ts +2 -0
- package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -1
- package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +2 -2
- package/dist/DevTools/lazy-module-status.component.js +2 -2
- package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
- package/dist/FormBuilder/form-builder-resource.component.js +5 -0
- package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +2 -2
- package/dist/Integration/services/integration-data.service.d.ts +1 -1
- package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
- package/dist/Integration/services/integration-data.service.js +4 -3
- package/dist/Integration/services/integration-data.service.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
- package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.d.ts +10 -2
- package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
- package/dist/LoginStudio/login-studio-resource.component.js +111 -77
- package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.d.ts +24 -4
- package/dist/MCP/mcp-dashboard.component.d.ts.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +118 -65
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.d.ts.map +1 -1
- package/dist/PredictiveStudio/business-predictions.view-models.js +3 -3
- package/dist/PredictiveStudio/business-predictions.view-models.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts +6 -63
- package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-experiments.component.js +257 -521
- package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts +0 -18
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +124 -251
- package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts +5 -9
- package/dist/PredictiveStudio/components/ps-pipelines.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-pipelines.component.js +98 -130
- package/dist/PredictiveStudio/components/ps-pipelines.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts +53 -4
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +338 -326
- package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts +19 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.d.ts.map +1 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js +85 -0
- package/dist/PredictiveStudio/components/ps-row-drivers.component.js.map +1 -0
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts +19 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js +52 -2
- package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts +3 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-agent-context.js +3 -0
- package/dist/PredictiveStudio/predictive-studio-agent-context.js.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts +27 -4
- package/dist/PredictiveStudio/predictive-studio-score-history.service.d.ts.map +1 -1
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js +94 -61
- package/dist/PredictiveStudio/predictive-studio-score-history.service.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts +29 -5
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +186 -103
- package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js +1 -1
- package/dist/PredictiveStudio/resources/ps-studio-resource.component.js.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
- package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
- package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
- package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
- package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
- package/dist/UserRoutines/user-routines-resource.component.js +22 -4
- package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
- package/dist/VersionHistory/components/diff-resource.component.js +1 -0
- package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
- package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
- package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
- package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
- package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
- package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
- package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
- package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
- package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
- package/dist/VideoStudio/index.d.ts +12 -0
- package/dist/VideoStudio/index.d.ts.map +1 -0
- package/dist/VideoStudio/index.js +12 -0
- package/dist/VideoStudio/index.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
- package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
- package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
- package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
- package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
- package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
- package/dist/VideoStudio/video-studio-agent-context.js +992 -0
- package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
- package/dist/ai-dashboards.module.d.ts +25 -21
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +25 -3
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/module.d.ts +13 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +7 -0
- package/dist/module.js.map +1 -1
- package/dist/public-api.d.ts +8 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +10 -0
- package/dist/public-api.js.map +1 -1
- package/dist/shared/action-scheduled-job.d.ts.map +1 -1
- package/dist/shared/action-scheduled-job.js +2 -0
- package/dist/shared/action-scheduled-job.js.map +1 -1
- package/dist/video-studio-dashboards.module.d.ts +40 -0
- package/dist/video-studio-dashboards.module.d.ts.map +1 -0
- package/dist/video-studio-dashboards.module.js +159 -0
- package/dist/video-studio-dashboards.module.js.map +1 -0
- package/package.json +77 -71
- package/dist/PredictiveStudio/at-risk.view-models.d.ts +0 -120
- package/dist/PredictiveStudio/at-risk.view-models.d.ts.map +0 -1
- package/dist/PredictiveStudio/at-risk.view-models.js +0 -261
- package/dist/PredictiveStudio/at-risk.view-models.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts +0 -109
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js +0 -323
- package/dist/PredictiveStudio/components/ps-confirm-modal.component.js.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts +0 -137
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.d.ts.map +0 -1
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js +0 -826
- package/dist/PredictiveStudio/components/ps-run-experiment-modal.component.js.map +0 -1
|
@@ -0,0 +1,1481 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild, inject, } from '@angular/core';
|
|
8
|
+
import { CompositeKey, LogError, RunView } from '@memberjunction/core';
|
|
9
|
+
import { BrandKitEngine, MJEnvironmentEntityExtended, } from '@memberjunction/core-entities';
|
|
10
|
+
import { EscapeSQLString, RegisterClass, UUIDsEqual } from '@memberjunction/global';
|
|
11
|
+
import { GraphQLDataProvider, GraphQLFileStorageClient, } from '@memberjunction/graphql-dataprovider';
|
|
12
|
+
import { FormatVideoTime, GetVideoStatusBadgeVariant, } from '@memberjunction/ng-artifacts';
|
|
13
|
+
import { ArtifactPermissionService } from '@memberjunction/ng-conversations';
|
|
14
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
15
|
+
import { VSStudioSlideInStateService } from '../services/vs-studio-slide-in-state.service';
|
|
16
|
+
import { BuildProductionsAgentContext, CountActiveProductionPopoverFilters, FilterProductionCards, ParseArchetypeDefaultFormats, ResolveVideoStudioItem, } from '../video-studio-agent-context';
|
|
17
|
+
import * as i0 from "@angular/core";
|
|
18
|
+
import * as i1 from "@angular/forms";
|
|
19
|
+
import * as i2 from "@memberjunction/ng-shared-generic";
|
|
20
|
+
import * as i3 from "@memberjunction/ng-artifacts";
|
|
21
|
+
import * as i4 from "@memberjunction/ng-conversations";
|
|
22
|
+
import * as i5 from "../components/vs-studio-slide-in.component";
|
|
23
|
+
import * as i6 from "@memberjunction/ng-ui-components";
|
|
24
|
+
const _c0 = ["studioSlideIn"];
|
|
25
|
+
const _forTrack0 = ($index, $item) => $item.ID;
|
|
26
|
+
function VideoStudioProductionsResourceComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
28
|
+
i0.ɵɵelementStart(0, "div", 10)(1, "mj-page-search", 17);
|
|
29
|
+
i0.ɵɵlistener("ValueChange", function VideoStudioProductionsResourceComponent_Conditional_11_Template_mj_page_search_ValueChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSearchChange($event)); });
|
|
30
|
+
i0.ɵɵelementEnd();
|
|
31
|
+
i0.ɵɵelementStart(2, "mj-filter-popover", 18);
|
|
32
|
+
i0.ɵɵlistener("ClearAllRequested", function VideoStudioProductionsResourceComponent_Conditional_11_Template_mj_filter_popover_ClearAllRequested_2_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ClearAllFilters()); });
|
|
33
|
+
i0.ɵɵelementStart(3, "mj-filter-panel", 19);
|
|
34
|
+
i0.ɵɵlistener("ValuesChange", function VideoStudioProductionsResourceComponent_Conditional_11_Template_mj_filter_panel_ValuesChange_3_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnFilterValuesChange($event)); });
|
|
35
|
+
i0.ɵɵelementEnd();
|
|
36
|
+
i0.ɵɵelementStart(4, "div", 20)(5, "mj-filter-field", 21)(6, "mj-datepicker", 22);
|
|
37
|
+
i0.ɵɵlistener("ngModelChange", function VideoStudioProductionsResourceComponent_Conditional_11_Template_mj_datepicker_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDateFromChange($event)); });
|
|
38
|
+
i0.ɵɵelementEnd()();
|
|
39
|
+
i0.ɵɵelementStart(7, "mj-filter-field", 23)(8, "mj-datepicker", 24);
|
|
40
|
+
i0.ɵɵlistener("ngModelChange", function VideoStudioProductionsResourceComponent_Conditional_11_Template_mj_datepicker_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnDateToChange($event)); });
|
|
41
|
+
i0.ɵɵelementEnd()()()()();
|
|
42
|
+
} if (rf & 2) {
|
|
43
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
44
|
+
i0.ɵɵadvance();
|
|
45
|
+
i0.ɵɵproperty("Value", ctx_r1.SearchText);
|
|
46
|
+
i0.ɵɵadvance();
|
|
47
|
+
i0.ɵɵproperty("ActiveCount", ctx_r1.ActivePopoverFilterCount)("ShowClearAll", ctx_r1.ActivePopoverFilterCount > 0);
|
|
48
|
+
i0.ɵɵadvance();
|
|
49
|
+
i0.ɵɵproperty("Fields", ctx_r1.FilterFields)("Values", ctx_r1.FilterValues)("ShowReset", false);
|
|
50
|
+
i0.ɵɵadvance(3);
|
|
51
|
+
i0.ɵɵproperty("ngModel", ctx_r1.DateFromDate);
|
|
52
|
+
i0.ɵɵadvance(2);
|
|
53
|
+
i0.ɵɵproperty("ngModel", ctx_r1.DateToDate);
|
|
54
|
+
} }
|
|
55
|
+
function VideoStudioProductionsResourceComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
56
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
57
|
+
i0.ɵɵelement(1, "mj-loading", 25);
|
|
58
|
+
i0.ɵɵelementEnd();
|
|
59
|
+
} }
|
|
60
|
+
function VideoStudioProductionsResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
62
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 26);
|
|
63
|
+
i0.ɵɵlistener("Action", function VideoStudioProductionsResourceComponent_Conditional_15_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Refresh()); });
|
|
64
|
+
i0.ɵɵelementEnd();
|
|
65
|
+
} if (rf & 2) {
|
|
66
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
67
|
+
i0.ɵɵproperty("Message", ctx_r1.LoadError);
|
|
68
|
+
} }
|
|
69
|
+
function VideoStudioProductionsResourceComponent_Conditional_16_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
70
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
71
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 29);
|
|
72
|
+
i0.ɵɵlistener("Action", function VideoStudioProductionsResourceComponent_Conditional_16_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenNewProductionCopilot()); });
|
|
73
|
+
i0.ɵɵelementEnd();
|
|
74
|
+
} }
|
|
75
|
+
function VideoStudioProductionsResourceComponent_Conditional_16_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
76
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
77
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 30);
|
|
78
|
+
i0.ɵɵlistener("Action", function VideoStudioProductionsResourceComponent_Conditional_16_Conditional_1_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ResetFiltersAndSearch()); });
|
|
79
|
+
i0.ɵɵelementEnd();
|
|
80
|
+
} }
|
|
81
|
+
function VideoStudioProductionsResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
82
|
+
i0.ɵɵconditionalCreate(0, VideoStudioProductionsResourceComponent_Conditional_16_Conditional_0_Template, 1, 0, "mj-empty-state", 27)(1, VideoStudioProductionsResourceComponent_Conditional_16_Conditional_1_Template, 1, 0, "mj-empty-state", 28);
|
|
83
|
+
} if (rf & 2) {
|
|
84
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
85
|
+
i0.ɵɵconditional(ctx_r1.AllProductions.length === 0 ? 0 : 1);
|
|
86
|
+
} }
|
|
87
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵelement(0, "img", 37);
|
|
89
|
+
} if (rf & 2) {
|
|
90
|
+
const item_r7 = i0.ɵɵnextContext().$implicit;
|
|
91
|
+
i0.ɵɵproperty("src", item_r7.PosterUrl, i0.ɵɵsanitizeUrl)("alt", item_r7.Name + " poster");
|
|
92
|
+
} }
|
|
93
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
+
i0.ɵɵelementStart(0, "div", 38);
|
|
95
|
+
i0.ɵɵelement(1, "i", 45);
|
|
96
|
+
i0.ɵɵelementEnd();
|
|
97
|
+
} }
|
|
98
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
99
|
+
i0.ɵɵelementStart(0, "span", 40);
|
|
100
|
+
i0.ɵɵtext(1);
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const item_r7 = i0.ɵɵnextContext().$implicit;
|
|
104
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
105
|
+
i0.ɵɵadvance();
|
|
106
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.FormatDuration(item_r7.DurationSeconds), " ");
|
|
107
|
+
} }
|
|
108
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
109
|
+
i0.ɵɵelementStart(0, "span", 44);
|
|
110
|
+
i0.ɵɵtext(1);
|
|
111
|
+
i0.ɵɵelementEnd();
|
|
112
|
+
} if (rf & 2) {
|
|
113
|
+
const item_r7 = i0.ɵɵnextContext().$implicit;
|
|
114
|
+
i0.ɵɵadvance();
|
|
115
|
+
i0.ɵɵtextInterpolate1(" ", item_r7.Archetype, " ");
|
|
116
|
+
} }
|
|
117
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_12_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
118
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
119
|
+
i0.ɵɵtext(1, "\u00B7");
|
|
120
|
+
i0.ɵɵelementEnd();
|
|
121
|
+
} }
|
|
122
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
123
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
124
|
+
i0.ɵɵconditionalCreate(0, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_12_Conditional_0_Template, 2, 0, "span", 46);
|
|
125
|
+
i0.ɵɵelementStart(1, "button", 47);
|
|
126
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_12_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r8); const item_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenBrandKitRecord(item_r7.BrandKitID, $event)); });
|
|
127
|
+
i0.ɵɵtext(2);
|
|
128
|
+
i0.ɵɵelementEnd();
|
|
129
|
+
} if (rf & 2) {
|
|
130
|
+
const item_r7 = i0.ɵɵnextContext().$implicit;
|
|
131
|
+
i0.ɵɵconditional(item_r7.Archetype ? 0 : -1);
|
|
132
|
+
i0.ɵɵadvance(2);
|
|
133
|
+
i0.ɵɵtextInterpolate1(" ", item_r7.BrandKitName || "Brand kit", " ");
|
|
134
|
+
} }
|
|
135
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_13_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
137
|
+
i0.ɵɵtext(1, "\u00B7");
|
|
138
|
+
i0.ɵɵelementEnd();
|
|
139
|
+
} }
|
|
140
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_13_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelement(0, "mj-video-format-glyph", 49);
|
|
142
|
+
} if (rf & 2) {
|
|
143
|
+
const fmt_r9 = ctx.$implicit;
|
|
144
|
+
i0.ɵɵproperty("Format", fmt_r9);
|
|
145
|
+
} }
|
|
146
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
147
|
+
i0.ɵɵconditionalCreate(0, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_13_Conditional_0_Template, 2, 0, "span", 46);
|
|
148
|
+
i0.ɵɵelementStart(1, "span", 48);
|
|
149
|
+
i0.ɵɵrepeaterCreate(2, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_13_For_3_Template, 1, 1, "mj-video-format-glyph", 49, i0.ɵɵrepeaterTrackByIdentity);
|
|
150
|
+
i0.ɵɵelementEnd();
|
|
151
|
+
} if (rf & 2) {
|
|
152
|
+
const item_r7 = i0.ɵɵnextContext().$implicit;
|
|
153
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
154
|
+
i0.ɵɵconditional(item_r7.Archetype || item_r7.BrandKitName || item_r7.BrandKitID ? 0 : -1);
|
|
155
|
+
i0.ɵɵadvance(2);
|
|
156
|
+
i0.ɵɵrepeater(ctx_r1.ParseFormats(item_r7.AspectRatio));
|
|
157
|
+
} }
|
|
158
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
159
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
160
|
+
i0.ɵɵelementStart(0, "article", 35);
|
|
161
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Template_article_click_0_listener() { const item_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectProduction(item_r7)); })("keydown.enter", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Template_article_keydown_enter_0_listener() { const item_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectProduction(item_r7)); })("keydown.space", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Template_article_keydown_space_0_listener($event) { const item_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); $event.preventDefault(); return i0.ɵɵresetView(ctx_r1.SelectProduction(item_r7)); });
|
|
162
|
+
i0.ɵɵelementStart(1, "div", 36);
|
|
163
|
+
i0.ɵɵconditionalCreate(2, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_2_Template, 1, 2, "img", 37)(3, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_3_Template, 2, 0, "div", 38);
|
|
164
|
+
i0.ɵɵelementStart(4, "mj-video-badge", 39);
|
|
165
|
+
i0.ɵɵtext(5);
|
|
166
|
+
i0.ɵɵelementEnd();
|
|
167
|
+
i0.ɵɵconditionalCreate(6, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_6_Template, 2, 1, "span", 40);
|
|
168
|
+
i0.ɵɵelementEnd();
|
|
169
|
+
i0.ɵɵelementStart(7, "div", 41)(8, "h3", 42);
|
|
170
|
+
i0.ɵɵtext(9);
|
|
171
|
+
i0.ɵɵelementEnd();
|
|
172
|
+
i0.ɵɵelementStart(10, "div", 43);
|
|
173
|
+
i0.ɵɵconditionalCreate(11, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_11_Template, 2, 1, "span", 44);
|
|
174
|
+
i0.ɵɵconditionalCreate(12, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_12_Template, 3, 2);
|
|
175
|
+
i0.ɵɵconditionalCreate(13, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Conditional_13_Template, 4, 1);
|
|
176
|
+
i0.ɵɵelementEnd()()();
|
|
177
|
+
} if (rf & 2) {
|
|
178
|
+
const item_r7 = ctx.$implicit;
|
|
179
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
180
|
+
i0.ɵɵclassProp("vs-production-card--selected", (ctx_r1.SelectedProduction == null ? null : ctx_r1.SelectedProduction.ID) === item_r7.ID);
|
|
181
|
+
i0.ɵɵattribute("data-testid", "production-card-" + item_r7.ID)("aria-pressed", (ctx_r1.SelectedProduction == null ? null : ctx_r1.SelectedProduction.ID) === item_r7.ID);
|
|
182
|
+
i0.ɵɵadvance(2);
|
|
183
|
+
i0.ɵɵconditional(item_r7.PosterUrl ? 2 : 3);
|
|
184
|
+
i0.ɵɵadvance(2);
|
|
185
|
+
i0.ɵɵproperty("Variant", ctx_r1.StatusBadgeVariant(item_r7.Status));
|
|
186
|
+
i0.ɵɵadvance();
|
|
187
|
+
i0.ɵɵtextInterpolate1(" ", item_r7.Status, " ");
|
|
188
|
+
i0.ɵɵadvance();
|
|
189
|
+
i0.ɵɵconditional(item_r7.DurationSeconds !== null ? 6 : -1);
|
|
190
|
+
i0.ɵɵadvance(2);
|
|
191
|
+
i0.ɵɵproperty("title", item_r7.Name);
|
|
192
|
+
i0.ɵɵadvance();
|
|
193
|
+
i0.ɵɵtextInterpolate1(" ", item_r7.Name, " ");
|
|
194
|
+
i0.ɵɵadvance(2);
|
|
195
|
+
i0.ɵɵconditional(item_r7.Archetype ? 11 : -1);
|
|
196
|
+
i0.ɵɵadvance();
|
|
197
|
+
i0.ɵɵconditional(item_r7.BrandKitName || item_r7.BrandKitID ? 12 : -1);
|
|
198
|
+
i0.ɵɵadvance();
|
|
199
|
+
i0.ɵɵconditional(item_r7.AspectRatio ? 13 : -1);
|
|
200
|
+
} }
|
|
201
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵelementStart(0, "div", 32);
|
|
203
|
+
i0.ɵɵrepeaterCreate(1, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_For_2_Template, 14, 13, "article", 34, _forTrack0);
|
|
204
|
+
i0.ɵɵelementEnd();
|
|
205
|
+
} if (rf & 2) {
|
|
206
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
207
|
+
i0.ɵɵadvance();
|
|
208
|
+
i0.ɵɵrepeater(ctx_r1.FilteredProductions);
|
|
209
|
+
} }
|
|
210
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
211
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
212
|
+
i0.ɵɵelementStart(0, "button", 68);
|
|
213
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenFullViewer()); });
|
|
214
|
+
i0.ɵɵelement(1, "i", 45);
|
|
215
|
+
i0.ɵɵelementStart(2, "span");
|
|
216
|
+
i0.ɵɵtext(3, "Storyboard, review & versions");
|
|
217
|
+
i0.ɵɵelementEnd()();
|
|
218
|
+
} }
|
|
219
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
220
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
221
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
222
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.BackToOverview()); });
|
|
223
|
+
i0.ɵɵelement(1, "i", 53);
|
|
224
|
+
i0.ɵɵelementStart(2, "span");
|
|
225
|
+
i0.ɵɵtext(3, "Back to overview");
|
|
226
|
+
i0.ɵɵelementEnd()();
|
|
227
|
+
} }
|
|
228
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
229
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
230
|
+
i0.ɵɵelementStart(0, "mj-artifact-viewer-panel", 70);
|
|
231
|
+
i0.ɵɵlistener("Closed", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_22_Template_mj_artifact_viewer_panel_Closed_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.BackToOverview()); })("ShareRequested", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_22_Template_mj_artifact_viewer_panel_ShareRequested_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenShareModal($event)); })("NavigateToLink", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_22_Template_mj_artifact_viewer_panel_NavigateToLink_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnNavigateToArtifactLink($event)); });
|
|
232
|
+
i0.ɵɵelementEnd();
|
|
233
|
+
} if (rf & 2) {
|
|
234
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
235
|
+
i0.ɵɵproperty("artifactId", ctx_r1.SelectedProduction.ID)("Provider", ctx_r1.Provider)("CurrentUser", ctx_r1.ProviderToUse.CurrentUser)("canShare", ctx_r1.CanShareSelected)("canEdit", ctx_r1.CanEditSelected)("ShowSaveToCollection", false)("ShowMaximizeButton", false);
|
|
236
|
+
} }
|
|
237
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
238
|
+
i0.ɵɵelementStart(0, "div", 65);
|
|
239
|
+
i0.ɵɵelement(1, "mj-loading", 71);
|
|
240
|
+
i0.ɵɵelementEnd();
|
|
241
|
+
} }
|
|
242
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
243
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
244
|
+
i0.ɵɵelementStart(0, "div", 66)(1, "mj-empty-state", 72);
|
|
245
|
+
i0.ɵɵlistener("Action", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_24_Template_mj_empty_state_Action_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RetryLoadSelectedProductionVersion()); });
|
|
246
|
+
i0.ɵɵelementEnd()();
|
|
247
|
+
} if (rf & 2) {
|
|
248
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
249
|
+
i0.ɵɵadvance();
|
|
250
|
+
i0.ɵɵproperty("Message", ctx_r1.VersionLoadError);
|
|
251
|
+
} }
|
|
252
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
253
|
+
i0.ɵɵelement(0, "mj-video-production-viewer", 67);
|
|
254
|
+
} if (rf & 2) {
|
|
255
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
256
|
+
i0.ɵɵproperty("artifactVersion", ctx_r1.SelectedVersionEntity)("Provider", ctx_r1.ProviderToUse)("BrandKitName", ctx_r1.SelectedProduction.BrandKitName);
|
|
257
|
+
} }
|
|
258
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
259
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
260
|
+
i0.ɵɵelementStart(0, "aside", 33)(1, "div", 50)(2, "div", 51)(3, "button", 52);
|
|
261
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ShowAllProductions()); });
|
|
262
|
+
i0.ɵɵelement(4, "i", 53);
|
|
263
|
+
i0.ɵɵelementStart(5, "span");
|
|
264
|
+
i0.ɵɵtext(6, "All productions");
|
|
265
|
+
i0.ɵɵelementEnd()();
|
|
266
|
+
i0.ɵɵelementStart(7, "span", 54);
|
|
267
|
+
i0.ɵɵtext(8);
|
|
268
|
+
i0.ɵɵelementEnd()();
|
|
269
|
+
i0.ɵɵelementStart(9, "div", 55);
|
|
270
|
+
i0.ɵɵconditionalCreate(10, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_10_Template, 4, 0, "button", 56)(11, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_11_Template, 4, 0, "button", 57);
|
|
271
|
+
i0.ɵɵelementStart(12, "button", 58);
|
|
272
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenShareModal(ctx_r1.SelectedProduction.ID)); });
|
|
273
|
+
i0.ɵɵelement(13, "i", 59);
|
|
274
|
+
i0.ɵɵelementStart(14, "span");
|
|
275
|
+
i0.ɵɵtext(15, "Share");
|
|
276
|
+
i0.ɵɵelementEnd()();
|
|
277
|
+
i0.ɵɵelementStart(16, "button", 60);
|
|
278
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.StartIterate()); });
|
|
279
|
+
i0.ɵɵelement(17, "i", 61);
|
|
280
|
+
i0.ɵɵelementStart(18, "span");
|
|
281
|
+
i0.ɵɵtext(19, "Iterate");
|
|
282
|
+
i0.ɵɵelementEnd()()()();
|
|
283
|
+
i0.ɵɵelementStart(20, "div", 62)(21, "div", 63);
|
|
284
|
+
i0.ɵɵconditionalCreate(22, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_22_Template, 1, 7, "mj-artifact-viewer-panel", 64)(23, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_23_Template, 2, 0, "div", 65)(24, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_24_Template, 2, 1, "div", 66)(25, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Conditional_25_Template, 1, 3, "mj-video-production-viewer", 67);
|
|
285
|
+
i0.ɵɵelementEnd()()();
|
|
286
|
+
} if (rf & 2) {
|
|
287
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
288
|
+
i0.ɵɵadvance(8);
|
|
289
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedProduction.Name);
|
|
290
|
+
i0.ɵɵadvance(2);
|
|
291
|
+
i0.ɵɵconditional(!ctx_r1.IsFullViewerMode ? 10 : 11);
|
|
292
|
+
i0.ɵɵadvance(2);
|
|
293
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanShareSelected);
|
|
294
|
+
i0.ɵɵadvance(4);
|
|
295
|
+
i0.ɵɵproperty("disabled", !ctx_r1.SelectedProductionConversationId);
|
|
296
|
+
i0.ɵɵattribute("title", ctx_r1.SelectedProductionConversationId ? "Iterate on this production in its conversation" : "Made outside a conversation. Start a new production in Video Studio.");
|
|
297
|
+
i0.ɵɵadvance(6);
|
|
298
|
+
i0.ɵɵconditional(ctx_r1.IsFullViewerMode ? 22 : ctx_r1.IsLoadingSelectedVersion ? 23 : ctx_r1.VersionLoadError ? 24 : ctx_r1.SelectedVersionEntity ? 25 : -1);
|
|
299
|
+
} }
|
|
300
|
+
function VideoStudioProductionsResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
301
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
302
|
+
i0.ɵɵconditionalCreate(1, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_1_Template, 3, 0, "div", 32);
|
|
303
|
+
i0.ɵɵconditionalCreate(2, VideoStudioProductionsResourceComponent_Conditional_17_Conditional_2_Template, 26, 6, "aside", 33);
|
|
304
|
+
i0.ɵɵelementEnd();
|
|
305
|
+
} if (rf & 2) {
|
|
306
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
307
|
+
i0.ɵɵclassProp("vs-productions-workspace--split", ctx_r1.SelectedProduction !== null && !ctx_r1.IsIterateFocusMode)("vs-productions-workspace--focus", ctx_r1.IsIterateFocusMode);
|
|
308
|
+
i0.ɵɵadvance();
|
|
309
|
+
i0.ɵɵconditional(!ctx_r1.IsIterateFocusMode ? 1 : -1);
|
|
310
|
+
i0.ɵɵadvance();
|
|
311
|
+
i0.ɵɵconditional(ctx_r1.SelectedProduction !== null ? 2 : -1);
|
|
312
|
+
} }
|
|
313
|
+
function VideoStudioProductionsResourceComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
314
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
315
|
+
i0.ɵɵelementStart(0, "mj-artifact-share-modal", 73);
|
|
316
|
+
i0.ɵɵlistener("Saved", function VideoStudioProductionsResourceComponent_Conditional_18_Template_mj_artifact_share_modal_Saved_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnShareSaved()); })("cancelled", function VideoStudioProductionsResourceComponent_Conditional_18_Template_mj_artifact_share_modal_cancelled_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseShareModal()); });
|
|
317
|
+
i0.ɵɵelementEnd();
|
|
318
|
+
} if (rf & 2) {
|
|
319
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
320
|
+
i0.ɵɵproperty("IsOpen", ctx_r1.IsShareModalOpen)("Artifact", ctx_r1.ShareTargetArtifact)("CurrentUser", ctx_r1.ProviderToUse.CurrentUser);
|
|
321
|
+
} }
|
|
322
|
+
/**
|
|
323
|
+
* Primary key for the `MJ: Video Production` artifact type
|
|
324
|
+
* (`metadata/artifact-types/.video-production-artifact-type.json`).
|
|
325
|
+
*/
|
|
326
|
+
export const VIDEO_PRODUCTION_ARTIFACT_TYPE_ID = '2E23F219-E790-4A77-9C86-CB19C711B71E';
|
|
327
|
+
const VALID_PRODUCTION_STATUSES = new Set([
|
|
328
|
+
'Briefing',
|
|
329
|
+
'Styled',
|
|
330
|
+
'Storyboarded',
|
|
331
|
+
'Approved',
|
|
332
|
+
'PreProduced',
|
|
333
|
+
'Composed',
|
|
334
|
+
'RoughCut',
|
|
335
|
+
'Reviewed',
|
|
336
|
+
'Delivered',
|
|
337
|
+
'Blocked',
|
|
338
|
+
]);
|
|
339
|
+
/**
|
|
340
|
+
* Productions resource tab for the Video Studio application.
|
|
341
|
+
*
|
|
342
|
+
* Displays a responsive grid of `MJ: Video Production` artifacts readable by the
|
|
343
|
+
* current user, enriched with extracted version attributes (`posterFileID`,
|
|
344
|
+
* `status`, `archetype`, `brandKitID`, `companyID`, `durationSeconds`, `formats`, `name`) and
|
|
345
|
+
* short-lived media access token poster URLs, alongside an artifact viewer detail
|
|
346
|
+
* pane and URL query-param synchronization (`?production=<id>`).
|
|
347
|
+
*/
|
|
348
|
+
let VideoStudioProductionsResourceComponent = class VideoStudioProductionsResourceComponent extends BaseResourceComponent {
|
|
349
|
+
IsLoading = false;
|
|
350
|
+
LoadError = null;
|
|
351
|
+
AllProductions = [];
|
|
352
|
+
FilteredProductions = [];
|
|
353
|
+
SelectedProduction = null;
|
|
354
|
+
SearchText = '';
|
|
355
|
+
ArchetypeFilter = '';
|
|
356
|
+
StatusFilter = '';
|
|
357
|
+
BrandKitFilter = '';
|
|
358
|
+
CompanyFilter = '';
|
|
359
|
+
_dateFrom = '';
|
|
360
|
+
_dateTo = '';
|
|
361
|
+
DateFromDate = null;
|
|
362
|
+
DateToDate = null;
|
|
363
|
+
get DateFrom() {
|
|
364
|
+
return this._dateFrom;
|
|
365
|
+
}
|
|
366
|
+
set DateFrom(value) {
|
|
367
|
+
const formatted = this.formatDateFilterInput(value);
|
|
368
|
+
this._dateFrom = formatted;
|
|
369
|
+
this.DateFromDate = this.parseLocalDateFilter(formatted);
|
|
370
|
+
}
|
|
371
|
+
get DateTo() {
|
|
372
|
+
return this._dateTo;
|
|
373
|
+
}
|
|
374
|
+
set DateTo(value) {
|
|
375
|
+
const formatted = this.formatDateFilterInput(value);
|
|
376
|
+
this._dateTo = formatted;
|
|
377
|
+
this.DateToDate = this.parseLocalDateFilter(formatted);
|
|
378
|
+
}
|
|
379
|
+
FilterFields = [];
|
|
380
|
+
FilterValues = {
|
|
381
|
+
archetype: null,
|
|
382
|
+
status: null,
|
|
383
|
+
brandKitId: null,
|
|
384
|
+
companyId: null,
|
|
385
|
+
};
|
|
386
|
+
CanShareSelected = false;
|
|
387
|
+
CanEditSelected = false;
|
|
388
|
+
IsShareModalOpen = false;
|
|
389
|
+
ShareTargetArtifact = null;
|
|
390
|
+
artifactsById = new Map();
|
|
391
|
+
brandKitsById = new Map();
|
|
392
|
+
companiesById = new Map();
|
|
393
|
+
SlideInState = inject(VSStudioSlideInStateService);
|
|
394
|
+
cdr = inject(ChangeDetectorRef);
|
|
395
|
+
artifactPermissionService = inject(ArtifactPermissionService);
|
|
396
|
+
slideInStateSub = null;
|
|
397
|
+
PageContext = this.buildProductionsContext();
|
|
398
|
+
PageTools = this.buildProductionsClientTools();
|
|
399
|
+
async ngOnInit() {
|
|
400
|
+
super.ngOnInit();
|
|
401
|
+
this.slideInStateSub = this.SlideInState.State$.subscribe(() => {
|
|
402
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
403
|
+
this.cdr.markForCheck();
|
|
404
|
+
});
|
|
405
|
+
await this.LoadProductions(false);
|
|
406
|
+
this.NotifyLoadComplete();
|
|
407
|
+
}
|
|
408
|
+
ngOnDestroy() {
|
|
409
|
+
this.slideInStateSub?.unsubscribe();
|
|
410
|
+
this.slideInStateSub = null;
|
|
411
|
+
super.ngOnDestroy();
|
|
412
|
+
}
|
|
413
|
+
async GetResourceDisplayName(_data) {
|
|
414
|
+
return 'Productions';
|
|
415
|
+
}
|
|
416
|
+
async GetResourceIconClass(_data) {
|
|
417
|
+
return 'fa-solid fa-clapperboard';
|
|
418
|
+
}
|
|
419
|
+
get TotalCount() {
|
|
420
|
+
return this.AllProductions.length;
|
|
421
|
+
}
|
|
422
|
+
get FilteredCount() {
|
|
423
|
+
return this.FilteredProductions.length;
|
|
424
|
+
}
|
|
425
|
+
get ActivePopoverFilterCount() {
|
|
426
|
+
return CountActiveProductionPopoverFilters(this.currentFilterState());
|
|
427
|
+
}
|
|
428
|
+
get SelectedArtifactEntity() {
|
|
429
|
+
if (!this.SelectedProduction) {
|
|
430
|
+
return null;
|
|
431
|
+
}
|
|
432
|
+
return this.artifactsById.get(this.SelectedProduction.ID) ?? null;
|
|
433
|
+
}
|
|
434
|
+
async Refresh() {
|
|
435
|
+
await this.LoadProductions(true);
|
|
436
|
+
}
|
|
437
|
+
async LoadProductions(forceRefresh = false) {
|
|
438
|
+
this.IsLoading = true;
|
|
439
|
+
this.LoadError = null;
|
|
440
|
+
this.cdr.markForCheck();
|
|
441
|
+
try {
|
|
442
|
+
const currentUser = this.ProviderToUse?.CurrentUser;
|
|
443
|
+
if (!currentUser?.ID) {
|
|
444
|
+
this.LoadError = 'Unable to load video productions: no current user context.';
|
|
445
|
+
this.AllProductions = [];
|
|
446
|
+
this.FilteredProductions = [];
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
const brandKitEngine = BrandKitEngine.GetProviderInstance(this.ProviderToUse, BrandKitEngine);
|
|
450
|
+
await brandKitEngine.Config(forceRefresh, undefined, this.ProviderToUse);
|
|
451
|
+
this.brandKitsById.clear();
|
|
452
|
+
this.companiesById.clear();
|
|
453
|
+
for (const kit of brandKitEngine.BrandKits) {
|
|
454
|
+
this.brandKitsById.set(kit.ID, kit);
|
|
455
|
+
if (kit.CompanyID && kit.Company) {
|
|
456
|
+
this.companiesById.set(kit.CompanyID, kit.Company);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
this.artifactPermissionService.Provider = this.ProviderToUse;
|
|
460
|
+
const readableFilter = await this.artifactPermissionService.GetReadableArtifactsFilter(currentUser.ID, currentUser);
|
|
461
|
+
if (!readableFilter) {
|
|
462
|
+
this.LoadError = 'Unable to load video productions: permission filter unavailable.';
|
|
463
|
+
this.AllProductions = [];
|
|
464
|
+
this.FilteredProductions = [];
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
468
|
+
const artifactsResult = await rv.RunView({
|
|
469
|
+
EntityName: 'MJ: Artifacts',
|
|
470
|
+
ExtraFilter: `TypeID = '${VIDEO_PRODUCTION_ARTIFACT_TYPE_ID}' AND ${readableFilter}`,
|
|
471
|
+
OrderBy: '__mj_UpdatedAt DESC',
|
|
472
|
+
ResultType: 'entity_object',
|
|
473
|
+
});
|
|
474
|
+
if (!artifactsResult.Success) {
|
|
475
|
+
this.LoadError = artifactsResult.ErrorMessage || 'Failed to load video productions.';
|
|
476
|
+
this.AllProductions = [];
|
|
477
|
+
this.FilteredProductions = [];
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
const artifacts = artifactsResult.Results ?? [];
|
|
481
|
+
this.artifactsById.clear();
|
|
482
|
+
for (const artifact of artifacts) {
|
|
483
|
+
this.artifactsById.set(artifact.ID, artifact);
|
|
484
|
+
}
|
|
485
|
+
const versionByArtifactId = new Map();
|
|
486
|
+
const attrsByVersionId = new Map();
|
|
487
|
+
if (artifacts.length > 0) {
|
|
488
|
+
const quotedIds = artifacts
|
|
489
|
+
.map((a) => `'${EscapeSQLString(a.ID)}'`)
|
|
490
|
+
.join(', ');
|
|
491
|
+
const latestVersionsSubquery = `SELECT v.ID FROM [__mj].[vwArtifactVersions] v INNER JOIN (SELECT ArtifactID, MAX(VersionNumber) AS MaxVer FROM [__mj].[vwArtifactVersions] WHERE ArtifactID IN (${quotedIds}) GROUP BY ArtifactID) latest ON v.ArtifactID = latest.ArtifactID AND v.VersionNumber = latest.MaxVer`;
|
|
492
|
+
const [versionsResult, attributesResult, companiesResult] = await rv.RunViews([
|
|
493
|
+
{
|
|
494
|
+
EntityName: 'MJ: Artifact Versions',
|
|
495
|
+
ExtraFilter: `ID IN (${latestVersionsSubquery})`,
|
|
496
|
+
Fields: ['ID', 'ArtifactID', 'VersionNumber'],
|
|
497
|
+
ResultType: 'simple',
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
EntityName: 'MJ: Artifact Version Attributes',
|
|
501
|
+
ExtraFilter: `ArtifactVersionID IN (${latestVersionsSubquery})`,
|
|
502
|
+
Fields: ['ArtifactVersionID', 'Name', 'Value'],
|
|
503
|
+
ResultType: 'simple',
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
EntityName: 'MJ: Companies',
|
|
507
|
+
Fields: ['ID', 'Name'],
|
|
508
|
+
ResultType: 'simple',
|
|
509
|
+
},
|
|
510
|
+
]);
|
|
511
|
+
if (!versionsResult?.Success ||
|
|
512
|
+
!attributesResult?.Success ||
|
|
513
|
+
(companiesResult && !companiesResult.Success)) {
|
|
514
|
+
const errMessage = (!versionsResult?.Success ? versionsResult?.ErrorMessage : undefined) ||
|
|
515
|
+
(!attributesResult?.Success ? attributesResult?.ErrorMessage : undefined) ||
|
|
516
|
+
(companiesResult && !companiesResult.Success ? companiesResult.ErrorMessage : undefined) ||
|
|
517
|
+
'Failed to load version or attribute details.';
|
|
518
|
+
LogError(errMessage);
|
|
519
|
+
this.LoadError = `Couldn't load production details: ${errMessage}`;
|
|
520
|
+
this.AllProductions = [];
|
|
521
|
+
this.FilteredProductions = [];
|
|
522
|
+
return;
|
|
523
|
+
}
|
|
524
|
+
if (Array.isArray(versionsResult.Results)) {
|
|
525
|
+
for (const row of versionsResult.Results) {
|
|
526
|
+
if (row?.ID && row?.ArtifactID) {
|
|
527
|
+
versionByArtifactId.set(row.ArtifactID.toLowerCase(), row);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
if (Array.isArray(attributesResult.Results)) {
|
|
532
|
+
for (const row of attributesResult.Results) {
|
|
533
|
+
if (!row?.ArtifactVersionID || !row.Name || row.Value == null) {
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
const vKey = row.ArtifactVersionID.toLowerCase();
|
|
537
|
+
let attrMap = attrsByVersionId.get(vKey);
|
|
538
|
+
if (!attrMap) {
|
|
539
|
+
attrMap = new Map();
|
|
540
|
+
attrsByVersionId.set(vKey, attrMap);
|
|
541
|
+
}
|
|
542
|
+
attrMap.set(row.Name, String(row.Value));
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
if (companiesResult && Array.isArray(companiesResult.Results)) {
|
|
546
|
+
for (const row of companiesResult.Results) {
|
|
547
|
+
if (row?.ID && row?.Name) {
|
|
548
|
+
this.companiesById.set(row.ID, row.Name);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
this.AllProductions = this.buildCardItems(artifacts, versionByArtifactId, attrsByVersionId);
|
|
554
|
+
this.rebuildFilterFieldOptions();
|
|
555
|
+
this.applyFiltersAndSync();
|
|
556
|
+
await this.restoreSelectionFromQueryParams();
|
|
557
|
+
await this.mintPosterUrls(this.AllProductions);
|
|
558
|
+
}
|
|
559
|
+
catch (err) {
|
|
560
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
561
|
+
LogError(msg);
|
|
562
|
+
this.LoadError = msg;
|
|
563
|
+
}
|
|
564
|
+
finally {
|
|
565
|
+
this.IsLoading = false;
|
|
566
|
+
this.syncAgentContext();
|
|
567
|
+
this.cdr.markForCheck();
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
OnSearchChange(value) {
|
|
571
|
+
this.SearchText = value;
|
|
572
|
+
this.applyFiltersAndSync();
|
|
573
|
+
}
|
|
574
|
+
OnFilterValuesChange(values) {
|
|
575
|
+
this.FilterValues = { ...values };
|
|
576
|
+
this.ArchetypeFilter = typeof values['archetype'] === 'string' ? values['archetype'] : '';
|
|
577
|
+
this.StatusFilter = typeof values['status'] === 'string' ? values['status'] : '';
|
|
578
|
+
this.BrandKitFilter = typeof values['brandKitId'] === 'string' ? values['brandKitId'] : '';
|
|
579
|
+
this.CompanyFilter = typeof values['companyId'] === 'string' ? values['companyId'] : '';
|
|
580
|
+
this.applyFiltersAndSync();
|
|
581
|
+
}
|
|
582
|
+
OnDateFromChange(value) {
|
|
583
|
+
this.DateFrom = this.formatDateFilterInput(value);
|
|
584
|
+
this.applyFiltersAndSync();
|
|
585
|
+
}
|
|
586
|
+
OnDateToChange(value) {
|
|
587
|
+
this.DateTo = this.formatDateFilterInput(value);
|
|
588
|
+
this.applyFiltersAndSync();
|
|
589
|
+
}
|
|
590
|
+
formatDateFilterInput(value) {
|
|
591
|
+
if (!value) {
|
|
592
|
+
return '';
|
|
593
|
+
}
|
|
594
|
+
if (typeof value === 'string') {
|
|
595
|
+
const parsed = this.parseLocalDateFilter(value.trim());
|
|
596
|
+
if (parsed) {
|
|
597
|
+
return this.formatDateFilterInput(parsed);
|
|
598
|
+
}
|
|
599
|
+
return value.trim();
|
|
600
|
+
}
|
|
601
|
+
if (value instanceof Date && !Number.isNaN(value.getTime())) {
|
|
602
|
+
const year = value.getFullYear();
|
|
603
|
+
const month = String(value.getMonth() + 1).padStart(2, '0');
|
|
604
|
+
const day = String(value.getDate()).padStart(2, '0');
|
|
605
|
+
return `${year}-${month}-${day}`;
|
|
606
|
+
}
|
|
607
|
+
return '';
|
|
608
|
+
}
|
|
609
|
+
parseLocalDateFilter(value) {
|
|
610
|
+
const trimmed = (value ?? '').trim();
|
|
611
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(trimmed);
|
|
612
|
+
if (!match) {
|
|
613
|
+
return null;
|
|
614
|
+
}
|
|
615
|
+
const year = Number(match[1]);
|
|
616
|
+
const month = Number(match[2]);
|
|
617
|
+
const day = Number(match[3]);
|
|
618
|
+
const date = new Date(year, month - 1, day);
|
|
619
|
+
if (Number.isNaN(date.getTime()) ||
|
|
620
|
+
date.getFullYear() !== year ||
|
|
621
|
+
date.getMonth() !== month - 1 ||
|
|
622
|
+
date.getDate() !== day) {
|
|
623
|
+
return null;
|
|
624
|
+
}
|
|
625
|
+
return date;
|
|
626
|
+
}
|
|
627
|
+
ClearAllFilters() {
|
|
628
|
+
this.ArchetypeFilter = '';
|
|
629
|
+
this.StatusFilter = '';
|
|
630
|
+
this.BrandKitFilter = '';
|
|
631
|
+
this.CompanyFilter = '';
|
|
632
|
+
this.DateFrom = '';
|
|
633
|
+
this.DateTo = '';
|
|
634
|
+
this.FilterValues = {
|
|
635
|
+
archetype: null,
|
|
636
|
+
status: null,
|
|
637
|
+
brandKitId: null,
|
|
638
|
+
companyId: null,
|
|
639
|
+
};
|
|
640
|
+
this.applyFiltersAndSync();
|
|
641
|
+
}
|
|
642
|
+
StudioSlideIn;
|
|
643
|
+
get CopilotPanel() {
|
|
644
|
+
return this.StudioSlideIn?.CopilotPanel;
|
|
645
|
+
}
|
|
646
|
+
SelectedProductionConversationId = null;
|
|
647
|
+
SelectedVersionEntity = null;
|
|
648
|
+
IsLoadingSelectedVersion = false;
|
|
649
|
+
VersionLoadError = null;
|
|
650
|
+
IsFullViewerMode = false;
|
|
651
|
+
ShowGridInFocusMode = false;
|
|
652
|
+
get IsProductionFocusMode() {
|
|
653
|
+
return this.SelectedProduction !== null && !this.ShowGridInFocusMode;
|
|
654
|
+
}
|
|
655
|
+
get IsIterateFocusMode() {
|
|
656
|
+
return this.IsProductionFocusMode;
|
|
657
|
+
}
|
|
658
|
+
ShowAllProductions() {
|
|
659
|
+
this.CloseDetailPane();
|
|
660
|
+
}
|
|
661
|
+
OpenFullViewer() {
|
|
662
|
+
this.IsFullViewerMode = true;
|
|
663
|
+
this.cdr.markForCheck();
|
|
664
|
+
}
|
|
665
|
+
BackToOverview() {
|
|
666
|
+
this.IsFullViewerMode = false;
|
|
667
|
+
this.cdr.markForCheck();
|
|
668
|
+
}
|
|
669
|
+
get IsCopilotSlideInOpen() {
|
|
670
|
+
return this.SlideInState.IsOpen;
|
|
671
|
+
}
|
|
672
|
+
set IsCopilotSlideInOpen(value) {
|
|
673
|
+
if (value) {
|
|
674
|
+
this.SlideInState.Reopen();
|
|
675
|
+
}
|
|
676
|
+
else {
|
|
677
|
+
this.SlideInState.Close();
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
get SlideInConversationId() {
|
|
681
|
+
return this.SlideInState.ConversationId;
|
|
682
|
+
}
|
|
683
|
+
set SlideInConversationId(value) {
|
|
684
|
+
this.SlideInState.SetConversationId(value);
|
|
685
|
+
}
|
|
686
|
+
get SlideInPendingArtifactId() {
|
|
687
|
+
return this.SlideInState.PendingArtifactId;
|
|
688
|
+
}
|
|
689
|
+
set SlideInPendingArtifactId(value) {
|
|
690
|
+
this.SlideInState.PendingArtifactId = value;
|
|
691
|
+
}
|
|
692
|
+
get SlideInPendingArtifactVersionNumber() {
|
|
693
|
+
return this.SlideInState.PendingArtifactVersionNumber;
|
|
694
|
+
}
|
|
695
|
+
set SlideInPendingArtifactVersionNumber(value) {
|
|
696
|
+
this.SlideInState.PendingArtifactVersionNumber = value;
|
|
697
|
+
}
|
|
698
|
+
get BriefSelectedArchetype() {
|
|
699
|
+
return this.SlideInState.BriefSelectedArchetype;
|
|
700
|
+
}
|
|
701
|
+
set BriefSelectedArchetype(value) {
|
|
702
|
+
this.SlideInState.BriefSelectedArchetype = value;
|
|
703
|
+
}
|
|
704
|
+
get BriefSelectedBrandKit() {
|
|
705
|
+
return this.SlideInState.BriefSelectedBrandKit;
|
|
706
|
+
}
|
|
707
|
+
set BriefSelectedBrandKit(value) {
|
|
708
|
+
this.SlideInState.BriefSelectedBrandKit = value;
|
|
709
|
+
}
|
|
710
|
+
get BriefSelectedFormats() {
|
|
711
|
+
return this.SlideInState.BriefSelectedFormats;
|
|
712
|
+
}
|
|
713
|
+
set BriefSelectedFormats(value) {
|
|
714
|
+
this.SlideInState.BriefSelectedFormats = value;
|
|
715
|
+
}
|
|
716
|
+
get BriefDurationSeconds() {
|
|
717
|
+
return this.SlideInState.BriefDurationSeconds;
|
|
718
|
+
}
|
|
719
|
+
set BriefDurationSeconds(value) {
|
|
720
|
+
this.SlideInState.BriefDurationSeconds = value;
|
|
721
|
+
}
|
|
722
|
+
get BriefTopic() {
|
|
723
|
+
return this.SlideInState.BriefTopic;
|
|
724
|
+
}
|
|
725
|
+
set BriefTopic(value) {
|
|
726
|
+
this.SlideInState.BriefTopic = value;
|
|
727
|
+
}
|
|
728
|
+
get NarrationEnabled() {
|
|
729
|
+
return this.SlideInState.NarrationEnabled;
|
|
730
|
+
}
|
|
731
|
+
set NarrationEnabled(value) {
|
|
732
|
+
this.SlideInState.SetNarrationEnabled(value);
|
|
733
|
+
}
|
|
734
|
+
get CaptionsMode() {
|
|
735
|
+
return this.SlideInState.CaptionsMode;
|
|
736
|
+
}
|
|
737
|
+
set CaptionsMode(value) {
|
|
738
|
+
this.SlideInState.SetCaptionsMode(value);
|
|
739
|
+
}
|
|
740
|
+
CopilotAppContext = this.buildCopilotAppContext();
|
|
741
|
+
get CurrentUser() {
|
|
742
|
+
return this.ProviderToUse?.CurrentUser ?? null;
|
|
743
|
+
}
|
|
744
|
+
get EnvironmentId() {
|
|
745
|
+
return (this.Data?.Configuration?.['environmentId'] ||
|
|
746
|
+
MJEnvironmentEntityExtended.DefaultEnvironmentID);
|
|
747
|
+
}
|
|
748
|
+
get ApplicationId() {
|
|
749
|
+
return this.Data?.Configuration?.['applicationId'] ?? '';
|
|
750
|
+
}
|
|
751
|
+
/**
|
|
752
|
+
* Opens the single right slide-in on a brand-new conversation (`SlideInConversationId = null`),
|
|
753
|
+
* displaying `<vs-production-brief>` in the chat area's `emptyState` slot.
|
|
754
|
+
*/
|
|
755
|
+
OpenNewProductionCopilot() {
|
|
756
|
+
this.ShowGridInFocusMode = false;
|
|
757
|
+
this.SlideInState.OpenNewProduction();
|
|
758
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
759
|
+
this.syncAgentContext();
|
|
760
|
+
this.cdr.markForCheck();
|
|
761
|
+
}
|
|
762
|
+
/**
|
|
763
|
+
* Reopens the right slide-in from the right-edge strip, preserving any active
|
|
764
|
+
* conversation or showing the brief if none is active.
|
|
765
|
+
*/
|
|
766
|
+
ReopenCopilotSlideIn() {
|
|
767
|
+
this.ShowGridInFocusMode = false;
|
|
768
|
+
this.SlideInState.Reopen();
|
|
769
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
770
|
+
this.syncAgentContext();
|
|
771
|
+
this.cdr.markForCheck();
|
|
772
|
+
}
|
|
773
|
+
ToggleCopilotSlideIn() {
|
|
774
|
+
if (this.IsCopilotSlideInOpen) {
|
|
775
|
+
this.CloseCopilotSlideIn();
|
|
776
|
+
}
|
|
777
|
+
else {
|
|
778
|
+
this.OpenNewProductionCopilot();
|
|
779
|
+
}
|
|
780
|
+
}
|
|
781
|
+
CloseCopilotSlideIn() {
|
|
782
|
+
this.ShowGridInFocusMode = false;
|
|
783
|
+
this.SlideInState.Close();
|
|
784
|
+
this.syncAgentContext();
|
|
785
|
+
this.cdr.markForCheck();
|
|
786
|
+
}
|
|
787
|
+
OnSlideInOpenChange(isOpen) {
|
|
788
|
+
if (!isOpen) {
|
|
789
|
+
this.ShowGridInFocusMode = false;
|
|
790
|
+
}
|
|
791
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
792
|
+
this.syncAgentContext();
|
|
793
|
+
this.cdr.markForCheck();
|
|
794
|
+
}
|
|
795
|
+
ToggleNarrationEnabled() {
|
|
796
|
+
this.SlideInState.SetNarrationEnabled(!this.SlideInState.NarrationEnabled);
|
|
797
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
798
|
+
this.cdr.markForCheck();
|
|
799
|
+
}
|
|
800
|
+
SetCaptionsMode(mode) {
|
|
801
|
+
this.SlideInState.SetCaptionsMode(mode);
|
|
802
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
803
|
+
this.cdr.markForCheck();
|
|
804
|
+
}
|
|
805
|
+
OnBriefStateChange(snapshot) {
|
|
806
|
+
this.SlideInState.ApplyBriefSnapshot(snapshot);
|
|
807
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
808
|
+
this.syncAgentContext();
|
|
809
|
+
this.cdr.markForCheck();
|
|
810
|
+
}
|
|
811
|
+
OnSlideInConversationCreated(event) {
|
|
812
|
+
this.SlideInState.SetConversationId(event.conversation.ID);
|
|
813
|
+
this.syncAgentContext();
|
|
814
|
+
this.cdr.markForCheck();
|
|
815
|
+
}
|
|
816
|
+
OnSlideInPendingArtifactConsumed() {
|
|
817
|
+
this.SlideInState.ClearPendingArtifact();
|
|
818
|
+
this.suppressDuplicateSlideInArtifactPanel();
|
|
819
|
+
this.cdr.markForCheck();
|
|
820
|
+
}
|
|
821
|
+
suppressDuplicateSlideInArtifactPanel() {
|
|
822
|
+
const apply = () => {
|
|
823
|
+
const chatArea = this.CopilotPanel?.chatArea;
|
|
824
|
+
if (!chatArea) {
|
|
825
|
+
return;
|
|
826
|
+
}
|
|
827
|
+
const host = this;
|
|
828
|
+
Object.defineProperty(chatArea, 'ShowArtifactPanel', {
|
|
829
|
+
get() {
|
|
830
|
+
return host.SelectedProduction ? false : Boolean(this['_vsShowArtifactPanel']);
|
|
831
|
+
},
|
|
832
|
+
set(value) {
|
|
833
|
+
this['_vsShowArtifactPanel'] = value;
|
|
834
|
+
},
|
|
835
|
+
configurable: true,
|
|
836
|
+
});
|
|
837
|
+
chatArea.cdr?.markForCheck();
|
|
838
|
+
};
|
|
839
|
+
apply();
|
|
840
|
+
queueMicrotask(apply);
|
|
841
|
+
setTimeout(apply, 0);
|
|
842
|
+
}
|
|
843
|
+
get FallbackBrandKitId() {
|
|
844
|
+
return this.BrandKitFilter || (this.SelectedProduction?.BrandKitID ?? null);
|
|
845
|
+
}
|
|
846
|
+
buildCopilotAppContext() {
|
|
847
|
+
return this.SlideInState.BuildCombinedAppContext(this.buildProductionsContext(), this.FallbackBrandKitId);
|
|
848
|
+
}
|
|
849
|
+
async SelectProduction(item, updateUrl = true) {
|
|
850
|
+
this.ShowGridInFocusMode = false;
|
|
851
|
+
this.SelectedProduction = item;
|
|
852
|
+
this.IsFullViewerMode = false;
|
|
853
|
+
this.SelectedVersionEntity = null;
|
|
854
|
+
this.VersionLoadError = null;
|
|
855
|
+
this.IsLoadingSelectedVersion = Boolean(item?.VersionID);
|
|
856
|
+
this.CanShareSelected = false;
|
|
857
|
+
this.CanEditSelected = false;
|
|
858
|
+
this.SelectedProductionConversationId = null;
|
|
859
|
+
if (updateUrl) {
|
|
860
|
+
this.UpdateQueryParams({ production: item ? item.ID : null });
|
|
861
|
+
}
|
|
862
|
+
if (item && this.ProviderToUse?.CurrentUser) {
|
|
863
|
+
try {
|
|
864
|
+
this.artifactPermissionService.Provider = this.ProviderToUse;
|
|
865
|
+
const perms = await this.artifactPermissionService.GetUserPermissions(item.ID, this.ProviderToUse.CurrentUser);
|
|
866
|
+
if (this.SelectedProduction !== item) {
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
this.CanShareSelected = perms.canShare;
|
|
870
|
+
this.CanEditSelected = perms.canEdit;
|
|
871
|
+
}
|
|
872
|
+
catch (err) {
|
|
873
|
+
LogError(err instanceof Error ? err.message : String(err));
|
|
874
|
+
if (this.SelectedProduction !== item) {
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
this.CanShareSelected = false;
|
|
878
|
+
this.CanEditSelected = false;
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
if (item) {
|
|
882
|
+
const [convId] = await Promise.all([
|
|
883
|
+
this.resolveProductionConversationId(item.ID),
|
|
884
|
+
this.loadSelectedProductionVersion(item),
|
|
885
|
+
]);
|
|
886
|
+
if (this.SelectedProduction !== item) {
|
|
887
|
+
return;
|
|
888
|
+
}
|
|
889
|
+
this.SelectedProductionConversationId = convId;
|
|
890
|
+
}
|
|
891
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
892
|
+
this.syncAgentContext();
|
|
893
|
+
this.cdr.markForCheck();
|
|
894
|
+
}
|
|
895
|
+
async RetryLoadSelectedProductionVersion() {
|
|
896
|
+
if (!this.SelectedProduction) {
|
|
897
|
+
return;
|
|
898
|
+
}
|
|
899
|
+
await this.loadSelectedProductionVersion(this.SelectedProduction);
|
|
900
|
+
}
|
|
901
|
+
async loadSelectedProductionVersion(item) {
|
|
902
|
+
const versionId = (item.VersionID ?? '').trim();
|
|
903
|
+
if (!versionId) {
|
|
904
|
+
if (this.SelectedProduction === item) {
|
|
905
|
+
this.IsLoadingSelectedVersion = false;
|
|
906
|
+
this.SelectedVersionEntity = null;
|
|
907
|
+
this.VersionLoadError = "This production doesn't have a saved version yet.";
|
|
908
|
+
this.cdr.markForCheck();
|
|
909
|
+
}
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
this.IsLoadingSelectedVersion = true;
|
|
913
|
+
this.VersionLoadError = null;
|
|
914
|
+
this.SelectedVersionEntity = null;
|
|
915
|
+
this.cdr.markForCheck();
|
|
916
|
+
try {
|
|
917
|
+
const versionEntity = await this.ProviderToUse.GetEntityObject('MJ: Artifact Versions', this.ProviderToUse.CurrentUser);
|
|
918
|
+
const loaded = await versionEntity.Load(versionId);
|
|
919
|
+
if (this.SelectedProduction !== item) {
|
|
920
|
+
return;
|
|
921
|
+
}
|
|
922
|
+
if (!loaded) {
|
|
923
|
+
const detail = versionEntity.LatestResult?.CompleteMessage?.trim();
|
|
924
|
+
this.VersionLoadError = detail
|
|
925
|
+
? `Couldn't load production version: ${detail}`
|
|
926
|
+
: "Couldn't load this production version.";
|
|
927
|
+
this.SelectedVersionEntity = null;
|
|
928
|
+
return;
|
|
929
|
+
}
|
|
930
|
+
this.SelectedVersionEntity = versionEntity;
|
|
931
|
+
this.VersionLoadError = null;
|
|
932
|
+
}
|
|
933
|
+
catch (err) {
|
|
934
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
935
|
+
LogError(message);
|
|
936
|
+
if (this.SelectedProduction !== item) {
|
|
937
|
+
return;
|
|
938
|
+
}
|
|
939
|
+
this.VersionLoadError = `Couldn't load production version: ${message}`;
|
|
940
|
+
this.SelectedVersionEntity = null;
|
|
941
|
+
}
|
|
942
|
+
finally {
|
|
943
|
+
if (this.SelectedProduction === item) {
|
|
944
|
+
this.IsLoadingSelectedVersion = false;
|
|
945
|
+
this.cdr.markForCheck();
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* Opens the single right slide-in on the selected production's existing conversation
|
|
951
|
+
* with the production artifact attached for iteration.
|
|
952
|
+
*/
|
|
953
|
+
StartIterate() {
|
|
954
|
+
if (!this.SelectedProduction || !this.SelectedProductionConversationId) {
|
|
955
|
+
return;
|
|
956
|
+
}
|
|
957
|
+
this.ShowGridInFocusMode = false;
|
|
958
|
+
this.SlideInState.OpenIterate(this.SelectedProductionConversationId, this.SelectedProduction.ID, this.SelectedProduction.VersionNumber);
|
|
959
|
+
this.suppressDuplicateSlideInArtifactPanel();
|
|
960
|
+
this.syncAgentContext();
|
|
961
|
+
this.cdr.markForCheck();
|
|
962
|
+
}
|
|
963
|
+
async resolveProductionConversationId(artifactId) {
|
|
964
|
+
const trimmedId = (artifactId ?? '').trim();
|
|
965
|
+
if (!trimmedId) {
|
|
966
|
+
return null;
|
|
967
|
+
}
|
|
968
|
+
try {
|
|
969
|
+
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
970
|
+
const escapedId = EscapeSQLString(trimmedId);
|
|
971
|
+
const detailArtifactResult = await rv.RunView({
|
|
972
|
+
EntityName: 'MJ: Conversation Detail Artifacts',
|
|
973
|
+
ExtraFilter: `ArtifactVersionID IN (SELECT ID FROM [__mj].[vwArtifactVersions] WHERE ArtifactID = '${escapedId}') AND Direction = 'Output'`,
|
|
974
|
+
OrderBy: '__mj_CreatedAt DESC',
|
|
975
|
+
Fields: ['ConversationDetailID'],
|
|
976
|
+
MaxRows: 1,
|
|
977
|
+
ResultType: 'simple',
|
|
978
|
+
});
|
|
979
|
+
const detailId = detailArtifactResult.Success &&
|
|
980
|
+
Array.isArray(detailArtifactResult.Results) &&
|
|
981
|
+
detailArtifactResult.Results.length > 0
|
|
982
|
+
? (detailArtifactResult.Results[0].ConversationDetailID ?? '').trim()
|
|
983
|
+
: '';
|
|
984
|
+
if (!detailId) {
|
|
985
|
+
return null;
|
|
986
|
+
}
|
|
987
|
+
const escapedDetailId = EscapeSQLString(detailId);
|
|
988
|
+
const detailResult = await rv.RunView({
|
|
989
|
+
EntityName: 'MJ: Conversation Details',
|
|
990
|
+
ExtraFilter: `ID = '${escapedDetailId}'`,
|
|
991
|
+
Fields: ['ConversationID'],
|
|
992
|
+
MaxRows: 1,
|
|
993
|
+
ResultType: 'simple',
|
|
994
|
+
});
|
|
995
|
+
const conversationId = detailResult.Success &&
|
|
996
|
+
Array.isArray(detailResult.Results) &&
|
|
997
|
+
detailResult.Results.length > 0
|
|
998
|
+
? (detailResult.Results[0].ConversationID ?? '').trim()
|
|
999
|
+
: '';
|
|
1000
|
+
return conversationId.length > 0 ? conversationId : null;
|
|
1001
|
+
}
|
|
1002
|
+
catch (err) {
|
|
1003
|
+
LogError(err instanceof Error ? err.message : String(err));
|
|
1004
|
+
return null;
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
CloseDetailPane() {
|
|
1008
|
+
void this.SelectProduction(null, true);
|
|
1009
|
+
}
|
|
1010
|
+
OpenShareModal(artifactIdOrEntity) {
|
|
1011
|
+
if (typeof artifactIdOrEntity === 'string') {
|
|
1012
|
+
this.ShareTargetArtifact =
|
|
1013
|
+
this.artifactsById.get(artifactIdOrEntity) ?? this.SelectedArtifactEntity;
|
|
1014
|
+
}
|
|
1015
|
+
else {
|
|
1016
|
+
this.ShareTargetArtifact = artifactIdOrEntity ?? this.SelectedArtifactEntity;
|
|
1017
|
+
}
|
|
1018
|
+
if (this.ShareTargetArtifact) {
|
|
1019
|
+
this.IsShareModalOpen = true;
|
|
1020
|
+
this.cdr.markForCheck();
|
|
1021
|
+
}
|
|
1022
|
+
}
|
|
1023
|
+
CloseShareModal() {
|
|
1024
|
+
this.IsShareModalOpen = false;
|
|
1025
|
+
this.ShareTargetArtifact = null;
|
|
1026
|
+
this.cdr.markForCheck();
|
|
1027
|
+
}
|
|
1028
|
+
async OnShareSaved() {
|
|
1029
|
+
this.CloseShareModal();
|
|
1030
|
+
await this.Refresh();
|
|
1031
|
+
}
|
|
1032
|
+
OnNavigateToArtifactLink(event) {
|
|
1033
|
+
const entityName = event.type === 'conversation' ? 'MJ: Conversations' : 'MJ: Collections';
|
|
1034
|
+
this.navigationService.OpenEntityRecord(entityName, CompositeKey.FromID(event.id));
|
|
1035
|
+
}
|
|
1036
|
+
OpenBrandKitRecord(brandKitId, event) {
|
|
1037
|
+
event?.stopPropagation();
|
|
1038
|
+
if (!brandKitId) {
|
|
1039
|
+
return;
|
|
1040
|
+
}
|
|
1041
|
+
this.navigationService.OpenEntityRecord('MJ: Brand Kits', CompositeKey.FromID(brandKitId));
|
|
1042
|
+
}
|
|
1043
|
+
FormatDuration(seconds) {
|
|
1044
|
+
if (seconds == null || !Number.isFinite(seconds) || seconds < 0) {
|
|
1045
|
+
return '—';
|
|
1046
|
+
}
|
|
1047
|
+
return FormatVideoTime(seconds);
|
|
1048
|
+
}
|
|
1049
|
+
ParseFormats(aspectRatio) {
|
|
1050
|
+
if (!aspectRatio || !aspectRatio.trim()) {
|
|
1051
|
+
return [];
|
|
1052
|
+
}
|
|
1053
|
+
return ParseArchetypeDefaultFormats(aspectRatio);
|
|
1054
|
+
}
|
|
1055
|
+
ResetFiltersAndSearch() {
|
|
1056
|
+
this.ClearAllFilters();
|
|
1057
|
+
this.OnSearchChange('');
|
|
1058
|
+
}
|
|
1059
|
+
StatusBadgeVariant(status) {
|
|
1060
|
+
return GetVideoStatusBadgeVariant(status);
|
|
1061
|
+
}
|
|
1062
|
+
OnQueryParamsChanged(params, _source) {
|
|
1063
|
+
const targetId = params['production'] ?? null;
|
|
1064
|
+
if (!targetId) {
|
|
1065
|
+
if (this.SelectedProduction) {
|
|
1066
|
+
void this.SelectProduction(null, false);
|
|
1067
|
+
}
|
|
1068
|
+
return;
|
|
1069
|
+
}
|
|
1070
|
+
const resolution = ResolveVideoStudioItem(targetId, this.AllProductions, 'production');
|
|
1071
|
+
if (resolution.Ok &&
|
|
1072
|
+
(!this.SelectedProduction || !UUIDsEqual(this.SelectedProduction.ID, resolution.Item.ID))) {
|
|
1073
|
+
void this.SelectProduction(resolution.Item, false);
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
// ============================================================================
|
|
1077
|
+
// AI Agent Client Tools
|
|
1078
|
+
//
|
|
1079
|
+
// SAFETY BOUNDARY: The Productions surface exposes ONLY read, search, filter,
|
|
1080
|
+
// select/open-for-viewing, refresh, and in-memory brief form-fill tools
|
|
1081
|
+
// (`SelectStudioArchetype`, `SelectStudioBrandKit`, `SetStudioFormats`,
|
|
1082
|
+
// `SetStudioTopic`) to the AI agent. No create, edit, clone, share, or delete
|
|
1083
|
+
// tools are exposed (`ArtifactShareModal` and `StartProduction` are strictly
|
|
1084
|
+
// user-confirm-only).
|
|
1085
|
+
// ============================================================================
|
|
1086
|
+
buildProductionsClientTools() {
|
|
1087
|
+
// SAFETY BOUNDARY: Read-only navigation/filter/select/refresh tools only; brief tools are registered by vs-studio-slide-in.
|
|
1088
|
+
return [
|
|
1089
|
+
{
|
|
1090
|
+
Name: 'SearchProductions',
|
|
1091
|
+
Description: 'Search video productions by title, description, archetype, brand kit, company, or status. Read-only filter operation.',
|
|
1092
|
+
ParameterSchema: {
|
|
1093
|
+
type: 'object',
|
|
1094
|
+
properties: { query: { type: 'string' } },
|
|
1095
|
+
required: ['query'],
|
|
1096
|
+
},
|
|
1097
|
+
Handler: async (params) => {
|
|
1098
|
+
// SAFETY BOUNDARY: Only updates local search filter state.
|
|
1099
|
+
const query = typeof params?.['query'] === 'string' ? params['query'] : '';
|
|
1100
|
+
this.OnSearchChange(query);
|
|
1101
|
+
return { Success: true };
|
|
1102
|
+
},
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
Name: 'FilterProductions',
|
|
1106
|
+
Description: 'Filter video productions by archetype, brandKitId, companyId, status, fromDate (YYYY-MM-DD), or toDate (YYYY-MM-DD). Read-only filter operation.',
|
|
1107
|
+
ParameterSchema: {
|
|
1108
|
+
type: 'object',
|
|
1109
|
+
properties: {
|
|
1110
|
+
archetype: { type: 'string' },
|
|
1111
|
+
brandKitId: { type: 'string' },
|
|
1112
|
+
companyId: { type: 'string' },
|
|
1113
|
+
status: { type: 'string' },
|
|
1114
|
+
fromDate: { type: 'string' },
|
|
1115
|
+
toDate: { type: 'string' },
|
|
1116
|
+
},
|
|
1117
|
+
},
|
|
1118
|
+
Handler: async (params) => {
|
|
1119
|
+
// SAFETY BOUNDARY: Only updates local filter state; never mutates artifacts.
|
|
1120
|
+
if (typeof params?.['archetype'] === 'string') {
|
|
1121
|
+
this.ArchetypeFilter = params['archetype'] === 'all' ? '' : params['archetype'];
|
|
1122
|
+
this.FilterValues['archetype'] = this.ArchetypeFilter || null;
|
|
1123
|
+
}
|
|
1124
|
+
if (typeof params?.['brandKitId'] === 'string') {
|
|
1125
|
+
this.BrandKitFilter = params['brandKitId'] === 'all' ? '' : params['brandKitId'];
|
|
1126
|
+
this.FilterValues['brandKitId'] = this.BrandKitFilter || null;
|
|
1127
|
+
}
|
|
1128
|
+
if (typeof params?.['companyId'] === 'string') {
|
|
1129
|
+
this.CompanyFilter = params['companyId'] === 'all' ? '' : params['companyId'];
|
|
1130
|
+
this.FilterValues['companyId'] = this.CompanyFilter || null;
|
|
1131
|
+
}
|
|
1132
|
+
if (typeof params?.['status'] === 'string') {
|
|
1133
|
+
this.StatusFilter = params['status'] === 'all' ? '' : params['status'];
|
|
1134
|
+
this.FilterValues['status'] = this.StatusFilter || null;
|
|
1135
|
+
}
|
|
1136
|
+
if (typeof params?.['fromDate'] === 'string') {
|
|
1137
|
+
this.DateFrom = params['fromDate'];
|
|
1138
|
+
}
|
|
1139
|
+
if (typeof params?.['toDate'] === 'string') {
|
|
1140
|
+
this.DateTo = params['toDate'];
|
|
1141
|
+
}
|
|
1142
|
+
this.applyFiltersAndSync();
|
|
1143
|
+
return { Success: true };
|
|
1144
|
+
},
|
|
1145
|
+
},
|
|
1146
|
+
{
|
|
1147
|
+
Name: 'ClearProductionFilters',
|
|
1148
|
+
Description: 'Reset all search and popover filters on the Productions surface.',
|
|
1149
|
+
ParameterSchema: { type: 'object', properties: {} },
|
|
1150
|
+
Handler: async () => {
|
|
1151
|
+
// SAFETY BOUNDARY: Read-only filter reset.
|
|
1152
|
+
this.SearchText = '';
|
|
1153
|
+
this.ClearAllFilters();
|
|
1154
|
+
return { Success: true };
|
|
1155
|
+
},
|
|
1156
|
+
},
|
|
1157
|
+
{
|
|
1158
|
+
Name: 'SelectProduction',
|
|
1159
|
+
Description: 'Select and open a video production in the viewer panel by its ID or Name. Read-only viewing operation.',
|
|
1160
|
+
ParameterSchema: {
|
|
1161
|
+
type: 'object',
|
|
1162
|
+
properties: { production: { type: 'string' } },
|
|
1163
|
+
required: ['production'],
|
|
1164
|
+
},
|
|
1165
|
+
Handler: async (params) => {
|
|
1166
|
+
// SAFETY BOUNDARY: Opens the production in the read-only viewer panel only.
|
|
1167
|
+
const resolved = ResolveVideoStudioItem(params?.['production'], this.AllProductions, 'production');
|
|
1168
|
+
if (!resolved.Ok) {
|
|
1169
|
+
return { Success: false, ErrorMessage: resolved.Error };
|
|
1170
|
+
}
|
|
1171
|
+
await this.SelectProduction(resolved.Item, true);
|
|
1172
|
+
return { Success: true };
|
|
1173
|
+
},
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
Name: 'RefreshProductions',
|
|
1177
|
+
Description: 'Reload the Video Productions gallery from the server. Read-only operation.',
|
|
1178
|
+
ParameterSchema: { type: 'object', properties: {} },
|
|
1179
|
+
Handler: async () => {
|
|
1180
|
+
// SAFETY BOUNDARY: Read-only data reload.
|
|
1181
|
+
await this.Refresh();
|
|
1182
|
+
return { Success: true };
|
|
1183
|
+
},
|
|
1184
|
+
},
|
|
1185
|
+
];
|
|
1186
|
+
}
|
|
1187
|
+
async restoreSelectionFromQueryParams() {
|
|
1188
|
+
const params = this.GetQueryParams();
|
|
1189
|
+
const targetId = params['production'];
|
|
1190
|
+
if (!targetId) {
|
|
1191
|
+
return;
|
|
1192
|
+
}
|
|
1193
|
+
const resolution = ResolveVideoStudioItem(targetId, this.AllProductions, 'production');
|
|
1194
|
+
if (resolution.Ok) {
|
|
1195
|
+
await this.SelectProduction(resolution.Item, false);
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
buildCardItems(artifacts, versionByArtifactId, attrsByVersionId) {
|
|
1199
|
+
return artifacts.map((artifact) => {
|
|
1200
|
+
const versionRow = versionByArtifactId.get(artifact.ID.toLowerCase()) ?? null;
|
|
1201
|
+
const attrMap = (versionRow ? attrsByVersionId.get(versionRow.ID.toLowerCase()) : undefined) ??
|
|
1202
|
+
new Map();
|
|
1203
|
+
const statusAttr = this.cleanAttributeValue(attrMap.get('status'));
|
|
1204
|
+
const status = statusAttr && VALID_PRODUCTION_STATUSES.has(statusAttr)
|
|
1205
|
+
? statusAttr
|
|
1206
|
+
: 'Unknown';
|
|
1207
|
+
const archetype = this.cleanAttributeValue(attrMap.get('archetype')) || '';
|
|
1208
|
+
const rawPosterFileId = this.cleanAttributeValue(attrMap.get('posterFileID'));
|
|
1209
|
+
const posterFileId = rawPosterFileId && !rawPosterFileId.startsWith('inline:') ? rawPosterFileId : null;
|
|
1210
|
+
const brandKitId = this.cleanAttributeValue(attrMap.get('brandKitID'));
|
|
1211
|
+
const companyId = this.cleanAttributeValue(attrMap.get('companyID'));
|
|
1212
|
+
const durationRaw = this.cleanAttributeValue(attrMap.get('durationSeconds'));
|
|
1213
|
+
const durationParsed = durationRaw ? Number(durationRaw) : NaN;
|
|
1214
|
+
const format = this.cleanAttributeValue(attrMap.get('format')) ??
|
|
1215
|
+
this.cleanAttributeValue(attrMap.get('formats'));
|
|
1216
|
+
const extractedTitle = this.cleanAttributeValue(attrMap.get('title')) ??
|
|
1217
|
+
this.cleanAttributeValue(attrMap.get('name'));
|
|
1218
|
+
const brandKit = this.findBrandKit(brandKitId);
|
|
1219
|
+
const resolvedCompanyId = companyId ?? brandKit?.CompanyID ?? null;
|
|
1220
|
+
const resolvedCompanyName = this.findCompanyName(resolvedCompanyId);
|
|
1221
|
+
const rawUpdated = artifact.__mj_UpdatedAt ?? artifact.__mj_CreatedAt;
|
|
1222
|
+
const updatedDate = rawUpdated instanceof Date && !Number.isNaN(rawUpdated.getTime())
|
|
1223
|
+
? rawUpdated
|
|
1224
|
+
: typeof rawUpdated === 'string' && !Number.isNaN(Date.parse(rawUpdated))
|
|
1225
|
+
? new Date(rawUpdated)
|
|
1226
|
+
: new Date(0);
|
|
1227
|
+
return {
|
|
1228
|
+
ID: artifact.ID,
|
|
1229
|
+
Name: extractedTitle || artifact.Name || 'Untitled Production',
|
|
1230
|
+
Description: artifact.Description ?? '',
|
|
1231
|
+
VersionID: versionRow?.ID ?? null,
|
|
1232
|
+
VersionNumber: typeof versionRow?.VersionNumber === 'number' ? versionRow.VersionNumber : 0,
|
|
1233
|
+
PosterFileID: posterFileId,
|
|
1234
|
+
PosterUrl: null,
|
|
1235
|
+
Status: status,
|
|
1236
|
+
Archetype: archetype,
|
|
1237
|
+
BrandKitID: brandKit?.ID ?? brandKitId,
|
|
1238
|
+
BrandKitName: brandKit?.Name ?? null,
|
|
1239
|
+
CompanyID: resolvedCompanyId,
|
|
1240
|
+
CompanyName: resolvedCompanyName,
|
|
1241
|
+
DurationSeconds: Number.isFinite(durationParsed) ? durationParsed : null,
|
|
1242
|
+
AspectRatio: format,
|
|
1243
|
+
SceneCount: null,
|
|
1244
|
+
UpdatedAt: updatedDate,
|
|
1245
|
+
};
|
|
1246
|
+
});
|
|
1247
|
+
}
|
|
1248
|
+
cleanAttributeValue(raw) {
|
|
1249
|
+
if (!raw) {
|
|
1250
|
+
return null;
|
|
1251
|
+
}
|
|
1252
|
+
const trimmed = raw.trim();
|
|
1253
|
+
if (!trimmed || trimmed === 'null' || trimmed === 'undefined') {
|
|
1254
|
+
return null;
|
|
1255
|
+
}
|
|
1256
|
+
if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
|
|
1257
|
+
(trimmed.startsWith("'") && trimmed.endsWith("'"))) {
|
|
1258
|
+
const unquoted = trimmed.slice(1, -1).trim();
|
|
1259
|
+
return unquoted.length > 0 ? unquoted : null;
|
|
1260
|
+
}
|
|
1261
|
+
return trimmed;
|
|
1262
|
+
}
|
|
1263
|
+
findBrandKit(brandKitId) {
|
|
1264
|
+
if (!brandKitId) {
|
|
1265
|
+
return null;
|
|
1266
|
+
}
|
|
1267
|
+
const direct = this.brandKitsById.get(brandKitId);
|
|
1268
|
+
if (direct) {
|
|
1269
|
+
return direct;
|
|
1270
|
+
}
|
|
1271
|
+
for (const kit of this.brandKitsById.values()) {
|
|
1272
|
+
if (UUIDsEqual(kit.ID, brandKitId)) {
|
|
1273
|
+
return kit;
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
return null;
|
|
1277
|
+
}
|
|
1278
|
+
findCompanyName(companyId) {
|
|
1279
|
+
if (!companyId) {
|
|
1280
|
+
return null;
|
|
1281
|
+
}
|
|
1282
|
+
const direct = this.companiesById.get(companyId);
|
|
1283
|
+
if (direct) {
|
|
1284
|
+
return direct;
|
|
1285
|
+
}
|
|
1286
|
+
for (const [id, name] of this.companiesById.entries()) {
|
|
1287
|
+
if (UUIDsEqual(id, companyId)) {
|
|
1288
|
+
return name;
|
|
1289
|
+
}
|
|
1290
|
+
}
|
|
1291
|
+
return null;
|
|
1292
|
+
}
|
|
1293
|
+
async mintPosterUrls(items) {
|
|
1294
|
+
if (!(this.ProviderToUse instanceof GraphQLDataProvider)) {
|
|
1295
|
+
return;
|
|
1296
|
+
}
|
|
1297
|
+
const client = new GraphQLFileStorageClient(this.ProviderToUse);
|
|
1298
|
+
const itemsWithPosters = items.filter((item) => Boolean(item.PosterFileID && !item.PosterFileID.startsWith('inline:')));
|
|
1299
|
+
if (itemsWithPosters.length === 0) {
|
|
1300
|
+
return;
|
|
1301
|
+
}
|
|
1302
|
+
await Promise.all(itemsWithPosters.map(async (item) => {
|
|
1303
|
+
if (!item.PosterFileID || item.PosterFileID.startsWith('inline:')) {
|
|
1304
|
+
return;
|
|
1305
|
+
}
|
|
1306
|
+
try {
|
|
1307
|
+
const token = await client.CreateMediaAccessToken(item.PosterFileID);
|
|
1308
|
+
if (token.Success && token.Url) {
|
|
1309
|
+
item.PosterUrl = token.Url;
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
catch (err) {
|
|
1313
|
+
LogError(err instanceof Error ? err.message : String(err));
|
|
1314
|
+
}
|
|
1315
|
+
}));
|
|
1316
|
+
this.cdr.markForCheck();
|
|
1317
|
+
}
|
|
1318
|
+
rebuildFilterFieldOptions() {
|
|
1319
|
+
const archetypes = new Set();
|
|
1320
|
+
const statuses = new Set();
|
|
1321
|
+
const brandKitOptions = new Map();
|
|
1322
|
+
const companyOptions = new Map();
|
|
1323
|
+
for (const kit of this.brandKitsById.values()) {
|
|
1324
|
+
brandKitOptions.set(kit.ID, kit.Name);
|
|
1325
|
+
if (kit.CompanyID) {
|
|
1326
|
+
companyOptions.set(kit.CompanyID, this.findCompanyName(kit.CompanyID) || kit.Company || kit.CompanyID);
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
for (const item of this.AllProductions) {
|
|
1330
|
+
if (item.Archetype) {
|
|
1331
|
+
archetypes.add(item.Archetype);
|
|
1332
|
+
}
|
|
1333
|
+
if (item.Status) {
|
|
1334
|
+
statuses.add(item.Status);
|
|
1335
|
+
}
|
|
1336
|
+
if (item.BrandKitID) {
|
|
1337
|
+
brandKitOptions.set(item.BrandKitID, item.BrandKitName || item.BrandKitID);
|
|
1338
|
+
}
|
|
1339
|
+
if (item.CompanyID) {
|
|
1340
|
+
companyOptions.set(item.CompanyID, this.findCompanyName(item.CompanyID) || item.CompanyName || item.CompanyID);
|
|
1341
|
+
}
|
|
1342
|
+
}
|
|
1343
|
+
this.FilterFields = [
|
|
1344
|
+
{
|
|
1345
|
+
key: 'archetype',
|
|
1346
|
+
label: 'Archetype',
|
|
1347
|
+
type: 'dropdown',
|
|
1348
|
+
options: Array.from(archetypes)
|
|
1349
|
+
.sort((a, b) => a.localeCompare(b))
|
|
1350
|
+
.map((value) => ({ value, text: value })),
|
|
1351
|
+
},
|
|
1352
|
+
{
|
|
1353
|
+
key: 'status',
|
|
1354
|
+
label: 'Status',
|
|
1355
|
+
type: 'dropdown',
|
|
1356
|
+
options: Array.from(statuses)
|
|
1357
|
+
.sort((a, b) => a.localeCompare(b))
|
|
1358
|
+
.map((value) => ({ value, text: value })),
|
|
1359
|
+
},
|
|
1360
|
+
{
|
|
1361
|
+
key: 'brandKitId',
|
|
1362
|
+
label: 'Brand Kit',
|
|
1363
|
+
type: 'dropdown',
|
|
1364
|
+
options: Array.from(brandKitOptions.entries())
|
|
1365
|
+
.sort((a, b) => a[1].localeCompare(b[1]))
|
|
1366
|
+
.map(([value, text]) => ({ value, text })),
|
|
1367
|
+
},
|
|
1368
|
+
{
|
|
1369
|
+
key: 'companyId',
|
|
1370
|
+
label: 'Company',
|
|
1371
|
+
type: 'dropdown',
|
|
1372
|
+
options: Array.from(companyOptions.entries())
|
|
1373
|
+
.sort((a, b) => a[1].localeCompare(b[1]))
|
|
1374
|
+
.map(([value, text]) => ({ value, text })),
|
|
1375
|
+
},
|
|
1376
|
+
];
|
|
1377
|
+
}
|
|
1378
|
+
currentFilterState() {
|
|
1379
|
+
return {
|
|
1380
|
+
SearchQuery: this.SearchText,
|
|
1381
|
+
Archetype: this.ArchetypeFilter,
|
|
1382
|
+
Status: this.StatusFilter,
|
|
1383
|
+
BrandKitID: this.BrandKitFilter,
|
|
1384
|
+
CompanyID: this.CompanyFilter,
|
|
1385
|
+
FromDate: this.DateFrom,
|
|
1386
|
+
ToDate: this.DateTo,
|
|
1387
|
+
};
|
|
1388
|
+
}
|
|
1389
|
+
applyFiltersAndSync() {
|
|
1390
|
+
this.FilteredProductions = FilterProductionCards(this.AllProductions, this.currentFilterState());
|
|
1391
|
+
this.syncAgentContext();
|
|
1392
|
+
this.cdr.markForCheck();
|
|
1393
|
+
}
|
|
1394
|
+
buildProductionsContext() {
|
|
1395
|
+
const availableArchetypes = Array.from(new Set(this.AllProductions.map((p) => p.Archetype).filter((a) => Boolean(a))));
|
|
1396
|
+
const availableBrandKitNames = Array.from(new Set(Array.from(this.brandKitsById.values())
|
|
1397
|
+
.map((k) => k.Name)
|
|
1398
|
+
.filter((n) => Boolean(n))));
|
|
1399
|
+
const availableCompanyNames = Array.from(new Set(this.AllProductions.map((p) => p.CompanyName ?? '').filter((c) => Boolean(c))));
|
|
1400
|
+
const activeBrandKit = this.findBrandKit(this.BrandKitFilter || null);
|
|
1401
|
+
const activeCompanyName = this.findCompanyName(this.CompanyFilter || null) ??
|
|
1402
|
+
this.AllProductions.find((p) => p.CompanyID && UUIDsEqual(p.CompanyID, this.CompanyFilter))?.CompanyName ??
|
|
1403
|
+
null;
|
|
1404
|
+
return BuildProductionsAgentContext({
|
|
1405
|
+
TotalCount: this.AllProductions.length,
|
|
1406
|
+
FilteredCards: this.FilteredProductions,
|
|
1407
|
+
Filters: this.currentFilterState(),
|
|
1408
|
+
BrandKitFilterName: activeBrandKit?.Name ?? null,
|
|
1409
|
+
CompanyFilterName: activeCompanyName,
|
|
1410
|
+
SelectedProduction: this.SelectedProduction,
|
|
1411
|
+
AvailableArchetypes: availableArchetypes,
|
|
1412
|
+
AvailableBrandKitNames: availableBrandKitNames,
|
|
1413
|
+
AvailableCompanyNames: availableCompanyNames,
|
|
1414
|
+
IsLoading: this.IsLoading,
|
|
1415
|
+
});
|
|
1416
|
+
}
|
|
1417
|
+
syncAgentContext() {
|
|
1418
|
+
this.PageContext = this.buildProductionsContext();
|
|
1419
|
+
this.CopilotAppContext = this.buildCopilotAppContext();
|
|
1420
|
+
this.navigationService.SetAgentContext(this, this.PageContext);
|
|
1421
|
+
}
|
|
1422
|
+
static ɵfac = /*@__PURE__*/ (() => { let ɵVideoStudioProductionsResourceComponent_BaseFactory; return function VideoStudioProductionsResourceComponent_Factory(__ngFactoryType__) { return (ɵVideoStudioProductionsResourceComponent_BaseFactory || (ɵVideoStudioProductionsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(VideoStudioProductionsResourceComponent)))(__ngFactoryType__ || VideoStudioProductionsResourceComponent); }; })();
|
|
1423
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: VideoStudioProductionsResourceComponent, selectors: [["mj-video-studio-productions-resource"]], viewQuery: function VideoStudioProductionsResourceComponent_Query(rf, ctx) { if (rf & 1) {
|
|
1424
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
1425
|
+
} if (rf & 2) {
|
|
1426
|
+
let _t;
|
|
1427
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.StudioSlideIn = _t.first);
|
|
1428
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 21, vars: 18, consts: [["studioSlideIn", ""], [1, "vs-resource-shell"], [1, "vs-resource-shell__page"], ["Title", "Productions", "Icon", "fa-solid fa-clapperboard", "Subtitle", "Browse, preview, and iterate on video productions"], ["meta", ""], ["Label", "Productions", 3, "Count", "Total"], ["actions", ""], [3, "Clicked", "Loading"], ["type", "button", "mjButton", "", "Variant", "primary", "data-testid", "productions-open-copilot-button", "title", "Start a new video production", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["toolbar", ""], [1, "vs-productions-main"], ["data-testid", "productions-loading", 1, "vs-loading-state"], ["data-testid", "productions-error", "Role", "alert", "Variant", "error", "Icon", "fa-solid fa-triangle-exclamation", "Title", "Unable to load productions", "ActionText", "Try again", "ActionIcon", "fa-solid fa-rotate", "ActionVariant", "secondary", 3, "Message"], [1, "vs-productions-workspace", 3, "vs-productions-workspace--split", "vs-productions-workspace--focus"], [3, "IsOpen", "Artifact", "CurrentUser"], [3, "OpenChange", "PendingArtifactConsumed", "Provider", "CurrentUser", "EnvironmentId", "ApplicationId", "PageSource", "PageContext", "PageTools", "FallbackBrandKitId", "HeaderTitle"], ["Placeholder", "Search productions by title, archetype, brand kit, or format...", 3, "ValueChange", "Value"], ["Label", "Filters", "Icon", "fa-solid fa-filter", 3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Fields", "Values", "ShowReset"], [1, "vs-date-filter-group"], ["Label", "Updated from"], ["AriaLabel", "Updated from", "data-testid", "productions-date-from", 3, "ngModelChange", "ngModel"], ["Label", "Updated to"], ["AriaLabel", "Updated to", "data-testid", "productions-date-to", 3, "ngModelChange", "ngModel"], ["Text", "Loading video productions...", "Size", "medium"], ["data-testid", "productions-error", "Role", "alert", "Variant", "error", "Icon", "fa-solid fa-triangle-exclamation", "Title", "Unable to load productions", "ActionText", "Try again", "ActionIcon", "fa-solid fa-rotate", "ActionVariant", "secondary", 3, "Action", "Message"], ["data-testid", "productions-empty", "Variant", "empty", "Icon", "fa-solid fa-clapperboard", "Title", "No video productions yet", "Message", "Open Video Studio to set a brief, storyboard beats, and render your first production.", "ActionText", "New production", "ActionIcon", "fa-solid fa-plus", "ActionVariant", "primary"], ["data-testid", "productions-empty", "Variant", "no-results", "Icon", "fa-solid fa-clapperboard", "Title", "No productions match your filters", "Message", "Try adjusting your search query or clearing active filter criteria.", "ActionText", "Reset filters", "ActionIcon", "fa-solid fa-filter-circle-xmark", "ActionVariant", "secondary"], ["data-testid", "productions-empty", "Variant", "empty", "Icon", "fa-solid fa-clapperboard", "Title", "No video productions yet", "Message", "Open Video Studio to set a brief, storyboard beats, and render your first production.", "ActionText", "New production", "ActionIcon", "fa-solid fa-plus", "ActionVariant", "primary", 3, "Action"], ["data-testid", "productions-empty", "Variant", "no-results", "Icon", "fa-solid fa-clapperboard", "Title", "No productions match your filters", "Message", "Try adjusting your search query or clearing active filter criteria.", "ActionText", "Reset filters", "ActionIcon", "fa-solid fa-filter-circle-xmark", "ActionVariant", "secondary", 3, "Action"], [1, "vs-productions-workspace"], ["data-testid", "productions-grid", 1, "vs-productions-grid"], ["data-testid", "production-detail-pane", 1, "vs-production-detail-pane"], ["tabindex", "0", "role", "button", 1, "vs-production-card", 3, "vs-production-card--selected"], ["tabindex", "0", "role", "button", 1, "vs-production-card", 3, "click", "keydown.enter", "keydown.space"], [1, "vs-production-poster"], ["loading", "lazy", 1, "vs-production-poster-img", 3, "src", "alt"], [1, "vs-production-poster-placeholder"], ["data-testid", "production-status-badge", 1, "vs-production-poster__status", 3, "Variant"], [1, "vs-production-duration"], [1, "vs-production-card-body"], [1, "vs-production-title", 3, "title"], [1, "vs-production-meta-line"], ["data-testid", "production-archetype-chip", 1, "vs-production-meta-item"], ["aria-hidden", "true", 1, "fa-solid", "fa-film"], ["aria-hidden", "true", 1, "vs-production-meta-sep"], ["type", "button", "title", "Open brand kit", 1, "vs-production-brand-link", 3, "click"], [1, "vs-production-formats"], ["Size", "sm", 3, "Format"], ["data-testid", "production-detail-toolbar", 1, "vs-production-detail-toolbar"], [1, "vs-production-detail-toolbar__start"], ["mjButton", "", "Variant", "flat", "Size", "sm", "type", "button", "data-testid", "production-all-productions-button", "title", "Show all productions", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-arrow-left"], [1, "vs-production-detail-toolbar__title"], [1, "vs-production-detail-toolbar__actions"], ["mjButton", "", "Variant", "flat", "Size", "sm", "type", "button", "data-testid", "production-open-full-viewer-button"], ["mjButton", "", "Variant", "flat", "Size", "sm", "type", "button", "data-testid", "production-back-to-overview-button"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "data-testid", "production-share-button", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-share-nodes"], ["mjButton", "", "Variant", "primary", "Size", "sm", "type", "button", "data-testid", "production-iterate-button", 3, "click", "disabled"], ["aria-hidden", "true", 1, "fa-solid", "fa-wand-magic-sparkles"], [1, "vs-production-detail-body"], ["data-testid", "production-detail-viewer", 1, "vs-production-detail-viewer"], ["data-testid", "production-full-viewer", 3, "artifactId", "Provider", "CurrentUser", "canShare", "canEdit", "ShowSaveToCollection", "ShowMaximizeButton"], ["data-testid", "production-overview-loading", 1, "vs-production-detail-state"], ["data-testid", "production-overview-error", 1, "vs-production-detail-state"], ["data-testid", "production-overview-viewer", 3, "artifactVersion", "Provider", "BrandKitName"], ["mjButton", "", "Variant", "flat", "Size", "sm", "type", "button", "data-testid", "production-open-full-viewer-button", 3, "click"], ["mjButton", "", "Variant", "flat", "Size", "sm", "type", "button", "data-testid", "production-back-to-overview-button", 3, "click"], ["data-testid", "production-full-viewer", 3, "Closed", "ShareRequested", "NavigateToLink", "artifactId", "Provider", "CurrentUser", "canShare", "canEdit", "ShowSaveToCollection", "ShowMaximizeButton"], ["Text", "Loading production\u2026", "Size", "medium"], ["Variant", "error", "Icon", "fa-solid fa-triangle-exclamation", "Title", "Couldn't load production", "ActionText", "Try again", "ActionIcon", "fa-solid fa-rotate", 3, "Action", "Message"], [3, "Saved", "cancelled", "IsOpen", "Artifact", "CurrentUser"]], template: function VideoStudioProductionsResourceComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1429
|
+
i0.ɵɵelementStart(0, "div", 1)(1, "mj-page-layout", 2)(2, "mj-page-header", 3)(3, "div", 4);
|
|
1430
|
+
i0.ɵɵelement(4, "mj-stat-badge", 5);
|
|
1431
|
+
i0.ɵɵelementEnd();
|
|
1432
|
+
i0.ɵɵelementStart(5, "div", 6)(6, "mj-refresh-button", 7);
|
|
1433
|
+
i0.ɵɵlistener("Clicked", function VideoStudioProductionsResourceComponent_Template_mj_refresh_button_Clicked_6_listener() { return ctx.Refresh(); });
|
|
1434
|
+
i0.ɵɵelementEnd();
|
|
1435
|
+
i0.ɵɵelementStart(7, "button", 8);
|
|
1436
|
+
i0.ɵɵlistener("click", function VideoStudioProductionsResourceComponent_Template_button_click_7_listener() { return ctx.OpenNewProductionCopilot(); });
|
|
1437
|
+
i0.ɵɵelement(8, "i", 9);
|
|
1438
|
+
i0.ɵɵelementStart(9, "span");
|
|
1439
|
+
i0.ɵɵtext(10, "New production");
|
|
1440
|
+
i0.ɵɵelementEnd()()();
|
|
1441
|
+
i0.ɵɵconditionalCreate(11, VideoStudioProductionsResourceComponent_Conditional_11_Template, 9, 8, "div", 10);
|
|
1442
|
+
i0.ɵɵelementEnd();
|
|
1443
|
+
i0.ɵɵelementStart(12, "mj-page-body")(13, "div", 11);
|
|
1444
|
+
i0.ɵɵconditionalCreate(14, VideoStudioProductionsResourceComponent_Conditional_14_Template, 2, 0, "div", 12)(15, VideoStudioProductionsResourceComponent_Conditional_15_Template, 1, 1, "mj-empty-state", 13)(16, VideoStudioProductionsResourceComponent_Conditional_16_Template, 2, 1)(17, VideoStudioProductionsResourceComponent_Conditional_17_Template, 3, 6, "div", 14);
|
|
1445
|
+
i0.ɵɵelementEnd();
|
|
1446
|
+
i0.ɵɵconditionalCreate(18, VideoStudioProductionsResourceComponent_Conditional_18_Template, 1, 3, "mj-artifact-share-modal", 15);
|
|
1447
|
+
i0.ɵɵelementEnd()();
|
|
1448
|
+
i0.ɵɵelementStart(19, "vs-studio-slide-in", 16, 0);
|
|
1449
|
+
i0.ɵɵlistener("OpenChange", function VideoStudioProductionsResourceComponent_Template_vs_studio_slide_in_OpenChange_19_listener($event) { return ctx.OnSlideInOpenChange($event); })("PendingArtifactConsumed", function VideoStudioProductionsResourceComponent_Template_vs_studio_slide_in_PendingArtifactConsumed_19_listener() { return ctx.OnSlideInPendingArtifactConsumed(); });
|
|
1450
|
+
i0.ɵɵelementEnd()();
|
|
1451
|
+
} if (rf & 2) {
|
|
1452
|
+
i0.ɵɵclassProp("vs-resource-shell--slidein-open", ctx.IsCopilotSlideInOpen);
|
|
1453
|
+
i0.ɵɵadvance(4);
|
|
1454
|
+
i0.ɵɵproperty("Count", ctx.FilteredCount)("Total", ctx.TotalCount);
|
|
1455
|
+
i0.ɵɵadvance(2);
|
|
1456
|
+
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
1457
|
+
i0.ɵɵadvance();
|
|
1458
|
+
i0.ɵɵattribute("aria-expanded", ctx.IsCopilotSlideInOpen);
|
|
1459
|
+
i0.ɵɵadvance(4);
|
|
1460
|
+
i0.ɵɵconditional(!ctx.IsIterateFocusMode ? 11 : -1);
|
|
1461
|
+
i0.ɵɵadvance(3);
|
|
1462
|
+
i0.ɵɵconditional(ctx.IsLoading && ctx.AllProductions.length === 0 ? 14 : ctx.LoadError ? 15 : ctx.FilteredProductions.length === 0 ? 16 : 17);
|
|
1463
|
+
i0.ɵɵadvance(4);
|
|
1464
|
+
i0.ɵɵconditional(ctx.IsShareModalOpen && ctx.ShareTargetArtifact ? 18 : -1);
|
|
1465
|
+
i0.ɵɵadvance();
|
|
1466
|
+
i0.ɵɵproperty("Provider", ctx.ProviderToUse)("CurrentUser", ctx.CurrentUser)("EnvironmentId", ctx.EnvironmentId)("ApplicationId", ctx.ApplicationId)("PageSource", ctx)("PageContext", ctx.PageContext)("PageTools", ctx.PageTools)("FallbackBrandKitId", ctx.FallbackBrandKitId)("HeaderTitle", "Video Studio");
|
|
1467
|
+
} }, dependencies: [i1.NgControlStatus, i1.NgModel, i2.LoadingComponent, i3.ArtifactViewerPanelComponent, i3.VideoProductionViewerComponent, i3.MJVideoBadgeComponent, i3.MJVideoFormatGlyphComponent, i4.ArtifactShareModalComponent, i5.VSStudioSlideInComponent, i6.MJButtonDirective, i6.MJDatepickerComponent, i6.MJEmptyStateComponent, i6.MJPageLayoutComponent, i6.MJPageHeaderComponent, i6.MJPageBodyComponent, i6.MJPageSearchComponent, i6.MJFilterPopoverComponent, i6.MJFilterPanelComponent, i6.MJFilterFieldComponent, i6.MJRefreshButtonComponent, i6.MJStatBadgeComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.vs-date-filter-group[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-2-5);\n padding-top: var(--mj-space-2-5);\n margin-top: var(--mj-space-2-5);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.vs-loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 320px;\n padding: var(--mj-space-8);\n text-align: center;\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n}\n\n.vs-productions-workspace[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n min-height: 100%;\n}\n\n.vs-productions-workspace--split[_ngcontent-%COMP%] {\n grid-template-columns: minmax(340px, 1fr) minmax(420px, 540px);\n gap: var(--mj-space-0);\n height: 100%;\n}\n\n.vs-productions-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: var(--mj-space-4);\n align-content: start;\n}\n\n.vs-productions-workspace--split[_ngcontent-%COMP%] .vs-productions-grid[_ngcontent-%COMP%] {\n padding: var(--mj-space-5) var(--mj-space-6);\n overflow-y: auto;\n}\n\n.vs-production-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n overflow: hidden;\n cursor: pointer;\n transition: var(--mj-transition-fast);\n}\n\n.vs-production-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-md);\n}\n\n.vs-production-card[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n}\n\n.vs-production-card--selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 var(--mj-ring-width) color-mix(in srgb, var(--mj-brand-primary) 24%, transparent);\n}\n\n.vs-production-poster[_ngcontent-%COMP%] {\n position: relative;\n aspect-ratio: 16 / 9;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vs-production-poster-img[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.vs-production-poster-placeholder[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-3xl);\n}\n\n.vs-production-poster__status[_ngcontent-%COMP%] {\n position: absolute;\n top: var(--mj-space-2-5);\n left: var(--mj-space-2-5);\n}\n\n.vs-production-duration[_ngcontent-%COMP%] {\n position: absolute;\n bottom: var(--mj-space-2-5);\n right: var(--mj-space-2-5);\n display: inline-flex;\n align-items: center;\n padding: var(--mj-space-0-5) var(--mj-space-2);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-elevated);\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.vs-production-card-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-1-5);\n padding: var(--mj-space-3-5) var(--mj-space-4);\n}\n\n.vs-production-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vs-production-meta-line[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--mj-space-1-5);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n\n.vs-production-meta-item[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n}\n\n.vs-production-meta-sep[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.vs-production-brand-link[_ngcontent-%COMP%] {\n padding: 0;\n border: none;\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--mj-text-secondary);\n font: inherit;\n cursor: pointer;\n text-decoration: underline;\n text-decoration-color: var(--mj-border-strong);\n text-underline-offset: var(--mj-space-0-5);\n transition: var(--mj-transition-colors);\n}\n\n.vs-production-brand-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration-color: var(--mj-brand-primary);\n}\n\n.vs-production-brand-link[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n}\n\n.vs-production-formats[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.vs-production-detail-pane[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.vs-production-detail-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2-5);\n padding: var(--mj-space-2) var(--mj-space-3);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n\n.vs-production-detail-toolbar__start[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.vs-production-detail-toolbar__title[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vs-production-detail-toolbar__actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-shrink: 0;\n flex-wrap: wrap;\n}\n\n.vs-production-detail-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n\n.vs-production-detail-viewer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n\n.vs-production-detail-state[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: var(--mj-space-6);\n}\n\n.vs-productions-workspace--focus[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n height: 100%;\n}\n\n.vs-productions-workspace--focus[_ngcontent-%COMP%] .vs-production-detail-pane[_ngcontent-%COMP%] {\n border-left: none;\n}\n\n.vs-resource-shell[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: stretch;\n width: 100%;\n height: 100%;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n\n.vs-resource-shell__page[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n min-height: 0;\n}\n\n.vs-productions-main[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n min-height: 0;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n@media (max-width: 1180px) {\n .vs-resource-shell--slidein-open[_ngcontent-%COMP%] .vs-productions-workspace--split[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .vs-production-card[_ngcontent-%COMP%], \n .vs-production-brand-link[_ngcontent-%COMP%] {\n transition: none;\n }\n}"], changeDetection: 0 });
|
|
1468
|
+
};
|
|
1469
|
+
VideoStudioProductionsResourceComponent = __decorate([
|
|
1470
|
+
RegisterClass(BaseResourceComponent, 'VideoStudioProductionsResource')
|
|
1471
|
+
], VideoStudioProductionsResourceComponent);
|
|
1472
|
+
export { VideoStudioProductionsResourceComponent };
|
|
1473
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VideoStudioProductionsResourceComponent, [{
|
|
1474
|
+
type: Component,
|
|
1475
|
+
args: [{ standalone: false, selector: 'mj-video-studio-productions-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"vs-resource-shell\" [class.vs-resource-shell--slidein-open]=\"IsCopilotSlideInOpen\">\n <mj-page-layout class=\"vs-resource-shell__page\">\n <mj-page-header\n Title=\"Productions\"\n Icon=\"fa-solid fa-clapperboard\"\n Subtitle=\"Browse, preview, and iterate on video productions\"\n >\n <div meta>\n <mj-stat-badge\n [Count]=\"FilteredCount\"\n [Total]=\"TotalCount\"\n Label=\"Productions\"\n />\n </div>\n\n <div actions>\n <mj-refresh-button\n [Loading]=\"IsLoading\"\n (Clicked)=\"Refresh()\"\n />\n <button\n type=\"button\"\n mjButton\n Variant=\"primary\"\n data-testid=\"productions-open-copilot-button\"\n [attr.aria-expanded]=\"IsCopilotSlideInOpen\"\n title=\"Start a new video production\"\n (click)=\"OpenNewProductionCopilot()\"\n >\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <span>New production</span>\n </button>\n </div>\n\n @if (!IsIterateFocusMode) {\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search productions by title, archetype, brand kit, or format...\"\n [Value]=\"SearchText\"\n (ValueChange)=\"OnSearchChange($event)\"\n />\n <mj-filter-popover\n Label=\"Filters\"\n Icon=\"fa-solid fa-filter\"\n [ActiveCount]=\"ActivePopoverFilterCount\"\n [ShowClearAll]=\"ActivePopoverFilterCount > 0\"\n (ClearAllRequested)=\"ClearAllFilters()\"\n >\n <mj-filter-panel\n [Fields]=\"FilterFields\"\n [Values]=\"FilterValues\"\n [ShowReset]=\"false\"\n (ValuesChange)=\"OnFilterValuesChange($event)\"\n />\n <div class=\"vs-date-filter-group\">\n <mj-filter-field Label=\"Updated from\">\n <mj-datepicker\n AriaLabel=\"Updated from\"\n data-testid=\"productions-date-from\"\n [ngModel]=\"DateFromDate\"\n (ngModelChange)=\"OnDateFromChange($event)\"\n />\n </mj-filter-field>\n <mj-filter-field Label=\"Updated to\">\n <mj-datepicker\n AriaLabel=\"Updated to\"\n data-testid=\"productions-date-to\"\n [ngModel]=\"DateToDate\"\n (ngModelChange)=\"OnDateToChange($event)\"\n />\n </mj-filter-field>\n </div>\n </mj-filter-popover>\n </div>\n }\n </mj-page-header>\n\n <mj-page-body>\n <div class=\"vs-productions-main\">\n @if (IsLoading && AllProductions.length === 0) {\n <div class=\"vs-loading-state\" data-testid=\"productions-loading\">\n <mj-loading Text=\"Loading video productions...\" Size=\"medium\" />\n </div>\n } @else if (LoadError) {\n <mj-empty-state\n data-testid=\"productions-error\"\n Role=\"alert\"\n Variant=\"error\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n Title=\"Unable to load productions\"\n [Message]=\"LoadError\"\n ActionText=\"Try again\"\n ActionIcon=\"fa-solid fa-rotate\"\n ActionVariant=\"secondary\"\n (Action)=\"Refresh()\"\n ></mj-empty-state>\n } @else if (FilteredProductions.length === 0) {\n @if (AllProductions.length === 0) {\n <mj-empty-state\n data-testid=\"productions-empty\"\n Variant=\"empty\"\n Icon=\"fa-solid fa-clapperboard\"\n Title=\"No video productions yet\"\n Message=\"Open Video Studio to set a brief, storyboard beats, and render your first production.\"\n ActionText=\"New production\"\n ActionIcon=\"fa-solid fa-plus\"\n ActionVariant=\"primary\"\n (Action)=\"OpenNewProductionCopilot()\"\n ></mj-empty-state>\n } @else {\n <mj-empty-state\n data-testid=\"productions-empty\"\n Variant=\"no-results\"\n Icon=\"fa-solid fa-clapperboard\"\n Title=\"No productions match your filters\"\n Message=\"Try adjusting your search query or clearing active filter criteria.\"\n ActionText=\"Reset filters\"\n ActionIcon=\"fa-solid fa-filter-circle-xmark\"\n ActionVariant=\"secondary\"\n (Action)=\"ResetFiltersAndSearch()\"\n ></mj-empty-state>\n }\n } @else {\n <div\n class=\"vs-productions-workspace\"\n [class.vs-productions-workspace--split]=\"SelectedProduction !== null && !IsIterateFocusMode\"\n [class.vs-productions-workspace--focus]=\"IsIterateFocusMode\"\n >\n @if (!IsIterateFocusMode) {\n <div class=\"vs-productions-grid\" data-testid=\"productions-grid\">\n @for (item of FilteredProductions; track item.ID) {\n <article\n class=\"vs-production-card\"\n [class.vs-production-card--selected]=\"SelectedProduction?.ID === item.ID\"\n [attr.data-testid]=\"'production-card-' + item.ID\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-pressed]=\"SelectedProduction?.ID === item.ID\"\n (click)=\"SelectProduction(item)\"\n (keydown.enter)=\"SelectProduction(item)\"\n (keydown.space)=\"$event.preventDefault(); SelectProduction(item)\"\n >\n <div class=\"vs-production-poster\">\n @if (item.PosterUrl) {\n <img\n class=\"vs-production-poster-img\"\n [src]=\"item.PosterUrl\"\n [alt]=\"item.Name + ' poster'\"\n loading=\"lazy\"\n />\n } @else {\n <div class=\"vs-production-poster-placeholder\">\n <i class=\"fa-solid fa-film\" aria-hidden=\"true\"></i>\n </div>\n }\n\n <mj-video-badge\n class=\"vs-production-poster__status\"\n [Variant]=\"StatusBadgeVariant(item.Status)\"\n data-testid=\"production-status-badge\"\n >\n {{ item.Status }}\n </mj-video-badge>\n\n @if (item.DurationSeconds !== null) {\n <span class=\"vs-production-duration\">\n {{ FormatDuration(item.DurationSeconds) }}\n </span>\n }\n </div>\n\n <div class=\"vs-production-card-body\">\n <h3 class=\"vs-production-title\" [title]=\"item.Name\">\n {{ item.Name }}\n </h3>\n\n <div class=\"vs-production-meta-line\">\n @if (item.Archetype) {\n <span class=\"vs-production-meta-item\" data-testid=\"production-archetype-chip\">\n {{ item.Archetype }}\n </span>\n }\n @if (item.BrandKitName || item.BrandKitID) {\n @if (item.Archetype) {\n <span class=\"vs-production-meta-sep\" aria-hidden=\"true\">\u00B7</span>\n }\n <button\n type=\"button\"\n class=\"vs-production-brand-link\"\n title=\"Open brand kit\"\n (click)=\"OpenBrandKitRecord(item.BrandKitID, $event)\"\n >\n {{ item.BrandKitName || 'Brand kit' }}\n </button>\n }\n @if (item.AspectRatio) {\n @if (item.Archetype || item.BrandKitName || item.BrandKitID) {\n <span class=\"vs-production-meta-sep\" aria-hidden=\"true\">\u00B7</span>\n }\n <span class=\"vs-production-formats\">\n @for (fmt of ParseFormats(item.AspectRatio); track fmt) {\n <mj-video-format-glyph [Format]=\"fmt\" Size=\"sm\"></mj-video-format-glyph>\n }\n </span>\n }\n </div>\n </div>\n </article>\n }\n </div>\n }\n\n @if (SelectedProduction !== null) {\n <aside class=\"vs-production-detail-pane\" data-testid=\"production-detail-pane\">\n <div class=\"vs-production-detail-toolbar\" data-testid=\"production-detail-toolbar\">\n <div class=\"vs-production-detail-toolbar__start\">\n <button\n mjButton\n Variant=\"flat\"\n Size=\"sm\"\n type=\"button\"\n data-testid=\"production-all-productions-button\"\n title=\"Show all productions\"\n (click)=\"ShowAllProductions()\"\n >\n <i class=\"fa-solid fa-arrow-left\" aria-hidden=\"true\"></i>\n <span>All productions</span>\n </button>\n <span class=\"vs-production-detail-toolbar__title\">{{ SelectedProduction.Name }}</span>\n </div>\n <div class=\"vs-production-detail-toolbar__actions\">\n @if (!IsFullViewerMode) {\n <button\n mjButton\n Variant=\"flat\"\n Size=\"sm\"\n type=\"button\"\n data-testid=\"production-open-full-viewer-button\"\n (click)=\"OpenFullViewer()\"\n >\n <i class=\"fa-solid fa-film\" aria-hidden=\"true\"></i>\n <span>Storyboard, review & versions</span>\n </button>\n } @else {\n <button\n mjButton\n Variant=\"flat\"\n Size=\"sm\"\n type=\"button\"\n data-testid=\"production-back-to-overview-button\"\n (click)=\"BackToOverview()\"\n >\n <i class=\"fa-solid fa-arrow-left\" aria-hidden=\"true\"></i>\n <span>Back to overview</span>\n </button>\n }\n <button\n mjButton\n Variant=\"outline\"\n Size=\"sm\"\n type=\"button\"\n data-testid=\"production-share-button\"\n [disabled]=\"!CanShareSelected\"\n (click)=\"OpenShareModal(SelectedProduction.ID)\"\n >\n <i class=\"fa-solid fa-share-nodes\" aria-hidden=\"true\"></i>\n <span>Share</span>\n </button>\n <button\n mjButton\n Variant=\"primary\"\n Size=\"sm\"\n type=\"button\"\n data-testid=\"production-iterate-button\"\n [disabled]=\"!SelectedProductionConversationId\"\n [attr.title]=\"\n SelectedProductionConversationId\n ? 'Iterate on this production in its conversation'\n : 'Made outside a conversation. Start a new production in Video Studio.'\n \"\n (click)=\"StartIterate()\"\n >\n <i class=\"fa-solid fa-wand-magic-sparkles\" aria-hidden=\"true\"></i>\n <span>Iterate</span>\n </button>\n </div>\n </div>\n <div class=\"vs-production-detail-body\">\n <div class=\"vs-production-detail-viewer\" data-testid=\"production-detail-viewer\">\n @if (IsFullViewerMode) {\n <mj-artifact-viewer-panel\n data-testid=\"production-full-viewer\"\n [artifactId]=\"SelectedProduction.ID\"\n [Provider]=\"Provider\"\n [CurrentUser]=\"ProviderToUse.CurrentUser\"\n [canShare]=\"CanShareSelected\"\n [canEdit]=\"CanEditSelected\"\n [ShowSaveToCollection]=\"false\"\n [ShowMaximizeButton]=\"false\"\n (Closed)=\"BackToOverview()\"\n (ShareRequested)=\"OpenShareModal($event)\"\n (NavigateToLink)=\"OnNavigateToArtifactLink($event)\"\n />\n } @else if (IsLoadingSelectedVersion) {\n <div class=\"vs-production-detail-state\" data-testid=\"production-overview-loading\">\n <mj-loading Text=\"Loading production\u2026\" Size=\"medium\"></mj-loading>\n </div>\n } @else if (VersionLoadError) {\n <div class=\"vs-production-detail-state\" data-testid=\"production-overview-error\">\n <mj-empty-state\n Variant=\"error\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n Title=\"Couldn't load production\"\n [Message]=\"VersionLoadError\"\n ActionText=\"Try again\"\n ActionIcon=\"fa-solid fa-rotate\"\n (Action)=\"RetryLoadSelectedProductionVersion()\"\n ></mj-empty-state>\n </div>\n } @else if (SelectedVersionEntity) {\n <mj-video-production-viewer\n data-testid=\"production-overview-viewer\"\n [artifactVersion]=\"SelectedVersionEntity\"\n [Provider]=\"ProviderToUse\"\n [BrandKitName]=\"SelectedProduction.BrandKitName\"\n ></mj-video-production-viewer>\n }\n </div>\n </div>\n </aside>\n }\n </div>\n }\n </div>\n\n @if (IsShareModalOpen && ShareTargetArtifact) {\n <mj-artifact-share-modal\n [IsOpen]=\"IsShareModalOpen\"\n [Artifact]=\"ShareTargetArtifact\"\n [CurrentUser]=\"ProviderToUse.CurrentUser\"\n (Saved)=\"OnShareSaved()\"\n (cancelled)=\"CloseShareModal()\"\n />\n }\n </mj-page-body>\n </mj-page-layout>\n\n <vs-studio-slide-in\n #studioSlideIn\n [Provider]=\"ProviderToUse\"\n [CurrentUser]=\"CurrentUser\"\n [EnvironmentId]=\"EnvironmentId\"\n [ApplicationId]=\"ApplicationId\"\n [PageSource]=\"this\"\n [PageContext]=\"PageContext\"\n [PageTools]=\"PageTools\"\n [FallbackBrandKitId]=\"FallbackBrandKitId\"\n [HeaderTitle]=\"'Video Studio'\"\n (OpenChange)=\"OnSlideInOpenChange($event)\"\n (PendingArtifactConsumed)=\"OnSlideInPendingArtifactConsumed()\"\n ></vs-studio-slide-in>\n</div>\n", styles: [":host {\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.vs-date-filter-group {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: var(--mj-space-2-5);\n padding-top: var(--mj-space-2-5);\n margin-top: var(--mj-space-2-5);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.vs-loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 320px;\n padding: var(--mj-space-8);\n text-align: center;\n background: var(--mj-bg-surface-card);\n border: 1px dashed var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n}\n\n.vs-productions-workspace {\n display: grid;\n grid-template-columns: 1fr;\n min-height: 100%;\n}\n\n.vs-productions-workspace--split {\n grid-template-columns: minmax(340px, 1fr) minmax(420px, 540px);\n gap: var(--mj-space-0);\n height: 100%;\n}\n\n.vs-productions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));\n gap: var(--mj-space-4);\n align-content: start;\n}\n\n.vs-productions-workspace--split .vs-productions-grid {\n padding: var(--mj-space-5) var(--mj-space-6);\n overflow-y: auto;\n}\n\n.vs-production-card {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-lg);\n overflow: hidden;\n cursor: pointer;\n transition: var(--mj-transition-fast);\n}\n\n.vs-production-card:hover {\n transform: translateY(-2px);\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-md);\n}\n\n.vs-production-card:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n}\n\n.vs-production-card--selected {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 var(--mj-ring-width) color-mix(in srgb, var(--mj-brand-primary) 24%, transparent);\n}\n\n.vs-production-poster {\n position: relative;\n aspect-ratio: 16 / 9;\n background: var(--mj-bg-surface-sunken);\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.vs-production-poster-img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.vs-production-poster-placeholder {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n color: var(--mj-text-muted);\n font-size: var(--mj-text-3xl);\n}\n\n.vs-production-poster__status {\n position: absolute;\n top: var(--mj-space-2-5);\n left: var(--mj-space-2-5);\n}\n\n.vs-production-duration {\n position: absolute;\n bottom: var(--mj-space-2-5);\n right: var(--mj-space-2-5);\n display: inline-flex;\n align-items: center;\n padding: var(--mj-space-0-5) var(--mj-space-2);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-elevated);\n color: var(--mj-text-primary);\n font-variant-numeric: tabular-nums;\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n}\n\n.vs-production-card-body {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-1-5);\n padding: var(--mj-space-3-5) var(--mj-space-4);\n}\n\n.vs-production-title {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.vs-production-meta-line {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: var(--mj-space-1-5);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n}\n\n.vs-production-meta-item {\n color: var(--mj-text-secondary);\n}\n\n.vs-production-meta-sep {\n color: var(--mj-text-muted);\n}\n\n.vs-production-brand-link {\n padding: 0;\n border: none;\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--mj-text-secondary);\n font: inherit;\n cursor: pointer;\n text-decoration: underline;\n text-decoration-color: var(--mj-border-strong);\n text-underline-offset: var(--mj-space-0-5);\n transition: var(--mj-transition-colors);\n}\n\n.vs-production-brand-link:hover {\n color: var(--mj-brand-primary);\n text-decoration-color: var(--mj-brand-primary);\n}\n\n.vs-production-brand-link:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n}\n\n.vs-production-formats {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-2);\n}\n\n.vs-production-detail-pane {\n border-left: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.vs-production-detail-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2-5);\n padding: var(--mj-space-2) var(--mj-space-3);\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n flex-shrink: 0;\n}\n\n.vs-production-detail-toolbar__start {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.vs-production-detail-toolbar__title {\n font-size: var(--mj-text-sm);\n font-weight: var(--mj-font-semibold);\n color: var(--mj-text-primary);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.vs-production-detail-toolbar__actions {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n flex-shrink: 0;\n flex-wrap: wrap;\n}\n\n.vs-production-detail-body {\n display: flex;\n flex: 1;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n\n.vs-production-detail-viewer {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n\n.vs-production-detail-state {\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n padding: var(--mj-space-6);\n}\n\n.vs-productions-workspace--focus {\n grid-template-columns: 1fr;\n height: 100%;\n}\n\n.vs-productions-workspace--focus .vs-production-detail-pane {\n border-left: none;\n}\n\n.vs-resource-shell {\n position: relative;\n display: flex;\n align-items: stretch;\n width: 100%;\n height: 100%;\n min-height: 0;\n min-width: 0;\n overflow: hidden;\n}\n\n.vs-resource-shell__page {\n flex: 1;\n min-width: 0;\n min-height: 0;\n}\n\n.vs-productions-main {\n flex: 1;\n min-width: 0;\n min-height: 0;\n height: 100%;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n@media (max-width: 1180px) {\n .vs-resource-shell--slidein-open .vs-productions-workspace--split {\n grid-template-columns: 1fr;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .vs-production-card,\n .vs-production-brand-link {\n transition: none;\n }\n}\n\n\n\n"] }]
|
|
1476
|
+
}], null, { StudioSlideIn: [{
|
|
1477
|
+
type: ViewChild,
|
|
1478
|
+
args: ['studioSlideIn']
|
|
1479
|
+
}] }); })();
|
|
1480
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(VideoStudioProductionsResourceComponent, { className: "VideoStudioProductionsResourceComponent", filePath: "src/VideoStudio/resources/video-studio-productions-resource.component.ts", lineNumber: 107 }); })();
|
|
1481
|
+
//# sourceMappingURL=video-studio-productions-resource.component.js.map
|