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