@concord-consortium/cloud-file-manager 2.1.0-pre.9 → 2.2.1

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 (276) hide show
  1. package/dist/347 +276 -0
  2. package/dist/autolaunch/autolaunch.js +1 -1
  3. package/dist/autolaunch/autolaunch.js.map +1 -1
  4. package/dist/cjs/app-options.d.ts +2 -0
  5. package/dist/cjs/client.js +51 -79
  6. package/dist/cjs/client.js.map +1 -1
  7. package/dist/cjs/cloud-file-manager.js +2 -2
  8. package/dist/cjs/cloud-file-manager.js.map +1 -1
  9. package/dist/cjs/create-react-factory.d.ts +1 -0
  10. package/dist/cjs/create-react-factory.js.map +1 -1
  11. package/dist/cjs/providers/document-store-provider.js +7 -10
  12. package/dist/cjs/providers/document-store-provider.js.map +1 -1
  13. package/dist/cjs/providers/document-store-share-provider.js +4 -4
  14. package/dist/cjs/providers/document-store-share-provider.js.map +1 -1
  15. package/dist/cjs/providers/google-drive-provider.js +30 -34
  16. package/dist/cjs/providers/google-drive-provider.js.map +1 -1
  17. package/dist/cjs/providers/interactive-api-provider.d.ts +5 -2
  18. package/dist/cjs/providers/interactive-api-provider.js +27 -21
  19. package/dist/cjs/providers/interactive-api-provider.js.map +1 -1
  20. package/dist/cjs/providers/lara-provider.js +18 -26
  21. package/dist/cjs/providers/lara-provider.js.map +1 -1
  22. package/dist/cjs/providers/legacy-google-drive-provider.js +21 -27
  23. package/dist/cjs/providers/legacy-google-drive-provider.js.map +1 -1
  24. package/dist/cjs/providers/localstorage-provider.js +11 -13
  25. package/dist/cjs/providers/localstorage-provider.js.map +1 -1
  26. package/dist/cjs/providers/patchable-content.js +1 -1
  27. package/dist/cjs/providers/patchable-content.js.map +1 -1
  28. package/dist/cjs/providers/post-message-provider.js +1 -1
  29. package/dist/cjs/providers/post-message-provider.js.map +1 -1
  30. package/dist/cjs/providers/provider-interface.d.ts +1 -2
  31. package/dist/cjs/providers/provider-interface.js +11 -14
  32. package/dist/cjs/providers/provider-interface.js.map +1 -1
  33. package/dist/cjs/providers/readonly-provider.js +6 -6
  34. package/dist/cjs/providers/readonly-provider.js.map +1 -1
  35. package/dist/cjs/providers/s3-provider.js +1 -2
  36. package/dist/cjs/providers/s3-provider.js.map +1 -1
  37. package/dist/cjs/providers/s3-share-provider.js +1 -1
  38. package/dist/cjs/providers/s3-share-provider.js.map +1 -1
  39. package/dist/cjs/providers/test-provider.js +5 -5
  40. package/dist/cjs/providers/test-provider.js.map +1 -1
  41. package/dist/cjs/providers/url-provider.js +1 -1
  42. package/dist/cjs/providers/url-provider.js.map +1 -1
  43. package/dist/cjs/ui.js +2 -3
  44. package/dist/cjs/ui.js.map +1 -1
  45. package/dist/cjs/utils/focus-tracker.d.ts +3 -0
  46. package/dist/cjs/utils/focus-tracker.js +44 -0
  47. package/dist/cjs/utils/focus-tracker.js.map +1 -0
  48. package/dist/cjs/utils/ios-file-saver.d.ts +42 -0
  49. package/dist/cjs/utils/ios-file-saver.js +98 -0
  50. package/dist/cjs/utils/ios-file-saver.js.map +1 -0
  51. package/dist/cjs/utils/lang/en-US.json +9 -0
  52. package/dist/cjs/utils/s3-share-provider-token-service-helper.js +19 -13
  53. package/dist/cjs/utils/s3-share-provider-token-service-helper.js.map +1 -1
  54. package/dist/cjs/utils/url-params.js +1 -2
  55. package/dist/cjs/utils/url-params.js.map +1 -1
  56. package/dist/cjs/views/alert-dialog-view.d.ts +9 -3
  57. package/dist/cjs/views/alert-dialog-view.js +9 -24
  58. package/dist/cjs/views/alert-dialog-view.js.map +1 -1
  59. package/dist/cjs/views/app-view.d.ts +12 -5
  60. package/dist/cjs/views/app-view.js +167 -175
  61. package/dist/cjs/views/app-view.js.map +1 -1
  62. package/dist/cjs/views/blocking-modal-view.d.ts +9 -3
  63. package/dist/cjs/views/blocking-modal-view.js +8 -25
  64. package/dist/cjs/views/blocking-modal-view.js.map +1 -1
  65. package/dist/cjs/views/confirm-dialog-view.d.ts +14 -3
  66. package/dist/cjs/views/confirm-dialog-view.js +14 -31
  67. package/dist/cjs/views/confirm-dialog-view.js.map +1 -1
  68. package/dist/cjs/views/download-dialog-view.d.ts +12 -3
  69. package/dist/cjs/views/download-dialog-view.js +36 -63
  70. package/dist/cjs/views/download-dialog-view.js.map +1 -1
  71. package/dist/cjs/views/dropdown-anchors.d.ts +2 -2
  72. package/dist/cjs/views/dropdown-anchors.js +4 -10
  73. package/dist/cjs/views/dropdown-anchors.js.map +1 -1
  74. package/dist/cjs/views/dropdown-view.d.ts +20 -3
  75. package/dist/cjs/views/dropdown-view.js +40 -157
  76. package/dist/cjs/views/dropdown-view.js.map +1 -1
  77. package/dist/cjs/views/file-dialog-tab-view.d.ts +24 -2
  78. package/dist/cjs/views/file-dialog-tab-view.js +255 -315
  79. package/dist/cjs/views/file-dialog-tab-view.js.map +1 -1
  80. package/dist/cjs/views/icons/spin.d.ts +2 -2
  81. package/dist/cjs/views/icons/spin.js +2 -39
  82. package/dist/cjs/views/icons/spin.js.map +1 -1
  83. package/dist/cjs/views/import-tabbed-dialog-view.d.ts +12 -3
  84. package/dist/cjs/views/import-tabbed-dialog-view.js +33 -65
  85. package/dist/cjs/views/import-tabbed-dialog-view.js.map +1 -1
  86. package/dist/cjs/views/local-file-tab-list-view.d.ts +14 -3
  87. package/dist/cjs/views/local-file-tab-list-view.js +57 -66
  88. package/dist/cjs/views/local-file-tab-list-view.js.map +1 -1
  89. package/dist/cjs/views/local-file-tab-save-view.d.ts +32 -3
  90. package/dist/cjs/views/local-file-tab-save-view.js +125 -138
  91. package/dist/cjs/views/local-file-tab-save-view.js.map +1 -1
  92. package/dist/cjs/views/menu-bar-view.d.ts +58 -3
  93. package/dist/cjs/views/menu-bar-view.js +196 -183
  94. package/dist/cjs/views/menu-bar-view.js.map +1 -1
  95. package/dist/cjs/views/modal-dialog-view.js +7 -8
  96. package/dist/cjs/views/modal-dialog-view.js.map +1 -1
  97. package/dist/cjs/views/modal-tabbed-dialog-view.d.ts +15 -3
  98. package/dist/cjs/views/modal-tabbed-dialog-view.js +5 -17
  99. package/dist/cjs/views/modal-tabbed-dialog-view.js.map +1 -1
  100. package/dist/cjs/views/modal-view.d.ts +5 -32
  101. package/dist/cjs/views/modal-view.js +20 -64
  102. package/dist/cjs/views/modal-view.js.map +1 -1
  103. package/dist/cjs/views/provider-tabbed-dialog-view.d.ts +23 -3
  104. package/dist/cjs/views/provider-tabbed-dialog-view.js +43 -51
  105. package/dist/cjs/views/provider-tabbed-dialog-view.js.map +1 -1
  106. package/dist/cjs/views/rename-dialog-view.d.ts +8 -3
  107. package/dist/cjs/views/rename-dialog-view.js +25 -51
  108. package/dist/cjs/views/rename-dialog-view.js.map +1 -1
  109. package/dist/cjs/views/select-interactive-state-dialog-view.d.ts +1 -1
  110. package/dist/cjs/views/select-interactive-state-dialog-view.js +4 -30
  111. package/dist/cjs/views/select-interactive-state-dialog-view.js.map +1 -1
  112. package/dist/cjs/views/select-provider-dialog-tab-view.d.ts +6 -1
  113. package/dist/cjs/views/select-provider-dialog-tab-view.js +4 -12
  114. package/dist/cjs/views/select-provider-dialog-tab-view.js.map +1 -1
  115. package/dist/cjs/views/share-dialog-status-view.js +6 -13
  116. package/dist/cjs/views/share-dialog-status-view.js.map +1 -1
  117. package/dist/cjs/views/share-dialog-tabs-view.js +22 -61
  118. package/dist/cjs/views/share-dialog-tabs-view.js.map +1 -1
  119. package/dist/cjs/views/share-dialog-view.d.ts +1 -1
  120. package/dist/cjs/views/share-dialog-view.js +15 -21
  121. package/dist/cjs/views/share-dialog-view.js.map +1 -1
  122. package/dist/cjs/views/share-loading-view.d.ts +2 -2
  123. package/dist/cjs/views/share-loading-view.js +2 -4
  124. package/dist/cjs/views/share-loading-view.js.map +1 -1
  125. package/dist/cjs/views/tabbed-panel-view.d.ts +16 -3
  126. package/dist/cjs/views/tabbed-panel-view.js +25 -75
  127. package/dist/cjs/views/tabbed-panel-view.js.map +1 -1
  128. package/dist/cjs/views/url-tab-view.d.ts +12 -3
  129. package/dist/cjs/views/url-tab-view.js +31 -46
  130. package/dist/cjs/views/url-tab-view.js.map +1 -1
  131. package/dist/css/app.css +1 -1
  132. package/dist/css/app.css.map +1 -1
  133. package/dist/esm/app-options.d.ts +2 -0
  134. package/dist/esm/client.js +51 -79
  135. package/dist/esm/client.js.map +1 -1
  136. package/dist/esm/cloud-file-manager.js +2 -2
  137. package/dist/esm/cloud-file-manager.js.map +1 -1
  138. package/dist/esm/create-react-factory.d.ts +1 -0
  139. package/dist/esm/create-react-factory.js.map +1 -1
  140. package/dist/esm/providers/document-store-provider.js +7 -10
  141. package/dist/esm/providers/document-store-provider.js.map +1 -1
  142. package/dist/esm/providers/document-store-share-provider.js +4 -4
  143. package/dist/esm/providers/document-store-share-provider.js.map +1 -1
  144. package/dist/esm/providers/google-drive-provider.js +30 -34
  145. package/dist/esm/providers/google-drive-provider.js.map +1 -1
  146. package/dist/esm/providers/interactive-api-provider.d.ts +5 -2
  147. package/dist/esm/providers/interactive-api-provider.js +25 -20
  148. package/dist/esm/providers/interactive-api-provider.js.map +1 -1
  149. package/dist/esm/providers/lara-provider.js +18 -26
  150. package/dist/esm/providers/lara-provider.js.map +1 -1
  151. package/dist/esm/providers/legacy-google-drive-provider.js +21 -27
  152. package/dist/esm/providers/legacy-google-drive-provider.js.map +1 -1
  153. package/dist/esm/providers/localstorage-provider.js +11 -13
  154. package/dist/esm/providers/localstorage-provider.js.map +1 -1
  155. package/dist/esm/providers/patchable-content.js +1 -1
  156. package/dist/esm/providers/patchable-content.js.map +1 -1
  157. package/dist/esm/providers/post-message-provider.js +1 -1
  158. package/dist/esm/providers/post-message-provider.js.map +1 -1
  159. package/dist/esm/providers/provider-interface.d.ts +1 -2
  160. package/dist/esm/providers/provider-interface.js +11 -14
  161. package/dist/esm/providers/provider-interface.js.map +1 -1
  162. package/dist/esm/providers/readonly-provider.js +6 -6
  163. package/dist/esm/providers/readonly-provider.js.map +1 -1
  164. package/dist/esm/providers/s3-provider.js +1 -2
  165. package/dist/esm/providers/s3-provider.js.map +1 -1
  166. package/dist/esm/providers/s3-share-provider.js +1 -1
  167. package/dist/esm/providers/s3-share-provider.js.map +1 -1
  168. package/dist/esm/providers/test-provider.js +5 -5
  169. package/dist/esm/providers/test-provider.js.map +1 -1
  170. package/dist/esm/providers/url-provider.js +1 -1
  171. package/dist/esm/providers/url-provider.js.map +1 -1
  172. package/dist/esm/ui.js +2 -3
  173. package/dist/esm/ui.js.map +1 -1
  174. package/dist/esm/utils/focus-tracker.d.ts +3 -0
  175. package/dist/esm/utils/focus-tracker.js +38 -0
  176. package/dist/esm/utils/focus-tracker.js.map +1 -0
  177. package/dist/esm/utils/ios-file-saver.d.ts +42 -0
  178. package/dist/esm/utils/ios-file-saver.js +91 -0
  179. package/dist/esm/utils/ios-file-saver.js.map +1 -0
  180. package/dist/esm/utils/lang/en-US.json +9 -0
  181. package/dist/esm/utils/s3-share-provider-token-service-helper.js +19 -10
  182. package/dist/esm/utils/s3-share-provider-token-service-helper.js.map +1 -1
  183. package/dist/esm/utils/url-params.js +1 -2
  184. package/dist/esm/utils/url-params.js.map +1 -1
  185. package/dist/esm/views/alert-dialog-view.d.ts +9 -3
  186. package/dist/esm/views/alert-dialog-view.js +10 -25
  187. package/dist/esm/views/alert-dialog-view.js.map +1 -1
  188. package/dist/esm/views/app-view.d.ts +12 -5
  189. package/dist/esm/views/app-view.js +176 -184
  190. package/dist/esm/views/app-view.js.map +1 -1
  191. package/dist/esm/views/blocking-modal-view.d.ts +9 -3
  192. package/dist/esm/views/blocking-modal-view.js +9 -26
  193. package/dist/esm/views/blocking-modal-view.js.map +1 -1
  194. package/dist/esm/views/confirm-dialog-view.d.ts +14 -3
  195. package/dist/esm/views/confirm-dialog-view.js +15 -32
  196. package/dist/esm/views/confirm-dialog-view.js.map +1 -1
  197. package/dist/esm/views/download-dialog-view.d.ts +12 -3
  198. package/dist/esm/views/download-dialog-view.js +36 -63
  199. package/dist/esm/views/download-dialog-view.js.map +1 -1
  200. package/dist/esm/views/dropdown-anchors.d.ts +2 -2
  201. package/dist/esm/views/dropdown-anchors.js +4 -7
  202. package/dist/esm/views/dropdown-anchors.js.map +1 -1
  203. package/dist/esm/views/dropdown-view.d.ts +20 -3
  204. package/dist/esm/views/dropdown-view.js +40 -154
  205. package/dist/esm/views/dropdown-view.js.map +1 -1
  206. package/dist/esm/views/file-dialog-tab-view.d.ts +24 -2
  207. package/dist/esm/views/file-dialog-tab-view.js +256 -316
  208. package/dist/esm/views/file-dialog-tab-view.js.map +1 -1
  209. package/dist/esm/views/icons/spin.d.ts +2 -2
  210. package/dist/esm/views/icons/spin.js +2 -36
  211. package/dist/esm/views/icons/spin.js.map +1 -1
  212. package/dist/esm/views/import-tabbed-dialog-view.d.ts +12 -3
  213. package/dist/esm/views/import-tabbed-dialog-view.js +36 -68
  214. package/dist/esm/views/import-tabbed-dialog-view.js.map +1 -1
  215. package/dist/esm/views/local-file-tab-list-view.d.ts +14 -3
  216. package/dist/esm/views/local-file-tab-list-view.js +57 -66
  217. package/dist/esm/views/local-file-tab-list-view.js.map +1 -1
  218. package/dist/esm/views/local-file-tab-save-view.d.ts +32 -3
  219. package/dist/esm/views/local-file-tab-save-view.js +125 -138
  220. package/dist/esm/views/local-file-tab-save-view.js.map +1 -1
  221. package/dist/esm/views/menu-bar-view.d.ts +58 -3
  222. package/dist/esm/views/menu-bar-view.js +198 -185
  223. package/dist/esm/views/menu-bar-view.js.map +1 -1
  224. package/dist/esm/views/modal-dialog-view.js +7 -8
  225. package/dist/esm/views/modal-dialog-view.js.map +1 -1
  226. package/dist/esm/views/modal-tabbed-dialog-view.d.ts +15 -3
  227. package/dist/esm/views/modal-tabbed-dialog-view.js +7 -19
  228. package/dist/esm/views/modal-tabbed-dialog-view.js.map +1 -1
  229. package/dist/esm/views/modal-view.d.ts +5 -32
  230. package/dist/esm/views/modal-view.js +21 -61
  231. package/dist/esm/views/modal-view.js.map +1 -1
  232. package/dist/esm/views/provider-tabbed-dialog-view.d.ts +23 -3
  233. package/dist/esm/views/provider-tabbed-dialog-view.js +46 -54
  234. package/dist/esm/views/provider-tabbed-dialog-view.js.map +1 -1
  235. package/dist/esm/views/rename-dialog-view.d.ts +8 -3
  236. package/dist/esm/views/rename-dialog-view.js +25 -51
  237. package/dist/esm/views/rename-dialog-view.js.map +1 -1
  238. package/dist/esm/views/select-interactive-state-dialog-view.d.ts +1 -1
  239. package/dist/esm/views/select-interactive-state-dialog-view.js +4 -30
  240. package/dist/esm/views/select-interactive-state-dialog-view.js.map +1 -1
  241. package/dist/esm/views/select-provider-dialog-tab-view.d.ts +6 -1
  242. package/dist/esm/views/select-provider-dialog-tab-view.js +4 -9
  243. package/dist/esm/views/select-provider-dialog-tab-view.js.map +1 -1
  244. package/dist/esm/views/share-dialog-status-view.js +6 -13
  245. package/dist/esm/views/share-dialog-status-view.js.map +1 -1
  246. package/dist/esm/views/share-dialog-tabs-view.js +22 -61
  247. package/dist/esm/views/share-dialog-tabs-view.js.map +1 -1
  248. package/dist/esm/views/share-dialog-view.d.ts +1 -1
  249. package/dist/esm/views/share-dialog-view.js +15 -21
  250. package/dist/esm/views/share-dialog-view.js.map +1 -1
  251. package/dist/esm/views/share-loading-view.d.ts +2 -2
  252. package/dist/esm/views/share-loading-view.js +2 -4
  253. package/dist/esm/views/share-loading-view.js.map +1 -1
  254. package/dist/esm/views/tabbed-panel-view.d.ts +16 -3
  255. package/dist/esm/views/tabbed-panel-view.js +25 -72
  256. package/dist/esm/views/tabbed-panel-view.js.map +1 -1
  257. package/dist/esm/views/url-tab-view.d.ts +12 -3
  258. package/dist/esm/views/url-tab-view.js +31 -46
  259. package/dist/esm/views/url-tab-view.js.map +1 -1
  260. package/dist/examples/codap3-local-file.html +42 -0
  261. package/dist/examples/index.html +2 -0
  262. package/dist/examples/local-json-save.html +36 -0
  263. package/dist/index.html +1 -1
  264. package/dist/js/app.js +1 -1
  265. package/dist/js/app.js.LICENSE.txt +41 -11
  266. package/dist/js/app.js.map +1 -1
  267. package/dist/js/globals.js +1 -1
  268. package/dist/js/globals.js.map +1 -1
  269. package/package.json +40 -36
  270. package/readme.md +4 -0
  271. package/dist/cjs/lib/file-saver.d.ts +0 -2
  272. package/dist/cjs/lib/file-saver.js +0 -164
  273. package/dist/cjs/lib/file-saver.js.map +0 -1
  274. package/dist/esm/lib/file-saver.d.ts +0 -2
  275. package/dist/esm/lib/file-saver.js +0 -164
  276. package/dist/esm/lib/file-saver.js.map +0 -1
@@ -83,7 +83,6 @@ class CloudFileManagerClient {
83
83
  });
84
84
  }
85
85
  setAppOptions(appOptions) {
86
- var _a, _b, _c, _d;
87
86
  let providerName;
88
87
  let Provider;
89
88
  if (appOptions == null) {
@@ -206,14 +205,14 @@ class CloudFileManagerClient {
206
205
  }
207
206
  // initialize the cloudContentFactory with all data we want in the envelope
208
207
  cloudContentFactory.setEnvelopeMetadata({
209
- cfmVersion: '2.1.0-pre.9', // replaced by version number at build time
208
+ cfmVersion: '2.2.1', // replaced by version number at build time
210
209
  appName: this.appOptions.appName || "",
211
210
  appVersion: this.appOptions.appVersion || "",
212
211
  appBuildNum: this.appOptions.appBuildNum || ""
213
212
  });
214
- this.newFileOpensInNewTab = (_b = (_a = this.appOptions.ui) === null || _a === void 0 ? void 0 : _a.newFileOpensInNewTab) !== null && _b !== void 0 ? _b : true;
215
- this.newFileAddsNewToQuery = (_c = this.appOptions.ui) === null || _c === void 0 ? void 0 : _c.newFileAddsNewToQuery;
216
- if ((_d = this.appOptions.ui) === null || _d === void 0 ? void 0 : _d.confirmCloseIfDirty) {
213
+ this.newFileOpensInNewTab = this.appOptions.ui?.newFileOpensInNewTab ?? true;
214
+ this.newFileAddsNewToQuery = this.appOptions.ui?.newFileAddsNewToQuery;
215
+ if (this.appOptions.ui?.confirmCloseIfDirty) {
217
216
  this._setupConfirmOnClose();
218
217
  }
219
218
  return this._startPostMessageListener();
@@ -230,8 +229,7 @@ class CloudFileManagerClient {
230
229
  }
231
230
  }
232
231
  connect() {
233
- var _a;
234
- (_a = this.connectedPromiseResolver) === null || _a === void 0 ? void 0 : _a.resolve();
232
+ this.connectedPromiseResolver?.resolve();
235
233
  return this._event('connected', { client: this });
236
234
  }
237
235
  //
@@ -243,7 +241,7 @@ class CloudFileManagerClient {
243
241
  //
244
242
  processUrlParams() {
245
243
  // process the hash params
246
- let providerName;
244
+ let providerName, providerParams, folder;
247
245
  const { hashParams } = this.appOptions;
248
246
  if (hashParams.sharedContentId) {
249
247
  return this.openSharedContent(hashParams.sharedContentId);
@@ -253,7 +251,6 @@ class CloudFileManagerClient {
253
251
  return this.openUrlFile(hashParams.fileParams);
254
252
  }
255
253
  else {
256
- let providerParams;
257
254
  [providerName, providerParams] = hashParams.fileParams.split(':');
258
255
  return this.openProviderFile(providerName, providerParams);
259
256
  }
@@ -262,7 +259,6 @@ class CloudFileManagerClient {
262
259
  return this.openCopiedFile(hashParams.copyParams);
263
260
  }
264
261
  else if (hashParams.newInFolderParams) {
265
- let folder;
266
262
  [providerName, folder] = hashParams.newInFolderParams.split(':');
267
263
  return this.createNewInFolder(providerName, folder);
268
264
  }
@@ -357,8 +353,7 @@ class CloudFileManagerClient {
357
353
  }
358
354
  }
359
355
  openFile(metadata, callback = null) {
360
- var _a;
361
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities.load, metadata)) {
356
+ if (metadata?.provider?.can(ECapabilities.load, metadata)) {
362
357
  this._event('willOpenFile', { op: "openFile" });
363
358
  return metadata.provider.load(metadata, (err, content) => {
364
359
  if (err) {
@@ -464,8 +459,7 @@ class CloudFileManagerClient {
464
459
  }
465
460
  // must be called as a result of user action (e.g. click) to avoid popup blockers
466
461
  parseUrlAuthorizeAndOpen() {
467
- var _a;
468
- if (((_a = this.appOptions.hashParams) === null || _a === void 0 ? void 0 : _a.fileParams) != null) {
462
+ if (this.appOptions.hashParams?.fileParams != null) {
469
463
  const [providerName, providerParams] = this.appOptions.hashParams.fileParams.split(':');
470
464
  const provider = this.providers[providerName];
471
465
  if (provider) {
@@ -589,8 +583,7 @@ class CloudFileManagerClient {
589
583
  });
590
584
  }
591
585
  saveContent(stringContent, callback = null) {
592
- var _a;
593
- const provider = ((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) || this.autoProvider(ECapabilities.save);
586
+ const provider = this.state.metadata?.provider || this.autoProvider(ECapabilities.save);
594
587
  if (provider != null) {
595
588
  return provider.authorized((isAuthorized) => {
596
589
  // we can save the document without authorization in some cases
@@ -607,9 +600,8 @@ class CloudFileManagerClient {
607
600
  }
608
601
  }
609
602
  saveFile(stringContent, metadata, callback = null) {
610
- var _a;
611
603
  const readonly = metadata && !metadata.overwritable; // only check if metadata exists
612
- const resaveable = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities.resave, metadata);
604
+ const resaveable = metadata?.provider?.can(ECapabilities.resave, metadata);
613
605
  // must be able to 'resave' to save silently, i.e. without save dialog
614
606
  if (!readonly && resaveable) {
615
607
  return this.saveFileNoDialog(stringContent, metadata, callback);
@@ -619,12 +611,11 @@ class CloudFileManagerClient {
619
611
  }
620
612
  }
621
613
  saveFileNoDialog(stringContent, metadata, callback = null) {
622
- var _a, _b;
623
614
  this._setState({
624
615
  saving: metadata
625
616
  });
626
617
  let currentContent = this._createOrUpdateCurrentContent(stringContent, metadata);
627
- currentContent = ((_b = (_a = this.appOptions).contentSaveFilter) === null || _b === void 0 ? void 0 : _b.call(_a, currentContent)) || currentContent;
618
+ currentContent = this.appOptions.contentSaveFilter?.(currentContent) || currentContent;
628
619
  return metadata.provider.save(currentContent, metadata, (err, statusCode, savedContent) => {
629
620
  let failures;
630
621
  if (err) {
@@ -687,8 +678,7 @@ class CloudFileManagerClient {
687
678
  }
688
679
  createCopy(stringContent = null, callback = null) {
689
680
  const saveAndOpenCopy = (stringContent) => {
690
- var _a;
691
- return this.saveCopiedFile(stringContent, (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name, (err, copyParams) => {
681
+ return this.saveCopiedFile(stringContent, this.state.metadata?.name, (err, copyParams) => {
692
682
  if (err) {
693
683
  return (typeof callback === 'function' ? callback(err) : undefined);
694
684
  }
@@ -715,7 +705,7 @@ class CloudFileManagerClient {
715
705
  }
716
706
  maxCopyNumber++;
717
707
  const value = JSON.stringify({
718
- name: (name === null || name === void 0 ? void 0 : name.length) ? `Copy of ${name}` : "Copy of Untitled Document",
708
+ name: name?.length ? `Copy of ${name}` : "Copy of Untitled Document",
719
709
  stringContent
720
710
  });
721
711
  window.localStorage.setItem(`${prefix}${maxCopyNumber}`, value);
@@ -772,11 +762,10 @@ class CloudFileManagerClient {
772
762
  }
773
763
  saveTempFile(callback) {
774
764
  return this._event('getContent', { shared: this._sharedMetadata() }, (stringContent) => {
775
- var _a;
776
765
  const currentContent = this._createOrUpdateCurrentContent(stringContent);
777
766
  try {
778
767
  const key = "cfm-tempfile";
779
- const name = (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name;
768
+ const name = this.state.metadata?.name;
780
769
  const value = JSON.stringify({ name, stringContent });
781
770
  window.localStorage.setItem(key, value);
782
771
  const metadata = new CloudMetadata({
@@ -784,10 +773,10 @@ class CloudFileManagerClient {
784
773
  type: CloudMetadata.File
785
774
  });
786
775
  this._fileChanged('savedFile', currentContent, metadata, { saved: true }, "");
787
- return callback === null || callback === void 0 ? void 0 : callback(null);
776
+ return callback?.(null);
788
777
  }
789
778
  catch (e) {
790
- return callback === null || callback === void 0 ? void 0 : callback("Unable to temporarily save copied file");
779
+ return callback?.("Unable to temporarily save copied file");
791
780
  }
792
781
  });
793
782
  }
@@ -810,8 +799,7 @@ class CloudFileManagerClient {
810
799
  }
811
800
  }
812
801
  _sharedMetadata() {
813
- var _a;
814
- return ((_a = this.state.currentContent) === null || _a === void 0 ? void 0 : _a.getSharedMetadata()) || {};
802
+ return this.state.currentContent?.getSharedMetadata() || {};
815
803
  }
816
804
  shareGetLink() {
817
805
  return this._ui.shareDialog(this);
@@ -828,8 +816,7 @@ class CloudFileManagerClient {
828
816
  }
829
817
  }
830
818
  isShared() {
831
- var _a;
832
- const currentContent = (_a = this.state) === null || _a === void 0 ? void 0 : _a.currentContent;
819
+ const currentContent = this.state?.currentContent;
833
820
  if (currentContent) {
834
821
  const unshared = currentContent.get("isUnshared");
835
822
  if (!unshared) {
@@ -871,7 +858,7 @@ class CloudFileManagerClient {
871
858
  if (err) {
872
859
  return this.alert(err);
873
860
  }
874
- return callback === null || callback === void 0 ? void 0 : callback(null, sharedContentId, currentContent);
861
+ return callback?.(null, sharedContentId, currentContent);
875
862
  });
876
863
  });
877
864
  }
@@ -888,21 +875,20 @@ class CloudFileManagerClient {
888
875
  }
889
876
  return this.setShareState(true, (err, sharedContentId, currentContent) => {
890
877
  this._fileChanged('sharedFile', currentContent, this.state.metadata);
891
- return callback === null || callback === void 0 ? void 0 : callback(null, sharedContentId);
878
+ return callback?.(null, sharedContentId);
892
879
  });
893
880
  }
894
881
  unshare(callback) {
895
882
  return this.setShareState(false, (err, sharedContentId, currentContent) => {
896
883
  this._fileChanged('unsharedFile', currentContent, this.state.metadata);
897
- return callback === null || callback === void 0 ? void 0 : callback(null);
884
+ return callback?.(null);
898
885
  });
899
886
  }
900
887
  revertToShared(callback = null) {
901
- var _a, _b, _c;
902
888
  // Look for sharedDocumentUrl or Url first:
903
- const id = ((_a = this.state.currentContent) === null || _a === void 0 ? void 0 : _a.get("sharedDocumentUrl"))
904
- || ((_b = this.state.currentContent) === null || _b === void 0 ? void 0 : _b.get("url"))
905
- || ((_c = this.state.currentContent) === null || _c === void 0 ? void 0 : _c.get("sharedDocumentId"));
889
+ const id = this.state.currentContent?.get("sharedDocumentUrl")
890
+ || this.state.currentContent?.get("url")
891
+ || this.state.currentContent?.get("sharedDocumentId");
906
892
  if (id && (this.state.shareProvider != null)) {
907
893
  return this.state.shareProvider.loadSharedContent(id, (err, content, metadata) => {
908
894
  let docName;
@@ -915,7 +901,7 @@ class CloudFileManagerClient {
915
901
  metadata.name = docName;
916
902
  }
917
903
  this._fileOpened(content, metadata, { dirty: true, openedContent: content.clone() });
918
- return callback === null || callback === void 0 ? void 0 : callback(null);
904
+ return callback?.(null);
919
905
  });
920
906
  }
921
907
  }
@@ -927,16 +913,14 @@ class CloudFileManagerClient {
927
913
  downloadDialog(callback = null) {
928
914
  // should share metadata be included in downloaded local files?
929
915
  return this._event('getContent', { shared: this._sharedMetadata() }, (content) => {
930
- var _a;
931
916
  const envelopedContent = cloudContentFactory.createEnvelopedCloudContent(content);
932
917
  if (this.state.currentContent != null) {
933
918
  this.state.currentContent.copyMetadataTo(envelopedContent);
934
919
  }
935
- return this._ui.downloadDialog((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name, envelopedContent, callback);
920
+ return this._ui.downloadDialog(this.state.metadata?.name, envelopedContent, callback);
936
921
  });
937
922
  }
938
923
  getDownloadBlob(content, includeShareInfo, mimeType) {
939
- var _a;
940
924
  let contentToSave;
941
925
  if (mimeType == null) {
942
926
  mimeType = 'text/plain';
@@ -961,7 +945,7 @@ class CloudFileManagerClient {
961
945
  delete json.isUnshared;
962
946
  delete json.accessKeys;
963
947
  // CODAP moves the keys into its own namespace
964
- if (((_a = json.metadata) === null || _a === void 0 ? void 0 : _a.shared) != null) {
948
+ if (json.metadata?.shared != null) {
965
949
  delete json.metadata.shared;
966
950
  }
967
951
  contentToSave = JSON.stringify(json);
@@ -978,17 +962,15 @@ class CloudFileManagerClient {
978
962
  }
979
963
  }
980
964
  rename(metadata, newName, callback) {
981
- var _a;
982
965
  const { dirty } = this.state;
983
966
  const _rename = (metadata) => {
984
- var _a;
985
967
  if (this.state.currentContent != null) {
986
968
  this.state.currentContent.addMetadata({ docName: metadata.name });
987
969
  }
988
970
  this._fileChanged('renamedFile', this.state.currentContent, metadata, { dirty }, this._getHashParams(metadata));
989
971
  const done = () => typeof callback === 'function' ? callback(newName) : undefined;
990
- const readOnlyProvider = ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.name) === ReadOnlyProvider.Name;
991
- if (!readOnlyProvider && ((metadata === null || metadata === void 0 ? void 0 : metadata.provider) || this.autoProvider(ECapabilities.save))) {
972
+ const readOnlyProvider = metadata?.provider?.name === ReadOnlyProvider.Name;
973
+ if (!readOnlyProvider && (metadata?.provider || this.autoProvider(ECapabilities.save))) {
992
974
  // autosave renamed file if it has already been saved or can be autosaved
993
975
  this.save(done);
994
976
  }
@@ -997,7 +979,7 @@ class CloudFileManagerClient {
997
979
  }
998
980
  };
999
981
  if (newName !== (this.state.metadata != null ? this.state.metadata.name : undefined)) {
1000
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities.rename, metadata)) {
982
+ if (metadata?.provider?.can(ECapabilities.rename, metadata)) {
1001
983
  return this.state.metadata.provider.rename(this.state.metadata, newName, (err, metadata) => {
1002
984
  if (err) {
1003
985
  return this.alert(err);
@@ -1066,10 +1048,9 @@ class CloudFileManagerClient {
1066
1048
  // Saves a file to backend, but does not update current metadata.
1067
1049
  // Used e.g. when exporting .csv files from CODAP
1068
1050
  saveSecondaryFile(stringContent, metadata, callback = null) {
1069
- var _a;
1070
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities["export"], metadata)) {
1051
+ if (metadata?.provider?.can(ECapabilities["export"], metadata)) {
1071
1052
  return metadata.provider.saveAsExport(stringContent, metadata, (err, statusCode) => {
1072
- return err ? this.alert(err) : callback === null || callback === void 0 ? void 0 : callback(stringContent, metadata);
1053
+ return err ? this.alert(err) : callback?.(stringContent, metadata);
1073
1054
  });
1074
1055
  }
1075
1056
  }
@@ -1084,12 +1065,11 @@ class CloudFileManagerClient {
1084
1065
  }
1085
1066
  }
1086
1067
  shouldAutoSave() {
1087
- var _a;
1088
1068
  const { metadata } = this.state;
1089
1069
  return (this.state.dirty
1090
- && !(metadata === null || metadata === void 0 ? void 0 : metadata.autoSaveDisabled)
1070
+ && !metadata?.autoSaveDisabled
1091
1071
  && !this.isSaveInProgress()
1092
- && ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities.resave, metadata)));
1072
+ && metadata?.provider?.can(ECapabilities.resave, metadata));
1093
1073
  }
1094
1074
  autoSave(interval) {
1095
1075
  if (this._autoSaveInterval) {
@@ -1109,7 +1089,6 @@ class CloudFileManagerClient {
1109
1089
  return (this._autoSaveInterval != null);
1110
1090
  }
1111
1091
  changeLanguage(newLangCode, callback) {
1112
- var _a, _b;
1113
1092
  setCurrentLanguage(newLangCode);
1114
1093
  if (callback) {
1115
1094
  const postSave = (err) => {
@@ -1121,7 +1100,7 @@ class CloudFileManagerClient {
1121
1100
  return callback(newLangCode);
1122
1101
  }
1123
1102
  };
1124
- if ((_b = (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) === null || _b === void 0 ? void 0 : _b.can(ECapabilities.save)) {
1103
+ if (this.state.metadata?.provider?.can(ECapabilities.save)) {
1125
1104
  return this.save((err) => postSave(err));
1126
1105
  }
1127
1106
  else {
@@ -1160,6 +1139,7 @@ class CloudFileManagerClient {
1160
1139
  return this.confirmDialog({ message, callback, rejectCallback });
1161
1140
  }
1162
1141
  confirmDialog(params) {
1142
+ this._event("requiresUserInteraction");
1163
1143
  return this._ui.confirmDialog(params);
1164
1144
  }
1165
1145
  alert(message, titleOrCallback, callback) {
@@ -1179,10 +1159,9 @@ class CloudFileManagerClient {
1179
1159
  async onUnload(options) {
1180
1160
  if (options.unloading) {
1181
1161
  return new Promise(resolve => {
1182
- var _a;
1183
1162
  // only save if the provider is set - when using linked interactives the provider is not set when
1184
1163
  // the linked interactive changed and the version choice dialog is showing
1185
- if ((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) {
1164
+ if (this.state.metadata?.provider) {
1186
1165
  this.save((content, metadata, savedContent) => {
1187
1166
  // providers can save a different format for the content
1188
1167
  // for example the interactiveApi provider can save attachments in which case the savedContent
@@ -1226,11 +1205,10 @@ class CloudFileManagerClient {
1226
1205
  return this._event(type, { content: (content != null ? content.getClientContent() : undefined), shared: this._sharedMetadata() });
1227
1206
  }
1228
1207
  _fileOpened(content, metadata, additionalState, hashParams = null) {
1229
- var _a, _b;
1230
1208
  if (additionalState == null) {
1231
1209
  additionalState = {};
1232
1210
  }
1233
- const eventData = { content: (_b = (_a = content === null || content === void 0 ? void 0 : content.getClientContent) === null || _a === void 0 ? void 0 : _a.call(content)) !== null && _b !== void 0 ? _b : content };
1211
+ const eventData = { content: content?.getClientContent?.() ?? content };
1234
1212
  // update state before sending 'openedFile' events so that 'openedFile' listeners that
1235
1213
  // reference state have the updated state values
1236
1214
  this._updateState(content, metadata, additionalState, hashParams);
@@ -1256,17 +1234,16 @@ class CloudFileManagerClient {
1256
1234
  metadata,
1257
1235
  saving: null,
1258
1236
  saved: false,
1259
- dirty: !additionalState.saved && (content === null || content === void 0 ? void 0 : content.requiresConversion()),
1237
+ dirty: !additionalState.saved && content?.requiresConversion(),
1260
1238
  ...additionalState
1261
1239
  };
1262
- this._setWindowTitle(metadata === null || metadata === void 0 ? void 0 : metadata.name);
1240
+ this._setWindowTitle(metadata?.name);
1263
1241
  if (hashParams !== null) {
1264
1242
  window.location.hash = hashParams;
1265
1243
  }
1266
1244
  return this._setState(state);
1267
1245
  }
1268
1246
  _event(type, data, eventCallback = null) {
1269
- var _a;
1270
1247
  if (data == null) {
1271
1248
  data = {};
1272
1249
  }
@@ -1280,7 +1257,7 @@ class CloudFileManagerClient {
1280
1257
  // I tried sending the state but that causes CODAP to replace its state which breaks other things.
1281
1258
  // A permanent fix for this would be to send the new filename outside of the state metadata.
1282
1259
  const skipPostMessage = type === "renamedFile";
1283
- if (((_a = this.appOptions) === null || _a === void 0 ? void 0 : _a.sendPostMessageClientEvents) && this.iframe && !skipPostMessage) {
1260
+ if (this.appOptions?.sendPostMessageClientEvents && this.iframe && !skipPostMessage) {
1284
1261
  return event.postMessage(this.iframe.contentWindow);
1285
1262
  }
1286
1263
  }
@@ -1300,9 +1277,8 @@ class CloudFileManagerClient {
1300
1277
  });
1301
1278
  }
1302
1279
  _closeCurrentFile() {
1303
- var _a;
1304
1280
  const { metadata } = this.state;
1305
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(ECapabilities.close, metadata)) {
1281
+ if (metadata?.provider?.can(ECapabilities.close, metadata)) {
1306
1282
  return metadata.provider.close(metadata);
1307
1283
  }
1308
1284
  }
@@ -1321,8 +1297,7 @@ class CloudFileManagerClient {
1321
1297
  return currentContent;
1322
1298
  }
1323
1299
  _setWindowTitle(name) {
1324
- var _a;
1325
- if ((_a = this.appOptions) === null || _a === void 0 ? void 0 : _a.appSetsWindowTitle) {
1300
+ if (this.appOptions?.appSetsWindowTitle) {
1326
1301
  return;
1327
1302
  }
1328
1303
  const { ui } = this.appOptions;
@@ -1337,13 +1312,12 @@ class CloudFileManagerClient {
1337
1312
  }
1338
1313
  }
1339
1314
  _getHashParams(metadata) {
1340
- var _a, _b;
1341
- const canOpenSaved = ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.canOpenSaved()) || false;
1342
- let openSavedParams = canOpenSaved ? (_b = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _b === void 0 ? void 0 : _b.getOpenSavedParams(metadata) : null;
1315
+ const canOpenSaved = metadata?.provider?.canOpenSaved() || false;
1316
+ let openSavedParams = canOpenSaved ? metadata?.provider?.getOpenSavedParams(metadata) : null;
1343
1317
  if (canOpenSaved && (openSavedParams != null) && (typeof openSavedParams === "string")) {
1344
1318
  return `#file=${metadata.provider.urlDisplayName || metadata.provider.name}:${encodeURIComponent(openSavedParams)}`;
1345
1319
  }
1346
- else if ((metadata === null || metadata === void 0 ? void 0 : metadata.provider) instanceof URLProvider && (window.location.hash.indexOf("#file=http") === 0)) {
1320
+ else if (metadata?.provider instanceof URLProvider && (window.location.hash.indexOf("#file=http") === 0)) {
1347
1321
  return window.location.hash; // leave it alone
1348
1322
  }
1349
1323
  else {
@@ -1352,7 +1326,6 @@ class CloudFileManagerClient {
1352
1326
  }
1353
1327
  _startPostMessageListener() {
1354
1328
  return $(window).on('message', e => {
1355
- var _a, _b;
1356
1329
  const oe = e.originalEvent;
1357
1330
  const data = oe.data || {};
1358
1331
  const reply = function (type, params) {
@@ -1362,7 +1335,7 @@ class CloudFileManagerClient {
1362
1335
  const message = _.merge({}, params, { type });
1363
1336
  return oe.source.postMessage(message, oe.origin);
1364
1337
  };
1365
- switch (data === null || data === void 0 ? void 0 : data.type) {
1338
+ switch (data?.type) {
1366
1339
  case 'cfm::getCommands':
1367
1340
  return reply('cfm::commands', { commands: ['cfm::autosave', 'cfm::event', 'cfm::event:reply', 'cfm::setDirty', 'cfm::iframedClientConnected'] });
1368
1341
  case 'cfm::autosave':
@@ -1379,13 +1352,13 @@ class CloudFileManagerClient {
1379
1352
  });
1380
1353
  case 'cfm::event:reply': {
1381
1354
  const event = CLOUDFILEMANAGER_EVENTS[data.eventId];
1382
- const callbackData = JSON.parse((data === null || data === void 0 ? void 0 : data.callbackArgs) || null);
1383
- return (_a = event === null || event === void 0 ? void 0 : event.callback) === null || _a === void 0 ? void 0 : _a.apply(this, callbackData);
1355
+ const callbackData = JSON.parse(data?.callbackArgs || null);
1356
+ return event?.callback?.apply(this, callbackData);
1384
1357
  }
1385
1358
  case 'cfm::setDirty':
1386
1359
  return this.dirty(data.isDirty);
1387
1360
  case 'cfm::iframedClientConnected':
1388
- (_b = this.connectedPromiseResolver) === null || _b === void 0 ? void 0 : _b.resolve();
1361
+ this.connectedPromiseResolver?.resolve();
1389
1362
  return this.processUrlParams();
1390
1363
  }
1391
1364
  });
@@ -1400,8 +1373,7 @@ class CloudFileManagerClient {
1400
1373
  });
1401
1374
  }
1402
1375
  _filterLoadedContent(content) {
1403
- var _a, _b;
1404
- return ((_b = (_a = this.appOptions).contentLoadFilter) === null || _b === void 0 ? void 0 : _b.call(_a, content)) || content;
1376
+ return this.appOptions.contentLoadFilter?.(content) || content;
1405
1377
  }
1406
1378
  }
1407
1379
  export { CloudFileManagerClientEvent, CloudFileManagerClient };