@memberjunction/ng-conversations 5.22.0 → 5.23.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 (115) hide show
  1. package/README.md +20 -0
  2. package/dist/lib/components/artifact/artifact-share-modal.component.d.ts.map +1 -1
  3. package/dist/lib/components/artifact/artifact-share-modal.component.js +58 -60
  4. package/dist/lib/components/artifact/artifact-share-modal.component.js.map +1 -1
  5. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -1
  6. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +31 -32
  7. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -1
  8. package/dist/lib/components/collection/artifact-create-modal.component.d.ts +1 -0
  9. package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -1
  10. package/dist/lib/components/collection/artifact-create-modal.component.js +81 -63
  11. package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -1
  12. package/dist/lib/components/collection/collection-artifact-card.component.js +7 -6
  13. package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -1
  14. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  15. package/dist/lib/components/collection/collection-form-modal.component.js +22 -22
  16. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  17. package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -1
  18. package/dist/lib/components/collection/collection-share-modal.component.js +65 -67
  19. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -1
  20. package/dist/lib/components/collection/collection-view.component.js +71 -59
  21. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  22. package/dist/lib/components/collection/collections-full-view.component.js +7 -8
  23. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  24. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +25 -28
  25. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  26. package/dist/lib/components/conversation/conversation-chat-area.component.js +478 -572
  27. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  28. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts +7 -1
  29. package/dist/lib/components/conversation/conversation-empty-state.component.d.ts.map +1 -1
  30. package/dist/lib/components/conversation/conversation-empty-state.component.js +101 -52
  31. package/dist/lib/components/conversation/conversation-empty-state.component.js.map +1 -1
  32. package/dist/lib/components/conversation/conversation-list.component.d.ts +3 -3
  33. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  34. package/dist/lib/components/conversation/conversation-list.component.js +44 -30
  35. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  36. package/dist/lib/components/dialogs/input-dialog.component.d.ts +0 -3
  37. package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -1
  38. package/dist/lib/components/dialogs/input-dialog.component.js +12 -17
  39. package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -1
  40. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -1
  41. package/dist/lib/components/export/export-modal.component.js +23 -23
  42. package/dist/lib/components/export/export-modal.component.js.map +1 -1
  43. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -1
  44. package/dist/lib/components/members/members-modal.component.js +96 -85
  45. package/dist/lib/components/members/members-modal.component.js.map +1 -1
  46. package/dist/lib/components/message/actionable-commands.component.d.ts +2 -2
  47. package/dist/lib/components/message/actionable-commands.component.d.ts.map +1 -1
  48. package/dist/lib/components/message/actionable-commands.component.js +9 -10
  49. package/dist/lib/components/message/actionable-commands.component.js.map +1 -1
  50. package/dist/lib/components/message/conversation-message-rating.component.d.ts +1 -1
  51. package/dist/lib/components/message/conversation-message-rating.component.d.ts.map +1 -1
  52. package/dist/lib/components/message/conversation-message-rating.component.js +1 -1
  53. package/dist/lib/components/message/conversation-message-rating.component.js.map +1 -1
  54. package/dist/lib/components/message/message-input.component.d.ts +6 -4
  55. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  56. package/dist/lib/components/message/message-input.component.js +31 -21
  57. package/dist/lib/components/message/message-input.component.js.map +1 -1
  58. package/dist/lib/components/message/message-item.component.d.ts +14 -2
  59. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  60. package/dist/lib/components/message/message-item.component.js +31 -28
  61. package/dist/lib/components/message/message-item.component.js.map +1 -1
  62. package/dist/lib/components/message/message-list.component.d.ts +1 -2
  63. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  64. package/dist/lib/components/message/message-list.component.js +1 -1
  65. package/dist/lib/components/message/message-list.component.js.map +1 -1
  66. package/dist/lib/components/overlay/chat-overlay.component.d.ts +157 -0
  67. package/dist/lib/components/overlay/chat-overlay.component.d.ts.map +1 -0
  68. package/dist/lib/components/overlay/chat-overlay.component.js +462 -0
  69. package/dist/lib/components/overlay/chat-overlay.component.js.map +1 -0
  70. package/dist/lib/components/project/project-form-modal.component.d.ts +2 -2
  71. package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -1
  72. package/dist/lib/components/project/project-form-modal.component.js +24 -28
  73. package/dist/lib/components/project/project-form-modal.component.js.map +1 -1
  74. package/dist/lib/components/project/project-selector.component.d.ts +4 -3
  75. package/dist/lib/components/project/project-selector.component.d.ts.map +1 -1
  76. package/dist/lib/components/project/project-selector.component.js +78 -115
  77. package/dist/lib/components/project/project-selector.component.js.map +1 -1
  78. package/dist/lib/components/search/search-panel.component.js +84 -84
  79. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  80. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -1
  81. package/dist/lib/components/share/share-modal.component.js +77 -68
  82. package/dist/lib/components/share/share-modal.component.js.map +1 -1
  83. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +2 -3
  84. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  85. package/dist/lib/components/workspace/conversation-workspace.component.js +29 -32
  86. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  87. package/dist/lib/conversations.module.d.ts +19 -26
  88. package/dist/lib/conversations.module.d.ts.map +1 -1
  89. package/dist/lib/conversations.module.js +20 -43
  90. package/dist/lib/conversations.module.js.map +1 -1
  91. package/dist/lib/services/active-tasks.service.d.ts +1 -3
  92. package/dist/lib/services/active-tasks.service.d.ts.map +1 -1
  93. package/dist/lib/services/active-tasks.service.js +6 -9
  94. package/dist/lib/services/active-tasks.service.js.map +1 -1
  95. package/dist/lib/services/conversation-agent.service.d.ts +9 -4
  96. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  97. package/dist/lib/services/conversation-agent.service.js +83 -61
  98. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  99. package/dist/lib/services/dialog.service.d.ts +6 -6
  100. package/dist/lib/services/dialog.service.d.ts.map +1 -1
  101. package/dist/lib/services/dialog.service.js +26 -23
  102. package/dist/lib/services/dialog.service.js.map +1 -1
  103. package/dist/public-api.d.ts +1 -2
  104. package/dist/public-api.d.ts.map +1 -1
  105. package/dist/public-api.js +1 -2
  106. package/dist/public-api.js.map +1 -1
  107. package/package.json +21 -27
  108. package/dist/lib/models/conversation-complete-query.model.d.ts +0 -95
  109. package/dist/lib/models/conversation-complete-query.model.d.ts.map +0 -1
  110. package/dist/lib/models/conversation-complete-query.model.js +0 -22
  111. package/dist/lib/models/conversation-complete-query.model.js.map +0 -1
  112. package/dist/lib/services/conversation-data.service.d.ts +0 -134
  113. package/dist/lib/services/conversation-data.service.d.ts.map +0 -1
  114. package/dist/lib/services/conversation-data.service.js +0 -287
  115. package/dist/lib/services/conversation-data.service.js.map +0 -1
package/README.md CHANGED
@@ -97,6 +97,26 @@ The chat area handles message display, input, and agent interactions:
97
97
  </mj-conversation-chat-area>
98
98
  ```
99
99
 
100
+ ### Chat Overlay
101
+
102
+ A floating chat panel (bottom-right corner) that wraps the chat area for persistent agent access across the application. Collapses to a bubble icon, expands to a full chat panel.
103
+
104
+ ```html
105
+ <mj-chat-agents-overlay
106
+ [IsVisible]="!isChatRoute"
107
+ (ToolExecuted)="onToolExecuted($event)"
108
+ (OpenEntityRecord)="onOpenRecord($event)"
109
+ (OpenFullWorkspace)="onExpandToWorkspace($event)">
110
+ </mj-chat-agents-overlay>
111
+ ```
112
+
113
+ The overlay is generic — it raises events for navigation and tool execution. The consuming application (e.g., MJExplorer) handles those events with app-specific logic like `NavigationService.OpenEntityRecord()`.
114
+
115
+ **Related packages:**
116
+ - [`@memberjunction/ai-agent-client`](../../AI/AgentsClient/README.md) — Core agent SDK (framework-agnostic, GraphQL transport, tool registry)
117
+ - [`@memberjunction/ng-agent-client`](../agent-client/README.md) — Angular wrapper for the agent SDK
118
+ - [`@memberjunction/core-entities`](../../../MJCoreEntities/README.md) — ConversationEngine for centralized conversation data
119
+
100
120
  ### Message Components
101
121
 
102
122
  #### Message List
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-share-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/artifact/artifact-share-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAK5H,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAClI,OAAO,EAAuB,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;;AAExF,UAAU,iBAAkB,SAAQ,kBAAkB;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,qBAAqB,CAAC;CAC7C;AAED,qBAyLa,2BAA4B,YAAW,MAAM,EAAE,SAAS;IAoB7D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IApBN,MAAM,EAAE,OAAO,CAAS;IACxB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACzC,WAAW,EAAG,QAAQ,CAAC;IAEtB,KAAK,qBAA4B;IACjC,SAAS,qBAA4B;IAE/C,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtC,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC7C,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,oBAAoB,EAAE,OAAO,CAAS;IAEtC,cAAc,EAAE,qBAAqB,CAInC;gBAGU,iBAAiB,EAAE,yBAAyB,EAC5C,GAAG,EAAE,iBAAiB;IAG5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAW1C,eAAe;YAgBf,0BAA0B;IA0CxC,kBAAkB,IAAI,MAAM,EAAE;IAS9B,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAK5C,gBAAgB,IAAI,IAAI;IAUlB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDhC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAKrD,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAU3C,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C9D,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAetE,QAAQ,IAAI,IAAI;yCAvPP,2BAA2B;2CAA3B,2BAA2B;CA0PvC"}
1
+ {"version":3,"file":"artifact-share-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/artifact/artifact-share-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI5H,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAClI,OAAO,EAAuB,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;;AAExF,UAAU,iBAAkB,SAAQ,kBAAkB;IAClD,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,qBAAqB,CAAC;CAC7C;AAED,qBA0La,2BAA4B,YAAW,MAAM,EAAE,SAAS;IAoB7D,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IApBN,MAAM,EAAE,OAAO,CAAS;IACxB,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IACzC,WAAW,EAAG,QAAQ,CAAC;IAEtB,KAAK,qBAA4B;IACjC,SAAS,qBAA4B;IAE/C,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtC,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC7C,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,oBAAoB,EAAE,OAAO,CAAS;IAEtC,cAAc,EAAE,qBAAqB,CAInC;gBAGU,iBAAiB,EAAE,yBAAyB,EAC5C,GAAG,EAAE,iBAAiB;IAG5B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAOzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAW1C,eAAe;YAgBf,0BAA0B;IA0CxC,kBAAkB,IAAI,MAAM,EAAE;IAS9B,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAK5C,gBAAgB,IAAI,IAAI;IAUlB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAgDhC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAKrD,YAAY,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAU3C,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C9D,kBAAkB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAetE,QAAQ,IAAI,IAAI;yCAvPP,2BAA2B;2CAA3B,2BAA2B;CA0PvC"}
@@ -1,21 +1,18 @@
1
1
  import { Component, Input, Output, EventEmitter } from '@angular/core';
2
2
  import { FormsModule } from '@angular/forms';
3
- import { WindowModule } from '@progress/kendo-angular-dialog';
4
- import { ButtonModule } from '@progress/kendo-angular-buttons';
3
+ import { MJWindowComponent, MJButtonDirective } from '@memberjunction/ng-ui-components';
5
4
  import { UserPickerComponent } from '../shared/user-picker.component';
6
5
  import * as i0 from "@angular/core";
7
6
  import * as i1 from "../../services/artifact-permission.service";
8
7
  import * as i2 from "@angular/forms";
9
- import * as i3 from "@progress/kendo-angular-dialog";
10
- import * as i4 from "@progress/kendo-angular-buttons";
11
8
  const _forTrack0 = ($index, $item) => $item.id;
12
9
  function ArtifactShareModalComponent_Conditional_0_Conditional_7_Conditional_17_Template(rf, ctx) { if (rf & 1) {
13
10
  const _r4 = i0.ɵɵgetCurrentView();
14
- i0.ɵɵelementStart(0, "label", 26)(1, "input", 31);
11
+ i0.ɵɵelementStart(0, "label", 26)(1, "input", 30);
15
12
  i0.ɵɵtwoWayListener("ngModelChange", function ArtifactShareModalComponent_Conditional_0_Conditional_7_Conditional_17_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.newPermissions.canShare, $event) || (ctx_r1.newPermissions.canShare = $event); return i0.ɵɵresetView($event); });
16
13
  i0.ɵɵelementEnd();
17
14
  i0.ɵɵelementStart(2, "span", 23);
18
- i0.ɵɵelement(3, "i", 32);
15
+ i0.ɵɵelement(3, "i", 31);
19
16
  i0.ɵɵtext(4, " Share ");
20
17
  i0.ɵɵelementEnd();
21
18
  i0.ɵɵelementStart(5, "span", 25);
@@ -28,11 +25,11 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_7_Conditional_17_
28
25
  } }
29
26
  function ArtifactShareModalComponent_Conditional_0_Conditional_7_Conditional_18_Template(rf, ctx) { if (rf & 1) {
30
27
  const _r5 = i0.ɵɵgetCurrentView();
31
- i0.ɵɵelementStart(0, "label", 26)(1, "input", 31);
28
+ i0.ɵɵelementStart(0, "label", 26)(1, "input", 30);
32
29
  i0.ɵɵtwoWayListener("ngModelChange", function ArtifactShareModalComponent_Conditional_0_Conditional_7_Conditional_18_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.newPermissions.canEdit, $event) || (ctx_r1.newPermissions.canEdit = $event); return i0.ɵɵresetView($event); });
33
30
  i0.ɵɵelementEnd();
34
31
  i0.ɵɵelementStart(2, "span", 23);
35
- i0.ɵɵelement(3, "i", 33);
32
+ i0.ɵɵelement(3, "i", 32);
36
33
  i0.ɵɵtext(4, " Edit ");
37
34
  i0.ɵɵelementEnd();
38
35
  i0.ɵɵelementStart(5, "span", 25);
@@ -71,7 +68,7 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_7_Template(rf, ct
71
68
  i0.ɵɵelement(21, "i", 29);
72
69
  i0.ɵɵtext(22, " Add User ");
73
70
  i0.ɵɵelementEnd();
74
- i0.ɵɵelementStart(23, "button", 30);
71
+ i0.ɵɵelementStart(23, "button", 13);
75
72
  i0.ɵɵlistener("click", function ArtifactShareModalComponent_Conditional_0_Conditional_7_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onClearSelection()); });
76
73
  i0.ɵɵtext(24, " Cancel ");
77
74
  i0.ɵɵelementEnd()()();
@@ -92,13 +89,13 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_7_Template(rf, ct
92
89
  } }
93
90
  function ArtifactShareModalComponent_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
94
91
  i0.ɵɵelementStart(0, "div", 10);
95
- i0.ɵɵelement(1, "i", 34);
92
+ i0.ɵɵelement(1, "i", 33);
96
93
  i0.ɵɵelementStart(2, "p");
97
94
  i0.ɵɵtext(3, "Not shared with anyone yet");
98
95
  i0.ɵɵelementEnd()();
99
96
  } }
100
97
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
101
- i0.ɵɵelementStart(0, "span", 38);
98
+ i0.ɵɵelementStart(0, "span", 37);
102
99
  i0.ɵɵtext(1);
103
100
  i0.ɵɵelementEnd();
104
101
  } if (rf & 2) {
@@ -107,24 +104,24 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditio
107
104
  i0.ɵɵtextInterpolate1("shared by ", permission_r6.sharedByUserName);
108
105
  } }
109
106
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Conditional_4_Template(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵelementStart(0, "span", 42);
111
- i0.ɵɵelement(1, "i", 32);
107
+ i0.ɵɵelementStart(0, "span", 41);
108
+ i0.ɵɵelement(1, "i", 31);
112
109
  i0.ɵɵtext(2, " Share ");
113
110
  i0.ɵɵelementEnd();
114
111
  } }
115
112
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Conditional_5_Template(rf, ctx) { if (rf & 1) {
116
- i0.ɵɵelementStart(0, "span", 42);
117
- i0.ɵɵelement(1, "i", 33);
113
+ i0.ɵɵelementStart(0, "span", 41);
114
+ i0.ɵɵelement(1, "i", 32);
118
115
  i0.ɵɵtext(2, " Edit ");
119
116
  i0.ɵɵelementEnd();
120
117
  } }
121
118
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
122
- i0.ɵɵelementStart(0, "div", 39)(1, "span", 42);
119
+ i0.ɵɵelementStart(0, "div", 38)(1, "span", 41);
123
120
  i0.ɵɵelement(2, "i", 24);
124
121
  i0.ɵɵtext(3, " Read ");
125
122
  i0.ɵɵelementEnd();
126
- i0.ɵɵconditionalCreate(4, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Conditional_4_Template, 3, 0, "span", 42);
127
- i0.ɵɵconditionalCreate(5, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Conditional_5_Template, 3, 0, "span", 42);
123
+ i0.ɵɵconditionalCreate(4, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Conditional_4_Template, 3, 0, "span", 41);
124
+ i0.ɵɵconditionalCreate(5, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Conditional_5_Template, 3, 0, "span", 41);
128
125
  i0.ɵɵelementEnd();
129
126
  } if (rf & 2) {
130
127
  const permission_r6 = i0.ɵɵnextContext().$implicit;
@@ -135,7 +132,7 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditio
135
132
  } }
136
133
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_5_Template(rf, ctx) { if (rf & 1) {
137
134
  const _r7 = i0.ɵɵgetCurrentView();
138
- i0.ɵɵelementStart(0, "label", 44)(1, "input", 31);
135
+ i0.ɵɵelementStart(0, "label", 43)(1, "input", 30);
139
136
  i0.ɵɵtwoWayListener("ngModelChange", function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_5_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r7); const permission_r6 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(permission_r6.editingPermissions.canShare, $event) || (permission_r6.editingPermissions.canShare = $event); return i0.ɵɵresetView($event); });
140
137
  i0.ɵɵelementEnd();
141
138
  i0.ɵɵelementStart(2, "span");
@@ -148,7 +145,7 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditio
148
145
  } }
149
146
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
150
147
  const _r8 = i0.ɵɵgetCurrentView();
151
- i0.ɵɵelementStart(0, "label", 44)(1, "input", 31);
148
+ i0.ɵɵelementStart(0, "label", 43)(1, "input", 30);
152
149
  i0.ɵɵtwoWayListener("ngModelChange", function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_6_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r8); const permission_r6 = i0.ɵɵnextContext(2).$implicit; i0.ɵɵtwoWayBindingSet(permission_r6.editingPermissions.canEdit, $event) || (permission_r6.editingPermissions.canEdit = $event); return i0.ɵɵresetView($event); });
153
150
  i0.ɵɵelementEnd();
154
151
  i0.ɵɵelementStart(2, "span");
@@ -160,13 +157,13 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditio
160
157
  i0.ɵɵtwoWayProperty("ngModel", permission_r6.editingPermissions.canEdit);
161
158
  } }
162
159
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
163
- i0.ɵɵelementStart(0, "div", 40)(1, "label", 43);
160
+ i0.ɵɵelementStart(0, "div", 39)(1, "label", 42);
164
161
  i0.ɵɵelement(2, "input", 22);
165
162
  i0.ɵɵelementStart(3, "span");
166
163
  i0.ɵɵtext(4, "Read");
167
164
  i0.ɵɵelementEnd()();
168
- i0.ɵɵconditionalCreate(5, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_5_Template, 4, 1, "label", 44);
169
- i0.ɵɵconditionalCreate(6, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_6_Template, 4, 1, "label", 44);
165
+ i0.ɵɵconditionalCreate(5, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_5_Template, 4, 1, "label", 43);
166
+ i0.ɵɵconditionalCreate(6, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Conditional_6_Template, 4, 1, "label", 43);
170
167
  i0.ɵɵelementEnd();
171
168
  } if (rf & 2) {
172
169
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -179,28 +176,28 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditio
179
176
  } }
180
177
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_1_Template(rf, ctx) { if (rf & 1) {
181
178
  const _r9 = i0.ɵɵgetCurrentView();
182
- i0.ɵɵelementStart(0, "button", 45);
179
+ i0.ɵɵelementStart(0, "button", 44);
183
180
  i0.ɵɵlistener("click", function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const permission_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onEditPermission(permission_r6)); });
184
- i0.ɵɵelement(1, "i", 46);
181
+ i0.ɵɵelement(1, "i", 45);
185
182
  i0.ɵɵelementEnd();
186
- i0.ɵɵelementStart(2, "button", 47);
183
+ i0.ɵɵelementStart(2, "button", 46);
187
184
  i0.ɵɵlistener("click", function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_1_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const permission_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onRevokePermission(permission_r6)); });
188
- i0.ɵɵelement(3, "i", 48);
185
+ i0.ɵɵelement(3, "i", 47);
189
186
  i0.ɵɵelementEnd();
190
187
  } }
191
188
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
192
189
  const _r10 = i0.ɵɵgetCurrentView();
193
- i0.ɵɵelementStart(0, "button", 49);
190
+ i0.ɵɵelementStart(0, "button", 48);
194
191
  i0.ɵɵlistener("click", function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const permission_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onSavePermission(permission_r6)); });
195
- i0.ɵɵelement(1, "i", 50);
192
+ i0.ɵɵelement(1, "i", 49);
196
193
  i0.ɵɵelementEnd();
197
- i0.ɵɵelementStart(2, "button", 51);
194
+ i0.ɵɵelementStart(2, "button", 50);
198
195
  i0.ɵɵlistener("click", function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r10); const permission_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCancelEdit(permission_r6)); });
199
- i0.ɵɵelement(3, "i", 48);
196
+ i0.ɵɵelement(3, "i", 47);
200
197
  i0.ɵɵelementEnd();
201
198
  } }
202
199
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
203
- i0.ɵɵelementStart(0, "div", 41);
200
+ i0.ɵɵelementStart(0, "div", 40);
204
201
  i0.ɵɵconditionalCreate(1, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_1_Template, 4, 0)(2, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Conditional_2_Template, 4, 0);
205
202
  i0.ɵɵelementEnd();
206
203
  } if (rf & 2) {
@@ -209,17 +206,17 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditio
209
206
  i0.ɵɵconditional(!permission_r6.isEditing ? 1 : 2);
210
207
  } }
211
208
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
212
- i0.ɵɵelementStart(0, "div", 35)(1, "div", 15);
209
+ i0.ɵɵelementStart(0, "div", 34)(1, "div", 15);
213
210
  i0.ɵɵelement(2, "i", 16);
214
211
  i0.ɵɵelementEnd();
215
- i0.ɵɵelementStart(3, "div", 36)(4, "div", 37)(5, "span", 18);
212
+ i0.ɵɵelementStart(3, "div", 35)(4, "div", 36)(5, "span", 18);
216
213
  i0.ɵɵtext(6);
217
214
  i0.ɵɵelementEnd();
218
- i0.ɵɵconditionalCreate(7, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_7_Template, 2, 1, "span", 38);
215
+ i0.ɵɵconditionalCreate(7, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_7_Template, 2, 1, "span", 37);
219
216
  i0.ɵɵelementEnd();
220
- i0.ɵɵconditionalCreate(8, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Template, 6, 2, "div", 39)(9, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Template, 7, 3, "div", 40);
217
+ i0.ɵɵconditionalCreate(8, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_8_Template, 6, 2, "div", 38)(9, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_9_Template, 7, 3, "div", 39);
221
218
  i0.ɵɵelementEnd();
222
- i0.ɵɵconditionalCreate(10, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Template, 3, 1, "div", 41);
219
+ i0.ɵɵconditionalCreate(10, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Conditional_10_Template, 3, 1, "div", 40);
223
220
  i0.ɵɵelementEnd();
224
221
  } if (rf & 2) {
225
222
  const permission_r6 = ctx.$implicit;
@@ -235,7 +232,7 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Template
235
232
  } }
236
233
  function ArtifactShareModalComponent_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
237
234
  i0.ɵɵelementStart(0, "div", 11);
238
- i0.ɵɵrepeaterCreate(1, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Template, 11, 4, "div", 35, _forTrack0);
235
+ i0.ɵɵrepeaterCreate(1, ArtifactShareModalComponent_Conditional_0_Conditional_13_For_2_Template, 11, 4, "div", 34, _forTrack0);
239
236
  i0.ɵɵelementEnd();
240
237
  } if (rf & 2) {
241
238
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -244,8 +241,8 @@ function ArtifactShareModalComponent_Conditional_0_Conditional_13_Template(rf, c
244
241
  } }
245
242
  function ArtifactShareModalComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
246
243
  const _r1 = i0.ɵɵgetCurrentView();
247
- i0.ɵɵelementStart(0, "kendo-window", 1);
248
- i0.ɵɵlistener("close", function ArtifactShareModalComponent_Conditional_0_Template_kendo_window_close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
244
+ i0.ɵɵelementStart(0, "mj-window", 1);
245
+ i0.ɵɵlistener("Close", function ArtifactShareModalComponent_Conditional_0_Template_mj_window_Close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
249
246
  i0.ɵɵelementStart(1, "div", 2)(2, "div", 3)(3, "h3", 4);
250
247
  i0.ɵɵelement(4, "i", 5);
251
248
  i0.ɵɵtext(5, " Share with User ");
@@ -267,7 +264,7 @@ function ArtifactShareModalComponent_Conditional_0_Template(rf, ctx) { if (rf &
267
264
  i0.ɵɵelementEnd()()();
268
265
  } if (rf & 2) {
269
266
  const ctx_r1 = i0.ɵɵnextContext();
270
- i0.ɵɵproperty("title", "Share: " + ctx_r1.artifact.Name)("width", 600)("height", 500)("minWidth", 400)("minHeight", 400);
267
+ i0.ɵɵproperty("Title", "Share: " + ctx_r1.artifact.Name)("Width", 600)("Height", 500)("MinWidth", 400)("MinHeight", 400)("Visible", true);
271
268
  i0.ɵɵadvance(6);
272
269
  i0.ɵɵproperty("currentUser", ctx_r1.currentUser)("excludeUserIds", ctx_r1.getExcludedUserIds());
273
270
  i0.ɵɵadvance();
@@ -460,23 +457,24 @@ export class ArtifactShareModalComponent {
460
457
  this.cancelled.emit();
461
458
  }
462
459
  static ɵfac = function ArtifactShareModalComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ArtifactShareModalComponent)(i0.ɵɵdirectiveInject(i1.ArtifactPermissionService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
463
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArtifactShareModalComponent, selectors: [["mj-artifact-share-modal"]], inputs: { isOpen: "isOpen", artifact: "artifact", currentUser: "currentUser" }, outputs: { saved: "saved", cancelled: "cancelled" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "title", "width", "height", "minWidth", "minHeight"], [3, "close", "title", "width", "height", "minWidth", "minHeight"], [1, "share-modal-content"], [1, "add-user-section"], [1, "section-title"], [1, "fa-solid", "fa-user-plus"], [3, "userSelected", "currentUser", "excludeUserIds"], [1, "permissions-form"], [1, "permissions-list-section"], [1, "fa-solid", "fa-users"], [1, "empty-state"], [1, "permissions-list"], [1, "modal-actions"], ["kendoButton", "", 3, "click"], [1, "selected-user-info"], [1, "user-avatar"], [1, "fa-solid", "fa-user"], [1, "user-details"], [1, "user-name"], [1, "user-email"], [1, "permissions-grid"], [1, "permission-checkbox", "disabled"], ["type", "checkbox", "disabled", "", 3, "checked"], [1, "permission-label"], [1, "fa-solid", "fa-eye"], [1, "permission-desc"], [1, "permission-checkbox"], [1, "form-actions"], ["kendoButton", "", 1, "btn-primary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], ["kendoButton", "", 1, "btn-secondary", 3, "click"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-share-nodes"], [1, "fa-solid", "fa-pen-to-square"], [1, "fa-solid", "fa-user-slash"], [1, "permission-item"], [1, "permission-details"], [1, "permission-user"], [1, "shared-by"], [1, "permission-badges"], [1, "permissions-edit-grid"], [1, "permission-actions"], [1, "permission-badge"], [1, "permission-checkbox-small", "disabled"], [1, "permission-checkbox-small"], ["kendoButton", "", "title", "Edit", 1, "btn-icon", 3, "click"], [1, "fa-solid", "fa-pen"], ["kendoButton", "", "title", "Remove", 1, "btn-icon", "btn-danger", 3, "click"], [1, "fa-solid", "fa-xmark"], ["kendoButton", "", "title", "Save", 1, "btn-icon", "btn-success", 3, "click"], [1, "fa-solid", "fa-check"], ["kendoButton", "", "title", "Cancel", 1, "btn-icon", 3, "click"]], template: function ArtifactShareModalComponent_Template(rf, ctx) { if (rf & 1) {
464
- i0.ɵɵconditionalCreate(0, ArtifactShareModalComponent_Conditional_0_Template, 17, 10, "kendo-window", 0);
460
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArtifactShareModalComponent, selectors: [["mj-artifact-share-modal"]], inputs: { isOpen: "isOpen", artifact: "artifact", currentUser: "currentUser" }, outputs: { saved: "saved", cancelled: "cancelled" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "Title", "Width", "Height", "MinWidth", "MinHeight", "Visible"], [3, "Close", "Title", "Width", "Height", "MinWidth", "MinHeight", "Visible"], [1, "share-modal-content"], [1, "add-user-section"], [1, "section-title"], [1, "fa-solid", "fa-user-plus"], [3, "userSelected", "currentUser", "excludeUserIds"], [1, "permissions-form"], [1, "permissions-list-section"], [1, "fa-solid", "fa-users"], [1, "empty-state"], [1, "permissions-list"], [1, "modal-actions"], ["mjButton", "", 3, "click"], [1, "selected-user-info"], [1, "user-avatar"], [1, "fa-solid", "fa-user"], [1, "user-details"], [1, "user-name"], [1, "user-email"], [1, "permissions-grid"], [1, "permission-checkbox", "disabled"], ["type", "checkbox", "disabled", "", 3, "checked"], [1, "permission-label"], [1, "fa-solid", "fa-eye"], [1, "permission-desc"], [1, "permission-checkbox"], [1, "form-actions"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-share-nodes"], [1, "fa-solid", "fa-pen-to-square"], [1, "fa-solid", "fa-user-slash"], [1, "permission-item"], [1, "permission-details"], [1, "permission-user"], [1, "shared-by"], [1, "permission-badges"], [1, "permissions-edit-grid"], [1, "permission-actions"], [1, "permission-badge"], [1, "permission-checkbox-small", "disabled"], [1, "permission-checkbox-small"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Edit", 3, "click"], [1, "fa-solid", "fa-pen"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove", 3, "click"], [1, "fa-solid", "fa-xmark"], ["mjButton", "", "variant", "success", "size", "sm", "title", "Save", 3, "click"], [1, "fa-solid", "fa-check"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Cancel", 3, "click"]], template: function ArtifactShareModalComponent_Template(rf, ctx) { if (rf & 1) {
461
+ i0.ɵɵconditionalCreate(0, ArtifactShareModalComponent_Conditional_0_Template, 17, 11, "mj-window", 0);
465
462
  } if (rf & 2) {
466
463
  i0.ɵɵconditional(ctx.isOpen && ctx.artifact ? 0 : -1);
467
- } }, dependencies: [FormsModule, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, WindowModule, i3.WindowComponent, ButtonModule, i4.ButtonComponent, UserPickerComponent], styles: [".share-modal-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n}\n\n.section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 16px 0;\n}\n.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.add-user-section[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-default);\n padding-bottom: 24px;\n}\n\n.selected-user-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 16px 0;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n}\n\n.user-avatar[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.user-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n.user-details[_ngcontent-%COMP%] .user-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n.user-details[_ngcontent-%COMP%] .user-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.permissions-form[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.permissions-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 12px;\n margin: 16px 0;\n}\n\n.permission-checkbox[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n}\n.permission-checkbox[_ngcontent-%COMP%]:hover:not(.disabled) {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n}\n.permission-checkbox.disabled[_ngcontent-%COMP%] {\n opacity: 0.6;\n cursor: not-allowed;\n background: var(--mj-bg-surface-sunken);\n}\n.permission-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%] {\n margin-right: 8px;\n}\n.permission-checkbox[_ngcontent-%COMP%] .permission-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n font-size: 14px;\n}\n.permission-checkbox[_ngcontent-%COMP%] .permission-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n.permission-checkbox[_ngcontent-%COMP%] .permission-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-left: 28px;\n}\n\n.form-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 16px;\n}\n\n.permissions-list-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.permissions-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.permission-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: background 0.2s;\n}\n.permission-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.permission-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.permission-user[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.permission-user[_ngcontent-%COMP%] .user-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n font-size: 14px;\n}\n.permission-user[_ngcontent-%COMP%] .shared-by[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.permission-badges[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n.permission-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.permissions-edit-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.permission-checkbox-small[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n cursor: pointer;\n}\n.permission-checkbox-small.disabled[_ngcontent-%COMP%] {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.permission-checkbox-small[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%] {\n margin: 0;\n}\n.permission-checkbox-small[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.permission-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n}\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 12px;\n}\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-text-inverse) !important;\n border: none !important;\n padding: 8px 16px;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover) !important;\n}\n.btn-primary[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface) !important;\n color: var(--mj-text-secondary) !important;\n border: 1px solid var(--mj-border-default) !important;\n padding: 8px 16px;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n}\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken) !important;\n border-color: var(--mj-border-strong) !important;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n padding: 0;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s;\n}\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n.btn-icon.btn-success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n border-color: var(--mj-status-success);\n}\n.btn-icon.btn-success[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success-bg);\n}\n.btn-icon.btn-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error);\n}\n.btn-icon.btn-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n}\n.btn-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.modal-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}"] });
464
+ } }, dependencies: [FormsModule, i2.CheckboxControlValueAccessor, i2.NgControlStatus, i2.NgModel, MJWindowComponent, MJButtonDirective, UserPickerComponent], styles: [".share-modal-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n}\n\n.section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 16px 0;\n}\n.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.add-user-section[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-default);\n padding-bottom: 24px;\n}\n\n.selected-user-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 16px 0;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n}\n\n.user-avatar[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.user-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n.user-details[_ngcontent-%COMP%] .user-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n.user-details[_ngcontent-%COMP%] .user-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.permissions-form[_ngcontent-%COMP%] {\n margin-top: 16px;\n}\n\n.permissions-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 12px;\n margin: 16px 0;\n}\n\n.permission-checkbox[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n}\n.permission-checkbox[_ngcontent-%COMP%]:hover:not(.disabled) {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n}\n.permission-checkbox.disabled[_ngcontent-%COMP%] {\n opacity: 0.6;\n cursor: not-allowed;\n background: var(--mj-bg-surface-sunken);\n}\n.permission-checkbox[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%] {\n margin-right: 8px;\n}\n.permission-checkbox[_ngcontent-%COMP%] .permission-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n font-size: 14px;\n}\n.permission-checkbox[_ngcontent-%COMP%] .permission-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n.permission-checkbox[_ngcontent-%COMP%] .permission-desc[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-left: 28px;\n}\n\n.form-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 16px;\n}\n\n.permissions-list-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.permissions-list[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.permission-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: background 0.2s;\n}\n.permission-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.permission-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.permission-user[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.permission-user[_ngcontent-%COMP%] .user-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n font-size: 14px;\n}\n.permission-user[_ngcontent-%COMP%] .shared-by[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.permission-badges[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n.permission-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.permissions-edit-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.permission-checkbox-small[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n cursor: pointer;\n}\n.permission-checkbox-small.disabled[_ngcontent-%COMP%] {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.permission-checkbox-small[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%] {\n margin: 0;\n}\n.permission-checkbox-small[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n}\n\n.permission-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n}\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 12px;\n}\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n.btn-primary[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-text-inverse) !important;\n border: none !important;\n padding: 8px 16px;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover) !important;\n}\n.btn-primary[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.btn-secondary[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface) !important;\n color: var(--mj-text-secondary) !important;\n border: 1px solid var(--mj-border-default) !important;\n padding: 8px 16px;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n}\n.btn-secondary[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken) !important;\n border-color: var(--mj-border-strong) !important;\n}\n\n.btn-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n padding: 0;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s;\n}\n.btn-icon[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n.btn-icon.btn-success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n border-color: var(--mj-status-success);\n}\n.btn-icon.btn-success[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success-bg);\n}\n.btn-icon.btn-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error);\n}\n.btn-icon.btn-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n}\n.btn-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.modal-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}"] });
468
465
  }
469
466
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArtifactShareModalComponent, [{
470
467
  type: Component,
471
- args: [{ selector: 'mj-artifact-share-modal', standalone: true, imports: [FormsModule, WindowModule, ButtonModule, UserPickerComponent], template: `
468
+ args: [{ selector: 'mj-artifact-share-modal', standalone: true, imports: [FormsModule, MJWindowComponent, MJButtonDirective, UserPickerComponent], template: `
472
469
  @if (isOpen && artifact) {
473
- <kendo-window
474
- [title]="'Share: ' + artifact.Name"
475
- [width]="600"
476
- [height]="500"
477
- [minWidth]="400"
478
- [minHeight]="400"
479
- (close)="onCancel()"
470
+ <mj-window
471
+ [Title]="'Share: ' + artifact.Name"
472
+ [Width]="600"
473
+ [Height]="500"
474
+ [MinWidth]="400"
475
+ [MinHeight]="400"
476
+ [Visible]="true"
477
+ (Close)="onCancel()"
480
478
  >
481
479
  <div class="share-modal-content">
482
480
  <!-- Add User Section -->
@@ -538,11 +536,11 @@ export class ArtifactShareModalComponent {
538
536
  </div>
539
537
 
540
538
  <div class="form-actions">
541
- <button kendoButton (click)="onAddUser()" [disabled]="!selectedUser" class="btn-primary">
539
+ <button mjButton variant="primary" (click)="onAddUser()" [disabled]="!selectedUser">
542
540
  <i class="fa-solid fa-plus"></i>
543
541
  Add User
544
542
  </button>
545
- <button kendoButton (click)="onClearSelection()" class="btn-secondary">
543
+ <button mjButton (click)="onClearSelection()">
546
544
  Cancel
547
545
  </button>
548
546
  </div>
@@ -618,17 +616,17 @@ export class ArtifactShareModalComponent {
618
616
  @if (canModifyPermissions) {
619
617
  <div class="permission-actions">
620
618
  @if (!permission.isEditing) {
621
- <button kendoButton class="btn-icon" (click)="onEditPermission(permission)" title="Edit">
619
+ <button mjButton variant="flat" size="sm" (click)="onEditPermission(permission)" title="Edit">
622
620
  <i class="fa-solid fa-pen"></i>
623
621
  </button>
624
- <button kendoButton class="btn-icon btn-danger" (click)="onRevokePermission(permission)" title="Remove">
622
+ <button mjButton variant="danger" size="sm" (click)="onRevokePermission(permission)" title="Remove">
625
623
  <i class="fa-solid fa-xmark"></i>
626
624
  </button>
627
625
  } @else {
628
- <button kendoButton class="btn-icon btn-success" (click)="onSavePermission(permission)" title="Save">
626
+ <button mjButton variant="success" size="sm" (click)="onSavePermission(permission)" title="Save">
629
627
  <i class="fa-solid fa-check"></i>
630
628
  </button>
631
- <button kendoButton class="btn-icon" (click)="onCancelEdit(permission)" title="Cancel">
629
+ <button mjButton variant="flat" size="sm" (click)="onCancelEdit(permission)" title="Cancel">
632
630
  <i class="fa-solid fa-xmark"></i>
633
631
  </button>
634
632
  }
@@ -642,9 +640,9 @@ export class ArtifactShareModalComponent {
642
640
  </div>
643
641
 
644
642
  <div class="modal-actions">
645
- <button kendoButton (click)="onCancel()">Close</button>
643
+ <button mjButton (click)="onCancel()">Close</button>
646
644
  </div>
647
- </kendo-window>
645
+ </mj-window>
648
646
  }
649
647
  `, styles: [".share-modal-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n padding: 20px;\n height: 100%;\n overflow-y: auto;\n}\n\n.section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 16px 0;\n}\n.section-title i {\n color: var(--mj-brand-primary);\n}\n\n.add-user-section {\n border-bottom: 1px solid var(--mj-border-default);\n padding-bottom: 24px;\n}\n\n.selected-user-info {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 16px 0;\n padding: 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 8px;\n}\n\n.user-avatar {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: var(--mj-brand-primary);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.user-details {\n flex: 1;\n min-width: 0;\n}\n.user-details .user-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n.user-details .user-email {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-top: 2px;\n}\n\n.permissions-form {\n margin-top: 16px;\n}\n\n.permissions-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\n gap: 12px;\n margin: 16px 0;\n}\n\n.permission-checkbox {\n display: flex;\n flex-direction: column;\n gap: 4px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n}\n.permission-checkbox:hover:not(.disabled) {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-surface-sunken);\n}\n.permission-checkbox.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n background: var(--mj-bg-surface-sunken);\n}\n.permission-checkbox input[type=checkbox] {\n margin-right: 8px;\n}\n.permission-checkbox .permission-label {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: var(--mj-text-primary);\n font-size: 14px;\n}\n.permission-checkbox .permission-label i {\n color: var(--mj-brand-primary);\n font-size: 12px;\n}\n.permission-checkbox .permission-desc {\n font-size: 12px;\n color: var(--mj-text-secondary);\n margin-left: 28px;\n}\n\n.form-actions {\n display: flex;\n gap: 8px;\n margin-top: 16px;\n}\n\n.permissions-list-section {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.permissions-list {\n flex: 1;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.permission-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n transition: background 0.2s;\n}\n.permission-item:hover {\n background: var(--mj-bg-surface-sunken);\n}\n\n.permission-details {\n flex: 1;\n min-width: 0;\n}\n\n.permission-user {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n}\n.permission-user .user-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n font-size: 14px;\n}\n.permission-user .shared-by {\n font-size: 12px;\n color: var(--mj-text-secondary);\n}\n\n.permission-badges {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n}\n\n.permission-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n}\n.permission-badge i {\n font-size: 10px;\n}\n\n.permissions-edit-grid {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n}\n\n.permission-checkbox-small {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n cursor: pointer;\n}\n.permission-checkbox-small.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n.permission-checkbox-small input[type=checkbox] {\n margin: 0;\n}\n.permission-checkbox-small span {\n color: var(--mj-text-primary);\n}\n\n.permission-actions {\n display: flex;\n gap: 4px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: var(--mj-text-muted);\n}\n.empty-state i {\n font-size: 48px;\n margin-bottom: 12px;\n}\n.empty-state p {\n margin: 0;\n font-size: 14px;\n}\n\n.btn-primary {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-text-inverse) !important;\n border: none !important;\n padding: 8px 16px;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.btn-primary:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover) !important;\n}\n.btn-primary:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n.btn-primary i {\n font-size: 12px;\n}\n\n.btn-secondary {\n background: var(--mj-bg-surface) !important;\n color: var(--mj-text-secondary) !important;\n border: 1px solid var(--mj-border-default) !important;\n padding: 8px 16px;\n border-radius: 6px;\n font-weight: 500;\n cursor: pointer;\n}\n.btn-secondary:hover {\n background: var(--mj-bg-surface-sunken) !important;\n border-color: var(--mj-border-strong) !important;\n}\n\n.btn-icon {\n width: 32px;\n height: 32px;\n padding: 0;\n border-radius: 6px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s;\n}\n.btn-icon:hover {\n background: var(--mj-bg-surface-sunken);\n border-color: var(--mj-border-strong);\n}\n.btn-icon.btn-success {\n color: var(--mj-status-success);\n border-color: var(--mj-status-success);\n}\n.btn-icon.btn-success:hover {\n background: var(--mj-status-success-bg);\n}\n.btn-icon.btn-danger {\n color: var(--mj-status-error);\n border-color: var(--mj-status-error);\n}\n.btn-icon.btn-danger:hover {\n background: var(--mj-status-error-bg);\n}\n.btn-icon i {\n font-size: 14px;\n}\n\n.modal-actions {\n display: flex;\n justify-content: flex-end;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-sunken);\n}\n"] }]
650
648
  }], () => [{ type: i1.ArtifactPermissionService }, { type: i0.ChangeDetectorRef }], { isOpen: [{
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-share-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/artifact/artifact-share-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { WindowModule } from '@progress/kendo-angular-dialog';\nimport { ButtonModule } from '@progress/kendo-angular-buttons';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJArtifactEntity } from '@memberjunction/core-entities';\nimport { ArtifactPermissionService, ArtifactPermission, ArtifactPermissionSet } from '../../services/artifact-permission.service';\nimport { UserPickerComponent, UserSearchResult } from '../shared/user-picker.component';\n\ninterface PermissionDisplay extends ArtifactPermission {\n isEditing: boolean;\n editingPermissions: ArtifactPermissionSet;\n}\n\n@Component({\n selector: 'mj-artifact-share-modal',\n standalone: true,\n imports: [FormsModule, WindowModule, ButtonModule, UserPickerComponent],\n template: `\n @if (isOpen && artifact) {\n <kendo-window\n [title]=\"'Share: ' + artifact.Name\"\n [width]=\"600\"\n [height]=\"500\"\n [minWidth]=\"400\"\n [minHeight]=\"400\"\n (close)=\"onCancel()\"\n >\n <div class=\"share-modal-content\">\n <!-- Add User Section -->\n <div class=\"add-user-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-user-plus\"></i>\n Share with User\n </h3>\n\n <mj-user-picker\n [currentUser]=\"currentUser\"\n [excludeUserIds]=\"getExcludedUserIds()\"\n (userSelected)=\"onUserSelected($event)\"\n ></mj-user-picker>\n\n @if (selectedUser) {\n <div class=\"permissions-form\">\n <div class=\"selected-user-info\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"user-details\">\n <div class=\"user-name\">{{ selectedUser.name }}</div>\n <div class=\"user-email\">{{ selectedUser.email }}</div>\n </div>\n </div>\n\n <div class=\"permissions-grid\">\n <label class=\"permission-checkbox disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-eye\"></i>\n Read\n </span>\n <span class=\"permission-desc\">View artifact content</span>\n </label>\n\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canShare\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Share\n </span>\n <span class=\"permission-desc\">Share with others</span>\n </label>\n }\n\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canEdit\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </span>\n <span class=\"permission-desc\">Edit and delete artifact</span>\n </label>\n }\n </div>\n\n <div class=\"form-actions\">\n <button kendoButton (click)=\"onAddUser()\" [disabled]=\"!selectedUser\" class=\"btn-primary\">\n <i class=\"fa-solid fa-plus\"></i>\n Add User\n </button>\n <button kendoButton (click)=\"onClearSelection()\" class=\"btn-secondary\">\n Cancel\n </button>\n </div>\n </div>\n }\n </div>\n\n <!-- Current Permissions Section -->\n <div class=\"permissions-list-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-users\"></i>\n Shared With ({{ permissions.length }})\n </h3>\n\n @if (permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>Not shared with anyone yet</p>\n </div>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of permissions; track permission.id) {\n <div class=\"permission-item\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"permission-details\">\n <div class=\"permission-user\">\n <span class=\"user-name\">{{ permission.userName }}</span>\n @if (permission.sharedByUserName) {\n <span class=\"shared-by\">shared by {{ permission.sharedByUserName }}</span>\n }\n </div>\n\n @if (!permission.isEditing) {\n <div class=\"permission-badges\">\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-eye\"></i> Read\n </span>\n @if (permission.canShare) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-share-nodes\"></i> Share\n </span>\n }\n @if (permission.canEdit) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </span>\n }\n </div>\n } @else {\n <div class=\"permissions-edit-grid\">\n <label class=\"permission-checkbox-small disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span>Read</span>\n </label>\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canShare\">\n <span>Share</span>\n </label>\n }\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canEdit\">\n <span>Edit</span>\n </label>\n }\n </div>\n }\n </div>\n\n @if (canModifyPermissions) {\n <div class=\"permission-actions\">\n @if (!permission.isEditing) {\n <button kendoButton class=\"btn-icon\" (click)=\"onEditPermission(permission)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button kendoButton class=\"btn-icon btn-danger\" (click)=\"onRevokePermission(permission)\" title=\"Remove\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n } @else {\n <button kendoButton class=\"btn-icon btn-success\" (click)=\"onSavePermission(permission)\" title=\"Save\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button kendoButton class=\"btn-icon\" (click)=\"onCancelEdit(permission)\" title=\"Cancel\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"modal-actions\">\n <button kendoButton (click)=\"onCancel()\">Close</button>\n </div>\n </kendo-window>\n }\n `,\n styleUrls: ['./artifact-share-modal.component.css']\n})\nexport class ArtifactShareModalComponent implements OnInit, OnChanges {\n @Input() isOpen: boolean = false;\n @Input() artifact: MJArtifactEntity | null = null;\n @Input() currentUser!: UserInfo;\n\n @Output() saved = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n permissions: PermissionDisplay[] = [];\n selectedUser: UserSearchResult | null = null;\n availablePermissions: string[] = [];\n canModifyPermissions: boolean = false;\n\n newPermissions: ArtifactPermissionSet = {\n canRead: true,\n canShare: false,\n canEdit: false\n };\n\n constructor(\n private permissionService: ArtifactPermissionService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit(): Promise<void> {\n if (this.artifact) {\n await this.loadPermissions();\n await this.updateAvailablePermissions();\n }\n }\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n // Reload permissions when modal opens or artifact changes\n const modalOpened = changes['isOpen']?.currentValue === true && changes['isOpen']?.previousValue === false;\n const artifactChanged = changes['artifact'] && !changes['artifact'].isFirstChange();\n\n if ((modalOpened || artifactChanged) && this.artifact) {\n await this.loadPermissions();\n await this.updateAvailablePermissions();\n }\n }\n\n private async loadPermissions(): Promise<void> {\n if (!this.artifact) return;\n\n const perms = await this.permissionService.loadPermissions(this.artifact.ID, this.currentUser);\n this.permissions = perms.map(p => ({\n ...p,\n isEditing: false,\n editingPermissions: {\n canRead: p.canRead,\n canShare: p.canShare,\n canEdit: p.canEdit\n }\n }));\n this.cdr.detectChanges();\n }\n\n private async updateAvailablePermissions(): Promise<void> {\n if (!this.artifact) return;\n\n // Check if current user is owner\n const isOwner = await this.permissionService.isOwner(this.artifact.ID, this.currentUser.ID, this.currentUser);\n\n // Check if user has share permission\n const hasSharePermission = await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'share',\n this.currentUser\n );\n\n // Allow modification if user is owner OR has Share permission\n this.canModifyPermissions = isOwner || hasSharePermission;\n\n // Get user's current permissions\n const userPerms: ArtifactPermissionSet = {\n canRead: true,\n canShare: hasSharePermission,\n canEdit: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'edit',\n this.currentUser\n )\n };\n\n this.availablePermissions = this.permissionService.getAvailablePermissions(userPerms, isOwner);\n\n console.log('Share modal permissions:', {\n artifactId: this.artifact?.ID,\n userId: this.artifact?.UserID,\n currentUserId: this.currentUser.ID,\n isOwner,\n availablePermissions: this.availablePermissions\n });\n\n this.cdr.detectChanges(); // zone.js 0.15: async permission checks don't trigger CD\n }\n\n getExcludedUserIds(): string[] {\n const ids = this.permissions.map(p => p.userId);\n ids.push(this.currentUser.ID); // Can't share with yourself\n if (this.artifact?.UserID) {\n ids.push(this.artifact.UserID); // Owner already has all permissions\n }\n return ids;\n }\n\n onUserSelected(user: UserSearchResult): void {\n this.selectedUser = user;\n this.cdr.detectChanges();\n }\n\n onClearSelection(): void {\n this.selectedUser = null;\n this.newPermissions = {\n canRead: true,\n canShare: false,\n canEdit: false\n };\n this.cdr.detectChanges();\n }\n\n async onAddUser(): Promise<void> {\n if (!this.selectedUser || !this.artifact) return;\n\n try {\n // Check if user is owner\n const isOwner = await this.permissionService.isOwner(this.artifact.ID, this.currentUser.ID, this.currentUser);\n\n // Get current user's permissions\n const userPerms: ArtifactPermissionSet = {\n canRead: true,\n canShare: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'share',\n this.currentUser\n ),\n canEdit: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'edit',\n this.currentUser\n )\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(this.newPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Grant permission\n await this.permissionService.grantPermission(\n this.artifact.ID,\n this.selectedUser.id,\n this.newPermissions,\n this.currentUser.ID,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.onClearSelection();\n this.saved.emit();\n } catch (error) {\n console.error('Error adding user:', error);\n alert('Failed to add user. Please try again.');\n }\n }\n\n onEditPermission(permission: PermissionDisplay): void {\n permission.isEditing = true;\n this.cdr.detectChanges();\n }\n\n onCancelEdit(permission: PermissionDisplay): void {\n permission.isEditing = false;\n permission.editingPermissions = {\n canRead: permission.canRead,\n canShare: permission.canShare,\n canEdit: permission.canEdit\n };\n this.cdr.detectChanges();\n }\n\n async onSavePermission(permission: PermissionDisplay): Promise<void> {\n if (!this.artifact) return;\n\n try {\n // Check if user is owner\n const isOwner = await this.permissionService.isOwner(this.artifact.ID, this.currentUser.ID, this.currentUser);\n\n // Get current user's permissions\n const userPerms: ArtifactPermissionSet = {\n canRead: true,\n canShare: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'share',\n this.currentUser\n ),\n canEdit: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'edit',\n this.currentUser\n )\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(permission.editingPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Update permission\n await this.permissionService.updatePermission(\n permission.id,\n permission.editingPermissions,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error updating permission:', error);\n alert('Failed to update permissions. Please try again.');\n }\n }\n\n async onRevokePermission(permission: PermissionDisplay): Promise<void> {\n if (!confirm(`Remove ${permission.userName}'s access to this artifact?`)) {\n return;\n }\n\n try {\n await this.permissionService.revokePermission(permission.id, this.currentUser);\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error revoking permission:', error);\n alert('Failed to revoke permission. Please try again.');\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n }\n}\n"]}
1
+ {"version":3,"file":"artifact-share-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/artifact/artifact-share-modal.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { MJWindowComponent, MJButtonDirective } from '@memberjunction/ng-ui-components';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJArtifactEntity } from '@memberjunction/core-entities';\nimport { ArtifactPermissionService, ArtifactPermission, ArtifactPermissionSet } from '../../services/artifact-permission.service';\nimport { UserPickerComponent, UserSearchResult } from '../shared/user-picker.component';\n\ninterface PermissionDisplay extends ArtifactPermission {\n isEditing: boolean;\n editingPermissions: ArtifactPermissionSet;\n}\n\n@Component({\n selector: 'mj-artifact-share-modal',\n standalone: true,\n imports: [FormsModule, MJWindowComponent, MJButtonDirective, UserPickerComponent],\n template: `\n @if (isOpen && artifact) {\n <mj-window\n [Title]=\"'Share: ' + artifact.Name\"\n [Width]=\"600\"\n [Height]=\"500\"\n [MinWidth]=\"400\"\n [MinHeight]=\"400\"\n [Visible]=\"true\"\n (Close)=\"onCancel()\"\n >\n <div class=\"share-modal-content\">\n <!-- Add User Section -->\n <div class=\"add-user-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-user-plus\"></i>\n Share with User\n </h3>\n\n <mj-user-picker\n [currentUser]=\"currentUser\"\n [excludeUserIds]=\"getExcludedUserIds()\"\n (userSelected)=\"onUserSelected($event)\"\n ></mj-user-picker>\n\n @if (selectedUser) {\n <div class=\"permissions-form\">\n <div class=\"selected-user-info\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"user-details\">\n <div class=\"user-name\">{{ selectedUser.name }}</div>\n <div class=\"user-email\">{{ selectedUser.email }}</div>\n </div>\n </div>\n\n <div class=\"permissions-grid\">\n <label class=\"permission-checkbox disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-eye\"></i>\n Read\n </span>\n <span class=\"permission-desc\">View artifact content</span>\n </label>\n\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canShare\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-share-nodes\"></i>\n Share\n </span>\n <span class=\"permission-desc\">Share with others</span>\n </label>\n }\n\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"newPermissions.canEdit\">\n <span class=\"permission-label\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </span>\n <span class=\"permission-desc\">Edit and delete artifact</span>\n </label>\n }\n </div>\n\n <div class=\"form-actions\">\n <button mjButton variant=\"primary\" (click)=\"onAddUser()\" [disabled]=\"!selectedUser\">\n <i class=\"fa-solid fa-plus\"></i>\n Add User\n </button>\n <button mjButton (click)=\"onClearSelection()\">\n Cancel\n </button>\n </div>\n </div>\n }\n </div>\n\n <!-- Current Permissions Section -->\n <div class=\"permissions-list-section\">\n <h3 class=\"section-title\">\n <i class=\"fa-solid fa-users\"></i>\n Shared With ({{ permissions.length }})\n </h3>\n\n @if (permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-user-slash\"></i>\n <p>Not shared with anyone yet</p>\n </div>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of permissions; track permission.id) {\n <div class=\"permission-item\">\n <div class=\"user-avatar\">\n <i class=\"fa-solid fa-user\"></i>\n </div>\n <div class=\"permission-details\">\n <div class=\"permission-user\">\n <span class=\"user-name\">{{ permission.userName }}</span>\n @if (permission.sharedByUserName) {\n <span class=\"shared-by\">shared by {{ permission.sharedByUserName }}</span>\n }\n </div>\n\n @if (!permission.isEditing) {\n <div class=\"permission-badges\">\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-eye\"></i> Read\n </span>\n @if (permission.canShare) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-share-nodes\"></i> Share\n </span>\n }\n @if (permission.canEdit) {\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </span>\n }\n </div>\n } @else {\n <div class=\"permissions-edit-grid\">\n <label class=\"permission-checkbox-small disabled\">\n <input type=\"checkbox\" [checked]=\"true\" disabled>\n <span>Read</span>\n </label>\n @if (availablePermissions.includes('Share')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canShare\">\n <span>Share</span>\n </label>\n }\n @if (availablePermissions.includes('Edit')) {\n <label class=\"permission-checkbox-small\">\n <input type=\"checkbox\" [(ngModel)]=\"permission.editingPermissions.canEdit\">\n <span>Edit</span>\n </label>\n }\n </div>\n }\n </div>\n\n @if (canModifyPermissions) {\n <div class=\"permission-actions\">\n @if (!permission.isEditing) {\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"onEditPermission(permission)\" title=\"Edit\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button mjButton variant=\"danger\" size=\"sm\" (click)=\"onRevokePermission(permission)\" title=\"Remove\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n } @else {\n <button mjButton variant=\"success\" size=\"sm\" (click)=\"onSavePermission(permission)\" title=\"Save\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button mjButton variant=\"flat\" size=\"sm\" (click)=\"onCancelEdit(permission)\" title=\"Cancel\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <div class=\"modal-actions\">\n <button mjButton (click)=\"onCancel()\">Close</button>\n </div>\n </mj-window>\n }\n `,\n styleUrls: ['./artifact-share-modal.component.css']\n})\nexport class ArtifactShareModalComponent implements OnInit, OnChanges {\n @Input() isOpen: boolean = false;\n @Input() artifact: MJArtifactEntity | null = null;\n @Input() currentUser!: UserInfo;\n\n @Output() saved = new EventEmitter<void>();\n @Output() cancelled = new EventEmitter<void>();\n\n permissions: PermissionDisplay[] = [];\n selectedUser: UserSearchResult | null = null;\n availablePermissions: string[] = [];\n canModifyPermissions: boolean = false;\n\n newPermissions: ArtifactPermissionSet = {\n canRead: true,\n canShare: false,\n canEdit: false\n };\n\n constructor(\n private permissionService: ArtifactPermissionService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit(): Promise<void> {\n if (this.artifact) {\n await this.loadPermissions();\n await this.updateAvailablePermissions();\n }\n }\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n // Reload permissions when modal opens or artifact changes\n const modalOpened = changes['isOpen']?.currentValue === true && changes['isOpen']?.previousValue === false;\n const artifactChanged = changes['artifact'] && !changes['artifact'].isFirstChange();\n\n if ((modalOpened || artifactChanged) && this.artifact) {\n await this.loadPermissions();\n await this.updateAvailablePermissions();\n }\n }\n\n private async loadPermissions(): Promise<void> {\n if (!this.artifact) return;\n\n const perms = await this.permissionService.loadPermissions(this.artifact.ID, this.currentUser);\n this.permissions = perms.map(p => ({\n ...p,\n isEditing: false,\n editingPermissions: {\n canRead: p.canRead,\n canShare: p.canShare,\n canEdit: p.canEdit\n }\n }));\n this.cdr.detectChanges();\n }\n\n private async updateAvailablePermissions(): Promise<void> {\n if (!this.artifact) return;\n\n // Check if current user is owner\n const isOwner = await this.permissionService.isOwner(this.artifact.ID, this.currentUser.ID, this.currentUser);\n\n // Check if user has share permission\n const hasSharePermission = await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'share',\n this.currentUser\n );\n\n // Allow modification if user is owner OR has Share permission\n this.canModifyPermissions = isOwner || hasSharePermission;\n\n // Get user's current permissions\n const userPerms: ArtifactPermissionSet = {\n canRead: true,\n canShare: hasSharePermission,\n canEdit: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'edit',\n this.currentUser\n )\n };\n\n this.availablePermissions = this.permissionService.getAvailablePermissions(userPerms, isOwner);\n\n console.log('Share modal permissions:', {\n artifactId: this.artifact?.ID,\n userId: this.artifact?.UserID,\n currentUserId: this.currentUser.ID,\n isOwner,\n availablePermissions: this.availablePermissions\n });\n\n this.cdr.detectChanges(); // zone.js 0.15: async permission checks don't trigger CD\n }\n\n getExcludedUserIds(): string[] {\n const ids = this.permissions.map(p => p.userId);\n ids.push(this.currentUser.ID); // Can't share with yourself\n if (this.artifact?.UserID) {\n ids.push(this.artifact.UserID); // Owner already has all permissions\n }\n return ids;\n }\n\n onUserSelected(user: UserSearchResult): void {\n this.selectedUser = user;\n this.cdr.detectChanges();\n }\n\n onClearSelection(): void {\n this.selectedUser = null;\n this.newPermissions = {\n canRead: true,\n canShare: false,\n canEdit: false\n };\n this.cdr.detectChanges();\n }\n\n async onAddUser(): Promise<void> {\n if (!this.selectedUser || !this.artifact) return;\n\n try {\n // Check if user is owner\n const isOwner = await this.permissionService.isOwner(this.artifact.ID, this.currentUser.ID, this.currentUser);\n\n // Get current user's permissions\n const userPerms: ArtifactPermissionSet = {\n canRead: true,\n canShare: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'share',\n this.currentUser\n ),\n canEdit: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'edit',\n this.currentUser\n )\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(this.newPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Grant permission\n await this.permissionService.grantPermission(\n this.artifact.ID,\n this.selectedUser.id,\n this.newPermissions,\n this.currentUser.ID,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.onClearSelection();\n this.saved.emit();\n } catch (error) {\n console.error('Error adding user:', error);\n alert('Failed to add user. Please try again.');\n }\n }\n\n onEditPermission(permission: PermissionDisplay): void {\n permission.isEditing = true;\n this.cdr.detectChanges();\n }\n\n onCancelEdit(permission: PermissionDisplay): void {\n permission.isEditing = false;\n permission.editingPermissions = {\n canRead: permission.canRead,\n canShare: permission.canShare,\n canEdit: permission.canEdit\n };\n this.cdr.detectChanges();\n }\n\n async onSavePermission(permission: PermissionDisplay): Promise<void> {\n if (!this.artifact) return;\n\n try {\n // Check if user is owner\n const isOwner = await this.permissionService.isOwner(this.artifact.ID, this.currentUser.ID, this.currentUser);\n\n // Get current user's permissions\n const userPerms: ArtifactPermissionSet = {\n canRead: true,\n canShare: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'share',\n this.currentUser\n ),\n canEdit: await this.permissionService.checkPermission(\n this.artifact.ID,\n this.currentUser.ID,\n 'edit',\n this.currentUser\n )\n };\n\n // Validate permissions\n if (!this.permissionService.validatePermissions(permission.editingPermissions, userPerms, isOwner)) {\n alert('You cannot grant permissions you do not have');\n return;\n }\n\n // Update permission\n await this.permissionService.updatePermission(\n permission.id,\n permission.editingPermissions,\n this.currentUser\n );\n\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error updating permission:', error);\n alert('Failed to update permissions. Please try again.');\n }\n }\n\n async onRevokePermission(permission: PermissionDisplay): Promise<void> {\n if (!confirm(`Remove ${permission.userName}'s access to this artifact?`)) {\n return;\n }\n\n try {\n await this.permissionService.revokePermission(permission.id, this.currentUser);\n await this.loadPermissions();\n this.saved.emit();\n } catch (error) {\n console.error('Error revoking permission:', error);\n alert('Failed to revoke permission. Please try again.');\n }\n }\n\n onCancel(): void {\n this.cancelled.emit();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-collection-picker-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/artifact-collection-picker-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAiB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG5H,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAKnE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;;AAGjH,UAAU,cAAc;IACtB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,qBA2ca,sCAAuC,YAAW,MAAM,EAAE,SAAS;IA6B5E,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IA9BJ,MAAM,EAAE,OAAO,CAAS;IACxB,aAAa,EAAG,MAAM,CAAC;IACvB,WAAW,EAAG,QAAQ,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAM;IAEnC,KAAK,yBAAgC;IACrC,SAAS,qBAA4B;IAExC,cAAc,EAAE,kBAAkB,EAAE,CAAM;IAC1C,oBAAoB,EAAE,cAAc,EAAE,CAAM;IAC5C,mBAAmB,EAAE,kBAAkB,EAAE,CAAM;IAC/C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAa;IAE/D,cAAc,EAAE,cAAc,EAAE,CAAM;IACtC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,uBAAuB,EAAE,kBAAkB,GAAG,SAAS,CAAa;IAEpE,WAAW,EAAE,MAAM,CAAM;IACzB,SAAS,EAAE,OAAO,CAAS;IAC3B,QAAQ,EAAE,OAAO,CAAS;IAC1B,YAAY,EAAE,MAAM,CAAM;IAG1B,cAAc,EAAE,OAAO,CAAS;IAChC,iBAAiB,EAAE,MAAM,CAAM;IAC/B,oBAAoB,EAAE,OAAO,CAAS;gBAGnC,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,2BAA2B,EAC9C,GAAG,EAAE,iBAAiB;IAG1B,QAAQ;IAMR,WAAW,CAAC,OAAO,EAAE,GAAG;IAO9B,OAAO,CAAC,KAAK;YAYC,eAAe;YA0Cf,mBAAmB;IAsBjC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAWhD,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAgB3C,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAmBzD,cAAc,IAAI,IAAI;IAatB,oBAAoB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAmB1D,cAAc,IAAI,IAAI;IA0BhB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmEjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7B,QAAQ,IAAI,IAAI;yCA7UL,sCAAsC;2CAAtC,sCAAsC;CAgVlD"}
1
+ {"version":3,"file":"artifact-collection-picker-modal.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/collection/artifact-collection-picker-modal.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAiB,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG5H,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;;AAGjH,UAAU,cAAc;IACtB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,uBAAuB,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;;GAQG;AACH,qBA4ca,sCAAuC,YAAW,MAAM,EAAE,SAAS;IA6B5E,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,GAAG;IA9BJ,MAAM,EAAE,OAAO,CAAS;IACxB,aAAa,EAAG,MAAM,CAAC;IACvB,WAAW,EAAG,QAAQ,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAM;IAEnC,KAAK,yBAAgC;IACrC,SAAS,qBAA4B;IAExC,cAAc,EAAE,kBAAkB,EAAE,CAAM;IAC1C,oBAAoB,EAAE,cAAc,EAAE,CAAM;IAC5C,mBAAmB,EAAE,kBAAkB,EAAE,CAAM;IAC/C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAa;IAE/D,cAAc,EAAE,cAAc,EAAE,CAAM;IACtC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,uBAAuB,EAAE,kBAAkB,GAAG,SAAS,CAAa;IAEpE,WAAW,EAAE,MAAM,CAAM;IACzB,SAAS,EAAE,OAAO,CAAS;IAC3B,QAAQ,EAAE,OAAO,CAAS;IAC1B,YAAY,EAAE,MAAM,CAAM;IAG1B,cAAc,EAAE,OAAO,CAAS;IAChC,iBAAiB,EAAE,MAAM,CAAM;IAC/B,oBAAoB,EAAE,OAAO,CAAS;gBAGnC,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,2BAA2B,EAC9C,GAAG,EAAE,iBAAiB;IAG1B,QAAQ;IAMR,WAAW,CAAC,OAAO,EAAE,GAAG;IAO9B,OAAO,CAAC,KAAK;YAYC,eAAe;YA0Cf,mBAAmB;IAsBjC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO;IAWhD,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAgB3C,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAmBzD,cAAc,IAAI,IAAI;IAatB,oBAAoB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAmB1D,cAAc,IAAI,IAAI;IA0BhB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmEjC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB7B,QAAQ,IAAI,IAAI;yCA7UL,sCAAsC;2CAAtC,sCAAsC;CAgVlD"}