@memberjunction/ng-dashboards 5.35.0 → 5.37.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 (159) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.js +3 -3
  2. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  3. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
  4. package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
  5. package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
  6. package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
  7. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
  8. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
  9. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
  10. package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
  11. package/dist/AI/components/models/model-management.component.js +4 -4
  12. package/dist/AI/components/models/model-management.component.js.map +1 -1
  13. package/dist/AI/components/prompts/prompt-management.component.js +3 -3
  14. package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
  15. package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
  16. package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
  17. package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
  18. package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
  19. package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
  20. package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
  21. package/dist/APIKeys/api-keys-resource.component.js +329 -371
  22. package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
  23. package/dist/Actions/components/actions-overview.component.js +137 -142
  24. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  25. package/dist/Actions/components/execution-monitoring.component.js +111 -116
  26. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  27. package/dist/Admin/admin-data-schema.component.js +13 -65
  28. package/dist/Admin/admin-data-schema.component.js.map +1 -1
  29. package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
  30. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
  31. package/dist/Admin/admin-identity-access.component.js +13 -65
  32. package/dist/Admin/admin-identity-access.component.js.map +1 -1
  33. package/dist/Admin/admin-monitoring.component.js +13 -65
  34. package/dist/Admin/admin-monitoring.component.js.map +1 -1
  35. package/dist/Admin/base-admin-container.component.d.ts +9 -7
  36. package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
  37. package/dist/Admin/base-admin-container.component.js +26 -17
  38. package/dist/Admin/base-admin-container.component.js.map +1 -1
  39. package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
  40. package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
  41. package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
  42. package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
  43. package/dist/Communication/communication-new-message-resource.component.js +661 -0
  44. package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
  45. package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
  46. package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
  47. package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
  48. package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
  49. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
  50. package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
  51. package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
  52. package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
  53. package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
  54. package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
  55. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
  56. package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
  57. package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
  58. package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
  59. package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
  60. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
  61. package/dist/DevTools/app-state-inspector.component.js +46 -72
  62. package/dist/DevTools/app-state-inspector.component.js.map +1 -1
  63. package/dist/DevTools/class-registry.component.js +88 -100
  64. package/dist/DevTools/class-registry.component.js.map +1 -1
  65. package/dist/DevTools/event-monitor.component.js +158 -168
  66. package/dist/DevTools/event-monitor.component.js.map +1 -1
  67. package/dist/DevTools/graphql-console.component.js +257 -264
  68. package/dist/DevTools/graphql-console.component.js.map +1 -1
  69. package/dist/DevTools/layout-inspector.component.d.ts +5 -0
  70. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
  71. package/dist/DevTools/layout-inspector.component.js +46 -64
  72. package/dist/DevTools/layout-inspector.component.js.map +1 -1
  73. package/dist/DevTools/lazy-module-status.component.js +75 -84
  74. package/dist/DevTools/lazy-module-status.component.js.map +1 -1
  75. package/dist/DevTools/settings-explorer.component.js +76 -85
  76. package/dist/DevTools/settings-explorer.component.js.map +1 -1
  77. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
  78. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  79. package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
  80. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  81. package/dist/Integration/components/activity/activity.component.js +97 -99
  82. package/dist/Integration/components/activity/activity.component.js.map +1 -1
  83. package/dist/Integration/components/connections/connections.component.js +842 -855
  84. package/dist/Integration/components/connections/connections.component.js.map +1 -1
  85. package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
  86. package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
  87. package/dist/Integration/components/schedules/schedules.component.js +78 -89
  88. package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
  89. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
  90. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
  91. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
  92. package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
  93. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
  94. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
  95. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
  96. package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
  97. package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
  98. package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
  99. package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
  100. package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
  101. package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
  102. package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
  103. package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
  104. package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
  105. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
  106. package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
  107. package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
  108. package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
  109. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
  110. package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
  111. package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
  112. package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
  113. package/dist/Lists/index.d.ts +1 -0
  114. package/dist/Lists/index.d.ts.map +1 -1
  115. package/dist/Lists/index.js +1 -0
  116. package/dist/Lists/index.js.map +1 -1
  117. package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
  118. package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
  119. package/dist/Lists/services/list-set-operations.service.js +236 -10
  120. package/dist/Lists/services/list-set-operations.service.js.map +1 -1
  121. package/dist/MCP/mcp-dashboard.component.js +19 -19
  122. package/dist/MCP/mcp-dashboard.component.js.map +1 -1
  123. package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
  124. package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
  125. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
  126. package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
  127. package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
  128. package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
  129. package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
  130. package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
  131. package/dist/Testing/components/testing-explorer.component.js +543 -629
  132. package/dist/Testing/components/testing-explorer.component.js.map +1 -1
  133. package/dist/Testing/testing-dashboard.component.js +50 -49
  134. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  135. package/dist/ai-dashboards.module.d.ts +1 -1
  136. package/dist/ai-dashboards.module.d.ts.map +1 -1
  137. package/dist/ai-dashboards.module.js +16 -1
  138. package/dist/ai-dashboards.module.js.map +1 -1
  139. package/dist/communication-dashboards.module.d.ts +9 -7
  140. package/dist/communication-dashboards.module.d.ts.map +1 -1
  141. package/dist/communication-dashboards.module.js +13 -4
  142. package/dist/communication-dashboards.module.js.map +1 -1
  143. package/dist/core-dashboards.module.d.ts +1 -1
  144. package/dist/core-dashboards.module.d.ts.map +1 -1
  145. package/dist/core-dashboards.module.js +16 -1
  146. package/dist/core-dashboards.module.js.map +1 -1
  147. package/dist/lists-dashboards.module.d.ts +10 -9
  148. package/dist/lists-dashboards.module.d.ts.map +1 -1
  149. package/dist/lists-dashboards.module.js +13 -2
  150. package/dist/lists-dashboards.module.js.map +1 -1
  151. package/dist/public-api.d.ts +1 -0
  152. package/dist/public-api.d.ts.map +1 -1
  153. package/dist/public-api.js +1 -0
  154. package/dist/public-api.js.map +1 -1
  155. package/dist/testing-dashboards.module.d.ts +1 -1
  156. package/dist/testing-dashboards.module.d.ts.map +1 -1
  157. package/dist/testing-dashboards.module.js +13 -1
  158. package/dist/testing-dashboards.module.js.map +1 -1
  159. package/package.json +53 -52
@@ -15,21 +15,21 @@ import * as i2 from "@memberjunction/ng-shared-generic";
15
15
  import * as i3 from "@memberjunction/ng-credentials";
16
16
  import * as i4 from "@angular/common";
17
17
  const _c0 = ["categoryEditPanel"];
18
- function CredentialsCategoriesResourceComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
18
+ function CredentialsCategoriesResourceComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
19
19
  const _r2 = i0.ɵɵgetCurrentView();
20
- i0.ɵɵelementStart(0, "button", 17);
21
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
22
- i0.ɵɵelement(1, "i", 18);
20
+ i0.ɵɵelementStart(0, "button", 14);
21
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_10_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
22
+ i0.ɵɵelement(1, "i", 15);
23
23
  i0.ɵɵtext(2, " New Category ");
24
24
  i0.ɵɵelementEnd();
25
25
  } }
26
- function CredentialsCategoriesResourceComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
27
- i0.ɵɵelement(0, "mj-loading", 14);
26
+ function CredentialsCategoriesResourceComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
27
+ i0.ɵɵelement(0, "mj-loading", 11);
28
28
  } }
29
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
29
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
30
30
  const _r6 = i0.ɵɵgetCurrentView();
31
- i0.ɵɵelementStart(0, "button", 39);
32
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleExpand(node_r5, $event)); });
31
+ i0.ɵɵelementStart(0, "button", 36);
32
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_2_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r6); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.toggleExpand(node_r5, $event)); });
33
33
  i0.ɵɵelement(1, "i");
34
34
  i0.ɵɵelementEnd();
35
35
  } if (rf & 2) {
@@ -37,11 +37,11 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For
37
37
  i0.ɵɵadvance();
38
38
  i0.ɵɵclassMap(node_r5.expanded ? "fa-solid fa-chevron-down" : "fa-solid fa-chevron-right");
39
39
  } }
40
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelement(0, "span", 28);
40
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelement(0, "span", 25);
42
42
  } }
43
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "div", 32);
43
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "div", 29);
45
45
  i0.ɵɵtext(1);
46
46
  i0.ɵɵpipe(2, "slice");
47
47
  i0.ɵɵelementEnd();
@@ -50,9 +50,9 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For
50
50
  i0.ɵɵadvance();
51
51
  i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind3(2, 2, node_r5.category.Description, 0, 50), "", node_r5.category.Description.length > 50 ? "..." : "", " ");
52
52
  } }
53
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelementStart(0, "span", 34);
55
- i0.ɵɵelement(1, "i", 40);
53
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
54
+ i0.ɵɵelementStart(0, "span", 31);
55
+ i0.ɵɵelement(1, "i", 37);
56
56
  i0.ɵɵtext(2);
57
57
  i0.ɵɵelementEnd();
58
58
  } if (rf & 2) {
@@ -60,9 +60,9 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For
60
60
  i0.ɵɵadvance(2);
61
61
  i0.ɵɵtextInterpolate1(" ", node_r5.typeCount, " ");
62
62
  } }
63
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
64
- i0.ɵɵelementStart(0, "span", 35);
65
- i0.ɵɵelement(1, "i", 41);
63
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
64
+ i0.ɵɵelementStart(0, "span", 32);
65
+ i0.ɵɵelement(1, "i", 38);
66
66
  i0.ɵɵtext(2);
67
67
  i0.ɵɵelementEnd();
68
68
  } if (rf & 2) {
@@ -70,46 +70,46 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For
70
70
  i0.ɵɵadvance(2);
71
71
  i0.ɵɵtextInterpolate1(" ", node_r5.children.length, " ");
72
72
  } }
73
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
73
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
74
74
  const _r7 = i0.ɵɵgetCurrentView();
75
- i0.ɵɵelementStart(0, "button", 42);
76
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_14_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(node_r5, $event)); });
77
- i0.ɵɵelement(1, "i", 43);
75
+ i0.ɵɵelementStart(0, "button", 39);
76
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_14_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r7); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(node_r5, $event)); });
77
+ i0.ɵɵelement(1, "i", 40);
78
78
  i0.ɵɵelementEnd();
79
79
  } }
80
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
80
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
81
81
  const _r8 = i0.ɵɵgetCurrentView();
82
- i0.ɵɵelementStart(0, "button", 44);
83
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_15_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCategory(node_r5, $event)); });
84
- i0.ɵɵelement(1, "i", 45);
82
+ i0.ɵɵelementStart(0, "button", 41);
83
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_15_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const node_r5 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.deleteCategory(node_r5, $event)); });
84
+ i0.ɵɵelement(1, "i", 42);
85
85
  i0.ɵɵelementEnd();
86
86
  } }
87
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
87
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
88
88
  const _r4 = i0.ɵɵgetCurrentView();
89
- i0.ɵɵelementStart(0, "div", 25);
90
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Template_div_click_0_listener() { const node_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectNode(node_r5)); });
91
- i0.ɵɵelementStart(1, "div", 26);
92
- i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_2_Template, 2, 2, "button", 27);
93
- i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_3_Template, 1, 0, "span", 28);
94
- i0.ɵɵelementStart(4, "div", 29);
89
+ i0.ɵɵelementStart(0, "div", 22);
90
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Template_div_click_0_listener() { const node_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectNode(node_r5)); });
91
+ i0.ɵɵelementStart(1, "div", 23);
92
+ i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_2_Template, 2, 2, "button", 24);
93
+ i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_3_Template, 1, 0, "span", 25);
94
+ i0.ɵɵelementStart(4, "div", 26);
95
95
  i0.ɵɵelement(5, "i");
96
96
  i0.ɵɵelementEnd();
97
- i0.ɵɵelementStart(6, "div", 30)(7, "div", 31);
97
+ i0.ɵɵelementStart(6, "div", 27)(7, "div", 28);
98
98
  i0.ɵɵtext(8);
99
99
  i0.ɵɵelementEnd();
100
- i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_9_Template, 3, 6, "div", 32);
100
+ i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_9_Template, 3, 6, "div", 29);
101
101
  i0.ɵɵelementEnd();
102
- i0.ɵɵelementStart(10, "div", 33);
103
- i0.ɵɵconditionalCreate(11, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_11_Template, 3, 1, "span", 34);
104
- i0.ɵɵconditionalCreate(12, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_12_Template, 3, 1, "span", 35);
102
+ i0.ɵɵelementStart(10, "div", 30);
103
+ i0.ɵɵconditionalCreate(11, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_11_Template, 3, 1, "span", 31);
104
+ i0.ɵɵconditionalCreate(12, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_12_Template, 3, 1, "span", 32);
105
105
  i0.ɵɵelementEnd();
106
- i0.ɵɵelementStart(13, "div", 36);
107
- i0.ɵɵconditionalCreate(14, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_14_Template, 2, 0, "button", 37);
108
- i0.ɵɵconditionalCreate(15, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Conditional_15_Template, 2, 0, "button", 38);
106
+ i0.ɵɵelementStart(13, "div", 33);
107
+ i0.ɵɵconditionalCreate(14, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_14_Template, 2, 0, "button", 34);
108
+ i0.ɵɵconditionalCreate(15, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Conditional_15_Template, 2, 0, "button", 35);
109
109
  i0.ɵɵelementEnd()()();
110
110
  } if (rf & 2) {
111
111
  const node_r5 = ctx.$implicit;
112
- const ɵ$index_48_r9 = ctx.$index;
112
+ const ɵ$index_42_r9 = ctx.$index;
113
113
  const ctx_r2 = i0.ɵɵnextContext(3);
114
114
  i0.ɵɵstyleProp("padding-left", 12 + node_r5.level * 20, "px");
115
115
  i0.ɵɵclassProp("selected", ctx_r2.IsNodeSelected(node_r5));
@@ -118,7 +118,7 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For
118
118
  i0.ɵɵadvance();
119
119
  i0.ɵɵconditional(node_r5.children.length === 0 ? 3 : -1);
120
120
  i0.ɵɵadvance();
121
- i0.ɵɵstyleProp("background-color", ctx_r2.getCategoryColor(ɵ$index_48_r9) + "15")("color", ctx_r2.getCategoryColor(ɵ$index_48_r9));
121
+ i0.ɵɵstyleProp("background-color", ctx_r2.getCategoryColor(ɵ$index_42_r9) + "15")("color", ctx_r2.getCategoryColor(ɵ$index_42_r9));
122
122
  i0.ɵɵadvance();
123
123
  i0.ɵɵclassMap(node_r5.category.IconClass || "fa-solid fa-folder");
124
124
  i0.ɵɵadvance(3);
@@ -134,47 +134,47 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For
134
134
  i0.ɵɵadvance();
135
135
  i0.ɵɵconditional(ctx_r2.UserCanDelete && node_r5.children.length === 0 && node_r5.typeCount === 0 ? 15 : -1);
136
136
  } }
137
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_Template(rf, ctx) { if (rf & 1) {
138
- i0.ɵɵelementStart(0, "div", 20);
139
- i0.ɵɵrepeaterCreate(1, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_For_2_Template, 16, 18, "div", 24, i0.ɵɵrepeaterTrackByIdentity);
137
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelementStart(0, "div", 17);
139
+ i0.ɵɵrepeaterCreate(1, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_For_2_Template, 16, 18, "div", 21, i0.ɵɵrepeaterTrackByIdentity);
140
140
  i0.ɵɵelementEnd();
141
141
  } if (rf & 2) {
142
142
  const ctx_r2 = i0.ɵɵnextContext(2);
143
143
  i0.ɵɵadvance();
144
144
  i0.ɵɵrepeater(ctx_r2.getFlattenedNodes());
145
145
  } }
146
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
146
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
147
147
  const _r10 = i0.ɵɵgetCurrentView();
148
148
  i0.ɵɵelementStart(0, "p");
149
149
  i0.ɵɵtext(1, " No categories match your search. ");
150
- i0.ɵɵelementStart(2, "button", 49);
151
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearSearch()); });
150
+ i0.ɵɵelementStart(2, "button", 46);
151
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.clearSearch()); });
152
152
  i0.ɵɵtext(3, "Clear search");
153
153
  i0.ɵɵelementEnd()();
154
154
  } }
155
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
155
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
156
156
  i0.ɵɵelementStart(0, "p");
157
157
  i0.ɵɵtext(1, " Get started by creating your first category. ");
158
158
  i0.ɵɵelementEnd();
159
159
  } }
160
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
160
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
161
161
  const _r11 = i0.ɵɵgetCurrentView();
162
- i0.ɵɵelementStart(0, "button", 50);
163
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
164
- i0.ɵɵelement(1, "i", 18);
162
+ i0.ɵɵelementStart(0, "button", 47);
163
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.createNewCategory()); });
164
+ i0.ɵɵelement(1, "i", 15);
165
165
  i0.ɵɵtext(2, " Create Category ");
166
166
  i0.ɵɵelementEnd();
167
167
  } }
168
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Template(rf, ctx) { if (rf & 1) {
169
- i0.ɵɵelementStart(0, "div", 21)(1, "div", 46);
170
- i0.ɵɵelement(2, "i", 47);
168
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Template(rf, ctx) { if (rf & 1) {
169
+ i0.ɵɵelementStart(0, "div", 18)(1, "div", 43);
170
+ i0.ɵɵelement(2, "i", 44);
171
171
  i0.ɵɵelementEnd();
172
172
  i0.ɵɵelementStart(3, "h3");
173
173
  i0.ɵɵtext(4, "No Categories");
174
174
  i0.ɵɵelementEnd();
175
- i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_5_Template, 4, 0, "p");
176
- i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_6_Template, 2, 0, "p");
177
- i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Conditional_7_Template, 3, 0, "button", 48);
175
+ i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_5_Template, 4, 0, "p");
176
+ i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_6_Template, 2, 0, "p");
177
+ i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Conditional_7_Template, 3, 0, "button", 45);
178
178
  i0.ɵɵelementEnd();
179
179
  } if (rf & 2) {
180
180
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -185,8 +185,8 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Tem
185
185
  i0.ɵɵadvance();
186
186
  i0.ɵɵconditional(ctx_r2.UserCanCreate && !ctx_r2.searchText ? 7 : -1);
187
187
  } }
188
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
189
- i0.ɵɵelementStart(0, "span", 54);
188
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_7_Template(rf, ctx) { if (rf & 1) {
189
+ i0.ɵɵelementStart(0, "span", 51);
190
190
  i0.ɵɵtext(1);
191
191
  i0.ɵɵelementEnd();
192
192
  } if (rf & 2) {
@@ -194,19 +194,19 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Con
194
194
  i0.ɵɵadvance();
195
195
  i0.ɵɵtextInterpolate1(" Level ", ctx_r2.selectedNode.level + 1, " ");
196
196
  } }
197
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
197
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
198
198
  const _r13 = i0.ɵɵgetCurrentView();
199
- i0.ɵɵelementStart(0, "button", 42);
200
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(ctx_r2.selectedNode)); });
201
- i0.ɵɵelement(1, "i", 43);
199
+ i0.ɵɵelementStart(0, "button", 39);
200
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.editCategory(ctx_r2.selectedNode)); });
201
+ i0.ɵɵelement(1, "i", 40);
202
202
  i0.ɵɵelementEnd();
203
203
  } }
204
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_24_Template(rf, ctx) { if (rf & 1) {
205
- i0.ɵɵelementStart(0, "div", 63)(1, "h3");
206
- i0.ɵɵelement(2, "i", 68);
204
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_24_Template(rf, ctx) { if (rf & 1) {
205
+ i0.ɵɵelementStart(0, "div", 60)(1, "h3");
206
+ i0.ɵɵelement(2, "i", 65);
207
207
  i0.ɵɵtext(3, " Description ");
208
208
  i0.ɵɵelementEnd();
209
- i0.ɵɵelementStart(4, "p", 69);
209
+ i0.ɵɵelementStart(4, "p", 66);
210
210
  i0.ɵɵtext(5);
211
211
  i0.ɵɵelementEnd()();
212
212
  } if (rf & 2) {
@@ -214,8 +214,8 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Con
214
214
  i0.ɵɵadvance(5);
215
215
  i0.ɵɵtextInterpolate(ctx_r2.selectedNode.category.Description);
216
216
  } }
217
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_25_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
218
- i0.ɵɵelementStart(0, "div", 75);
217
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
218
+ i0.ɵɵelementStart(0, "div", 72);
219
219
  i0.ɵɵtext(1);
220
220
  i0.ɵɵpipe(2, "slice");
221
221
  i0.ɵɵelementEnd();
@@ -224,14 +224,14 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Con
224
224
  i0.ɵɵadvance();
225
225
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind3(2, 1, type_r14.Description, 0, 60));
226
226
  } }
227
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_25_For_6_Template(rf, ctx) { if (rf & 1) {
228
- i0.ɵɵelementStart(0, "div", 71)(1, "div", 72);
227
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelementStart(0, "div", 68)(1, "div", 69);
229
229
  i0.ɵɵelement(2, "i");
230
230
  i0.ɵɵelementEnd();
231
- i0.ɵɵelementStart(3, "div", 73)(4, "div", 74);
231
+ i0.ɵɵelementStart(3, "div", 70)(4, "div", 71);
232
232
  i0.ɵɵtext(5);
233
233
  i0.ɵɵelementEnd();
234
- i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_25_For_6_Conditional_6_Template, 3, 5, "div", 75);
234
+ i0.ɵɵconditionalCreate(6, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Conditional_6_Template, 3, 5, "div", 72);
235
235
  i0.ɵɵelementEnd()();
236
236
  } if (rf & 2) {
237
237
  const type_r14 = ctx.$implicit;
@@ -242,21 +242,21 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Con
242
242
  i0.ɵɵadvance();
243
243
  i0.ɵɵconditional(type_r14.Description ? 6 : -1);
244
244
  } }
245
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_25_Template(rf, ctx) { if (rf & 1) {
246
- i0.ɵɵelementStart(0, "div", 64)(1, "h3");
247
- i0.ɵɵelement(2, "i", 40);
245
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_Template(rf, ctx) { if (rf & 1) {
246
+ i0.ɵɵelementStart(0, "div", 61)(1, "h3");
247
+ i0.ɵɵelement(2, "i", 37);
248
248
  i0.ɵɵtext(3, " Credential Types ");
249
249
  i0.ɵɵelementEnd();
250
- i0.ɵɵelementStart(4, "div", 70);
251
- i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_25_For_6_Template, 7, 4, "div", 71, i0.ɵɵrepeaterTrackByIdentity);
250
+ i0.ɵɵelementStart(4, "div", 67);
251
+ i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_For_6_Template, 7, 4, "div", 68, i0.ɵɵrepeaterTrackByIdentity);
252
252
  i0.ɵɵelementEnd()();
253
253
  } if (rf & 2) {
254
254
  const ctx_r2 = i0.ɵɵnextContext(3);
255
255
  i0.ɵɵadvance(5);
256
256
  i0.ɵɵrepeater(ctx_r2.getTypesForCategory(ctx_r2.selectedNode.category.Name));
257
257
  } }
258
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_26_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
259
- i0.ɵɵelementStart(0, "span", 80);
258
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
259
+ i0.ɵɵelementStart(0, "span", 77);
260
260
  i0.ɵɵtext(1);
261
261
  i0.ɵɵelementEnd();
262
262
  } if (rf & 2) {
@@ -264,15 +264,15 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Con
264
264
  i0.ɵɵadvance();
265
265
  i0.ɵɵtextInterpolate1("", child_r16.typeCount, " types");
266
266
  } }
267
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
267
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Template(rf, ctx) { if (rf & 1) {
268
268
  const _r15 = i0.ɵɵgetCurrentView();
269
- i0.ɵɵelementStart(0, "div", 79);
270
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_26_For_6_Template_div_click_0_listener() { const child_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.selectNode(child_r16)); });
269
+ i0.ɵɵelementStart(0, "div", 76);
270
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Template_div_click_0_listener() { const child_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.selectNode(child_r16)); });
271
271
  i0.ɵɵelement(1, "i");
272
272
  i0.ɵɵelementStart(2, "span");
273
273
  i0.ɵɵtext(3);
274
274
  i0.ɵɵelementEnd();
275
- i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_26_For_6_Conditional_4_Template, 2, 1, "span", 80);
275
+ i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Conditional_4_Template, 2, 1, "span", 77);
276
276
  i0.ɵɵelementEnd();
277
277
  } if (rf & 2) {
278
278
  const child_r16 = ctx.$implicit;
@@ -283,63 +283,63 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Con
283
283
  i0.ɵɵadvance();
284
284
  i0.ɵɵconditional(child_r16.typeCount > 0 ? 4 : -1);
285
285
  } }
286
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_26_Template(rf, ctx) { if (rf & 1) {
287
- i0.ɵɵelementStart(0, "div", 65)(1, "h3");
288
- i0.ɵɵelement(2, "i", 76);
286
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_Template(rf, ctx) { if (rf & 1) {
287
+ i0.ɵɵelementStart(0, "div", 62)(1, "h3");
288
+ i0.ɵɵelement(2, "i", 73);
289
289
  i0.ɵɵtext(3, " Subcategories ");
290
290
  i0.ɵɵelementEnd();
291
- i0.ɵɵelementStart(4, "div", 77);
292
- i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_26_For_6_Template, 5, 4, "div", 78, i0.ɵɵrepeaterTrackByIdentity);
291
+ i0.ɵɵelementStart(4, "div", 74);
292
+ i0.ɵɵrepeaterCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_For_6_Template, 5, 4, "div", 75, i0.ɵɵrepeaterTrackByIdentity);
293
293
  i0.ɵɵelementEnd()();
294
294
  } if (rf & 2) {
295
295
  const ctx_r2 = i0.ɵɵnextContext(3);
296
296
  i0.ɵɵadvance(5);
297
297
  i0.ɵɵrepeater(ctx_r2.selectedNode.children);
298
298
  } }
299
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_28_Template(rf, ctx) { if (rf & 1) {
299
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_28_Template(rf, ctx) { if (rf & 1) {
300
300
  const _r17 = i0.ɵɵgetCurrentView();
301
- i0.ɵɵelementStart(0, "button", 81);
302
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.viewTypesForCategory(ctx_r2.selectedNode.category.Name)); });
303
- i0.ɵɵelement(1, "i", 40);
301
+ i0.ɵɵelementStart(0, "button", 78);
302
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_28_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.viewTypesForCategory(ctx_r2.selectedNode.category.Name)); });
303
+ i0.ɵɵelement(1, "i", 37);
304
304
  i0.ɵɵtext(2, " View Types ");
305
305
  i0.ɵɵelementEnd();
306
306
  } }
307
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
307
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template(rf, ctx) { if (rf & 1) {
308
308
  const _r12 = i0.ɵɵgetCurrentView();
309
- i0.ɵɵelementStart(0, "div", 22)(1, "div", 51)(2, "div", 52);
309
+ i0.ɵɵelementStart(0, "div", 19)(1, "div", 48)(2, "div", 49);
310
310
  i0.ɵɵelement(3, "i");
311
311
  i0.ɵɵelementEnd();
312
- i0.ɵɵelementStart(4, "div", 53)(5, "h2");
312
+ i0.ɵɵelementStart(4, "div", 50)(5, "h2");
313
313
  i0.ɵɵtext(6);
314
314
  i0.ɵɵelementEnd();
315
- i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_7_Template, 2, 1, "span", 54);
315
+ i0.ɵɵconditionalCreate(7, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_7_Template, 2, 1, "span", 51);
316
316
  i0.ɵɵelementEnd();
317
- i0.ɵɵelementStart(8, "div", 55);
318
- i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_9_Template, 2, 0, "button", 37);
319
- i0.ɵɵelementStart(10, "button", 56);
320
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.selectedNode = null); });
321
- i0.ɵɵelement(11, "i", 57);
317
+ i0.ɵɵelementStart(8, "div", 52);
318
+ i0.ɵɵconditionalCreate(9, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_9_Template, 2, 0, "button", 34);
319
+ i0.ɵɵelementStart(10, "button", 53);
320
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.selectedNode = null); });
321
+ i0.ɵɵelement(11, "i", 54);
322
322
  i0.ɵɵelementEnd()()();
323
- i0.ɵɵelementStart(12, "div", 58)(13, "div", 59)(14, "div", 60)(15, "div", 61);
323
+ i0.ɵɵelementStart(12, "div", 55)(13, "div", 56)(14, "div", 57)(15, "div", 58);
324
324
  i0.ɵɵtext(16);
325
325
  i0.ɵɵelementEnd();
326
- i0.ɵɵelementStart(17, "div", 62);
326
+ i0.ɵɵelementStart(17, "div", 59);
327
327
  i0.ɵɵtext(18, "Credential Types");
328
328
  i0.ɵɵelementEnd()();
329
- i0.ɵɵelementStart(19, "div", 60)(20, "div", 61);
329
+ i0.ɵɵelementStart(19, "div", 57)(20, "div", 58);
330
330
  i0.ɵɵtext(21);
331
331
  i0.ɵɵelementEnd();
332
- i0.ɵɵelementStart(22, "div", 62);
332
+ i0.ɵɵelementStart(22, "div", 59);
333
333
  i0.ɵɵtext(23, "Subcategories");
334
334
  i0.ɵɵelementEnd()()();
335
- i0.ɵɵconditionalCreate(24, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_24_Template, 6, 1, "div", 63);
336
- i0.ɵɵconditionalCreate(25, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_25_Template, 7, 0, "div", 64);
337
- i0.ɵɵconditionalCreate(26, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_26_Template, 7, 0, "div", 65);
338
- i0.ɵɵelementStart(27, "div", 66);
339
- i0.ɵɵconditionalCreate(28, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Conditional_28_Template, 3, 0, "button", 67);
340
- i0.ɵɵelementStart(29, "button", 50);
341
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createCredentialWithCategory(ctx_r2.selectedNode.category.ID)); });
342
- i0.ɵɵelement(30, "i", 18);
335
+ i0.ɵɵconditionalCreate(24, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_24_Template, 6, 1, "div", 60);
336
+ i0.ɵɵconditionalCreate(25, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_25_Template, 7, 0, "div", 61);
337
+ i0.ɵɵconditionalCreate(26, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_26_Template, 7, 0, "div", 62);
338
+ i0.ɵɵelementStart(27, "div", 63);
339
+ i0.ɵɵconditionalCreate(28, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Conditional_28_Template, 3, 0, "button", 64);
340
+ i0.ɵɵelementStart(29, "button", 47);
341
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template_button_click_29_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.createCredentialWithCategory(ctx_r2.selectedNode.category.ID)); });
342
+ i0.ɵɵelement(30, "i", 15);
343
343
  i0.ɵɵtext(31, " Create Credential ");
344
344
  i0.ɵɵelementEnd()()()();
345
345
  } if (rf & 2) {
@@ -367,9 +367,9 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Tem
367
367
  i0.ɵɵadvance(2);
368
368
  i0.ɵɵconditional(ctx_r2.selectedNode.typeCount > 0 ? 28 : -1);
369
369
  } }
370
- function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_5_Template(rf, ctx) { if (rf & 1) {
371
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 82);
372
- i0.ɵɵelement(2, "i", 83);
370
+ function CredentialsCategoriesResourceComponent_Conditional_15_Conditional_5_Template(rf, ctx) { if (rf & 1) {
371
+ i0.ɵɵelementStart(0, "div", 20)(1, "div", 79);
372
+ i0.ɵɵelement(2, "i", 80);
373
373
  i0.ɵɵelementEnd();
374
374
  i0.ɵɵelementStart(3, "h3");
375
375
  i0.ɵɵtext(4, "Select a Category");
@@ -378,13 +378,13 @@ function CredentialsCategoriesResourceComponent_Conditional_18_Conditional_5_Tem
378
378
  i0.ɵɵtext(6, "Click on a category to view its details and credential types");
379
379
  i0.ɵɵelementEnd()();
380
380
  } }
381
- function CredentialsCategoriesResourceComponent_Conditional_18_Template(rf, ctx) { if (rf & 1) {
382
- i0.ɵɵelementStart(0, "div", 15)(1, "div", 19);
383
- i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_2_Template, 3, 0, "div", 20);
384
- i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_3_Template, 8, 3, "div", 21);
381
+ function CredentialsCategoriesResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
382
+ i0.ɵɵelementStart(0, "div", 12)(1, "div", 16);
383
+ i0.ɵɵconditionalCreate(2, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_2_Template, 3, 0, "div", 17);
384
+ i0.ɵɵconditionalCreate(3, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_3_Template, 8, 3, "div", 18);
385
385
  i0.ɵɵelementEnd();
386
- i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_4_Template, 32, 15, "div", 22);
387
- i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_18_Conditional_5_Template, 7, 0, "div", 23);
386
+ i0.ɵɵconditionalCreate(4, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_4_Template, 32, 15, "div", 19);
387
+ i0.ɵɵconditionalCreate(5, CredentialsCategoriesResourceComponent_Conditional_15_Conditional_5_Template, 7, 0, "div", 20);
388
388
  i0.ɵɵelementEnd();
389
389
  } if (rf & 2) {
390
390
  const ctx_r2 = i0.ɵɵnextContext();
@@ -750,52 +750,45 @@ let CredentialsCategoriesResourceComponent = class CredentialsCategoriesResource
750
750
  } if (rf & 2) {
751
751
  let _t;
752
752
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.categoryEditPanel = _t.first);
753
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 21, vars: 7, consts: [["categoryEditPanel", ""], ["Title", "Categories", "Icon", "fa-solid fa-folder-tree"], ["meta", ""], ["Label", "categories", 3, "Count"], ["Icon", "fa-solid fa-shapes", "Label", "types", 3, "Count"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Expand all", 3, "click"], [1, "fa-solid", "fa-expand"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Collapse all", 3, "click"], [1, "fa-solid", "fa-compress"], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search categories...", 3, "ValueChange", "Value"], ["text", "Loading categories..."], [1, "categories-layout"], [3, "saved", "deleted"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "tree-panel"], [1, "tree-container"], [1, "empty-state"], [1, "detail-panel"], [1, "no-selection"], [1, "tree-node", 3, "selected", "padding-left"], [1, "tree-node", 3, "click"], [1, "node-content"], [1, "expand-btn"], [1, "expand-placeholder"], [1, "node-icon"], [1, "node-info"], [1, "node-name"], [1, "node-description"], [1, "node-badges"], [1, "badge", "types"], [1, "badge", "children"], [1, "node-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "expand-btn", 3, "click"], [1, "fa-solid", "fa-shapes"], [1, "fa-solid", "fa-folder"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "empty-icon"], [1, "fa-solid", "fa-folder-open"], [1, "btn-primary"], [1, "btn-link", 3, "click"], [1, "btn-primary", 3, "click"], [1, "detail-header"], [1, "detail-icon"], [1, "detail-title"], [1, "level-badge"], [1, "detail-actions"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "detail-body"], [1, "detail-stats"], [1, "detail-stat"], [1, "stat-value"], [1, "stat-label"], [1, "description-section"], [1, "types-section"], [1, "subcategories-section"], [1, "detail-quick-actions"], [1, "btn-secondary"], [1, "fa-solid", "fa-align-left"], [1, "description"], [1, "type-list"], [1, "type-item"], [1, "type-icon"], [1, "type-info"], [1, "type-name"], [1, "type-desc"], [1, "fa-solid", "fa-folder-tree"], [1, "subcategory-list"], [1, "subcategory-item"], [1, "subcategory-item", 3, "click"], [1, "sub-type-count"], [1, "btn-secondary", 3, "click"], [1, "no-selection-icon"], [1, "fa-solid", "fa-hand-pointer"]], template: function CredentialsCategoriesResourceComponent_Template(rf, ctx) { if (rf & 1) {
753
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 18, vars: 5, consts: [["categoryEditPanel", ""], ["Title", "Categories", "Icon", "fa-solid fa-folder-tree"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Expand all", 3, "click"], [1, "fa-solid", "fa-expand"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Collapse all", 3, "click"], [1, "fa-solid", "fa-compress"], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], ["toolbar", ""], ["Placeholder", "Search categories...", 3, "ValueChange", "Value"], ["text", "Loading categories..."], [1, "categories-layout"], [3, "saved", "deleted"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "tree-panel"], [1, "tree-container"], [1, "empty-state"], [1, "detail-panel"], [1, "no-selection"], [1, "tree-node", 3, "selected", "padding-left"], [1, "tree-node", 3, "click"], [1, "node-content"], [1, "expand-btn"], [1, "expand-placeholder"], [1, "node-icon"], [1, "node-info"], [1, "node-name"], [1, "node-description"], [1, "node-badges"], [1, "badge", "types"], [1, "badge", "children"], [1, "node-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete"], [1, "expand-btn", 3, "click"], [1, "fa-solid", "fa-shapes"], [1, "fa-solid", "fa-folder"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "empty-icon"], [1, "fa-solid", "fa-folder-open"], [1, "btn-primary"], [1, "btn-link", 3, "click"], [1, "btn-primary", 3, "click"], [1, "detail-header"], [1, "detail-icon"], [1, "detail-title"], [1, "level-badge"], [1, "detail-actions"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "detail-body"], [1, "detail-stats"], [1, "detail-stat"], [1, "stat-value"], [1, "stat-label"], [1, "description-section"], [1, "types-section"], [1, "subcategories-section"], [1, "detail-quick-actions"], [1, "btn-secondary"], [1, "fa-solid", "fa-align-left"], [1, "description"], [1, "type-list"], [1, "type-item"], [1, "type-icon"], [1, "type-info"], [1, "type-name"], [1, "type-desc"], [1, "fa-solid", "fa-folder-tree"], [1, "subcategory-list"], [1, "subcategory-item"], [1, "subcategory-item", 3, "click"], [1, "sub-type-count"], [1, "btn-secondary", 3, "click"], [1, "no-selection-icon"], [1, "fa-solid", "fa-hand-pointer"]], template: function CredentialsCategoriesResourceComponent_Template(rf, ctx) { if (rf & 1) {
754
754
  const _r1 = i0.ɵɵgetCurrentView();
755
- i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2);
756
- i0.ɵɵelement(3, "mj-stat-badge", 3)(4, "mj-stat-badge", 4);
755
+ i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2)(3, "button", 3);
756
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.expandAll()); });
757
+ i0.ɵɵelement(4, "i", 4);
758
+ i0.ɵɵtext(5, " Expand ");
757
759
  i0.ɵɵelementEnd();
758
- i0.ɵɵelementStart(5, "div", 5)(6, "button", 6);
759
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.expandAll()); });
760
- i0.ɵɵelement(7, "i", 7);
761
- i0.ɵɵtext(8, " Expand ");
760
+ i0.ɵɵelementStart(6, "button", 5);
761
+ i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.collapseAll()); });
762
+ i0.ɵɵelement(7, "i", 6);
763
+ i0.ɵɵtext(8, " Collapse ");
762
764
  i0.ɵɵelementEnd();
763
- i0.ɵɵelementStart(9, "button", 8);
764
- i0.ɵɵlistener("click", function CredentialsCategoriesResourceComponent_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.collapseAll()); });
765
- i0.ɵɵelement(10, "i", 9);
766
- i0.ɵɵtext(11, " Collapse ");
765
+ i0.ɵɵelementStart(9, "mj-refresh-button", 7);
766
+ i0.ɵɵlistener("Clicked", function CredentialsCategoriesResourceComponent_Template_mj_refresh_button_Clicked_9_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
767
767
  i0.ɵɵelementEnd();
768
- i0.ɵɵelementStart(12, "mj-refresh-button", 10);
769
- i0.ɵɵlistener("Clicked", function CredentialsCategoriesResourceComponent_Template_mj_refresh_button_Clicked_12_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.refresh()); });
768
+ i0.ɵɵconditionalCreate(10, CredentialsCategoriesResourceComponent_Conditional_10_Template, 3, 0, "button", 8);
770
769
  i0.ɵɵelementEnd();
771
- i0.ɵɵconditionalCreate(13, CredentialsCategoriesResourceComponent_Conditional_13_Template, 3, 0, "button", 11);
772
- i0.ɵɵelementEnd();
773
- i0.ɵɵelementStart(14, "div", 12)(15, "mj-page-search", 13);
774
- i0.ɵɵlistener("ValueChange", function CredentialsCategoriesResourceComponent_Template_mj_page_search_ValueChange_15_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
770
+ i0.ɵɵelementStart(11, "div", 9)(12, "mj-page-search", 10);
771
+ i0.ɵɵlistener("ValueChange", function CredentialsCategoriesResourceComponent_Template_mj_page_search_ValueChange_12_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
775
772
  i0.ɵɵelementEnd()()();
776
- i0.ɵɵelementStart(16, "mj-page-body");
777
- i0.ɵɵconditionalCreate(17, CredentialsCategoriesResourceComponent_Conditional_17_Template, 1, 0, "mj-loading", 14);
778
- i0.ɵɵconditionalCreate(18, CredentialsCategoriesResourceComponent_Conditional_18_Template, 6, 4, "div", 15);
773
+ i0.ɵɵelementStart(13, "mj-page-body");
774
+ i0.ɵɵconditionalCreate(14, CredentialsCategoriesResourceComponent_Conditional_14_Template, 1, 0, "mj-loading", 11);
775
+ i0.ɵɵconditionalCreate(15, CredentialsCategoriesResourceComponent_Conditional_15_Template, 6, 4, "div", 12);
779
776
  i0.ɵɵelementEnd();
780
- i0.ɵɵelementStart(19, "mj-credential-category-edit-panel", 16, 0);
781
- i0.ɵɵlistener("saved", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_saved_19_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategorySaved($event)); })("deleted", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_deleted_19_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategoryDeleted($event)); });
777
+ i0.ɵɵelementStart(16, "mj-credential-category-edit-panel", 13, 0);
778
+ i0.ɵɵlistener("saved", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_saved_16_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategorySaved($event)); })("deleted", function CredentialsCategoriesResourceComponent_Template_mj_credential_category_edit_panel_deleted_16_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onCategoryDeleted($event)); });
782
779
  i0.ɵɵelementEnd()();
783
780
  } if (rf & 2) {
784
- i0.ɵɵadvance(3);
785
- i0.ɵɵproperty("Count", ctx.categories.length);
786
- i0.ɵɵadvance();
787
- i0.ɵɵproperty("Count", ctx.getTotalTypeCount());
788
- i0.ɵɵadvance(8);
781
+ i0.ɵɵadvance(9);
789
782
  i0.ɵɵproperty("Loading", ctx.isLoading);
790
783
  i0.ɵɵadvance();
791
- i0.ɵɵconditional(ctx.UserCanCreate ? 13 : -1);
784
+ i0.ɵɵconditional(ctx.UserCanCreate ? 10 : -1);
792
785
  i0.ɵɵadvance(2);
793
786
  i0.ɵɵproperty("Value", ctx.searchText);
794
787
  i0.ɵɵadvance(2);
795
- i0.ɵɵconditional(ctx.isLoading ? 17 : -1);
788
+ i0.ɵɵconditional(ctx.isLoading ? 14 : -1);
796
789
  i0.ɵɵadvance();
797
- i0.ɵɵconditional(!ctx.isLoading ? 18 : -1);
798
- } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJPageSearchComponent, i1.MJStatBadgeComponent, i1.MJRefreshButtonComponent, i2.LoadingComponent, i3.CredentialCategoryEditPanelComponent, i4.SlicePipe], styles: ["\n\n.categories-layout[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n\n\n.tree-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container[_ngcontent-%COMP%] {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n\n\n.tree-node[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n\n\n.expand-btn[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder[_ngcontent-%COMP%] {\n width: 24px;\n flex-shrink: 0;\n}\n\n\n\n.node-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.node-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.node-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.node-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.node-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover .node-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-body[_ngcontent-%COMP%] {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n\n\n.detail-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n\n\n.description-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n\n\n.types-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.type-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.type-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.subcategories-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.subcategory-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n\n\n.detail-quick-actions[_ngcontent-%COMP%] {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions[_ngcontent-%COMP%] .btn-secondary[_ngcontent-%COMP%], \n.detail-quick-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n}\n\n\n\n.no-selection[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\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: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-border-strong);\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 0 20px 0;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n@media (max-width: 1024px) {\n .categories-layout[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .detail-panel[_ngcontent-%COMP%], \n .no-selection[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .categories-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%], \n .toolbar-right[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .search-container[_ngcontent-%COMP%] {\n max-width: none;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: flex-end;\n }\n}"], changeDetection: 0 });
790
+ i0.ɵɵconditional(!ctx.isLoading ? 15 : -1);
791
+ } }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderComponent, i1.MJPageLayoutComponent, i1.MJPageBodyComponent, i1.MJPageSearchComponent, i1.MJRefreshButtonComponent, i2.LoadingComponent, i3.CredentialCategoryEditPanelComponent, i4.SlicePipe], styles: ["\n\n.categories-layout[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n\n\n.tree-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container[_ngcontent-%COMP%] {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n\n\n.tree-node[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n\n\n.expand-btn[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder[_ngcontent-%COMP%] {\n width: 24px;\n flex-shrink: 0;\n}\n\n\n\n.node-icon[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.node-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.node-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.node-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.node-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node[_ngcontent-%COMP%]:hover .node-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n\n\n.detail-body[_ngcontent-%COMP%] {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n\n\n.detail-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%] {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n\n\n.description-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.types-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.subcategories-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n\n\n.types-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.type-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.type-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.subcategories-section[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.subcategory-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n\n\n.detail-quick-actions[_ngcontent-%COMP%] {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions[_ngcontent-%COMP%] .btn-secondary[_ngcontent-%COMP%], \n.detail-quick-actions[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-border-default);\n}\n\n\n\n.no-selection[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\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: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--mj-border-strong);\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 0 20px 0;\n}\n\n.btn-link[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n\n\n@media (max-width: 1024px) {\n .categories-layout[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .detail-panel[_ngcontent-%COMP%], \n .no-selection[_ngcontent-%COMP%] {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .categories-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left[_ngcontent-%COMP%], \n .toolbar-right[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .search-container[_ngcontent-%COMP%] {\n max-width: none;\n }\n\n .toolbar-right[_ngcontent-%COMP%] {\n justify-content: flex-end;\n }\n}"], changeDetection: 0 });
799
792
  };
800
793
  CredentialsCategoriesResourceComponent = __decorate([
801
794
  RegisterClass(BaseResourceComponent, 'CredentialsCategoriesResource')
@@ -803,7 +796,7 @@ CredentialsCategoriesResourceComponent = __decorate([
803
796
  export { CredentialsCategoriesResourceComponent };
804
797
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CredentialsCategoriesResourceComponent, [{
805
798
  type: Component,
806
- args: [{ standalone: false, selector: 'mj-credentials-categories-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Categories\"\n Icon=\"fa-solid fa-folder-tree\">\n <div meta>\n <mj-stat-badge\n [Count]=\"categories.length\"\n Label=\"categories\">\n </mj-stat-badge>\n <mj-stat-badge\n Icon=\"fa-solid fa-shapes\"\n [Count]=\"getTotalTypeCount()\"\n Label=\"types\">\n </mj-stat-badge>\n </div>\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"expandAll()\" title=\"Expand all\">\n <i class=\"fa-solid fa-expand\"></i> Expand\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"collapseAll()\" title=\"Collapse all\">\n <i class=\"fa-solid fa-compress\"></i> Collapse\n </button>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i> New Category\n </button>\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search categories...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading categories...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <div class=\"categories-layout\">\n <!-- Tree Container -->\n <div class=\"tree-panel\">\n @if (categoryTree.length > 0) {\n <div class=\"tree-container\">\n @for (node of getFlattenedNodes(); track node; let i = $index) {\n <div\n class=\"tree-node\"\n [class.selected]=\"IsNodeSelected(node)\"\n [style.padding-left.px]=\"12 + (node.level * 20)\"\n (click)=\"selectNode(node)\"\n >\n <div class=\"node-content\">\n @if (node.children.length > 0) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node, $event)\"\n >\n <i [class]=\"node.expanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (node.children.length === 0) {\n <span class=\"expand-placeholder\"></span>\n }\n <div class=\"node-icon\" [style.backgroundColor]=\"getCategoryColor(i) + '15'\" [style.color]=\"getCategoryColor(i)\">\n <i [class]=\"node.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"node-info\">\n <div class=\"node-name\">{{node.category.Name}}</div>\n @if (node.category.Description) {\n <div class=\"node-description\">\n {{node.category.Description | slice:0:50}}{{node.category.Description.length > 50 ? '...' : ''}}\n </div>\n }\n </div>\n <div class=\"node-badges\">\n @if (node.typeCount > 0) {\n <span class=\"badge types\">\n <i class=\"fa-solid fa-shapes\"></i>\n {{node.typeCount}}\n </span>\n }\n @if (node.children.length > 0) {\n <span class=\"badge children\">\n <i class=\"fa-solid fa-folder\"></i>\n {{node.children.length}}\n </span>\n }\n </div>\n <div class=\"node-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCategory(node, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete && node.children.length === 0 && node.typeCount === 0) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCategory(node, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (categoryTree.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </div>\n <h3>No Categories</h3>\n @if (searchText) {\n <p>\n No categories match your search.\n <button class=\"btn-link\" (click)=\"clearSearch()\">Clear search</button>\n </p>\n }\n @if (!searchText) {\n <p>\n Get started by creating your first category.\n </p>\n }\n @if (UserCanCreate && !searchText) {\n <button class=\"btn-primary\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Category\n </button>\n }\n </div>\n }\n </div>\n <!-- Detail Panel -->\n @if (selectedNode) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-icon\" [style.backgroundColor]=\"getCategoryColor(0) + '15'\" [style.color]=\"getCategoryColor(0)\">\n <i [class]=\"selectedNode.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"detail-title\">\n <h2>{{selectedNode.category.Name}}</h2>\n @if (selectedNode.level > 0) {\n <span class=\"level-badge\">\n Level {{selectedNode.level + 1}}\n </span>\n }\n </div>\n <div class=\"detail-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"editCategory(selectedNode)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n <button class=\"close-btn\" (click)=\"selectedNode = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-body\">\n <!-- Stats -->\n <div class=\"detail-stats\">\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.typeCount}}</div>\n <div class=\"stat-label\">Credential Types</div>\n </div>\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.children.length}}</div>\n <div class=\"stat-label\">Subcategories</div>\n </div>\n </div>\n <!-- Description -->\n @if (selectedNode.category.Description) {\n <div class=\"description-section\">\n <h3>\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h3>\n <p class=\"description\">{{selectedNode.category.Description}}</p>\n </div>\n }\n <!-- Types in Category -->\n @if (selectedNode.typeCount > 0) {\n <div class=\"types-section\">\n <h3>\n <i class=\"fa-solid fa-shapes\"></i>\n Credential Types\n </h3>\n <div class=\"type-list\">\n @for (type of getTypesForCategory(selectedNode.category.Name); track type) {\n <div class=\"type-item\">\n <div class=\"type-icon\">\n <i [class]=\"type.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.Name}}</div>\n @if (type.Description) {\n <div class=\"type-desc\">{{type.Description | slice:0:60}}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Subcategories -->\n @if (selectedNode.children.length > 0) {\n <div class=\"subcategories-section\">\n <h3>\n <i class=\"fa-solid fa-folder-tree\"></i>\n Subcategories\n </h3>\n <div class=\"subcategory-list\">\n @for (child of selectedNode.children; track child) {\n <div class=\"subcategory-item\" (click)=\"selectNode(child)\">\n <i [class]=\"child.category.IconClass || 'fa-solid fa-folder'\"></i>\n <span>{{child.category.Name}}</span>\n @if (child.typeCount > 0) {\n <span class=\"sub-type-count\">{{child.typeCount}} types</span>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Quick Actions -->\n <div class=\"detail-quick-actions\">\n @if (selectedNode.typeCount > 0) {\n <button\n class=\"btn-secondary\"\n (click)=\"viewTypesForCategory(selectedNode.category.Name)\"\n >\n <i class=\"fa-solid fa-shapes\"></i>\n View Types\n </button>\n }\n <button\n class=\"btn-primary\"\n (click)=\"createCredentialWithCategory(selectedNode.category.ID)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n </div>\n </div>\n </div>\n }\n <!-- No Selection -->\n @if (!selectedNode && categoryTree.length > 0) {\n <div class=\"no-selection\">\n <div class=\"no-selection-icon\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n </div>\n <h3>Select a Category</h3>\n <p>Click on a category to view its details and credential types</p>\n </div>\n }\n </div>\n }\n </mj-page-body>\n\n <!-- Category Edit Panel -->\n <mj-credential-category-edit-panel\n #categoryEditPanel\n (saved)=\"onCategorySaved($any($event))\"\n (deleted)=\"onCategoryDeleted($any($event))\"\n ></mj-credential-category-edit-panel>\n</mj-page-layout>\n", styles: ["/* Layout */\n.categories-layout {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n/* Tree Panel */\n.tree-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n/* Tree Node */\n.tree-node {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node:last-child {\n border-bottom: none;\n}\n\n.tree-node:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n/* Expand Button */\n.expand-btn {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn i {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder {\n width: 24px;\n flex-shrink: 0;\n}\n\n/* Node Icon */\n.node-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon i {\n font-size: 14px;\n}\n\n/* Node Info */\n.node-info {\n flex: 1;\n min-width: 0;\n}\n\n.node-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Node Badges */\n.node-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge i {\n font-size: 10px;\n}\n\n/* Node Actions */\n.node-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node:hover .node-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n/* Detail Panel */\n.detail-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon i {\n font-size: 20px;\n}\n\n.detail-title {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title h2 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n/* Detail Body */\n.detail-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Detail Stats */\n.detail-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat .stat-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat .stat-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n/* Description Section */\n.description-section {\n margin-bottom: 20px;\n}\n\n.description-section h3,\n.types-section h3,\n.subcategories-section h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section h3 i,\n.types-section h3 i,\n.subcategories-section h3 i {\n font-size: 12px;\n}\n\n.description {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n/* Types Section */\n.types-section {\n margin-bottom: 20px;\n}\n\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Subcategories Section */\n.subcategories-section {\n margin-bottom: 20px;\n}\n\n.subcategory-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item span {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n/* Quick Actions */\n.detail-quick-actions {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions .btn-secondary,\n.detail-quick-actions .btn-primary {\n flex: 1;\n}\n\n.btn-secondary {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--mj-border-default);\n}\n\n/* No Selection State */\n.no-selection {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon i {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection h3 {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection p {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\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: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: var(--mj-border-strong);\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 0 20px 0;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .detail-panel,\n .no-selection {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container {\n padding: 16px;\n }\n\n .categories-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left,\n .toolbar-right {\n width: 100%;\n }\n\n .search-container {\n max-width: none;\n }\n\n .toolbar-right {\n justify-content: flex-end;\n }\n}\n"] }]
799
+ args: [{ standalone: false, selector: 'mj-credentials-categories-resource', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Categories\"\n Icon=\"fa-solid fa-folder-tree\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n The categories count mirrored the visible tree; the cross-entity\n types count belongs on the Types page, not here. -->\n\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"expandAll()\" title=\"Expand all\">\n <i class=\"fa-solid fa-expand\"></i> Expand\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"collapseAll()\" title=\"Collapse all\">\n <i class=\"fa-solid fa-compress\"></i> Collapse\n </button>\n <mj-refresh-button [Loading]=\"isLoading\" (Clicked)=\"refresh()\"></mj-refresh-button>\n @if (UserCanCreate) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i> New Category\n </button>\n }\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search categories...\"\n [Value]=\"searchText\"\n (ValueChange)=\"onSearchChange($event)\">\n </mj-page-search>\n </div>\n </mj-page-header>\n\n <mj-page-body>\n @if (isLoading) {\n <mj-loading text=\"Loading categories...\"></mj-loading>\n }\n\n @if (!isLoading) {\n <div class=\"categories-layout\">\n <!-- Tree Container -->\n <div class=\"tree-panel\">\n @if (categoryTree.length > 0) {\n <div class=\"tree-container\">\n @for (node of getFlattenedNodes(); track node; let i = $index) {\n <div\n class=\"tree-node\"\n [class.selected]=\"IsNodeSelected(node)\"\n [style.padding-left.px]=\"12 + (node.level * 20)\"\n (click)=\"selectNode(node)\"\n >\n <div class=\"node-content\">\n @if (node.children.length > 0) {\n <button\n class=\"expand-btn\"\n (click)=\"toggleExpand(node, $event)\"\n >\n <i [class]=\"node.expanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n </button>\n }\n @if (node.children.length === 0) {\n <span class=\"expand-placeholder\"></span>\n }\n <div class=\"node-icon\" [style.backgroundColor]=\"getCategoryColor(i) + '15'\" [style.color]=\"getCategoryColor(i)\">\n <i [class]=\"node.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"node-info\">\n <div class=\"node-name\">{{node.category.Name}}</div>\n @if (node.category.Description) {\n <div class=\"node-description\">\n {{node.category.Description | slice:0:50}}{{node.category.Description.length > 50 ? '...' : ''}}\n </div>\n }\n </div>\n <div class=\"node-badges\">\n @if (node.typeCount > 0) {\n <span class=\"badge types\">\n <i class=\"fa-solid fa-shapes\"></i>\n {{node.typeCount}}\n </span>\n }\n @if (node.children.length > 0) {\n <span class=\"badge children\">\n <i class=\"fa-solid fa-folder\"></i>\n {{node.children.length}}\n </span>\n }\n </div>\n <div class=\"node-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"editCategory(node, $event)\"\n title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n @if (UserCanDelete && node.children.length === 0 && node.typeCount === 0) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"deleteCategory(node, $event)\"\n title=\"Delete\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n @if (categoryTree.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-open\"></i>\n </div>\n <h3>No Categories</h3>\n @if (searchText) {\n <p>\n No categories match your search.\n <button class=\"btn-link\" (click)=\"clearSearch()\">Clear search</button>\n </p>\n }\n @if (!searchText) {\n <p>\n Get started by creating your first category.\n </p>\n }\n @if (UserCanCreate && !searchText) {\n <button class=\"btn-primary\" (click)=\"createNewCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Category\n </button>\n }\n </div>\n }\n </div>\n <!-- Detail Panel -->\n @if (selectedNode) {\n <div class=\"detail-panel\">\n <div class=\"detail-header\">\n <div class=\"detail-icon\" [style.backgroundColor]=\"getCategoryColor(0) + '15'\" [style.color]=\"getCategoryColor(0)\">\n <i [class]=\"selectedNode.category.IconClass || 'fa-solid fa-folder'\"></i>\n </div>\n <div class=\"detail-title\">\n <h2>{{selectedNode.category.Name}}</h2>\n @if (selectedNode.level > 0) {\n <span class=\"level-badge\">\n Level {{selectedNode.level + 1}}\n </span>\n }\n </div>\n <div class=\"detail-actions\">\n @if (UserCanUpdate) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"editCategory(selectedNode)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n <button class=\"close-btn\" (click)=\"selectedNode = null\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n <div class=\"detail-body\">\n <!-- Stats -->\n <div class=\"detail-stats\">\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.typeCount}}</div>\n <div class=\"stat-label\">Credential Types</div>\n </div>\n <div class=\"detail-stat\">\n <div class=\"stat-value\">{{selectedNode.children.length}}</div>\n <div class=\"stat-label\">Subcategories</div>\n </div>\n </div>\n <!-- Description -->\n @if (selectedNode.category.Description) {\n <div class=\"description-section\">\n <h3>\n <i class=\"fa-solid fa-align-left\"></i>\n Description\n </h3>\n <p class=\"description\">{{selectedNode.category.Description}}</p>\n </div>\n }\n <!-- Types in Category -->\n @if (selectedNode.typeCount > 0) {\n <div class=\"types-section\">\n <h3>\n <i class=\"fa-solid fa-shapes\"></i>\n Credential Types\n </h3>\n <div class=\"type-list\">\n @for (type of getTypesForCategory(selectedNode.category.Name); track type) {\n <div class=\"type-item\">\n <div class=\"type-icon\">\n <i [class]=\"type.IconClass || 'fa-solid fa-key'\"></i>\n </div>\n <div class=\"type-info\">\n <div class=\"type-name\">{{type.Name}}</div>\n @if (type.Description) {\n <div class=\"type-desc\">{{type.Description | slice:0:60}}</div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Subcategories -->\n @if (selectedNode.children.length > 0) {\n <div class=\"subcategories-section\">\n <h3>\n <i class=\"fa-solid fa-folder-tree\"></i>\n Subcategories\n </h3>\n <div class=\"subcategory-list\">\n @for (child of selectedNode.children; track child) {\n <div class=\"subcategory-item\" (click)=\"selectNode(child)\">\n <i [class]=\"child.category.IconClass || 'fa-solid fa-folder'\"></i>\n <span>{{child.category.Name}}</span>\n @if (child.typeCount > 0) {\n <span class=\"sub-type-count\">{{child.typeCount}} types</span>\n }\n </div>\n }\n </div>\n </div>\n }\n <!-- Quick Actions -->\n <div class=\"detail-quick-actions\">\n @if (selectedNode.typeCount > 0) {\n <button\n class=\"btn-secondary\"\n (click)=\"viewTypesForCategory(selectedNode.category.Name)\"\n >\n <i class=\"fa-solid fa-shapes\"></i>\n View Types\n </button>\n }\n <button\n class=\"btn-primary\"\n (click)=\"createCredentialWithCategory(selectedNode.category.ID)\"\n >\n <i class=\"fa-solid fa-plus\"></i>\n Create Credential\n </button>\n </div>\n </div>\n </div>\n }\n <!-- No Selection -->\n @if (!selectedNode && categoryTree.length > 0) {\n <div class=\"no-selection\">\n <div class=\"no-selection-icon\">\n <i class=\"fa-solid fa-hand-pointer\"></i>\n </div>\n <h3>Select a Category</h3>\n <p>Click on a category to view its details and credential types</p>\n </div>\n }\n </div>\n }\n </mj-page-body>\n\n <!-- Category Edit Panel -->\n <mj-credential-category-edit-panel\n #categoryEditPanel\n (saved)=\"onCategorySaved($any($event))\"\n (deleted)=\"onCategoryDeleted($any($event))\"\n ></mj-credential-category-edit-panel>\n</mj-page-layout>\n", styles: ["/* Layout */\n.categories-layout {\n display: grid;\n grid-template-columns: 1fr 380px;\n gap: 20px;\n min-height: 500px;\n}\n\n/* Tree Panel */\n.tree-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n}\n\n.tree-container {\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n}\n\n/* Tree Node */\n.tree-node {\n display: flex;\n align-items: center;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.tree-node:last-child {\n border-bottom: none;\n}\n\n.tree-node:hover {\n background: var(--mj-bg-surface-card);\n}\n\n.tree-node.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.node-content {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n width: 100%;\n gap: 8px;\n}\n\n/* Expand Button */\n.expand-btn {\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: none;\n background: transparent;\n cursor: pointer;\n color: var(--mj-text-disabled);\n border-radius: 4px;\n transition: all 0.2s ease;\n flex-shrink: 0;\n}\n\n.expand-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n.expand-btn i {\n font-size: 10px;\n transition: transform 0.2s ease;\n}\n\n.expand-placeholder {\n width: 24px;\n flex-shrink: 0;\n}\n\n/* Node Icon */\n.node-icon {\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n flex-shrink: 0;\n}\n\n.node-icon i {\n font-size: 14px;\n}\n\n/* Node Info */\n.node-info {\n flex: 1;\n min-width: 0;\n}\n\n.node-name {\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.3;\n}\n\n.node-description {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Node Badges */\n.node-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.badge {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.badge.types {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n\n.badge.children {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n\n.badge i {\n font-size: 10px;\n}\n\n/* Node Actions */\n.node-actions {\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s ease;\n flex-shrink: 0;\n}\n\n.tree-node:hover .node-actions {\n opacity: 1;\n}\n\n.action-btn {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 6px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.action-btn.danger:hover {\n background: var(--mj-status-error);\n color: var(--mj-text-inverse);\n}\n\n.action-btn i {\n font-size: 12px;\n}\n\n/* Detail Panel */\n.detail-panel {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 20px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.detail-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 12px;\n flex-shrink: 0;\n}\n\n.detail-icon i {\n font-size: 20px;\n}\n\n.detail-title {\n flex: 1;\n min-width: 0;\n}\n\n.detail-title h2 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0;\n line-height: 1.3;\n}\n\n.level-badge {\n display: inline-block;\n margin-top: 4px;\n padding: 2px 8px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n}\n\n.detail-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.close-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n}\n\n/* Detail Body */\n.detail-body {\n padding: 20px;\n flex: 1;\n overflow-y: auto;\n}\n\n/* Detail Stats */\n.detail-stats {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n margin-bottom: 20px;\n}\n\n.detail-stat {\n background: var(--mj-bg-surface-card);\n border-radius: 10px;\n padding: 16px;\n text-align: center;\n}\n\n.detail-stat .stat-value {\n font-size: 28px;\n font-weight: 700;\n color: var(--mj-brand-primary);\n line-height: 1;\n}\n\n.detail-stat .stat-label {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 4px;\n}\n\n/* Description Section */\n.description-section {\n margin-bottom: 20px;\n}\n\n.description-section h3,\n.types-section h3,\n.subcategories-section h3 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin: 0 0 12px 0;\n}\n\n.description-section h3 i,\n.types-section h3 i,\n.subcategories-section h3 i {\n font-size: 12px;\n}\n\n.description {\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.6;\n margin: 0;\n}\n\n/* Types Section */\n.types-section {\n margin-bottom: 20px;\n}\n\n.type-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.type-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n transition: all 0.2s ease;\n}\n\n.type-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.type-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n border-radius: 6px;\n flex-shrink: 0;\n}\n\n.type-icon i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n.type-info {\n flex: 1;\n min-width: 0;\n}\n\n.type-name {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.type-desc {\n font-size: 11px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Subcategories Section */\n.subcategories-section {\n margin-bottom: 20px;\n}\n\n.subcategory-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.subcategory-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.subcategory-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.subcategory-item i {\n font-size: 14px;\n color: var(--mj-brand-primary);\n}\n\n.subcategory-item span {\n flex: 1;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n\n.sub-type-count {\n font-size: 11px;\n color: var(--mj-text-secondary);\n background: var(--mj-border-default);\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n/* Quick Actions */\n.detail-quick-actions {\n margin-top: auto;\n padding-top: 16px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n display: flex;\n gap: 8px;\n}\n\n.detail-quick-actions .btn-secondary,\n.detail-quick-actions .btn-primary {\n flex: 1;\n}\n\n.btn-secondary {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border: none;\n border-radius: 8px;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-primary);\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.btn-secondary:hover {\n background: var(--mj-border-default);\n}\n\n/* No Selection State */\n.no-selection {\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n}\n\n.no-selection-icon {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 16px;\n}\n\n.no-selection-icon i {\n font-size: 24px;\n color: var(--mj-text-disabled);\n}\n\n.no-selection h3 {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 8px 0;\n}\n\n.no-selection p {\n font-size: 13px;\n color: var(--mj-text-secondary);\n margin: 0;\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: 64px 24px;\n background: var(--mj-bg-surface);\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n text-align: center;\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 32px;\n color: var(--mj-border-strong);\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 0 20px 0;\n}\n\n.btn-link {\n background: none;\n border: none;\n color: var(--mj-brand-primary);\n cursor: pointer;\n font-size: inherit;\n padding: 0;\n text-decoration: underline;\n}\n\n.btn-link:hover {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .categories-layout {\n grid-template-columns: 1fr;\n }\n\n .detail-panel,\n .no-selection {\n display: none;\n }\n}\n\n@media (max-width: 768px) {\n .categories-container {\n padding: 16px;\n }\n\n .categories-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 16px;\n }\n\n .toolbar {\n flex-direction: column;\n gap: 12px;\n }\n\n .toolbar-left,\n .toolbar-right {\n width: 100%;\n }\n\n .search-container {\n max-width: none;\n }\n\n .toolbar-right {\n justify-content: flex-end;\n }\n}\n"] }]
807
800
  }], () => [{ type: i0.ChangeDetectorRef }], { categoryEditPanel: [{
808
801
  type: ViewChild,
809
802
  args: ['categoryEditPanel']