@api-client/ui 0.0.11 → 0.0.13
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/authorization/cc.ts +56 -27
- 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/FileBindings.d.ts +4 -0
- package/dist/bindings/base/FileBindings.d.ts.map +1 -1
- package/dist/bindings/base/FileBindings.js +21 -1
- package/dist/bindings/base/FileBindings.js.map +1 -1
- package/dist/bindings/base/StoreBindings.d.ts +6 -17
- package/dist/bindings/base/StoreBindings.d.ts.map +1 -1
- package/dist/bindings/base/StoreBindings.js +15 -60
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/bindings/web/WebFileBindings.js +1 -1
- package/dist/bindings/web/WebFileBindings.js.map +1 -1
- package/dist/define/http/certificate-add.d.ts +9 -0
- package/dist/define/http/certificate-add.d.ts.map +1 -0
- package/dist/define/http/certificate-add.js +10 -0
- package/dist/define/http/certificate-add.js.map +1 -0
- 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/define/ui/ui-segmented-button-set.d.ts +1 -1
- package/dist/define/ui/ui-segmented-button-set.d.ts.map +1 -1
- package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
- package/dist/elements/authorization/ui/CC.styles.d.ts.map +1 -1
- package/dist/elements/authorization/ui/CC.styles.js +4 -9
- package/dist/elements/authorization/ui/CC.styles.js.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.d.ts +14 -29
- package/dist/elements/authorization/ui/CcAuthorization.d.ts.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.js +67 -158
- package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
- package/dist/elements/http/CertificateAdd.element.d.ts +91 -0
- package/dist/elements/http/CertificateAdd.element.d.ts.map +1 -0
- package/dist/elements/http/CertificateAdd.element.js +389 -0
- package/dist/elements/http/CertificateAdd.element.js.map +1 -0
- package/dist/elements/http/CertificateAdd.styles.d.ts +3 -0
- package/dist/elements/http/CertificateAdd.styles.d.ts.map +1 -0
- package/dist/elements/http/CertificateAdd.styles.js +61 -0
- package/dist/elements/http/CertificateAdd.styles.js.map +1 -0
- package/dist/elements/project/ProjectRunReport.d.ts +2 -1
- package/dist/elements/project/ProjectRunReport.d.ts.map +1 -1
- package/dist/elements/project/ProjectRunReport.js.map +1 -1
- 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 +73 -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 +7 -7
- package/dist/events/EventTypes.d.ts.map +1 -1
- package/dist/events/EventTypes.js +8 -7
- package/dist/events/EventTypes.js.map +1 -1
- package/dist/events/Events.d.ts +7 -1
- package/dist/events/Events.d.ts.map +1 -1
- package/dist/events/Events.js +2 -0
- package/dist/events/Events.js.map +1 -1
- package/dist/events/FilesystemEvents.d.ts +8 -0
- package/dist/events/FilesystemEvents.d.ts.map +1 -0
- package/dist/events/FilesystemEvents.js +59 -0
- package/dist/events/FilesystemEvents.js.map +1 -0
- package/dist/events/HttpClientEvents.d.ts +0 -2
- package/dist/events/HttpClientEvents.d.ts.map +1 -1
- package/dist/events/HttpClientEvents.js +0 -2
- package/dist/events/HttpClientEvents.js.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/http-client/idb/Arc18DataUpgrade.d.ts +0 -8
- package/dist/http-client/idb/Arc18DataUpgrade.d.ts.map +1 -1
- package/dist/http-client/idb/Arc18DataUpgrade.js +11 -206
- package/dist/http-client/idb/Arc18DataUpgrade.js.map +1 -1
- package/dist/http-client/store/StoreBroadcast.d.ts +0 -5
- package/dist/http-client/store/StoreBroadcast.d.ts.map +1 -1
- package/dist/http-client/store/StoreBroadcast.js +0 -7
- package/dist/http-client/store/StoreBroadcast.js.map +1 -1
- package/dist/lib/files/FileUtils.d.ts +9 -0
- package/dist/lib/files/FileUtils.d.ts.map +1 -0
- package/dist/lib/files/FileUtils.js +13 -0
- package/dist/lib/files/FileUtils.js.map +1 -0
- package/dist/mixins/RouteMixin.d.ts +4 -0
- package/dist/mixins/RouteMixin.d.ts.map +1 -1
- package/dist/mixins/RouteMixin.js +1 -0
- package/dist/mixins/RouteMixin.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 +4 -6
- package/dist/pages/api-client/ApiClient.screen.d.ts.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +39 -31
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.styles.d.ts.map +1 -1
- package/dist/pages/api-client/ApiClient.styles.js +0 -12
- package/dist/pages/api-client/ApiClient.styles.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 +45 -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/button/SegmentedButtonsSet.d.ts +14 -0
- package/dist/ui/button/SegmentedButtonsSet.d.ts.map +1 -1
- package/dist/ui/button/SegmentedButtonsSet.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/notification/SnackNotifications.d.ts +1 -0
- package/dist/ui/notification/SnackNotifications.d.ts.map +1 -1
- package/dist/ui/notification/SnackNotifications.js +7 -0
- package/dist/ui/notification/SnackNotifications.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/FileBindings.ts +25 -1
- package/src/bindings/base/StoreBindings.ts +16 -73
- package/src/bindings/web/WebFileBindings.ts +1 -1
- package/src/define/http/certificate-add.ts +12 -0
- package/src/define/store/file-picker.ts +12 -0
- package/src/define/{files → store}/share-file.ts +2 -2
- package/src/define/ui/ui-segmented-button-set.ts +1 -1
- package/src/elements/authorization/ui/CC.styles.ts +4 -9
- package/src/elements/authorization/ui/CcAuthorization.ts +67 -167
- package/src/elements/http/CertificateAdd.element.ts +443 -0
- package/src/elements/http/CertificateAdd.styles.ts +61 -0
- package/src/elements/project/ProjectRunReport.ts +2 -1
- package/src/elements/store/FilePicker.element.ts +297 -0
- package/src/elements/store/FilePicker.styles.ts +73 -0
- package/src/elements/store/FilesLib.ts +32 -0
- package/src/events/EventTypes.ts +8 -7
- package/src/events/Events.ts +2 -0
- package/src/events/FilesystemEvents.ts +63 -0
- package/src/events/HttpClientEvents.ts +0 -2
- package/src/events/StoreEvents.ts +21 -1
- package/src/http-client/idb/Arc18DataUpgrade.ts +84 -84
- package/src/http-client/store/StoreBroadcast.ts +0 -8
- package/src/lib/files/FileUtils.ts +12 -0
- package/src/mixins/RouteMixin.ts +8 -1
- package/src/pages/ApplicationScreen.ts +5 -3
- package/src/pages/api-client/ApiClient.screen.ts +42 -33
- package/src/pages/api-client/ApiClient.styles.ts +0 -12
- package/src/pages/api-client/Authenticate.screen.ts +2 -2
- package/src/pages/api-client/pages/Files.page.ts +48 -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/button/SegmentedButtonsSet.ts +16 -1
- 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/notification/SnackNotifications.ts +8 -0
- package/src/ui/table/DataTable.ts +29 -3
- package/test/elements/http/BodyFormdataEditorElement.test.ts +458 -454
- package/test/elements/http/BodyMultipartEditorElement.test.ts +609 -605
- package/test/elements/http/BodyRawEditorElement.test.ts +60 -56
- package/test/elements/http/CertificateAdd.test.ts +430 -0
- package/test/elements/store/FilePicker.test.ts +241 -0
- package/test/env.js +3 -0
- package/test/events/EventTypes.test.ts +0 -22
- package/test/helpers/StoreHelper.ts +390 -0
- package/test/helpers/UiMock.ts +19 -2
- package/tsconfig.eslint.json +3 -1
- package/web-test-runner.config.mjs +50 -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/events/http-client/models/CertificatesEvents.d.ts +0 -12
- package/dist/events/http-client/models/CertificatesEvents.d.ts.map +0 -1
- package/dist/events/http-client/models/CertificatesEvents.js +0 -18
- package/dist/events/http-client/models/CertificatesEvents.js.map +0 -1
- package/dist/http-client/idb/AuthDataModel.d.ts +0 -60
- package/dist/http-client/idb/AuthDataModel.d.ts.map +0 -1
- package/dist/http-client/idb/AuthDataModel.js +0 -150
- package/dist/http-client/idb/AuthDataModel.js.map +0 -1
- package/dist/http-client/idb/HostsModel.d.ts +0 -25
- package/dist/http-client/idb/HostsModel.d.ts.map +0 -1
- package/dist/http-client/idb/HostsModel.js +0 -82
- package/dist/http-client/idb/HostsModel.js.map +0 -1
- package/dist/http-client/idb/LegacyMockedStore.d.ts +0 -214
- package/dist/http-client/idb/LegacyMockedStore.d.ts.map +0 -1
- package/dist/http-client/idb/LegacyMockedStore.js +0 -486
- package/dist/http-client/idb/LegacyMockedStore.js.map +0 -1
- package/src/events/http-client/models/CertificatesEvents.ts +0 -23
- package/src/http-client/idb/AuthDataModel.ts +0 -175
- package/src/http-client/idb/HostsModel.ts +0 -125
- package/src/http-client/idb/LegacyMockedStore.ts +0 -544
- package/test/apic-ui.test.ts +0 -31
- /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) {
|
|
@@ -309,6 +209,15 @@ export class FilesPage {
|
|
|
309
209
|
else if (option === 'schema') {
|
|
310
210
|
this.screen.openDialog('createSchemaDialog');
|
|
311
211
|
}
|
|
212
|
+
else if (option === 'certificate') {
|
|
213
|
+
const { parent } = this.fs;
|
|
214
|
+
if (parent) {
|
|
215
|
+
navigate('certificates', 'add', parent);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
navigate('certificates', 'add');
|
|
219
|
+
}
|
|
220
|
+
}
|
|
312
221
|
}
|
|
313
222
|
importHandler(e) {
|
|
314
223
|
e.preventDefault();
|
|
@@ -359,7 +268,7 @@ export class FilesPage {
|
|
|
359
268
|
this.importState = ImportState.Importing;
|
|
360
269
|
this.screen.render();
|
|
361
270
|
try {
|
|
362
|
-
await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.
|
|
271
|
+
await importProcessor.importProject(this.screen.bindings.store, selectedSpace, this.fs.parent);
|
|
363
272
|
this.importState = ImportState.Done;
|
|
364
273
|
this.screen.render();
|
|
365
274
|
}
|
|
@@ -401,8 +310,11 @@ export class FilesPage {
|
|
|
401
310
|
this.selectedItem = item;
|
|
402
311
|
this.screen.render();
|
|
403
312
|
}
|
|
313
|
+
handleTableScrollEnd() {
|
|
314
|
+
this.fs.debounceQuery();
|
|
315
|
+
}
|
|
404
316
|
openProject(key) {
|
|
405
|
-
const file = this.files.find(i => i.key === key);
|
|
317
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
406
318
|
if (!file) {
|
|
407
319
|
throw new Error(`Invalid state: file not found`);
|
|
408
320
|
}
|
|
@@ -483,7 +395,7 @@ export class FilesPage {
|
|
|
483
395
|
await files.writeFile(path, data, { dispose: true });
|
|
484
396
|
}
|
|
485
397
|
renameFile(key) {
|
|
486
|
-
const file = this.files.find(i => i.key === key);
|
|
398
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
487
399
|
if (!file) {
|
|
488
400
|
return;
|
|
489
401
|
}
|
|
@@ -503,7 +415,7 @@ export class FilesPage {
|
|
|
503
415
|
});
|
|
504
416
|
}
|
|
505
417
|
shareFile(key) {
|
|
506
|
-
const file = this.files.find(i => i.key === key);
|
|
418
|
+
const file = this.fs.files.find(i => i.key === key);
|
|
507
419
|
if (!file) {
|
|
508
420
|
return;
|
|
509
421
|
}
|
|
@@ -514,7 +426,7 @@ export class FilesPage {
|
|
|
514
426
|
dialog.modal = true;
|
|
515
427
|
document.body.appendChild(dialog);
|
|
516
428
|
dialog.open = true;
|
|
517
|
-
dialog.addEventListener('
|
|
429
|
+
dialog.addEventListener('close', () => {
|
|
518
430
|
document.body.removeChild(dialog);
|
|
519
431
|
});
|
|
520
432
|
}
|
|
@@ -554,7 +466,7 @@ export class FilesPage {
|
|
|
554
466
|
if (!selectedItem) {
|
|
555
467
|
return nothing;
|
|
556
468
|
}
|
|
557
|
-
const file = this.files.find(i => i.key === selectedItem);
|
|
469
|
+
const file = this.fs.files.find(i => i.key === selectedItem);
|
|
558
470
|
if (!file) {
|
|
559
471
|
return nothing;
|
|
560
472
|
}
|
|
@@ -618,6 +530,10 @@ export class FilesPage {
|
|
|
618
530
|
<ui-icon icon="schema" slot="start"></ui-icon>
|
|
619
531
|
Data schema
|
|
620
532
|
</ui-list-item>
|
|
533
|
+
<ui-list-item image="icon" data-option="certificate" role="menuitem">
|
|
534
|
+
<ui-icon icon="certificate" slot="start"></ui-icon>
|
|
535
|
+
Certificate
|
|
536
|
+
</ui-list-item>
|
|
621
537
|
<ui-divider></ui-divider>
|
|
622
538
|
<ui-list-item image="icon" data-option="folder" role="menuitem">
|
|
623
539
|
<ui-icon icon="folder" slot="start"></ui-icon>
|
|
@@ -649,7 +565,7 @@ export class FilesPage {
|
|
|
649
565
|
`;
|
|
650
566
|
}
|
|
651
567
|
renderBreadcrumbs() {
|
|
652
|
-
const { breadcrumbs = [] } = this;
|
|
568
|
+
const { breadcrumbs = [] } = this.fs;
|
|
653
569
|
if (!breadcrumbs.length) {
|
|
654
570
|
return html ``;
|
|
655
571
|
}
|
|
@@ -777,22 +693,10 @@ export class FilesPage {
|
|
|
777
693
|
`;
|
|
778
694
|
}
|
|
779
695
|
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
|
-
}
|
|
696
|
+
const icon = fileIcon(item);
|
|
793
697
|
return this.dt.cell(html `
|
|
794
698
|
${icon ? html `<ui-icon icon="${icon}" class="cell-icon"></ui-icon>` : nothing}
|
|
795
|
-
${item.info.name || 'Unnamed
|
|
699
|
+
${item.info.name || 'Unnamed file'}
|
|
796
700
|
`, { class: 'name-cell', data: { kind: item.kind } });
|
|
797
701
|
}
|
|
798
702
|
ownerCell(item) {
|
|
@@ -1 +1 @@
|
|
|
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, 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":"AAAA,OAAO,EACE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAC5D,UAAU,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,GAGlD,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;AAEhD,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;AAGpF,OAAO,SAAS,MAAM,6BAA6B,CAAC;AACpD,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,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;IAgBpB,YAAsB,MAAuB;QAAvB,WAAM,GAAN,MAAM,CAAiB;QAf7C,OAAE,GAAG,IAAI,UAAU,EAAE,CAAC;QAEtB,OAAE,GAAG,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QActG,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;QACtE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE5E,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,CAAwB,CAAC;YACvC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE;YAC7C,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;IACnC,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,EAAE,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;SAC9B;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;aAAM,IAAI,MAAM,KAAK,aAAa,EAAE;YACnC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,MAAM,EAAE;gBACV,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;aACzC;iBAAM;gBACL,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;aACjC;SACF;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,EAAE,CAAC,MAAM,CAAC,CAAC;YAC/F,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;IAES,oBAAoB;QAC5B,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACpD,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,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACpD,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,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACpD,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,OAAO,EAAE,GAAG,EAAE;YACpC,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,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC;QAC7D,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA4BpC,CAAC;IACJ,CAAC;IAES,qBAAqB;QAC7B,OAAO,IAAI,CAAA;;iBAEE,IAAI,CAAC,wBAAwB;;;;;;;;;;;;;;;;KAgBzC,CAAC;IACJ,CAAC;IAES,iBAAiB;QACzB,MAAM,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACrC,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,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,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,cAAc;KACnC,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, \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 } else if (option === 'certificate') {\n const { parent } = this.fs;\n if (parent) {\n navigate('certificates', 'add', parent);\n } else {\n navigate('certificates', 'add');\n }\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-list-item image=\"icon\" data-option=\"certificate\" role=\"menuitem\">\n <ui-icon icon=\"certificate\" slot=\"start\"></ui-icon>\n Certificate\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"}
|