@api-client/ui 0.0.11 → 0.0.12
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.
- package/.eslintrc +8 -0
- package/demo/elements/index.html +3 -0
- package/demo/elements/store/file-picker.html +15 -0
- package/demo/elements/store/file-picker.ts +134 -0
- package/demo/elements/store/index.html +19 -0
- package/demo/store/StorePlugin.js +1 -0
- package/dist/bindings/base/StoreBindings.d.ts +5 -0
- package/dist/bindings/base/StoreBindings.d.ts.map +1 -1
- package/dist/bindings/base/StoreBindings.js +15 -1
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/define/store/file-picker.d.ts +9 -0
- package/dist/define/store/file-picker.d.ts.map +1 -0
- package/dist/define/store/file-picker.js +10 -0
- package/dist/define/store/file-picker.js.map +1 -0
- package/dist/define/{files → store}/share-file.d.ts +1 -1
- package/dist/define/store/share-file.d.ts.map +1 -0
- package/dist/define/{files → store}/share-file.js +2 -2
- package/dist/define/store/share-file.js.map +1 -0
- package/dist/elements/store/FilePicker.element.d.ts +87 -0
- package/dist/elements/store/FilePicker.element.d.ts.map +1 -0
- package/dist/elements/store/FilePicker.element.js +263 -0
- package/dist/elements/store/FilePicker.element.js.map +1 -0
- package/dist/elements/store/FilePicker.styles.d.ts +3 -0
- package/dist/elements/store/FilePicker.styles.d.ts.map +1 -0
- package/dist/elements/store/FilePicker.styles.js +72 -0
- package/dist/elements/store/FilePicker.styles.js.map +1 -0
- package/dist/elements/store/FilesLib.d.ts +10 -0
- package/dist/elements/store/FilesLib.d.ts.map +1 -0
- package/dist/elements/store/FilesLib.js +38 -0
- package/dist/elements/store/FilesLib.js.map +1 -0
- package/dist/elements/{files/ShareFile.d.ts → store/ShareFile.element.d.ts} +1 -1
- package/dist/elements/store/ShareFile.element.d.ts.map +1 -0
- package/dist/elements/{files/ShareFile.js → store/ShareFile.element.js} +1 -1
- package/dist/elements/store/ShareFile.element.js.map +1 -0
- package/dist/elements/store/ShareFile.styles.d.ts.map +1 -0
- package/dist/elements/{files → store}/ShareFile.styles.js.map +1 -1
- package/dist/events/EventTypes.d.ts +1 -0
- package/dist/events/EventTypes.d.ts.map +1 -1
- package/dist/events/EventTypes.js +1 -0
- package/dist/events/EventTypes.js.map +1 -1
- package/dist/events/Events.d.ts +1 -0
- package/dist/events/Events.d.ts.map +1 -1
- package/dist/events/StoreEvents.d.ts +8 -1
- package/dist/events/StoreEvents.d.ts.map +1 -1
- package/dist/events/StoreEvents.js +19 -0
- package/dist/events/StoreEvents.js.map +1 -1
- package/dist/pages/ApplicationScreen.d.ts +1 -1
- package/dist/pages/ApplicationScreen.d.ts.map +1 -1
- package/dist/pages/ApplicationScreen.js +4 -2
- package/dist/pages/ApplicationScreen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.d.ts +0 -6
- package/dist/pages/api-client/ApiClient.screen.d.ts.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +16 -29
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.d.ts +1 -1
- package/dist/pages/api-client/Authenticate.screen.d.ts.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +2 -2
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/pages/Files.page.d.ts +6 -35
- package/dist/pages/api-client/pages/Files.page.d.ts.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +32 -141
- package/dist/pages/api-client/pages/Files.page.js.map +1 -1
- package/dist/pages/api-client/pages/Shared.page.d.ts +1 -5
- package/dist/pages/api-client/pages/Shared.page.d.ts.map +1 -1
- package/dist/pages/api-client/pages/Shared.page.js +1 -40
- package/dist/pages/api-client/pages/Shared.page.js.map +1 -1
- package/dist/pages/demo/DemoPage.d.ts +7 -0
- package/dist/pages/demo/DemoPage.d.ts.map +1 -1
- package/dist/pages/demo/DemoPage.js +14 -0
- package/dist/pages/demo/DemoPage.js.map +1 -1
- package/dist/store/FileSystem.d.ts +90 -0
- package/dist/store/FileSystem.d.ts.map +1 -0
- package/dist/store/FileSystem.js +260 -0
- package/dist/store/FileSystem.js.map +1 -0
- package/dist/styles/global-styles.d.ts.map +1 -1
- package/dist/styles/global-styles.js +7 -0
- package/dist/styles/global-styles.js.map +1 -1
- package/dist/ui/icons/Icons.d.ts +2 -1
- package/dist/ui/icons/Icons.d.ts.map +1 -1
- package/dist/ui/icons/Icons.js +1 -0
- package/dist/ui/icons/Icons.js.map +1 -1
- package/dist/ui/list/UiDropdownList.d.ts +9 -1
- package/dist/ui/list/UiDropdownList.d.ts.map +1 -1
- package/dist/ui/list/UiDropdownList.js +39 -17
- package/dist/ui/list/UiDropdownList.js.map +1 -1
- package/dist/ui/list/UiList.d.ts +6 -1
- package/dist/ui/list/UiList.d.ts.map +1 -1
- package/dist/ui/list/UiList.js +24 -9
- package/dist/ui/list/UiList.js.map +1 -1
- package/dist/ui/table/DataTable.d.ts +4 -0
- package/dist/ui/table/DataTable.d.ts.map +1 -1
- package/dist/ui/table/DataTable.js +23 -1
- package/dist/ui/table/DataTable.js.map +1 -1
- package/package.json +1 -1
- package/src/bindings/base/StoreBindings.ts +16 -1
- package/src/define/store/file-picker.ts +12 -0
- package/src/define/{files → store}/share-file.ts +2 -2
- package/src/elements/store/FilePicker.element.ts +297 -0
- package/src/elements/store/FilePicker.styles.ts +72 -0
- package/src/elements/store/FilesLib.ts +32 -0
- package/src/events/EventTypes.ts +1 -0
- package/src/events/StoreEvents.ts +21 -1
- package/src/pages/ApplicationScreen.ts +5 -3
- package/src/pages/api-client/ApiClient.screen.ts +16 -31
- package/src/pages/api-client/Authenticate.screen.ts +2 -2
- package/src/pages/api-client/pages/Files.page.ts +37 -164
- package/src/pages/api-client/pages/Shared.page.ts +2 -40
- package/src/pages/demo/DemoPage.ts +17 -0
- package/src/store/FileSystem.ts +325 -0
- package/src/styles/global-styles.ts +7 -0
- package/src/ui/icons/Icons.ts +2 -1
- package/src/ui/list/UiDropdownList.ts +44 -17
- package/src/ui/list/UiList.ts +26 -10
- package/src/ui/table/DataTable.ts +29 -3
- package/test/elements/store/FilePicker.test.ts +241 -0
- package/test/env.js +3 -0
- package/test/helpers/StoreHelper.ts +390 -0
- package/tsconfig.eslint.json +3 -1
- package/web-test-runner.config.mjs +49 -3
- package/dist/define/files/share-file.d.ts.map +0 -1
- package/dist/define/files/share-file.js.map +0 -1
- package/dist/elements/files/ShareFile.d.ts.map +0 -1
- package/dist/elements/files/ShareFile.js.map +0 -1
- package/dist/elements/files/ShareFile.styles.d.ts.map +0 -1
- /package/dist/elements/{files → store}/ShareFile.styles.d.ts +0 -0
- /package/dist/elements/{files → store}/ShareFile.styles.js +0 -0
- /package/src/elements/{files/ShareFile.ts → store/ShareFile.element.ts} +0 -0
- /package/src/elements/{files → store}/ShareFile.styles.ts +0 -0
|
@@ -3,7 +3,6 @@ import { html, nothing } from "lit";
|
|
|
3
3
|
import { join } from "lit/directives/join.js";
|
|
4
4
|
import { map } from "lit/directives/map.js";
|
|
5
5
|
import { until } from 'lit/directives/until.js';
|
|
6
|
-
import { Patch } from "@api-client/json";
|
|
7
6
|
import { DataTable } from "../../../ui/table/DataTable.js";
|
|
8
7
|
import { NavigationEvents } from "../../../events/NavigationEvents.js";
|
|
9
8
|
import { navigate } from "../../../lib/route.js";
|
|
@@ -11,6 +10,8 @@ import { DataImportProcessor } from "../../../http-client/store/DataImportProces
|
|
|
11
10
|
import { SnackNotifications } from "../../../ui/notification/SnackNotifications.js";
|
|
12
11
|
import UserCache from '../../../store/UserCache.js';
|
|
13
12
|
import AppInfo from '../AppInfo.js';
|
|
13
|
+
import { fileIcon } from "../../../elements/store/FilesLib.js";
|
|
14
|
+
import { FileSystem } from "../../../store/FileSystem.js";
|
|
14
15
|
import '@github/relative-time-element';
|
|
15
16
|
import '../../../define/ui/ui-list.js';
|
|
16
17
|
import '../../../define/ui/ui-list-item.js';
|
|
@@ -21,7 +22,7 @@ import '../../../define/ui/ui-button.js';
|
|
|
21
22
|
import '../../../define/ui/ui-divider.js';
|
|
22
23
|
import '../../../define/ui/ui-text-field.js';
|
|
23
24
|
import '../../../define/dialog/rename-dialog.js';
|
|
24
|
-
import '../../../define/
|
|
25
|
+
import '../../../define/store/share-file.js';
|
|
25
26
|
var ImportState;
|
|
26
27
|
(function (ImportState) {
|
|
27
28
|
ImportState[ImportState["Analyzing"] = 0] = "Analyzing";
|
|
@@ -36,12 +37,8 @@ var ImportState;
|
|
|
36
37
|
export class FilesPage {
|
|
37
38
|
constructor(screen) {
|
|
38
39
|
this.screen = screen;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
* Do not overwrite this property or when you must then update the DataTable's `items` as well.
|
|
42
|
-
*/
|
|
43
|
-
this.files = [];
|
|
44
|
-
this.dt = new DataTable(() => this.files, { ariaLabel: 'Your files', active: true, selection: 'single' });
|
|
40
|
+
this.fs = new FileSystem();
|
|
41
|
+
this.dt = new DataTable(() => this.fs.files, { ariaLabel: 'Your files', active: true, selection: 'single' });
|
|
45
42
|
this.createProjectHandler = this.createProjectHandler.bind(this);
|
|
46
43
|
this.createFolderHandler = this.createFolderHandler.bind(this);
|
|
47
44
|
this.createSelectHandler = this.createSelectHandler.bind(this);
|
|
@@ -61,119 +58,22 @@ export class FilesPage {
|
|
|
61
58
|
this.dt.addEventListener('activate', this.itemActivateHandler.bind(this));
|
|
62
59
|
this.dt.addEventListener('render', this.handleTableRender.bind(this));
|
|
63
60
|
this.dt.addEventListener('select', this.handleTableSelect.bind(this));
|
|
61
|
+
this.dt.addEventListener('scrollend', this.handleTableScrollEnd.bind(this));
|
|
62
|
+
this.fs.observe();
|
|
63
|
+
this.fs.addEventListener('change', () => this.screen.render());
|
|
64
|
+
this.fs.addEventListener('error', (e) => {
|
|
65
|
+
const event = e;
|
|
66
|
+
this.errorMessage = event.detail;
|
|
67
|
+
});
|
|
68
|
+
this.fs.addEventListener('querycomplete', () => {
|
|
69
|
+
document.body.dispatchEvent(new Event('querycomplete', { bubbles: true }));
|
|
70
|
+
});
|
|
64
71
|
}
|
|
65
72
|
async refresh() {
|
|
66
|
-
this.resetList();
|
|
67
|
-
this.screen.render();
|
|
68
|
-
await this.readFiles();
|
|
69
|
-
}
|
|
70
|
-
resetList() {
|
|
71
|
-
this.files = [];
|
|
72
|
-
this.cursor = undefined;
|
|
73
|
-
this.breadcrumbs = undefined;
|
|
74
|
-
}
|
|
75
|
-
async readFiles() {
|
|
76
|
-
const { selectedSpace } = this.screen;
|
|
77
|
-
if (!selectedSpace) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (this.readingFiles) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
this.readingFiles = true;
|
|
84
|
-
const { cursor: filesCursor, folder } = this;
|
|
85
|
-
const opts = {
|
|
86
|
-
space: selectedSpace,
|
|
87
|
-
descending: true,
|
|
88
|
-
};
|
|
89
|
-
if (filesCursor) {
|
|
90
|
-
opts.cursor = filesCursor;
|
|
91
|
-
}
|
|
92
|
-
if (folder) {
|
|
93
|
-
opts.parent = folder;
|
|
94
|
-
}
|
|
95
|
-
try {
|
|
96
|
-
const result = await this.listFiles(opts);
|
|
97
|
-
const { items, cursor } = result;
|
|
98
|
-
this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));
|
|
99
|
-
this.cursor = cursor;
|
|
100
|
-
if (folder) {
|
|
101
|
-
const br = await this.screen.bindings.store.files.breadcrumbs(folder);
|
|
102
|
-
this.breadcrumbs = br.items.reverse();
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
this.readingFiles = false;
|
|
107
|
-
}
|
|
108
|
-
this.screen.render();
|
|
109
|
-
}
|
|
110
|
-
async listFiles(opts) {
|
|
111
|
-
return this.screen.bindings.store.files.list(opts);
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Sorts files on the list.
|
|
115
|
-
*
|
|
116
|
-
* Folders are always on top.
|
|
117
|
-
*/
|
|
118
|
-
filesSortFunction(a, b) {
|
|
119
|
-
if (a.kind !== b.kind) {
|
|
120
|
-
if (a.kind === FolderKind) {
|
|
121
|
-
return -1;
|
|
122
|
-
}
|
|
123
|
-
return 1;
|
|
124
|
-
}
|
|
125
|
-
if (a.kind === b.kind && a.kind === FolderKind) {
|
|
126
|
-
return (a.info.name || '').localeCompare(b.info.name || '');
|
|
127
|
-
}
|
|
128
|
-
return b.lastModified.time - a.lastModified.time;
|
|
129
|
-
}
|
|
130
|
-
handleFileEvent(event) {
|
|
131
|
-
const typed = event;
|
|
132
|
-
if (typed.parent && typed.parent !== this.folder) {
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
if (typed.alt !== 'meta') {
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
switch (event.operation) {
|
|
139
|
-
case 'created':
|
|
140
|
-
this.handleFileCreated(typed.data);
|
|
141
|
-
break;
|
|
142
|
-
case 'deleted':
|
|
143
|
-
this.handleFileDeleted(typed);
|
|
144
|
-
break;
|
|
145
|
-
case 'patch':
|
|
146
|
-
this.handleFilePatch(typed);
|
|
147
|
-
break;
|
|
148
|
-
default:
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
handleFileCreated(file) {
|
|
152
|
-
this.files.push(file);
|
|
153
|
-
this.files.sort(this.filesSortFunction.bind(this));
|
|
154
|
-
this.screen.render();
|
|
155
|
-
}
|
|
156
|
-
handleFileDeleted(event) {
|
|
157
|
-
this.removeFileFromList(event.key);
|
|
158
|
-
}
|
|
159
|
-
removeFileFromList(key) {
|
|
160
|
-
const index = this.files.findIndex(i => i.key === key);
|
|
161
|
-
if (index === -1) {
|
|
162
|
-
return;
|
|
163
|
-
}
|
|
164
|
-
this.files.splice(index, 1);
|
|
165
|
-
this.screen.render();
|
|
166
|
-
}
|
|
167
|
-
handleFilePatch(event) {
|
|
168
|
-
const { data, key } = event;
|
|
169
|
-
const index = this.files.findIndex(i => i.key === key);
|
|
170
|
-
if (index === -1) {
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
const file = this.files[index];
|
|
174
|
-
const result = Patch.apply(file, data.patch);
|
|
175
|
-
this.files[index] = result.doc;
|
|
73
|
+
this.fs.resetList();
|
|
176
74
|
this.screen.render();
|
|
75
|
+
await this.fs.queryPage();
|
|
76
|
+
await this.fs.queryBreadcrumbs();
|
|
177
77
|
}
|
|
178
78
|
cancelCreateProjectDialog() {
|
|
179
79
|
this.screen.closeDialog('createProjectDialog');
|
|
@@ -273,8 +173,8 @@ export class FilesPage {
|
|
|
273
173
|
throw new Error('You need to select a space first');
|
|
274
174
|
}
|
|
275
175
|
const opts = {};
|
|
276
|
-
if (this.
|
|
277
|
-
opts.parent = this.
|
|
176
|
+
if (this.fs.parent) {
|
|
177
|
+
opts.parent = this.fs.parent;
|
|
278
178
|
}
|
|
279
179
|
const result = await this.screen.bindings.store.files.add(file, opts);
|
|
280
180
|
if (media) {
|
|
@@ -359,7 +259,7 @@ export class FilesPage {
|
|
|
359
259
|
this.importState = ImportState.Importing;
|
|
360
260
|
this.screen.render();
|
|
361
261
|
try {
|
|
362
|
-
await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.
|
|
262
|
+
await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.fs.parent);
|
|
363
263
|
this.importState = ImportState.Done;
|
|
364
264
|
this.screen.render();
|
|
365
265
|
}
|
|
@@ -401,8 +301,11 @@ export class FilesPage {
|
|
|
401
301
|
this.selectedItem = item;
|
|
402
302
|
this.screen.render();
|
|
403
303
|
}
|
|
304
|
+
handleTableScrollEnd() {
|
|
305
|
+
this.fs.debounceQuery();
|
|
306
|
+
}
|
|
404
307
|
openProject(key) {
|
|
405
|
-
const file = this.files.find(i => i.key === key);
|
|
308
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
406
309
|
if (!file) {
|
|
407
310
|
throw new Error(`Invalid state: file not found`);
|
|
408
311
|
}
|
|
@@ -483,7 +386,7 @@ export class FilesPage {
|
|
|
483
386
|
await files.writeFile(path, data, { dispose: true });
|
|
484
387
|
}
|
|
485
388
|
renameFile(key) {
|
|
486
|
-
const file = this.files.find(i => i.key === key);
|
|
389
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
487
390
|
if (!file) {
|
|
488
391
|
return;
|
|
489
392
|
}
|
|
@@ -503,7 +406,7 @@ export class FilesPage {
|
|
|
503
406
|
});
|
|
504
407
|
}
|
|
505
408
|
shareFile(key) {
|
|
506
|
-
const file = this.files.find(i => i.key === key);
|
|
409
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
507
410
|
if (!file) {
|
|
508
411
|
return;
|
|
509
412
|
}
|
|
@@ -514,7 +417,7 @@ export class FilesPage {
|
|
|
514
417
|
dialog.modal = true;
|
|
515
418
|
document.body.appendChild(dialog);
|
|
516
419
|
dialog.open = true;
|
|
517
|
-
dialog.addEventListener('
|
|
420
|
+
dialog.addEventListener('close', () => {
|
|
518
421
|
document.body.removeChild(dialog);
|
|
519
422
|
});
|
|
520
423
|
}
|
|
@@ -554,7 +457,7 @@ export class FilesPage {
|
|
|
554
457
|
if (!selectedItem) {
|
|
555
458
|
return nothing;
|
|
556
459
|
}
|
|
557
|
-
const file = this.files.find(i => i.key === selectedItem);
|
|
460
|
+
const file = this.fs.files.find(i => i.key === selectedItem);
|
|
558
461
|
if (!file) {
|
|
559
462
|
return nothing;
|
|
560
463
|
}
|
|
@@ -649,7 +552,7 @@ export class FilesPage {
|
|
|
649
552
|
`;
|
|
650
553
|
}
|
|
651
554
|
renderBreadcrumbs() {
|
|
652
|
-
const { breadcrumbs = [] } = this;
|
|
555
|
+
const { breadcrumbs = [] } = this.fs;
|
|
653
556
|
if (!breadcrumbs.length) {
|
|
654
557
|
return html ``;
|
|
655
558
|
}
|
|
@@ -777,22 +680,10 @@ export class FilesPage {
|
|
|
777
680
|
`;
|
|
778
681
|
}
|
|
779
682
|
nameCell(item) {
|
|
780
|
-
|
|
781
|
-
switch (item.kind) {
|
|
782
|
-
case DataFileKind:
|
|
783
|
-
icon = 'schema';
|
|
784
|
-
break;
|
|
785
|
-
case FolderKind:
|
|
786
|
-
icon = 'folder';
|
|
787
|
-
break;
|
|
788
|
-
case ProjectKind:
|
|
789
|
-
icon = 'collectionsBookmark';
|
|
790
|
-
break;
|
|
791
|
-
default:
|
|
792
|
-
}
|
|
683
|
+
const icon = fileIcon(item);
|
|
793
684
|
return this.dt.cell(html `
|
|
794
685
|
${icon ? html `<ui-icon icon="${icon}" class="cell-icon"></ui-icon>` : nothing}
|
|
795
|
-
${item.info.name || 'Unnamed
|
|
686
|
+
${item.info.name || 'Unnamed file'}
|
|
796
687
|
`, { class: 'name-cell', data: { kind: item.kind } });
|
|
797
688
|
}
|
|
798
689
|
ownerCell(item) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Files.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Files.page.ts"],"names":[],"mappings":"AAAA,OAAO,EACE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAC5D,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,GAQlD,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAkB,MAAM,KAAK,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAIpF,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,+BAA+B,CAAC;AACvC,OAAO,+BAA+B,CAAC;AACvC,OAAO,oCAAoC,CAAC;AAC5C,OAAO,wCAAwC,CAAC;AAChD,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,iCAAiC,CAAC;AACzC,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,yCAAyC,CAAC;AACjD,OAAO,qCAAqC,CAAC;AAE7C,IAAK,WAMJ;AAND,WAAK,WAAW;IACd,uDAAS,CAAA;IACT,qDAAQ,CAAA;IACR,uDAAS,CAAA;IACT,6CAAI,CAAA;IACJ,+CAAK,CAAA;AACP,CAAC,EANI,WAAW,KAAX,WAAW,QAMf;AAED;;GAEG;AACH,MAAM,OAAO,SAAS;IAqCpB,YAAsB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAnC7C;;;WAGG;QACH,UAAK,GAAY,EAAE,CAAC;QAepB,OAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAiBnG,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO;SACR;QACD,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,OAAO;SACR;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC7C,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,IAAI,WAAW,EAAE;YACf,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;SAC3B;QACD,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;SACtB;QACD,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,MAAM,EAAE;gBACV,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBACtE,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACvC;SACF;gBAAS;YACR,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC3B;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,IAA6B;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,CAAQ,EAAE,CAAO;QACjC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE;YACrB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;gBACzB,OAAO,CAAC,CAAC,CAAC;aACX;YACD,OAAO,CAAC,CAAC;SACV;QACD,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;YAC9C,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;SAC7D;QACD,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;IACnD,CAAC;IAED,eAAe,CAAC,KAAqB;QACnC,MAAM,KAAK,GAAG,KAA2C,CAAC;QAC1D,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;YAChD,OAAO;SACR;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;YACxB,OAAO;SACR;QACD,QAAQ,KAAK,CAAC,SAAS,EAAE;YACvB,KAAK,SAAS;gBAAE,IAAI,CAAC,iBAAiB,CAAE,KAAuC,CAAC,IAAI,CAAC,CAAC;gBAAC,MAAM;YAC7F,KAAK,SAAS;gBAAE,IAAI,CAAC,iBAAiB,CAAC,KAA8B,CAAC,CAAC;gBAAC,MAAM;YAC9E,KAAK,OAAO;gBAAE,IAAI,CAAC,eAAe,CAAC,KAAgC,CAAC,CAAC;gBAAC,MAAM;YAC5E,QAAQ;SACT;IACH,CAAC;IAED,iBAAiB,CAAC,IAAW;QAC3B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,iBAAiB,CAAC,KAA4B;QAC5C,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,OAAO;SACR;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,eAAe,CAAC,KAA8B;QAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,OAAO;SACR;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAY,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAES,yBAAyB;QACjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IACjD,CAAC;IAES,wBAAwB;QAChC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAChD,CAAC;IAES,kBAAkB;QAC1B,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IACjD,CAAC;IAES,wBAAwB;QAChC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAChD,CAAC;IAES,oBAAoB,CAAC,CAAc;QAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAyB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QACD,MAAM,MAAM,GAAG,SAA8B,CAAC,CAAC,gBAAgB;QAC/D,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO;SACR;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAES,mBAAmB,CAAC,CAAc;QAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAyB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QACD,MAAM,MAAM,GAAG,SAA8B,CAAC,CAAC,gBAAgB;QAC/D,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO;SACR;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAES,mBAAmB,CAAC,CAAc;QAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAyB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QACD,MAAM,MAAM,GAAG,SAA8B,CAAC,CAAC,gBAAgB;QAC/D,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;YAC7B,OAAO;SACR;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAES,KAAK,CAAC,UAAU,CAAC,IAAY;QACrC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;QACD,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,IAAY;QACpC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,SAAS,CAAC,IAAY;QACpC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;QACD,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAES,KAAK,CAAC,OAAO,CAAC,IAAW,EAAE,KAAe;QAClD,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;SACrD;QACD,MAAM,IAAI,GAAmB,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SAC3B;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,KAAK,EAAE;YACT,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC;SACnF;IACH,CAAC;IAES,wBAAwB,CAAC,CAAc;QAC/C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAA+B,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAA4B,CAAC;QAC3D,IAAI,MAAM,KAAK,gBAAgB,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;SAC/C;aAAM,IAAI,MAAM,KAAK,cAAc,EAAE;YACpC,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;IACH,CAAC;IAES,mBAAmB,CAAC,CAAc;QAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,IAA+B,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO;SACR;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAA4B,CAAC;QAC3D,IAAI,MAAM,KAAK,QAAQ,EAAE;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;SAC9C;aAAM,IAAI,MAAM,KAAK,SAAS,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;SAC/C;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE;YAC9B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;SAC9C;IACH,CAAC;IAES,aAAa,CAAC,CAAc;QACpC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAyB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO;SACR;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,EAAE;YACd,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO;SACR;QACD,MAAM,MAAM,GAAG,SAA8B,CAAC,CAAC,gBAAgB;QAC/D,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO;SACR;QACD,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACvB,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,OAAO;SACR;QACD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAES,KAAK,CAAC,iBAAiB,CAAC,IAAU;QAC1C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAErB,MAAM,SAAS,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAErB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACnB,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;IACH,CAAC;IAES,KAAK,CAAC,kBAAkB;QAChC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACtD;QACD,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,eAAe,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;SACnE;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACrB,IAAI;YACF,MAAM,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5F,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;SACtB;QAAC,OAAO,CAAC,EAAE;YACV,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;SACtC;IACH,CAAC;IAES,wBAAwB;QAChC,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;SAClC;QACD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IAC/B,CAAC;IAES,mBAAmB,CAAC,IAAW;QACvC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,IAAI,KAAK,WAAW,EAAE;YACxB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC5B;aAAM,IAAI,IAAI,KAAK,UAAU,EAAE;YAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvB;aAAM,IAAI,IAAI,KAAK,YAAY,EAAE;YAChC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/B;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;SACrD;IACH,CAAC;IAES,iBAAiB;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAES,iBAAiB,CAAC,IAAuB;QACjD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,OAAO;SACR;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;SAClD;QACD,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,GAAW;QACxB,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;SAC3C;QACD,gBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACrC,GAAG;YACH,KAAK,EAAE,aAAa;SACrB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAa;QAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,CAAC;IAES,sBAAsB,CAAC,CAAc;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAmB,CAAC;QAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,MAAqB,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAgB,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAa,CAAC;QACvC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;YACtB,OAAO;SACR;QACD,IAAI,SAAS,KAAK,QAAQ,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACtB;aAAM,IAAI,SAAS,KAAK,WAAW,EAAE;YACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;SACpB;aAAM,IAAI,SAAS,KAAK,QAAQ,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACtB;aAAM,IAAI,SAAS,KAAK,OAAO,EAAE;YAChC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SACrB;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;SAC1D;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpE,kBAAkB,CAAC,MAAM,CAAC,8BAA8B,EAAE;YACxD,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,MAAM;YACnB,cAAc,EAAE,KAAK,IAAI,EAAE;gBACzB,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAqB,CAAC;QACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC;YAC7C,sBAAsB,EAAE,IAAI;YAC5B,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE;gBACP;oBACE,WAAW,EAAE,mBAAmB;oBAChC,MAAM,EAAE;wBACN,kBAAkB,EAAE,CAAC,OAAO,CAAC;qBAC9B;iBACF;aACF;SACF,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,QAAQ,EAAE;YACxB,OAAO;SACR;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,WAAW,CAAC,QAAkB,CAAC;QAC5C,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAES,UAAU,CAAC,GAAW;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAS,EAAE,EAAE;YACnD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,EAAwC,CAAC;YACvD,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;YAC1C,IAAI,CAAC,SAAS,IAAI,KAAK,EAAE;gBACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAe,CAAC,CAAC;aAC/C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAES,SAAS,CAAC,GAAW;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAES,mBAAmB;QAC3B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE;YACjB,OAAM;SACP;QACD,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAES,mBAAmB;QAC3B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE;YACjB,OAAM;SACP;QACD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA;;;QAGP,IAAI,CAAC,iBAAiB,EAAE;;QAExB,IAAI,CAAC,qBAAqB,EAAE;QAC5B,IAAI,CAAC,kBAAkB,EAAE;QACzB,IAAI,CAAC,qBAAqB,EAAE;;MAE9B,IAAI,CAAC,gBAAgB,EAAE;MACvB,IAAI,CAAC,yBAAyB,EAAE;MAChC,IAAI,CAAC,wBAAwB,EAAE;MAC/B,IAAI,CAAC,kBAAkB,EAAE;MACzB,IAAI,CAAC,wBAAwB,EAAE;KAChC,CAAC;IACJ,CAAC;IAES,qBAAqB;QAC7B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAC9B,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO,OAAO,CAAA;SACf;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAA;MACT,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC;MACrC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC;;KAEvC,CAAC;IACJ,CAAC;IAES,0BAA0B,CAAC,QAAe;QAClD,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAClC,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,YAAY,EAAE;YAChB,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;SAClC;QACD,OAAO,IAAI,CAAA;;;;mBAII,CAAC,QAAQ;gBACZ,IAAI,CAAC,mBAAmB;;;;KAInC,CAAC;IACJ,CAAC;IAES,2BAA2B,CAAC,QAAe;QACnD,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAClC,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,YAAY,EAAE;YAChB,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;SACpC;QACD,OAAO,IAAI,CAAA;;;;mBAII,CAAC,SAAS;gBACb,IAAI,CAAC,mBAAmB;;;;KAInC,CAAC;IACJ,CAAC;IAES,kBAAkB;QAC1B,OAAO,IAAI,CAAA;;iBAEE,IAAI,CAAC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;KAwBpC,CAAC;IACJ,CAAC;IAES,qBAAqB;QAC7B,OAAO,IAAI,CAAA;;iBAEE,IAAI,CAAC,wBAAwB;;;;;;;;;;;;;;;;KAgBzC,CAAC;IACJ,CAAC;IAES,iBAAiB;QACzB,MAAM,EAAE,WAAW,GAAC,EAAE,EAAE,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACvB,OAAO,IAAI,CAAA,EAAE,CAAC;SACf;QACD,MAAM,KAAK,GAAqB,CAAC;gBAC/B,GAAG,EAAE,EAAE;gBACP,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,MAAM;aACb,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACvB,OAAO,IAAI,CAAA;;;QAGP,IAAI,CACJ,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAA,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,EAC5F,IAAI,CAAA,8DAA8D,CACnE;;;KAGF,CAAC;IACJ,CAAC;IAES,gBAAgB;QACxB,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAES,gBAAgB;QACxB,OAAO,IAAI,CAAA;;;KAGV,CAAC;IACJ,CAAC;IAES,iBAAiB;QACzB,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;SAC/D;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAA,mDAAmD,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QAC7G,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,eAAe,CAAC,IAAW;QACnC,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;YAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;SACnC;QACD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,cAAc;QACtB,OAAO,IAAI,CAAA;;;;;KAKV,CAAC;IACJ,CAAC;IAES,cAAc;QACtB,OAAO,IAAI,CAAA;;;;;KAKV,CAAC;IACJ,CAAC;IAES,gBAAgB,CAAC,YAA2B;QACpD,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC5C,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAA;;;;;KAKV,CAAC;IACJ,CAAC;IAES,gBAAgB,CAAC,YAA2B;QACpD,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;YAC5C,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAA;;;;;KAKV,CAAC;IACJ,CAAC;IAES,eAAe,CAAC,YAA2B;QACnD,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC3C,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAA;;;;;KAKV,CAAC;IACJ,CAAC;IAES,iBAAiB,CAAC,IAAW;QACrC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,SAAS,CAAC;QAC3D,OAAO,IAAI,CAAA;;;;;oBAKK,UAAU,CAAC,WAAW;kBACxB,UAAU,CAAC,WAAW;gBACxB,UAAU,CAAC,WAAW;mBACnB,UAAU,CAAC,WAAW;iBACxB,IAAI,CAAC,sBAAsB;kBAC1B,GAAG;;;;;;UAMX,IAAI,CAAC,cAAc,EAAE;UACrB,IAAI,CAAC,eAAe,CAAC,YAA6B,CAAC;;UAEnD,IAAI,CAAC,cAAc,EAAE;UACrB,IAAI,CAAC,gBAAgB,CAAC,YAA6B,CAAC;UACpD,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;;UAEhB,IAAI,CAAC,gBAAgB,CAAC,YAA6B,CAAC;SACrD,CAAC,CAAC,CAAC,OAAO;;;KAGd,CAAC;IACJ,CAAC;IAES,QAAQ,CAAC,IAAW;QAC5B,IAAI,IAA0B,CAAC;QAC/B,QAAQ,IAAI,CAAC,IAAI,EAAE;YACjB,KAAK,YAAY;gBAAE,IAAI,GAAG,QAAQ,CAAC;gBAAC,MAAM;YAC1C,KAAK,UAAU;gBAAE,IAAI,GAAG,QAAQ,CAAC;gBAAC,MAAM;YACxC,KAAK,WAAW;gBAAE,IAAI,GAAG,qBAAqB,CAAC;gBAAC,MAAM;YACtD,QAAQ;SACT;QAED,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAA;QACpB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA,kBAAkB,IAAI,gCAAgC,CAAC,CAAC,CAAC,OAAO;QAC3E,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,iBAAiB;KACtC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxD,CAAC;IAES,SAAS,CAAC,IAAW;QAC7B,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAA,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;SACxD;QACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE;YAC3B,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAA,0CAA0C,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;SAC9F;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAA,+CAA+C,CAAC;QACnE,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAA,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IAChF,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,GAAW;QACxC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,CAAA;;OAEV,CAAC;SACH;QACD,OAAO,IAAI,CAAA,8BAA8B,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,SAAS,CAAC;IAC5E,CAAC;IAES,WAAW,CAAC,IAAW;QAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QAE9B,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAA;iCACK,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;KACrE,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;IAChC,CAAC;IAES,WAAW,CAAC,IAAW;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACzG,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IAES,mBAAmB,CAAC,IAAW;QACvC,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,SAAS,CAAC;QAC3D,OAAO,IAAI,CAAA;;;;;oBAKK,UAAU,CAAC,WAAW;kBACxB,UAAU,CAAC,WAAW;gBACxB,UAAU,CAAC,WAAW;mBACnB,UAAU,CAAC,WAAW;iBACxB,IAAI,CAAC,sBAAsB;kBAC1B,GAAG;;;;;;UAMX,IAAI,CAAC,eAAe,CAAC,YAA6B,CAAC;;UAEnD,IAAI,CAAC,gBAAgB,CAAC,YAA6B,CAAC;UACpD,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;;UAEhB,IAAI,CAAC,gBAAgB,CAAC,YAA6B,CAAC;SACrD,CAAC,CAAC,CAAC,OAAO;;;KAGd,CAAC;IACJ,CAAC;IAES,yBAAyB;QACjC,OAAO,IAAI,CAAA;;uCAEwB,IAAI,CAAC,oBAAoB;;;;;;;;;;wBAUxC,IAAI,CAAC,MAAM,CAAC,aAAa;;;;0DAIS,IAAI,CAAC,yBAAyB;;;;;KAKnF,CAAC;IACJ,CAAC;IAES,wBAAwB;QAChC,OAAO,IAAI,CAAA;;uCAEwB,IAAI,CAAC,mBAAmB;;;;kIAImE,IAAI,CAAC,MAAM,CAAC,aAAa;;;0DAGjG,IAAI,CAAC,wBAAwB;;;;;KAKlF,CAAC;IACJ,CAAC;IAES,wBAAwB;QAChC,OAAO,IAAI,CAAA;;uCAEwB,IAAI,CAAC,mBAAmB;;;;kIAImE,IAAI,CAAC,MAAM,CAAC,aAAa;;;0DAGjG,IAAI,CAAC,wBAAwB;;;;;KAKlF,CAAC;IACJ,CAAC;IAES,kBAAkB;QAC1B,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,MAAM,cAAc,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC7G,MAAM,WAAW,GAAG,WAAW,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1E,MAAM,SAAS,GAAG,WAAW,KAAK,WAAW,CAAC,IAAI,CAAC;QACnD,OAAO,IAAI,CAAA;+CACgC,IAAI,CAAC,wBAAwB;uBACrD,IAAI,CAAC,aAAa;;;YAG7B,IAAI,CAAC,gBAAgB,EAAE;;;0DAGuB,IAAI,CAAC,kBAAkB,KAAK,WAAW;YACrF,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA,2DAA2D,cAAc,sBAAsB,CAAC,CAAC,CAAC,EAAE;;;;KAI3H,CAAC;IACJ,CAAC;IAES,gBAAgB;QACxB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;QAC7B,QAAQ,WAAW,EAAE;YACnB,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3D,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtD,KAAK,WAAW,CAAC,QAAQ,CAAC;YAC1B,KAAK,WAAW,CAAC,SAAS,CAAC;YAC3B,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1C;IACH,CAAC;IAES,iBAAiB;QACzB,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;QACjC,MAAM,YAAY,GAAG,eAAe,IAAI,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrG,OAAO,IAAI,CAAA;;;MAGT,YAAY,CAAC,CAAC,CAAC,IAAI,CAAA,6BAA6B,YAAY,QAAQ,CAAC,CAAC,CAAC,EAAE;KAC1E,CAAC;IACJ,CAAC;IAES,gBAAgB;QACxB,OAAO,IAAI,CAAA;;KAEV,CAAC;IACJ,CAAC;IAES,gBAAgB;QACxB,OAAO,IAAI,CAAA;;KAEV,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { \n IFile, HttpProject, Project, Folder, ProjectKind, FolderKind, \n EventUtils, DataNamespace, DataFile, DataFileKind, \n FileAddOptions, FileBreadcrumb, ContextSpaceListOptions, \n BroadcastEvent, BroadcastFileData, \n FileMetaCreatedBroadcastEvent,\n DeletedBroadcastEvent,\n FilePatchBroadcastEvent,\n ContextListResult,\n ICapabilities,\n} from \"@api-client/core/build/browser.js\";\nimport { html, nothing, TemplateResult } from \"lit\";\nimport { join } from \"lit/directives/join.js\";\nimport { map } from \"lit/directives/map.js\";\nimport { until } from 'lit/directives/until.js';\nimport { Patch } from \"@api-client/json\";\nimport type ApiClientScreen from \"../ApiClient.screen.js\";\nimport { DataTable } from \"../../../ui/table/DataTable.js\";\nimport { NavigationEvents } from \"../../../events/NavigationEvents.js\";\nimport { navigate } from \"../../../lib/route.js\";\nimport { DataImportProcessor } from \"../../../http-client/store/DataImportProcessor.js\";\nimport { SnackNotifications } from \"../../../ui/notification/SnackNotifications.js\";\nimport { UiDialogClosingReason } from \"../../../ui/dialog/UiDialog.js\";\nimport { FileBindings } from \"../../../bindings/base/FileBindings.js\";\nimport { IconType } from \"../../../ui/icons/Icons.js\";\nimport UserCache from '../../../store/UserCache.js';\nimport AppInfo from '../AppInfo.js';\nimport '@github/relative-time-element';\nimport '../../../define/ui/ui-list.js';\nimport '../../../define/ui/ui-list-item.js';\nimport '../../../define/ui/ui-dropdown-list.js';\nimport '../../../define/ui/ui-icon.js';\nimport '../../../define/ui/ui-icon-button.js';\nimport '../../../define/ui/ui-button.js';\nimport '../../../define/ui/ui-divider.js';\nimport '../../../define/ui/ui-text-field.js';\nimport '../../../define/dialog/rename-dialog.js';\nimport '../../../define/files/share-file.js';\n\nenum ImportState {\n Analyzing,\n Analyzed,\n Importing,\n Done,\n Error\n}\n\n/**\n * A class that specializes in rendering the list of files in HTTP Client.\n */\nexport class FilesPage {\n\n /**\n * The list of files to render.\n * Do not overwrite this property or when you must then update the DataTable's `items` as well.\n */\n files: IFile[] = [];\n\n /**\n * The pagination cursor for files.\n * As long there's a cursor, there are more files to request.\n */\n cursor?: string;\n\n /**\n * The key of the currently rendered folder.\n */\n folder?: string;\n\n breadcrumbs?: FileBreadcrumb[];\n\n dt = new DataTable(() => this.files, { ariaLabel: 'Your files', active: true, selection: 'single' });\n\n importProcessor?: DataImportProcessor;\n\n importState?: ImportState;\n\n /**\n * Whether the UI is reading files \n */\n readingFiles?: boolean;\n\n /**\n * A selected in the table item.\n */\n selectedItem?: string;\n \n constructor(protected screen: ApiClientScreen) {\n this.createProjectHandler = this.createProjectHandler.bind(this);\n this.createFolderHandler = this.createFolderHandler.bind(this);\n this.createSelectHandler = this.createSelectHandler.bind(this);\n this.pageOptionsSelectHandler = this.pageOptionsSelectHandler.bind(this);\n this.importHandler = this.importHandler.bind(this);\n this.cancelImportDialog = this.cancelImportDialog.bind(this);\n this.cancelCreateProjectDialog = this.cancelCreateProjectDialog.bind(this);\n this.cancelCreateFolderDialog = this.cancelCreateFolderDialog.bind(this);\n this.handleFileOptionSelect = this.handleFileOptionSelect.bind(this);\n this.cancelCreateSchemaDialog = this.cancelCreateSchemaDialog.bind(this);\n this.createSchemaHandler = this.createSchemaHandler.bind(this);\n this.handleSelectedShare = this.handleSelectedShare.bind(this);\n this.handleSelectedTrash = this.handleSelectedTrash.bind(this);\n this.dt.addEventListener('empty', this.renderEmptyTable.bind(this));\n this.dt.addEventListener('header', this.renderTableHeader.bind(this));\n this.dt.addEventListener('item', this.renderTableItem.bind(this));\n this.dt.addEventListener('activate', this.itemActivateHandler.bind(this));\n this.dt.addEventListener('render', this.handleTableRender.bind(this));\n this.dt.addEventListener('select', this.handleTableSelect.bind(this));\n }\n\n async refresh(): Promise<void> {\n this.resetList();\n this.screen.render();\n await this.readFiles();\n }\n\n resetList(): void {\n this.files = [];\n this.cursor = undefined;\n this.breadcrumbs = undefined;\n }\n\n async readFiles(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n return;\n }\n if (this.readingFiles) {\n return;\n }\n this.readingFiles = true;\n const { cursor: filesCursor, folder } = this;\n const opts: ContextSpaceListOptions = {\n space: selectedSpace,\n descending: true,\n };\n if (filesCursor) {\n opts.cursor = filesCursor;\n }\n if (folder) {\n opts.parent = folder;\n }\n try {\n const result = await this.listFiles(opts);\n const { items, cursor } = result;\n this.files = this.files.concat(items).sort(this.filesSortFunction.bind(this));\n this.cursor = cursor;\n if (folder) {\n const br = await this.screen.bindings.store.files.breadcrumbs(folder);\n this.breadcrumbs = br.items.reverse();\n }\n } finally {\n this.readingFiles = false;\n }\n this.screen.render();\n }\n\n protected async listFiles(opts: ContextSpaceListOptions): Promise<ContextListResult<IFile>> {\n return this.screen.bindings.store.files.list(opts);\n }\n\n /**\n * Sorts files on the list.\n * \n * Folders are always on top.\n */\n filesSortFunction(a: IFile, b:IFile): number {\n if (a.kind !== b.kind) {\n if (a.kind === FolderKind) {\n return -1;\n }\n return 1;\n }\n if (a.kind === b.kind && a.kind === FolderKind) {\n return (a.info.name || '').localeCompare(b.info.name || '');\n }\n return b.lastModified.time - a.lastModified.time;\n }\n\n handleFileEvent(event: BroadcastEvent): void {\n const typed = event as BroadcastEvent & BroadcastFileData;\n if (typed.parent && typed.parent !== this.folder) {\n return;\n }\n if (typed.alt !== 'meta') {\n return;\n }\n switch (event.operation) {\n case 'created': this.handleFileCreated((typed as FileMetaCreatedBroadcastEvent).data); break;\n case 'deleted': this.handleFileDeleted(typed as DeletedBroadcastEvent); break;\n case 'patch': this.handleFilePatch(typed as FilePatchBroadcastEvent); break;\n default:\n }\n }\n\n handleFileCreated(file: IFile): void {\n this.files.push(file);\n this.files.sort(this.filesSortFunction.bind(this));\n this.screen.render();\n }\n\n handleFileDeleted(event: DeletedBroadcastEvent): void {\n this.removeFileFromList(event.key);\n }\n\n removeFileFromList(key: string): void {\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n this.files.splice(index, 1);\n this.screen.render();\n }\n\n handleFilePatch(event: FilePatchBroadcastEvent): void {\n const { data, key } = event;\n const index = this.files.findIndex(i => i.key === key);\n if (index === -1) {\n return;\n }\n const file = this.files[index];\n const result = Patch.apply(file, data.patch);\n this.files[index] = result.doc as IFile;\n this.screen.render();\n }\n\n protected cancelCreateProjectDialog(): void {\n this.screen.closeDialog('createProjectDialog');\n }\n\n protected cancelCreateFolderDialog(): void {\n this.screen.closeDialog('createFolderDialog');\n }\n\n protected cancelImportDialog(): void {\n this.screen.closeDialog('importProjectDialog');\n }\n\n protected cancelCreateSchemaDialog(): void {\n this.screen.closeDialog('createSchemaDialog');\n }\n\n protected createProjectHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addProject(value);\n }\n\n protected createFolderHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addFolder(value);\n }\n\n protected createSchemaHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addSchema(value);\n }\n\n protected async addProject(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = HttpProject.fromName(name);\n const meta = Project.fromProject(media, selectedSpace);\n await this.addFile(meta.toJSON(), media.toJSON());\n }\n\n protected async addFolder(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const space = Folder.fromName(name, selectedSpace);\n await this.addFile(space.toJSON());\n }\n\n protected async addSchema(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = DataNamespace.fromName(name);\n const file = DataFile.fromDataNamespace(media, selectedSpace);\n await this.addFile(file.toJSON(), media.toJSON());\n }\n\n protected async addFile(file: IFile, media?: unknown): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const opts: FileAddOptions = {};\n if (this.folder) {\n opts.parent = this.folder;\n }\n const result = await this.screen.bindings.store.files.add(file, opts);\n if (media) {\n await this.screen.bindings.store.media.add(result.key, media, 'application/json');\n }\n }\n\n protected pageOptionsSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'import-project') {\n this.screen.openDialog('importProjectDialog');\n } else if (option === 'refresh-list') {\n this.refresh();\n }\n }\n\n protected createSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'folder') {\n this.screen.openDialog('createFolderDialog');\n } else if (option === 'project') {\n this.screen.openDialog('createProjectDialog');\n } else if (option === 'schema') {\n this.screen.openDialog('createSchemaDialog');\n }\n }\n\n protected importHandler(e: SubmitEvent): void {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n this.cancelImportDialog();\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n this.cancelImportDialog();\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'import') {\n this.cancelImportDialog();\n return;\n }\n const { files } = input;\n if (!files || !files[0]) {\n this.cancelImportDialog();\n return;\n }\n this.processImportFile(files[0]);\n }\n\n protected async processImportFile(file: File): Promise<void> {\n this.importState = ImportState.Analyzing;\n this.screen.render();\n\n const processor = new DataImportProcessor();\n const analysis = await processor.fromFile(file);\n this.importState = ImportState.Analyzed;\n this.screen.render();\n\n this.importProcessor = processor;\n\n if (!analysis.error) {\n this.continueDataImport();\n }\n }\n\n protected async continueDataImport(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a Folder first');\n }\n const { importProcessor } = this;\n if (!importProcessor) {\n throw new Error('Invalid state. Import processor not activated.');\n }\n this.importState = ImportState.Importing;\n this.screen.render();\n try {\n await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.folder);\n this.importState = ImportState.Done;\n this.screen.render();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n this.importState = ImportState.Error;\n }\n }\n\n protected importDialogCloseHandler(): void {\n if (this.importProcessor) {\n this.importProcessor.abort();\n this.importProcessor = undefined;\n }\n this.importState = undefined;\n }\n\n protected itemActivateHandler(item: IFile): void {\n const { kind } = item;\n if (kind === ProjectKind) {\n this.openProject(item.key);\n } else if (kind === FolderKind) {\n this.openFolder(item);\n } else if (kind === DataFileKind) {\n this.openDataSchema(item.key);\n } else {\n throw new Error(`Unknown activation item: ${kind}`);\n }\n }\n\n protected handleTableRender(): void {\n this.screen.render();\n }\n\n protected handleTableSelect(item: string | string[]): void {\n if (Array.isArray(item)) {\n return;\n }\n this.selectedItem = item;\n this.screen.render();\n }\n\n openProject(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n throw new Error(`Invalid state: file not found`);\n }\n NavigationEvents.App.runHttpProject({\n space: file.space,\n key,\n });\n }\n\n openDataSchema(key: string): void {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('The Folder is not set.');\n }\n NavigationEvents.App.runSchemaDesigner({\n key,\n space: selectedSpace,\n });\n }\n\n async openFolder(folder: IFile): Promise<void> {\n navigate('files', folder.key);\n this.selectedItem = undefined;\n }\n\n protected handleFileOptionSelect(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const list = e.target as HTMLElement;\n const operation = item.dataset.option as string;\n const key = list.dataset.key as string;\n if (!key || !operation) {\n return;\n }\n if (operation === 'delete') {\n this.deleteFile(key);\n } else if (operation === 'save-file') {\n this.saveFile(key);\n } else if (operation === 'rename') {\n this.renameFile(key);\n } else if (operation === 'share') {\n this.shareFile(key);\n }\n }\n\n async deleteFile(key: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Space is not selected.`);\n }\n const trashKey = await this.screen.bindings.store.files.delete(key);\n SnackNotifications.notify('The file was moved to trash.', { \n close: true,\n actionLabel: 'Undo',\n actionCallback: async () => {\n await this.screen.bindings.store.trash.restore(trashKey);\n }\n });\n }\n\n async saveFile(key: string): Promise<void> {\n const files = this.screen.bindings.files as FileBindings;\n const content = await this.screen.bindings.store.media.read(key);\n const queryResult = await files.saveFileDialog({\n excludeAcceptAllOption: true,\n title: 'Save file as...',\n filters: [\n {\n description: 'HTTP Client files',\n accept: {\n 'application/json': ['.json'],\n },\n }\n ],\n });\n if (queryResult.canceled) {\n return;\n }\n const data = JSON.stringify(content);\n const path = queryResult.filePath as string;\n await files.writeFile(path, data, { dispose: true });\n }\n\n protected renameFile(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const name = file.info.name || '';\n const dialog = document.createElement('rename-dialog');\n dialog.name = name;\n dialog.modal = true;\n dialog.open = true;\n document.body.appendChild(dialog);\n dialog.addEventListener('close', async (ev: Event) => {\n document.body.removeChild(dialog);\n const event = ev as CustomEvent<UiDialogClosingReason>;\n const { cancelled, value } = event.detail;\n if (!cancelled && value) {\n this.screen.renameFile(file, value as string);\n }\n });\n }\n\n protected shareFile(key: string): void {\n const file = this.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const dialog = document.createElement('share-file');\n dialog.file = file;\n dialog.user = this.screen.user;\n dialog.appInfo = AppInfo;\n dialog.modal = true;\n document.body.appendChild(dialog);\n dialog.open = true;\n dialog.addEventListener('closed', () => {\n document.body.removeChild(dialog);\n });\n }\n\n protected handleSelectedShare(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.shareFile(selectedItem);\n }\n\n protected handleSelectedTrash(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.deleteFile(selectedItem);\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Your files</h2>\n ${this.renderBreadcrumbs()}\n <div class=\"spacer\"></div>\n ${this.renderSelectedToolbar()}\n ${this.renderCreateButton()}\n ${this.renderPageMoreOptions()}\n </div>\n ${this.renderFilesTable()}\n ${this.renderCreateProjectDialog()}\n ${this.renderCreateFolderDialog()}\n ${this.renderImportDialog()}\n ${this.renderCreateSchemaDialog()}\n `;\n }\n\n protected renderSelectedToolbar(): TemplateResult | typeof nothing {\n const { selectedItem } = this;\n if (!selectedItem) {\n return nothing\n }\n const file = this.files.find(i => i.key === selectedItem);\n if (!file) {\n return nothing;\n }\n return html`\n ${this.renderSelectionShareButton(file)}\n ${this.renderSelectionDeleteButton(file)}\n <ui-divider vertical type=\"middle\"></ui-divider>\n `;\n }\n\n protected renderSelectionShareButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canShare = false;\n if (capabilities) {\n canShare = capabilities.canShare;\n }\n return html`\n <ui-icon-button\n title=\"Share selected file\"\n aria-label=\"Share selected file\"\n ?disabled=\"${!canShare}\"\n @click=\"${this.handleSelectedShare}\"\n >\n <ui-icon icon=\"personAdd\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderSelectionDeleteButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canDelete = false;\n if (capabilities) {\n canDelete = capabilities.canDelete;\n }\n return html`\n <ui-icon-button\n title=\"Move selected file to trash\"\n aria-label=\"Move selected file to trash\"\n ?disabled=\"${!canDelete}\"\n @click=\"${this.handleSelectedTrash}\"\n >\n <ui-icon icon=\"deleteFile\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderCreateButton(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.createSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-button type=\"outlined\" class=\"new-button\">\n <ui-icon icon=\"add\" slot=\"icon\"></ui-icon>\n New\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item image=\"icon\" data-option=\"project\" role=\"menuitem\">\n <ui-icon icon=\"collectionsBookmark\" slot=\"start\"></ui-icon>\n Project\n </ui-list-item>\n <ui-list-item image=\"icon\" data-option=\"schema\" role=\"menuitem\">\n <ui-icon icon=\"schema\" slot=\"start\"></ui-icon>\n Data schema\n </ui-list-item>\n <ui-divider></ui-divider>\n <ui-list-item image=\"icon\" data-option=\"folder\" role=\"menuitem\">\n <ui-icon icon=\"folder\" slot=\"start\"></ui-icon>\n Folder\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderPageMoreOptions(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.pageOptionsSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-icon-button title=\"More options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item data-option=\"import-project\" role=\"menuitem\">\n Import project\n </ui-list-item>\n <ui-list-item data-option=\"refresh-list\" role=\"menuitem\">\n Refresh list\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderBreadcrumbs(): TemplateResult {\n const { breadcrumbs=[] } = this;\n if (!breadcrumbs.length) {\n return html``;\n }\n const items: FileBreadcrumb[] = [{\n key: '',\n kind: '',\n name: 'root',\n }].concat(breadcrumbs);\n return html`\n <nav class=\"breadcrumbs body-medium\" aria-label=\"Breadcrumbs\">\n <ol>\n ${join(\n map(items, (i) => html`<li><a href=\"#/files${i.key ? `/${i.key}` : ''}\">${i.name}</a></li>`),\n html`<li aria-hidden=\"true\"><span class=\"separator\">/</span></li>`\n )}\n </ol>\n </nav>\n `;\n }\n\n protected renderFilesTable(): TemplateResult {\n return this.dt.render();\n }\n\n protected renderEmptyTable(): TemplateResult {\n return html`\n <p>You have no files.</p>\n <p>An HTTP project is a set of HTTP request related to an API. Use it to organize and document your HTTP requests.</p>\n `;\n }\n\n protected renderTableHeader(): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.dt.header('Name', { class: 'name-cell' }));\n if (!this.screen.isSingleUser) {\n result.push(this.dt.header('Owner', { class: 'owner-cell' }));\n }\n result.push(this.dt.header('Updated', { class: 'updated-cell' }));\n result.push(this.dt.header(html`<span hidden aria-label=\"Row options\">Menu</span>`, { class: 'menu-cell' }));\n return result;\n }\n\n protected renderTableItem(item: IFile): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.nameCell(item));\n if (!this.screen.isSingleUser) {\n result.push(this.ownerCell(item));\n }\n result.push(this.updatedCell(item));\n result.push(this.optionsCell(item));\n return result;\n }\n\n protected saveFileOption(): TemplateResult {\n return html`\n <ui-list-item image=\"icon\" data-option=\"save-file\" role=\"menuitem\" title=\"Saves the file on the computer\">\n <ui-icon icon=\"save\" slot=\"start\"></ui-icon>\n Save to file\n </ui-list-item>\n `;\n }\n\n protected openFileOption(): TemplateResult | typeof nothing {\n return html`\n <ui-list-item image=\"icon\" data-option=\"open\" role=\"menuitem\" title=\"Opens the file\">\n <ui-icon icon=\"openInNew\" slot=\"start\"></ui-icon>\n Open\n </ui-list-item>\n `;\n }\n\n protected deleteFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canDelete) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"delete\" role=\"menuitem\" title=\"Moves the file to Trash\">\n <ui-icon icon=\"deleteFile\" slot=\"start\"></ui-icon>\n Delete\n </ui-list-item>\n `;\n }\n\n protected renameFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canRename) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"rename\" role=\"menuitem\" title=\"Renames the file\">\n <ui-icon icon=\"rename\" slot=\"start\"></ui-icon>\n Rename\n </ui-list-item>\n `;\n }\n\n protected shareFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canShare) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"share\" role=\"menuitem\" title=\"Share the file\">\n <ui-icon icon=\"personAdd\" slot=\"start\"></ui-icon>\n Share\n </ui-list-item>\n `;\n }\n\n protected renderFileOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"File options\" aria-label=\"Activate for file options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.openFileOption()}\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.saveFileOption()}\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected nameCell(item: IFile): TemplateResult {\n let icon: IconType | undefined;\n switch (item.kind) {\n case DataFileKind: icon = 'schema'; break;\n case FolderKind: icon = 'folder'; break;\n case ProjectKind: icon = 'collectionsBookmark'; break;\n default: \n }\n\n return this.dt.cell(html`\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"cell-icon\"></ui-icon>` : nothing}\n ${item.info.name || 'Unnamed project'}\n `, { class: 'name-cell', data: { kind: item.kind } });\n }\n\n protected ownerCell(item: IFile): TemplateResult {\n const { user } = this.screen;\n if (!user) {\n return this.dt.cell(html`--`, { class: 'owner-cell' });\n }\n if (item.owner === user.key) {\n return this.dt.cell(html`<span aria-label=\"Owned by me\">me</span>`, { class: 'owner-cell' });\n }\n const content = this.ownerCellAsync(item.owner);\n const loader = html`<span class=\"owner-loading\">loading...</span>`;\n return this.dt.cell(html`${until(content, loader)}`, { class: 'owner-cell' });\n }\n\n protected async ownerCellAsync(key: string): Promise<TemplateResult> {\n const user = await UserCache.getUser(key);\n if (!user) {\n return html`\n <span aria-label=\"Owned by unknown user\">unknown</span>\n `;\n }\n return html`<span aria-label=\"Owned by ${user.name}\">${user.name}</span>`;\n }\n\n protected updatedCell(item: IFile): TemplateResult {\n const { lastModified } = item;\n\n return this.dt.cell(html`\n <relative-time datetime=\"${new Date(lastModified.time).toISOString()}\"></relative-time>\n `, { class: 'updated-cell' });\n }\n\n protected optionsCell(item: IFile): TemplateResult {\n const content = item.kind === FolderKind ? this.renderFolderOptions(item) : this.renderFileOptions(item);\n return this.dt.cell(content, { class: 'menu-cell' });\n }\n\n protected renderFolderOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"Folder options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderCreateProjectDialog(): TemplateResult {\n return html`\n <dialog id=\"createProjectDialog\">\n <form method=\"dialog\" @submit=\"${this.createProjectHandler}\">\n <h3>New Project</h3>\n <div>\n <p class=\"body-medium\">Enter new project name</p>\n <ui-text-field \n class=\"input\" \n label=\"Project name\" \n name=\"name\" \n required \n invalidText=\"Project name is required\" \n @keydown=\"${this.screen.submitOnEnter}\"\n ></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateProjectDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateSchemaDialog(): TemplateResult {\n return html`\n <dialog id=\"createSchemaDialog\">\n <form method=\"dialog\" @submit=\"${this.createSchemaHandler}\">\n <h3>New Schema</h3>\n <div>\n <p class=\"body-medium\">Enter new schema name</p>\n <ui-text-field class=\"input\" label=\"Schema name\" name=\"name\" required invalidText=\"Schema name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateSchemaDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateFolderDialog(): TemplateResult {\n return html`\n <dialog id=\"createFolderDialog\">\n <form method=\"dialog\" @submit=\"${this.createFolderHandler}\">\n <h3>New Folder</h3>\n <div>\n <p class=\"body-medium\">Enter new folder name</p>\n <ui-text-field class=\"input\" label=\"Folder name\" name=\"name\" required invalidText=\"Folder name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateFolderDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportDialog(): TemplateResult {\n const { importState } = this;\n const submitDisabled = !!importState && [ImportState.Analyzing, ImportState.Importing].includes(importState);\n const cancelLabel = importState === ImportState.Done ? 'Close' : 'Cancel';\n const hasSubmit = importState !== ImportState.Done;\n return html`\n <dialog id=\"importProjectDialog\" @close=\"${this.importDialogCloseHandler}\">\n <form @submit=\"${this.importHandler}\">\n <h3>Import Project</h3>\n <div class=\"dialog-contents\">\n ${this.renderImportPage()}\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelImportDialog}\">${cancelLabel}</ui-button>\n ${hasSubmit ? html`<ui-button type=\"text\" value=\"import\" submit ?disabled=\"${submitDisabled}\">Import</ui-button>` : ''}\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportPage(): TemplateResult {\n const { importState } = this;\n switch (importState) {\n case ImportState.Importing: return this.renderImportWait();\n case ImportState.Done: return this.renderImportDone();\n case ImportState.Analyzed:\n case ImportState.Analyzing:\n default: return this.renderImportInput();\n }\n }\n\n protected renderImportInput(): TemplateResult {\n const { importProcessor } = this;\n const errorMessage = importProcessor && importProcessor.analysis && importProcessor.analysis.message;\n return html`\n <p class=\"body-medium\">Import projects from HTTP Client, Advanced REST Client, or a Postman collection.</p>\n <ui-text-field type=\"file\" class=\"input\" label=\"Project file\" name=\"file\" required invalidText=\"Project file is required\"></ui-text-field>\n ${errorMessage ? html`<div class=\"import-error\">${errorMessage}</div>` : ''}\n `;\n }\n\n protected renderImportWait(): TemplateResult {\n return html`\n <p class=\"body-medium\">Importing project...</p>\n `;\n }\n\n protected renderImportDone(): TemplateResult {\n return html`\n <p class=\"body-medium\">Import succeeded.</p>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Files.page.js","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Files.page.ts"],"names":[],"mappings":"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","sourcesContent":["import { \n IFile, HttpProject, Project, Folder, ProjectKind, FolderKind, \n EventUtils, DataNamespace, DataFile, DataFileKind, \n FileAddOptions, FileBreadcrumb, \n ICapabilities,\n} from \"@api-client/core/build/browser.js\";\nimport { html, nothing, TemplateResult } from \"lit\";\nimport { join } from \"lit/directives/join.js\";\nimport { map } from \"lit/directives/map.js\";\nimport { until } from 'lit/directives/until.js';\nimport type ApiClientScreen from \"../ApiClient.screen.js\";\nimport { DataTable } from \"../../../ui/table/DataTable.js\";\nimport { NavigationEvents } from \"../../../events/NavigationEvents.js\";\nimport { navigate } from \"../../../lib/route.js\";\nimport { DataImportProcessor } from \"../../../http-client/store/DataImportProcessor.js\";\nimport { SnackNotifications } from \"../../../ui/notification/SnackNotifications.js\";\nimport { UiDialogClosingReason } from \"../../../ui/dialog/UiDialog.js\";\nimport { FileBindings } from \"../../../bindings/base/FileBindings.js\";\nimport UserCache from '../../../store/UserCache.js';\nimport AppInfo from '../AppInfo.js';\nimport { fileIcon } from \"../../../elements/store/FilesLib.js\";\nimport { FileSystem } from \"../../../store/FileSystem.js\";\nimport '@github/relative-time-element';\nimport '../../../define/ui/ui-list.js';\nimport '../../../define/ui/ui-list-item.js';\nimport '../../../define/ui/ui-dropdown-list.js';\nimport '../../../define/ui/ui-icon.js';\nimport '../../../define/ui/ui-icon-button.js';\nimport '../../../define/ui/ui-button.js';\nimport '../../../define/ui/ui-divider.js';\nimport '../../../define/ui/ui-text-field.js';\nimport '../../../define/dialog/rename-dialog.js';\nimport '../../../define/store/share-file.js';\n\nenum ImportState {\n Analyzing,\n Analyzed,\n Importing,\n Done,\n Error\n}\n\n/**\n * A class that specializes in rendering the list of files in HTTP Client.\n */\nexport class FilesPage {\n fs = new FileSystem();\n\n dt = new DataTable(() => this.fs.files, { ariaLabel: 'Your files', active: true, selection: 'single' });\n\n importProcessor?: DataImportProcessor;\n\n importState?: ImportState;\n\n /**\n * A selected in the table item.\n */\n selectedItem?: string;\n\n errorMessage?: string;\n \n constructor(protected screen: ApiClientScreen) {\n this.createProjectHandler = this.createProjectHandler.bind(this);\n this.createFolderHandler = this.createFolderHandler.bind(this);\n this.createSelectHandler = this.createSelectHandler.bind(this);\n this.pageOptionsSelectHandler = this.pageOptionsSelectHandler.bind(this);\n this.importHandler = this.importHandler.bind(this);\n this.cancelImportDialog = this.cancelImportDialog.bind(this);\n this.cancelCreateProjectDialog = this.cancelCreateProjectDialog.bind(this);\n this.cancelCreateFolderDialog = this.cancelCreateFolderDialog.bind(this);\n this.handleFileOptionSelect = this.handleFileOptionSelect.bind(this);\n this.cancelCreateSchemaDialog = this.cancelCreateSchemaDialog.bind(this);\n this.createSchemaHandler = this.createSchemaHandler.bind(this);\n this.handleSelectedShare = this.handleSelectedShare.bind(this);\n this.handleSelectedTrash = this.handleSelectedTrash.bind(this);\n this.dt.addEventListener('empty', this.renderEmptyTable.bind(this));\n this.dt.addEventListener('header', this.renderTableHeader.bind(this));\n this.dt.addEventListener('item', this.renderTableItem.bind(this));\n this.dt.addEventListener('activate', this.itemActivateHandler.bind(this));\n this.dt.addEventListener('render', this.handleTableRender.bind(this));\n this.dt.addEventListener('select', this.handleTableSelect.bind(this));\n this.dt.addEventListener('scrollend', this.handleTableScrollEnd.bind(this));\n\n this.fs.observe();\n this.fs.addEventListener('change', () => this.screen.render());\n this.fs.addEventListener('error', (e: Event) => {\n const event = e as CustomEvent<string>;\n this.errorMessage = event.detail;\n });\n this.fs.addEventListener('querycomplete', () => {\n document.body.dispatchEvent(new Event('querycomplete', { bubbles: true }));\n });\n }\n\n async refresh(): Promise<void> {\n this.fs.resetList();\n this.screen.render();\n await this.fs.queryPage();\n await this.fs.queryBreadcrumbs();\n }\n\n protected cancelCreateProjectDialog(): void {\n this.screen.closeDialog('createProjectDialog');\n }\n\n protected cancelCreateFolderDialog(): void {\n this.screen.closeDialog('createFolderDialog');\n }\n\n protected cancelImportDialog(): void {\n this.screen.closeDialog('importProjectDialog');\n }\n\n protected cancelCreateSchemaDialog(): void {\n this.screen.closeDialog('createSchemaDialog');\n }\n\n protected createProjectHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addProject(value);\n }\n\n protected createFolderHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addFolder(value);\n }\n\n protected createSchemaHandler(e: SubmitEvent): void {\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'submit') {\n return;\n }\n const { value } = input;\n input.value = '';\n this.addSchema(value);\n }\n\n protected async addProject(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = HttpProject.fromName(name);\n const meta = Project.fromProject(media, selectedSpace);\n await this.addFile(meta.toJSON(), media.toJSON());\n }\n\n protected async addFolder(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const space = Folder.fromName(name, selectedSpace);\n await this.addFile(space.toJSON());\n }\n\n protected async addSchema(name: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const media = DataNamespace.fromName(name);\n const file = DataFile.fromDataNamespace(media, selectedSpace);\n await this.addFile(file.toJSON(), media.toJSON());\n }\n\n protected async addFile(file: IFile, media?: unknown): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a space first');\n }\n const opts: FileAddOptions = {};\n if (this.fs.parent) {\n opts.parent = this.fs.parent;\n }\n const result = await this.screen.bindings.store.files.add(file, opts);\n if (media) {\n await this.screen.bindings.store.media.add(result.key, media, 'application/json');\n }\n }\n\n protected pageOptionsSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'import-project') {\n this.screen.openDialog('importProjectDialog');\n } else if (option === 'refresh-list') {\n this.refresh();\n }\n }\n\n protected createSelectHandler(e: CustomEvent): void {\n const target = e.detail.item as HTMLElement | undefined;\n if (!target) {\n return;\n }\n const option = target.dataset.option as string | undefined;\n if (option === 'folder') {\n this.screen.openDialog('createFolderDialog');\n } else if (option === 'project') {\n this.screen.openDialog('createProjectDialog');\n } else if (option === 'schema') {\n this.screen.openDialog('createSchemaDialog');\n }\n }\n\n protected importHandler(e: SubmitEvent): void {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const input = form.querySelector('ui-text-field');\n if (!input) {\n this.cancelImportDialog();\n return;\n }\n const { submitter } = e;\n if (!submitter) {\n this.cancelImportDialog();\n return;\n }\n const button = submitter as HTMLButtonElement; // or equivalent\n if (button.value !== 'import') {\n this.cancelImportDialog();\n return;\n }\n const { files } = input;\n if (!files || !files[0]) {\n this.cancelImportDialog();\n return;\n }\n this.processImportFile(files[0]);\n }\n\n protected async processImportFile(file: File): Promise<void> {\n this.importState = ImportState.Analyzing;\n this.screen.render();\n\n const processor = new DataImportProcessor();\n const analysis = await processor.fromFile(file);\n this.importState = ImportState.Analyzed;\n this.screen.render();\n\n this.importProcessor = processor;\n\n if (!analysis.error) {\n this.continueDataImport();\n }\n }\n\n protected async continueDataImport(): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('You need to select a Folder first');\n }\n const { importProcessor } = this;\n if (!importProcessor) {\n throw new Error('Invalid state. Import processor not activated.');\n }\n this.importState = ImportState.Importing;\n this.screen.render();\n try {\n await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.fs.parent);\n this.importState = ImportState.Done;\n this.screen.render();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(e);\n this.importState = ImportState.Error;\n }\n }\n\n protected importDialogCloseHandler(): void {\n if (this.importProcessor) {\n this.importProcessor.abort();\n this.importProcessor = undefined;\n }\n this.importState = undefined;\n }\n\n protected itemActivateHandler(item: IFile): void {\n const { kind } = item;\n if (kind === ProjectKind) {\n this.openProject(item.key);\n } else if (kind === FolderKind) {\n this.openFolder(item);\n } else if (kind === DataFileKind) {\n this.openDataSchema(item.key);\n } else {\n throw new Error(`Unknown activation item: ${kind}`);\n }\n }\n\n protected handleTableRender(): void {\n this.screen.render();\n }\n\n protected handleTableSelect(item: string | string[]): void {\n if (Array.isArray(item)) {\n return;\n }\n this.selectedItem = item;\n this.screen.render();\n }\n\n protected handleTableScrollEnd(): void {\n this.fs.debounceQuery();\n }\n\n openProject(key: string): void {\n const file = this.fs.files.find(i => i.key === key);\n if (!file) {\n throw new Error(`Invalid state: file not found`);\n }\n NavigationEvents.App.runHttpProject({\n space: file.space,\n key,\n });\n }\n\n openDataSchema(key: string): void {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error('The Folder is not set.');\n }\n NavigationEvents.App.runSchemaDesigner({\n key,\n space: selectedSpace,\n });\n }\n\n async openFolder(folder: IFile): Promise<void> {\n navigate('files', folder.key);\n this.selectedItem = undefined;\n }\n\n protected handleFileOptionSelect(e: CustomEvent): void {\n const item = e.detail.item as HTMLElement;\n const list = e.target as HTMLElement;\n const operation = item.dataset.option as string;\n const key = list.dataset.key as string;\n if (!key || !operation) {\n return;\n }\n if (operation === 'delete') {\n this.deleteFile(key);\n } else if (operation === 'save-file') {\n this.saveFile(key);\n } else if (operation === 'rename') {\n this.renameFile(key);\n } else if (operation === 'share') {\n this.shareFile(key);\n }\n }\n\n async deleteFile(key: string): Promise<void> {\n const { selectedSpace } = this.screen;\n if (!selectedSpace) {\n throw new Error(`Invalid state: Space is not selected.`);\n }\n const trashKey = await this.screen.bindings.store.files.delete(key);\n SnackNotifications.notify('The file was moved to trash.', { \n close: true,\n actionLabel: 'Undo',\n actionCallback: async () => {\n await this.screen.bindings.store.trash.restore(trashKey);\n }\n });\n }\n\n async saveFile(key: string): Promise<void> {\n const files = this.screen.bindings.files as FileBindings;\n const content = await this.screen.bindings.store.media.read(key);\n const queryResult = await files.saveFileDialog({\n excludeAcceptAllOption: true,\n title: 'Save file as...',\n filters: [\n {\n description: 'HTTP Client files',\n accept: {\n 'application/json': ['.json'],\n },\n }\n ],\n });\n if (queryResult.canceled) {\n return;\n }\n const data = JSON.stringify(content);\n const path = queryResult.filePath as string;\n await files.writeFile(path, data, { dispose: true });\n }\n\n protected renameFile(key: string): void {\n const file = this.fs.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const name = file.info.name || '';\n const dialog = document.createElement('rename-dialog');\n dialog.name = name;\n dialog.modal = true;\n dialog.open = true;\n document.body.appendChild(dialog);\n dialog.addEventListener('close', async (ev: Event) => {\n document.body.removeChild(dialog);\n const event = ev as CustomEvent<UiDialogClosingReason>;\n const { cancelled, value } = event.detail;\n if (!cancelled && value) {\n this.screen.renameFile(file, value as string);\n }\n });\n }\n\n protected shareFile(key: string): void {\n const file = this.fs.files.find(i => i.key === key);\n if (!file) {\n return;\n }\n const dialog = document.createElement('share-file');\n dialog.file = file;\n dialog.user = this.screen.user;\n dialog.appInfo = AppInfo;\n dialog.modal = true;\n document.body.appendChild(dialog);\n dialog.open = true;\n dialog.addEventListener('close', () => {\n document.body.removeChild(dialog);\n });\n }\n\n protected handleSelectedShare(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.shareFile(selectedItem);\n }\n\n protected handleSelectedTrash(): void {\n const { selectedItem } = this;\n if (!selectedItem) {\n return\n }\n this.deleteFile(selectedItem);\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"section-header\">\n <h2 class=\"headline-small\">Your files</h2>\n ${this.renderBreadcrumbs()}\n <div class=\"spacer\"></div>\n ${this.renderSelectedToolbar()}\n ${this.renderCreateButton()}\n ${this.renderPageMoreOptions()}\n </div>\n ${this.renderFilesTable()}\n ${this.renderCreateProjectDialog()}\n ${this.renderCreateFolderDialog()}\n ${this.renderImportDialog()}\n ${this.renderCreateSchemaDialog()}\n `;\n }\n\n protected renderSelectedToolbar(): TemplateResult | typeof nothing {\n const { selectedItem } = this;\n if (!selectedItem) {\n return nothing\n }\n const file = this.fs.files.find(i => i.key === selectedItem);\n if (!file) {\n return nothing;\n }\n return html`\n ${this.renderSelectionShareButton(file)}\n ${this.renderSelectionDeleteButton(file)}\n <ui-divider vertical type=\"middle\"></ui-divider>\n `;\n }\n\n protected renderSelectionShareButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canShare = false;\n if (capabilities) {\n canShare = capabilities.canShare;\n }\n return html`\n <ui-icon-button\n title=\"Share selected file\"\n aria-label=\"Share selected file\"\n ?disabled=\"${!canShare}\"\n @click=\"${this.handleSelectedShare}\"\n >\n <ui-icon icon=\"personAdd\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderSelectionDeleteButton(selected: IFile): TemplateResult {\n const { capabilities } = selected;\n let canDelete = false;\n if (capabilities) {\n canDelete = capabilities.canDelete;\n }\n return html`\n <ui-icon-button\n title=\"Move selected file to trash\"\n aria-label=\"Move selected file to trash\"\n ?disabled=\"${!canDelete}\"\n @click=\"${this.handleSelectedTrash}\"\n >\n <ui-icon icon=\"deleteFile\" role=\"presentation\"></ui-icon>\n </ui-icon-button>\n `;\n }\n\n protected renderCreateButton(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.createSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-button type=\"outlined\" class=\"new-button\">\n <ui-icon icon=\"add\" slot=\"icon\"></ui-icon>\n New\n </ui-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item image=\"icon\" data-option=\"project\" role=\"menuitem\">\n <ui-icon icon=\"collectionsBookmark\" slot=\"start\"></ui-icon>\n Project\n </ui-list-item>\n <ui-list-item image=\"icon\" data-option=\"schema\" role=\"menuitem\">\n <ui-icon icon=\"schema\" slot=\"start\"></ui-icon>\n Data schema\n </ui-list-item>\n <ui-divider></ui-divider>\n <ui-list-item image=\"icon\" data-option=\"folder\" role=\"menuitem\">\n <ui-icon icon=\"folder\" slot=\"start\"></ui-icon>\n Folder\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderPageMoreOptions(): TemplateResult {\n return html`\n <ui-dropdown-list\n @select=\"${this.pageOptionsSelectHandler}\" \n horizontalAlign=\"right\"\n closeOnOutsideClick\n >\n <ui-icon-button title=\"More options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n <ui-list-item data-option=\"import-project\" role=\"menuitem\">\n Import project\n </ui-list-item>\n <ui-list-item data-option=\"refresh-list\" role=\"menuitem\">\n Refresh list\n </ui-list-item>\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderBreadcrumbs(): TemplateResult {\n const { breadcrumbs = [] } = this.fs;\n if (!breadcrumbs.length) {\n return html``;\n }\n const items: FileBreadcrumb[] = [{\n key: '',\n kind: '',\n name: 'root',\n }].concat(breadcrumbs);\n return html`\n <nav class=\"breadcrumbs body-medium\" aria-label=\"Breadcrumbs\">\n <ol>\n ${join(\n map(items, (i) => html`<li><a href=\"#/files${i.key ? `/${i.key}` : ''}\">${i.name}</a></li>`),\n html`<li aria-hidden=\"true\"><span class=\"separator\">/</span></li>`\n )}\n </ol>\n </nav>\n `;\n }\n\n protected renderFilesTable(): TemplateResult {\n return this.dt.render();\n }\n\n protected renderEmptyTable(): TemplateResult {\n return html`\n <p>You have no files.</p>\n <p>An HTTP project is a set of HTTP request related to an API. Use it to organize and document your HTTP requests.</p>\n `;\n }\n\n protected renderTableHeader(): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.dt.header('Name', { class: 'name-cell' }));\n if (!this.screen.isSingleUser) {\n result.push(this.dt.header('Owner', { class: 'owner-cell' }));\n }\n result.push(this.dt.header('Updated', { class: 'updated-cell' }));\n result.push(this.dt.header(html`<span hidden aria-label=\"Row options\">Menu</span>`, { class: 'menu-cell' }));\n return result;\n }\n\n protected renderTableItem(item: IFile): TemplateResult[] {\n const result: TemplateResult[] = [];\n result.push(this.nameCell(item));\n if (!this.screen.isSingleUser) {\n result.push(this.ownerCell(item));\n }\n result.push(this.updatedCell(item));\n result.push(this.optionsCell(item));\n return result;\n }\n\n protected saveFileOption(): TemplateResult {\n return html`\n <ui-list-item image=\"icon\" data-option=\"save-file\" role=\"menuitem\" title=\"Saves the file on the computer\">\n <ui-icon icon=\"save\" slot=\"start\"></ui-icon>\n Save to file\n </ui-list-item>\n `;\n }\n\n protected openFileOption(): TemplateResult | typeof nothing {\n return html`\n <ui-list-item image=\"icon\" data-option=\"open\" role=\"menuitem\" title=\"Opens the file\">\n <ui-icon icon=\"openInNew\" slot=\"start\"></ui-icon>\n Open\n </ui-list-item>\n `;\n }\n\n protected deleteFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canDelete) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"delete\" role=\"menuitem\" title=\"Moves the file to Trash\">\n <ui-icon icon=\"deleteFile\" slot=\"start\"></ui-icon>\n Delete\n </ui-list-item>\n `;\n }\n\n protected renameFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canRename) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"rename\" role=\"menuitem\" title=\"Renames the file\">\n <ui-icon icon=\"rename\" slot=\"start\"></ui-icon>\n Rename\n </ui-list-item>\n `;\n }\n\n protected shareFileOption(capabilities: ICapabilities): TemplateResult | typeof nothing {\n if (!capabilities || !capabilities.canShare) {\n return nothing;\n }\n return html`\n <ui-list-item image=\"icon\" data-option=\"share\" role=\"menuitem\" title=\"Share the file\">\n <ui-icon icon=\"personAdd\" slot=\"start\"></ui-icon>\n Share\n </ui-list-item>\n `;\n }\n\n protected renderFileOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"File options\" aria-label=\"Activate for file options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.openFileOption()}\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.saveFileOption()}\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected nameCell(item: IFile): TemplateResult {\n const icon = fileIcon(item);\n return this.dt.cell(html`\n ${icon ? html`<ui-icon icon=\"${icon}\" class=\"cell-icon\"></ui-icon>` : nothing}\n ${item.info.name || 'Unnamed file'}\n `, { class: 'name-cell', data: { kind: item.kind } });\n }\n\n protected ownerCell(item: IFile): TemplateResult {\n const { user } = this.screen;\n if (!user) {\n return this.dt.cell(html`--`, { class: 'owner-cell' });\n }\n if (item.owner === user.key) {\n return this.dt.cell(html`<span aria-label=\"Owned by me\">me</span>`, { class: 'owner-cell' });\n }\n const content = this.ownerCellAsync(item.owner);\n const loader = html`<span class=\"owner-loading\">loading...</span>`;\n return this.dt.cell(html`${until(content, loader)}`, { class: 'owner-cell' });\n }\n\n protected async ownerCellAsync(key: string): Promise<TemplateResult> {\n const user = await UserCache.getUser(key);\n if (!user) {\n return html`\n <span aria-label=\"Owned by unknown user\">unknown</span>\n `;\n }\n return html`<span aria-label=\"Owned by ${user.name}\">${user.name}</span>`;\n }\n\n protected updatedCell(item: IFile): TemplateResult {\n const { lastModified } = item;\n\n return this.dt.cell(html`\n <relative-time datetime=\"${new Date(lastModified.time).toISOString()}\"></relative-time>\n `, { class: 'updated-cell' });\n }\n\n protected optionsCell(item: IFile): TemplateResult {\n const content = item.kind === FolderKind ? this.renderFolderOptions(item) : this.renderFileOptions(item);\n return this.dt.cell(content, { class: 'menu-cell' });\n }\n\n protected renderFolderOptions(item: IFile): TemplateResult {\n const { key, capabilities } = item;\n const canDelete = !!capabilities && capabilities.canDelete;\n return html`\n <ui-dropdown-list\n horizontalAlign=\"auto\"\n verticalAlign=\"auto\"\n closeOnOutsideClick\n @mousedown=\"${EventUtils.cancelEvent}\" \n @mouseup=\"${EventUtils.cancelEvent}\" \n @click=\"${EventUtils.cancelEvent}\"\n @dblclick=\"${EventUtils.cancelEvent}\"\n @select=\"${this.handleFileOptionSelect}\"\n data-key=\"${key}\"\n >\n <ui-icon-button title=\"Folder options\" aria-label=\"Activate for more options\">\n <ui-icon icon=\"moreVert\"></ui-icon>\n </ui-icon-button>\n <ui-list slot=\"dropdown\" role=\"menu\">\n ${this.shareFileOption(capabilities as ICapabilities)}\n <ui-divider></ui-divider>\n ${this.renameFileOption(capabilities as ICapabilities)}\n ${canDelete ? html`\n <ui-divider></ui-divider>\n ${this.deleteFileOption(capabilities as ICapabilities)}\n ` : nothing}\n </ui-list>\n </ui-dropdown-list>\n `;\n }\n\n protected renderCreateProjectDialog(): TemplateResult {\n return html`\n <dialog id=\"createProjectDialog\">\n <form method=\"dialog\" @submit=\"${this.createProjectHandler}\">\n <h3>New Project</h3>\n <div>\n <p class=\"body-medium\">Enter new project name</p>\n <ui-text-field \n class=\"input\" \n label=\"Project name\" \n name=\"name\" \n required \n invalidText=\"Project name is required\" \n @keydown=\"${this.screen.submitOnEnter}\"\n ></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateProjectDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateSchemaDialog(): TemplateResult {\n return html`\n <dialog id=\"createSchemaDialog\">\n <form method=\"dialog\" @submit=\"${this.createSchemaHandler}\">\n <h3>New Schema</h3>\n <div>\n <p class=\"body-medium\">Enter new schema name</p>\n <ui-text-field class=\"input\" label=\"Schema name\" name=\"name\" required invalidText=\"Schema name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateSchemaDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderCreateFolderDialog(): TemplateResult {\n return html`\n <dialog id=\"createFolderDialog\">\n <form method=\"dialog\" @submit=\"${this.createFolderHandler}\">\n <h3>New Folder</h3>\n <div>\n <p class=\"body-medium\">Enter new folder name</p>\n <ui-text-field class=\"input\" label=\"Folder name\" name=\"name\" required invalidText=\"Folder name is required\" @keydown=\"${this.screen.submitOnEnter}\"></ui-text-field>\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelCreateFolderDialog}\">Cancel</ui-button>\n <ui-button type=\"text\" value=\"submit\" submit>Create</ui-button>\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportDialog(): TemplateResult {\n const { importState } = this;\n const submitDisabled = !!importState && [ImportState.Analyzing, ImportState.Importing].includes(importState);\n const cancelLabel = importState === ImportState.Done ? 'Close' : 'Cancel';\n const hasSubmit = importState !== ImportState.Done;\n return html`\n <dialog id=\"importProjectDialog\" @close=\"${this.importDialogCloseHandler}\">\n <form @submit=\"${this.importHandler}\">\n <h3>Import Project</h3>\n <div class=\"dialog-contents\">\n ${this.renderImportPage()}\n </div>\n <div class=\"dialog-buttons\">\n <ui-button type=\"text\" value=\"cancel\" @click=\"${this.cancelImportDialog}\">${cancelLabel}</ui-button>\n ${hasSubmit ? html`<ui-button type=\"text\" value=\"import\" submit ?disabled=\"${submitDisabled}\">Import</ui-button>` : ''}\n </div>\n </form>\n </dialog>\n `;\n }\n\n protected renderImportPage(): TemplateResult {\n const { importState } = this;\n switch (importState) {\n case ImportState.Importing: return this.renderImportWait();\n case ImportState.Done: return this.renderImportDone();\n case ImportState.Analyzed:\n case ImportState.Analyzing:\n default: return this.renderImportInput();\n }\n }\n\n protected renderImportInput(): TemplateResult {\n const { importProcessor } = this;\n const errorMessage = importProcessor && importProcessor.analysis && importProcessor.analysis.message;\n return html`\n <p class=\"body-medium\">Import projects from HTTP Client, Advanced REST Client, or a Postman collection.</p>\n <ui-text-field type=\"file\" class=\"input\" label=\"Project file\" name=\"file\" required invalidText=\"Project file is required\"></ui-text-field>\n ${errorMessage ? html`<div class=\"import-error\">${errorMessage}</div>` : ''}\n `;\n }\n\n protected renderImportWait(): TemplateResult {\n return html`\n <p class=\"body-medium\">Importing project...</p>\n `;\n }\n\n protected renderImportDone(): TemplateResult {\n return html`\n <p class=\"body-medium\">Import succeeded.</p>\n `;\n }\n}\n"]}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IFile } from "@api-client/core/build/browser.js";
|
|
2
2
|
import { TemplateResult } from "lit";
|
|
3
3
|
import type ApiClientScreen from "../ApiClient.screen.js";
|
|
4
4
|
import { FilesPage } from "./Files.page.js";
|
|
5
5
|
export declare class SharedPage extends FilesPage {
|
|
6
6
|
constructor(screen: ApiClientScreen);
|
|
7
|
-
protected listFiles(opts: ContextSpaceListOptions): Promise<ContextListResult<IFile>>;
|
|
8
|
-
handleFileEvent(event: BroadcastEvent): void;
|
|
9
|
-
handleFileAccessGranted(event: FileAccessBroadcastEvent): Promise<void>;
|
|
10
|
-
handleFileAccessRemoved(event: FileAccessBroadcastEvent): void;
|
|
11
7
|
render(): TemplateResult;
|
|
12
8
|
protected renderEmptyTable(): TemplateResult;
|
|
13
9
|
protected renderTableHeader(): TemplateResult[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shared.page.d.ts","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Shared.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Shared.page.d.ts","sourceRoot":"","sources":["../../../../src/pages/api-client/pages/Shared.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAQ,cAAc,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,UAAW,SAAQ,SAAS;gBAC3B,MAAM,EAAE,eAAe;IAM1B,MAAM,IAAI,cAAc;cAUd,gBAAgB,IAAI,cAAc;cAOlC,iBAAiB,IAAI,cAAc,EAAE;cAQrC,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,cAAc,EAAE;CAOlE"}
|
|
@@ -4,46 +4,7 @@ export class SharedPage extends FilesPage {
|
|
|
4
4
|
constructor(screen) {
|
|
5
5
|
super(screen);
|
|
6
6
|
this.dt.options.ariaLabel = 'Shared with you';
|
|
7
|
-
|
|
8
|
-
async listFiles(opts) {
|
|
9
|
-
return this.screen.bindings.store.shared.list(opts);
|
|
10
|
-
}
|
|
11
|
-
handleFileEvent(event) {
|
|
12
|
-
const typed = event;
|
|
13
|
-
if (typed.parent && typed.parent !== this.folder) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
// if (typed.alt !== 'meta') {
|
|
17
|
-
// return;
|
|
18
|
-
// }
|
|
19
|
-
switch (event.operation) {
|
|
20
|
-
case 'access-granted':
|
|
21
|
-
this.handleFileAccessGranted(typed);
|
|
22
|
-
break;
|
|
23
|
-
case 'access-removed':
|
|
24
|
-
this.handleFileAccessRemoved(typed);
|
|
25
|
-
break;
|
|
26
|
-
default: super.handleFileEvent(event);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
async handleFileAccessGranted(event) {
|
|
30
|
-
const { key } = event;
|
|
31
|
-
try {
|
|
32
|
-
const file = await this.screen.bindings.store.files.read(key);
|
|
33
|
-
const index = this.files.findIndex(i => i.key === key);
|
|
34
|
-
if (index >= 0) {
|
|
35
|
-
this.files.splice(index, 1);
|
|
36
|
-
}
|
|
37
|
-
this.handleFileCreated(file);
|
|
38
|
-
}
|
|
39
|
-
catch (e) {
|
|
40
|
-
// eslint-disable-next-line no-console
|
|
41
|
-
console.warn(e);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
handleFileAccessRemoved(event) {
|
|
45
|
-
const { key } = event;
|
|
46
|
-
this.removeFileFromList(key);
|
|
7
|
+
this.fs.source = 'shared';
|
|
47
8
|
}
|
|
48
9
|
render() {
|
|
49
10
|
return html `
|