@memberjunction/ng-dashboards 6.2.0-edge.6 → 6.2.0-edge.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/README.md +23 -16
  2. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js +2 -2
  3. package/dist/AI/components/analytics/agent-runs/agent-run-analysis.component.js.map +1 -1
  4. package/dist/AI/components/analytics/realtime/realtime-management.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/realtime/realtime-management.component.js +3 -1
  6. package/dist/AI/components/analytics/realtime/realtime-management.component.js.map +1 -1
  7. package/dist/AI/components/analytics/realtime/realtime-overview.component.d.ts +1 -1
  8. package/dist/AI/components/analytics/realtime/realtime-overview.component.js +3 -3
  9. package/dist/AI/components/analytics/realtime/realtime-overview.component.js.map +1 -1
  10. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts +6 -4
  11. package/dist/AI/components/analytics/realtime/realtime-session-data.d.ts.map +1 -1
  12. package/dist/AI/components/analytics/realtime/realtime-session-data.js +8 -2
  13. package/dist/AI/components/analytics/realtime/realtime-session-data.js.map +1 -1
  14. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  15. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +31 -10
  16. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  17. package/dist/AI/components/autotagging/components/classify-item-grid.component.js +1 -1
  18. package/dist/AI/components/autotagging/components/classify-item-grid.component.js.map +1 -1
  19. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.d.ts.map +1 -1
  20. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js +1 -0
  21. package/dist/AI/components/autotagging/components/classify-org-context-editor.component.js.map +1 -1
  22. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.d.ts.map +1 -1
  23. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js +1 -0
  24. package/dist/AI/components/autotagging/dialogs/source-type-form.dialog.component.js.map +1 -1
  25. package/dist/AI/components/autotagging/tabs/sources-tab.component.d.ts.map +1 -1
  26. package/dist/AI/components/autotagging/tabs/sources-tab.component.js +1 -0
  27. package/dist/AI/components/autotagging/tabs/sources-tab.component.js.map +1 -1
  28. package/dist/AI/components/duplicates/duplicate-detection-resource.component.d.ts.map +1 -1
  29. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js +1 -0
  30. package/dist/AI/components/duplicates/duplicate-detection-resource.component.js.map +1 -1
  31. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
  32. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  33. package/dist/AI/components/tags/tags-resource.component.js +14 -24
  34. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  35. package/dist/AI/components/vectors/vector-management-resource.component.d.ts.map +1 -1
  36. package/dist/AI/components/vectors/vector-management-resource.component.js +14 -7
  37. package/dist/AI/components/vectors/vector-management-resource.component.js.map +1 -1
  38. package/dist/AI/services/ai-instrumentation.service.d.ts.map +1 -1
  39. package/dist/AI/services/ai-instrumentation.service.js +4 -2
  40. package/dist/AI/services/ai-instrumentation.service.js.map +1 -1
  41. package/dist/Actions/action-result-code.d.ts +80 -0
  42. package/dist/Actions/action-result-code.d.ts.map +1 -0
  43. package/dist/Actions/action-result-code.js +163 -0
  44. package/dist/Actions/action-result-code.js.map +1 -0
  45. package/dist/Actions/components/actions-overview.component.d.ts +8 -0
  46. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  47. package/dist/Actions/components/actions-overview.component.js +12 -9
  48. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  49. package/dist/Actions/components/execution-monitoring.component.d.ts +29 -9
  50. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  51. package/dist/Actions/components/execution-monitoring.component.js +65 -42
  52. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  53. package/dist/Actions/components/explorer/action-card.component.d.ts.map +1 -1
  54. package/dist/Actions/components/explorer/action-card.component.js +5 -4
  55. package/dist/Actions/components/explorer/action-card.component.js.map +1 -1
  56. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts +92 -130
  57. package/dist/ChiefOfStaff/chief-of-staff-agent-context.d.ts.map +1 -1
  58. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js +189 -274
  59. package/dist/ChiefOfStaff/chief-of-staff-agent-context.js.map +1 -1
  60. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts +29 -0
  61. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.d.ts.map +1 -0
  62. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js +666 -0
  63. package/dist/ChiefOfStaff/chief-of-staff-approvals.component.js.map +1 -0
  64. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts +56 -0
  65. package/dist/ChiefOfStaff/chief-of-staff-governance.component.d.ts.map +1 -0
  66. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js +515 -0
  67. package/dist/ChiefOfStaff/chief-of-staff-governance.component.js.map +1 -0
  68. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts +14 -0
  69. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.d.ts.map +1 -0
  70. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js +39 -0
  71. package/dist/ChiefOfStaff/chief-of-staff-live-refresh.js.map +1 -0
  72. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts +17 -0
  73. package/dist/ChiefOfStaff/chief-of-staff-overview.component.d.ts.map +1 -0
  74. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js +485 -0
  75. package/dist/ChiefOfStaff/chief-of-staff-overview.component.js.map +1 -0
  76. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts +139 -0
  77. package/dist/ChiefOfStaff/chief-of-staff-page-base.d.ts.map +1 -0
  78. package/dist/ChiefOfStaff/chief-of-staff-page-base.js +602 -0
  79. package/dist/ChiefOfStaff/chief-of-staff-page-base.js.map +1 -0
  80. package/dist/ChiefOfStaff/index.d.ts +4 -1
  81. package/dist/ChiefOfStaff/index.d.ts.map +1 -1
  82. package/dist/ChiefOfStaff/index.js +4 -1
  83. package/dist/ChiefOfStaff/index.js.map +1 -1
  84. package/dist/Communication/communication-monitor-resource.component.js +3 -3
  85. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  86. package/dist/Communication/communication-runs-resource.component.js +3 -3
  87. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  88. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts.map +1 -1
  89. package/dist/ComponentStudio/component-studio-dashboard.component.js +1 -0
  90. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  91. package/dist/ComponentStudio/components/artifact-selection-dialog.component.d.ts.map +1 -1
  92. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -1
  93. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  94. package/dist/ComponentStudio/services/component-version.service.d.ts.map +1 -1
  95. package/dist/ComponentStudio/services/component-version.service.js +3 -0
  96. package/dist/ComponentStudio/services/component-version.service.js.map +1 -1
  97. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +21 -2
  98. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -1
  99. package/dist/DataExplorer/data-explorer-dashboard.component.js +32 -5
  100. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  101. package/dist/DevTools/graphql-console.component.js +2 -2
  102. package/dist/DevTools/lazy-module-status.component.js +2 -2
  103. package/dist/FormBuilder/form-builder-resource.component.d.ts.map +1 -1
  104. package/dist/FormBuilder/form-builder-resource.component.js +5 -0
  105. package/dist/FormBuilder/form-builder-resource.component.js.map +1 -1
  106. package/dist/Integration/components/connections/connections.component.js +2 -2
  107. package/dist/Integration/services/integration-data.service.d.ts +1 -1
  108. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  109. package/dist/Integration/services/integration-data.service.js +4 -3
  110. package/dist/Integration/services/integration-data.service.js.map +1 -1
  111. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.d.ts.map +1 -1
  112. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js +11 -3
  113. package/dist/KnowledgeHub/components/clusters/cluster-visualization-resource.component.js.map +1 -1
  114. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +16 -16
  115. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  116. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts +113 -0
  117. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.d.ts.map +1 -0
  118. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js +1184 -0
  119. package/dist/KnowledgeHub/components/visualize/semantic-graph/semantic-graph-explorer.component.js.map +1 -0
  120. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts +1 -1
  121. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.d.ts.map +1 -1
  122. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js +1 -1
  123. package/dist/KnowledgeHub/components/visualize/visualize-agent-context.js.map +1 -1
  124. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts +1 -1
  125. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.d.ts.map +1 -1
  126. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js +21 -10
  127. package/dist/KnowledgeHub/components/visualize/visualize-resource.component.js.map +1 -1
  128. package/dist/Lists/components/lists-browse-resource.component.js +1 -1
  129. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  130. package/dist/Lists/components/lists-my-lists-resource.component.js +1 -1
  131. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  132. package/dist/LoginStudio/login-studio-resource.component.d.ts.map +1 -1
  133. package/dist/LoginStudio/login-studio-resource.component.js +1 -0
  134. package/dist/LoginStudio/login-studio-resource.component.js.map +1 -1
  135. package/dist/PredictiveStudio/components/ps-experiments.component.d.ts.map +1 -1
  136. package/dist/PredictiveStudio/components/ps-experiments.component.js +1 -0
  137. package/dist/PredictiveStudio/components/ps-experiments.component.js.map +1 -1
  138. package/dist/PredictiveStudio/components/ps-pipeline-wizard.component.js +2 -2
  139. package/dist/PredictiveStudio/components/ps-predictions-grid.component.d.ts.map +1 -1
  140. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js +3 -0
  141. package/dist/PredictiveStudio/components/ps-predictions-grid.component.js.map +1 -1
  142. package/dist/PredictiveStudio/engine/predictive-studio.engine.d.ts.map +1 -1
  143. package/dist/PredictiveStudio/engine/predictive-studio.engine.js +1 -0
  144. package/dist/PredictiveStudio/engine/predictive-studio.engine.js.map +1 -1
  145. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.d.ts.map +1 -1
  146. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js +1 -0
  147. package/dist/PredictiveStudio/resources/ps-predictions-resource.component.js.map +1 -1
  148. package/dist/QueryBrowser/query-browser-resource.component.d.ts +26 -0
  149. package/dist/QueryBrowser/query-browser-resource.component.d.ts.map +1 -1
  150. package/dist/QueryBrowser/query-browser-resource.component.js +375 -252
  151. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  152. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  153. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -2
  154. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  155. package/dist/UserRoutines/user-routines-resource.component.d.ts +8 -1
  156. package/dist/UserRoutines/user-routines-resource.component.d.ts.map +1 -1
  157. package/dist/UserRoutines/user-routines-resource.component.js +22 -4
  158. package/dist/UserRoutines/user-routines-resource.component.js.map +1 -1
  159. package/dist/VersionHistory/components/diff-resource.component.d.ts.map +1 -1
  160. package/dist/VersionHistory/components/diff-resource.component.js +1 -0
  161. package/dist/VersionHistory/components/diff-resource.component.js.map +1 -1
  162. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts +162 -0
  163. package/dist/VideoStudio/components/vs-archetype-editor.component.d.ts.map +1 -0
  164. package/dist/VideoStudio/components/vs-archetype-editor.component.js +1105 -0
  165. package/dist/VideoStudio/components/vs-archetype-editor.component.js.map +1 -0
  166. package/dist/VideoStudio/components/vs-audio-options.component.d.ts +27 -0
  167. package/dist/VideoStudio/components/vs-audio-options.component.d.ts.map +1 -0
  168. package/dist/VideoStudio/components/vs-audio-options.component.js +119 -0
  169. package/dist/VideoStudio/components/vs-audio-options.component.js.map +1 -0
  170. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts +105 -0
  171. package/dist/VideoStudio/components/vs-copilot-panel.component.d.ts.map +1 -0
  172. package/dist/VideoStudio/components/vs-copilot-panel.component.js +560 -0
  173. package/dist/VideoStudio/components/vs-copilot-panel.component.js.map +1 -0
  174. package/dist/VideoStudio/components/vs-production-brief.component.d.ts +163 -0
  175. package/dist/VideoStudio/components/vs-production-brief.component.d.ts.map +1 -0
  176. package/dist/VideoStudio/components/vs-production-brief.component.js +1054 -0
  177. package/dist/VideoStudio/components/vs-production-brief.component.js.map +1 -0
  178. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts +43 -0
  179. package/dist/VideoStudio/components/vs-setup-health-card.component.d.ts.map +1 -0
  180. package/dist/VideoStudio/components/vs-setup-health-card.component.js +412 -0
  181. package/dist/VideoStudio/components/vs-setup-health-card.component.js.map +1 -0
  182. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts +73 -0
  183. package/dist/VideoStudio/components/vs-studio-slide-in.component.d.ts.map +1 -0
  184. package/dist/VideoStudio/components/vs-studio-slide-in.component.js +271 -0
  185. package/dist/VideoStudio/components/vs-studio-slide-in.component.js.map +1 -0
  186. package/dist/VideoStudio/index.d.ts +12 -0
  187. package/dist/VideoStudio/index.d.ts.map +1 -0
  188. package/dist/VideoStudio/index.js +12 -0
  189. package/dist/VideoStudio/index.js.map +1 -0
  190. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts +118 -0
  191. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.d.ts.map +1 -0
  192. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js +964 -0
  193. package/dist/VideoStudio/resources/video-studio-archetypes-resource.component.js.map +1 -0
  194. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts +70 -0
  195. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.d.ts.map +1 -0
  196. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js +600 -0
  197. package/dist/VideoStudio/resources/video-studio-brand-kits-resource.component.js.map +1 -0
  198. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts +182 -0
  199. package/dist/VideoStudio/resources/video-studio-productions-resource.component.d.ts.map +1 -0
  200. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js +1481 -0
  201. package/dist/VideoStudio/resources/video-studio-productions-resource.component.js.map +1 -0
  202. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts +102 -0
  203. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.d.ts.map +1 -0
  204. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js +240 -0
  205. package/dist/VideoStudio/services/vs-studio-slide-in-state.service.js.map +1 -0
  206. package/dist/VideoStudio/video-studio-agent-context.d.ts +495 -0
  207. package/dist/VideoStudio/video-studio-agent-context.d.ts.map +1 -0
  208. package/dist/VideoStudio/video-studio-agent-context.js +992 -0
  209. package/dist/VideoStudio/video-studio-agent-context.js.map +1 -0
  210. package/dist/ai-dashboards.module.d.ts +46 -41
  211. package/dist/ai-dashboards.module.d.ts.map +1 -1
  212. package/dist/ai-dashboards.module.js +33 -7
  213. package/dist/ai-dashboards.module.js.map +1 -1
  214. package/dist/module.d.ts +13 -12
  215. package/dist/module.d.ts.map +1 -1
  216. package/dist/module.js +7 -0
  217. package/dist/module.js.map +1 -1
  218. package/dist/public-api.d.ts +8 -1
  219. package/dist/public-api.d.ts.map +1 -1
  220. package/dist/public-api.js +10 -2
  221. package/dist/public-api.js.map +1 -1
  222. package/dist/shared/action-scheduled-job.d.ts.map +1 -1
  223. package/dist/shared/action-scheduled-job.js +2 -0
  224. package/dist/shared/action-scheduled-job.js.map +1 -1
  225. package/dist/video-studio-dashboards.module.d.ts +40 -0
  226. package/dist/video-studio-dashboards.module.d.ts.map +1 -0
  227. package/dist/video-studio-dashboards.module.js +159 -0
  228. package/dist/video-studio-dashboards.module.js.map +1 -0
  229. package/package.json +78 -71
  230. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts +0 -195
  231. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.d.ts.map +0 -1
  232. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js +0 -2910
  233. package/dist/ChiefOfStaff/chief-of-staff-dashboard.component.js.map +0 -1
@@ -0,0 +1,600 @@
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, inject, } from '@angular/core';
8
+ import { CompositeKey, LogError } from '@memberjunction/core';
9
+ import { BrandKitEngine, MJEnvironmentEntityExtended, } from '@memberjunction/core-entities';
10
+ import { RegisterClass, UUIDsEqual } from '@memberjunction/global';
11
+ import { GraphQLDataProvider, GraphQLFileStorageClient, } from '@memberjunction/graphql-dataprovider';
12
+ import { GetVideoStatusBadgeVariant } from '@memberjunction/ng-artifacts';
13
+ import { DeleteBrandKitWithAssets } from '@memberjunction/ng-brand-kits';
14
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
15
+ import { MJConfirmService } from '@memberjunction/ng-ui-components';
16
+ import { BRAND_KIT_STATUS_FILTERS, BuildBrandKitsAgentContext, FilterBrandKitCards, MapBrandKitToCard, ResolveVideoStudioItem, } from '../video-studio-agent-context';
17
+ import * as i0 from "@angular/core";
18
+ import * as i1 from "@memberjunction/ng-shared-generic";
19
+ import * as i2 from "@memberjunction/ng-artifacts";
20
+ import * as i3 from "@memberjunction/ng-brand-kits";
21
+ import * as i4 from "../components/vs-studio-slide-in.component";
22
+ import * as i5 from "@memberjunction/ng-ui-components";
23
+ const _forTrack0 = ($index, $item) => $item.ID;
24
+ const _forTrack1 = ($index, $item) => $item.Name + $item.Value;
25
+ function VideoStudioBrandKitsResourceComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "div", 13);
27
+ i0.ɵɵelement(1, "mj-loading", 17);
28
+ i0.ɵɵelementEnd();
29
+ } }
30
+ function VideoStudioBrandKitsResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
31
+ const _r1 = i0.ɵɵgetCurrentView();
32
+ i0.ɵɵelementStart(0, "mj-empty-state", 18);
33
+ i0.ɵɵlistener("ActionClicked", function VideoStudioBrandKitsResourceComponent_Conditional_17_Template_mj_empty_state_ActionClicked_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Refresh()); });
34
+ i0.ɵɵelementEnd();
35
+ } if (rf & 2) {
36
+ const ctx_r1 = i0.ɵɵnextContext();
37
+ i0.ɵɵproperty("Message", ctx_r1.LoadError);
38
+ } }
39
+ function VideoStudioBrandKitsResourceComponent_Conditional_18_Conditional_0_Template(rf, ctx) { if (rf & 1) {
40
+ const _r3 = i0.ɵɵgetCurrentView();
41
+ i0.ɵɵelementStart(0, "mj-empty-state", 21);
42
+ i0.ɵɵlistener("ActionClicked", function VideoStudioBrandKitsResourceComponent_Conditional_18_Conditional_0_Template_mj_empty_state_ActionClicked_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CreateNewBrandKit()); });
43
+ i0.ɵɵelementEnd();
44
+ } }
45
+ function VideoStudioBrandKitsResourceComponent_Conditional_18_Conditional_1_Template(rf, ctx) { if (rf & 1) {
46
+ const _r4 = i0.ɵɵgetCurrentView();
47
+ i0.ɵɵelementStart(0, "mj-empty-state", 22);
48
+ i0.ɵɵlistener("ActionClicked", function VideoStudioBrandKitsResourceComponent_Conditional_18_Conditional_1_Template_mj_empty_state_ActionClicked_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ResetFiltersAndSearch()); });
49
+ i0.ɵɵelementEnd();
50
+ } }
51
+ function VideoStudioBrandKitsResourceComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
52
+ i0.ɵɵconditionalCreate(0, VideoStudioBrandKitsResourceComponent_Conditional_18_Conditional_0_Template, 1, 0, "mj-empty-state", 19)(1, VideoStudioBrandKitsResourceComponent_Conditional_18_Conditional_1_Template, 1, 0, "mj-empty-state", 20);
53
+ } if (rf & 2) {
54
+ const ctx_r1 = i0.ɵɵnextContext();
55
+ i0.ɵɵconditional(ctx_r1.AllBrandKits.length === 0 ? 0 : 1);
56
+ } }
57
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_Conditional_0_Template(rf, ctx) { if (rf & 1) {
58
+ i0.ɵɵelementStart(0, "div", 23);
59
+ i0.ɵɵelement(1, "i", 26);
60
+ i0.ɵɵelementStart(2, "span");
61
+ i0.ɵɵtext(3);
62
+ i0.ɵɵelementEnd()();
63
+ } if (rf & 2) {
64
+ const ctx_r1 = i0.ɵɵnextContext(2);
65
+ i0.ɵɵadvance(3);
66
+ i0.ɵɵtextInterpolate(ctx_r1.DeleteError);
67
+ } }
68
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_2_For_1_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵelement(0, "div", 45);
70
+ } if (rf & 2) {
71
+ const swatch_r7 = ctx.$implicit;
72
+ i0.ɵɵstyleProp("background-color", swatch_r7.Value);
73
+ i0.ɵɵproperty("title", swatch_r7.Name + " (" + swatch_r7.Value + ")");
74
+ } }
75
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
76
+ i0.ɵɵrepeaterCreate(0, VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_2_For_1_Template, 1, 3, "div", 44, _forTrack1);
77
+ } if (rf & 2) {
78
+ const kit_r6 = i0.ɵɵnextContext().$implicit;
79
+ i0.ɵɵrepeater(kit_r6.Swatches);
80
+ } }
81
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "div", 29)(1, "span");
83
+ i0.ɵɵtext(2, "No palette swatches configured");
84
+ i0.ɵɵelementEnd()();
85
+ } }
86
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
87
+ i0.ɵɵelement(0, "img", 34);
88
+ } if (rf & 2) {
89
+ const kit_r6 = i0.ɵɵnextContext().$implicit;
90
+ i0.ɵɵproperty("src", kit_r6.PrimaryLogoUrl, i0.ɵɵsanitizeUrl)("alt", kit_r6.Name + " logo");
91
+ } }
92
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_9_Template(rf, ctx) { if (rf & 1) {
93
+ i0.ɵɵelement(0, "i", 35);
94
+ } }
95
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_12_Template(rf, ctx) { if (rf & 1) {
96
+ i0.ɵɵelementStart(0, "mj-video-badge", 37);
97
+ i0.ɵɵtext(1, " Default ");
98
+ i0.ɵɵelementEnd();
99
+ } }
100
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template(rf, ctx) { if (rf & 1) {
101
+ const _r5 = i0.ɵɵgetCurrentView();
102
+ i0.ɵɵelementStart(0, "article", 27);
103
+ i0.ɵɵlistener("click", function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template_article_click_0_listener() { const kit_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenBrandKit(kit_r6)); })("keydown.enter", function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template_article_keydown_enter_0_listener($event) { const kit_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView($event.target === $event.currentTarget && ctx_r1.OpenBrandKit(kit_r6)); })("keydown.space", function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template_article_keydown_space_0_listener($event) { const kit_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); $event.target === $event.currentTarget && $event.preventDefault(); return i0.ɵɵresetView($event.target === $event.currentTarget && ctx_r1.OpenBrandKit(kit_r6)); });
104
+ i0.ɵɵelementStart(1, "div", 28);
105
+ i0.ɵɵconditionalCreate(2, VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_2_Template, 2, 0)(3, VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_3_Template, 3, 0, "div", 29);
106
+ i0.ɵɵelementEnd();
107
+ i0.ɵɵelementStart(4, "div", 30)(5, "div", 31)(6, "div", 32)(7, "div", 33);
108
+ i0.ɵɵconditionalCreate(8, VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_8_Template, 1, 2, "img", 34)(9, VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_9_Template, 1, 0, "i", 35);
109
+ i0.ɵɵelementEnd();
110
+ i0.ɵɵelementStart(10, "h3", 36);
111
+ i0.ɵɵtext(11);
112
+ i0.ɵɵelementEnd();
113
+ i0.ɵɵconditionalCreate(12, VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Conditional_12_Template, 2, 0, "mj-video-badge", 37);
114
+ i0.ɵɵelementEnd();
115
+ i0.ɵɵelementStart(13, "mj-video-badge", 38);
116
+ i0.ɵɵtext(14);
117
+ i0.ɵɵelementEnd()();
118
+ i0.ɵɵelementStart(15, "div", 39)(16, "span", 40);
119
+ i0.ɵɵelement(17, "i", 41);
120
+ i0.ɵɵelementStart(18, "span");
121
+ i0.ɵɵtext(19);
122
+ i0.ɵɵelementEnd()();
123
+ i0.ɵɵelementStart(20, "button", 42);
124
+ i0.ɵɵlistener("click", function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template_button_click_20_listener($event) { const kit_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.DeleteBrandKit(kit_r6, $event)); })("keydown.enter", function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template_button_keydown_enter_20_listener($event) { return $event.stopPropagation(); })("keydown.space", function VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template_button_keydown_space_20_listener($event) { return $event.stopPropagation(); });
125
+ i0.ɵɵelement(21, "i", 43);
126
+ i0.ɵɵelementEnd()()()();
127
+ } if (rf & 2) {
128
+ const kit_r6 = ctx.$implicit;
129
+ const ctx_r1 = i0.ɵɵnextContext(2);
130
+ i0.ɵɵattribute("data-testid", "brand-kit-card-" + kit_r6.ID);
131
+ i0.ɵɵadvance(2);
132
+ i0.ɵɵconditional(kit_r6.Swatches.length > 0 ? 2 : 3);
133
+ i0.ɵɵadvance(6);
134
+ i0.ɵɵconditional(kit_r6.PrimaryLogoUrl ? 8 : 9);
135
+ i0.ɵɵadvance(2);
136
+ i0.ɵɵproperty("title", kit_r6.Name);
137
+ i0.ɵɵadvance();
138
+ i0.ɵɵtextInterpolate1(" ", kit_r6.Name, " ");
139
+ i0.ɵɵadvance();
140
+ i0.ɵɵconditional(kit_r6.IsDefault ? 12 : -1);
141
+ i0.ɵɵadvance();
142
+ i0.ɵɵproperty("Variant", ctx_r1.StatusBadgeVariant(kit_r6.Status));
143
+ i0.ɵɵadvance();
144
+ i0.ɵɵtextInterpolate1(" ", kit_r6.Status, " ");
145
+ i0.ɵɵadvance(5);
146
+ i0.ɵɵtextInterpolate(kit_r6.CompanyName || "Workspace default");
147
+ i0.ɵɵadvance();
148
+ i0.ɵɵproperty("AriaLabel", "Delete " + kit_r6.Name)("disabled", ctx_r1.DeletingKitId === kit_r6.ID);
149
+ i0.ɵɵattribute("data-testid", "brand-kit-delete-" + kit_r6.ID);
150
+ } }
151
+ function VideoStudioBrandKitsResourceComponent_Conditional_19_Template(rf, ctx) { if (rf & 1) {
152
+ i0.ɵɵconditionalCreate(0, VideoStudioBrandKitsResourceComponent_Conditional_19_Conditional_0_Template, 4, 1, "div", 23);
153
+ i0.ɵɵelementStart(1, "div", 24);
154
+ i0.ɵɵrepeaterCreate(2, VideoStudioBrandKitsResourceComponent_Conditional_19_For_3_Template, 22, 12, "article", 25, _forTrack0);
155
+ i0.ɵɵelementEnd();
156
+ } if (rf & 2) {
157
+ const ctx_r1 = i0.ɵɵnextContext();
158
+ i0.ɵɵconditional(ctx_r1.DeleteError ? 0 : -1);
159
+ i0.ɵɵadvance(2);
160
+ i0.ɵɵrepeater(ctx_r1.FilteredBrandKits);
161
+ } }
162
+ function VideoStudioBrandKitsResourceComponent_Conditional_20_Template(rf, ctx) { if (rf & 1) {
163
+ const _r8 = i0.ɵɵgetCurrentView();
164
+ i0.ɵɵelementStart(0, "mj-dialog", 46);
165
+ i0.ɵɵlistener("Close", function VideoStudioBrandKitsResourceComponent_Conditional_20_Template_mj_dialog_Close_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseBrandKitCreator()); });
166
+ i0.ɵɵelementStart(1, "mj-brand-kit-creator", 47);
167
+ i0.ɵɵlistener("Saved", function VideoStudioBrandKitsResourceComponent_Conditional_20_Template_mj_brand_kit_creator_Saved_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnBrandKitCreatorSaved($event)); })("Cancelled", function VideoStudioBrandKitsResourceComponent_Conditional_20_Template_mj_brand_kit_creator_Cancelled_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseBrandKitCreator()); })("OpenMoreSettings", function VideoStudioBrandKitsResourceComponent_Conditional_20_Template_mj_brand_kit_creator_OpenMoreSettings_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnBrandKitCreatorOpenMoreSettings($event)); });
168
+ i0.ɵɵelementEnd()();
169
+ } if (rf & 2) {
170
+ const ctx_r1 = i0.ɵɵnextContext();
171
+ i0.ɵɵproperty("Visible", true);
172
+ i0.ɵɵadvance();
173
+ i0.ɵɵproperty("Provider", ctx_r1.ProviderToUse);
174
+ } }
175
+ /**
176
+ * Brand Kits resource tab for the Video Studio application.
177
+ *
178
+ * Displays all `MJ: Brand Kits` from `BrandKitEngine` as cards showing the kit
179
+ * name, primary logo thumbnail, company scope (or "Workspace default"), default
180
+ * star indicator, status badge, color palette swatch strip (`kit.StyleObject.Palette`),
181
+ * and asset count (`engine.GetAssets(kit.ID).length`).
182
+ */
183
+ let VideoStudioBrandKitsResourceComponent = class VideoStudioBrandKitsResourceComponent extends BaseResourceComponent {
184
+ IsLoading = false;
185
+ LoadError = null;
186
+ DeleteError = null;
187
+ DeletingKitId = null;
188
+ IsBrandKitCreatorOpen = false;
189
+ AllBrandKits = [];
190
+ FilteredBrandKits = [];
191
+ SelectedBrandKit = null;
192
+ SearchText = '';
193
+ StatusFilter = 'all';
194
+ CompanyFilter = 'all';
195
+ FilterFields = [];
196
+ FilterValues = {
197
+ status: null,
198
+ companyId: null,
199
+ };
200
+ PageContext = this.buildBrandKitsContext();
201
+ PageTools = this.buildBrandKitsClientTools();
202
+ kitsById = new Map();
203
+ cdr = inject(ChangeDetectorRef);
204
+ confirmService = inject(MJConfirmService);
205
+ get CurrentUser() {
206
+ return this.ProviderToUse?.CurrentUser ?? null;
207
+ }
208
+ get EnvironmentId() {
209
+ return (this.Data?.Configuration?.['environmentId'] ||
210
+ MJEnvironmentEntityExtended.DefaultEnvironmentID);
211
+ }
212
+ get ApplicationId() {
213
+ return this.Data?.Configuration?.['applicationId'] ?? '';
214
+ }
215
+ async ngOnInit() {
216
+ super.ngOnInit();
217
+ await this.LoadBrandKits(false);
218
+ this.NotifyLoadComplete();
219
+ }
220
+ async GetResourceDisplayName(_data) {
221
+ return 'Brand Kits';
222
+ }
223
+ async GetResourceIconClass(_data) {
224
+ return 'fa-solid fa-palette';
225
+ }
226
+ get TotalCount() {
227
+ return this.AllBrandKits.length;
228
+ }
229
+ get FilteredCount() {
230
+ return this.FilteredBrandKits.length;
231
+ }
232
+ get ActivePopoverFilterCount() {
233
+ let count = 0;
234
+ if (this.StatusFilter && this.StatusFilter !== 'all') {
235
+ count++;
236
+ }
237
+ if (this.CompanyFilter && this.CompanyFilter !== 'all') {
238
+ count++;
239
+ }
240
+ return count;
241
+ }
242
+ async Refresh() {
243
+ await this.LoadBrandKits(true);
244
+ }
245
+ async LoadBrandKits(forceRefresh = false) {
246
+ this.IsLoading = true;
247
+ this.LoadError = null;
248
+ this.DeleteError = null;
249
+ this.cdr.markForCheck();
250
+ try {
251
+ const engine = BrandKitEngine.GetProviderInstance(this.ProviderToUse, BrandKitEngine);
252
+ await engine.Config(forceRefresh, undefined, this.ProviderToUse);
253
+ const kits = engine.BrandKits;
254
+ this.kitsById.clear();
255
+ for (const kit of kits) {
256
+ this.kitsById.set(kit.ID, kit);
257
+ }
258
+ this.AllBrandKits = kits.map((kit) => this.mapKitToCard(kit, engine));
259
+ this.rebuildFilterFieldOptions();
260
+ this.applyFiltersAndSync();
261
+ await this.mintLogoUrls(this.AllBrandKits);
262
+ }
263
+ catch (err) {
264
+ const msg = err instanceof Error ? err.message : String(err);
265
+ LogError(msg);
266
+ this.LoadError = msg;
267
+ }
268
+ finally {
269
+ this.IsLoading = false;
270
+ this.syncAgentContext();
271
+ this.cdr.markForCheck();
272
+ }
273
+ }
274
+ OnSearchChange(value) {
275
+ this.SearchText = value;
276
+ this.applyFiltersAndSync();
277
+ }
278
+ OnFilterValuesChange(values) {
279
+ this.FilterValues = { ...values };
280
+ const rawStatus = typeof values['status'] === 'string' ? values['status'] : '';
281
+ this.StatusFilter = BRAND_KIT_STATUS_FILTERS.includes(rawStatus)
282
+ ? rawStatus
283
+ : 'all';
284
+ const rawCompany = typeof values['companyId'] === 'string' ? values['companyId'] : '';
285
+ this.CompanyFilter = rawCompany.trim() ? rawCompany.trim() : 'all';
286
+ this.applyFiltersAndSync();
287
+ }
288
+ ClearAllFilters() {
289
+ this.StatusFilter = 'all';
290
+ this.CompanyFilter = 'all';
291
+ this.FilterValues = {
292
+ status: null,
293
+ companyId: null,
294
+ };
295
+ this.applyFiltersAndSync();
296
+ }
297
+ ResetFiltersAndSearch() {
298
+ this.ClearAllFilters();
299
+ this.OnSearchChange('');
300
+ }
301
+ StatusBadgeVariant(status) {
302
+ return GetVideoStatusBadgeVariant(status);
303
+ }
304
+ CreateNewBrandKit() {
305
+ this.IsBrandKitCreatorOpen = true;
306
+ this.cdr.markForCheck();
307
+ }
308
+ CloseBrandKitCreator() {
309
+ this.IsBrandKitCreatorOpen = false;
310
+ this.cdr.markForCheck();
311
+ }
312
+ async OnBrandKitCreatorSaved(newBrandKitId) {
313
+ await this.LoadBrandKits(true);
314
+ const created = this.AllBrandKits.find((k) => UUIDsEqual(k.ID, newBrandKitId));
315
+ if (created) {
316
+ this.SelectedBrandKit = created;
317
+ this.syncAgentContext();
318
+ }
319
+ this.cdr.markForCheck();
320
+ }
321
+ OnBrandKitCreatorOpenMoreSettings(brandKitId) {
322
+ this.IsBrandKitCreatorOpen = false;
323
+ this.navigationService.OpenEntityRecord('MJ: Brand Kits', CompositeKey.FromID(brandKitId));
324
+ this.cdr.markForCheck();
325
+ }
326
+ OpenBrandKit(item) {
327
+ this.SelectedBrandKit = item;
328
+ this.syncAgentContext();
329
+ this.navigationService.OpenEntityRecord('MJ: Brand Kits', CompositeKey.FromID(item.ID));
330
+ this.cdr.markForCheck();
331
+ }
332
+ async DeleteBrandKit(card, event) {
333
+ event?.stopPropagation();
334
+ const kit = this.kitsById.get(card.ID);
335
+ if (!kit || this.DeletingKitId) {
336
+ return;
337
+ }
338
+ const confirmed = await this.confirmService.ConfirmDelete({
339
+ title: 'Delete brand kit',
340
+ message: `Delete "${card.Name}" and its ${card.AssetCount} asset(s)?`,
341
+ });
342
+ if (!confirmed) {
343
+ return;
344
+ }
345
+ this.DeletingKitId = card.ID;
346
+ this.DeleteError = null;
347
+ this.cdr.markForCheck();
348
+ try {
349
+ const result = await DeleteBrandKitWithAssets(kit, this.ProviderToUse);
350
+ if (!result.Success) {
351
+ this.DeleteError = result.ErrorMessage || 'Failed to delete brand kit.';
352
+ return;
353
+ }
354
+ await this.LoadBrandKits(true);
355
+ }
356
+ finally {
357
+ this.DeletingKitId = null;
358
+ this.cdr.markForCheck();
359
+ }
360
+ }
361
+ // ============================================================================
362
+ // AI Agent Client Tools
363
+ //
364
+ // SAFETY BOUNDARY: The Brand Kits surface exposes ONLY read, search, filter,
365
+ // open-for-viewing, and refresh tools to the AI agent. No create, edit, copy,
366
+ // share, or delete tools are exposed.
367
+ // ============================================================================
368
+ buildBrandKitsClientTools() {
369
+ // SAFETY BOUNDARY: Read-only navigation, search, filter, open-record, and refresh tools only.
370
+ return [
371
+ {
372
+ Name: 'SearchBrandKits',
373
+ Description: 'Search brand kits by name, description, company scope, or status. Read-only filter operation.',
374
+ ParameterSchema: {
375
+ type: 'object',
376
+ properties: { query: { type: 'string' } },
377
+ required: ['query'],
378
+ },
379
+ Handler: async (params) => {
380
+ // SAFETY BOUNDARY: Only updates local search filter state.
381
+ const query = typeof params?.['query'] === 'string' ? params['query'] : '';
382
+ this.OnSearchChange(query);
383
+ return { Success: true };
384
+ },
385
+ },
386
+ {
387
+ Name: 'FilterBrandKits',
388
+ Description: 'Filter brand kits by companyId ("all", "org-wide", or a specific Company ID) and/or status ("all", "Active", "Inactive"). Read-only filter operation.',
389
+ ParameterSchema: {
390
+ type: 'object',
391
+ properties: {
392
+ companyId: { type: 'string' },
393
+ status: { type: 'string', enum: ['all', 'Active', 'Inactive'] },
394
+ },
395
+ },
396
+ Handler: async (params) => {
397
+ // SAFETY BOUNDARY: Only updates local filter state; never modifies records.
398
+ if (typeof params?.['status'] === 'string') {
399
+ const rawStatus = params['status'];
400
+ this.StatusFilter = BRAND_KIT_STATUS_FILTERS.includes(rawStatus)
401
+ ? rawStatus
402
+ : 'all';
403
+ this.FilterValues['status'] = this.StatusFilter === 'all' ? null : this.StatusFilter;
404
+ }
405
+ if (typeof params?.['companyId'] === 'string') {
406
+ this.CompanyFilter = params['companyId'].trim() || 'all';
407
+ this.FilterValues['companyId'] =
408
+ this.CompanyFilter === 'all' ? null : this.CompanyFilter;
409
+ }
410
+ this.applyFiltersAndSync();
411
+ return { Success: true };
412
+ },
413
+ },
414
+ {
415
+ Name: 'ClearBrandKitFilters',
416
+ Description: 'Reset all search and popover filters on the Brand Kits surface.',
417
+ ParameterSchema: { type: 'object', properties: {} },
418
+ Handler: async () => {
419
+ // SAFETY BOUNDARY: Read-only filter reset.
420
+ this.SearchText = '';
421
+ this.ClearAllFilters();
422
+ return { Success: true };
423
+ },
424
+ },
425
+ {
426
+ Name: 'OpenBrandKit',
427
+ Description: 'Open an existing Brand Kit record for viewing by its ID or Name. Does NOT create or mutate any record.',
428
+ ParameterSchema: {
429
+ type: 'object',
430
+ properties: { brandKit: { type: 'string' } },
431
+ required: ['brandKit'],
432
+ },
433
+ Handler: async (params) => {
434
+ // SAFETY BOUNDARY: Opens the entity record for viewing via NavigationService; no writes.
435
+ const resolved = ResolveVideoStudioItem(params?.['brandKit'], this.AllBrandKits, 'brand kit');
436
+ if (!resolved.Ok) {
437
+ return { Success: false, ErrorMessage: resolved.Error };
438
+ }
439
+ this.OpenBrandKit(resolved.Item);
440
+ return { Success: true };
441
+ },
442
+ },
443
+ {
444
+ Name: 'RefreshBrandKits',
445
+ Description: 'Reload Brand Kits from the server. Read-only operation.',
446
+ ParameterSchema: { type: 'object', properties: {} },
447
+ Handler: async () => {
448
+ // SAFETY BOUNDARY: Read-only data reload.
449
+ await this.Refresh();
450
+ return { Success: true };
451
+ },
452
+ },
453
+ ];
454
+ }
455
+ mapKitToCard(kit, engine) {
456
+ return MapBrandKitToCard(kit, engine.GetAssets(kit.ID));
457
+ }
458
+ async mintLogoUrls(cards) {
459
+ if (!(this.ProviderToUse instanceof GraphQLDataProvider)) {
460
+ return;
461
+ }
462
+ const client = new GraphQLFileStorageClient(this.ProviderToUse);
463
+ const cardsWithLogos = cards.filter((c) => Boolean(c.PrimaryLogoFileID));
464
+ if (cardsWithLogos.length === 0) {
465
+ return;
466
+ }
467
+ await Promise.all(cardsWithLogos.map(async (card) => {
468
+ if (!card.PrimaryLogoFileID) {
469
+ return;
470
+ }
471
+ try {
472
+ const token = await client.CreateMediaAccessToken(card.PrimaryLogoFileID);
473
+ if (token.Success && token.Url) {
474
+ card.PrimaryLogoUrl = token.Url;
475
+ }
476
+ }
477
+ catch (err) {
478
+ // Non-fatal: card renders fallback icon when logo token minting fails.
479
+ LogError(err instanceof Error ? err.message : String(err));
480
+ }
481
+ }));
482
+ this.cdr.markForCheck();
483
+ }
484
+ rebuildFilterFieldOptions() {
485
+ const companies = new Map();
486
+ for (const item of this.AllBrandKits) {
487
+ if (item.CompanyID) {
488
+ companies.set(item.CompanyID, item.CompanyName || item.CompanyID);
489
+ }
490
+ }
491
+ this.FilterFields = [
492
+ {
493
+ key: 'status',
494
+ label: 'Status',
495
+ type: 'dropdown',
496
+ options: [
497
+ { value: 'Active', text: 'Active' },
498
+ { value: 'Inactive', text: 'Inactive' },
499
+ ],
500
+ },
501
+ {
502
+ key: 'companyId',
503
+ label: 'Company scope',
504
+ type: 'dropdown',
505
+ options: [
506
+ { value: 'org-wide', text: 'Workspace default' },
507
+ ...Array.from(companies.entries())
508
+ .sort((a, b) => a[1].localeCompare(b[1]))
509
+ .map(([value, text]) => ({ value, text })),
510
+ ],
511
+ },
512
+ ];
513
+ }
514
+ currentFilterState() {
515
+ return {
516
+ SearchQuery: this.SearchText,
517
+ Status: this.StatusFilter,
518
+ CompanyID: this.CompanyFilter,
519
+ };
520
+ }
521
+ applyFiltersAndSync() {
522
+ this.FilteredBrandKits = FilterBrandKitCards(this.AllBrandKits, this.currentFilterState());
523
+ this.syncAgentContext();
524
+ this.cdr.markForCheck();
525
+ }
526
+ buildBrandKitsContext() {
527
+ const availableCompanies = Array.from(new Set(this.AllBrandKits.map((k) => k.CompanyName ?? '').filter((c) => Boolean(c))));
528
+ const matchingCompany = this.AllBrandKits.find((k) => k.CompanyID && UUIDsEqual(k.CompanyID, this.CompanyFilter));
529
+ return BuildBrandKitsAgentContext({
530
+ AllCards: this.AllBrandKits,
531
+ FilteredCards: this.FilteredBrandKits,
532
+ Filters: this.currentFilterState(),
533
+ CompanyFilterName: this.CompanyFilter === 'org-wide'
534
+ ? 'Org-wide'
535
+ : (matchingCompany?.CompanyName ?? null),
536
+ AvailableCompanyNames: availableCompanies,
537
+ IsLoading: this.IsLoading,
538
+ });
539
+ }
540
+ syncAgentContext() {
541
+ this.PageContext = this.buildBrandKitsContext();
542
+ this.navigationService.SetAgentContext(this, this.PageContext);
543
+ }
544
+ static ɵfac = /*@__PURE__*/ (() => { let ɵVideoStudioBrandKitsResourceComponent_BaseFactory; return function VideoStudioBrandKitsResourceComponent_Factory(__ngFactoryType__) { return (ɵVideoStudioBrandKitsResourceComponent_BaseFactory || (ɵVideoStudioBrandKitsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(VideoStudioBrandKitsResourceComponent)))(__ngFactoryType__ || VideoStudioBrandKitsResourceComponent); }; })();
545
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: VideoStudioBrandKitsResourceComponent, selectors: [["mj-video-studio-brand-kits-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 22, vars: 20, consts: [[1, "vs-resource-shell"], [1, "vs-resource-shell__page"], ["Title", "Brand Kits", "Icon", "fa-solid fa-palette", "Subtitle", "Configure palettes, typography, logos, soundtracks, and generation policies for video productions"], ["meta", ""], ["Label", "Brand kits", 3, "Count", "Total"], ["actions", ""], [3, "Clicked", "Loading"], ["type", "button", "mjButton", "", "Variant", "primary", "data-testid", "new-brand-kit-button", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["toolbar", ""], ["Placeholder", "Search brand kits by name, description, or company...", 3, "ValueChange", "Value"], ["Label", "Filters", "Icon", "fa-solid fa-filter", 3, "ClearAllRequested", "ActiveCount", "ShowClearAll"], [3, "ValuesChange", "Fields", "Values", "ShowReset"], ["data-testid", "brand-kits-loading", 1, "vs-loading-state"], ["role", "alert", "data-testid", "brand-kits-error", "Icon", "fa-solid fa-triangle-exclamation", "Variant", "error", "Title", "Unable to load brand kits", "ActionText", "Try again", "ActionIcon", "fa-solid fa-rotate", 3, "Message"], ["Title", "New brand kit", "Size", "lg", 3, "Visible"], [3, "Provider", "CurrentUser", "EnvironmentId", "ApplicationId", "PageSource", "PageContext", "PageTools", "FallbackBrandKitId", "HeaderTitle"], ["Text", "Loading brand kits...", "Size", "medium"], ["role", "alert", "data-testid", "brand-kits-error", "Icon", "fa-solid fa-triangle-exclamation", "Variant", "error", "Title", "Unable to load brand kits", "ActionText", "Try again", "ActionIcon", "fa-solid fa-rotate", 3, "ActionClicked", "Message"], ["data-testid", "brand-kits-empty", "Icon", "fa-solid fa-palette", "Variant", "empty", "Title", "No brand kits defined yet", "Message", "Create a brand kit to establish your palette, typography, logos, and generation policies.", "ActionText", "New brand kit", "ActionIcon", "fa-solid fa-plus"], ["data-testid", "brand-kits-empty", "Icon", "fa-solid fa-palette", "Variant", "no-results", "Title", "No brand kits match your filters", "Message", "Try clearing your search query or adjusting the active filter selections.", "ActionText", "Reset filters", "ActionIcon", "fa-solid fa-filter-circle-xmark"], ["data-testid", "brand-kits-empty", "Icon", "fa-solid fa-palette", "Variant", "empty", "Title", "No brand kits defined yet", "Message", "Create a brand kit to establish your palette, typography, logos, and generation policies.", "ActionText", "New brand kit", "ActionIcon", "fa-solid fa-plus", 3, "ActionClicked"], ["data-testid", "brand-kits-empty", "Icon", "fa-solid fa-palette", "Variant", "no-results", "Title", "No brand kits match your filters", "Message", "Try clearing your search query or adjusting the active filter selections.", "ActionText", "Reset filters", "ActionIcon", "fa-solid fa-filter-circle-xmark", 3, "ActionClicked"], ["role", "alert", "data-testid", "brand-kits-delete-error", 1, "vs-delete-error-banner"], ["data-testid", "brand-kits-grid", 1, "vs-brand-kits-grid"], ["tabindex", "0", "role", "button", 1, "vs-brand-kit-card"], ["aria-hidden", "true", 1, "fa-solid", "fa-circle-exclamation"], ["tabindex", "0", "role", "button", 1, "vs-brand-kit-card", 3, "click", "keydown.enter", "keydown.space"], ["data-testid", "brand-kit-palette-strip", 1, "vs-palette-strip"], [1, "vs-palette-empty"], [1, "vs-brand-kit-body"], [1, "vs-brand-kit-header"], [1, "vs-brand-kit-title-group"], ["data-testid", "brand-kit-logo-thumb", 1, "vs-brand-kit-logo-thumb"], ["loading", "lazy", 1, "vs-brand-kit-logo-img", 3, "src", "alt"], ["aria-hidden", "true", 1, "fa-solid", "fa-palette"], [1, "vs-brand-kit-title", 3, "title"], ["Variant", "neutral", "Icon", "fa-solid fa-star", "title", "Default brand kit", "data-testid", "brand-kit-default-star"], ["data-testid", "brand-kit-status-badge", 3, "Variant"], [1, "vs-brand-kit-footer"], ["data-testid", "brand-kit-company-badge", 1, "vs-brand-kit-meta-item"], ["aria-hidden", "true", 1, "fa-solid", "fa-building"], ["type", "button", "mjButton", "", "Variant", "icon", "Size", "sm", 3, "click", "keydown.enter", "keydown.space", "AriaLabel", "disabled"], ["aria-hidden", "true", 1, "fa-regular", "fa-trash-can"], [1, "vs-palette-swatch", 3, "background-color", "title"], [1, "vs-palette-swatch", 3, "title"], ["Title", "New brand kit", "Size", "lg", 3, "Close", "Visible"], [3, "Saved", "Cancelled", "OpenMoreSettings", "Provider"]], template: function VideoStudioBrandKitsResourceComponent_Template(rf, ctx) { if (rf & 1) {
546
+ i0.ɵɵelementStart(0, "div", 0)(1, "mj-page-layout", 1)(2, "mj-page-header", 2)(3, "div", 3);
547
+ i0.ɵɵelement(4, "mj-stat-badge", 4);
548
+ i0.ɵɵelementEnd();
549
+ i0.ɵɵelementStart(5, "div", 5)(6, "mj-refresh-button", 6);
550
+ i0.ɵɵlistener("Clicked", function VideoStudioBrandKitsResourceComponent_Template_mj_refresh_button_Clicked_6_listener() { return ctx.Refresh(); });
551
+ i0.ɵɵelementEnd();
552
+ i0.ɵɵelementStart(7, "button", 7);
553
+ i0.ɵɵlistener("click", function VideoStudioBrandKitsResourceComponent_Template_button_click_7_listener() { return ctx.CreateNewBrandKit(); });
554
+ i0.ɵɵelement(8, "i", 8);
555
+ i0.ɵɵelementStart(9, "span");
556
+ i0.ɵɵtext(10, "New brand kit");
557
+ i0.ɵɵelementEnd()()();
558
+ i0.ɵɵelementStart(11, "div", 9)(12, "mj-page-search", 10);
559
+ i0.ɵɵlistener("ValueChange", function VideoStudioBrandKitsResourceComponent_Template_mj_page_search_ValueChange_12_listener($event) { return ctx.OnSearchChange($event); });
560
+ i0.ɵɵelementEnd();
561
+ i0.ɵɵelementStart(13, "mj-filter-popover", 11);
562
+ i0.ɵɵlistener("ClearAllRequested", function VideoStudioBrandKitsResourceComponent_Template_mj_filter_popover_ClearAllRequested_13_listener() { return ctx.ClearAllFilters(); });
563
+ i0.ɵɵelementStart(14, "mj-filter-panel", 12);
564
+ i0.ɵɵlistener("ValuesChange", function VideoStudioBrandKitsResourceComponent_Template_mj_filter_panel_ValuesChange_14_listener($event) { return ctx.OnFilterValuesChange($event); });
565
+ i0.ɵɵelementEnd()()()();
566
+ i0.ɵɵelementStart(15, "mj-page-body");
567
+ i0.ɵɵconditionalCreate(16, VideoStudioBrandKitsResourceComponent_Conditional_16_Template, 2, 0, "div", 13)(17, VideoStudioBrandKitsResourceComponent_Conditional_17_Template, 1, 1, "mj-empty-state", 14)(18, VideoStudioBrandKitsResourceComponent_Conditional_18_Template, 2, 1)(19, VideoStudioBrandKitsResourceComponent_Conditional_19_Template, 4, 1);
568
+ i0.ɵɵconditionalCreate(20, VideoStudioBrandKitsResourceComponent_Conditional_20_Template, 2, 2, "mj-dialog", 15);
569
+ i0.ɵɵelementEnd()();
570
+ i0.ɵɵelement(21, "vs-studio-slide-in", 16);
571
+ i0.ɵɵelementEnd();
572
+ } if (rf & 2) {
573
+ i0.ɵɵadvance(4);
574
+ i0.ɵɵproperty("Count", ctx.FilteredCount)("Total", ctx.TotalCount);
575
+ i0.ɵɵadvance(2);
576
+ i0.ɵɵproperty("Loading", ctx.IsLoading);
577
+ i0.ɵɵadvance(6);
578
+ i0.ɵɵproperty("Value", ctx.SearchText);
579
+ i0.ɵɵadvance();
580
+ i0.ɵɵproperty("ActiveCount", ctx.ActivePopoverFilterCount)("ShowClearAll", ctx.ActivePopoverFilterCount > 0);
581
+ i0.ɵɵadvance();
582
+ i0.ɵɵproperty("Fields", ctx.FilterFields)("Values", ctx.FilterValues)("ShowReset", false);
583
+ i0.ɵɵadvance(2);
584
+ i0.ɵɵconditional(ctx.IsLoading && ctx.AllBrandKits.length === 0 ? 16 : ctx.LoadError ? 17 : ctx.FilteredBrandKits.length === 0 ? 18 : 19);
585
+ i0.ɵɵadvance(4);
586
+ i0.ɵɵconditional(ctx.IsBrandKitCreatorOpen ? 20 : -1);
587
+ i0.ɵɵadvance();
588
+ i0.ɵɵproperty("Provider", ctx.ProviderToUse)("CurrentUser", ctx.CurrentUser)("EnvironmentId", ctx.EnvironmentId)("ApplicationId", ctx.ApplicationId)("PageSource", ctx)("PageContext", ctx.PageContext)("PageTools", ctx.PageTools)("FallbackBrandKitId", (ctx.SelectedBrandKit == null ? null : ctx.SelectedBrandKit.ID) ?? null)("HeaderTitle", "Video Studio");
589
+ } }, dependencies: [i1.LoadingComponent, i2.MJVideoBadgeComponent, i3.BrandKitCreatorComponent, i4.VSStudioSlideInComponent, i5.MJButtonDirective, i5.MJDialogComponent, i5.MJEmptyStateComponent, i5.MJPageLayoutComponent, i5.MJPageHeaderComponent, i5.MJPageBodyComponent, i5.MJPageSearchComponent, i5.MJFilterPopoverComponent, i5.MJFilterPanelComponent, i5.MJRefreshButtonComponent, i5.MJStatBadgeComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n width: 100%;\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-delete-error-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n margin-bottom: var(--mj-space-3-5);\n padding: var(--mj-space-2-5) var(--mj-space-3-5);\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n}\n\n.vs-brand-kits-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: var(--mj-space-4);\n align-content: start;\n}\n\n.vs-brand-kit-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-brand-kit-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-brand-kit-card[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n}\n\n.vs-palette-strip[_ngcontent-%COMP%] {\n display: flex;\n height: var(--mj-space-11);\n width: 100%;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.vs-palette-swatch[_ngcontent-%COMP%] {\n flex: 1 1 0;\n height: 100%;\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n transition: var(--mj-transition-fast);\n}\n\n.vs-palette-swatch[_ngcontent-%COMP%]:hover {\n flex-grow: 1.4;\n}\n\n.vs-palette-empty[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.vs-brand-kit-body[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2-5);\n padding: var(--mj-space-4);\n flex: 1;\n}\n\n.vs-brand-kit-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--mj-space-2-5);\n}\n\n.vs-brand-kit-title-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.vs-brand-kit-logo-thumb[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--mj-space-7);\n height: var(--mj-space-7);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.vs-brand-kit-logo-img[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.vs-brand-kit-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-brand-kit-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2);\n margin-top: auto;\n padding-top: var(--mj-space-2);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.vs-brand-kit-meta-item[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1-5);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\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@media (prefers-reduced-motion: reduce) {\n .vs-brand-kit-card[_ngcontent-%COMP%], \n .vs-palette-swatch[_ngcontent-%COMP%] {\n transition: none;\n }\n}"], changeDetection: 0 });
590
+ };
591
+ VideoStudioBrandKitsResourceComponent = __decorate([
592
+ RegisterClass(BaseResourceComponent, 'VideoStudioBrandKitsResource')
593
+ ], VideoStudioBrandKitsResourceComponent);
594
+ export { VideoStudioBrandKitsResourceComponent };
595
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VideoStudioBrandKitsResourceComponent, [{
596
+ type: Component,
597
+ args: [{ standalone: false, selector: 'mj-video-studio-brand-kits-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"vs-resource-shell\">\n <mj-page-layout class=\"vs-resource-shell__page\">\n <mj-page-header\n Title=\"Brand Kits\"\n Icon=\"fa-solid fa-palette\"\n Subtitle=\"Configure palettes, typography, logos, soundtracks, and generation policies for video productions\"\n >\n <div meta>\n <mj-stat-badge\n [Count]=\"FilteredCount\"\n [Total]=\"TotalCount\"\n Label=\"Brand kits\"\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=\"new-brand-kit-button\"\n (click)=\"CreateNewBrandKit()\"\n >\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i>\n <span>New brand kit</span>\n </button>\n </div>\n\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search brand kits by name, description, or company...\"\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 </mj-filter-popover>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (IsLoading && AllBrandKits.length === 0) {\n <div class=\"vs-loading-state\" data-testid=\"brand-kits-loading\">\n <mj-loading Text=\"Loading brand kits...\" Size=\"medium\" />\n </div>\n } @else if (LoadError) {\n <mj-empty-state\n role=\"alert\"\n data-testid=\"brand-kits-error\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n Variant=\"error\"\n Title=\"Unable to load brand kits\"\n [Message]=\"LoadError\"\n ActionText=\"Try again\"\n ActionIcon=\"fa-solid fa-rotate\"\n (ActionClicked)=\"Refresh()\"\n ></mj-empty-state>\n } @else if (FilteredBrandKits.length === 0) {\n @if (AllBrandKits.length === 0) {\n <mj-empty-state\n data-testid=\"brand-kits-empty\"\n Icon=\"fa-solid fa-palette\"\n Variant=\"empty\"\n Title=\"No brand kits defined yet\"\n Message=\"Create a brand kit to establish your palette, typography, logos, and generation policies.\"\n ActionText=\"New brand kit\"\n ActionIcon=\"fa-solid fa-plus\"\n (ActionClicked)=\"CreateNewBrandKit()\"\n ></mj-empty-state>\n } @else {\n <mj-empty-state\n data-testid=\"brand-kits-empty\"\n Icon=\"fa-solid fa-palette\"\n Variant=\"no-results\"\n Title=\"No brand kits match your filters\"\n Message=\"Try clearing your search query or adjusting the active filter selections.\"\n ActionText=\"Reset filters\"\n ActionIcon=\"fa-solid fa-filter-circle-xmark\"\n (ActionClicked)=\"ResetFiltersAndSearch()\"\n ></mj-empty-state>\n }\n } @else {\n @if (DeleteError) {\n <div class=\"vs-delete-error-banner\" role=\"alert\" data-testid=\"brand-kits-delete-error\">\n <i class=\"fa-solid fa-circle-exclamation\" aria-hidden=\"true\"></i>\n <span>{{ DeleteError }}</span>\n </div>\n }\n <div class=\"vs-brand-kits-grid\" data-testid=\"brand-kits-grid\">\n @for (kit of FilteredBrandKits; track kit.ID) {\n <article\n class=\"vs-brand-kit-card\"\n [attr.data-testid]=\"'brand-kit-card-' + kit.ID\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"OpenBrandKit(kit)\"\n (keydown.enter)=\"$event.target === $event.currentTarget && OpenBrandKit(kit)\"\n (keydown.space)=\"$event.target === $event.currentTarget && $event.preventDefault(); $event.target === $event.currentTarget && OpenBrandKit(kit)\"\n >\n <div class=\"vs-palette-strip\" data-testid=\"brand-kit-palette-strip\">\n @if (kit.Swatches.length > 0) {\n @for (swatch of kit.Swatches; track swatch.Name + swatch.Value) {\n <div\n class=\"vs-palette-swatch\"\n [style.background-color]=\"swatch.Value\"\n [title]=\"swatch.Name + ' (' + swatch.Value + ')'\"\n ></div>\n }\n } @else {\n <div class=\"vs-palette-empty\">\n <span>No palette swatches configured</span>\n </div>\n }\n </div>\n\n <div class=\"vs-brand-kit-body\">\n <div class=\"vs-brand-kit-header\">\n <div class=\"vs-brand-kit-title-group\">\n <div class=\"vs-brand-kit-logo-thumb\" data-testid=\"brand-kit-logo-thumb\">\n @if (kit.PrimaryLogoUrl) {\n <img\n class=\"vs-brand-kit-logo-img\"\n [src]=\"kit.PrimaryLogoUrl\"\n [alt]=\"kit.Name + ' logo'\"\n loading=\"lazy\"\n />\n } @else {\n <i class=\"fa-solid fa-palette\" aria-hidden=\"true\"></i>\n }\n </div>\n <h3 class=\"vs-brand-kit-title\" [title]=\"kit.Name\">\n {{ kit.Name }}\n </h3>\n @if (kit.IsDefault) {\n <mj-video-badge\n Variant=\"neutral\"\n Icon=\"fa-solid fa-star\"\n title=\"Default brand kit\"\n data-testid=\"brand-kit-default-star\"\n >\n Default\n </mj-video-badge>\n }\n </div>\n\n <mj-video-badge\n [Variant]=\"StatusBadgeVariant(kit.Status)\"\n data-testid=\"brand-kit-status-badge\"\n >\n {{ kit.Status }}\n </mj-video-badge>\n </div>\n\n <div class=\"vs-brand-kit-footer\">\n <span class=\"vs-brand-kit-meta-item\" data-testid=\"brand-kit-company-badge\">\n <i class=\"fa-solid fa-building\" aria-hidden=\"true\"></i>\n <span>{{ kit.CompanyName || 'Workspace default' }}</span>\n </span>\n\n <button\n type=\"button\"\n mjButton\n Variant=\"icon\"\n Size=\"sm\"\n [AriaLabel]=\"'Delete ' + kit.Name\"\n [attr.data-testid]=\"'brand-kit-delete-' + kit.ID\"\n [disabled]=\"DeletingKitId === kit.ID\"\n (click)=\"DeleteBrandKit(kit, $event)\"\n (keydown.enter)=\"$event.stopPropagation()\"\n (keydown.space)=\"$event.stopPropagation()\"\n >\n <i class=\"fa-regular fa-trash-can\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </article>\n }\n </div>\n }\n\n @if (IsBrandKitCreatorOpen) {\n <mj-dialog\n [Visible]=\"true\"\n Title=\"New brand kit\"\n Size=\"lg\"\n (Close)=\"CloseBrandKitCreator()\"\n >\n <mj-brand-kit-creator\n [Provider]=\"ProviderToUse\"\n (Saved)=\"OnBrandKitCreatorSaved($event)\"\n (Cancelled)=\"CloseBrandKitCreator()\"\n (OpenMoreSettings)=\"OnBrandKitCreatorOpenMoreSettings($event)\"\n ></mj-brand-kit-creator>\n </mj-dialog>\n }\n </mj-page-body>\n </mj-page-layout>\n\n <vs-studio-slide-in\n [Provider]=\"ProviderToUse\"\n [CurrentUser]=\"CurrentUser\"\n [EnvironmentId]=\"EnvironmentId\"\n [ApplicationId]=\"ApplicationId\"\n [PageSource]=\"this\"\n [PageContext]=\"PageContext\"\n [PageTools]=\"PageTools\"\n [FallbackBrandKitId]=\"SelectedBrandKit?.ID ?? null\"\n [HeaderTitle]=\"'Video Studio'\"\n ></vs-studio-slide-in>\n</div>\n", styles: [":host {\n display: block;\n height: 100%;\n width: 100%;\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-delete-error-banner {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n margin-bottom: var(--mj-space-3-5);\n padding: var(--mj-space-2-5) var(--mj-space-3-5);\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n}\n\n.vs-brand-kits-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: var(--mj-space-4);\n align-content: start;\n}\n\n.vs-brand-kit-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-brand-kit-card:hover {\n transform: translateY(-2px);\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-md);\n}\n\n.vs-brand-kit-card:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n}\n\n.vs-palette-strip {\n display: flex;\n height: var(--mj-space-11);\n width: 100%;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.vs-palette-swatch {\n flex: 1 1 0;\n height: 100%;\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--mj-text-primary) 12%, transparent);\n transition: var(--mj-transition-fast);\n}\n\n.vs-palette-swatch:hover {\n flex-grow: 1.4;\n}\n\n.vs-palette-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n}\n\n.vs-brand-kit-body {\n display: flex;\n flex-direction: column;\n gap: var(--mj-space-2-5);\n padding: var(--mj-space-4);\n flex: 1;\n}\n\n.vs-brand-kit-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: var(--mj-space-2-5);\n}\n\n.vs-brand-kit-title-group {\n display: flex;\n align-items: center;\n gap: var(--mj-space-2);\n min-width: 0;\n}\n\n.vs-brand-kit-logo-thumb {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--mj-space-7);\n height: var(--mj-space-7);\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-muted);\n font-size: var(--mj-text-xs);\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.vs-brand-kit-logo-img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.vs-brand-kit-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-brand-kit-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--mj-space-2);\n margin-top: auto;\n padding-top: var(--mj-space-2);\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.vs-brand-kit-meta-item {\n display: inline-flex;\n align-items: center;\n gap: var(--mj-space-1-5);\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\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@media (prefers-reduced-motion: reduce) {\n .vs-brand-kit-card,\n .vs-palette-swatch {\n transition: none;\n }\n}\n"] }]
598
+ }], null, null); })();
599
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(VideoStudioBrandKitsResourceComponent, { className: "VideoStudioBrandKitsResourceComponent", filePath: "src/VideoStudio/resources/video-studio-brand-kits-resource.component.ts", lineNumber: 54 }); })();
600
+ //# sourceMappingURL=video-studio-brand-kits-resource.component.js.map