@memberjunction/ng-dashboards 5.11.0 → 5.13.0

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 (229) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +34 -2
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +586 -223
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +2 -2
  6. package/dist/AI/components/agents/agent-filter-panel.component.d.ts +8 -0
  7. package/dist/AI/components/agents/agent-filter-panel.component.d.ts.map +1 -1
  8. package/dist/AI/components/agents/agent-filter-panel.component.js +85 -52
  9. package/dist/AI/components/agents/agent-filter-panel.component.js.map +1 -1
  10. package/dist/AI/components/charts/performance-heatmap.component.d.ts +1 -0
  11. package/dist/AI/components/charts/performance-heatmap.component.d.ts.map +1 -1
  12. package/dist/AI/components/charts/performance-heatmap.component.js +27 -5
  13. package/dist/AI/components/charts/performance-heatmap.component.js.map +1 -1
  14. package/dist/AI/components/charts/time-series-chart.component.d.ts +5 -0
  15. package/dist/AI/components/charts/time-series-chart.component.d.ts.map +1 -1
  16. package/dist/AI/components/charts/time-series-chart.component.js +23 -8
  17. package/dist/AI/components/charts/time-series-chart.component.js.map +1 -1
  18. package/dist/AI/components/execution-monitoring.component.js +2 -2
  19. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  20. package/dist/AI/components/models/model-management.component.js +2 -2
  21. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +2 -2
  22. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  23. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  24. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  25. package/dist/AI/components/prompts/prompt-version-control.component.js +2 -2
  26. package/dist/AI/components/requests/agent-requests-resource.component.d.ts +83 -0
  27. package/dist/AI/components/requests/agent-requests-resource.component.d.ts.map +1 -0
  28. package/dist/AI/components/requests/agent-requests-resource.component.js +547 -0
  29. package/dist/AI/components/requests/agent-requests-resource.component.js.map +1 -0
  30. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  31. package/dist/AI/components/system/system-configuration.component.js +2 -2
  32. package/dist/AI/components/widgets/kpi-card.component.js +7 -7
  33. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  34. package/dist/AI/components/widgets/live-execution-widget.component.d.ts.map +1 -1
  35. package/dist/AI/components/widgets/live-execution-widget.component.js +6 -6
  36. package/dist/AI/components/widgets/live-execution-widget.component.js.map +1 -1
  37. package/dist/AI/index.d.ts +1 -0
  38. package/dist/AI/index.d.ts.map +1 -1
  39. package/dist/AI/index.js +2 -0
  40. package/dist/AI/index.js.map +1 -1
  41. package/dist/APIKeys/api-applications-panel.component.js +3 -3
  42. package/dist/APIKeys/api-applications-panel.component.js.map +1 -1
  43. package/dist/APIKeys/api-key-create-dialog.component.js +3 -3
  44. package/dist/APIKeys/api-key-create-dialog.component.js.map +1 -1
  45. package/dist/APIKeys/api-key-edit-panel.component.js +1 -1
  46. package/dist/APIKeys/api-key-edit-panel.component.js.map +1 -1
  47. package/dist/APIKeys/api-key-list.component.js +3 -3
  48. package/dist/APIKeys/api-key-list.component.js.map +1 -1
  49. package/dist/APIKeys/api-keys-resource.component.js +1 -1
  50. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  51. package/dist/APIKeys/api-scopes-panel.component.js +2 -2
  52. package/dist/APIKeys/api-usage-panel.component.js +2 -2
  53. package/dist/Actions/components/actions-overview.component.js +2 -2
  54. package/dist/Actions/components/execution-monitoring.component.js +2 -2
  55. package/dist/Actions/components/explorer/action-breadcrumb.component.js +2 -2
  56. package/dist/Actions/components/explorer/action-card.component.js +2 -2
  57. package/dist/Actions/components/explorer/action-explorer.component.js +2 -2
  58. package/dist/Actions/components/explorer/action-list-item.component.js +2 -2
  59. package/dist/Actions/components/explorer/action-toolbar.component.js +2 -2
  60. package/dist/Actions/components/explorer/action-tree-panel.component.js +2 -2
  61. package/dist/Actions/components/explorer/new-action-panel.component.js +2 -2
  62. package/dist/Actions/components/explorer/new-action-panel.component.js.map +1 -1
  63. package/dist/Actions/components/explorer/new-category-panel.component.js +2 -2
  64. package/dist/Actions/components/explorer/new-category-panel.component.js.map +1 -1
  65. package/dist/Communication/communication-dashboard.component.js +2 -2
  66. package/dist/Communication/communication-logs-resource.component.d.ts.map +1 -1
  67. package/dist/Communication/communication-logs-resource.component.js +3 -3
  68. package/dist/Communication/communication-logs-resource.component.js.map +1 -1
  69. package/dist/Communication/communication-monitor-resource.component.d.ts.map +1 -1
  70. package/dist/Communication/communication-monitor-resource.component.js +5 -5
  71. package/dist/Communication/communication-monitor-resource.component.js.map +1 -1
  72. package/dist/Communication/communication-providers-resource.component.d.ts.map +1 -1
  73. package/dist/Communication/communication-providers-resource.component.js +3 -3
  74. package/dist/Communication/communication-providers-resource.component.js.map +1 -1
  75. package/dist/Communication/communication-runs-resource.component.d.ts.map +1 -1
  76. package/dist/Communication/communication-runs-resource.component.js +3 -3
  77. package/dist/Communication/communication-runs-resource.component.js.map +1 -1
  78. package/dist/Communication/communication-templates-resource.component.js +2 -2
  79. package/dist/Communication/communication-templates-resource.component.js.map +1 -1
  80. package/dist/ComponentStudio/component-studio-dashboard.component.js +2 -2
  81. package/dist/ComponentStudio/components/ai-assistant/ai-assistant-panel.component.js +2 -2
  82. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +2 -2
  83. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +2 -2
  84. package/dist/ComponentStudio/components/browser/component-browser.component.js +2 -2
  85. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js +2 -2
  86. package/dist/ComponentStudio/components/editors/code-editor-panel.component.js.map +1 -1
  87. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js +2 -2
  88. package/dist/ComponentStudio/components/editors/data-requirements-editor.component.js.map +1 -1
  89. package/dist/ComponentStudio/components/editors/requirements-editor.component.js +2 -2
  90. package/dist/ComponentStudio/components/editors/requirements-editor.component.js.map +1 -1
  91. package/dist/ComponentStudio/components/editors/spec-editor.component.js +2 -2
  92. package/dist/ComponentStudio/components/editors/spec-editor.component.js.map +1 -1
  93. package/dist/ComponentStudio/components/new-component-dialog/new-component-dialog.component.js +2 -2
  94. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js +2 -2
  95. package/dist/ComponentStudio/components/save-version-dialog/save-version-dialog.component.js.map +1 -1
  96. package/dist/ComponentStudio/components/text-import-dialog.component.js +2 -2
  97. package/dist/ComponentStudio/components/text-import-dialog.component.js.map +1 -1
  98. package/dist/ComponentStudio/components/workspace/component-preview.component.js +2 -2
  99. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js +2 -2
  100. package/dist/ComponentStudio/components/workspace/editor-tabs.component.js.map +1 -1
  101. package/dist/Credentials/components/credentials-audit-resource.component.js +9 -9
  102. package/dist/Credentials/components/credentials-audit-resource.component.js.map +1 -1
  103. package/dist/Credentials/components/credentials-categories-resource.component.d.ts.map +1 -1
  104. package/dist/Credentials/components/credentials-categories-resource.component.js +11 -3
  105. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  106. package/dist/Credentials/components/credentials-list-resource.component.js +2 -2
  107. package/dist/Credentials/components/credentials-overview-resource.component.d.ts.map +1 -1
  108. package/dist/Credentials/components/credentials-overview-resource.component.js +12 -11
  109. package/dist/Credentials/components/credentials-overview-resource.component.js.map +1 -1
  110. package/dist/Credentials/components/credentials-types-resource.component.js +9 -9
  111. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  112. package/dist/Credentials/credentials-dashboard.component.js +2 -2
  113. package/dist/DashboardBrowser/dashboard-browser-resource.component.js +2 -2
  114. package/dist/DashboardBrowser/dashboard-share-dialog.component.js +2 -2
  115. package/dist/DataExplorer/components/filter-dialog/filter-dialog.component.js +2 -2
  116. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +2 -2
  117. package/dist/DataExplorer/components/view-selector/view-selector.component.js +2 -2
  118. package/dist/DataExplorer/data-explorer-dashboard.component.js +4 -4
  119. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -1
  120. package/dist/Home/home-dashboard.component.js +2 -2
  121. package/dist/Integration/components/activity/activity.component.d.ts +1 -1
  122. package/dist/Integration/components/activity/activity.component.d.ts.map +1 -1
  123. package/dist/Integration/components/activity/activity.component.js +5 -5
  124. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  125. package/dist/Integration/components/connections/connections.component.d.ts +31 -2
  126. package/dist/Integration/components/connections/connections.component.d.ts.map +1 -1
  127. package/dist/Integration/components/connections/connections.component.js +753 -412
  128. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  129. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js +3 -3
  130. package/dist/Integration/components/mapping-workspace/mapping-workspace.component.js.map +1 -1
  131. package/dist/Integration/components/overview/overview.component.d.ts +0 -1
  132. package/dist/Integration/components/overview/overview.component.d.ts.map +1 -1
  133. package/dist/Integration/components/overview/overview.component.js +3 -6
  134. package/dist/Integration/components/overview/overview.component.js.map +1 -1
  135. package/dist/Integration/components/pipelines/pipelines.component.js +3 -3
  136. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  137. package/dist/Integration/components/schedules/schedules.component.d.ts +20 -0
  138. package/dist/Integration/components/schedules/schedules.component.d.ts.map +1 -1
  139. package/dist/Integration/components/schedules/schedules.component.js +97 -5
  140. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  141. package/dist/Integration/components/visual-editor/visual-editor.component.js +2 -2
  142. package/dist/Integration/components/widgets/integration-card.component.d.ts.map +1 -1
  143. package/dist/Integration/components/widgets/integration-card.component.js +5 -1
  144. package/dist/Integration/components/widgets/integration-card.component.js.map +1 -1
  145. package/dist/Integration/components/widgets/run-history-panel.component.js +2 -2
  146. package/dist/Integration/components/widgets/run-history-panel.component.js.map +1 -1
  147. package/dist/Integration/integration.module.d.ts +2 -1
  148. package/dist/Integration/integration.module.d.ts.map +1 -1
  149. package/dist/Integration/integration.module.js +7 -3
  150. package/dist/Integration/integration.module.js.map +1 -1
  151. package/dist/Integration/services/integration-data.service.d.ts +27 -2
  152. package/dist/Integration/services/integration-data.service.d.ts.map +1 -1
  153. package/dist/Integration/services/integration-data.service.js +107 -4
  154. package/dist/Integration/services/integration-data.service.js.map +1 -1
  155. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  156. package/dist/Lists/components/lists-browse-resource.component.js +25 -24
  157. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  158. package/dist/Lists/components/lists-categories-resource.component.js +2 -2
  159. package/dist/Lists/components/lists-categories-resource.component.js.map +1 -1
  160. package/dist/Lists/components/lists-my-lists-resource.component.d.ts.map +1 -1
  161. package/dist/Lists/components/lists-my-lists-resource.component.js +26 -25
  162. package/dist/Lists/components/lists-my-lists-resource.component.js.map +1 -1
  163. package/dist/Lists/components/lists-operations-resource.component.js +2 -2
  164. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  165. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +3 -3
  166. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  167. package/dist/MCP/components/mcp-connection-dialog.component.js +2 -2
  168. package/dist/MCP/components/mcp-log-detail-panel.component.js +2 -2
  169. package/dist/MCP/components/mcp-log-detail-panel.component.js.map +1 -1
  170. package/dist/MCP/components/mcp-server-dialog.component.js +2 -2
  171. package/dist/MCP/components/mcp-test-tool-dialog.component.js +2 -2
  172. package/dist/MCP/components/mcp-test-tool-dialog.component.js.map +1 -1
  173. package/dist/MCP/mcp-dashboard.component.js +2 -2
  174. package/dist/MCP/mcp-filter-panel.component.js +2 -2
  175. package/dist/QueryBrowser/query-browser-resource.component.js +7 -7
  176. package/dist/QueryBrowser/query-browser-resource.component.js.map +1 -1
  177. package/dist/Scheduling/components/index.d.ts +0 -1
  178. package/dist/Scheduling/components/index.d.ts.map +1 -1
  179. package/dist/Scheduling/components/index.js +0 -1
  180. package/dist/Scheduling/components/index.js.map +1 -1
  181. package/dist/Scheduling/components/scheduling-activity.component.js +2 -2
  182. package/dist/Scheduling/components/scheduling-jobs.component.d.ts +6 -9
  183. package/dist/Scheduling/components/scheduling-jobs.component.d.ts.map +1 -1
  184. package/dist/Scheduling/components/scheduling-jobs.component.js +118 -110
  185. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  186. package/dist/Scheduling/components/scheduling-overview.component.js +3 -3
  187. package/dist/Scheduling/components/scheduling-overview.component.js.map +1 -1
  188. package/dist/Scheduling/scheduling-dashboard.component.js +2 -2
  189. package/dist/SystemDiagnostics/system-diagnostics.component.js +4 -4
  190. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  191. package/dist/Testing/components/testing-analytics.component.js +2 -2
  192. package/dist/Testing/components/testing-analytics.component.js.map +1 -1
  193. package/dist/Testing/components/testing-dashboard-tab.component.js +4 -4
  194. package/dist/Testing/components/testing-dashboard-tab.component.js.map +1 -1
  195. package/dist/Testing/components/testing-explorer.component.js +2 -2
  196. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  197. package/dist/Testing/components/testing-review.component.d.ts.map +1 -1
  198. package/dist/Testing/components/testing-review.component.js +5 -5
  199. package/dist/Testing/components/testing-review.component.js.map +1 -1
  200. package/dist/Testing/components/testing-runs.component.js +2 -2
  201. package/dist/Testing/components/testing-runs.component.js.map +1 -1
  202. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js +2 -2
  203. package/dist/Testing/components/widgets/oracle-breakdown-table.component.js.map +1 -1
  204. package/dist/Testing/components/widgets/suite-tree.component.js +4 -4
  205. package/dist/Testing/components/widgets/suite-tree.component.js.map +1 -1
  206. package/dist/Testing/components/widgets/test-run-detail-panel.component.js +2 -2
  207. package/dist/Testing/components/widgets/test-run-detail-panel.component.js.map +1 -1
  208. package/dist/Testing/testing-dashboard.component.js +2 -2
  209. package/dist/VersionHistory/components/diff-resource.component.js +2 -2
  210. package/dist/VersionHistory/components/graph-resource.component.js +2 -2
  211. package/dist/VersionHistory/components/labels-resource.component.js +3 -3
  212. package/dist/VersionHistory/components/labels-resource.component.js.map +1 -1
  213. package/dist/VersionHistory/components/restore-resource.component.js +3 -3
  214. package/dist/VersionHistory/components/restore-resource.component.js.map +1 -1
  215. package/dist/__tests__/integration-data-service.test.js +1 -0
  216. package/dist/__tests__/integration-data-service.test.js.map +1 -1
  217. package/dist/module.d.ts +52 -49
  218. package/dist/module.d.ts.map +1 -1
  219. package/dist/module.js +25 -6
  220. package/dist/module.js.map +1 -1
  221. package/dist/public-api.d.ts +1 -1
  222. package/dist/public-api.d.ts.map +1 -1
  223. package/dist/public-api.js +1 -1
  224. package/dist/public-api.js.map +1 -1
  225. package/package.json +42 -40
  226. package/dist/Scheduling/components/job-slideout.component.d.ts +0 -45
  227. package/dist/Scheduling/components/job-slideout.component.d.ts.map +0 -1
  228. package/dist/Scheduling/components/job-slideout.component.js +0 -459
  229. package/dist/Scheduling/components/job-slideout.component.js.map +0 -1
@@ -938,7 +938,7 @@ let VersionHistoryLabelsResourceComponent = class VersionHistoryLabelsResourceCo
938
938
  return this.Labels.filter(l => UUIDsEqual(l.ParentID, parentId));
939
939
  }
940
940
  static ɵfac = function VersionHistoryLabelsResourceComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || VersionHistoryLabelsResourceComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.NavigationService)); };
941
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: VersionHistoryLabelsResourceComponent, selectors: [["mj-version-history-labels-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 4, consts: [[1, "labels-container"], ["text", "Loading version labels..."], [1, "create-wizard-overlay"], [3, "Label", "AllLabels", "ItemCountMap"], [1, "page-header"], [1, "header-left"], [1, "page-title"], [1, "page-subtitle"], [1, "header-actions"], [1, "view-toggle"], ["title", "Card view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-grip"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "btn-primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "kpi-row"], [1, "kpi-card"], [1, "kpi-icon", 2, "background", "rgba(99, 102, 241, 0.1)", "color", "#6366f1"], [1, "fa-solid", "fa-tags"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-icon", 2, "background", "rgba(16, 185, 129, 0.1)", "color", "#10b981"], [1, "fa-solid", "fa-circle-check"], [1, "kpi-icon", 2, "background", "rgba(107, 114, 128, 0.1)", "color", "#6b7280"], [1, "fa-solid", "fa-box-archive"], [1, "kpi-icon", 2, "background", "rgba(245, 158, 11, 0.1)", "color", "#f59e0b"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "scope-chips"], [1, "scope-chip", 3, "active"], [1, "scope-chip", 3, "active", "ngClass"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search labels by name, description, or entity...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "btn-clear"], [1, "labels-list"], [1, "labels-table"], [1, "empty-state"], [1, "scope-chip", 3, "click"], [1, "chip-count"], [1, "scope-chip", 3, "click", "ngClass"], [1, "btn-clear", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "label-card", "clickable", 3, "group-parent"], [1, "label-card", "clickable", 3, "click"], [1, "label-header"], [1, "label-title-row"], [1, "label-scope-icon"], [1, "label-name"], [1, "group-badge"], [1, "label-status", 3, "ngClass"], [1, "label-meta"], ["title", "Scope", 1, "meta-item"], [1, "fa-solid", "fa-layer-group"], ["title", "Entity", 1, "meta-item"], ["title", "Record ID", 1, "meta-item"], ["title", "Items captured", 1, "meta-item"], ["title", "Creation time", 1, "meta-item"], ["title", "Created by", 1, "meta-item"], ["title", "Created", 1, "meta-item"], [1, "fa-regular", "fa-clock"], [1, "label-description"], [1, "child-labels"], [1, "fa-solid", "fa-table"], [1, "fa-solid", "fa-fingerprint"], [1, "fa-solid", "fa-camera"], [1, "fa-solid", "fa-stopwatch"], [1, "fa-solid", "fa-user"], [1, "child-label"], [1, "fa-solid", "fa-tag", "child-icon"], [1, "child-name"], [1, "child-record"], [1, "child-items"], [1, "list-header-row"], [1, "list-col-icon"], [1, "list-col-name", "sortable-header", 3, "click"], [1, "sort-icon"], [1, "list-col-entity"], [1, "list-col-status", "sortable-header", 3, "click"], [1, "list-col-items", "sortable-header", 3, "click"], [1, "list-col-date", "sortable-header", 3, "click"], [1, "list-col-arrow"], [1, "list-row", "clickable"], [1, "list-row", "clickable", 3, "click"], [1, "list-scope-icon"], [1, "list-col-name"], [1, "list-label-name"], [1, "list-group-badge"], [1, "list-col-status"], [1, "label-status", "small", 3, "ngClass"], [1, "list-col-items"], [1, "list-col-date"], [1, "fa-solid", "fa-chevron-right", "list-arrow"], [1, "fa-solid", "fa-tags", "empty-icon"], [1, "btn-primary", "empty-cta"], [1, "btn-primary", "empty-cta", 3, "click"], [1, "create-wizard-overlay", 3, "click"], [1, "create-wizard-container", 3, "click"], [1, "create-wizard-header"], [1, "create-wizard-title"], [1, "fa-solid", "fa-tag"], ["title", "Close", 1, "create-wizard-close", 3, "click"], [1, "create-wizard-body"], [3, "Created", "Cancel"], [3, "Close", "LabelUpdated", "EntityLinkClick", "Label", "AllLabels", "ItemCountMap"]], template: function VersionHistoryLabelsResourceComponent_Template(rf, ctx) { if (rf & 1) {
941
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: VersionHistoryLabelsResourceComponent, selectors: [["mj-version-history-labels-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 5, vars: 4, consts: [[1, "labels-container"], ["text", "Loading version labels..."], [1, "create-wizard-overlay"], [3, "Label", "AllLabels", "ItemCountMap"], [1, "page-header"], [1, "header-left"], [1, "page-title"], [1, "page-subtitle"], [1, "header-actions"], [1, "view-toggle"], ["title", "Card view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-grip"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "btn-primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["title", "Refresh", 1, "btn-icon", 3, "click"], [1, "fa-solid", "fa-refresh"], [1, "kpi-row"], [1, "kpi-card"], [1, "kpi-icon", 2, "background", "color-mix(in srgb, var(--mj-brand-primary) 10%, transparent)", "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-tags"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-icon", 2, "background", "color-mix(in srgb, var(--mj-status-success) 10%, transparent)", "color", "var(--mj-status-success)"], [1, "fa-solid", "fa-circle-check"], [1, "kpi-icon", 2, "background", "color-mix(in srgb, var(--mj-text-muted) 10%, transparent)", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-box-archive"], [1, "kpi-icon", 2, "background", "color-mix(in srgb, var(--mj-status-warning) 10%, transparent)", "color", "var(--mj-status-warning)"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "scope-chips"], [1, "scope-chip", 3, "active"], [1, "scope-chip", 3, "active", "ngClass"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search labels by name, description, or entity...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "btn-clear"], [1, "labels-list"], [1, "labels-table"], [1, "empty-state"], [1, "scope-chip", 3, "click"], [1, "chip-count"], [1, "scope-chip", 3, "click", "ngClass"], [1, "btn-clear", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "label-card", "clickable", 3, "group-parent"], [1, "label-card", "clickable", 3, "click"], [1, "label-header"], [1, "label-title-row"], [1, "label-scope-icon"], [1, "label-name"], [1, "group-badge"], [1, "label-status", 3, "ngClass"], [1, "label-meta"], ["title", "Scope", 1, "meta-item"], [1, "fa-solid", "fa-layer-group"], ["title", "Entity", 1, "meta-item"], ["title", "Record ID", 1, "meta-item"], ["title", "Items captured", 1, "meta-item"], ["title", "Creation time", 1, "meta-item"], ["title", "Created by", 1, "meta-item"], ["title", "Created", 1, "meta-item"], [1, "fa-regular", "fa-clock"], [1, "label-description"], [1, "child-labels"], [1, "fa-solid", "fa-table"], [1, "fa-solid", "fa-fingerprint"], [1, "fa-solid", "fa-camera"], [1, "fa-solid", "fa-stopwatch"], [1, "fa-solid", "fa-user"], [1, "child-label"], [1, "fa-solid", "fa-tag", "child-icon"], [1, "child-name"], [1, "child-record"], [1, "child-items"], [1, "list-header-row"], [1, "list-col-icon"], [1, "list-col-name", "sortable-header", 3, "click"], [1, "sort-icon"], [1, "list-col-entity"], [1, "list-col-status", "sortable-header", 3, "click"], [1, "list-col-items", "sortable-header", 3, "click"], [1, "list-col-date", "sortable-header", 3, "click"], [1, "list-col-arrow"], [1, "list-row", "clickable"], [1, "list-row", "clickable", 3, "click"], [1, "list-scope-icon"], [1, "list-col-name"], [1, "list-label-name"], [1, "list-group-badge"], [1, "list-col-status"], [1, "label-status", "small", 3, "ngClass"], [1, "list-col-items"], [1, "list-col-date"], [1, "fa-solid", "fa-chevron-right", "list-arrow"], [1, "fa-solid", "fa-tags", "empty-icon"], [1, "btn-primary", "empty-cta"], [1, "btn-primary", "empty-cta", 3, "click"], [1, "create-wizard-overlay", 3, "click"], [1, "create-wizard-container", 3, "click"], [1, "create-wizard-header"], [1, "create-wizard-title"], [1, "fa-solid", "fa-tag"], ["title", "Close", 1, "create-wizard-close", 3, "click"], [1, "create-wizard-body"], [3, "Created", "Cancel"], [3, "Close", "LabelUpdated", "EntityLinkClick", "Label", "AllLabels", "ItemCountMap"]], template: function VersionHistoryLabelsResourceComponent_Template(rf, ctx) { if (rf & 1) {
942
942
  i0.ɵɵelementStart(0, "div", 0);
943
943
  i0.ɵɵconditionalCreate(1, VersionHistoryLabelsResourceComponent_Conditional_1_Template, 1, 0, "mj-loading", 1);
944
944
  i0.ɵɵconditionalCreate(2, VersionHistoryLabelsResourceComponent_Conditional_2_Template, 63, 13);
@@ -954,7 +954,7 @@ let VersionHistoryLabelsResourceComponent = class VersionHistoryLabelsResourceCo
954
954
  i0.ɵɵconditional(ctx.ShowCreateWizard ? 3 : -1);
955
955
  i0.ɵɵadvance();
956
956
  i0.ɵɵconditional(ctx.ShowDetailPanel && ctx.SelectedLabel ? 4 : -1);
957
- } }, dependencies: [i2.NgClass, i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i4.LoadingComponent, i5.MjLabelCreateComponent, i5.MjLabelDetailComponent, i2.SlicePipe], styles: [".labels-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] { flex: 1; }\n\n.page-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.page-subtitle[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n align-items: center;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--text-secondary, #6b7280);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #6366f1;\n color: #ffffff;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n background: #4f46e5;\n}\n\n.btn-primary[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--card-background, #ffffff);\n color: var(--text-secondary, #6b7280);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 12px;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n line-height: 1;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n margin-top: 4px;\n}\n\n\n\n.scope-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.scope-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 20px;\n cursor: pointer;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n transition: all 0.2s ease;\n}\n\n.scope-chip[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n border-color: var(--border-hover, #d1d5db);\n}\n\n.scope-chip.active[_ngcontent-%COMP%] {\n background: #6366f1;\n border-color: #6366f1;\n color: #ffffff;\n}\n\n.scope-chip.active[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%] {\n background: rgba(255, 255, 255, 0.2);\n color: #ffffff;\n}\n\n.chip-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: var(--hover-background, #f3f4f6);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n\n\n.search-bar[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--text-secondary, #6b7280);\n font-size: 14px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 40px 10px 40px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n.btn-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n border-radius: 4px;\n}\n\n.btn-clear[_ngcontent-%COMP%]:hover {\n color: var(--text-primary, #1f2937);\n background: var(--hover-background, #f3f4f6);\n}\n\n\n\n.labels-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.label-card[_ngcontent-%COMP%] {\n padding: 20px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n transition: all 0.2s ease;\n}\n\n.label-card[_ngcontent-%COMP%]:hover {\n border-color: var(--border-hover, #d1d5db);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n\n.label-card.group-parent[_ngcontent-%COMP%] {\n border-left: 3px solid #6366f1;\n}\n\n.label-header[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.label-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.label-scope-icon[_ngcontent-%COMP%] {\n color: #6366f1;\n font-size: 16px;\n}\n\n.label-name[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0;\n flex: 1;\n}\n\n.group-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.label-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.1);\n color: #059669;\n}\n\n.status-archived[_ngcontent-%COMP%] {\n background: rgba(107, 114, 128, 0.1);\n color: #6b7280;\n}\n\n.status-restored[_ngcontent-%COMP%] {\n background: rgba(245, 158, 11, 0.1);\n color: #d97706;\n}\n\n.label-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n opacity: 0.7;\n}\n\n.label-description[_ngcontent-%COMP%] {\n margin: 10px 0 0 0;\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n line-height: 1.5;\n}\n\n\n\n.child-labels[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color, #e5e7eb);\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.child-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.child-label[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n}\n\n.child-icon[_ngcontent-%COMP%] {\n color: var(--text-tertiary, #9ca3af);\n font-size: 11px;\n}\n\n.child-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--text-primary, #1f2937);\n}\n\n.child-record[_ngcontent-%COMP%] {\n color: var(--text-tertiary, #9ca3af);\n font-size: 12px;\n font-family: monospace;\n}\n\n.child-items[_ngcontent-%COMP%] {\n color: var(--text-secondary, #6b7280);\n font-size: 12px;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--text-tertiary, #9ca3af);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n max-width: 400px;\n}\n\n.empty-cta[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n\n\n\n\n\n\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0;\n margin-bottom: 24px;\n padding: 0 20px;\n}\n\n.step[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.step-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n font-size: 13px;\n font-weight: 700;\n background: var(--hover-background, #f3f4f6);\n color: var(--text-tertiary, #9ca3af);\n transition: all 0.2s ease;\n}\n\n.step.active[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: #6366f1;\n color: #ffffff;\n}\n\n.step.completed[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: #10b981;\n color: #ffffff;\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-tertiary, #9ca3af);\n}\n\n.step.active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--text-primary, #1f2937);\n font-weight: 600;\n}\n\n.step.completed[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: #10b981;\n}\n\n.step-connector[_ngcontent-%COMP%] {\n width: 40px;\n height: 2px;\n background: var(--border-color, #e5e7eb);\n margin: 0 8px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active[_ngcontent-%COMP%] {\n background: #10b981;\n}\n\n\n\n.dialog-step[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n min-height: 300px;\n}\n\n.step-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.step-header-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.btn-back[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.btn-back[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n\n\n.dialog-search[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.dialog-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n}\n\n.dialog-search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 9px 12px 9px 36px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.15s ease;\n}\n\n.dialog-search-input[_ngcontent-%COMP%]:focus {\n border-color: #6366f1;\n}\n\n.dialog-search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n\n\n.entity-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n max-height: 320px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n}\n\n.entity-option[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.entity-option[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.entity-option[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n}\n\n.entity-option-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.entity-option-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary, #1f2937);\n}\n\n.entity-option-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.entity-option-arrow[_ngcontent-%COMP%] {\n color: var(--text-tertiary, #9ca3af);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.entity-list-empty[_ngcontent-%COMP%] {\n padding: 40px 20px;\n text-align: center;\n color: var(--text-tertiary, #9ca3af);\n font-size: 14px;\n}\n\n\n\n.records-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.selection-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.btn-text[_ngcontent-%COMP%] {\n padding: 6px 12px;\n background: none;\n border: none;\n font-size: 13px;\n font-weight: 500;\n color: #6366f1;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n}\n\n.btn-text[_ngcontent-%COMP%]:hover {\n background: rgba(99, 102, 241, 0.1);\n}\n\n.record-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n max-height: 280px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n}\n\n.record-option[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.record-option[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.record-option[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n}\n\n.record-option.selected[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.05);\n}\n\n.record-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 2px solid var(--border-color, #d1d5db);\n border-radius: 4px;\n font-size: 11px;\n color: transparent;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.record-option.selected[_ngcontent-%COMP%] .record-checkbox[_ngcontent-%COMP%] {\n background: #6366f1;\n border-color: #6366f1;\n color: #ffffff;\n}\n\n.record-name[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.records-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-top: 8px;\n}\n\n.selection-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-secondary, #6b7280);\n}\n\n\n\n.details-summary[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px 16px;\n background: var(--hover-background, #f3f4f6);\n border-radius: 10px;\n}\n\n.summary-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.summary-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n font-size: 13px;\n}\n\n.form-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.form-input[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.form-input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n resize: vertical;\n font-family: inherit;\n transition: border-color 0.15s ease;\n}\n\n.form-textarea[_ngcontent-%COMP%]:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.form-textarea[_ngcontent-%COMP%]::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n.details-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding-top: 8px;\n}\n\n\n\n.creating-step[_ngcontent-%COMP%] {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.creating-animation[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.creating-icon[_ngcontent-%COMP%] {\n font-size: 40px;\n color: #6366f1;\n}\n\n.creating-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.creating-progress[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n\n\n.progress-container[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 420px;\n margin: 16px auto 0;\n text-align: left;\n}\n\n.progress-bar-track[_ngcontent-%COMP%] {\n width: 100%;\n height: 8px;\n background: var(--hover-background, #e5e7eb);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.progress-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: linear-gradient(90deg, #6366f1, #818cf8);\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.progress-details[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 8px;\n}\n\n.progress-message[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n margin-right: 12px;\n}\n\n.progress-pct[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: #6366f1;\n white-space: nowrap;\n}\n\n.progress-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-top: 6px;\n}\n\n.progress-stat[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n}\n\n.progress-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n.done-step[_ngcontent-%COMP%] {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.done-icon-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n font-size: 24px;\n margin-bottom: 16px;\n}\n\n.done-icon-wrap.success[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.1);\n color: #10b981;\n}\n\n.done-icon-wrap.error[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.1);\n color: #ef4444;\n}\n\n.done-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.done-message[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0 0 20px 0;\n}\n\n.error-text[_ngcontent-%COMP%] {\n color: #ef4444;\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n background: transparent;\n border: none;\n cursor: pointer;\n color: var(--text-tertiary, #9ca3af);\n transition: all 0.15s ease;\n font-size: 14px;\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n color: var(--text-primary, #1f2937);\n background: var(--hover-background, #f3f4f6);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n color: #6366f1;\n background: rgba(99, 102, 241, 0.08);\n}\n\n.toggle-btn[_ngcontent-%COMP%] + .toggle-btn[_ngcontent-%COMP%] {\n border-left: 1px solid var(--border-color, #e5e7eb);\n}\n\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.label-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: #6366f1;\n box-shadow: 0 2px 12px rgba(99, 102, 241, 0.1);\n transform: translateY(-1px);\n}\n\n\n\n.labels-table[_ngcontent-%COMP%] {\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.list-header-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 10px 16px;\n background: var(--hover-background, #f9fafb);\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n font-size: 12px;\n font-weight: 600;\n color: var(--text-tertiary, #9ca3af);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n transition: all 0.15s ease;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: rgba(99, 102, 241, 0.04);\n}\n\n.list-scope-icon[_ngcontent-%COMP%] {\n color: #6366f1;\n font-size: 15px;\n}\n\n.list-col-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n\n.list-label-name[_ngcontent-%COMP%] {\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-group-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.list-col-entity[_ngcontent-%COMP%] {\n color: var(--text-secondary, #6b7280);\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-col-items[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.list-col-date[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.list-col-arrow[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.list-arrow[_ngcontent-%COMP%] {\n color: var(--text-tertiary, #d1d5db);\n font-size: 12px;\n transition: transform 0.15s ease, color 0.15s ease;\n}\n\n.list-row[_ngcontent-%COMP%]:hover .list-arrow[_ngcontent-%COMP%] {\n color: #6366f1;\n transform: translateX(2px);\n}\n\n.label-status.small[_ngcontent-%COMP%] {\n padding: 2px 8px;\n font-size: 11px;\n}\n\n\n\n.sortable-header[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: color 0.15s ease;\n}\n\n.sortable-header[_ngcontent-%COMP%]:hover {\n color: #6366f1;\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity 0.15s ease;\n}\n\n.sortable-header[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n@media (max-width: 768px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .list-header-row[_ngcontent-%COMP%], \n .list-row[_ngcontent-%COMP%] {\n grid-template-columns: 36px 1fr 80px 60px 32px;\n }\n\n .list-col-entity[_ngcontent-%COMP%], \n .list-col-date[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n\n\n\n\n\n\n.create-wizard-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease;\n}\n\n.create-wizard-container[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);\n width: 90%;\n max-width: 600px;\n max-height: 85vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.create-wizard-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n flex-shrink: 0;\n}\n\n.create-wizard-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0;\n}\n\n.create-wizard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #6366f1;\n font-size: 15px;\n}\n\n.create-wizard-close[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: none;\n border-radius: 8px;\n color: var(--text-tertiary, #9ca3af);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.create-wizard-close[_ngcontent-%COMP%]:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n.create-wizard-body[_ngcontent-%COMP%] {\n padding: 24px;\n overflow-y: auto;\n flex: 1;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}"], changeDetection: 0 });
957
+ } }, dependencies: [i2.NgClass, i3.DefaultValueAccessor, i3.NgControlStatus, i3.NgModel, i4.LoadingComponent, i5.MjLabelCreateComponent, i5.MjLabelDetailComponent, i2.SlicePipe], styles: [".labels-container[_ngcontent-%COMP%] {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n\n\n.page-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left[_ngcontent-%COMP%] { flex: 1; }\n\n.page-title[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 4px 0;\n}\n\n.page-subtitle[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n align-items: center;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-secondary);\n}\n\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.btn-primary[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n\n\n.kpi-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 12px;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n\n\n.scope-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.scope-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.scope-chip[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.scope-chip.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.scope-chip.active[_ngcontent-%COMP%] .chip-count[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n color: var(--mj-text-inverse);\n}\n\n.chip-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n\n\n.search-bar[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 40px 10px 40px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 10px;\n font-size: 14px;\n color: var(--mj-text-primary);\n outline: none;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n.btn-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 4px;\n}\n\n.btn-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n\n\n.labels-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.label-card[_ngcontent-%COMP%] {\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n transition: all 0.2s ease;\n}\n\n.label-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.label-card.group-parent[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.label-header[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.label-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.label-scope-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 16px;\n}\n\n.label-name[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n flex: 1;\n}\n\n.group-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.label-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n}\n\n.status-archived[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-text-muted) 10%, transparent);\n color: var(--mj-text-muted);\n}\n\n.status-restored[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n}\n\n.label-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n opacity: 0.7;\n}\n\n.label-description[_ngcontent-%COMP%] {\n margin: 10px 0 0 0;\n font-size: 14px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n\n\n.child-labels[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.child-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.child-label[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.child-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n}\n\n.child-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-primary);\n}\n\n.child-record[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.child-items[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 12px;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-text-muted);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n max-width: 400px;\n}\n\n.empty-cta[_ngcontent-%COMP%] {\n margin-top: 20px;\n}\n\n\n\n\n\n\n\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0;\n margin-bottom: 24px;\n padding: 0 20px;\n}\n\n.step[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.step-number[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n font-size: 13px;\n font-weight: 700;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n transition: all 0.2s ease;\n}\n\n.step.active[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.step.completed[_ngcontent-%COMP%] .step-number[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.step.active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.step.completed[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.step-connector[_ngcontent-%COMP%] {\n width: 40px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n\n\n.dialog-step[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n min-height: 300px;\n}\n\n.step-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.step-header-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.btn-back[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.btn-back[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n\n\n.dialog-search[_ngcontent-%COMP%] {\n position: relative;\n}\n\n.dialog-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n.dialog-search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 9px 12px 9px 36px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.15s ease;\n}\n\n.dialog-search-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.dialog-search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n\n\n.entity-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n max-height: 320px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n}\n\n.entity-option[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.entity-option[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.entity-option[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.entity-option-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.entity-option-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.entity-option-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.entity-option-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.entity-list-empty[_ngcontent-%COMP%] {\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n\n\n.records-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.selection-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.btn-text[_ngcontent-%COMP%] {\n padding: 6px 12px;\n background: none;\n border: none;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n}\n\n.btn-text[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.record-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n max-height: 280px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n}\n\n.record-option[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.record-option[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.record-option[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.record-option.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.record-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 11px;\n color: transparent;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.record-option.selected[_ngcontent-%COMP%] .record-checkbox[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.record-name[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.records-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-top: 8px;\n}\n\n.selection-count[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n\n\n.details-summary[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px 16px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n}\n\n.summary-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.summary-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n.form-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.form-input[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n resize: vertical;\n font-family: inherit;\n transition: border-color 0.15s ease;\n}\n\n.form-textarea[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-textarea[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n}\n\n.details-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding-top: 8px;\n}\n\n\n\n.creating-step[_ngcontent-%COMP%] {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.creating-animation[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.creating-icon[_ngcontent-%COMP%] {\n font-size: 40px;\n color: var(--mj-brand-primary);\n}\n\n.creating-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.creating-progress[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n\n\n.progress-container[_ngcontent-%COMP%] {\n width: 100%;\n max-width: 420px;\n margin: 16px auto 0;\n text-align: left;\n}\n\n.progress-bar-track[_ngcontent-%COMP%] {\n width: 100%;\n height: 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.progress-bar-fill[_ngcontent-%COMP%] {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.progress-details[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 8px;\n}\n\n.progress-message[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n margin-right: 12px;\n}\n\n.progress-pct[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n white-space: nowrap;\n}\n\n.progress-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n margin-top: 6px;\n}\n\n.progress-stat[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.progress-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n\n\n.done-step[_ngcontent-%COMP%] {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.done-icon-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n font-size: 24px;\n margin-bottom: 16px;\n}\n\n.done-icon-wrap.success[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n}\n\n.done-icon-wrap.error[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n color: var(--mj-status-error);\n}\n\n.done-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.done-message[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.error-text[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n background: transparent;\n border: none;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 0.15s ease;\n font-size: 14px;\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.toggle-btn[_ngcontent-%COMP%] + .toggle-btn[_ngcontent-%COMP%] {\n border-left: 1px solid var(--mj-border-default);\n}\n\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.label-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 12px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n transform: translateY(-1px);\n}\n\n\n\n.labels-table[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.list-header-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 10px 16px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 14px;\n color: var(--mj-text-primary);\n transition: all 0.15s ease;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.list-scope-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 15px;\n}\n\n.list-col-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n\n.list-label-name[_ngcontent-%COMP%] {\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-group-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.list-col-entity[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-col-items[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.list-col-date[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.list-col-arrow[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.list-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 12px;\n transition: transform 0.15s ease, color 0.15s ease;\n}\n\n.list-row[_ngcontent-%COMP%]:hover .list-arrow[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n transform: translateX(2px);\n}\n\n.label-status.small[_ngcontent-%COMP%] {\n padding: 2px 8px;\n font-size: 11px;\n}\n\n\n\n.sortable-header[_ngcontent-%COMP%] {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: color 0.15s ease;\n}\n\n.sortable-header[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity 0.15s ease;\n}\n\n.sortable-header[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n\n\n@media (max-width: 768px) {\n .kpi-row[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .list-header-row[_ngcontent-%COMP%], \n .list-row[_ngcontent-%COMP%] {\n grid-template-columns: 36px 1fr 80px 60px 32px;\n }\n\n .list-col-entity[_ngcontent-%COMP%], \n .list-col-date[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n\n\n\n\n\n\n\n.create-wizard-overlay[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease;\n}\n\n.create-wizard-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-lg);\n width: 90%;\n max-width: 600px;\n max-height: 85vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.create-wizard-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.create-wizard-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n.create-wizard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 15px;\n}\n\n.create-wizard-close[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: none;\n border-radius: 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.create-wizard-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.create-wizard-body[_ngcontent-%COMP%] {\n padding: 24px;\n overflow-y: auto;\n flex: 1;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}"], changeDetection: 0 });
958
958
  };
959
959
  VersionHistoryLabelsResourceComponent = VersionHistoryLabelsResourceComponent_1 = __decorate([
960
960
  RegisterClass(BaseResourceComponent, 'VersionHistoryLabelsResource')
@@ -962,7 +962,7 @@ VersionHistoryLabelsResourceComponent = VersionHistoryLabelsResourceComponent_1
962
962
  export { VersionHistoryLabelsResourceComponent };
963
963
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(VersionHistoryLabelsResourceComponent, [{
964
964
  type: Component,
965
- args: [{ standalone: false, selector: 'mj-version-history-labels-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"labels-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading version labels...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Version Labels</h2>\n <p class=\"page-subtitle\">Manage versioning snapshots across your system</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'card'\" (click)=\"SetViewMode('card')\" title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'list'\" (click)=\"SetViewMode('list')\" title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-primary\" (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Label</span>\n </button>\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(99, 102, 241, 0.1); color: #6366f1;\">\n <i class=\"fa-solid fa-tags\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(TotalLabels)}}</div>\n <div class=\"kpi-label\">Total Labels</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(16, 185, 129, 0.1); color: #10b981;\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ActiveLabels)}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(107, 114, 128, 0.1); color: #6b7280;\">\n <i class=\"fa-solid fa-box-archive\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ArchivedLabels)}}</div>\n <div class=\"kpi-label\">Archived</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: rgba(245, 158, 11, 0.1); color: #f59e0b;\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(RestoredLabels)}}</div>\n <div class=\"kpi-label\">Restored</div>\n </div>\n </div>\n </div>\n <!-- Scope breakdown -->\n <div class=\"scope-chips\">\n @for (stat of ScopeStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"ScopeFilter === stat.Scope\"\n (click)=\"OnScopeFilterChange(stat.Scope)\">\n <i [class]=\"stat.Icon\"></i>\n <span>{{stat.Scope}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n @for (stat of StatusStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"StatusFilter === stat.Status\"\n [ngClass]=\"GetStatusClass(stat.Status)\"\n (click)=\"OnStatusFilterChange(stat.Status)\">\n <span>{{stat.Status}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n </div>\n <!-- Search -->\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search labels by name, description, or entity...\"\n [ngModel]=\"SearchText\"\n (ngModelChange)=\"OnSearchChange($event)\" />\n @if (SearchText) {\n <button class=\"btn-clear\" (click)=\"OnSearchChange('')\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n <!-- Labels Card View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'card') {\n <div class=\"labels-list\">\n @for (label of FilteredLabels; track label) {\n <div class=\"label-card clickable\"\n [class.group-parent]=\"IsGroupParent(label)\"\n (click)=\"OnLabelClick(label)\">\n <div class=\"label-header\">\n <div class=\"label-title-row\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"label-scope-icon\"></i>\n <h3 class=\"label-name\">{{label.Name}}</h3>\n @if (IsGroupParent(label)) {\n <span class=\"group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{GetChildLabels(label.ID).length}} records\n </span>\n }\n <span class=\"label-status\" [ngClass]=\"GetStatusClass(label.Status)\">\n {{label.Status}}\n </span>\n </div>\n <div class=\"label-meta\">\n <span class=\"meta-item\" title=\"Scope\">\n <i class=\"fa-solid fa-layer-group\"></i> {{label.Scope}}\n </span>\n @if (label.Entity || label.EntityID) {\n <span class=\"meta-item\" title=\"Entity\">\n <i class=\"fa-solid fa-table\"></i> {{label.Entity ?? ResolveEntityName(label.EntityID)}}\n </span>\n }\n @if (label.RecordID) {\n <span class=\"meta-item\" title=\"Record ID\">\n <i class=\"fa-solid fa-fingerprint\"></i> {{label.RecordID | slice:0:12}}...\n </span>\n }\n @if (label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{label.ItemCount}} items\n </span>\n }\n @if (!label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{GetItemCount(label.ID)}} items\n </span>\n }\n @if (label.CreationDurationMS) {\n <span class=\"meta-item\" title=\"Creation time\">\n <i class=\"fa-solid fa-stopwatch\"></i> {{FormatDuration(label.CreationDurationMS)}}\n </span>\n }\n @if (label.CreatedByUser) {\n <span class=\"meta-item\" title=\"Created by\">\n <i class=\"fa-solid fa-user\"></i> {{label.CreatedByUser}}\n </span>\n }\n <span class=\"meta-item\" title=\"Created\">\n <i class=\"fa-regular fa-clock\"></i> {{FormatDate(label.__mj_CreatedAt)}}\n </span>\n </div>\n </div>\n @if (label.Description) {\n <p class=\"label-description\">{{label.Description}}</p>\n }\n <!-- Child labels for group parents -->\n @if (IsGroupParent(label) && GetChildLabels(label.ID).length > 0) {\n <div class=\"child-labels\">\n @for (child of GetChildLabels(label.ID); track child) {\n <div class=\"child-label\">\n <i class=\"fa-solid fa-tag child-icon\"></i>\n <span class=\"child-name\">{{child.Name}}</span>\n @if (child.RecordID) {\n <span class=\"child-record\">{{child.RecordID | slice:0:12}}...</span>\n }\n @if (child.ItemCount) {\n <span class=\"child-items\">{{child.ItemCount}} items</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Labels List View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'list') {\n <div class=\"labels-table\">\n <div class=\"list-header-row\">\n <span class=\"list-col-icon\"></span>\n <span class=\"list-col-name sortable-header\" (click)=\"OnSortChange('Name')\">\n Name <i [class]=\"GetSortIcon('Name')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-entity\">Entity</span>\n <span class=\"list-col-status sortable-header\" (click)=\"OnSortChange('Status')\">\n Status <i [class]=\"GetSortIcon('Status')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-items sortable-header\" (click)=\"OnSortChange('Items')\">\n Items <i [class]=\"GetSortIcon('Items')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-date sortable-header\" (click)=\"OnSortChange('Date')\">\n Created <i [class]=\"GetSortIcon('Date')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-arrow\"></span>\n </div>\n @for (label of FilteredLabels; track label) {\n <div class=\"list-row clickable\"\n (click)=\"OnLabelClick(label)\">\n <span class=\"list-col-icon\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"list-scope-icon\"></i>\n </span>\n <span class=\"list-col-name\">\n <span class=\"list-label-name\">{{label.Name}}</span>\n @if (IsGroupParent(label)) {\n <span class=\"list-group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i> {{GetChildLabels(label.ID).length}}\n </span>\n }\n </span>\n <span class=\"list-col-entity\">{{label.Entity ?? ResolveEntityName(label.EntityID)}}</span>\n <span class=\"list-col-status\">\n <span class=\"label-status small\" [ngClass]=\"GetStatusClass(label.Status)\">{{label.Status}}</span>\n </span>\n <span class=\"list-col-items\">{{label.ItemCount || GetItemCount(label.ID)}}</span>\n <span class=\"list-col-date\">{{FormatDate(label.__mj_CreatedAt)}}</span>\n <span class=\"list-col-arrow\">\n <i class=\"fa-solid fa-chevron-right list-arrow\"></i>\n </span>\n </div>\n }\n </div>\n }\n <!-- Empty state -->\n @if (FilteredLabels.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags empty-icon\"></i>\n <h3>No labels found</h3>\n @if (SearchText || ScopeFilter || StatusFilter) {\n <p>\n Try adjusting your filters or search criteria.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <p>\n No version labels have been created yet.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <button class=\"btn-primary empty-cta\"\n (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Your First Label</span>\n </button>\n }\n </div>\n }\n }\n\n <!-- Create Label Wizard -->\n @if (ShowCreateWizard) {\n <div class=\"create-wizard-overlay\" (click)=\"OnCreateWizardCancel()\">\n <div class=\"create-wizard-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"create-wizard-header\">\n <h3 class=\"create-wizard-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Create Version Label\n </h3>\n <button class=\"create-wizard-close\" (click)=\"OnCreateWizardCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"create-wizard-body\">\n <mj-label-create\n (Created)=\"OnLabelCreated($event)\"\n (Cancel)=\"OnCreateWizardCancel()\">\n </mj-label-create>\n </div>\n </div>\n </div>\n }\n\n <!-- Detail panel -->\n @if (ShowDetailPanel && SelectedLabel) {\n <mj-label-detail-panel\n [Label]=\"SelectedLabel\"\n [AllLabels]=\"Labels\"\n [ItemCountMap]=\"ItemCountMap\"\n (Close)=\"OnDetailPanelClose()\"\n (LabelUpdated)=\"OnLabelUpdated()\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\">\n </mj-label-detail-panel>\n }\n</div>\n", styles: [".labels-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n/* Header */\n.page-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left { flex: 1; }\n\n.page-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n margin: 0 0 4px 0;\n}\n\n.page-subtitle {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n align-items: center;\n}\n\n.btn-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--text-secondary, #6b7280);\n}\n\n.btn-icon:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n.btn-primary {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: #6366f1;\n color: #ffffff;\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary:hover {\n background: #4f46e5;\n}\n\n.btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--card-background, #ffffff);\n color: var(--text-secondary, #6b7280);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n/* KPI Row */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n}\n\n.kpi-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 12px;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.kpi-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--text-primary, #1f2937);\n line-height: 1;\n}\n\n.kpi-label {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n margin-top: 4px;\n}\n\n/* Scope Chips */\n.scope-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.scope-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 20px;\n cursor: pointer;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n transition: all 0.2s ease;\n}\n\n.scope-chip:hover {\n background: var(--hover-background, #f3f4f6);\n border-color: var(--border-hover, #d1d5db);\n}\n\n.scope-chip.active {\n background: #6366f1;\n border-color: #6366f1;\n color: #ffffff;\n}\n\n.scope-chip.active .chip-count {\n background: rgba(255, 255, 255, 0.2);\n color: #ffffff;\n}\n\n.chip-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: var(--hover-background, #f3f4f6);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n/* Search Bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--text-secondary, #6b7280);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 40px 10px 40px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.search-input::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n.btn-clear {\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n border-radius: 4px;\n}\n\n.btn-clear:hover {\n color: var(--text-primary, #1f2937);\n background: var(--hover-background, #f3f4f6);\n}\n\n/* Labels List */\n.labels-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.label-card {\n padding: 20px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n transition: all 0.2s ease;\n}\n\n.label-card:hover {\n border-color: var(--border-hover, #d1d5db);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n\n.label-card.group-parent {\n border-left: 3px solid #6366f1;\n}\n\n.label-header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.label-title-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.label-scope-icon {\n color: #6366f1;\n font-size: 16px;\n}\n\n.label-name {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0;\n flex: 1;\n}\n\n.group-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.label-status {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active {\n background: rgba(16, 185, 129, 0.1);\n color: #059669;\n}\n\n.status-archived {\n background: rgba(107, 114, 128, 0.1);\n color: #6b7280;\n}\n\n.status-restored {\n background: rgba(245, 158, 11, 0.1);\n color: #d97706;\n}\n\n.label-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 4px;\n}\n\n.meta-item {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.meta-item i {\n font-size: 12px;\n opacity: 0.7;\n}\n\n.label-description {\n margin: 10px 0 0 0;\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n line-height: 1.5;\n}\n\n/* Child labels */\n.child-labels {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color, #e5e7eb);\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.child-label {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.child-label:hover {\n background: var(--hover-background, #f3f4f6);\n}\n\n.child-icon {\n color: var(--text-tertiary, #9ca3af);\n font-size: 11px;\n}\n\n.child-name {\n flex: 1;\n color: var(--text-primary, #1f2937);\n}\n\n.child-record {\n color: var(--text-tertiary, #9ca3af);\n font-size: 12px;\n font-family: monospace;\n}\n\n.child-items {\n color: var(--text-secondary, #6b7280);\n font-size: 12px;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--text-tertiary, #9ca3af);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n max-width: 400px;\n}\n\n.empty-cta {\n margin-top: 20px;\n}\n\n/* ==================================================================== */\n/* Create Label Dialog */\n/* ==================================================================== */\n\n/* Step Indicator */\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0;\n margin-bottom: 24px;\n padding: 0 20px;\n}\n\n.step {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.step-number {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n font-size: 13px;\n font-weight: 700;\n background: var(--hover-background, #f3f4f6);\n color: var(--text-tertiary, #9ca3af);\n transition: all 0.2s ease;\n}\n\n.step.active .step-number {\n background: #6366f1;\n color: #ffffff;\n}\n\n.step.completed .step-number {\n background: #10b981;\n color: #ffffff;\n}\n\n.step-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-tertiary, #9ca3af);\n}\n\n.step.active .step-label {\n color: var(--text-primary, #1f2937);\n font-weight: 600;\n}\n\n.step.completed .step-label {\n color: #10b981;\n}\n\n.step-connector {\n width: 40px;\n height: 2px;\n background: var(--border-color, #e5e7eb);\n margin: 0 8px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active {\n background: #10b981;\n}\n\n/* Dialog Step Content */\n.dialog-step {\n display: flex;\n flex-direction: column;\n gap: 16px;\n min-height: 300px;\n}\n\n.step-description {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n.step-header-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.btn-back {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n color: var(--text-secondary, #6b7280);\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.btn-back:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n/* Dialog Search */\n.dialog-search {\n position: relative;\n}\n\n.dialog-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--text-tertiary, #9ca3af);\n font-size: 13px;\n}\n\n.dialog-search-input {\n width: 100%;\n padding: 9px 12px 9px 36px;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.15s ease;\n}\n\n.dialog-search-input:focus {\n border-color: #6366f1;\n}\n\n.dialog-search-input::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n/* Entity List */\n.entity-list {\n flex: 1;\n overflow-y: auto;\n max-height: 320px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n}\n\n.entity-option {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.entity-option:last-child {\n border-bottom: none;\n}\n\n.entity-option:hover {\n background: var(--hover-background, #f3f4f6);\n}\n\n.entity-option-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.entity-option-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary, #1f2937);\n}\n\n.entity-option-desc {\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.entity-option-arrow {\n color: var(--text-tertiary, #9ca3af);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.entity-list-empty {\n padding: 40px 20px;\n text-align: center;\n color: var(--text-tertiary, #9ca3af);\n font-size: 14px;\n}\n\n/* Records */\n.records-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.selection-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.btn-text {\n padding: 6px 12px;\n background: none;\n border: none;\n font-size: 13px;\n font-weight: 500;\n color: #6366f1;\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n}\n\n.btn-text:hover {\n background: rgba(99, 102, 241, 0.1);\n}\n\n.record-list {\n flex: 1;\n overflow-y: auto;\n max-height: 280px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 10px;\n}\n\n.record-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n}\n\n.record-option:last-child {\n border-bottom: none;\n}\n\n.record-option:hover {\n background: var(--hover-background, #f3f4f6);\n}\n\n.record-option.selected {\n background: rgba(99, 102, 241, 0.05);\n}\n\n.record-checkbox {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 2px solid var(--border-color, #d1d5db);\n border-radius: 4px;\n font-size: 11px;\n color: transparent;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.record-option.selected .record-checkbox {\n background: #6366f1;\n border-color: #6366f1;\n color: #ffffff;\n}\n\n.record-name {\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.records-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-top: 8px;\n}\n\n.selection-count {\n font-size: 13px;\n font-weight: 500;\n color: var(--text-secondary, #6b7280);\n}\n\n/* Details step */\n.details-summary {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px 16px;\n background: var(--hover-background, #f3f4f6);\n border-radius: 10px;\n}\n\n.summary-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.summary-item i {\n color: #6366f1;\n font-size: 13px;\n}\n\n.form-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.form-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n}\n\n.form-input {\n padding: 10px 14px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.form-input:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.form-input::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n.form-textarea {\n padding: 10px 14px;\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n outline: none;\n resize: vertical;\n font-family: inherit;\n transition: border-color 0.15s ease;\n}\n\n.form-textarea:focus {\n border-color: #6366f1;\n box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);\n}\n\n.form-textarea::placeholder {\n color: var(--text-tertiary, #9ca3af);\n}\n\n.details-footer {\n display: flex;\n gap: 12px;\n padding-top: 8px;\n}\n\n/* Creating state */\n.creating-step {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.creating-animation {\n margin-bottom: 16px;\n}\n\n.creating-icon {\n font-size: 40px;\n color: #6366f1;\n}\n\n.creating-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.creating-progress {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0;\n}\n\n/* Progress bar */\n.progress-container {\n width: 100%;\n max-width: 420px;\n margin: 16px auto 0;\n text-align: left;\n}\n\n.progress-bar-track {\n width: 100%;\n height: 8px;\n background: var(--hover-background, #e5e7eb);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.progress-bar-fill {\n height: 100%;\n background: linear-gradient(90deg, #6366f1, #818cf8);\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.progress-details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 8px;\n}\n\n.progress-message {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n margin-right: 12px;\n}\n\n.progress-pct {\n font-size: 13px;\n font-weight: 600;\n color: #6366f1;\n white-space: nowrap;\n}\n\n.progress-stats {\n display: flex;\n gap: 16px;\n margin-top: 6px;\n}\n\n.progress-stat {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-tertiary, #9ca3af);\n}\n\n.progress-stat i {\n font-size: 11px;\n}\n\n/* Done state */\n.done-step {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.done-icon-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n font-size: 24px;\n margin-bottom: 16px;\n}\n\n.done-icon-wrap.success {\n background: rgba(16, 185, 129, 0.1);\n color: #10b981;\n}\n\n.done-icon-wrap.error {\n background: rgba(239, 68, 68, 0.1);\n color: #ef4444;\n}\n\n.done-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0 0 8px 0;\n}\n\n.done-message {\n font-size: 14px;\n color: var(--text-secondary, #6b7280);\n margin: 0 0 20px 0;\n}\n\n.error-text {\n color: #ef4444;\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.toggle-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n background: transparent;\n border: none;\n cursor: pointer;\n color: var(--text-tertiary, #9ca3af);\n transition: all 0.15s ease;\n font-size: 14px;\n}\n\n.toggle-btn:hover {\n color: var(--text-primary, #1f2937);\n background: var(--hover-background, #f3f4f6);\n}\n\n.toggle-btn.active {\n color: #6366f1;\n background: rgba(99, 102, 241, 0.08);\n}\n\n.toggle-btn + .toggle-btn {\n border-left: 1px solid var(--border-color, #e5e7eb);\n}\n\n/* Clickable cards/rows */\n.clickable {\n cursor: pointer;\n}\n\n.label-card.clickable:hover {\n border-color: #6366f1;\n box-shadow: 0 2px 12px rgba(99, 102, 241, 0.1);\n transform: translateY(-1px);\n}\n\n/* Labels Table (List View) */\n.labels-table {\n background: var(--card-background, #ffffff);\n border: 1px solid var(--border-color, #e5e7eb);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.list-header-row {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 10px 16px;\n background: var(--hover-background, #f9fafb);\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n font-size: 12px;\n font-weight: 600;\n color: var(--text-tertiary, #9ca3af);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--border-color, #f3f4f6);\n font-size: 14px;\n color: var(--text-primary, #1f2937);\n transition: all 0.15s ease;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n.list-row:hover {\n background: rgba(99, 102, 241, 0.04);\n}\n\n.list-scope-icon {\n color: #6366f1;\n font-size: 15px;\n}\n\n.list-col-name {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n\n.list-label-name {\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-group-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.list-col-entity {\n color: var(--text-secondary, #6b7280);\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-col-items {\n text-align: center;\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.list-col-date {\n font-size: 13px;\n color: var(--text-secondary, #6b7280);\n}\n\n.list-col-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.list-arrow {\n color: var(--text-tertiary, #d1d5db);\n font-size: 12px;\n transition: transform 0.15s ease, color 0.15s ease;\n}\n\n.list-row:hover .list-arrow {\n color: #6366f1;\n transform: translateX(2px);\n}\n\n.label-status.small {\n padding: 2px 8px;\n font-size: 11px;\n}\n\n/* Sortable headers */\n.sortable-header {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: color 0.15s ease;\n}\n\n.sortable-header:hover {\n color: #6366f1;\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity 0.15s ease;\n}\n\n.sortable-header:hover .sort-icon {\n opacity: 0.8;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .list-header-row,\n .list-row {\n grid-template-columns: 36px 1fr 80px 60px 32px;\n }\n\n .list-col-entity,\n .list-col-date {\n display: none;\n }\n}\n\n/* ================================================================= */\n/* CREATE WIZARD OVERLAY */\n/* ================================================================= */\n\n.create-wizard-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: fadeIn 0.15s ease;\n}\n\n.create-wizard-container {\n background: white;\n border-radius: 12px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);\n width: 90%;\n max-width: 600px;\n max-height: 85vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.create-wizard-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-bottom: 1px solid var(--border-color, #e5e7eb);\n flex-shrink: 0;\n}\n\n.create-wizard-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary, #1f2937);\n margin: 0;\n}\n\n.create-wizard-title i {\n color: #6366f1;\n font-size: 15px;\n}\n\n.create-wizard-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: none;\n border-radius: 8px;\n color: var(--text-tertiary, #9ca3af);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.create-wizard-close:hover {\n background: var(--hover-background, #f3f4f6);\n color: var(--text-primary, #1f2937);\n}\n\n.create-wizard-body {\n padding: 24px;\n overflow-y: auto;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n"] }]
965
+ args: [{ standalone: false, selector: 'mj-version-history-labels-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"labels-container\">\n @if (IsLoading) {\n <mj-loading text=\"Loading version labels...\"></mj-loading>\n }\n\n @if (!IsLoading) {\n <!-- Header -->\n <div class=\"page-header\">\n <div class=\"header-left\">\n <h2 class=\"page-title\">Version Labels</h2>\n <p class=\"page-subtitle\">Manage versioning snapshots across your system</p>\n </div>\n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'card'\" (click)=\"SetViewMode('card')\" title=\"Card view\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button class=\"toggle-btn\" [class.active]=\"ViewMode === 'list'\" (click)=\"SetViewMode('list')\" title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <button class=\"btn-primary\" (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Label</span>\n </button>\n <button class=\"btn-icon\" (click)=\"Refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-refresh\"></i>\n </button>\n </div>\n </div>\n <!-- KPI Cards -->\n <div class=\"kpi-row\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent); color: var(--mj-brand-primary);\">\n <i class=\"fa-solid fa-tags\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(TotalLabels)}}</div>\n <div class=\"kpi-label\">Total Labels</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-success) 10%, transparent); color: var(--mj-status-success);\">\n <i class=\"fa-solid fa-circle-check\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ActiveLabels)}}</div>\n <div class=\"kpi-label\">Active</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-text-muted) 10%, transparent); color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-box-archive\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(ArchivedLabels)}}</div>\n <div class=\"kpi-label\">Archived</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\" style=\"background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent); color: var(--mj-status-warning);\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n </div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{FormatNumber(RestoredLabels)}}</div>\n <div class=\"kpi-label\">Restored</div>\n </div>\n </div>\n </div>\n <!-- Scope breakdown -->\n <div class=\"scope-chips\">\n @for (stat of ScopeStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"ScopeFilter === stat.Scope\"\n (click)=\"OnScopeFilterChange(stat.Scope)\">\n <i [class]=\"stat.Icon\"></i>\n <span>{{stat.Scope}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n @for (stat of StatusStats; track stat) {\n <button class=\"scope-chip\"\n [class.active]=\"StatusFilter === stat.Status\"\n [ngClass]=\"GetStatusClass(stat.Status)\"\n (click)=\"OnStatusFilterChange(stat.Status)\">\n <span>{{stat.Status}}</span>\n <span class=\"chip-count\">{{stat.Count}}</span>\n </button>\n }\n </div>\n <!-- Search -->\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search labels by name, description, or entity...\"\n [ngModel]=\"SearchText\"\n (ngModelChange)=\"OnSearchChange($event)\" />\n @if (SearchText) {\n <button class=\"btn-clear\" (click)=\"OnSearchChange('')\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n <!-- Labels Card View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'card') {\n <div class=\"labels-list\">\n @for (label of FilteredLabels; track label) {\n <div class=\"label-card clickable\"\n [class.group-parent]=\"IsGroupParent(label)\"\n (click)=\"OnLabelClick(label)\">\n <div class=\"label-header\">\n <div class=\"label-title-row\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"label-scope-icon\"></i>\n <h3 class=\"label-name\">{{label.Name}}</h3>\n @if (IsGroupParent(label)) {\n <span class=\"group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{GetChildLabels(label.ID).length}} records\n </span>\n }\n <span class=\"label-status\" [ngClass]=\"GetStatusClass(label.Status)\">\n {{label.Status}}\n </span>\n </div>\n <div class=\"label-meta\">\n <span class=\"meta-item\" title=\"Scope\">\n <i class=\"fa-solid fa-layer-group\"></i> {{label.Scope}}\n </span>\n @if (label.Entity || label.EntityID) {\n <span class=\"meta-item\" title=\"Entity\">\n <i class=\"fa-solid fa-table\"></i> {{label.Entity ?? ResolveEntityName(label.EntityID)}}\n </span>\n }\n @if (label.RecordID) {\n <span class=\"meta-item\" title=\"Record ID\">\n <i class=\"fa-solid fa-fingerprint\"></i> {{label.RecordID | slice:0:12}}...\n </span>\n }\n @if (label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{label.ItemCount}} items\n </span>\n }\n @if (!label.ItemCount) {\n <span class=\"meta-item\" title=\"Items captured\">\n <i class=\"fa-solid fa-camera\"></i> {{GetItemCount(label.ID)}} items\n </span>\n }\n @if (label.CreationDurationMS) {\n <span class=\"meta-item\" title=\"Creation time\">\n <i class=\"fa-solid fa-stopwatch\"></i> {{FormatDuration(label.CreationDurationMS)}}\n </span>\n }\n @if (label.CreatedByUser) {\n <span class=\"meta-item\" title=\"Created by\">\n <i class=\"fa-solid fa-user\"></i> {{label.CreatedByUser}}\n </span>\n }\n <span class=\"meta-item\" title=\"Created\">\n <i class=\"fa-regular fa-clock\"></i> {{FormatDate(label.__mj_CreatedAt)}}\n </span>\n </div>\n </div>\n @if (label.Description) {\n <p class=\"label-description\">{{label.Description}}</p>\n }\n <!-- Child labels for group parents -->\n @if (IsGroupParent(label) && GetChildLabels(label.ID).length > 0) {\n <div class=\"child-labels\">\n @for (child of GetChildLabels(label.ID); track child) {\n <div class=\"child-label\">\n <i class=\"fa-solid fa-tag child-icon\"></i>\n <span class=\"child-name\">{{child.Name}}</span>\n @if (child.RecordID) {\n <span class=\"child-record\">{{child.RecordID | slice:0:12}}...</span>\n }\n @if (child.ItemCount) {\n <span class=\"child-items\">{{child.ItemCount}} items</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Labels List View -->\n @if (FilteredLabels.length > 0 && ViewMode === 'list') {\n <div class=\"labels-table\">\n <div class=\"list-header-row\">\n <span class=\"list-col-icon\"></span>\n <span class=\"list-col-name sortable-header\" (click)=\"OnSortChange('Name')\">\n Name <i [class]=\"GetSortIcon('Name')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-entity\">Entity</span>\n <span class=\"list-col-status sortable-header\" (click)=\"OnSortChange('Status')\">\n Status <i [class]=\"GetSortIcon('Status')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-items sortable-header\" (click)=\"OnSortChange('Items')\">\n Items <i [class]=\"GetSortIcon('Items')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-date sortable-header\" (click)=\"OnSortChange('Date')\">\n Created <i [class]=\"GetSortIcon('Date')\" class=\"sort-icon\"></i>\n </span>\n <span class=\"list-col-arrow\"></span>\n </div>\n @for (label of FilteredLabels; track label) {\n <div class=\"list-row clickable\"\n (click)=\"OnLabelClick(label)\">\n <span class=\"list-col-icon\">\n <i [class]=\"GetScopeIcon(label.Scope)\" class=\"list-scope-icon\"></i>\n </span>\n <span class=\"list-col-name\">\n <span class=\"list-label-name\">{{label.Name}}</span>\n @if (IsGroupParent(label)) {\n <span class=\"list-group-badge\">\n <i class=\"fa-solid fa-layer-group\"></i> {{GetChildLabels(label.ID).length}}\n </span>\n }\n </span>\n <span class=\"list-col-entity\">{{label.Entity ?? ResolveEntityName(label.EntityID)}}</span>\n <span class=\"list-col-status\">\n <span class=\"label-status small\" [ngClass]=\"GetStatusClass(label.Status)\">{{label.Status}}</span>\n </span>\n <span class=\"list-col-items\">{{label.ItemCount || GetItemCount(label.ID)}}</span>\n <span class=\"list-col-date\">{{FormatDate(label.__mj_CreatedAt)}}</span>\n <span class=\"list-col-arrow\">\n <i class=\"fa-solid fa-chevron-right list-arrow\"></i>\n </span>\n </div>\n }\n </div>\n }\n <!-- Empty state -->\n @if (FilteredLabels.length === 0 && !IsLoading) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-tags empty-icon\"></i>\n <h3>No labels found</h3>\n @if (SearchText || ScopeFilter || StatusFilter) {\n <p>\n Try adjusting your filters or search criteria.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <p>\n No version labels have been created yet.\n </p>\n }\n @if (!SearchText && !ScopeFilter && !StatusFilter) {\n <button class=\"btn-primary empty-cta\"\n (click)=\"OpenCreateDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n <span>Create Your First Label</span>\n </button>\n }\n </div>\n }\n }\n\n <!-- Create Label Wizard -->\n @if (ShowCreateWizard) {\n <div class=\"create-wizard-overlay\" (click)=\"OnCreateWizardCancel()\">\n <div class=\"create-wizard-container\" (click)=\"$event.stopPropagation()\">\n <div class=\"create-wizard-header\">\n <h3 class=\"create-wizard-title\">\n <i class=\"fa-solid fa-tag\"></i>\n Create Version Label\n </h3>\n <button class=\"create-wizard-close\" (click)=\"OnCreateWizardCancel()\" title=\"Close\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"create-wizard-body\">\n <mj-label-create\n (Created)=\"OnLabelCreated($event)\"\n (Cancel)=\"OnCreateWizardCancel()\">\n </mj-label-create>\n </div>\n </div>\n </div>\n }\n\n <!-- Detail panel -->\n @if (ShowDetailPanel && SelectedLabel) {\n <mj-label-detail-panel\n [Label]=\"SelectedLabel\"\n [AllLabels]=\"Labels\"\n [ItemCountMap]=\"ItemCountMap\"\n (Close)=\"OnDetailPanelClose()\"\n (LabelUpdated)=\"OnLabelUpdated()\"\n (EntityLinkClick)=\"OnEntityLinkClick($event)\">\n </mj-label-detail-panel>\n }\n</div>\n", styles: [".labels-container {\n padding: 24px;\n height: 100%;\n overflow-y: auto;\n}\n\n/* Header */\n.page-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.header-left { flex: 1; }\n\n.page-title {\n font-size: 24px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0 0 4px 0;\n}\n\n.page-subtitle {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.header-actions {\n display: flex;\n gap: 12px;\n align-items: center;\n}\n\n.btn-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: var(--mj-text-secondary);\n}\n\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.btn-primary {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border: none;\n border-radius: 8px;\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-primary:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.btn-secondary {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n/* KPI Row */\n.kpi-row {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n}\n\n.kpi-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 12px;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.kpi-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-text-primary);\n line-height: 1;\n}\n\n.kpi-label {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n/* Scope Chips */\n.scope-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 16px;\n}\n\n.scope-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 20px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n transition: all 0.2s ease;\n}\n\n.scope-chip:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n\n.scope-chip.active {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.scope-chip.active .chip-count {\n background: color-mix(in srgb, var(--mj-text-inverse) 20%, transparent);\n color: var(--mj-text-inverse);\n}\n\n.chip-count {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n/* Search Bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-secondary);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 40px 10px 40px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 10px;\n font-size: 14px;\n color: var(--mj-text-primary);\n outline: none;\n transition: border-color 0.2s ease;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.search-input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.btn-clear {\n position: absolute;\n right: 10px;\n top: 50%;\n transform: translateY(-50%);\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: none;\n border: none;\n color: var(--mj-text-secondary);\n cursor: pointer;\n border-radius: 4px;\n}\n\n.btn-clear:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n/* Labels List */\n.labels-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.label-card {\n padding: 20px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n transition: all 0.2s ease;\n}\n\n.label-card:hover {\n border-color: var(--mj-border-strong);\n box-shadow: var(--mj-shadow-sm);\n}\n\n.label-card.group-parent {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.label-header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.label-title-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.label-scope-icon {\n color: var(--mj-brand-primary);\n font-size: 16px;\n}\n\n.label-name {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n flex: 1;\n}\n\n.group-badge {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 3px 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.label-status {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n}\n\n.status-archived {\n background: color-mix(in srgb, var(--mj-text-muted) 10%, transparent);\n color: var(--mj-text-muted);\n}\n\n.status-restored {\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n}\n\n.label-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n margin-top: 4px;\n}\n\n.meta-item {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.meta-item i {\n font-size: 12px;\n opacity: 0.7;\n}\n\n.label-description {\n margin: 10px 0 0 0;\n font-size: 14px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n/* Child labels */\n.child-labels {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--mj-border-default);\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.child-label {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 6px 10px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.child-label:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.child-icon {\n color: var(--mj-text-muted);\n font-size: 11px;\n}\n\n.child-name {\n flex: 1;\n color: var(--mj-text-primary);\n}\n\n.child-record {\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.child-items {\n color: var(--mj-text-secondary);\n font-size: 12px;\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-text-muted);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.empty-state p {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n max-width: 400px;\n}\n\n.empty-cta {\n margin-top: 20px;\n}\n\n/* ==================================================================== */\n/* Create Label Dialog */\n/* ==================================================================== */\n\n/* Step Indicator */\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0;\n margin-bottom: 24px;\n padding: 0 20px;\n}\n\n.step {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.step-number {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 50%;\n font-size: 13px;\n font-weight: 700;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n transition: all 0.2s ease;\n}\n\n.step.active .step-number {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.step.completed .step-number {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.step-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n}\n\n.step.active .step-label {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.step.completed .step-label {\n color: var(--mj-status-success);\n}\n\n.step-connector {\n width: 40px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n transition: background 0.2s ease;\n}\n\n.step-connector.active {\n background: var(--mj-status-success);\n}\n\n/* Dialog Step Content */\n.dialog-step {\n display: flex;\n flex-direction: column;\n gap: 16px;\n min-height: 300px;\n}\n\n.step-description {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n.step-header-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.btn-back {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.btn-back:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n/* Dialog Search */\n.dialog-search {\n position: relative;\n}\n\n.dialog-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n.dialog-search-input {\n width: 100%;\n padding: 9px 12px 9px 36px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.15s ease;\n}\n\n.dialog-search-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.dialog-search-input::placeholder {\n color: var(--mj-text-muted);\n}\n\n/* Entity List */\n.entity-list {\n flex: 1;\n overflow-y: auto;\n max-height: 320px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n}\n\n.entity-option {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.entity-option:last-child {\n border-bottom: none;\n}\n\n.entity-option:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.entity-option-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.entity-option-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.entity-option-desc {\n font-size: 12px;\n color: var(--mj-text-muted);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.entity-option-arrow {\n color: var(--mj-text-muted);\n font-size: 12px;\n flex-shrink: 0;\n}\n\n.entity-list-empty {\n padding: 40px 20px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 14px;\n}\n\n/* Records */\n.records-toolbar {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.selection-actions {\n display: flex;\n gap: 4px;\n flex-shrink: 0;\n}\n\n.btn-text {\n padding: 6px 12px;\n background: none;\n border: none;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-brand-primary);\n cursor: pointer;\n border-radius: 6px;\n transition: background 0.15s ease;\n}\n\n.btn-text:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.record-list {\n flex: 1;\n overflow-y: auto;\n max-height: 280px;\n border: 1px solid var(--mj-border-default);\n border-radius: 10px;\n}\n\n.record-option {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n cursor: pointer;\n transition: background 0.15s ease;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.record-option:last-child {\n border-bottom: none;\n}\n\n.record-option:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.record-option.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 5%, transparent);\n}\n\n.record-checkbox {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: 2px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 11px;\n color: transparent;\n transition: all 0.15s ease;\n flex-shrink: 0;\n}\n\n.record-option.selected .record-checkbox {\n background: var(--mj-brand-primary);\n border-color: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.record-name {\n font-size: 14px;\n color: var(--mj-text-primary);\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.records-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-top: 8px;\n}\n\n.selection-count {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n}\n\n/* Details step */\n.details-summary {\n display: flex;\n flex-wrap: wrap;\n gap: 16px;\n padding: 14px 16px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n}\n\n.summary-item {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.summary-item i {\n color: var(--mj-brand-primary);\n font-size: 13px;\n}\n\n.form-field {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.form-label {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.form-input {\n padding: 10px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 0.15s ease;\n}\n\n.form-input:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-input::placeholder {\n color: var(--mj-text-muted);\n}\n\n.form-textarea {\n padding: 10px 14px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n resize: vertical;\n font-family: inherit;\n transition: border-color 0.15s ease;\n}\n\n.form-textarea:focus {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-textarea::placeholder {\n color: var(--mj-text-muted);\n}\n\n.details-footer {\n display: flex;\n gap: 12px;\n padding-top: 8px;\n}\n\n/* Creating state */\n.creating-step {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.creating-animation {\n margin-bottom: 16px;\n}\n\n.creating-icon {\n font-size: 40px;\n color: var(--mj-brand-primary);\n}\n\n.creating-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.creating-progress {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0;\n}\n\n/* Progress bar */\n.progress-container {\n width: 100%;\n max-width: 420px;\n margin: 16px auto 0;\n text-align: left;\n}\n\n.progress-bar-track {\n width: 100%;\n height: 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 4px;\n overflow: hidden;\n}\n\n.progress-bar-fill {\n height: 100%;\n background: var(--mj-brand-primary);\n border-radius: 4px;\n transition: width 0.3s ease;\n}\n\n.progress-details {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-top: 8px;\n}\n\n.progress-message {\n font-size: 13px;\n color: var(--mj-text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n margin-right: 12px;\n}\n\n.progress-pct {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n white-space: nowrap;\n}\n\n.progress-stats {\n display: flex;\n gap: 16px;\n margin-top: 6px;\n}\n\n.progress-stat {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-muted);\n}\n\n.progress-stat i {\n font-size: 11px;\n}\n\n/* Done state */\n.done-step {\n align-items: center;\n justify-content: center;\n text-align: center;\n padding: 40px 20px;\n}\n\n.done-icon-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 56px;\n height: 56px;\n border-radius: 50%;\n font-size: 24px;\n margin-bottom: 16px;\n}\n\n.done-icon-wrap.success {\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n}\n\n.done-icon-wrap.error {\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n color: var(--mj-status-error);\n}\n\n.done-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.done-message {\n font-size: 14px;\n color: var(--mj-text-secondary);\n margin: 0 0 20px 0;\n}\n\n.error-text {\n color: var(--mj-status-error);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.toggle-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n background: transparent;\n border: none;\n cursor: pointer;\n color: var(--mj-text-muted);\n transition: all 0.15s ease;\n font-size: 14px;\n}\n\n.toggle-btn:hover {\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface-sunken);\n}\n\n.toggle-btn.active {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 8%, transparent);\n}\n\n.toggle-btn + .toggle-btn {\n border-left: 1px solid var(--mj-border-default);\n}\n\n/* Clickable cards/rows */\n.clickable {\n cursor: pointer;\n}\n\n.label-card.clickable:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 12px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n transform: translateY(-1px);\n}\n\n/* Labels Table (List View) */\n.labels-table {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.list-header-row {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 10px 16px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 40px 1fr 160px 90px 60px 100px 32px;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n font-size: 14px;\n color: var(--mj-text-primary);\n transition: all 0.15s ease;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n.list-row:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.list-scope-icon {\n color: var(--mj-brand-primary);\n font-size: 15px;\n}\n\n.list-col-name {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n}\n\n.list-label-name {\n font-weight: 500;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-group-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n flex-shrink: 0;\n}\n\n.list-col-entity {\n color: var(--mj-text-secondary);\n font-size: 13px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.list-col-items {\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.list-col-date {\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.list-col-arrow {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.list-arrow {\n color: var(--mj-text-muted);\n font-size: 12px;\n transition: transform 0.15s ease, color 0.15s ease;\n}\n\n.list-row:hover .list-arrow {\n color: var(--mj-brand-primary);\n transform: translateX(2px);\n}\n\n.label-status.small {\n padding: 2px 8px;\n font-size: 11px;\n}\n\n/* Sortable headers */\n.sortable-header {\n cursor: pointer;\n user-select: none;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: color 0.15s ease;\n}\n\n.sortable-header:hover {\n color: var(--mj-brand-primary);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity 0.15s ease;\n}\n\n.sortable-header:hover .sort-icon {\n opacity: 0.8;\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .kpi-row {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .list-header-row,\n .list-row {\n grid-template-columns: 36px 1fr 80px 60px 32px;\n }\n\n .list-col-entity,\n .list-col-date {\n display: none;\n }\n}\n\n/* ================================================================= */\n/* CREATE WIZARD OVERLAY */\n/* ================================================================= */\n\n.create-wizard-overlay {\n position: fixed;\n inset: 0;\n background: var(--mj-bg-overlay);\n z-index: 10000;\n display: flex;\n align-items: center;\n justify-content: center;\n animation: fadeIn 0.15s ease;\n}\n\n.create-wizard-container {\n background: var(--mj-bg-surface-card);\n border-radius: 12px;\n box-shadow: var(--mj-shadow-lg);\n width: 90%;\n max-width: 600px;\n max-height: 85vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.create-wizard-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.create-wizard-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n.create-wizard-title i {\n color: var(--mj-brand-primary);\n font-size: 15px;\n}\n\n.create-wizard-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n background: none;\n border: none;\n border-radius: 8px;\n color: var(--mj-text-muted);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.create-wizard-close:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.create-wizard-body {\n padding: 24px;\n overflow-y: auto;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n"] }]
966
966
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.NavigationService }], null); })();
967
967
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(VersionHistoryLabelsResourceComponent, { className: "VersionHistoryLabelsResourceComponent", filePath: "src/VersionHistory/components/labels-resource.component.ts", lineNumber: 40 }); })();
968
968
  //# sourceMappingURL=labels-resource.component.js.map