@memberjunction/ng-file-storage 3.1.1 → 3.2.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 (34) hide show
  1. package/dist/lib/file-browser/file-browser-demo.component.d.ts +10 -0
  2. package/dist/lib/file-browser/file-browser-demo.component.d.ts.map +1 -0
  3. package/dist/lib/file-browser/file-browser-demo.component.js +39 -0
  4. package/dist/lib/file-browser/file-browser-demo.component.js.map +1 -0
  5. package/dist/lib/file-browser/file-browser-resource.component.d.ts +30 -0
  6. package/dist/lib/file-browser/file-browser-resource.component.d.ts.map +1 -0
  7. package/dist/lib/file-browser/file-browser-resource.component.js +82 -0
  8. package/dist/lib/file-browser/file-browser-resource.component.js.map +1 -0
  9. package/dist/lib/file-browser/file-browser.component.d.ts +69 -0
  10. package/dist/lib/file-browser/file-browser.component.d.ts.map +1 -0
  11. package/dist/lib/file-browser/file-browser.component.js +132 -0
  12. package/dist/lib/file-browser/file-browser.component.js.map +1 -0
  13. package/dist/lib/file-browser/file-grid.component.d.ts +429 -0
  14. package/dist/lib/file-browser/file-grid.component.d.ts.map +1 -0
  15. package/dist/lib/file-browser/file-grid.component.js +2394 -0
  16. package/dist/lib/file-browser/file-grid.component.js.map +1 -0
  17. package/dist/lib/file-browser/folder-tree.component.d.ts +115 -0
  18. package/dist/lib/file-browser/folder-tree.component.d.ts.map +1 -0
  19. package/dist/lib/file-browser/folder-tree.component.js +364 -0
  20. package/dist/lib/file-browser/folder-tree.component.js.map +1 -0
  21. package/dist/lib/file-browser/storage-providers-list.component.d.ts +59 -0
  22. package/dist/lib/file-browser/storage-providers-list.component.d.ts.map +1 -0
  23. package/dist/lib/file-browser/storage-providers-list.component.js +235 -0
  24. package/dist/lib/file-browser/storage-providers-list.component.js.map +1 -0
  25. package/dist/lib/file-upload/file-upload.d.ts +19 -19
  26. package/dist/lib/module.d.ts +25 -18
  27. package/dist/lib/module.d.ts.map +1 -1
  28. package/dist/lib/module.js +44 -4
  29. package/dist/lib/module.js.map +1 -1
  30. package/dist/public-api.d.ts +3 -0
  31. package/dist/public-api.d.ts.map +1 -1
  32. package/dist/public-api.js +6 -0
  33. package/dist/public-api.js.map +1 -1
  34. package/package.json +9 -8
@@ -0,0 +1,59 @@
1
+ import { EventEmitter, OnInit, ChangeDetectorRef } from '@angular/core';
2
+ import { StorageAccountWithProvider } from '@memberjunction/core-entities';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Displays a list of organizational file storage accounts.
6
+ * In the enterprise model, accounts are configured by administrators
7
+ * and available to users based on permissions. Users no longer manage
8
+ * their own OAuth connections - credentials are handled at the org level.
9
+ */
10
+ export declare class StorageProvidersListComponent implements OnInit {
11
+ private cdr;
12
+ /**
13
+ * Emits when an account is selected by the user, or null when no accounts are available.
14
+ * Emits the full account-with-provider object for downstream components to use.
15
+ */
16
+ accountSelected: EventEmitter<StorageAccountWithProvider | null>;
17
+ /**
18
+ * All available storage accounts with their provider details.
19
+ */
20
+ accounts: StorageAccountWithProvider[];
21
+ /**
22
+ * Currently selected account.
23
+ */
24
+ selectedAccount: StorageAccountWithProvider | null;
25
+ /**
26
+ * Loading state indicator.
27
+ */
28
+ isLoading: boolean;
29
+ /**
30
+ * Error message if loading fails.
31
+ */
32
+ errorMessage: string | null;
33
+ constructor(cdr: ChangeDetectorRef);
34
+ ngOnInit(): void;
35
+ /**
36
+ * Loads all available file storage accounts with their provider details.
37
+ * Uses FileStorageEngine for centralized, cached access.
38
+ */
39
+ private loadAccounts;
40
+ /**
41
+ * Handles account selection by the user.
42
+ */
43
+ selectAccount(accountWithProvider: StorageAccountWithProvider): void;
44
+ /**
45
+ * Checks if an account is currently selected.
46
+ */
47
+ isSelected(accountWithProvider: StorageAccountWithProvider): boolean;
48
+ /**
49
+ * Gets the icon class for a provider based on its name.
50
+ */
51
+ getProviderIcon(providerName: string): string;
52
+ /**
53
+ * Refreshes the accounts list by forcing a reload from the database.
54
+ */
55
+ refresh(): void;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<StorageProvidersListComponent, never>;
57
+ static ɵcmp: i0.ɵɵComponentDeclaration<StorageProvidersListComponent, "mj-storage-providers-list", never, {}, { "accountSelected": "accountSelected"; }, never, never, false, never>;
58
+ }
59
+ //# sourceMappingURL=storage-providers-list.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-providers-list.component.d.ts","sourceRoot":"","sources":["../../../src/lib/file-browser/storage-providers-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAE,MAAM,EAAU,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAqB,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;;AAE9F;;;;;GAKG;AACH,qBAKa,6BAA8B,YAAW,MAAM;IA2B9C,OAAO,CAAC,GAAG;IA1BvB;;;OAGG;IACO,eAAe,kDAAyD;IAElF;;OAEG;IACI,QAAQ,EAAE,0BAA0B,EAAE,CAAM;IAEnD;;OAEG;IACI,eAAe,EAAE,0BAA0B,GAAG,IAAI,CAAQ;IAEjE;;OAEG;IACI,SAAS,EAAE,OAAO,CAAS;IAElC;;OAEG;IACI,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEtB,GAAG,EAAE,iBAAiB;IAE1C,QAAQ,IAAI,IAAI;IAIhB;;;OAGG;YACW,YAAY;IAgC1B;;OAEG;IACI,aAAa,CAAC,mBAAmB,EAAE,0BAA0B,GAAG,IAAI;IAK3E;;OAEG;IACI,UAAU,CAAC,mBAAmB,EAAE,0BAA0B,GAAG,OAAO;IAI3E;;OAEG;IACI,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAsBpD;;OAEG;IACI,OAAO,IAAI,IAAI;yCAhHX,6BAA6B;2CAA7B,6BAA6B;CAmHzC"}
@@ -0,0 +1,235 @@
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import { FileStorageEngine } from '@memberjunction/core-entities';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@memberjunction/ng-shared-generic";
6
+ function StorageProvidersListComponent_div_4_Template(rf, ctx) { if (rf & 1) {
7
+ i0.ɵɵelementStart(0, "div", 7);
8
+ i0.ɵɵelement(1, "mj-loading", 8);
9
+ i0.ɵɵelementEnd();
10
+ } }
11
+ function StorageProvidersListComponent_div_5_Template(rf, ctx) { if (rf & 1) {
12
+ i0.ɵɵelementStart(0, "div", 9)(1, "div", 10);
13
+ i0.ɵɵelement(2, "i", 11);
14
+ i0.ɵɵelementEnd();
15
+ i0.ɵɵelementStart(3, "p", 12);
16
+ i0.ɵɵtext(4);
17
+ i0.ɵɵelementEnd()();
18
+ } if (rf & 2) {
19
+ const ctx_r0 = i0.ɵɵnextContext();
20
+ i0.ɵɵadvance(4);
21
+ i0.ɵɵtextInterpolate(ctx_r0.errorMessage);
22
+ } }
23
+ function StorageProvidersListComponent_div_6_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelementStart(0, "div", 13)(1, "div", 14);
25
+ i0.ɵɵelement(2, "i", 15);
26
+ i0.ɵɵelementEnd();
27
+ i0.ɵɵelementStart(3, "p", 16);
28
+ i0.ɵɵtext(4, "No storage accounts configured");
29
+ i0.ɵɵelementEnd();
30
+ i0.ɵɵelementStart(5, "p", 17);
31
+ i0.ɵɵtext(6, "Contact your administrator to set up file storage accounts");
32
+ i0.ɵɵelementEnd()();
33
+ } }
34
+ function StorageProvidersListComponent_div_7_div_1_span_9_Template(rf, ctx) { if (rf & 1) {
35
+ i0.ɵɵelementStart(0, "span", 29);
36
+ i0.ɵɵelement(1, "i", 30);
37
+ i0.ɵɵelementEnd();
38
+ } }
39
+ function StorageProvidersListComponent_div_7_div_1_span_10_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "span", 31);
41
+ i0.ɵɵelement(1, "i", 32);
42
+ i0.ɵɵelementEnd();
43
+ } }
44
+ function StorageProvidersListComponent_div_7_div_1_span_11_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelementStart(0, "span", 33);
46
+ i0.ɵɵelement(1, "i", 34);
47
+ i0.ɵɵelementEnd();
48
+ } }
49
+ function StorageProvidersListComponent_div_7_div_1_Template(rf, ctx) { if (rf & 1) {
50
+ const _r2 = i0.ɵɵgetCurrentView();
51
+ i0.ɵɵelementStart(0, "div", 20);
52
+ i0.ɵɵlistener("click", function StorageProvidersListComponent_div_7_div_1_Template_div_click_0_listener() { const item_r3 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selectAccount(item_r3)); });
53
+ i0.ɵɵelementStart(1, "div", 21);
54
+ i0.ɵɵelement(2, "i");
55
+ i0.ɵɵelementEnd();
56
+ i0.ɵɵelementStart(3, "div", 22)(4, "div", 23);
57
+ i0.ɵɵtext(5);
58
+ i0.ɵɵelementEnd();
59
+ i0.ɵɵelementStart(6, "div", 24)(7, "span", 25);
60
+ i0.ɵɵtext(8);
61
+ i0.ɵɵelementEnd();
62
+ i0.ɵɵtemplate(9, StorageProvidersListComponent_div_7_div_1_span_9_Template, 2, 0, "span", 26)(10, StorageProvidersListComponent_div_7_div_1_span_10_Template, 2, 0, "span", 27)(11, StorageProvidersListComponent_div_7_div_1_span_11_Template, 2, 0, "span", 28);
63
+ i0.ɵɵelementEnd()()();
64
+ } if (rf & 2) {
65
+ const item_r3 = ctx.$implicit;
66
+ const ctx_r0 = i0.ɵɵnextContext(2);
67
+ i0.ɵɵclassProp("selected", ctx_r0.isSelected(item_r3));
68
+ i0.ɵɵproperty("title", item_r3.account.Description || item_r3.account.Name);
69
+ i0.ɵɵadvance(2);
70
+ i0.ɵɵclassMap(ctx_r0.getProviderIcon(item_r3.provider.Name));
71
+ i0.ɵɵadvance(3);
72
+ i0.ɵɵtextInterpolate(item_r3.account.Name);
73
+ i0.ɵɵadvance(2);
74
+ i0.ɵɵproperty("title", item_r3.provider.Name);
75
+ i0.ɵɵadvance();
76
+ i0.ɵɵtextInterpolate1(" ", item_r3.provider.Name, " ");
77
+ i0.ɵɵadvance();
78
+ i0.ɵɵproperty("ngIf", item_r3.provider.SupportsSearch);
79
+ i0.ɵɵadvance();
80
+ i0.ɵɵproperty("ngIf", item_r3.account.CredentialID);
81
+ i0.ɵɵadvance();
82
+ i0.ɵɵproperty("ngIf", !item_r3.account.CredentialID);
83
+ } }
84
+ function StorageProvidersListComponent_div_7_Template(rf, ctx) { if (rf & 1) {
85
+ i0.ɵɵelementStart(0, "div", 18);
86
+ i0.ɵɵtemplate(1, StorageProvidersListComponent_div_7_div_1_Template, 12, 11, "div", 19);
87
+ i0.ɵɵelementEnd();
88
+ } if (rf & 2) {
89
+ const ctx_r0 = i0.ɵɵnextContext();
90
+ i0.ɵɵadvance();
91
+ i0.ɵɵproperty("ngForOf", ctx_r0.accounts);
92
+ } }
93
+ /**
94
+ * Displays a list of organizational file storage accounts.
95
+ * In the enterprise model, accounts are configured by administrators
96
+ * and available to users based on permissions. Users no longer manage
97
+ * their own OAuth connections - credentials are handled at the org level.
98
+ */
99
+ export class StorageProvidersListComponent {
100
+ cdr;
101
+ /**
102
+ * Emits when an account is selected by the user, or null when no accounts are available.
103
+ * Emits the full account-with-provider object for downstream components to use.
104
+ */
105
+ accountSelected = new EventEmitter();
106
+ /**
107
+ * All available storage accounts with their provider details.
108
+ */
109
+ accounts = [];
110
+ /**
111
+ * Currently selected account.
112
+ */
113
+ selectedAccount = null;
114
+ /**
115
+ * Loading state indicator.
116
+ */
117
+ isLoading = false;
118
+ /**
119
+ * Error message if loading fails.
120
+ */
121
+ errorMessage = null;
122
+ constructor(cdr) {
123
+ this.cdr = cdr;
124
+ }
125
+ ngOnInit() {
126
+ this.loadAccounts();
127
+ }
128
+ /**
129
+ * Loads all available file storage accounts with their provider details.
130
+ * Uses FileStorageEngine for centralized, cached access.
131
+ */
132
+ async loadAccounts() {
133
+ this.isLoading = true;
134
+ this.errorMessage = null;
135
+ try {
136
+ const engine = FileStorageEngine.Instance;
137
+ await engine.Config(false); // Use cached data if available
138
+ this.accounts = engine.AccountsWithProviders;
139
+ console.log('[StorageAccountsList] Loaded accounts:', this.accounts.map(a => ({
140
+ name: a.account.Name,
141
+ provider: a.provider.Name,
142
+ hasCredential: !!a.account.CredentialID
143
+ })));
144
+ // Auto-select first account if available
145
+ if (this.accounts.length > 0) {
146
+ this.selectAccount(this.accounts[0]);
147
+ }
148
+ else {
149
+ this.accountSelected.emit(null);
150
+ }
151
+ }
152
+ catch (error) {
153
+ this.errorMessage = error instanceof Error ? error.message : 'Failed to load storage accounts';
154
+ console.error('[StorageProvidersList] Error loading accounts:', error);
155
+ }
156
+ finally {
157
+ this.isLoading = false;
158
+ this.cdr.detectChanges();
159
+ }
160
+ }
161
+ /**
162
+ * Handles account selection by the user.
163
+ */
164
+ selectAccount(accountWithProvider) {
165
+ this.selectedAccount = accountWithProvider;
166
+ this.accountSelected.emit(accountWithProvider);
167
+ }
168
+ /**
169
+ * Checks if an account is currently selected.
170
+ */
171
+ isSelected(accountWithProvider) {
172
+ return this.selectedAccount?.account.ID === accountWithProvider.account.ID;
173
+ }
174
+ /**
175
+ * Gets the icon class for a provider based on its name.
176
+ */
177
+ getProviderIcon(providerName) {
178
+ const name = providerName.toLowerCase();
179
+ if (name.includes('aws') || name.includes('s3')) {
180
+ return 'fa-brands fa-aws';
181
+ }
182
+ else if (name.includes('azure')) {
183
+ return 'fa-brands fa-microsoft';
184
+ }
185
+ else if (name.includes('google drive')) {
186
+ return 'fa-brands fa-google-drive';
187
+ }
188
+ else if (name.includes('google cloud')) {
189
+ return 'fa-brands fa-google';
190
+ }
191
+ else if (name.includes('dropbox')) {
192
+ return 'fa-brands fa-dropbox';
193
+ }
194
+ else if (name.includes('box')) {
195
+ return 'fa-solid fa-box';
196
+ }
197
+ else if (name.includes('sharepoint') || name.includes('onedrive')) {
198
+ return 'fa-brands fa-microsoft';
199
+ }
200
+ else {
201
+ return 'fa-solid fa-cloud';
202
+ }
203
+ }
204
+ /**
205
+ * Refreshes the accounts list by forcing a reload from the database.
206
+ */
207
+ refresh() {
208
+ FileStorageEngine.Instance.Config(true).then(() => this.loadAccounts());
209
+ }
210
+ static ɵfac = function StorageProvidersListComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || StorageProvidersListComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
211
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: StorageProvidersListComponent, selectors: [["mj-storage-providers-list"]], outputs: { accountSelected: "accountSelected" }, decls: 8, vars: 4, consts: [[1, "providers-list"], [1, "providers-header"], [1, "header-title"], ["class", "loading-state", 4, "ngIf"], ["class", "error-state", 4, "ngIf"], ["class", "empty-state", 4, "ngIf"], ["class", "providers-container", 4, "ngIf"], [1, "loading-state"], ["text", "Loading accounts..."], [1, "error-state"], [1, "error-icon"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "error-message"], [1, "empty-state"], [1, "empty-icon"], [1, "fa-solid", "fa-folder-plus"], [1, "empty-message"], [1, "empty-hint"], [1, "providers-container"], ["class", "provider-item", 3, "selected", "title", "click", 4, "ngFor", "ngForOf"], [1, "provider-item", 3, "click", "title"], [1, "provider-icon"], [1, "provider-info"], [1, "provider-name"], [1, "provider-meta"], [1, "provider-type-badge", 3, "title"], ["class", "search-badge", "title", "Supports search", 4, "ngIf"], ["class", "credential-badge", "title", "Credentials configured", 4, "ngIf"], ["class", "unconfigured-badge", "title", "No credentials configured", 4, "ngIf"], ["title", "Supports search", 1, "search-badge"], [1, "fa-solid", "fa-magnifying-glass"], ["title", "Credentials configured", 1, "credential-badge"], [1, "fa-solid", "fa-key"], ["title", "No credentials configured", 1, "unconfigured-badge"], [1, "fa-solid", "fa-exclamation-triangle"]], template: function StorageProvidersListComponent_Template(rf, ctx) { if (rf & 1) {
212
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "span", 2);
213
+ i0.ɵɵtext(3, "Storage Accounts");
214
+ i0.ɵɵelementEnd()();
215
+ i0.ɵɵtemplate(4, StorageProvidersListComponent_div_4_Template, 2, 0, "div", 3)(5, StorageProvidersListComponent_div_5_Template, 5, 1, "div", 4)(6, StorageProvidersListComponent_div_6_Template, 7, 0, "div", 5)(7, StorageProvidersListComponent_div_7_Template, 2, 1, "div", 6);
216
+ i0.ɵɵelementEnd();
217
+ } if (rf & 2) {
218
+ i0.ɵɵadvance(4);
219
+ i0.ɵɵproperty("ngIf", ctx.isLoading);
220
+ i0.ɵɵadvance();
221
+ i0.ɵɵproperty("ngIf", ctx.errorMessage && !ctx.isLoading);
222
+ i0.ɵɵadvance();
223
+ i0.ɵɵproperty("ngIf", !ctx.isLoading && !ctx.errorMessage && ctx.accounts.length === 0);
224
+ i0.ɵɵadvance();
225
+ i0.ɵɵproperty("ngIf", !ctx.isLoading && !ctx.errorMessage && ctx.accounts.length > 0);
226
+ } }, dependencies: [i1.NgForOf, i1.NgIf, i2.LoadingComponent], styles: ["\n\n\n\n\n.providers-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n\n\n.providers-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid #e5e5e5;\n background-color: #fafafa;\n}\n\n.header-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: #1d1d1f;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.add-provider-btn[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 50%;\n background-color: #007aff;\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 14px;\n}\n\n.add-provider-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #0056b3;\n transform: scale(1.05);\n}\n\n.add-provider-btn[_ngcontent-%COMP%]:disabled {\n background-color: #ccc;\n cursor: not-allowed;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%], \n.error-state[_ngcontent-%COMP%], \n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 24px;\n text-align: center;\n color: #86868b;\n flex: 1;\n}\n\n.error-icon[_ngcontent-%COMP%], \n.empty-icon[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.7;\n}\n\n.error-icon[_ngcontent-%COMP%] {\n color: #f44336;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n color: #007aff;\n}\n\n.error-message[_ngcontent-%COMP%], \n.empty-message[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n margin: 0 0 4px 0;\n color: #1d1d1f;\n}\n\n.empty-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #86868b;\n margin: 4px 0 0 0;\n max-width: 180px;\n line-height: 1.4;\n}\n\n\n\n.providers-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n\n\n.provider-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n border-bottom: 1px solid #f0f0f0;\n position: relative;\n}\n\n.provider-item[_ngcontent-%COMP%]:hover {\n background-color: #f5f5f7;\n}\n\n.provider-item.selected[_ngcontent-%COMP%] {\n background-color: #e8f4fd;\n border-left: 3px solid #007aff;\n}\n\n.provider-item.selected[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background-color: #007aff;\n}\n\n\n\n.provider-icon[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n color: #424242;\n margin-right: 12px;\n}\n\n.provider-item.selected[_ngcontent-%COMP%] .provider-icon[_ngcontent-%COMP%] {\n color: #007aff;\n}\n\n\n\n.provider-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.provider-name[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: #1d1d1f;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.provider-item.selected[_ngcontent-%COMP%] .provider-name[_ngcontent-%COMP%] {\n color: #007aff;\n font-weight: 600;\n}\n\n.provider-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n color: #86868b;\n}\n\n\n\n.default-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n color: #f5a623;\n}\n\n.default-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.provider-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #f0f0f0;\n border-radius: 10px;\n font-size: 10px;\n color: #666;\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.provider-item.selected[_ngcontent-%COMP%] .provider-type-badge[_ngcontent-%COMP%] {\n background-color: rgba(0, 122, 255, 0.15);\n color: #007aff;\n}\n\n\n\n.search-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #f0f0f0;\n border-radius: 10px;\n font-size: 10px;\n color: #666;\n}\n\n.provider-item.selected[_ngcontent-%COMP%] .search-badge[_ngcontent-%COMP%] {\n background-color: rgba(0, 122, 255, 0.15);\n color: #007aff;\n}\n\n.search-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.credential-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #e8f5e9;\n border-radius: 10px;\n font-size: 10px;\n color: #34c759;\n}\n\n.provider-item.selected[_ngcontent-%COMP%] .credential-badge[_ngcontent-%COMP%] {\n background-color: rgba(52, 199, 89, 0.15);\n color: #34c759;\n}\n\n.credential-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.unconfigured-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n color: #ff9500;\n}\n\n.unconfigured-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.oauth-connected-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #e8f5e9;\n border-radius: 10px;\n font-size: 10px;\n color: #34c759;\n}\n\n.oauth-connected-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n.oauth-disconnected-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #fff3e0;\n border-radius: 10px;\n font-size: 10px;\n color: #ff9500;\n}\n\n.oauth-disconnected-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.provider-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.connect-btn[_ngcontent-%COMP%], \n.disconnect-btn[_ngcontent-%COMP%] {\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 12px;\n}\n\n.connect-btn[_ngcontent-%COMP%] {\n background-color: #e8f5e9;\n color: #34c759;\n}\n\n.connect-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #c8e6c9;\n transform: scale(1.05);\n}\n\n.connect-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.disconnect-btn[_ngcontent-%COMP%] {\n background-color: transparent;\n color: #86868b;\n}\n\n.disconnect-btn[_ngcontent-%COMP%]:hover {\n background-color: #ffebee;\n color: #f44336;\n}\n\n\n\n.remove-provider-btn[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 50%;\n background-color: transparent;\n color: #999;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 12px;\n opacity: 0;\n margin-left: 8px;\n}\n\n.provider-item[_ngcontent-%COMP%]:hover .remove-provider-btn[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.remove-provider-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #ffebee;\n color: #f44336;\n}\n\n.remove-provider-btn[_ngcontent-%COMP%]:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n\n\n.providers-container[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 6px;\n}\n\n.providers-container[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.providers-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: #c7c7cc;\n border-radius: 3px;\n}\n\n.providers-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: #a0a0a5;\n}\n\n\n\n\n\n\n.add-provider-dialog[_ngcontent-%COMP%] {\n min-height: 150px;\n}\n\n.dialog-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n}\n\n.dialog-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 30px 20px;\n text-align: center;\n}\n\n.dialog-empty-icon[_ngcontent-%COMP%] {\n font-size: 40px;\n color: #34c759;\n margin-bottom: 12px;\n}\n\n.dialog-empty-message[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: #1d1d1f;\n margin: 0 0 4px 0;\n}\n\n.dialog-empty-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #86868b;\n margin: 0;\n}\n\n.dialog-instruction[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #666;\n margin: 0 0 12px 0;\n padding: 0 4px;\n}\n\n.available-providers[_ngcontent-%COMP%] {\n max-height: 350px;\n overflow-y: auto;\n}\n\n.available-provider-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n margin-bottom: 8px;\n border: 1px solid #e5e5e5;\n}\n\n.available-provider-item[_ngcontent-%COMP%]:hover:not(.disabled) {\n background-color: #f5f5f7;\n border-color: #007aff;\n}\n\n.available-provider-item.disabled[_ngcontent-%COMP%] {\n opacity: 0.6;\n cursor: not-allowed;\n background-color: #f9f9f9;\n}\n\n.available-provider-item[_ngcontent-%COMP%] .provider-icon[_ngcontent-%COMP%] {\n margin-right: 12px;\n}\n\n.available-provider-item[_ngcontent-%COMP%] .provider-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.available-provider-item[_ngcontent-%COMP%] .provider-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: #1d1d1f;\n}\n\n.available-provider-item[_ngcontent-%COMP%] .provider-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #86868b;\n margin-top: 2px;\n line-height: 1.3;\n}\n\n.available-provider-item[_ngcontent-%COMP%] .provider-warning[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #ff9500;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.available-provider-item[_ngcontent-%COMP%] .provider-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n.available-provider-item[_ngcontent-%COMP%] .oauth-hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #007aff;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.available-provider-item[_ngcontent-%COMP%] .oauth-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.available-provider-item.oauth-provider[_ngcontent-%COMP%] {\n border-color: #007aff;\n border-style: dashed;\n}\n\n.available-provider-item.oauth-provider[_ngcontent-%COMP%]:hover:not(.disabled) {\n background-color: #e8f4fd;\n border-style: solid;\n}\n\n.add-indicator[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #007aff;\n font-size: 14px;\n}\n\n\n\n@media screen and (max-width: 768px) {\n .providers-header[_ngcontent-%COMP%] {\n padding: 10px 12px;\n }\n\n .header-title[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .add-provider-btn[_ngcontent-%COMP%] {\n width: 26px;\n height: 26px;\n font-size: 12px;\n }\n\n .provider-item[_ngcontent-%COMP%] {\n padding: 10px 12px;\n }\n\n .provider-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n font-size: 18px;\n margin-right: 10px;\n }\n\n .provider-name[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .provider-status[_ngcontent-%COMP%] {\n font-size: 10px;\n }\n\n .remove-provider-btn[_ngcontent-%COMP%] {\n width: 22px;\n height: 22px;\n font-size: 11px;\n opacity: 1;\n }\n}"] });
227
+ }
228
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StorageProvidersListComponent, [{
229
+ type: Component,
230
+ args: [{ selector: 'mj-storage-providers-list', template: "<div class=\"providers-list\">\n <!-- Header -->\n <div class=\"providers-header\">\n <span class=\"header-title\">Storage Accounts</span>\n </div>\n\n <!-- Loading State -->\n <div *ngIf=\"isLoading\" class=\"loading-state\">\n <mj-loading text=\"Loading accounts...\"></mj-loading>\n </div>\n\n <!-- Error State -->\n <div *ngIf=\"errorMessage && !isLoading\" class=\"error-state\">\n <div class=\"error-icon\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n </div>\n <p class=\"error-message\">{{ errorMessage }}</p>\n </div>\n\n <!-- Empty State -->\n <div *ngIf=\"!isLoading && !errorMessage && accounts.length === 0\" class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fa-solid fa-folder-plus\"></i>\n </div>\n <p class=\"empty-message\">No storage accounts configured</p>\n <p class=\"empty-hint\">Contact your administrator to set up file storage accounts</p>\n </div>\n\n <!-- Account List -->\n <div *ngIf=\"!isLoading && !errorMessage && accounts.length > 0\" class=\"providers-container\">\n <div\n *ngFor=\"let item of accounts\"\n class=\"provider-item\"\n [class.selected]=\"isSelected(item)\"\n (click)=\"selectAccount(item)\"\n [title]=\"item.account.Description || item.account.Name\"\n >\n <div class=\"provider-icon\">\n <i [class]=\"getProviderIcon(item.provider.Name)\"></i>\n </div>\n <div class=\"provider-info\">\n <div class=\"provider-name\">{{ item.account.Name }}</div>\n <div class=\"provider-meta\">\n <!-- Provider type badge -->\n <span class=\"provider-type-badge\" [title]=\"item.provider.Name\">\n {{ item.provider.Name }}\n </span>\n <!-- Search support badge -->\n <span class=\"search-badge\" *ngIf=\"item.provider.SupportsSearch\" title=\"Supports search\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n </span>\n <!-- Credential configured badge -->\n <span class=\"credential-badge\" *ngIf=\"item.account.CredentialID\" title=\"Credentials configured\">\n <i class=\"fa-solid fa-key\"></i>\n </span>\n <!-- No credential warning -->\n <span class=\"unconfigured-badge\" *ngIf=\"!item.account.CredentialID\" title=\"No credentials configured\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: ["/* ===========================\n Storage Providers List\n =========================== */\n\n.providers-list {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* Header with Add Button */\n.providers-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n border-bottom: 1px solid #e5e5e5;\n background-color: #fafafa;\n}\n\n.header-title {\n font-size: 13px;\n font-weight: 600;\n color: #1d1d1f;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.add-provider-btn {\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 50%;\n background-color: #007aff;\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 14px;\n}\n\n.add-provider-btn:hover:not(:disabled) {\n background-color: #0056b3;\n transform: scale(1.05);\n}\n\n.add-provider-btn:disabled {\n background-color: #ccc;\n cursor: not-allowed;\n}\n\n/* Loading, Error, and Empty States */\n.loading-state,\n.error-state,\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 24px;\n text-align: center;\n color: #86868b;\n flex: 1;\n}\n\n.error-icon,\n.empty-icon {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.7;\n}\n\n.error-icon {\n color: #f44336;\n}\n\n.empty-icon {\n color: #007aff;\n}\n\n.error-message,\n.empty-message {\n font-size: 14px;\n font-weight: 500;\n margin: 0 0 4px 0;\n color: #1d1d1f;\n}\n\n.empty-hint {\n font-size: 12px;\n color: #86868b;\n margin: 4px 0 0 0;\n max-width: 180px;\n line-height: 1.4;\n}\n\n/* Provider List Container */\n.providers-container {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n}\n\n/* Individual Provider Item */\n.provider-item {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n border-bottom: 1px solid #f0f0f0;\n position: relative;\n}\n\n.provider-item:hover {\n background-color: #f5f5f7;\n}\n\n.provider-item.selected {\n background-color: #e8f4fd;\n border-left: 3px solid #007aff;\n}\n\n.provider-item.selected::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 3px;\n background-color: #007aff;\n}\n\n/* Provider Icon */\n.provider-icon {\n flex-shrink: 0;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n color: #424242;\n margin-right: 12px;\n}\n\n.provider-item.selected .provider-icon {\n color: #007aff;\n}\n\n/* Provider Info */\n.provider-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.provider-name {\n font-size: 13px;\n font-weight: 500;\n color: #1d1d1f;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.provider-item.selected .provider-name {\n color: #007aff;\n font-weight: 600;\n}\n\n.provider-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n color: #86868b;\n}\n\n/* Default Badge */\n.default-badge {\n display: inline-flex;\n align-items: center;\n color: #f5a623;\n}\n\n.default-badge i {\n font-size: 10px;\n}\n\n/* Provider Type Badge */\n.provider-type-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #f0f0f0;\n border-radius: 10px;\n font-size: 10px;\n color: #666;\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.provider-item.selected .provider-type-badge {\n background-color: rgba(0, 122, 255, 0.15);\n color: #007aff;\n}\n\n/* Search Badge */\n.search-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #f0f0f0;\n border-radius: 10px;\n font-size: 10px;\n color: #666;\n}\n\n.provider-item.selected .search-badge {\n background-color: rgba(0, 122, 255, 0.15);\n color: #007aff;\n}\n\n.search-badge i {\n font-size: 9px;\n}\n\n/* Credential Badge */\n.credential-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #e8f5e9;\n border-radius: 10px;\n font-size: 10px;\n color: #34c759;\n}\n\n.provider-item.selected .credential-badge {\n background-color: rgba(52, 199, 89, 0.15);\n color: #34c759;\n}\n\n.credential-badge i {\n font-size: 9px;\n}\n\n/* Unconfigured Badge */\n.unconfigured-badge {\n display: inline-flex;\n align-items: center;\n color: #ff9500;\n}\n\n.unconfigured-badge i {\n font-size: 10px;\n}\n\n/* OAuth Status Badges */\n.oauth-connected-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #e8f5e9;\n border-radius: 10px;\n font-size: 10px;\n color: #34c759;\n}\n\n.oauth-connected-badge i {\n font-size: 9px;\n}\n\n.oauth-disconnected-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background-color: #fff3e0;\n border-radius: 10px;\n font-size: 10px;\n color: #ff9500;\n}\n\n.oauth-disconnected-badge i {\n font-size: 9px;\n}\n\n/* Provider Actions (OAuth connect/disconnect buttons) */\n.provider-actions {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n}\n\n.connect-btn,\n.disconnect-btn {\n width: 26px;\n height: 26px;\n border: none;\n border-radius: 50%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 12px;\n}\n\n.connect-btn {\n background-color: #e8f5e9;\n color: #34c759;\n}\n\n.connect-btn:hover:not(:disabled) {\n background-color: #c8e6c9;\n transform: scale(1.05);\n}\n\n.connect-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.disconnect-btn {\n background-color: transparent;\n color: #86868b;\n}\n\n.disconnect-btn:hover {\n background-color: #ffebee;\n color: #f44336;\n}\n\n/* Remove Provider Button */\n.remove-provider-btn {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 50%;\n background-color: transparent;\n color: #999;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s ease;\n font-size: 12px;\n opacity: 0;\n margin-left: 8px;\n}\n\n.provider-item:hover .remove-provider-btn {\n opacity: 1;\n}\n\n.remove-provider-btn:hover:not(:disabled) {\n background-color: #ffebee;\n color: #f44336;\n}\n\n.remove-provider-btn:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n\n/* Scrollbar Styling */\n.providers-container::-webkit-scrollbar {\n width: 6px;\n}\n\n.providers-container::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.providers-container::-webkit-scrollbar-thumb {\n background: #c7c7cc;\n border-radius: 3px;\n}\n\n.providers-container::-webkit-scrollbar-thumb:hover {\n background: #a0a0a5;\n}\n\n/* ===========================\n Add Provider Dialog\n =========================== */\n\n.add-provider-dialog {\n min-height: 150px;\n}\n\n.dialog-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n}\n\n.dialog-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 30px 20px;\n text-align: center;\n}\n\n.dialog-empty-icon {\n font-size: 40px;\n color: #34c759;\n margin-bottom: 12px;\n}\n\n.dialog-empty-message {\n font-size: 16px;\n font-weight: 500;\n color: #1d1d1f;\n margin: 0 0 4px 0;\n}\n\n.dialog-empty-hint {\n font-size: 13px;\n color: #86868b;\n margin: 0;\n}\n\n.dialog-instruction {\n font-size: 13px;\n color: #666;\n margin: 0 0 12px 0;\n padding: 0 4px;\n}\n\n.available-providers {\n max-height: 350px;\n overflow-y: auto;\n}\n\n.available-provider-item {\n display: flex;\n align-items: center;\n padding: 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n margin-bottom: 8px;\n border: 1px solid #e5e5e5;\n}\n\n.available-provider-item:hover:not(.disabled) {\n background-color: #f5f5f7;\n border-color: #007aff;\n}\n\n.available-provider-item.disabled {\n opacity: 0.6;\n cursor: not-allowed;\n background-color: #f9f9f9;\n}\n\n.available-provider-item .provider-icon {\n margin-right: 12px;\n}\n\n.available-provider-item .provider-info {\n flex: 1;\n}\n\n.available-provider-item .provider-name {\n font-size: 14px;\n font-weight: 500;\n color: #1d1d1f;\n}\n\n.available-provider-item .provider-description {\n font-size: 12px;\n color: #86868b;\n margin-top: 2px;\n line-height: 1.3;\n}\n\n.available-provider-item .provider-warning {\n font-size: 11px;\n color: #ff9500;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.available-provider-item .provider-warning i {\n font-size: 10px;\n}\n\n/* OAuth hint in add provider dialog */\n.available-provider-item .oauth-hint {\n font-size: 11px;\n color: #007aff;\n margin-top: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.available-provider-item .oauth-hint i {\n font-size: 10px;\n}\n\n.available-provider-item.oauth-provider {\n border-color: #007aff;\n border-style: dashed;\n}\n\n.available-provider-item.oauth-provider:hover:not(.disabled) {\n background-color: #e8f4fd;\n border-style: solid;\n}\n\n.add-indicator {\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #007aff;\n font-size: 14px;\n}\n\n/* Responsive Adjustments */\n@media screen and (max-width: 768px) {\n .providers-header {\n padding: 10px 12px;\n }\n\n .header-title {\n font-size: 12px;\n }\n\n .add-provider-btn {\n width: 26px;\n height: 26px;\n font-size: 12px;\n }\n\n .provider-item {\n padding: 10px 12px;\n }\n\n .provider-icon {\n width: 28px;\n height: 28px;\n font-size: 18px;\n margin-right: 10px;\n }\n\n .provider-name {\n font-size: 12px;\n }\n\n .provider-status {\n font-size: 10px;\n }\n\n .remove-provider-btn {\n width: 22px;\n height: 22px;\n font-size: 11px;\n opacity: 1;\n }\n}\n"] }]
231
+ }], () => [{ type: i0.ChangeDetectorRef }], { accountSelected: [{
232
+ type: Output
233
+ }] }); })();
234
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(StorageProvidersListComponent, { className: "StorageProvidersListComponent", filePath: "src/lib/file-browser/storage-providers-list.component.ts", lineNumber: 15 }); })();
235
+ //# sourceMappingURL=storage-providers-list.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-providers-list.component.js","sourceRoot":"","sources":["../../../src/lib/file-browser/storage-providers-list.component.ts","../../../src/lib/file-browser/storage-providers-list.component.html"],"names":[],"mappings":"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"}
@@ -55,77 +55,77 @@ declare const FileUploadMutationSchema: z.ZodObject<{
55
55
  Provider: z.ZodString;
56
56
  }, "__mj_CreatedAt" | "__mj_UpdatedAt">, z.ZodTypeAny, "passthrough">>;
57
57
  }, "strip", z.ZodTypeAny, {
58
- NameExists: boolean;
59
- UploadUrl: string;
60
58
  File: {
59
+ Category: string | null;
61
60
  ID: string;
62
61
  Name: string;
63
62
  Description: string | null;
63
+ Status: string;
64
64
  CategoryID: string | null;
65
- ProviderID: string;
66
65
  ContentType: string | null;
66
+ ProviderID: string;
67
67
  ProviderKey: string | null;
68
- Status: string;
69
- Category: string | null;
70
68
  Provider: string;
71
69
  } & {
72
70
  [k: string]: unknown;
73
71
  };
74
- }, {
75
72
  NameExists: boolean;
76
73
  UploadUrl: string;
74
+ }, {
77
75
  File: {
76
+ Category: string | null;
78
77
  ID: string;
79
78
  Name: string;
80
79
  Description: string | null;
80
+ Status: string;
81
81
  CategoryID: string | null;
82
- ProviderID: string;
83
82
  ContentType: string | null;
83
+ ProviderID: string;
84
84
  ProviderKey: string | null;
85
- Status: string;
86
- Category: string | null;
87
85
  Provider: string;
88
86
  } & {
89
87
  [k: string]: unknown;
90
88
  };
89
+ NameExists: boolean;
90
+ UploadUrl: string;
91
91
  }>;
92
92
  }, "strip", z.ZodTypeAny, {
93
93
  CreateMJFile: {
94
- NameExists: boolean;
95
- UploadUrl: string;
96
94
  File: {
95
+ Category: string | null;
97
96
  ID: string;
98
97
  Name: string;
99
98
  Description: string | null;
99
+ Status: string;
100
100
  CategoryID: string | null;
101
- ProviderID: string;
102
101
  ContentType: string | null;
102
+ ProviderID: string;
103
103
  ProviderKey: string | null;
104
- Status: string;
105
- Category: string | null;
106
104
  Provider: string;
107
105
  } & {
108
106
  [k: string]: unknown;
109
107
  };
108
+ NameExists: boolean;
109
+ UploadUrl: string;
110
110
  };
111
111
  }, {
112
112
  CreateMJFile: {
113
- NameExists: boolean;
114
- UploadUrl: string;
115
113
  File: {
114
+ Category: string | null;
116
115
  ID: string;
117
116
  Name: string;
118
117
  Description: string | null;
118
+ Status: string;
119
119
  CategoryID: string | null;
120
- ProviderID: string;
121
120
  ContentType: string | null;
121
+ ProviderID: string;
122
122
  ProviderKey: string | null;
123
- Status: string;
124
- Category: string | null;
125
123
  Provider: string;
126
124
  } & {
127
125
  [k: string]: unknown;
128
126
  };
127
+ NameExists: boolean;
128
+ UploadUrl: string;
129
129
  };
130
130
  }>;
131
131
  type ApiFile = z.infer<typeof FileUploadMutationSchema>['CreateMJFile']['File'];
@@ -2,26 +2,33 @@ import * as i0 from "@angular/core";
2
2
  import * as i1 from "./category-tree/category-tree";
3
3
  import * as i2 from "./files-grid/files-grid";
4
4
  import * as i3 from "./file-upload/file-upload";
5
- import * as i4 from "@angular/common";
6
- import * as i5 from "@progress/kendo-angular-treeview";
7
- import * as i6 from "@angular/forms";
8
- import * as i7 from "@progress/kendo-angular-dialog";
9
- import * as i8 from "@progress/kendo-angular-excel-export";
10
- import * as i9 from "@memberjunction/ng-compare-records";
11
- import * as i10 from "@memberjunction/ng-container-directives";
12
- import * as i11 from "@progress/kendo-angular-buttons";
13
- import * as i12 from "@progress/kendo-angular-label";
14
- import * as i13 from "@progress/kendo-angular-grid";
15
- import * as i14 from "@progress/kendo-angular-dropdowns";
16
- import * as i15 from "@angular/platform-browser";
17
- import * as i16 from "@angular/platform-browser/animations";
18
- import * as i17 from "@progress/kendo-angular-inputs";
19
- import * as i18 from "@progress/kendo-angular-upload";
20
- import * as i19 from "@progress/kendo-angular-menu";
21
- import * as i20 from "@progress/kendo-angular-indicators";
5
+ import * as i4 from "./file-browser/file-browser.component";
6
+ import * as i5 from "./file-browser/file-browser-demo.component";
7
+ import * as i6 from "./file-browser/file-browser-resource.component";
8
+ import * as i7 from "./file-browser/storage-providers-list.component";
9
+ import * as i8 from "./file-browser/folder-tree.component";
10
+ import * as i9 from "./file-browser/file-grid.component";
11
+ import * as i10 from "@angular/common";
12
+ import * as i11 from "@progress/kendo-angular-treeview";
13
+ import * as i12 from "@angular/forms";
14
+ import * as i13 from "@progress/kendo-angular-dialog";
15
+ import * as i14 from "@progress/kendo-angular-excel-export";
16
+ import * as i15 from "@memberjunction/ng-compare-records";
17
+ import * as i16 from "@memberjunction/ng-container-directives";
18
+ import * as i17 from "@memberjunction/ng-shared-generic";
19
+ import * as i18 from "@progress/kendo-angular-buttons";
20
+ import * as i19 from "@progress/kendo-angular-label";
21
+ import * as i20 from "@progress/kendo-angular-grid";
22
+ import * as i21 from "@progress/kendo-angular-dropdowns";
23
+ import * as i22 from "@angular/platform-browser";
24
+ import * as i23 from "@angular/platform-browser/animations";
25
+ import * as i24 from "@progress/kendo-angular-inputs";
26
+ import * as i25 from "@progress/kendo-angular-upload";
27
+ import * as i26 from "@progress/kendo-angular-menu";
28
+ import * as i27 from "@progress/kendo-angular-indicators";
22
29
  export declare class FileStorageModule {
23
30
  static ɵfac: i0.ɵɵFactoryDeclaration<FileStorageModule, never>;
24
- static ɵmod: i0.ɵɵNgModuleDeclaration<FileStorageModule, [typeof i1.CategoryTreeComponent, typeof i2.FilesGridComponent, typeof i3.FileUploadComponent], [typeof i4.CommonModule, typeof i5.TreeViewModule, typeof i6.FormsModule, typeof i7.DialogsModule, typeof i8.ExcelExportModule, typeof i9.CompareRecordsModule, typeof i10.ContainerDirectivesModule, typeof i11.ButtonsModule, typeof i12.LabelModule, typeof i13.GridModule, typeof i14.DropDownsModule, typeof i15.BrowserModule, typeof i16.BrowserAnimationsModule, typeof i17.InputsModule, typeof i18.UploadsModule, typeof i19.MenusModule, typeof i20.IndicatorsModule], [typeof i1.CategoryTreeComponent, typeof i2.FilesGridComponent, typeof i3.FileUploadComponent]>;
31
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FileStorageModule, [typeof i1.CategoryTreeComponent, typeof i2.FilesGridComponent, typeof i3.FileUploadComponent, typeof i4.FileBrowserComponent, typeof i5.FileBrowserDemoComponent, typeof i6.FileBrowserResource, typeof i7.StorageProvidersListComponent, typeof i8.FolderTreeComponent, typeof i9.FileGridComponent], [typeof i10.CommonModule, typeof i11.TreeViewModule, typeof i12.FormsModule, typeof i13.DialogsModule, typeof i14.ExcelExportModule, typeof i15.CompareRecordsModule, typeof i16.ContainerDirectivesModule, typeof i17.SharedGenericModule, typeof i18.ButtonsModule, typeof i19.LabelModule, typeof i20.GridModule, typeof i21.DropDownsModule, typeof i22.BrowserModule, typeof i23.BrowserAnimationsModule, typeof i24.InputsModule, typeof i25.UploadsModule, typeof i26.MenusModule, typeof i27.IndicatorsModule], [typeof i1.CategoryTreeComponent, typeof i2.FilesGridComponent, typeof i3.FileUploadComponent, typeof i4.FileBrowserComponent, typeof i5.FileBrowserDemoComponent, typeof i6.FileBrowserResource]>;
25
32
  static ɵinj: i0.ɵɵInjectorDeclaration<FileStorageModule>;
26
33
  }
27
34
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyBA,qBAuBa,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAG"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,qBAyCa,iBAAiB;yCAAjB,iBAAiB;0CAAjB,iBAAiB;0CAAjB,iBAAiB;CAAG"}
@@ -15,11 +15,18 @@ import { TreeViewModule } from '@progress/kendo-angular-treeview';
15
15
  import { FormsModule } from '@angular/forms';
16
16
  import { CompareRecordsModule } from '@memberjunction/ng-compare-records';
17
17
  import { ContainerDirectivesModule } from '@memberjunction/ng-container-directives';
18
+ import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
18
19
  import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
19
20
  import { UploadsModule } from '@progress/kendo-angular-upload';
20
21
  import { CategoryTreeComponent } from './category-tree/category-tree';
21
22
  import { FileUploadComponent } from './file-upload/file-upload';
22
23
  import { FilesGridComponent } from './files-grid/files-grid';
24
+ import { FileBrowserComponent } from './file-browser/file-browser.component';
25
+ import { FileBrowserDemoComponent } from './file-browser/file-browser-demo.component';
26
+ import { FileBrowserResource } from './file-browser/file-browser-resource.component';
27
+ import { StorageProvidersListComponent } from './file-browser/storage-providers-list.component';
28
+ import { FolderTreeComponent } from './file-browser/folder-tree.component';
29
+ import { FileGridComponent } from './file-browser/file-grid.component';
23
30
  import * as i0 from "@angular/core";
24
31
  export class FileStorageModule {
25
32
  static ɵfac = function FileStorageModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || FileStorageModule)(); };
@@ -31,6 +38,7 @@ export class FileStorageModule {
31
38
  ExcelExportModule,
32
39
  CompareRecordsModule,
33
40
  ContainerDirectivesModule,
41
+ SharedGenericModule,
34
42
  ButtonsModule,
35
43
  LabelModule,
36
44
  GridModule,
@@ -45,7 +53,17 @@ export class FileStorageModule {
45
53
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FileStorageModule, [{
46
54
  type: NgModule,
47
55
  args: [{
48
- declarations: [CategoryTreeComponent, FilesGridComponent, FileUploadComponent],
56
+ declarations: [
57
+ CategoryTreeComponent,
58
+ FilesGridComponent,
59
+ FileUploadComponent,
60
+ FileBrowserComponent,
61
+ FileBrowserDemoComponent,
62
+ FileBrowserResource,
63
+ StorageProvidersListComponent,
64
+ FolderTreeComponent,
65
+ FileGridComponent
66
+ ],
49
67
  imports: [
50
68
  CommonModule,
51
69
  TreeViewModule,
@@ -54,6 +72,7 @@ export class FileStorageModule {
54
72
  ExcelExportModule,
55
73
  CompareRecordsModule,
56
74
  ContainerDirectivesModule,
75
+ SharedGenericModule,
57
76
  ButtonsModule,
58
77
  LabelModule,
59
78
  GridModule,
@@ -65,16 +84,32 @@ export class FileStorageModule {
65
84
  MenusModule,
66
85
  IndicatorsModule,
67
86
  ],
68
- exports: [CategoryTreeComponent, FilesGridComponent, FileUploadComponent],
87
+ exports: [
88
+ CategoryTreeComponent,
89
+ FilesGridComponent,
90
+ FileUploadComponent,
91
+ FileBrowserComponent,
92
+ FileBrowserDemoComponent,
93
+ FileBrowserResource
94
+ ],
69
95
  }]
70
96
  }], null, null); })();
71
- (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(FileStorageModule, { declarations: [CategoryTreeComponent, FilesGridComponent, FileUploadComponent], imports: [CommonModule,
97
+ (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(FileStorageModule, { declarations: [CategoryTreeComponent,
98
+ FilesGridComponent,
99
+ FileUploadComponent,
100
+ FileBrowserComponent,
101
+ FileBrowserDemoComponent,
102
+ FileBrowserResource,
103
+ StorageProvidersListComponent,
104
+ FolderTreeComponent,
105
+ FileGridComponent], imports: [CommonModule,
72
106
  TreeViewModule,
73
107
  FormsModule,
74
108
  DialogsModule,
75
109
  ExcelExportModule,
76
110
  CompareRecordsModule,
77
111
  ContainerDirectivesModule,
112
+ SharedGenericModule,
78
113
  ButtonsModule,
79
114
  LabelModule,
80
115
  GridModule,
@@ -84,5 +119,10 @@ export class FileStorageModule {
84
119
  InputsModule,
85
120
  UploadsModule,
86
121
  MenusModule,
87
- IndicatorsModule], exports: [CategoryTreeComponent, FilesGridComponent, FileUploadComponent] }); })();
122
+ IndicatorsModule], exports: [CategoryTreeComponent,
123
+ FilesGridComponent,
124
+ FileUploadComponent,
125
+ FileBrowserComponent,
126
+ FileBrowserDemoComponent,
127
+ FileBrowserResource] }); })();
88
128
  //# sourceMappingURL=module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,2BAA2B;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;;AAyB7D,MAAM,OAAO,iBAAiB;2GAAjB,iBAAiB;4DAAjB,iBAAiB;gEApB1B,YAAY;YACZ,cAAc;YACd,WAAW;YACX,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,yBAAyB;YACzB,aAAa;YACb,WAAW;YACX,UAAU;YACV,eAAe;YACf,aAAa;YACb,uBAAuB;YACvB,YAAY;YACZ,aAAa;YACb,WAAW;YACX,gBAAgB;;iFAIP,iBAAiB;cAvB7B,QAAQ;eAAC;gBACR,YAAY,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;gBAC9E,OAAO,EAAE;oBACP,YAAY;oBACZ,cAAc;oBACd,WAAW;oBACX,aAAa;oBACb,iBAAiB;oBACjB,oBAAoB;oBACpB,yBAAyB;oBACzB,aAAa;oBACb,WAAW;oBACX,UAAU;oBACV,eAAe;oBACf,aAAa;oBACb,uBAAuB;oBACvB,YAAY;oBACZ,aAAa;oBACb,WAAW;oBACX,gBAAgB;iBACjB;gBACD,OAAO,EAAE,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;aAC1E;;wFACY,iBAAiB,mBAtBb,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,aAE3E,YAAY;QACZ,cAAc;QACd,WAAW;QACX,aAAa;QACb,iBAAiB;QACjB,oBAAoB;QACpB,yBAAyB;QACzB,aAAa;QACb,WAAW;QACX,UAAU;QACV,eAAe;QACf,aAAa;QACb,uBAAuB;QACvB,YAAY;QACZ,aAAa;QACb,WAAW;QACX,gBAAgB,aAER,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/lib/module.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  export * from './lib/category-tree/category-tree';
2
2
  export * from './lib/files-grid/files-grid';
3
+ export * from './lib/file-browser/file-browser.component';
4
+ export * from './lib/file-browser/file-browser-demo.component';
5
+ export * from './lib/file-browser/file-browser-resource.component';
3
6
  export * from './lib/module';
4
7
  //# sourceMappingURL=public-api.d.ts.map