@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
@@ -105,6 +105,7 @@ export interface CFMAppOptions {
105
105
  appName?: string;
106
106
  appVersion?: string;
107
107
  appIcon?: string;
108
+ appFocusRingIcon?: string;
108
109
  appBuildNum?: string;
109
110
  appOrMenuElemId?: string;
110
111
  hideMenuBar?: boolean;
@@ -113,6 +114,7 @@ export interface CFMAppOptions {
113
114
  wrapFileContent?: boolean;
114
115
  isClientContent?: (content: unknown) => boolean;
115
116
  mimeType?: string;
117
+ localFileMimeType?: string;
116
118
  readableMimeTypes?: string[];
117
119
  extension?: string;
118
120
  readableExtensions?: string[];
@@ -113,7 +113,6 @@ class CloudFileManagerClient {
113
113
  });
114
114
  }
115
115
  setAppOptions(appOptions) {
116
- var _a, _b, _c, _d;
117
116
  let providerName;
118
117
  let Provider;
119
118
  if (appOptions == null) {
@@ -236,14 +235,14 @@ class CloudFileManagerClient {
236
235
  }
237
236
  // initialize the cloudContentFactory with all data we want in the envelope
238
237
  provider_interface_1.cloudContentFactory.setEnvelopeMetadata({
239
- cfmVersion: '2.1.0-pre.9', // replaced by version number at build time
238
+ cfmVersion: '2.2.1', // replaced by version number at build time
240
239
  appName: this.appOptions.appName || "",
241
240
  appVersion: this.appOptions.appVersion || "",
242
241
  appBuildNum: this.appOptions.appBuildNum || ""
243
242
  });
244
- this.newFileOpensInNewTab = (_b = (_a = this.appOptions.ui) === null || _a === void 0 ? void 0 : _a.newFileOpensInNewTab) !== null && _b !== void 0 ? _b : true;
245
- this.newFileAddsNewToQuery = (_c = this.appOptions.ui) === null || _c === void 0 ? void 0 : _c.newFileAddsNewToQuery;
246
- if ((_d = this.appOptions.ui) === null || _d === void 0 ? void 0 : _d.confirmCloseIfDirty) {
243
+ this.newFileOpensInNewTab = this.appOptions.ui?.newFileOpensInNewTab ?? true;
244
+ this.newFileAddsNewToQuery = this.appOptions.ui?.newFileAddsNewToQuery;
245
+ if (this.appOptions.ui?.confirmCloseIfDirty) {
247
246
  this._setupConfirmOnClose();
248
247
  }
249
248
  return this._startPostMessageListener();
@@ -260,8 +259,7 @@ class CloudFileManagerClient {
260
259
  }
261
260
  }
262
261
  connect() {
263
- var _a;
264
- (_a = this.connectedPromiseResolver) === null || _a === void 0 ? void 0 : _a.resolve();
262
+ this.connectedPromiseResolver?.resolve();
265
263
  return this._event('connected', { client: this });
266
264
  }
267
265
  //
@@ -273,7 +271,7 @@ class CloudFileManagerClient {
273
271
  //
274
272
  processUrlParams() {
275
273
  // process the hash params
276
- let providerName;
274
+ let providerName, providerParams, folder;
277
275
  const { hashParams } = this.appOptions;
278
276
  if (hashParams.sharedContentId) {
279
277
  return this.openSharedContent(hashParams.sharedContentId);
@@ -283,7 +281,6 @@ class CloudFileManagerClient {
283
281
  return this.openUrlFile(hashParams.fileParams);
284
282
  }
285
283
  else {
286
- let providerParams;
287
284
  [providerName, providerParams] = hashParams.fileParams.split(':');
288
285
  return this.openProviderFile(providerName, providerParams);
289
286
  }
@@ -292,7 +289,6 @@ class CloudFileManagerClient {
292
289
  return this.openCopiedFile(hashParams.copyParams);
293
290
  }
294
291
  else if (hashParams.newInFolderParams) {
295
- let folder;
296
292
  [providerName, folder] = hashParams.newInFolderParams.split(':');
297
293
  return this.createNewInFolder(providerName, folder);
298
294
  }
@@ -387,8 +383,7 @@ class CloudFileManagerClient {
387
383
  }
388
384
  }
389
385
  openFile(metadata, callback = null) {
390
- var _a;
391
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities.load, metadata)) {
386
+ if (metadata?.provider?.can(provider_interface_1.ECapabilities.load, metadata)) {
392
387
  this._event('willOpenFile', { op: "openFile" });
393
388
  return metadata.provider.load(metadata, (err, content) => {
394
389
  if (err) {
@@ -494,8 +489,7 @@ class CloudFileManagerClient {
494
489
  }
495
490
  // must be called as a result of user action (e.g. click) to avoid popup blockers
496
491
  parseUrlAuthorizeAndOpen() {
497
- var _a;
498
- if (((_a = this.appOptions.hashParams) === null || _a === void 0 ? void 0 : _a.fileParams) != null) {
492
+ if (this.appOptions.hashParams?.fileParams != null) {
499
493
  const [providerName, providerParams] = this.appOptions.hashParams.fileParams.split(':');
500
494
  const provider = this.providers[providerName];
501
495
  if (provider) {
@@ -619,8 +613,7 @@ class CloudFileManagerClient {
619
613
  });
620
614
  }
621
615
  saveContent(stringContent, callback = null) {
622
- var _a;
623
- const provider = ((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) || this.autoProvider(provider_interface_1.ECapabilities.save);
616
+ const provider = this.state.metadata?.provider || this.autoProvider(provider_interface_1.ECapabilities.save);
624
617
  if (provider != null) {
625
618
  return provider.authorized((isAuthorized) => {
626
619
  // we can save the document without authorization in some cases
@@ -637,9 +630,8 @@ class CloudFileManagerClient {
637
630
  }
638
631
  }
639
632
  saveFile(stringContent, metadata, callback = null) {
640
- var _a;
641
633
  const readonly = metadata && !metadata.overwritable; // only check if metadata exists
642
- const resaveable = (_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities.resave, metadata);
634
+ const resaveable = metadata?.provider?.can(provider_interface_1.ECapabilities.resave, metadata);
643
635
  // must be able to 'resave' to save silently, i.e. without save dialog
644
636
  if (!readonly && resaveable) {
645
637
  return this.saveFileNoDialog(stringContent, metadata, callback);
@@ -649,12 +641,11 @@ class CloudFileManagerClient {
649
641
  }
650
642
  }
651
643
  saveFileNoDialog(stringContent, metadata, callback = null) {
652
- var _a, _b;
653
644
  this._setState({
654
645
  saving: metadata
655
646
  });
656
647
  let currentContent = this._createOrUpdateCurrentContent(stringContent, metadata);
657
- currentContent = ((_b = (_a = this.appOptions).contentSaveFilter) === null || _b === void 0 ? void 0 : _b.call(_a, currentContent)) || currentContent;
648
+ currentContent = this.appOptions.contentSaveFilter?.(currentContent) || currentContent;
658
649
  return metadata.provider.save(currentContent, metadata, (err, statusCode, savedContent) => {
659
650
  let failures;
660
651
  if (err) {
@@ -717,8 +708,7 @@ class CloudFileManagerClient {
717
708
  }
718
709
  createCopy(stringContent = null, callback = null) {
719
710
  const saveAndOpenCopy = (stringContent) => {
720
- var _a;
721
- return this.saveCopiedFile(stringContent, (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name, (err, copyParams) => {
711
+ return this.saveCopiedFile(stringContent, this.state.metadata?.name, (err, copyParams) => {
722
712
  if (err) {
723
713
  return (typeof callback === 'function' ? callback(err) : undefined);
724
714
  }
@@ -745,7 +735,7 @@ class CloudFileManagerClient {
745
735
  }
746
736
  maxCopyNumber++;
747
737
  const value = JSON.stringify({
748
- name: (name === null || name === void 0 ? void 0 : name.length) ? `Copy of ${name}` : "Copy of Untitled Document",
738
+ name: name?.length ? `Copy of ${name}` : "Copy of Untitled Document",
749
739
  stringContent
750
740
  });
751
741
  window.localStorage.setItem(`${prefix}${maxCopyNumber}`, value);
@@ -802,11 +792,10 @@ class CloudFileManagerClient {
802
792
  }
803
793
  saveTempFile(callback) {
804
794
  return this._event('getContent', { shared: this._sharedMetadata() }, (stringContent) => {
805
- var _a;
806
795
  const currentContent = this._createOrUpdateCurrentContent(stringContent);
807
796
  try {
808
797
  const key = "cfm-tempfile";
809
- const name = (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name;
798
+ const name = this.state.metadata?.name;
810
799
  const value = JSON.stringify({ name, stringContent });
811
800
  window.localStorage.setItem(key, value);
812
801
  const metadata = new provider_interface_1.CloudMetadata({
@@ -814,10 +803,10 @@ class CloudFileManagerClient {
814
803
  type: provider_interface_1.CloudMetadata.File
815
804
  });
816
805
  this._fileChanged('savedFile', currentContent, metadata, { saved: true }, "");
817
- return callback === null || callback === void 0 ? void 0 : callback(null);
806
+ return callback?.(null);
818
807
  }
819
808
  catch (e) {
820
- return callback === null || callback === void 0 ? void 0 : callback("Unable to temporarily save copied file");
809
+ return callback?.("Unable to temporarily save copied file");
821
810
  }
822
811
  });
823
812
  }
@@ -840,8 +829,7 @@ class CloudFileManagerClient {
840
829
  }
841
830
  }
842
831
  _sharedMetadata() {
843
- var _a;
844
- return ((_a = this.state.currentContent) === null || _a === void 0 ? void 0 : _a.getSharedMetadata()) || {};
832
+ return this.state.currentContent?.getSharedMetadata() || {};
845
833
  }
846
834
  shareGetLink() {
847
835
  return this._ui.shareDialog(this);
@@ -858,8 +846,7 @@ class CloudFileManagerClient {
858
846
  }
859
847
  }
860
848
  isShared() {
861
- var _a;
862
- const currentContent = (_a = this.state) === null || _a === void 0 ? void 0 : _a.currentContent;
849
+ const currentContent = this.state?.currentContent;
863
850
  if (currentContent) {
864
851
  const unshared = currentContent.get("isUnshared");
865
852
  if (!unshared) {
@@ -901,7 +888,7 @@ class CloudFileManagerClient {
901
888
  if (err) {
902
889
  return this.alert(err);
903
890
  }
904
- return callback === null || callback === void 0 ? void 0 : callback(null, sharedContentId, currentContent);
891
+ return callback?.(null, sharedContentId, currentContent);
905
892
  });
906
893
  });
907
894
  }
@@ -918,21 +905,20 @@ class CloudFileManagerClient {
918
905
  }
919
906
  return this.setShareState(true, (err, sharedContentId, currentContent) => {
920
907
  this._fileChanged('sharedFile', currentContent, this.state.metadata);
921
- return callback === null || callback === void 0 ? void 0 : callback(null, sharedContentId);
908
+ return callback?.(null, sharedContentId);
922
909
  });
923
910
  }
924
911
  unshare(callback) {
925
912
  return this.setShareState(false, (err, sharedContentId, currentContent) => {
926
913
  this._fileChanged('unsharedFile', currentContent, this.state.metadata);
927
- return callback === null || callback === void 0 ? void 0 : callback(null);
914
+ return callback?.(null);
928
915
  });
929
916
  }
930
917
  revertToShared(callback = null) {
931
- var _a, _b, _c;
932
918
  // Look for sharedDocumentUrl or Url first:
933
- const id = ((_a = this.state.currentContent) === null || _a === void 0 ? void 0 : _a.get("sharedDocumentUrl"))
934
- || ((_b = this.state.currentContent) === null || _b === void 0 ? void 0 : _b.get("url"))
935
- || ((_c = this.state.currentContent) === null || _c === void 0 ? void 0 : _c.get("sharedDocumentId"));
919
+ const id = this.state.currentContent?.get("sharedDocumentUrl")
920
+ || this.state.currentContent?.get("url")
921
+ || this.state.currentContent?.get("sharedDocumentId");
936
922
  if (id && (this.state.shareProvider != null)) {
937
923
  return this.state.shareProvider.loadSharedContent(id, (err, content, metadata) => {
938
924
  let docName;
@@ -945,7 +931,7 @@ class CloudFileManagerClient {
945
931
  metadata.name = docName;
946
932
  }
947
933
  this._fileOpened(content, metadata, { dirty: true, openedContent: content.clone() });
948
- return callback === null || callback === void 0 ? void 0 : callback(null);
934
+ return callback?.(null);
949
935
  });
950
936
  }
951
937
  }
@@ -957,16 +943,14 @@ class CloudFileManagerClient {
957
943
  downloadDialog(callback = null) {
958
944
  // should share metadata be included in downloaded local files?
959
945
  return this._event('getContent', { shared: this._sharedMetadata() }, (content) => {
960
- var _a;
961
946
  const envelopedContent = provider_interface_1.cloudContentFactory.createEnvelopedCloudContent(content);
962
947
  if (this.state.currentContent != null) {
963
948
  this.state.currentContent.copyMetadataTo(envelopedContent);
964
949
  }
965
- return this._ui.downloadDialog((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.name, envelopedContent, callback);
950
+ return this._ui.downloadDialog(this.state.metadata?.name, envelopedContent, callback);
966
951
  });
967
952
  }
968
953
  getDownloadBlob(content, includeShareInfo, mimeType) {
969
- var _a;
970
954
  let contentToSave;
971
955
  if (mimeType == null) {
972
956
  mimeType = 'text/plain';
@@ -991,7 +975,7 @@ class CloudFileManagerClient {
991
975
  delete json.isUnshared;
992
976
  delete json.accessKeys;
993
977
  // CODAP moves the keys into its own namespace
994
- if (((_a = json.metadata) === null || _a === void 0 ? void 0 : _a.shared) != null) {
978
+ if (json.metadata?.shared != null) {
995
979
  delete json.metadata.shared;
996
980
  }
997
981
  contentToSave = JSON.stringify(json);
@@ -1008,17 +992,15 @@ class CloudFileManagerClient {
1008
992
  }
1009
993
  }
1010
994
  rename(metadata, newName, callback) {
1011
- var _a;
1012
995
  const { dirty } = this.state;
1013
996
  const _rename = (metadata) => {
1014
- var _a;
1015
997
  if (this.state.currentContent != null) {
1016
998
  this.state.currentContent.addMetadata({ docName: metadata.name });
1017
999
  }
1018
1000
  this._fileChanged('renamedFile', this.state.currentContent, metadata, { dirty }, this._getHashParams(metadata));
1019
1001
  const done = () => typeof callback === 'function' ? callback(newName) : undefined;
1020
- const readOnlyProvider = ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.name) === readonly_provider_1.default.Name;
1021
- if (!readOnlyProvider && ((metadata === null || metadata === void 0 ? void 0 : metadata.provider) || this.autoProvider(provider_interface_1.ECapabilities.save))) {
1002
+ const readOnlyProvider = metadata?.provider?.name === readonly_provider_1.default.Name;
1003
+ if (!readOnlyProvider && (metadata?.provider || this.autoProvider(provider_interface_1.ECapabilities.save))) {
1022
1004
  // autosave renamed file if it has already been saved or can be autosaved
1023
1005
  this.save(done);
1024
1006
  }
@@ -1027,7 +1009,7 @@ class CloudFileManagerClient {
1027
1009
  }
1028
1010
  };
1029
1011
  if (newName !== (this.state.metadata != null ? this.state.metadata.name : undefined)) {
1030
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities.rename, metadata)) {
1012
+ if (metadata?.provider?.can(provider_interface_1.ECapabilities.rename, metadata)) {
1031
1013
  return this.state.metadata.provider.rename(this.state.metadata, newName, (err, metadata) => {
1032
1014
  if (err) {
1033
1015
  return this.alert(err);
@@ -1096,10 +1078,9 @@ class CloudFileManagerClient {
1096
1078
  // Saves a file to backend, but does not update current metadata.
1097
1079
  // Used e.g. when exporting .csv files from CODAP
1098
1080
  saveSecondaryFile(stringContent, metadata, callback = null) {
1099
- var _a;
1100
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities["export"], metadata)) {
1081
+ if (metadata?.provider?.can(provider_interface_1.ECapabilities["export"], metadata)) {
1101
1082
  return metadata.provider.saveAsExport(stringContent, metadata, (err, statusCode) => {
1102
- return err ? this.alert(err) : callback === null || callback === void 0 ? void 0 : callback(stringContent, metadata);
1083
+ return err ? this.alert(err) : callback?.(stringContent, metadata);
1103
1084
  });
1104
1085
  }
1105
1086
  }
@@ -1114,12 +1095,11 @@ class CloudFileManagerClient {
1114
1095
  }
1115
1096
  }
1116
1097
  shouldAutoSave() {
1117
- var _a;
1118
1098
  const { metadata } = this.state;
1119
1099
  return (this.state.dirty
1120
- && !(metadata === null || metadata === void 0 ? void 0 : metadata.autoSaveDisabled)
1100
+ && !metadata?.autoSaveDisabled
1121
1101
  && !this.isSaveInProgress()
1122
- && ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities.resave, metadata)));
1102
+ && metadata?.provider?.can(provider_interface_1.ECapabilities.resave, metadata));
1123
1103
  }
1124
1104
  autoSave(interval) {
1125
1105
  if (this._autoSaveInterval) {
@@ -1139,7 +1119,6 @@ class CloudFileManagerClient {
1139
1119
  return (this._autoSaveInterval != null);
1140
1120
  }
1141
1121
  changeLanguage(newLangCode, callback) {
1142
- var _a, _b;
1143
1122
  (0, translate_1.setCurrentLanguage)(newLangCode);
1144
1123
  if (callback) {
1145
1124
  const postSave = (err) => {
@@ -1151,7 +1130,7 @@ class CloudFileManagerClient {
1151
1130
  return callback(newLangCode);
1152
1131
  }
1153
1132
  };
1154
- if ((_b = (_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) === null || _b === void 0 ? void 0 : _b.can(provider_interface_1.ECapabilities.save)) {
1133
+ if (this.state.metadata?.provider?.can(provider_interface_1.ECapabilities.save)) {
1155
1134
  return this.save((err) => postSave(err));
1156
1135
  }
1157
1136
  else {
@@ -1190,6 +1169,7 @@ class CloudFileManagerClient {
1190
1169
  return this.confirmDialog({ message, callback, rejectCallback });
1191
1170
  }
1192
1171
  confirmDialog(params) {
1172
+ this._event("requiresUserInteraction");
1193
1173
  return this._ui.confirmDialog(params);
1194
1174
  }
1195
1175
  alert(message, titleOrCallback, callback) {
@@ -1209,10 +1189,9 @@ class CloudFileManagerClient {
1209
1189
  async onUnload(options) {
1210
1190
  if (options.unloading) {
1211
1191
  return new Promise(resolve => {
1212
- var _a;
1213
1192
  // only save if the provider is set - when using linked interactives the provider is not set when
1214
1193
  // the linked interactive changed and the version choice dialog is showing
1215
- if ((_a = this.state.metadata) === null || _a === void 0 ? void 0 : _a.provider) {
1194
+ if (this.state.metadata?.provider) {
1216
1195
  this.save((content, metadata, savedContent) => {
1217
1196
  // providers can save a different format for the content
1218
1197
  // for example the interactiveApi provider can save attachments in which case the savedContent
@@ -1256,11 +1235,10 @@ class CloudFileManagerClient {
1256
1235
  return this._event(type, { content: (content != null ? content.getClientContent() : undefined), shared: this._sharedMetadata() });
1257
1236
  }
1258
1237
  _fileOpened(content, metadata, additionalState, hashParams = null) {
1259
- var _a, _b;
1260
1238
  if (additionalState == null) {
1261
1239
  additionalState = {};
1262
1240
  }
1263
- 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 };
1241
+ const eventData = { content: content?.getClientContent?.() ?? content };
1264
1242
  // update state before sending 'openedFile' events so that 'openedFile' listeners that
1265
1243
  // reference state have the updated state values
1266
1244
  this._updateState(content, metadata, additionalState, hashParams);
@@ -1286,17 +1264,16 @@ class CloudFileManagerClient {
1286
1264
  metadata,
1287
1265
  saving: null,
1288
1266
  saved: false,
1289
- dirty: !additionalState.saved && (content === null || content === void 0 ? void 0 : content.requiresConversion()),
1267
+ dirty: !additionalState.saved && content?.requiresConversion(),
1290
1268
  ...additionalState
1291
1269
  };
1292
- this._setWindowTitle(metadata === null || metadata === void 0 ? void 0 : metadata.name);
1270
+ this._setWindowTitle(metadata?.name);
1293
1271
  if (hashParams !== null) {
1294
1272
  window.location.hash = hashParams;
1295
1273
  }
1296
1274
  return this._setState(state);
1297
1275
  }
1298
1276
  _event(type, data, eventCallback = null) {
1299
- var _a;
1300
1277
  if (data == null) {
1301
1278
  data = {};
1302
1279
  }
@@ -1310,7 +1287,7 @@ class CloudFileManagerClient {
1310
1287
  // I tried sending the state but that causes CODAP to replace its state which breaks other things.
1311
1288
  // A permanent fix for this would be to send the new filename outside of the state metadata.
1312
1289
  const skipPostMessage = type === "renamedFile";
1313
- if (((_a = this.appOptions) === null || _a === void 0 ? void 0 : _a.sendPostMessageClientEvents) && this.iframe && !skipPostMessage) {
1290
+ if (this.appOptions?.sendPostMessageClientEvents && this.iframe && !skipPostMessage) {
1314
1291
  return event.postMessage(this.iframe.contentWindow);
1315
1292
  }
1316
1293
  }
@@ -1330,9 +1307,8 @@ class CloudFileManagerClient {
1330
1307
  });
1331
1308
  }
1332
1309
  _closeCurrentFile() {
1333
- var _a;
1334
1310
  const { metadata } = this.state;
1335
- if ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.can(provider_interface_1.ECapabilities.close, metadata)) {
1311
+ if (metadata?.provider?.can(provider_interface_1.ECapabilities.close, metadata)) {
1336
1312
  return metadata.provider.close(metadata);
1337
1313
  }
1338
1314
  }
@@ -1351,8 +1327,7 @@ class CloudFileManagerClient {
1351
1327
  return currentContent;
1352
1328
  }
1353
1329
  _setWindowTitle(name) {
1354
- var _a;
1355
- if ((_a = this.appOptions) === null || _a === void 0 ? void 0 : _a.appSetsWindowTitle) {
1330
+ if (this.appOptions?.appSetsWindowTitle) {
1356
1331
  return;
1357
1332
  }
1358
1333
  const { ui } = this.appOptions;
@@ -1367,13 +1342,12 @@ class CloudFileManagerClient {
1367
1342
  }
1368
1343
  }
1369
1344
  _getHashParams(metadata) {
1370
- var _a, _b;
1371
- const canOpenSaved = ((_a = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _a === void 0 ? void 0 : _a.canOpenSaved()) || false;
1372
- let openSavedParams = canOpenSaved ? (_b = metadata === null || metadata === void 0 ? void 0 : metadata.provider) === null || _b === void 0 ? void 0 : _b.getOpenSavedParams(metadata) : null;
1345
+ const canOpenSaved = metadata?.provider?.canOpenSaved() || false;
1346
+ let openSavedParams = canOpenSaved ? metadata?.provider?.getOpenSavedParams(metadata) : null;
1373
1347
  if (canOpenSaved && (openSavedParams != null) && (typeof openSavedParams === "string")) {
1374
1348
  return `#file=${metadata.provider.urlDisplayName || metadata.provider.name}:${encodeURIComponent(openSavedParams)}`;
1375
1349
  }
1376
- else if ((metadata === null || metadata === void 0 ? void 0 : metadata.provider) instanceof url_provider_1.default && (window.location.hash.indexOf("#file=http") === 0)) {
1350
+ else if (metadata?.provider instanceof url_provider_1.default && (window.location.hash.indexOf("#file=http") === 0)) {
1377
1351
  return window.location.hash; // leave it alone
1378
1352
  }
1379
1353
  else {
@@ -1382,7 +1356,6 @@ class CloudFileManagerClient {
1382
1356
  }
1383
1357
  _startPostMessageListener() {
1384
1358
  return (0, jquery_1.default)(window).on('message', e => {
1385
- var _a, _b;
1386
1359
  const oe = e.originalEvent;
1387
1360
  const data = oe.data || {};
1388
1361
  const reply = function (type, params) {
@@ -1392,7 +1365,7 @@ class CloudFileManagerClient {
1392
1365
  const message = lodash_1.default.merge({}, params, { type });
1393
1366
  return oe.source.postMessage(message, oe.origin);
1394
1367
  };
1395
- switch (data === null || data === void 0 ? void 0 : data.type) {
1368
+ switch (data?.type) {
1396
1369
  case 'cfm::getCommands':
1397
1370
  return reply('cfm::commands', { commands: ['cfm::autosave', 'cfm::event', 'cfm::event:reply', 'cfm::setDirty', 'cfm::iframedClientConnected'] });
1398
1371
  case 'cfm::autosave':
@@ -1409,13 +1382,13 @@ class CloudFileManagerClient {
1409
1382
  });
1410
1383
  case 'cfm::event:reply': {
1411
1384
  const event = CLOUDFILEMANAGER_EVENTS[data.eventId];
1412
- const callbackData = JSON.parse((data === null || data === void 0 ? void 0 : data.callbackArgs) || null);
1413
- return (_a = event === null || event === void 0 ? void 0 : event.callback) === null || _a === void 0 ? void 0 : _a.apply(this, callbackData);
1385
+ const callbackData = JSON.parse(data?.callbackArgs || null);
1386
+ return event?.callback?.apply(this, callbackData);
1414
1387
  }
1415
1388
  case 'cfm::setDirty':
1416
1389
  return this.dirty(data.isDirty);
1417
1390
  case 'cfm::iframedClientConnected':
1418
- (_b = this.connectedPromiseResolver) === null || _b === void 0 ? void 0 : _b.resolve();
1391
+ this.connectedPromiseResolver?.resolve();
1419
1392
  return this.processUrlParams();
1420
1393
  }
1421
1394
  });
@@ -1430,8 +1403,7 @@ class CloudFileManagerClient {
1430
1403
  });
1431
1404
  }
1432
1405
  _filterLoadedContent(content) {
1433
- var _a, _b;
1434
- return ((_b = (_a = this.appOptions).contentLoadFilter) === null || _b === void 0 ? void 0 : _b.call(_a, content)) || content;
1406
+ return this.appOptions.contentLoadFilter?.(content) || content;
1435
1407
  }
1436
1408
  }
1437
1409
  exports.CloudFileManagerClient = CloudFileManagerClient;