@inboxsdk/core 0.2.28-alpha.6 → 0.2.28

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 (669) hide show
  1. package/inboxsdk.js +28 -62
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +1 -5
  4. package/pageWorld.js.map +1 -1
  5. package/src/build/exec.d.ts +0 -1
  6. package/src/build/spawn.d.ts +0 -1
  7. package/src/common/ajax.d.ts +0 -1
  8. package/src/common/cachebust-url.d.ts +0 -1
  9. package/src/common/censorHTMLstring.d.ts +0 -1
  10. package/src/common/censorHTMLtree.d.ts +0 -1
  11. package/src/common/censorJSONTree.d.ts +0 -1
  12. package/src/common/connectivity-test.d.ts +0 -1
  13. package/src/common/defer.d.ts +0 -1
  14. package/src/common/find-parent.d.ts +0 -1
  15. package/src/common/get-extension-id.d.ts +0 -1
  16. package/src/common/get-or-fail.d.ts +0 -1
  17. package/src/common/get-session-id.d.ts +0 -1
  18. package/src/common/get-stack-trace.d.ts +0 -1
  19. package/src/common/html-to-text.d.ts +0 -1
  20. package/src/common/isElementVisible.d.ts +0 -1
  21. package/src/common/load-script.d.ts +0 -1
  22. package/src/common/log-error.d.ts +0 -1
  23. package/src/common/quoted-split.d.ts +0 -1
  24. package/src/common/rate-limit-queuer.d.ts +0 -1
  25. package/src/common/rate-limit.d.ts +0 -1
  26. package/src/common/version.d.ts +0 -1
  27. package/src/inboxsdk-js/check-requirements.js +3 -7
  28. package/src/inboxsdk-js/header.js +0 -1
  29. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +6 -5
  30. package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +3 -4
  31. package/src/inboxsdk-js/inboxsdk-REMOTE.js +1 -3
  32. package/src/inboxsdk-js/inboxsdk-TEST.js +3 -4
  33. package/src/inboxsdk-js/inboxsdk.js +39 -33
  34. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +18 -15
  35. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts +0 -1
  36. package/src/inboxsdk.d.ts +27 -12
  37. package/src/injected-js/gmail/constants.d.ts +0 -1
  38. package/src/injected-js/gmail/modify-suggestions.d.ts +0 -1
  39. package/src/injected-js/gmail/modify-suggestions.test.js +9 -8
  40. package/src/injected-js/gmail/setup-gmail-interceptor.js +579 -340
  41. package/src/injected-js/gmail/setup-gmonkey-handler.d.ts +0 -1
  42. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts +0 -1
  43. package/src/injected-js/gmail/sync-compose-processor.d.ts +0 -1
  44. package/src/injected-js/gmail/sync-compose-request-processor.d.ts +0 -1
  45. package/src/injected-js/gmail/sync-compose-request-processor.test.js +49 -39
  46. package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +33 -20
  47. package/src/injected-js/gmail/thread-identifier/index.js +93 -57
  48. package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +31 -22
  49. package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +28 -12
  50. package/src/injected-js/inbox/setupAjaxInterceptor.js +121 -64
  51. package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +66 -53
  52. package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +36 -20
  53. package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +13 -13
  54. package/src/injected-js/injected-logger.d.ts +0 -1
  55. package/src/injected-js/main.js +24 -11
  56. package/src/injected-js/message-metadata-holder.js +82 -52
  57. package/src/injected-js/setup-data-exposer.js +148 -89
  58. package/src/injected-js/setup-error-silencer.js +21 -21
  59. package/src/injected-js/setup-event-reemitter.js +22 -30
  60. package/src/injected-js/setupCustomViewEventAssassin.d.ts +0 -1
  61. package/src/injected-js/setupInboxCustomViewLinkFixer.js +29 -24
  62. package/src/injected-js/setupPushStateListener.js +11 -18
  63. package/src/injected-js/xhr-helper.js +65 -62
  64. package/src/injected-js/xhr-proxy-factory.js +445 -195
  65. package/src/injected-js/xhr-proxy-factory.test.js +991 -824
  66. package/src/platform-implementation-js/constants/nav-item-types.d.ts +0 -1
  67. package/src/platform-implementation-js/constants/router.js +9 -17
  68. package/src/platform-implementation-js/constants/toolbars.js +3 -8
  69. package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +13 -13
  70. package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +136 -115
  71. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.d.ts +2 -3
  72. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.d.ts +0 -1
  73. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +14 -13
  74. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +48 -27
  75. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.d.ts +0 -1
  76. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +42 -31
  77. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +40 -30
  78. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.d.ts +0 -1
  79. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.d.ts +0 -1
  80. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +18 -10
  81. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +28 -21
  82. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +45 -33
  83. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +49 -31
  84. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +65 -58
  85. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts +0 -1
  86. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +124 -40
  87. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +22 -17
  88. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.d.ts +0 -1
  89. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +11 -10
  90. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +80 -44
  91. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +26 -19
  92. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +147 -71
  93. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +148 -91
  94. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +166 -150
  95. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +120 -70
  96. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +15 -15
  97. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +67 -44
  98. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +379 -230
  99. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +307 -121
  100. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +24 -17
  101. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +49 -41
  102. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +40 -30
  103. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +60 -28
  104. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +133 -61
  105. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.js +110 -83
  106. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +42 -30
  107. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +46 -52
  108. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts +3 -13
  109. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +683 -355
  110. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.d.ts +0 -1
  111. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.d.ts +0 -1
  112. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts +0 -4
  113. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.d.ts +0 -1
  114. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.d.ts +0 -1
  115. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.d.ts +0 -1
  116. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.d.ts +0 -1
  117. package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +93 -77
  118. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.d.ts +0 -1
  119. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.d.ts +0 -1
  120. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +82 -35
  121. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +94 -44
  122. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +19 -12
  123. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +29 -17
  124. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +26 -26
  125. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +797 -391
  126. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +9 -7
  127. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +109 -60
  128. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +135 -95
  129. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +211 -103
  130. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +61 -61
  131. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +17 -17
  132. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +541 -188
  133. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +135 -67
  134. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +49 -27
  135. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +13 -7
  136. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +22 -9
  137. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +63 -36
  138. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.d.ts +0 -1
  139. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +113 -38
  140. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.d.ts +0 -1
  141. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +16 -11
  142. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +17 -11
  143. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +11 -8
  144. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +47 -27
  145. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +24 -11
  146. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +111 -59
  147. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts +0 -1
  148. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +14 -15
  149. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +17 -11
  150. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +24 -18
  151. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts +0 -1
  152. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +23 -19
  153. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.d.ts +0 -1
  154. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +19 -11
  155. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +376 -141
  156. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +28 -17
  157. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +70 -34
  158. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.d.ts +0 -1
  159. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +17 -10
  160. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.d.ts +0 -1
  161. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.d.ts +0 -1
  162. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +137 -83
  163. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +19 -10
  164. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +1190 -632
  165. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts +0 -1
  166. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +38 -29
  167. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +617 -327
  168. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts +1 -34
  169. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +48 -29
  170. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +380 -188
  171. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +194 -104
  172. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.d.ts +0 -1
  173. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +811 -382
  174. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +58 -34
  175. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +581 -330
  176. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +277 -123
  177. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +35 -15
  178. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +571 -216
  179. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +336 -152
  180. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +211 -87
  181. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.d.ts +0 -1
  182. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.d.ts +0 -1
  183. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts +0 -1
  184. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts +0 -1
  185. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +11 -10
  186. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts +0 -1
  187. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.d.ts +0 -1
  188. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.d.ts +0 -1
  189. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +29 -20
  190. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.d.ts +0 -1
  191. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +76 -41
  192. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +99 -45
  193. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +128 -76
  194. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +319 -128
  195. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +78 -45
  196. package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +4 -8
  197. package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +54 -36
  198. package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +53 -35
  199. package/src/platform-implementation-js/dom-driver/inbox/createLink.js +15 -13
  200. package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +18 -15
  201. package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +13 -14
  202. package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +20 -14
  203. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +13 -14
  204. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +67 -35
  205. package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +18 -16
  206. package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +185 -68
  207. package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +56 -28
  208. package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +10 -12
  209. package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +16 -16
  210. package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +35 -24
  211. package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +89 -37
  212. package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +78 -56
  213. package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +32 -26
  214. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +109 -52
  215. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +8 -7
  216. package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +20 -16
  217. package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +16 -15
  218. package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +83 -75
  219. package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +823 -531
  220. package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +61 -48
  221. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +12 -9
  222. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +19 -12
  223. package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +33 -24
  224. package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +388 -201
  225. package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +265 -249
  226. package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +152 -84
  227. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +67 -55
  228. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +65 -43
  229. package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +56 -31
  230. package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +294 -191
  231. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +45 -32
  232. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +39 -21
  233. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +240 -153
  234. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +150 -75
  235. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +37 -20
  236. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +114 -60
  237. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +65 -47
  238. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +52 -41
  239. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +36 -27
  240. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +80 -52
  241. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +649 -465
  242. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +58 -37
  243. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +26 -14
  244. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +235 -118
  245. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +11 -10
  246. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +46 -28
  247. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +202 -131
  248. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +80 -40
  249. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +61 -35
  250. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +221 -124
  251. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +213 -125
  252. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +126 -104
  253. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +51 -36
  254. package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +297 -158
  255. package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +35 -21
  256. package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +43 -24
  257. package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +68 -39
  258. package/src/platform-implementation-js/driver-common/getAccountUrlPart.d.ts +0 -1
  259. package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +19 -14
  260. package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +35 -27
  261. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.d.ts +0 -1
  262. package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +22 -16
  263. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.d.ts +0 -1
  264. package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +14 -14
  265. package/src/platform-implementation-js/driver-common/gmailAjax.d.ts +0 -1
  266. package/src/platform-implementation-js/driver-common/inboxAjax.js +7 -12
  267. package/src/platform-implementation-js/driver-common/render-custom-icon.d.ts +0 -1
  268. package/src/platform-implementation-js/driver-common/requestGmailThread.js +20 -19
  269. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +306 -197
  270. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +161 -113
  271. package/src/platform-implementation-js/driver-common/update-icon.d.ts +0 -1
  272. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +114 -1
  273. package/src/platform-implementation-js/driver-interfaces/driver.d.ts +0 -5
  274. package/src/platform-implementation-js/driver-interfaces/driver.js +126 -1
  275. package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +48 -4
  276. package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +29 -1
  277. package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +32 -1
  278. package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +11 -1
  279. package/src/platform-implementation-js/lib/ErrorCollector.d.ts +0 -1
  280. package/src/platform-implementation-js/lib/Membrane.d.ts +0 -1
  281. package/src/platform-implementation-js/lib/ScrollableContainByScreen.d.ts +0 -1
  282. package/src/platform-implementation-js/lib/array-to-lifetimes.js +41 -43
  283. package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +155 -139
  284. package/src/platform-implementation-js/lib/attemptWithRetries.d.ts +0 -1
  285. package/src/platform-implementation-js/lib/common-page-communicator.d.ts +0 -1
  286. package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +38 -19
  287. package/src/platform-implementation-js/lib/css-selector-escape.js +3 -7
  288. package/src/platform-implementation-js/lib/delay-asap.d.ts +0 -1
  289. package/src/platform-implementation-js/lib/delay-idle.d.ts +0 -1
  290. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.d.ts +0 -1
  291. package/src/platform-implementation-js/lib/dom/element-view-mapper.js +11 -8
  292. package/src/platform-implementation-js/lib/dom/generic-button-view.d.ts +0 -1
  293. package/src/platform-implementation-js/lib/dom/get-insert-before-element.d.ts +0 -1
  294. package/src/platform-implementation-js/lib/dom/get-selection.js +52 -23
  295. package/src/platform-implementation-js/lib/dom/insert-element-in-order.d.ts +0 -1
  296. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +101 -69
  297. package/src/platform-implementation-js/lib/dom/is-node-in-range.js +10 -8
  298. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.d.ts +0 -1
  299. package/src/platform-implementation-js/lib/dom/make-element-child-stream.d.ts +0 -1
  300. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.d.ts +0 -1
  301. package/src/platform-implementation-js/lib/dom/make-element-view-stream.d.ts +0 -1
  302. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.d.ts +0 -1
  303. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.d.ts +0 -1
  304. package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +17 -15
  305. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.d.ts +0 -1
  306. package/src/platform-implementation-js/lib/dom/parentNodes.d.ts +0 -1
  307. package/src/platform-implementation-js/lib/dom/querySelectorOne.js +11 -8
  308. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.d.ts +0 -1
  309. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.d.ts +0 -1
  310. package/src/platform-implementation-js/lib/dom/set-css.js +3 -7
  311. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +11 -9
  312. package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +33 -32
  313. package/src/platform-implementation-js/lib/dom/simulate-key.d.ts +0 -1
  314. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.d.ts +0 -1
  315. package/src/platform-implementation-js/lib/dom/trigger-relay-event.d.ts +0 -1
  316. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts +0 -1
  317. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +26 -23
  318. package/src/platform-implementation-js/lib/fake-window-resize.d.ts +0 -1
  319. package/src/platform-implementation-js/lib/from-event-target-capture.d.ts +0 -1
  320. package/src/platform-implementation-js/lib/fromEventsWithOptions.d.ts +0 -1
  321. package/src/platform-implementation-js/lib/handle-compose-link-chips.js +149 -86
  322. package/src/platform-implementation-js/lib/handler-registry.d.ts +0 -1
  323. package/src/platform-implementation-js/lib/idMap.d.ts +0 -1
  324. package/src/platform-implementation-js/lib/imageRequest.d.ts +0 -1
  325. package/src/platform-implementation-js/lib/incrementName.d.ts +0 -1
  326. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts +0 -1
  327. package/src/platform-implementation-js/lib/inject-script.d.ts +0 -1
  328. package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +57 -42
  329. package/src/platform-implementation-js/lib/is-valid-app-id.d.ts +0 -1
  330. package/src/platform-implementation-js/lib/is-valid-email.d.ts +0 -1
  331. package/src/platform-implementation-js/lib/isNotNil.d.ts +0 -1
  332. package/src/platform-implementation-js/lib/isStreakAppId.d.ts +0 -1
  333. package/src/platform-implementation-js/lib/logger.d.ts +0 -1
  334. package/src/platform-implementation-js/lib/make-revocable-function.js +21 -19
  335. package/src/platform-implementation-js/lib/make-revocable-function.test.js +22 -20
  336. package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +17 -15
  337. package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +18 -9
  338. package/src/platform-implementation-js/lib/persistent-queue.d.ts +0 -1
  339. package/src/platform-implementation-js/lib/populateRouteID.js +9 -8
  340. package/src/platform-implementation-js/lib/populateRouteID.test.js +19 -20
  341. package/src/platform-implementation-js/lib/react/ElementContainer.js +20 -23
  342. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +9 -10
  343. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +20 -13
  344. package/src/platform-implementation-js/lib/routeIDmatchesHash.js +18 -13
  345. package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +17 -11
  346. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts +0 -1
  347. package/src/platform-implementation-js/lib/shared-style.js +13 -14
  348. package/src/platform-implementation-js/lib/stopper-pool.d.ts +0 -1
  349. package/src/platform-implementation-js/lib/stream-wait-for.d.ts +0 -1
  350. package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +17 -18
  351. package/src/platform-implementation-js/lib/toLiveSet.js +15 -17
  352. package/src/platform-implementation-js/lib/wait-for.d.ts +1 -2
  353. package/src/platform-implementation-js/lib/waitForAsync.d.ts +0 -1
  354. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +5 -6
  355. package/src/platform-implementation-js/main.js +24 -9
  356. package/src/platform-implementation-js/namespaces/butter-bar.d.ts +0 -1
  357. package/src/platform-implementation-js/namespaces/compose.js +60 -37
  358. package/src/platform-implementation-js/namespaces/conversations.js +124 -52
  359. package/src/platform-implementation-js/namespaces/global.js +39 -27
  360. package/src/platform-implementation-js/namespaces/keyboard.js +33 -29
  361. package/src/platform-implementation-js/namespaces/lists.js +31 -25
  362. package/src/platform-implementation-js/namespaces/modal.js +28 -34
  363. package/src/platform-implementation-js/namespaces/nav-menu.js +45 -30
  364. package/src/platform-implementation-js/namespaces/router.js +137 -70
  365. package/src/platform-implementation-js/namespaces/search.js +17 -19
  366. package/src/platform-implementation-js/namespaces/toolbars.js +117 -71
  367. package/src/platform-implementation-js/namespaces/user.js +37 -36
  368. package/src/platform-implementation-js/namespaces/widgets.js +61 -54
  369. package/src/platform-implementation-js/platform-implementation.d.ts +0 -2
  370. package/src/platform-implementation-js/platform-implementation.js +226 -98
  371. package/src/platform-implementation-js/views/SimpleElementView.d.ts +0 -1
  372. package/src/platform-implementation-js/views/app-toolbar-button-view.js +47 -26
  373. package/src/platform-implementation-js/views/collapsible-section-view.js +63 -66
  374. package/src/platform-implementation-js/views/compose-button-view.d.ts +0 -1
  375. package/src/platform-implementation-js/views/compose-view.d.ts +0 -1
  376. package/src/platform-implementation-js/views/content-panel-view.js +30 -28
  377. package/src/platform-implementation-js/views/conversations/attachment-card-view.js +44 -21
  378. package/src/platform-implementation-js/views/conversations/custom-message-view.js +104 -44
  379. package/src/platform-implementation-js/views/conversations/message-view.js +202 -131
  380. package/src/platform-implementation-js/views/conversations/thread-view.js +127 -75
  381. package/src/platform-implementation-js/views/keyboard-shortcut-handle.d.ts +0 -1
  382. package/src/platform-implementation-js/views/native-nav-item-view.js +65 -32
  383. package/src/platform-implementation-js/views/nav-item-view.js +115 -51
  384. package/src/platform-implementation-js/views/route-view/custom-route-view.js +20 -25
  385. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +18 -18
  386. package/src/platform-implementation-js/views/route-view/list-route-view.js +52 -30
  387. package/src/platform-implementation-js/views/route-view/route-view.js +35 -24
  388. package/src/platform-implementation-js/views/section-view.js +52 -60
  389. package/src/platform-implementation-js/views/thread-row-view.js +74 -49
  390. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts +0 -1
  391. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.d.ts +0 -1
  392. package/src/platform-implementation-js/widgets/buttons/dropdown-view.d.ts +0 -1
  393. package/src/platform-implementation-js/widgets/drawer-view.js +36 -29
  394. package/src/platform-implementation-js/widgets/modal-view.js +68 -39
  395. package/src/platform-implementation-js/widgets/mole-view.js +22 -22
  396. package/src/platform-implementation-js/widgets/top-message-bar-view.js +10 -13
  397. package/src/build/exec.d.ts.map +0 -1
  398. package/src/build/exec.js +0 -26
  399. package/src/build/spawn.d.ts.map +0 -1
  400. package/src/build/spawn.js +0 -17
  401. package/src/common/ajax.d.ts.map +0 -1
  402. package/src/common/ajax.js +0 -90
  403. package/src/common/cachebust-url.d.ts.map +0 -1
  404. package/src/common/cachebust-url.js +0 -10
  405. package/src/common/censorHTMLstring.d.ts.map +0 -1
  406. package/src/common/censorHTMLstring.js +0 -37
  407. package/src/common/censorHTMLtree.d.ts.map +0 -1
  408. package/src/common/censorHTMLtree.js +0 -28
  409. package/src/common/censorJSONTree.d.ts.map +0 -1
  410. package/src/common/censorJSONTree.js +0 -15
  411. package/src/common/connectivity-test.d.ts.map +0 -1
  412. package/src/common/connectivity-test.js +0 -21
  413. package/src/common/defer.d.ts.map +0 -1
  414. package/src/common/defer.js +0 -11
  415. package/src/common/find-parent.d.ts.map +0 -1
  416. package/src/common/find-parent.js +0 -10
  417. package/src/common/get-extension-id.d.ts.map +0 -1
  418. package/src/common/get-extension-id.js +0 -7
  419. package/src/common/get-or-fail.d.ts.map +0 -1
  420. package/src/common/get-or-fail.js +0 -8
  421. package/src/common/get-session-id.d.ts.map +0 -1
  422. package/src/common/get-session-id.js +0 -14
  423. package/src/common/get-stack-trace.d.ts.map +0 -1
  424. package/src/common/get-stack-trace.js +0 -6
  425. package/src/common/html-to-text.d.ts.map +0 -1
  426. package/src/common/html-to-text.js +0 -7
  427. package/src/common/isElementVisible.d.ts.map +0 -1
  428. package/src/common/isElementVisible.js +0 -6
  429. package/src/common/load-script.d.ts.map +0 -1
  430. package/src/common/load-script.js +0 -127
  431. package/src/common/log-error.d.ts.map +0 -1
  432. package/src/common/log-error.js +0 -191
  433. package/src/common/quoted-split.d.ts.map +0 -1
  434. package/src/common/quoted-split.js +0 -18
  435. package/src/common/rate-limit-queuer.d.ts.map +0 -1
  436. package/src/common/rate-limit-queuer.js +0 -57
  437. package/src/common/rate-limit.d.ts.map +0 -1
  438. package/src/common/rate-limit.js +0 -14
  439. package/src/common/version.d.ts.map +0 -1
  440. package/src/common/version.js +0 -6
  441. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts.map +0 -1
  442. package/src/inboxsdk-js/loading/platform-implementation-loader.js +0 -27
  443. package/src/injected-js/gmail/constants.d.ts.map +0 -1
  444. package/src/injected-js/gmail/constants.js +0 -2
  445. package/src/injected-js/gmail/modify-suggestions.d.ts.map +0 -1
  446. package/src/injected-js/gmail/modify-suggestions.js +0 -106
  447. package/src/injected-js/gmail/setup-gmonkey-handler.d.ts.map +0 -1
  448. package/src/injected-js/gmail/setup-gmonkey-handler.js +0 -49
  449. package/src/injected-js/gmail/sync-compose-processor-20220909.d.ts.map +0 -1
  450. package/src/injected-js/gmail/sync-compose-processor-20220909.js +0 -298
  451. package/src/injected-js/gmail/sync-compose-processor.d.ts.map +0 -1
  452. package/src/injected-js/gmail/sync-compose-processor.js +0 -55
  453. package/src/injected-js/gmail/sync-compose-request-processor.d.ts.map +0 -1
  454. package/src/injected-js/gmail/sync-compose-request-processor.js +0 -110
  455. package/src/injected-js/injected-logger.d.ts.map +0 -1
  456. package/src/injected-js/injected-logger.js +0 -50
  457. package/src/injected-js/setupCustomViewEventAssassin.d.ts.map +0 -1
  458. package/src/injected-js/setupCustomViewEventAssassin.js +0 -90
  459. package/src/platform-implementation-js/constants/nav-item-types.d.ts.map +0 -1
  460. package/src/platform-implementation-js/constants/nav-item-types.js +0 -19
  461. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts +0 -5
  462. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.d.ts.map +0 -1
  463. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-app-menu-item.js +0 -21
  464. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts +0 -5
  465. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.d.ts.map +0 -1
  466. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-collapsible-panel.js +0 -28
  467. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.d.ts.map +0 -1
  468. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-nav-item.js +0 -98
  469. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.d.ts.map +0 -1
  470. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-support-item.js +0 -4
  471. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.d.ts.map +0 -1
  472. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/encodeDraftUrlId.js +0 -8
  473. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.d.ts.map +0 -1
  474. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-message-id.js +0 -12
  475. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.d.ts.map +0 -1
  476. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-rfc-message-id-for-gmail-thread-id.js +0 -33
  477. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.d.ts.map +0 -1
  478. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/isIntegratedViewGmail.js +0 -4
  479. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.d.ts.map +0 -1
  480. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.js +0 -44
  481. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts +0 -2
  482. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-gmail-styles.d.ts.map +0 -1
  483. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.d.ts.map +0 -1
  484. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/get-main-content-element-changed-stream.js +0 -38
  485. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.d.ts.map +0 -1
  486. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter/wait-for-gmail-mode-to-settle.js +0 -12
  487. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts.map +0 -1
  488. package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.js +0 -253
  489. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.d.ts.map +0 -1
  490. package/src/platform-implementation-js/dom-driver/gmail/gmail-page-communicator.js +0 -200
  491. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.d.ts.map +0 -1
  492. package/src/platform-implementation-js/dom-driver/gmail/gmail-response-processor.js +0 -533
  493. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.d.ts.map +0 -1
  494. package/src/platform-implementation-js/dom-driver/gmail/gmail-sync-response-processor.js +0 -289
  495. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.d.ts.map +0 -1
  496. package/src/platform-implementation-js/dom-driver/gmail/is-compose-titlebar-light-color.js +0 -21
  497. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.d.ts.map +0 -1
  498. package/src/platform-implementation-js/dom-driver/gmail/makePageParserTree.js +0 -28
  499. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.d.ts.map +0 -1
  500. package/src/platform-implementation-js/dom-driver/gmail/pageParserOptions.js +0 -19
  501. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts +0 -43
  502. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts.map +0 -1
  503. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.js +0 -126
  504. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.d.ts.map +0 -1
  505. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-status-bar.js +0 -101
  506. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.d.ts.map +0 -1
  507. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/detectClassicRecipientsArea.js +0 -38
  508. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.d.ts.map +0 -1
  509. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-information-extractor.js +0 -28
  510. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.d.ts.map +0 -1
  511. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-recipients.js +0 -22
  512. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.d.ts.map +0 -1
  513. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/gmail-compose-button-view.js +0 -233
  514. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.d.ts.map +0 -1
  515. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/page-parser.js +0 -223
  516. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.d.ts.map +0 -1
  517. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/set-recipients.js +0 -157
  518. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.d.ts.map +0 -1
  519. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/setupLinkPopovers.js +0 -109
  520. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.d.ts.map +0 -1
  521. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/attachment-icon.js +0 -5
  522. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.d.ts.map +0 -1
  523. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-nav-item-view.js +0 -759
  524. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.d.ts.map +0 -1
  525. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-support-item-view.js +0 -84
  526. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.d.ts.map +0 -1
  527. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-color-classes.js +0 -33
  528. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.d.ts.map +0 -1
  529. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/button-view.js +0 -325
  530. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts.map +0 -1
  531. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.js +0 -58
  532. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts.map +0 -1
  533. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.js +0 -55
  534. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts.map +0 -1
  535. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.js +0 -96
  536. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.d.ts.map +0 -1
  537. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-dropdown-button-view.js +0 -30
  538. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.d.ts.map +0 -1
  539. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/more-parent-accessory-button-view.js +0 -10
  540. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.d.ts.map +0 -1
  541. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-dropdown-view.js +0 -22
  542. package/src/platform-implementation-js/driver-common/getAccountUrlPart.d.ts.map +0 -1
  543. package/src/platform-implementation-js/driver-common/getAccountUrlPart.js +0 -17
  544. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.d.ts.map +0 -1
  545. package/src/platform-implementation-js/driver-common/getOriginalMessagePage.js +0 -33
  546. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.d.ts.map +0 -1
  547. package/src/platform-implementation-js/driver-common/getSyncThreadsForSearch.js +0 -49
  548. package/src/platform-implementation-js/driver-common/gmailAjax.d.ts.map +0 -1
  549. package/src/platform-implementation-js/driver-common/gmailAjax.js +0 -65
  550. package/src/platform-implementation-js/driver-common/render-custom-icon.d.ts.map +0 -1
  551. package/src/platform-implementation-js/driver-common/render-custom-icon.js +0 -16
  552. package/src/platform-implementation-js/driver-common/update-icon.d.ts.map +0 -1
  553. package/src/platform-implementation-js/driver-common/update-icon.js +0 -90
  554. package/src/platform-implementation-js/lib/ErrorCollector.d.ts.map +0 -1
  555. package/src/platform-implementation-js/lib/ErrorCollector.js +0 -47
  556. package/src/platform-implementation-js/lib/Membrane.d.ts.map +0 -1
  557. package/src/platform-implementation-js/lib/Membrane.js +0 -22
  558. package/src/platform-implementation-js/lib/ScrollableContainByScreen.d.ts.map +0 -1
  559. package/src/platform-implementation-js/lib/ScrollableContainByScreen.js +0 -30
  560. package/src/platform-implementation-js/lib/attemptWithRetries.d.ts.map +0 -1
  561. package/src/platform-implementation-js/lib/attemptWithRetries.js +0 -16
  562. package/src/platform-implementation-js/lib/common-page-communicator.d.ts.map +0 -1
  563. package/src/platform-implementation-js/lib/common-page-communicator.js +0 -137
  564. package/src/platform-implementation-js/lib/delay-asap.d.ts.map +0 -1
  565. package/src/platform-implementation-js/lib/delay-asap.js +0 -12
  566. package/src/platform-implementation-js/lib/delay-idle.d.ts.map +0 -1
  567. package/src/platform-implementation-js/lib/delay-idle.js +0 -16
  568. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.d.ts.map +0 -1
  569. package/src/platform-implementation-js/lib/dom/block-and-reemit-keyboard-events.js +0 -36
  570. package/src/platform-implementation-js/lib/dom/generic-button-view.d.ts.map +0 -1
  571. package/src/platform-implementation-js/lib/dom/generic-button-view.js +0 -39
  572. package/src/platform-implementation-js/lib/dom/get-insert-before-element.d.ts.map +0 -1
  573. package/src/platform-implementation-js/lib/dom/get-insert-before-element.js +0 -39
  574. package/src/platform-implementation-js/lib/dom/insert-element-in-order.d.ts.map +0 -1
  575. package/src/platform-implementation-js/lib/dom/insert-element-in-order.js +0 -38
  576. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.d.ts.map +0 -1
  577. package/src/platform-implementation-js/lib/dom/keyboard-shortcut-stream.js +0 -12
  578. package/src/platform-implementation-js/lib/dom/make-element-child-stream.d.ts.map +0 -1
  579. package/src/platform-implementation-js/lib/dom/make-element-child-stream.js +0 -79
  580. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.d.ts.map +0 -1
  581. package/src/platform-implementation-js/lib/dom/make-element-stream-merger.js +0 -28
  582. package/src/platform-implementation-js/lib/dom/make-element-view-stream.d.ts.map +0 -1
  583. package/src/platform-implementation-js/lib/dom/make-element-view-stream.js +0 -15
  584. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.d.ts.map +0 -1
  585. package/src/platform-implementation-js/lib/dom/make-mutation-observer-chunked-stream.js +0 -15
  586. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.d.ts.map +0 -1
  587. package/src/platform-implementation-js/lib/dom/make-mutation-observer-stream.js +0 -5
  588. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.d.ts.map +0 -1
  589. package/src/platform-implementation-js/lib/dom/outsideClicksAndEscape.js +0 -39
  590. package/src/platform-implementation-js/lib/dom/parentNodes.d.ts.map +0 -1
  591. package/src/platform-implementation-js/lib/dom/parentNodes.js +0 -8
  592. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.d.ts.map +0 -1
  593. package/src/platform-implementation-js/lib/dom/querySelectorOrFail.js +0 -6
  594. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.d.ts.map +0 -1
  595. package/src/platform-implementation-js/lib/dom/reemitClickEventForReact.js +0 -22
  596. package/src/platform-implementation-js/lib/dom/simulate-key.d.ts.map +0 -1
  597. package/src/platform-implementation-js/lib/dom/simulate-key.js +0 -46
  598. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.d.ts.map +0 -1
  599. package/src/platform-implementation-js/lib/dom/simulate-mouse-event.js +0 -16
  600. package/src/platform-implementation-js/lib/dom/trigger-relay-event.d.ts.map +0 -1
  601. package/src/platform-implementation-js/lib/dom/trigger-relay-event.js +0 -7
  602. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.d.ts.map +0 -1
  603. package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.js +0 -25
  604. package/src/platform-implementation-js/lib/fake-window-resize.d.ts.map +0 -1
  605. package/src/platform-implementation-js/lib/fake-window-resize.js +0 -5
  606. package/src/platform-implementation-js/lib/from-event-target-capture.d.ts.map +0 -1
  607. package/src/platform-implementation-js/lib/from-event-target-capture.js +0 -12
  608. package/src/platform-implementation-js/lib/fromEventsWithOptions.d.ts.map +0 -1
  609. package/src/platform-implementation-js/lib/fromEventsWithOptions.js +0 -10
  610. package/src/platform-implementation-js/lib/handler-registry.d.ts.map +0 -1
  611. package/src/platform-implementation-js/lib/handler-registry.js +0 -67
  612. package/src/platform-implementation-js/lib/idMap.d.ts.map +0 -1
  613. package/src/platform-implementation-js/lib/idMap.js +0 -45
  614. package/src/platform-implementation-js/lib/imageRequest.d.ts.map +0 -1
  615. package/src/platform-implementation-js/lib/imageRequest.js +0 -8
  616. package/src/platform-implementation-js/lib/incrementName.d.ts.map +0 -1
  617. package/src/platform-implementation-js/lib/incrementName.js +0 -7
  618. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts.map +0 -1
  619. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.js +0 -14
  620. package/src/platform-implementation-js/lib/inject-script.d.ts.map +0 -1
  621. package/src/platform-implementation-js/lib/inject-script.js +0 -33
  622. package/src/platform-implementation-js/lib/is-valid-app-id.d.ts.map +0 -1
  623. package/src/platform-implementation-js/lib/is-valid-app-id.js +0 -27
  624. package/src/platform-implementation-js/lib/is-valid-email.d.ts.map +0 -1
  625. package/src/platform-implementation-js/lib/is-valid-email.js +0 -14
  626. package/src/platform-implementation-js/lib/isNotNil.d.ts.map +0 -1
  627. package/src/platform-implementation-js/lib/isNotNil.js +0 -5
  628. package/src/platform-implementation-js/lib/isStreakAppId.d.ts.map +0 -1
  629. package/src/platform-implementation-js/lib/isStreakAppId.js +0 -11
  630. package/src/platform-implementation-js/lib/logger.d.ts.map +0 -1
  631. package/src/platform-implementation-js/lib/logger.js +0 -441
  632. package/src/platform-implementation-js/lib/persistent-queue.d.ts.map +0 -1
  633. package/src/platform-implementation-js/lib/persistent-queue.js +0 -107
  634. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts.map +0 -1
  635. package/src/platform-implementation-js/lib/safe-event-emitter.js +0 -17
  636. package/src/platform-implementation-js/lib/stopper-pool.d.ts.map +0 -1
  637. package/src/platform-implementation-js/lib/stopper-pool.js +0 -41
  638. package/src/platform-implementation-js/lib/stream-wait-for.d.ts.map +0 -1
  639. package/src/platform-implementation-js/lib/stream-wait-for.js +0 -30
  640. package/src/platform-implementation-js/lib/wait-for.d.ts.map +0 -1
  641. package/src/platform-implementation-js/lib/wait-for.js +0 -28
  642. package/src/platform-implementation-js/lib/waitForAsync.d.ts.map +0 -1
  643. package/src/platform-implementation-js/lib/waitForAsync.js +0 -19
  644. package/src/platform-implementation-js/namespaces/app-menu.d.ts +0 -38
  645. package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +0 -1
  646. package/src/platform-implementation-js/namespaces/app-menu.js +0 -31
  647. package/src/platform-implementation-js/namespaces/butter-bar.d.ts.map +0 -1
  648. package/src/platform-implementation-js/namespaces/butter-bar.js +0 -163
  649. package/src/platform-implementation-js/views/SimpleElementView.d.ts.map +0 -1
  650. package/src/platform-implementation-js/views/SimpleElementView.js +0 -16
  651. package/src/platform-implementation-js/views/app-menu-item-view.d.ts +0 -23
  652. package/src/platform-implementation-js/views/app-menu-item-view.d.ts.map +0 -1
  653. package/src/platform-implementation-js/views/app-menu-item-view.js +0 -257
  654. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts +0 -50
  655. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts.map +0 -1
  656. package/src/platform-implementation-js/views/collapsible-panel-view.js +0 -222
  657. package/src/platform-implementation-js/views/compose-button-view.d.ts.map +0 -1
  658. package/src/platform-implementation-js/views/compose-button-view.js +0 -45
  659. package/src/platform-implementation-js/views/compose-view.d.ts.map +0 -1
  660. package/src/platform-implementation-js/views/compose-view.js +0 -312
  661. package/src/platform-implementation-js/views/keyboard-shortcut-handle.d.ts.map +0 -1
  662. package/src/platform-implementation-js/views/keyboard-shortcut-handle.js +0 -14
  663. package/src/platform-implementation-js/views/nav-item-view.d.ts +0 -24
  664. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.d.ts.map +0 -1
  665. package/src/platform-implementation-js/widgets/buttons/basic-button-view-controller.js +0 -39
  666. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.d.ts.map +0 -1
  667. package/src/platform-implementation-js/widgets/buttons/dropdown-button-view-controller.js +0 -98
  668. package/src/platform-implementation-js/widgets/buttons/dropdown-view.d.ts.map +0 -1
  669. package/src/platform-implementation-js/widgets/buttons/dropdown-view.js +0 -122
@@ -1,90 +1,151 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _autoHtml = _interopRequireDefault(require("auto-html"));
10
- var _transducers = _interopRequireDefault(require("transducers.js"));
11
- var _once = _interopRequireDefault(require("lodash/once"));
12
- var _escape = _interopRequireDefault(require("lodash/escape"));
13
- var _includes = _interopRequireDefault(require("lodash/includes"));
14
- var _constant = _interopRequireDefault(require("lodash/constant"));
15
- var _find = _interopRequireDefault(require("lodash/find"));
16
- var _asap = _interopRequireDefault(require("asap"));
17
- var _pdelay = _interopRequireDefault(require("pdelay"));
18
- var Kefir = _interopRequireWildcard(require("kefir"));
19
- var ud = _interopRequireWildcard(require("ud"));
20
- var _closestNg = _interopRequireDefault(require("closest-ng"));
21
- var _kefirBus = _interopRequireDefault(require("kefir-bus"));
22
- var _kefirStopper = _interopRequireDefault(require("kefir-stopper"));
23
- var _delayAsap = _interopRequireDefault(require("../../../lib/delay-asap"));
24
- var _simulateMouseEvent = require("../../../lib/dom/simulate-mouse-event");
25
- var _simulateKey = _interopRequireDefault(require("../../../lib/dom/simulate-key"));
26
- var _querySelectorOrFail = _interopRequireDefault(require("../../../lib/dom/querySelectorOrFail"));
27
- var _isElementVisible = _interopRequireDefault(require("../../../../common/isElementVisible"));
28
- var _makeElementChildStream = _interopRequireDefault(require("../../../lib/dom/make-element-child-stream"));
29
- var _simulateDragAndDrop = require("../../../lib/dom/simulate-drag-and-drop");
30
- var GmailResponseProcessor = _interopRequireWildcard(require("../gmail-response-processor"));
31
- var _gmailElementGetter = _interopRequireDefault(require("../gmail-element-getter"));
32
- var _setCss = _interopRequireDefault(require("../../../lib/dom/set-css"));
33
- var _waitFor = _interopRequireDefault(require("../../../lib/wait-for"));
34
- var _streamWaitFor = _interopRequireDefault(require("../../../lib/stream-wait-for"));
35
- var _makeMutationObserverChunkedStream = _interopRequireDefault(require("../../../lib/dom/make-mutation-observer-chunked-stream"));
36
- var _handleComposeLinkChips = _interopRequireDefault(require("../../../lib/handle-compose-link-chips"));
37
- var _insertLinkChipIntoBody = _interopRequireDefault(require("../../../lib/insert-link-chip-into-body"));
38
- var _addComposeNotice = _interopRequireDefault(require("./gmail-compose-view/add-compose-notice"));
39
- var _addStatusBar = _interopRequireDefault(require("./gmail-compose-view/add-status-bar"));
40
- var _insertHtmlAtCursor = _interopRequireDefault(require("../../../lib/dom/insert-html-at-cursor"));
41
- var _ensureGroupingIsOpen = _interopRequireDefault(require("./gmail-compose-view/ensure-grouping-is-open"));
42
- var _ensureAppButtonToolbarsAreClosed = _interopRequireDefault(require("./gmail-compose-view/ensure-app-button-toolbars-are-closed"));
43
- var _sizeFixer = _interopRequireDefault(require("./gmail-compose-view/size-fixer"));
44
- var _addTooltipToButton = _interopRequireDefault(require("./gmail-compose-view/add-tooltip-to-button"));
45
- var _addRecipientRow = _interopRequireDefault(require("./gmail-compose-view/add-recipient-row"));
46
- var _addButton = _interopRequireDefault(require("./gmail-compose-view/add-button"));
47
- var _setRecipients = _interopRequireDefault(require("./gmail-compose-view/set-recipients"));
48
- var _focus = _interopRequireDefault(require("./gmail-compose-view/focus"));
49
- var _monitorSelectionRange = _interopRequireDefault(require("./gmail-compose-view/monitor-selection-range"));
50
- var _manageButtonGrouping = _interopRequireDefault(require("./gmail-compose-view/manage-button-grouping"));
51
- var _getSelection = require("../../../lib/dom/get-selection");
52
- var _getMinimizedStream = _interopRequireDefault(require("./gmail-compose-view/get-minimized-stream"));
53
- var _censorHTMLstring = _interopRequireDefault(require("../../../../common/censorHTMLstring"));
54
- var _insertLinkIntoBody = _interopRequireDefault(require("./gmail-compose-view/insert-link-into-body"));
55
- var _getAddressChangesStream = _interopRequireDefault(require("./gmail-compose-view/get-address-changes-stream"));
56
- var _getBodyChangesStream = _interopRequireDefault(require("./gmail-compose-view/get-body-changes-stream"));
57
- var _getRecipients = _interopRequireDefault(require("./gmail-compose-view/get-recipients"));
58
- var _getResponseTypeChangesStream = _interopRequireDefault(require("./gmail-compose-view/get-response-type-changes-stream"));
59
- var _getPresendingStream = _interopRequireDefault(require("../../../driver-common/compose/getPresendingStream"));
60
- var _getDiscardStream = _interopRequireDefault(require("../../../driver-common/compose/getDiscardStream"));
61
- var _updateInsertMoreAreaLeft = _interopRequireDefault(require("./gmail-compose-view/update-insert-more-area-left"));
62
- var _setupLinkPopovers = _interopRequireDefault(require("./gmail-compose-view/setupLinkPopovers"));
63
- var _getFormattingAreaOffsetLeft = _interopRequireDefault(require("./gmail-compose-view/get-formatting-area-offset-left"));
64
- var _overrideEditSubject = _interopRequireDefault(require("./gmail-compose-view/override-edit-subject"));
65
- var _detectClassicRecipientsArea = _interopRequireDefault(require("./gmail-compose-view/detectClassicRecipientsArea"));
66
- var _censorHTMLtree = _interopRequireDefault(require("../../../../common/censorHTMLtree"));
67
- var _pageParser = require("./gmail-compose-view/page-parser");
68
- var _pageParserTree = _interopRequireDefault(require("page-parser-tree"));
69
- var _tagTree = require("tag-tree");
70
- var fromManager = _interopRequireWildcard(require("./gmail-compose-view/from-manager"));
71
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
72
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
1
+ /* @flow */
2
+
3
+ import autoHtml from 'auto-html';
4
+ import t from 'transducers.js';
5
+ import once from 'lodash/once';
6
+ import escape from 'lodash/escape';
7
+ import includes from 'lodash/includes';
8
+ import constant from 'lodash/constant';
9
+ import find from 'lodash/find';
10
+ import asap from 'asap';
11
+ import delay from 'pdelay';
12
+ import * as Kefir from 'kefir';
13
+ import * as ud from 'ud';
14
+ import closest from 'closest-ng';
15
+ import kefirBus from 'kefir-bus';
16
+ import type { Bus } from 'kefir-bus';
17
+ import kefirStopper from 'kefir-stopper';
18
+ import type { Stopper } from 'kefir-stopper';
19
+
20
+ import delayAsap from '../../../lib/delay-asap';
21
+ import { simulateClick } from '../../../lib/dom/simulate-mouse-event';
22
+ import simulateKey from '../../../lib/dom/simulate-key';
23
+ import querySelector from '../../../lib/dom/querySelectorOrFail';
24
+ import isElementVisible from '../../../../common/isElementVisible';
25
+ import makeElementChildStream from '../../../lib/dom/make-element-child-stream';
26
+ import {
27
+ simulateDragOver,
28
+ simulateDrop,
29
+ simulateDragEnd,
30
+ } from '../../../lib/dom/simulate-drag-and-drop';
31
+ import * as GmailResponseProcessor from '../gmail-response-processor';
32
+ import GmailElementGetter from '../gmail-element-getter';
33
+ import setCss from '../../../lib/dom/set-css';
34
+
35
+ import waitFor from '../../../lib/wait-for';
36
+ import streamWaitFor from '../../../lib/stream-wait-for';
37
+ import makeMutationObserverChunkedStream from '../../../lib/dom/make-mutation-observer-chunked-stream';
38
+ import handleComposeLinkChips from '../../../lib/handle-compose-link-chips';
39
+ import insertLinkChipIntoBody from '../../../lib/insert-link-chip-into-body';
40
+ import addComposeNotice from './gmail-compose-view/add-compose-notice';
41
+ import addStatusBar from './gmail-compose-view/add-status-bar';
42
+ import insertHTMLatCursor from '../../../lib/dom/insert-html-at-cursor';
43
+ import ensureGroupingIsOpen from './gmail-compose-view/ensure-grouping-is-open';
44
+ import ensureAppButtonToolbarsAreClosed from './gmail-compose-view/ensure-app-button-toolbars-are-closed';
45
+ import sizeFixer from './gmail-compose-view/size-fixer';
46
+ import addTooltipToButton from './gmail-compose-view/add-tooltip-to-button';
47
+ import addRecipientRow from './gmail-compose-view/add-recipient-row';
48
+ import addButton from './gmail-compose-view/add-button';
49
+ import setRecipients from './gmail-compose-view/set-recipients';
50
+ import focus from './gmail-compose-view/focus';
73
51
  // import addOuterSidebar from './gmail-compose-view/add-outer-sidebar';
52
+ import monitorSelectionRange from './gmail-compose-view/monitor-selection-range';
53
+ import manageButtonGrouping from './gmail-compose-view/manage-button-grouping';
54
+ import type { TooltipDescriptor } from '../../../views/compose-button-view';
55
+ import {
56
+ getSelectedHTMLInElement,
57
+ getSelectedTextInElement,
58
+ } from '../../../lib/dom/get-selection';
59
+ import getMinimizedStream from './gmail-compose-view/get-minimized-stream';
60
+ import censorHTMLstring from '../../../../common/censorHTMLstring';
61
+
62
+ import insertLinkIntoBody from './gmail-compose-view/insert-link-into-body';
63
+ import getAddressChangesStream from './gmail-compose-view/get-address-changes-stream';
64
+ import getBodyChangesStream from './gmail-compose-view/get-body-changes-stream';
65
+ import getRecipients from './gmail-compose-view/get-recipients';
66
+ import getResponseTypeChangesStream from './gmail-compose-view/get-response-type-changes-stream';
67
+ import getPresendingStream from '../../../driver-common/compose/getPresendingStream';
68
+ import getDiscardStream from '../../../driver-common/compose/getDiscardStream';
69
+ import updateInsertMoreAreaLeft from './gmail-compose-view/update-insert-more-area-left';
70
+ import setupLinkPopOvers from './gmail-compose-view/setupLinkPopovers';
71
+ import getFormattingAreaOffsetLeft from './gmail-compose-view/get-formatting-area-offset-left';
72
+ import overrideEditSubject from './gmail-compose-view/override-edit-subject';
73
+ import detectClassicRecipientsArea from './gmail-compose-view/detectClassicRecipientsArea';
74
+ import censorHTMLtree from '../../../../common/censorHTMLtree';
75
+ import {
76
+ makePageParser,
77
+ getRecipientRowElements,
78
+ } from './gmail-compose-view/page-parser';
79
+ import PageParserTree from 'page-parser-tree';
80
+ import { TagTree } from 'tag-tree';
81
+
82
+ import * as fromManager from './gmail-compose-view/from-manager';
83
+
84
+ import type {
85
+ ComposeNotice,
86
+ ComposeViewDriver,
87
+ StatusBar,
88
+ } from '../../../driver-interfaces/compose-view-driver';
89
+ import type Logger from '../../../lib/logger';
90
+ import type GmailDriver from '../gmail-driver';
91
+
74
92
  let hasReportedMissingBody = false;
93
+
75
94
  class GmailComposeView {
76
- // Set only after the message is sent.
95
+ _element: HTMLElement;
96
+ _seenBodyElement: HTMLElement;
97
+ _isInlineReplyForm: boolean;
98
+ _isFullscreen: boolean;
99
+ _isStandalone: boolean;
100
+ _emailWasSent: boolean;
101
+ _driver: GmailDriver;
102
+ _managedViewControllers: Array<{ destroy(): void }>;
103
+ _eventStream: Bus<any>;
104
+ _isTriggeringADraftSavePending: boolean;
105
+ _buttonViewControllerTooltipMap: WeakMap<Object, Object>;
106
+ _composeID: string;
107
+ _messageIDElement: HTMLInputElement;
108
+ _messageId: ?string;
109
+ _finalMessageId: ?string; // Set only after the message is sent.
110
+ _initialMessageId: ?string;
111
+ _targetMessageID: ?string;
112
+ _draftSaving: boolean;
113
+ _draftIDpromise: ?Promise<?string>;
114
+ _threadID: ?string;
115
+ _stopper: Stopper;
116
+ _lastSelectionRange: ?Range;
117
+ _requestModifiers: {
118
+ [key: string]: (composeParams: { body: string }) =>
119
+ | { body: string }
120
+ | Promise<{ body: string }>,
121
+ };
122
+ _isListeningToAjaxInterceptStream: boolean;
123
+ _formattingArea: ?HTMLElement;
124
+ _closedProgrammatically: boolean = false;
125
+ _destroyed: boolean = false;
126
+ _removedFromDOMStopper: Stopper;
127
+ _hasSetupLinkPopOvers: boolean = false;
128
+ _page: PageParserTree;
129
+ tagTree: TagTree<HTMLElement>;
130
+ ready: () => Kefir.Observable<GmailComposeView>;
77
131
 
78
- constructor(element, xhrInterceptorStream, driver, options) {
79
- (0, _defineProperty2.default)(this, "_closedProgrammatically", false);
80
- (0, _defineProperty2.default)(this, "_destroyed", false);
81
- (0, _defineProperty2.default)(this, "_hasSetupLinkPopOvers", false);
82
- this;
132
+ constructor(
133
+ element: HTMLElement,
134
+ xhrInterceptorStream: Kefir.Observable<*>,
135
+ driver: GmailDriver,
136
+ options: {
137
+ isInlineReplyForm: boolean,
138
+ isStandalone: boolean,
139
+ }
140
+ ) {
141
+ (this: ComposeViewDriver);
83
142
  this._element = element;
84
143
  this._element.classList.add('inboxsdk__compose');
144
+
85
145
  if (options.isInlineReplyForm) {
86
146
  this._element.classList.add('inboxsdk__compose_inlineReply');
87
147
  }
148
+
88
149
  this._isInlineReplyForm = options.isInlineReplyForm;
89
150
  this._isStandalone = options.isStandalone;
90
151
  this._isFullscreen = false;
@@ -94,64 +155,69 @@ class GmailComposeView {
94
155
  this._draftSaving = false;
95
156
  this._draftIDpromise = null;
96
157
  this._driver = driver;
97
- this._stopper = (0, _kefirStopper.default)();
158
+ this._stopper = kefirStopper();
98
159
  this._managedViewControllers = [];
99
160
  this._requestModifiers = {};
100
161
  this._isListeningToAjaxInterceptStream = false;
101
- this._eventStream = (0, _kefirBus.default)();
102
- this._removedFromDOMStopper = (0, _kefirStopper.default)();
162
+
163
+ this._eventStream = kefirBus();
164
+ this._removedFromDOMStopper = kefirStopper();
165
+
103
166
  this._isTriggeringADraftSavePending = false;
104
- this._page = (0, _pageParser.makePageParser)(element, driver.getLogger());
167
+
168
+ this._page = makePageParser(element, driver.getLogger());
105
169
  this.tagTree = this._page.tree;
170
+
106
171
  let saveAndSendStream;
107
172
  if (this._driver.isUsingSyncAPI()) {
108
173
  saveAndSendStream = xhrInterceptorStream
109
- // we know _getDraftIDfromForm will work because by the time we're
110
- // getting an ajax event Gmail's JS has generated an ID and added it to the DOM.
111
- .filter(event => event.draftID === this._getDraftIDfromForm()).map(event => {
112
- switch (event.type) {
113
- case 'emailSending':
114
- {
115
- return {
116
- eventName: 'sending'
117
- };
174
+ // we know _getDraftIDfromForm will work because by the time we're
175
+ // getting an ajax event Gmail's JS has generated an ID and added it to the DOM.
176
+ .filter((event) => event.draftID === this._getDraftIDfromForm())
177
+ .map((event) => {
178
+ switch (event.type) {
179
+ case 'emailSending': {
180
+ return { eventName: 'sending' };
118
181
  }
119
- case 'emailSent':
120
- {
182
+ case 'emailSent': {
121
183
  let syncThreadID = event.threadID;
122
184
  let syncMessageID = event.messageID;
185
+
123
186
  if (event.oldMessageID) this._messageId = event.oldMessageID;
124
187
  if (event.oldThreadID) this._threadID = event.oldThreadID;
188
+
125
189
  driver.removeCachedGmailMessageIdForSyncMessageId(syncMessageID);
126
190
  driver.removeCachedOldGmailThreadIdFromSyncThreadId(syncThreadID);
191
+
127
192
  return {
128
193
  eventName: 'sent',
129
194
  data: {
130
- getThreadID: (0, _once.default)(async () => {
195
+ getThreadID: once(async (): Promise<string> => {
131
196
  if (event.oldThreadID) {
132
197
  return event.oldThreadID;
133
198
  }
134
- return await driver.getOldGmailThreadIdFromSyncThreadId(syncThreadID);
199
+ return await driver.getOldGmailThreadIdFromSyncThreadId(
200
+ syncThreadID
201
+ );
135
202
  }),
136
- getMessageID: (0, _once.default)(async () => {
203
+ getMessageID: once(async (): Promise<string> => {
137
204
  if (event.oldMessageID) {
138
205
  return event.oldMessageID;
139
206
  }
140
- return await driver.getGmailMessageIdForSyncMessageId(syncMessageID);
141
- })
142
- }
207
+ return await driver.getGmailMessageIdForSyncMessageId(
208
+ syncMessageID
209
+ );
210
+ }),
211
+ },
143
212
  };
144
213
  }
145
- case 'emailSendFailed':
146
- {
147
- return {
148
- eventName: 'sendCanceled'
149
- };
214
+ case 'emailSendFailed': {
215
+ return { eventName: 'sendCanceled' };
150
216
  }
151
- case 'emailDraftReceived':
152
- {
217
+ case 'emailDraftReceived': {
153
218
  this._messageId = event.oldMessageID;
154
219
  this._threadID = event.oldThreadID;
220
+
155
221
  return {
156
222
  eventName: 'draftSaved',
157
223
  data: {
@@ -160,32 +226,31 @@ class GmailComposeView {
160
226
  },
161
227
  getMessageID() {
162
228
  return Promise.resolve(event.oldMessageID);
163
- }
164
- }
229
+ },
230
+ },
165
231
  };
166
232
  }
167
- default:
168
- {
233
+ default: {
169
234
  return null;
170
235
  }
171
- }
172
- }).filter(Boolean);
236
+ }
237
+ })
238
+ .filter(Boolean);
173
239
  } else {
174
- saveAndSendStream = xhrInterceptorStream.filter(event => event.composeId === this.getComposeID()).map(event => {
175
- switch (event.type) {
176
- case 'emailSending':
177
- {
178
- return [{
179
- eventName: 'sending'
180
- }];
240
+ saveAndSendStream = xhrInterceptorStream
241
+ .filter((event) => event.composeId === this.getComposeID())
242
+ .map((event) => {
243
+ switch (event.type) {
244
+ case 'emailSending': {
245
+ return [{ eventName: 'sending' }];
181
246
  }
182
- case 'emailSent':
183
- {
184
- const response = GmailResponseProcessor.interpretSentEmailResponse(event.response);
185
- if ((0, _includes.default)(['tr', 'eu'], response.messageID)) {
186
- return [{
187
- eventName: 'sendCanceled'
188
- }];
247
+ case 'emailSent': {
248
+ const response =
249
+ GmailResponseProcessor.interpretSentEmailResponse(
250
+ event.response
251
+ );
252
+ if (includes(['tr', 'eu'], response.messageID)) {
253
+ return [{ eventName: 'sendCanceled' }];
189
254
  }
190
255
  this._emailWasSent = true;
191
256
  if (response.messageID) {
@@ -193,49 +258,56 @@ class GmailComposeView {
193
258
  }
194
259
  this._messageId = null;
195
260
  const data = {
196
- getThreadID: () => Promise.resolve(response.threadID),
197
- getMessageID: () => Promise.resolve(response.messageID)
261
+ getThreadID: (): Promise<string> =>
262
+ Promise.resolve(response.threadID),
263
+ getMessageID: (): Promise<string> =>
264
+ Promise.resolve(response.messageID),
198
265
  };
199
- ['threadID', 'gmailThreadId'].forEach(prop => {
266
+ ['threadID', 'gmailThreadId'].forEach((prop) => {
200
267
  // These properties are nonenumerable.
201
- Object.defineProperty(data, prop, {
268
+ Object.defineProperty((data: any), prop, {
202
269
  get: () => {
203
- this._driver.getLogger().deprecationWarning(`composeView sent event.${prop}`, 'composeView sent event.getThreadID()');
270
+ this._driver
271
+ .getLogger()
272
+ .deprecationWarning(
273
+ `composeView sent event.${prop}`,
274
+ 'composeView sent event.getThreadID()'
275
+ );
204
276
  return response.threadID;
205
- }
277
+ },
206
278
  });
207
279
  });
208
- ['messageID', 'gmailMessageId'].forEach(prop => {
209
- Object.defineProperty(data, prop, {
280
+ ['messageID', 'gmailMessageId'].forEach((prop) => {
281
+ Object.defineProperty((data: any), prop, {
210
282
  get: () => {
211
- this._driver.getLogger().deprecationWarning(`composeView sent event.${prop}`, 'composeView sent event.getMessageID()');
283
+ this._driver
284
+ .getLogger()
285
+ .deprecationWarning(
286
+ `composeView sent event.${prop}`,
287
+ 'composeView sent event.getMessageID()'
288
+ );
212
289
  return response.messageID;
213
- }
290
+ },
214
291
  });
215
292
  });
216
- return [{
217
- eventName: 'sent',
218
- data
219
- }];
293
+ return [{ eventName: 'sent', data }];
220
294
  }
221
- case 'emailDraftSaveSending':
222
- {
295
+ case 'emailDraftSaveSending': {
223
296
  this._draftSaving = true;
224
- return [{
225
- eventName: 'draftSaving'
226
- }];
297
+ return [{ eventName: 'draftSaving' }];
227
298
  }
228
- case 'emailDraftReceived':
229
- {
299
+ case 'emailDraftReceived': {
230
300
  this._draftSaving = false;
231
301
  let response;
232
302
  try {
233
- response = GmailResponseProcessor.interpretSentEmailResponse(event.response);
303
+ response = GmailResponseProcessor.interpretSentEmailResponse(
304
+ event.response
305
+ );
234
306
  } catch (err) {
235
307
  if (this._driver.getAppId() === 'sdk_streak_21e9788951') {
236
308
  this._driver.getLogger().error(err, {
237
309
  connectionDetails: event.connectionDetails,
238
- response: event.response
310
+ response: event.response,
239
311
  });
240
312
  throw err;
241
313
  } else {
@@ -245,102 +317,158 @@ class GmailComposeView {
245
317
  if (response.messageID === 'eu') {
246
318
  return []; // save was canceled
247
319
  }
248
-
249
- const events = [{
250
- eventName: 'draftSaved',
251
- data: response
252
- }];
320
+ const events = [{ eventName: 'draftSaved', data: response }];
253
321
  if (!response.messageID) {
254
- this._driver.getLogger().error(new Error('Missing message id from emailDraftReceived'));
255
- } else if (response.messageID && this._messageId !== response.messageID) {
322
+ this._driver
323
+ .getLogger()
324
+ .error(
325
+ new Error('Missing message id from emailDraftReceived')
326
+ );
327
+ } else if (
328
+ response.messageID &&
329
+ this._messageId !== response.messageID
330
+ ) {
256
331
  if (/^[0-9a-f]+$/i.test(response.messageID)) {
257
332
  this._messageId = response.messageID;
258
333
  events.push({
259
334
  eventName: 'messageIDChange',
260
- data: this._messageId
335
+ data: this._messageId,
261
336
  });
262
337
  } else {
263
- this._driver.getLogger().error(new Error('Invalid message id from emailDraftReceived'), {
264
- value: response.messageID
265
- });
338
+ this._driver
339
+ .getLogger()
340
+ .error(
341
+ new Error('Invalid message id from emailDraftReceived'),
342
+ {
343
+ value: response.messageID,
344
+ }
345
+ );
266
346
  }
267
347
  }
268
348
  return events;
269
349
  }
270
- default:
271
- return [];
272
- }
273
- }).flatten().map(event => {
274
- if (this._driver.getLogger().shouldTrackEverything()) {
275
- driver.getLogger().eventSite('compose.debug.xhr', {
276
- eventName: event.eventName
277
- });
278
- }
279
- return event;
280
- });
350
+ default:
351
+ return [];
352
+ }
353
+ })
354
+ .flatten()
355
+ .map((event) => {
356
+ if (this._driver.getLogger().shouldTrackEverything()) {
357
+ driver
358
+ .getLogger()
359
+ .eventSite('compose.debug.xhr', { eventName: event.eventName });
360
+ }
361
+
362
+ return event;
363
+ });
281
364
  }
282
- this._eventStream.plug(Kefir.merge([saveAndSendStream, Kefir.fromEvents(this._element, 'buttonAdded').map(() => {
283
- return {
284
- eventName: 'buttonAdded'
285
- };
286
- }), Kefir.fromEvents(this._element, 'resize').map(() => ({
287
- eventName: 'resize'
288
- })), Kefir.fromEvents(this._element, 'composeFullscreenStateChanged').map(() => {
289
- this._updateComposeFullscreenState();
290
- return {
291
- eventName: 'fullscreenChanged',
292
- data: {
293
- fullscreen: this._isFullscreen
294
- }
295
- };
296
- })]));
297
- Kefir.fromEvents(this._element, 'closedProgrammatically').takeUntilBy(this._stopper).onValue(() => {
298
- this._closedProgrammatically = true;
299
- });
365
+
366
+ this._eventStream.plug(
367
+ Kefir.merge([
368
+ saveAndSendStream,
369
+
370
+ Kefir.fromEvents(this._element, 'buttonAdded').map(() => {
371
+ return {
372
+ eventName: 'buttonAdded',
373
+ };
374
+ }),
375
+
376
+ Kefir.fromEvents(this._element, 'resize').map(() => ({
377
+ eventName: 'resize',
378
+ })),
379
+
380
+ Kefir.fromEvents(this._element, 'composeFullscreenStateChanged').map(
381
+ () => {
382
+ this._updateComposeFullscreenState();
383
+ return {
384
+ eventName: 'fullscreenChanged',
385
+ data: { fullscreen: this._isFullscreen },
386
+ };
387
+ }
388
+ ),
389
+ ])
390
+ );
391
+
392
+ Kefir.fromEvents(this._element, 'closedProgrammatically')
393
+ .takeUntilBy(this._stopper)
394
+ .onValue(() => {
395
+ this._closedProgrammatically = true;
396
+ });
397
+
300
398
  this._buttonViewControllerTooltipMap = new WeakMap();
399
+
301
400
  const initialBodyElement = this.getMaybeBodyElement();
302
- this.ready = (0, _constant.default)((initialBodyElement ? Kefir.constant(initialBodyElement) : (0, _streamWaitFor.default)(() => this.getMaybeBodyElement(), 3 * 60 * 1000 //timeout
303
- )).takeUntilBy(this._stopper).map(bodyElement => {
304
- this._seenBodyElement = bodyElement;
305
- this._composeID = this._element.querySelector('input[name="composeid"]').value;
306
- this._messageIDElement = this._element.querySelector('input[name="draft"]');
307
- if (!this._messageIDElement) {
308
- driver.getLogger().error(new Error('Could not find compose message id field'));
309
- // stub so other things don't fail
310
- this._messageIDElement = document.createElement('input');
311
- }
312
- this._setupIDs();
313
- this._setupStreams();
314
- this._setupConsistencyCheckers();
315
- this._updateComposeFullscreenState();
316
- {
317
- // try and handle the case where the user types in a bad email address
318
- // we get the presending event but then no other events will pass because
319
- // a modal comes up informing the user of the bad email address
320
- this.getEventStream().filter(_ref => {
321
- let {
322
- eventName
323
- } = _ref;
324
- return eventName === 'presending';
325
- }).takeUntilBy(this._stopper).onValue(() => {
326
- (0, _makeElementChildStream.default)(document.body).map(event => event.el).filter(node => node.getAttribute && node.getAttribute('role') === 'alertdialog').takeUntilBy(Kefir.merge([this.getEventStream().filter(_ref2 => {
327
- let {
328
- eventName
329
- } = _ref2;
330
- return eventName === 'sendCanceled' || eventName === 'sending';
331
- }), Kefir.later(15)])).onValue(() => {
332
- this._eventStream.emit({
333
- eventName: 'sendCanceled'
334
- });
335
- });
336
- });
337
- }
338
- return this;
339
- }).toProperty());
340
- this.ready().onError(errorObject => {
401
+ this.ready = constant(
402
+ (initialBodyElement
403
+ ? Kefir.constant(initialBodyElement)
404
+ : streamWaitFor(
405
+ () => this.getMaybeBodyElement(),
406
+ 3 * 60 * 1000 //timeout
407
+ )
408
+ )
409
+ .takeUntilBy(this._stopper)
410
+ .map((bodyElement) => {
411
+ this._seenBodyElement = bodyElement;
412
+
413
+ this._composeID = ((this._element.querySelector(
414
+ 'input[name="composeid"]'
415
+ ): any): HTMLInputElement).value;
416
+ this._messageIDElement = (this._element.querySelector(
417
+ 'input[name="draft"]'
418
+ ): any);
419
+ if (!this._messageIDElement) {
420
+ driver
421
+ .getLogger()
422
+ .error(new Error('Could not find compose message id field'));
423
+ // stub so other things don't fail
424
+ this._messageIDElement = document.createElement('input');
425
+ }
426
+
427
+ this._setupIDs();
428
+ this._setupStreams();
429
+ this._setupConsistencyCheckers();
430
+ this._updateComposeFullscreenState();
431
+
432
+ {
433
+ // try and handle the case where the user types in a bad email address
434
+ // we get the presending event but then no other events will pass because
435
+ // a modal comes up informing the user of the bad email address
436
+ this.getEventStream()
437
+ .filter(({ eventName }) => eventName === 'presending')
438
+ .takeUntilBy(this._stopper)
439
+ .onValue(() => {
440
+ makeElementChildStream(((document.body: any): HTMLElement))
441
+ .map((event) => event.el)
442
+ .filter(
443
+ (node) =>
444
+ node.getAttribute &&
445
+ node.getAttribute('role') === 'alertdialog'
446
+ )
447
+ .takeUntilBy(
448
+ Kefir.merge([
449
+ this.getEventStream().filter(
450
+ ({ eventName }) =>
451
+ eventName === 'sendCanceled' ||
452
+ eventName === 'sending'
453
+ ),
454
+ Kefir.later(15),
455
+ ])
456
+ )
457
+ .onValue(() => {
458
+ this._eventStream.emit({ eventName: 'sendCanceled' });
459
+ });
460
+ });
461
+ }
462
+
463
+ return this;
464
+ })
465
+ .toProperty()
466
+ );
467
+
468
+ this.ready().onError((errorObject) => {
341
469
  driver.getLogger().error(errorObject, {
342
470
  hasForm: !!this.getElement().querySelector('form'),
343
- class: this.getElement().getAttribute('class')
471
+ class: this.getElement().getAttribute('class'),
344
472
  });
345
473
  });
346
474
 
@@ -349,48 +477,52 @@ class GmailComposeView {
349
477
  // send to come back, so we have to handle that difference
350
478
  if (this._driver.isUsingSyncAPI()) {
351
479
  Kefir.merge([
352
- // if we get a presending then we let the other stream wait for
353
- // sent. But if we get a sendCanceled, then a regular destroy can
354
- // pass through
355
- this._removedFromDOMStopper.filterBy(this._eventStream.filter(_ref3 => {
356
- let {
357
- eventName
358
- } = _ref3;
359
- return eventName === 'presending' || eventName === 'sendCanceled';
360
- }).map(_ref4 => {
361
- let {
362
- eventName
363
- } = _ref4;
364
- return eventName === 'sendCanceled';
365
- }).toProperty(() => true)), Kefir.combine([this._removedFromDOMStopper, this._eventStream.filter(_ref5 => {
366
- let {
367
- eventName
368
- } = _ref5;
369
- return eventName === 'sent';
370
- })])]).take(1)
371
- // we delay asap here so that the event stream is not destroyed before listeners here the sent event
372
- .flatMap(() => (0, _delayAsap.default)(null)).onValue(() => this._destroy());
480
+ // if we get a presending then we let the other stream wait for
481
+ // sent. But if we get a sendCanceled, then a regular destroy can
482
+ // pass through
483
+ this._removedFromDOMStopper.filterBy(
484
+ this._eventStream
485
+ .filter(
486
+ ({ eventName }) =>
487
+ eventName === 'presending' || eventName === 'sendCanceled'
488
+ )
489
+ .map(({ eventName }) => eventName === 'sendCanceled')
490
+ .toProperty(() => true)
491
+ ),
492
+
493
+ Kefir.combine([
494
+ this._removedFromDOMStopper,
495
+ this._eventStream.filter(({ eventName }) => eventName === 'sent'),
496
+ ]),
497
+ ])
498
+ .take(1)
499
+ // we delay asap here so that the event stream is not destroyed before listeners here the sent event
500
+ .flatMap(() => delayAsap(null))
501
+ .onValue(() => this._destroy());
373
502
  } else {
374
503
  this._removedFromDOMStopper.onValue(() => this._destroy());
375
504
  }
376
- (0, _detectClassicRecipientsArea.default)();
505
+
506
+ detectClassicRecipientsArea();
377
507
  }
508
+
378
509
  destroy() {
379
510
  // this gets called when the element gets removed from the DOM
380
511
  // however we don't want to pass through that destroy event right away
381
512
  this._removedFromDOMStopper.destroy();
382
513
  this._page.dump();
383
514
  }
515
+
384
516
  _destroy() {
385
517
  this._eventStream.emit({
386
518
  eventName: 'destroy',
387
519
  data: {
388
520
  messageID: this.getMessageID(),
389
- closedByInboxSDK: this._closedProgrammatically
390
- }
521
+ closedByInboxSDK: this._closedProgrammatically,
522
+ },
391
523
  });
392
524
  this._eventStream.end();
393
- this._managedViewControllers.forEach(vc => {
525
+ this._managedViewControllers.forEach((vc) => {
394
526
  vc.destroy();
395
527
  });
396
528
  this._requestModifiers = {};
@@ -398,103 +530,155 @@ class GmailComposeView {
398
530
  this._stopper.destroy();
399
531
  this._destroyed = true;
400
532
  }
401
- getStopper() {
533
+
534
+ getStopper(): Kefir.Observable<null> {
402
535
  return this._stopper;
403
536
  }
404
- getEventStream() {
537
+
538
+ getEventStream(): Kefir.Observable<Object> {
405
539
  return this._eventStream;
406
540
  }
407
- getGmailDriver() {
541
+
542
+ getGmailDriver(): GmailDriver {
408
543
  return this._driver;
409
544
  }
410
- isDestroyed() {
545
+
546
+ isDestroyed(): boolean {
411
547
  return this._destroyed;
412
548
  }
549
+
413
550
  _setupStreams() {
414
- this._eventStream.plug((0, _getAddressChangesStream.default)(this));
415
- this._eventStream.plug((0, _getBodyChangesStream.default)(this));
416
- this._eventStream.plug((0, _getResponseTypeChangesStream.default)(this));
417
- this._eventStream.plug((0, _getPresendingStream.default)({
418
- element: this.getElement(),
419
- sendButton: this.getSendButton(),
420
- sendAndArchive: this.getSendAndArchiveButton()
421
- }));
551
+ this._eventStream.plug(getAddressChangesStream(this));
552
+ this._eventStream.plug(getBodyChangesStream(this));
553
+ this._eventStream.plug(getResponseTypeChangesStream(this));
554
+ this._eventStream.plug(
555
+ getPresendingStream({
556
+ element: this.getElement(),
557
+ sendButton: this.getSendButton(),
558
+ sendAndArchive: this.getSendAndArchiveButton(),
559
+ })
560
+ );
561
+
422
562
  let discardButton;
423
563
  try {
424
564
  discardButton = this.getDiscardButton();
425
565
  } catch (err) {
426
566
  // handle failures of this.getDiscardButton()
427
- this._driver.getLogger().errorSite(new Error('Failed to find discard button'), {
428
- html: (0, _censorHTMLstring.default)(this._element.outerHTML)
429
- });
567
+ this._driver
568
+ .getLogger()
569
+ .errorSite(new Error('Failed to find discard button'), {
570
+ html: censorHTMLstring(this._element.outerHTML),
571
+ });
430
572
  }
431
573
  if (discardButton) {
432
- this._eventStream.plug((0, _getDiscardStream.default)({
433
- element: this.getElement(),
434
- discardButton
435
- }));
574
+ this._eventStream.plug(
575
+ getDiscardStream({
576
+ element: this.getElement(),
577
+ discardButton,
578
+ })
579
+ );
436
580
  }
437
- this._eventStream.plug(Kefir.fromEvents(this.getElement(), 'inboxSDKsendCanceled').map(() => ({
438
- eventName: 'sendCanceled'
439
- })));
440
- this._eventStream.plug(Kefir.fromEvents(this.getElement(), 'inboxSDKdiscardCanceled').map(() => ({
441
- eventName: 'discardCanceled'
442
- })));
443
- this._eventStream.plug(Kefir.later(10).flatMap(() => (0, _getMinimizedStream.default)(this)).changes().map(minimized => ({
444
- eventName: minimized ? 'minimized' : 'restored'
445
- })));
581
+
582
+ this._eventStream.plug(
583
+ Kefir.fromEvents(this.getElement(), 'inboxSDKsendCanceled').map(() => ({
584
+ eventName: 'sendCanceled',
585
+ }))
586
+ );
587
+
588
+ this._eventStream.plug(
589
+ Kefir.fromEvents(this.getElement(), 'inboxSDKdiscardCanceled').map(
590
+ () => ({ eventName: 'discardCanceled' })
591
+ )
592
+ );
593
+
594
+ this._eventStream.plug(
595
+ Kefir.later(10)
596
+ .flatMap(() => getMinimizedStream(this))
597
+ .changes()
598
+ .map((minimized) => ({
599
+ eventName: minimized ? 'minimized' : 'restored',
600
+ }))
601
+ );
602
+
446
603
  if (!this._driver.isUsingSyncAPI()) {
447
- (0, _makeMutationObserverChunkedStream.default)(this._messageIDElement, {
604
+ makeMutationObserverChunkedStream(this._messageIDElement, {
448
605
  attributes: true,
449
- attributeFilter: ['value']
450
- }).takeUntilBy(this._eventStream.filter(() => false).beforeEnd(() => null)).map(() => this._getMessageIDfromForm()).filter(messageID => messageID && !this._emailWasSent && this._messageId !== messageID).onValue(messageID => {
451
- this._messageId = messageID;
452
- this._eventStream.emit({
453
- eventName: 'messageIDChange',
454
- data: this._messageId
606
+ attributeFilter: ['value'],
607
+ })
608
+ .takeUntilBy(
609
+ this._eventStream.filter(() => false).beforeEnd(() => null)
610
+ )
611
+ .map(() => this._getMessageIDfromForm())
612
+ .filter(
613
+ (messageID) =>
614
+ messageID && !this._emailWasSent && this._messageId !== messageID
615
+ )
616
+ .onValue((messageID) => {
617
+ this._messageId = messageID;
618
+ this._eventStream.emit({
619
+ eventName: 'messageIDChange',
620
+ data: this._messageId,
621
+ });
455
622
  });
456
- });
457
623
  }
458
624
  }
625
+
459
626
  _setupConsistencyCheckers() {
460
627
  try {
461
- (0, _handleComposeLinkChips.default)(this);
462
- (0, _monitorSelectionRange.default)(this);
463
- (0, _manageButtonGrouping.default)(this);
464
- (0, _sizeFixer.default)(this._driver, this);
628
+ handleComposeLinkChips(this);
629
+ monitorSelectionRange(this);
630
+ manageButtonGrouping(this);
631
+ sizeFixer(this._driver, this);
465
632
  } catch (err) {
466
633
  this._driver.getLogger().error(err);
467
634
  }
468
635
  }
636
+
469
637
  _setupIDs() {
470
638
  if (this._driver.isUsingSyncAPI()) {
471
639
  const syncTargetMessageID = this._getTargetMessageID();
472
640
  if (syncTargetMessageID) {
473
- this._driver.getGmailMessageIdForSyncMessageId(syncTargetMessageID).then(gmailMessageId => this._targetMessageID = gmailMessageId);
641
+ this._driver
642
+ .getGmailMessageIdForSyncMessageId(syncTargetMessageID)
643
+ .then((gmailMessageId) => (this._targetMessageID = gmailMessageId));
474
644
  }
645
+
475
646
  const syncMessageId = this._getMessageIDfromForm();
476
647
  if (syncMessageId) {
477
- this._driver.getGmailMessageIdForSyncDraftId(syncMessageId).then(gmailMessageId => {
478
- this._initialMessageId = gmailMessageId;
479
- this._messageId = gmailMessageId;
480
- }).catch(() => {
481
- //do nothing because this means the message hasn't been saved yet
482
- });
648
+ this._driver
649
+ .getGmailMessageIdForSyncDraftId(syncMessageId)
650
+ .then((gmailMessageId) => {
651
+ this._initialMessageId = gmailMessageId;
652
+ this._messageId = gmailMessageId;
653
+ })
654
+ .catch(() => {
655
+ //do nothing because this means the message hasn't been saved yet
656
+ });
657
+
483
658
  this._driver.reportRecentSyncDraftId(syncMessageId);
484
659
  this._stopper.onValue(() => {
485
660
  this._driver.reportDraftClosed(syncMessageId);
486
661
  });
487
662
  } else {
488
- this._driver.getLogger().error(new Error('Draft is missing sync draft id'));
663
+ this._driver
664
+ .getLogger()
665
+ .error(new Error('Draft is missing sync draft id'));
489
666
  }
490
- const legacyThreadIdElement = this._element.querySelector('input[name="lts"]');
491
- if (legacyThreadIdElement && typeof legacyThreadIdElement.value === 'string') this._threadID = legacyThreadIdElement.value;
667
+
668
+ const legacyThreadIdElement: ?HTMLInputElement =
669
+ (this._element.querySelector('input[name="lts"]'): any);
670
+ if (
671
+ legacyThreadIdElement &&
672
+ typeof legacyThreadIdElement.value === 'string'
673
+ )
674
+ this._threadID = legacyThreadIdElement.value;
492
675
  } else {
493
676
  this._targetMessageID = this._getTargetMessageID();
494
677
  this._messageId = this._initialMessageId = this._getMessageIDfromForm();
495
678
  this._threadID = this._getThreadID();
496
679
  }
497
680
  }
681
+
498
682
  _updateComposeFullscreenState() {
499
683
  if (this._isInlineReplyForm) {
500
684
  this._isFullscreen = false;
@@ -502,7 +686,8 @@ class GmailComposeView {
502
686
  if (this._isStandalone) {
503
687
  this._isFullscreen = true;
504
688
  } else {
505
- const fullScreenContainer = _gmailElementGetter.default.getFullscreenComposeWindowContainer();
689
+ const fullScreenContainer =
690
+ GmailElementGetter.getFullscreenComposeWindowContainer();
506
691
  if (!fullScreenContainer) {
507
692
  this._isFullscreen = false;
508
693
  } else {
@@ -511,305 +696,465 @@ class GmailComposeView {
511
696
  }
512
697
  }
513
698
  }
699
+
514
700
  focus() {
515
- (0, _focus.default)(this);
701
+ focus(this);
516
702
  }
517
- insertBodyTextAtCursor(text) {
518
- return this.insertBodyHTMLAtCursor((0, _escape.default)(text).replace(/\n/g, '<br>'));
703
+
704
+ insertBodyTextAtCursor(text: string): ?HTMLElement {
705
+ return this.insertBodyHTMLAtCursor(escape(text).replace(/\n/g, '<br>'));
519
706
  }
520
- insertBodyHTMLAtCursor(html) {
521
- var retVal = (0, _insertHtmlAtCursor.default)(this.getBodyElement(), html, this.getLastSelectionRange());
707
+
708
+ insertBodyHTMLAtCursor(html: string): ?HTMLElement {
709
+ var retVal = insertHTMLatCursor(
710
+ this.getBodyElement(),
711
+ html,
712
+ this.getLastSelectionRange()
713
+ );
522
714
  this._triggerDraftSave();
523
715
 
524
716
  // sometimes the html inserted can be quite large, so we need ot make sure that GMail resizes the compose window
525
717
  // triggering an enter press forces Gmail to resize compose
526
- (0, _simulateKey.default)(this.getBodyElement(), 13, 13);
718
+ simulateKey(this.getBodyElement(), 13, 13);
719
+
527
720
  return retVal;
528
721
  }
529
- insertLinkIntoBody(text, href) {
530
- var retVal = (0, _insertLinkIntoBody.default)(this, text, href);
722
+
723
+ insertLinkIntoBody(text: string, href: string): ?HTMLElement {
724
+ var retVal = insertLinkIntoBody(this, text, href);
725
+
531
726
  this._triggerDraftSave();
532
727
  return retVal;
533
728
  }
534
- insertLinkChipIntoBody(options) {
535
- var retVal = (0, _insertLinkChipIntoBody.default)(this, options);
729
+
730
+ insertLinkChipIntoBody(options: {
731
+ iconUrl?: string,
732
+ url: string,
733
+ text: string,
734
+ }): HTMLElement {
735
+ var retVal = insertLinkChipIntoBody(this, options);
536
736
  this._triggerDraftSave();
537
737
  return retVal;
538
738
  }
539
- setSubject(text) {
540
- this._element.querySelector('input[name=subjectbox]').value = text;
739
+
740
+ setSubject(text: string) {
741
+ (this._element.querySelector('input[name=subjectbox]'): any).value = text;
742
+
541
743
  this._triggerDraftSave();
542
744
  }
543
- setBodyHTML(html) {
745
+
746
+ setBodyHTML(html: string) {
544
747
  this.getBodyElement().innerHTML = html;
748
+
545
749
  this._triggerDraftSave();
546
750
  }
547
- setBodyText(text) {
751
+
752
+ setBodyText(text: string) {
548
753
  this.getBodyElement().textContent = text;
754
+
549
755
  this._triggerDraftSave();
550
756
  }
551
- setToRecipients(emails) {
552
- (0, _setRecipients.default)(this, 'to', emails);
757
+
758
+ setToRecipients(emails: string[]) {
759
+ setRecipients(this, 'to', emails);
760
+
553
761
  this._triggerDraftSave();
554
762
  }
555
- setCcRecipients(emails) {
556
- (0, _setRecipients.default)(this, 'cc', emails);
763
+
764
+ setCcRecipients(emails: string[]) {
765
+ setRecipients(this, 'cc', emails);
766
+
557
767
  this._triggerDraftSave();
558
768
  }
559
- setBccRecipients(emails) {
560
- (0, _setRecipients.default)(this, 'bcc', emails);
769
+
770
+ setBccRecipients(emails: string[]) {
771
+ setRecipients(this, 'bcc', emails);
772
+
561
773
  this._triggerDraftSave();
562
774
  }
563
- addRecipientRow(options) {
564
- return (0, _addRecipientRow.default)(this, options);
775
+
776
+ addRecipientRow(options: Kefir.Observable<?Object>): () => void {
777
+ return addRecipientRow(this, options);
565
778
  }
566
- forceRecipientRowsOpen() {
779
+
780
+ forceRecipientRowsOpen(): () => void {
567
781
  this._element.classList.add('inboxsdk__compose_forceRecipientsOpen');
782
+
568
783
  return () => {
569
784
  this._element.classList.remove('inboxsdk__compose_forceRecipientsOpen');
570
785
  };
571
786
  }
572
- hideNativeRecipientRows() {
573
- const nativeRecipientRows = (0, _pageParser.getRecipientRowElements)(this._element);
574
- nativeRecipientRows.forEach(row => {
787
+
788
+ hideNativeRecipientRows(): () => void {
789
+ const nativeRecipientRows = getRecipientRowElements(this._element);
790
+
791
+ nativeRecipientRows.forEach((row) => {
575
792
  row.classList.add('inboxsdk__compose_forceRecipientRowHidden');
576
793
  });
794
+
577
795
  return () => {
578
- nativeRecipientRows.forEach(row => {
796
+ nativeRecipientRows.forEach((row) => {
579
797
  row.classList.remove('inboxsdk__compose_forceRecipientRowHidden');
580
798
  });
581
799
  };
582
800
  }
583
- hideRecipientArea() {
801
+
802
+ hideRecipientArea(): () => void {
584
803
  this._element.classList.add('inboxsdk__compose_hideRecipientArea');
804
+
585
805
  return () => {
586
806
  this._element.classList.remove('inboxsdk__compose_hideRecipientArea');
587
807
  };
588
808
  }
809
+
589
810
  getFromContact() {
590
811
  return fromManager.getFromContact(this._driver, this);
591
812
  }
813
+
592
814
  getFromContactChoices() {
593
815
  return fromManager.getFromContactChoices(this._driver, this);
594
816
  }
595
- setFromEmail(email) {
817
+
818
+ setFromEmail(email: string) {
596
819
  fromManager.setFromEmail(this._driver, this, email);
597
820
  }
598
- addButton(buttonDescriptor, groupOrderHint, extraOnClickOptions) {
599
- return (0, _addButton.default)(this, buttonDescriptor, groupOrderHint, extraOnClickOptions);
821
+
822
+ addButton(
823
+ buttonDescriptor: Kefir.Observable<?Object>,
824
+ groupOrderHint: string,
825
+ extraOnClickOptions: Object
826
+ ): Promise<?Object> {
827
+ return addButton(
828
+ this,
829
+ buttonDescriptor,
830
+ groupOrderHint,
831
+ extraOnClickOptions
832
+ );
600
833
  }
601
- addTooltipToButton(buttonViewController, buttonDescriptor, tooltipDescriptor) {
602
- var tooltip = (0, _addTooltipToButton.default)(this, buttonViewController, buttonDescriptor, tooltipDescriptor);
834
+
835
+ addTooltipToButton(
836
+ buttonViewController: Object,
837
+ buttonDescriptor: Object,
838
+ tooltipDescriptor: TooltipDescriptor
839
+ ) {
840
+ var tooltip = addTooltipToButton(
841
+ this,
842
+ buttonViewController,
843
+ buttonDescriptor,
844
+ tooltipDescriptor
845
+ );
603
846
  this._buttonViewControllerTooltipMap.set(buttonViewController, tooltip);
604
847
  }
605
- closeButtonTooltip(buttonViewController) {
848
+
849
+ closeButtonTooltip(buttonViewController: Object) {
606
850
  if (!this._buttonViewControllerTooltipMap) {
607
851
  return;
608
852
  }
609
- var tooltip = this._buttonViewControllerTooltipMap.get(buttonViewController);
853
+
854
+ var tooltip =
855
+ this._buttonViewControllerTooltipMap.get(buttonViewController);
610
856
  if (tooltip) {
611
857
  tooltip.destroy();
612
858
  this._buttonViewControllerTooltipMap.delete(buttonViewController);
613
859
  }
614
860
  }
615
- addComposeNotice() {
616
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
617
- const composeNotice = (0, _addComposeNotice.default)(this, options);
618
- this._element.dispatchEvent(new CustomEvent('resize', {
619
- bubbles: false,
620
- cancelable: false,
621
- detail: null
622
- }));
623
- Kefir.fromEvents(composeNotice, 'destroy').flatMap(_delayAsap.default).takeUntilBy(this._stopper).onValue(() => {
624
- this._element.dispatchEvent(new CustomEvent('resize', {
861
+
862
+ addComposeNotice(
863
+ options: {
864
+ orderHint?: number,
865
+ } = {}
866
+ ): ComposeNotice {
867
+ const composeNotice = addComposeNotice(this, options);
868
+
869
+ this._element.dispatchEvent(
870
+ new CustomEvent('resize', {
625
871
  bubbles: false,
626
872
  cancelable: false,
627
- detail: null
628
- }));
629
- });
873
+ detail: null,
874
+ })
875
+ );
876
+
877
+ Kefir.fromEvents(composeNotice, 'destroy')
878
+ .flatMap(delayAsap)
879
+ .takeUntilBy(this._stopper)
880
+ .onValue(() => {
881
+ this._element.dispatchEvent(
882
+ new CustomEvent('resize', {
883
+ bubbles: false,
884
+ cancelable: false,
885
+ detail: null,
886
+ })
887
+ );
888
+ });
889
+
630
890
  return composeNotice;
631
891
  }
632
- addStatusBar() {
633
- let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
634
- const statusBar = (0, _addStatusBar.default)(this, options);
635
- this._element.dispatchEvent(new CustomEvent('resize', {
636
- bubbles: false,
637
- cancelable: false,
638
- detail: null
639
- }));
640
- Kefir.fromEvents(statusBar, 'destroy').flatMap(_delayAsap.default).takeUntilBy(this._stopper).onValue(() => {
641
- this._element.dispatchEvent(new CustomEvent('resize', {
892
+
893
+ addStatusBar(
894
+ options: {
895
+ height?: number,
896
+ orderHint?: number,
897
+ addAboveNativeStatusBar?: boolean,
898
+ } = {}
899
+ ): StatusBar {
900
+ const statusBar = addStatusBar(this, options);
901
+
902
+ this._element.dispatchEvent(
903
+ new CustomEvent('resize', {
642
904
  bubbles: false,
643
905
  cancelable: false,
644
- detail: null
645
- }));
646
- });
906
+ detail: null,
907
+ })
908
+ );
909
+
910
+ Kefir.fromEvents(statusBar, 'destroy')
911
+ .flatMap(delayAsap)
912
+ .takeUntilBy(this._stopper)
913
+ .onValue(() => {
914
+ this._element.dispatchEvent(
915
+ new CustomEvent('resize', {
916
+ bubbles: false,
917
+ cancelable: false,
918
+ detail: null,
919
+ })
920
+ );
921
+ });
922
+
647
923
  return statusBar;
648
924
  }
649
- hideNativeStatusBar() {
925
+
926
+ hideNativeStatusBar(): () => void {
650
927
  const statusArea = this.getStatusArea();
651
- const nativeStatusBar = (0, _querySelectorOrFail.default)(statusArea, 'table');
928
+ const nativeStatusBar = querySelector(statusArea, 'table');
652
929
  const formattingToolbar = this.getFormattingToolbar();
653
- const isFormattingToolbarOpen = formattingToolbar && formattingToolbar.style.display !== 'none';
930
+ const isFormattingToolbarOpen =
931
+ formattingToolbar && formattingToolbar.style.display !== 'none';
932
+
654
933
  nativeStatusBar.style.display = 'none';
934
+
655
935
  if (formattingToolbar && isFormattingToolbarOpen) {
656
936
  formattingToolbar.style.display = 'none';
657
937
  }
938
+
658
939
  return () => {
659
940
  nativeStatusBar.style.display = '';
941
+
660
942
  if (formattingToolbar && isFormattingToolbarOpen) {
661
943
  formattingToolbar.style.display = '';
662
944
  }
663
945
  };
664
946
  }
665
- replaceSendButton(el) {
947
+
948
+ replaceSendButton(el: HTMLElement): () => void {
666
949
  const sendButton = this.getSendButtonGroup();
667
950
  const sendAndArchive = this.getSendAndArchiveButton();
951
+
668
952
  sendButton.style.display = 'none';
953
+
669
954
  const sendAndArchiveParent = sendAndArchive && sendAndArchive.parentElement;
670
955
  if (sendAndArchiveParent instanceof HTMLElement) {
671
956
  sendAndArchiveParent.style.display = 'none';
672
957
  }
958
+
673
959
  const container = document.createElement('div');
674
960
  container.classList.add('inboxsdk__compose_customSendContainer');
675
961
  container.appendChild(el);
962
+
676
963
  sendButton.insertAdjacentElement('afterend', container);
677
964
  this._element.setAttribute('data-inboxsdk-send-replaced', '');
678
- const removalStopper = (0, _kefirStopper.default)();
679
- Kefir.fromEvents(this.getBodyElement(), 'keydown').takeUntilBy(this._stopper).takeUntilBy(removalStopper).filter(domEvent => (domEvent.which === 9 || domEvent.keyCode === 9) && !domEvent.shiftKey).onValue(domEvent => {
680
- // Because of the way the compose DOM is structured, the natural
681
- // tab order does not flow from the compose body to the status bar.
682
- // Gmail modifies this flow programatically by focusing the send button,
683
- // so we have replicate this behavior when the native send button isn't
684
- // visible.
685
- const statusArea = this.getStatusArea();
686
- const focusableEls = statusArea.querySelectorAll('[tabindex]');
687
- if (focusableEls.length === 0) return;
688
- const firstVisibleEl = Array.from(focusableEls).find(el => el.offsetParent !== null);
689
- if (!firstVisibleEl) return;
690
- domEvent.preventDefault();
691
- domEvent.stopPropagation();
692
- domEvent.stopImmediatePropagation();
693
- firstVisibleEl.focus();
694
- });
965
+
966
+ const removalStopper = kefirStopper();
967
+
968
+ Kefir.fromEvents(this.getBodyElement(), 'keydown')
969
+ .takeUntilBy(this._stopper)
970
+ .takeUntilBy(removalStopper)
971
+ .filter(
972
+ (domEvent) =>
973
+ (domEvent.which === 9 || domEvent.keyCode === 9) && !domEvent.shiftKey
974
+ )
975
+ .onValue((domEvent) => {
976
+ // Because of the way the compose DOM is structured, the natural
977
+ // tab order does not flow from the compose body to the status bar.
978
+ // Gmail modifies this flow programatically by focusing the send button,
979
+ // so we have replicate this behavior when the native send button isn't
980
+ // visible.
981
+ const statusArea = this.getStatusArea();
982
+ const focusableEls = statusArea.querySelectorAll('[tabindex]');
983
+ if (focusableEls.length === 0) return;
984
+
985
+ const firstVisibleEl = Array.from(focusableEls).find(
986
+ (el) => el.offsetParent !== null
987
+ );
988
+ if (!firstVisibleEl) return;
989
+
990
+ domEvent.preventDefault();
991
+ domEvent.stopPropagation();
992
+ domEvent.stopImmediatePropagation();
993
+
994
+ firstVisibleEl.focus();
995
+ });
996
+
695
997
  return () => {
696
998
  removalStopper.destroy();
697
999
  container.remove();
698
1000
  this._element.removeAttribute('data-inboxsdk-send-replaced');
1001
+
699
1002
  sendButton.style.display = '';
700
1003
  if (sendAndArchiveParent instanceof HTMLElement) {
701
1004
  sendAndArchiveParent.style.display = '';
702
1005
  }
703
1006
  };
704
1007
  }
705
- hideDiscardButton() {
1008
+
1009
+ hideDiscardButton(): () => void {
706
1010
  const discardBtn = this.getDiscardButton();
1011
+
707
1012
  discardBtn.style.display = 'none';
1013
+
708
1014
  return () => {
709
1015
  discardBtn.style.display = '';
710
1016
  };
711
1017
  }
1018
+
712
1019
  ensureFormattingToolbarIsHidden() {
713
1020
  const formattingToggleButton = this.getFormattingToolbarToggleButton();
714
1021
  const formattingToolbar = this.getFormattingToolbar();
715
- if (formattingToggleButton && formattingToolbar && formattingToolbar.style.display === '') {
716
- (0, _simulateMouseEvent.simulateClick)(formattingToggleButton);
1022
+
1023
+ if (
1024
+ formattingToggleButton &&
1025
+ formattingToolbar &&
1026
+ formattingToolbar.style.display === ''
1027
+ ) {
1028
+ simulateClick(formattingToggleButton);
717
1029
  }
718
1030
  }
1031
+
719
1032
  close() {
720
1033
  if (this.isInlineReplyForm()) {
721
1034
  // eslint-disable-next-line no-console
722
1035
  console.warn("Trying to close an inline reply which doesn't work.");
723
1036
  return;
724
1037
  }
725
- this._element.dispatchEvent(new CustomEvent('closedProgrammatically', {
726
- bubbles: false,
727
- cancelable: false,
728
- detail: null
729
- }));
1038
+
1039
+ this._element.dispatchEvent(
1040
+ new CustomEvent('closedProgrammatically', {
1041
+ bubbles: false,
1042
+ cancelable: false,
1043
+ detail: null,
1044
+ })
1045
+ );
1046
+
730
1047
  if (this._isFullscreen) {
731
- this._eventStream.filter(_ref6 => {
732
- let {
733
- eventName
734
- } = _ref6;
735
- return eventName === 'fullscreenChanged';
736
- }).onValue(() => (0, _simulateMouseEvent.simulateClick)(this.getCloseButton()));
737
- (0, _simulateMouseEvent.simulateClick)(this.getMoleSwitchButton());
1048
+ this._eventStream
1049
+ .filter(({ eventName }) => eventName === 'fullscreenChanged')
1050
+ .onValue(() => simulateClick(this.getCloseButton()));
1051
+
1052
+ simulateClick(this.getMoleSwitchButton());
738
1053
  } else {
739
- (0, _simulateMouseEvent.simulateClick)(this.getCloseButton());
1054
+ simulateClick(this.getCloseButton());
740
1055
  }
741
1056
  }
742
- send(_ref7) {
743
- let {
744
- sendAndArchive
745
- } = _ref7;
1057
+
1058
+ send({ sendAndArchive }: { sendAndArchive: boolean }) {
746
1059
  // asap necessary so if send() is called after presending event.cancel(), the new presending event
747
1060
  // must happen after the sendCanceled event (which is also delayed by asap).
748
- (0, _asap.default)(() => {
1061
+ asap(() => {
749
1062
  const sendAndArchiveButton = this.getSendAndArchiveButton();
1063
+
750
1064
  if (sendAndArchive && sendAndArchiveButton) {
751
- (0, _simulateMouseEvent.simulateClick)(sendAndArchiveButton);
1065
+ simulateClick(sendAndArchiveButton);
752
1066
  } else {
753
- (0, _simulateMouseEvent.simulateClick)(this.getSendButton());
1067
+ simulateClick(this.getSendButton());
754
1068
  }
755
1069
  });
756
1070
  }
1071
+
757
1072
  discard() {
758
- (0, _simulateMouseEvent.simulateClick)(this.getDiscardButton());
1073
+ simulateClick(this.getDiscardButton());
759
1074
  }
1075
+
760
1076
  popOut() {
761
1077
  if (!this.isInlineReplyForm()) {
762
1078
  throw new Error('Can only pop out inline reply compose views');
763
1079
  }
764
- const popOutBtn = (0, _querySelectorOrFail.default)(this._element, '.M9 > [role=menu]:first-child > .SK > [role=menuitem]:last-child');
765
- (0, _simulateMouseEvent.simulateClick)(popOutBtn);
1080
+ const popOutBtn = querySelector(
1081
+ this._element,
1082
+ '.M9 > [role=menu]:first-child > .SK > [role=menuitem]:last-child'
1083
+ );
1084
+ simulateClick(popOutBtn);
766
1085
  }
1086
+
767
1087
  overrideEditSubject() {
768
- (0, _overrideEditSubject.default)(this._driver, this);
1088
+ overrideEditSubject(this._driver, this);
769
1089
  }
1090
+
770
1091
  _hideDropzones() {
771
- (0, _setCss.default)('compose dropzone hider', 'body > .aC7 .aC9 {visibility: hidden;}');
1092
+ setCss('compose dropzone hider', 'body > .aC7 .aC9 {visibility: hidden;}');
772
1093
  }
1094
+
773
1095
  _reenableDropzones() {
774
- (0, _setCss.default)('compose dropzone hider', null);
1096
+ setCss('compose dropzone hider', null);
775
1097
  }
776
- _dropzonesVisible() {
777
- return (0, _find.default)(document.querySelectorAll('body > .aC7:not(.aWP)'), _isElementVisible.default) != null;
1098
+
1099
+ _dropzonesVisible(): boolean {
1100
+ return (
1101
+ find(
1102
+ document.querySelectorAll('body > .aC7:not(.aWP)'),
1103
+ isElementVisible
1104
+ ) != null
1105
+ );
778
1106
  }
779
- _findDropzoneForThisCompose(inline) {
1107
+
1108
+ _findDropzoneForThisCompose(inline: boolean): HTMLElement {
780
1109
  // Iterate through all the dropzones and find the one visually contained by
781
1110
  // this compose.
782
1111
  const rect = this._element.getBoundingClientRect();
783
- const dropzoneSelector = inline ? 'body > .aC7:not(.aWP)' : 'body > .aC7.aWP';
784
- const el = _transducers.default.toArray(Array.prototype.slice.call(document.querySelectorAll(dropzoneSelector)), _transducers.default.compose(_transducers.default.filter(_isElementVisible.default), _transducers.default.filter(dropzone => {
785
- const top = parseInt(dropzone.style.top, 10);
786
- const bottom = top + parseInt(dropzone.style.height, 10);
787
- const left = parseInt(dropzone.style.left, 10);
788
- const right = left + parseInt(dropzone.style.width, 10);
789
- return top >= rect.top && left >= rect.left && right <= rect.right && bottom <= rect.bottom;
790
- }), _transducers.default.take(1)))[0];
1112
+ const dropzoneSelector = inline
1113
+ ? 'body > .aC7:not(.aWP)'
1114
+ : 'body > .aC7.aWP';
1115
+ const el: ?HTMLElement = t.toArray(
1116
+ Array.prototype.slice.call(document.querySelectorAll(dropzoneSelector)),
1117
+ t.compose(
1118
+ t.filter(isElementVisible),
1119
+ t.filter((dropzone) => {
1120
+ const top = parseInt(dropzone.style.top, 10);
1121
+ const bottom = top + parseInt(dropzone.style.height, 10);
1122
+ const left = parseInt(dropzone.style.left, 10);
1123
+ const right = left + parseInt(dropzone.style.width, 10);
1124
+ return (
1125
+ top >= rect.top &&
1126
+ left >= rect.left &&
1127
+ right <= rect.right &&
1128
+ bottom <= rect.bottom
1129
+ );
1130
+ }),
1131
+ t.take(1)
1132
+ )
1133
+ )[0];
791
1134
  if (!el) {
792
1135
  throw new Error('Failed to find dropzone');
793
1136
  }
794
1137
  return el;
795
1138
  }
796
- async _attachFiles(files, inline) {
1139
+
1140
+ async _attachFiles(files: Blob[], inline: boolean): Promise<void> {
797
1141
  this._hideDropzones();
798
- const endDrag = (0, _once.default)(() => (0, _simulateDragAndDrop.simulateDragEnd)(this._element, files));
1142
+ const endDrag = once(() => simulateDragEnd(this._element, files));
799
1143
  try {
800
1144
  let firstLoop = true;
801
- for (let files of _transducers.default.partition(files, 3)) {
1145
+ for (let partitionedFiles of t.partition(files, 3)) {
802
1146
  if (firstLoop) {
803
1147
  firstLoop = false;
804
1148
  } else {
805
- await (0, _pdelay.default)(500);
1149
+ await delay(500);
806
1150
  }
807
- (0, _simulateDragAndDrop.simulateDragOver)(this._element, files);
808
- await (0, _waitFor.default)(() => this._dropzonesVisible(), 20 * 1000);
1151
+
1152
+ simulateDragOver(this._element, partitionedFiles);
1153
+ await waitFor(() => this._dropzonesVisible(), 20 * 1000);
809
1154
  const dropzone = this._findDropzoneForThisCompose(inline);
810
- (0, _simulateDragAndDrop.simulateDrop)(dropzone, files);
1155
+ simulateDrop(dropzone, partitionedFiles);
811
1156
  endDrag();
812
- await (0, _waitFor.default)(() => !this._dropzonesVisible(), 20 * 1000);
1157
+ await waitFor(() => !this._dropzonesVisible(), 20 * 1000);
813
1158
  }
814
1159
  } catch (err) {
815
1160
  this._driver.getLogger().error(err);
@@ -818,134 +1163,185 @@ class GmailComposeView {
818
1163
  this._reenableDropzones();
819
1164
  }
820
1165
  }
821
- attachFiles(files) {
1166
+
1167
+ attachFiles(files: Blob[]): Promise<void> {
822
1168
  return this._attachFiles(files, false);
823
1169
  }
824
- attachInlineFiles(files) {
1170
+
1171
+ attachInlineFiles(files: Blob[]): Promise<void> {
825
1172
  return this._attachFiles(files, true);
826
1173
  }
827
- isForward() {
1174
+
1175
+ isForward(): boolean {
828
1176
  return Boolean(this._element.querySelector('.Un.J-JN-M-I .mI'));
829
1177
  }
830
- isReply() {
1178
+
1179
+ isReply(): boolean {
831
1180
  return this._isInlineReplyForm || !!this._element.querySelector('.HQ');
832
1181
  }
833
- isInlineReplyForm() {
1182
+
1183
+ isInlineReplyForm(): boolean {
834
1184
  return this._isInlineReplyForm;
835
1185
  }
836
- getBodyElement() {
1186
+
1187
+ getBodyElement(): HTMLElement {
837
1188
  const el = this.getMaybeBodyElement();
838
1189
  if (!el) throw new Error('Could not find body element');
839
1190
  return el;
840
1191
  }
841
- getMaybeBodyElement() {
1192
+
1193
+ getMaybeBodyElement(): ?HTMLElement {
842
1194
  return this._element.querySelector('.Ap [g_editable=true]');
843
1195
  }
844
- getTopFormElement() {
845
- return (0, _querySelectorOrFail.default)(this._element, 'td > form');
1196
+
1197
+ getTopFormElement(): HTMLElement {
1198
+ return querySelector(this._element, 'td > form');
846
1199
  }
847
- getHTMLContent() {
1200
+
1201
+ getHTMLContent(): string {
848
1202
  return this.getBodyElement().innerHTML;
849
1203
  }
850
- getTextContent() {
1204
+
1205
+ getTextContent(): string {
851
1206
  return this.getBodyElement().textContent;
852
1207
  }
853
- getSelectedBodyHTML() {
854
- return (0, _getSelection.getSelectedHTMLInElement)(this.getBodyElement(), this.getLastSelectionRange());
1208
+
1209
+ getSelectedBodyHTML(): ?string {
1210
+ return getSelectedHTMLInElement(
1211
+ this.getBodyElement(),
1212
+ this.getLastSelectionRange()
1213
+ );
855
1214
  }
856
- getSelectedBodyText() {
857
- return (0, _getSelection.getSelectedTextInElement)(this.getBodyElement(), this.getLastSelectionRange());
1215
+
1216
+ getSelectedBodyText(): ?string {
1217
+ return getSelectedTextInElement(
1218
+ this.getBodyElement(),
1219
+ this.getLastSelectionRange()
1220
+ );
858
1221
  }
859
- getSubject() {
1222
+
1223
+ getSubject(): string {
860
1224
  return this.getSubjectInput().value;
861
1225
  }
862
- getSubjectInput() {
863
- return this._element.querySelector('input[name=subjectbox]');
1226
+
1227
+ getSubjectInput(): HTMLInputElement {
1228
+ return (this._element: any).querySelector('input[name=subjectbox]');
864
1229
  }
865
- getMetadataFormElement() {
1230
+
1231
+ getMetadataFormElement(): HTMLElement {
866
1232
  const container = this.getBodyElement().closest('.aoP');
867
1233
  if (!container) {
868
1234
  throw new Error('Could not find compose container');
869
1235
  }
870
- return (0, _querySelectorOrFail.default)(container, 'form.bAs');
1236
+ return querySelector(container, 'form.bAs');
871
1237
  }
872
- getToRecipients() {
873
- return (0, _getRecipients.default)(this, 'to');
1238
+
1239
+ getToRecipients(): Contact[] {
1240
+ return getRecipients(this, 'to');
874
1241
  }
875
- getCcRecipients() {
876
- return (0, _getRecipients.default)(this, 'cc');
1242
+
1243
+ getCcRecipients(): Contact[] {
1244
+ return getRecipients(this, 'cc');
877
1245
  }
878
- getBccRecipients() {
879
- return (0, _getRecipients.default)(this, 'bcc');
1246
+
1247
+ getBccRecipients(): Contact[] {
1248
+ return getRecipients(this, 'bcc');
880
1249
  }
881
- getAdditionalActionToolbar() {
882
- return require('./gmail-compose-view/get-additional-action-toolbar').default(this);
1250
+
1251
+ getAdditionalActionToolbar(): HTMLElement {
1252
+ return require('./gmail-compose-view/get-additional-action-toolbar').default(
1253
+ this
1254
+ );
883
1255
  }
884
- updateInsertMoreAreaLeft(oldFormattingAreaOffsetLeft) {
885
- (0, _updateInsertMoreAreaLeft.default)(this, oldFormattingAreaOffsetLeft);
1256
+
1257
+ updateInsertMoreAreaLeft(oldFormattingAreaOffsetLeft: number) {
1258
+ updateInsertMoreAreaLeft(this, oldFormattingAreaOffsetLeft);
886
1259
  }
887
- _getFormattingAreaOffsetLeft() {
888
- return (0, _getFormattingAreaOffsetLeft.default)(this);
1260
+
1261
+ _getFormattingAreaOffsetLeft(): number {
1262
+ return getFormattingAreaOffsetLeft(this);
889
1263
  }
890
- getFormattingArea() {
1264
+
1265
+ getFormattingArea(): ?HTMLElement {
891
1266
  let formattingArea = this._formattingArea;
892
1267
  if (!formattingArea) {
893
- formattingArea = this._formattingArea = this._element.querySelector('.oc');
1268
+ formattingArea = this._formattingArea =
1269
+ this._element.querySelector('.oc');
894
1270
  }
895
1271
  return formattingArea;
896
1272
  }
897
- getFormattingToolbar() {
1273
+
1274
+ getFormattingToolbar(): ?HTMLElement {
898
1275
  return this._element.querySelector('.aX');
899
1276
  }
900
- getFormattingToolbarArrow() {
1277
+
1278
+ getFormattingToolbarArrow(): HTMLElement {
901
1279
  const el = this.getFormattingToolbar();
902
1280
  if (!el) throw new Error('Failed to find formatting toolbar');
903
- return (0, _querySelectorOrFail.default)(el, '.aA4');
1281
+ return querySelector(el, '.aA4');
904
1282
  }
905
- getFormattingToolbarToggleButton() {
906
- const innerElement = (0, _querySelectorOrFail.default)(this._element, '[role=button] .dv');
907
- const btn = (0, _closestNg.default)(innerElement, '[role=button]');
1283
+
1284
+ getFormattingToolbarToggleButton(): HTMLElement {
1285
+ const innerElement = querySelector(this._element, '[role=button] .dv');
1286
+ const btn = closest(innerElement, '[role=button]');
908
1287
  if (!btn) throw new Error('failed to find button');
909
1288
  return btn;
910
1289
  }
911
- getStatusBarPrependContainer() {
912
- return this._element.querySelector('.inboxsdk__compose_statusBarPrependContainer');
1290
+
1291
+ getStatusBarPrependContainer(): ?HTMLElement {
1292
+ return this._element.querySelector(
1293
+ '.inboxsdk__compose_statusBarPrependContainer'
1294
+ );
913
1295
  }
914
- getScrollBody() {
1296
+
1297
+ getScrollBody(): HTMLElement {
915
1298
  var scrollBody = this._element.querySelector('table .GP');
916
1299
  if (!scrollBody) {
917
1300
  throw new Error('Failed to find scroll body');
918
1301
  }
919
1302
  return scrollBody;
920
1303
  }
921
- getStatusArea() {
1304
+
1305
+ getStatusArea(): HTMLElement {
922
1306
  let statusArea = this._element.querySelector('.aDg .aDj > .aDh');
923
1307
  if (!statusArea) throw new Error('Failed to find status area');
924
1308
  return statusArea;
925
1309
  }
926
- getInsertMoreArea() {
927
- return (0, _querySelectorOrFail.default)(this._element, '.eq');
1310
+
1311
+ getInsertMoreArea(): HTMLElement {
1312
+ return querySelector(this._element, '.eq');
928
1313
  }
929
- getInsertLinkButton() {
930
- return (0, _querySelectorOrFail.default)(this._element, '.e5.aaA.aMZ');
1314
+
1315
+ getInsertLinkButton(): HTMLElement {
1316
+ return querySelector(this._element, '.e5.aaA.aMZ');
931
1317
  }
932
- getSendButton() {
933
- return (0, _querySelectorOrFail.default)(this._element, '.IZ .Up div > div[role=button]:not(.Uo):not([aria-haspopup=true]):not([class^=inboxsdk_])');
1318
+
1319
+ getSendButton(): HTMLElement {
1320
+ return querySelector(
1321
+ this._element,
1322
+ '.IZ .Up div > div[role=button]:not(.Uo):not([aria-haspopup=true]):not([class^=inboxsdk_])'
1323
+ );
934
1324
  }
935
1325
 
936
1326
  // When schedule send is available, this returns the element that contains both buttons.
937
- getSendButtonGroup() {
938
- const scheduleSend = this._element.querySelector('.IZ .Up div > [role=button][aria-haspopup=true]:not([class^=inboxsdk_])');
1327
+ getSendButtonGroup(): HTMLElement {
1328
+ const scheduleSend = this._element.querySelector(
1329
+ '.IZ .Up div > [role=button][aria-haspopup=true]:not([class^=inboxsdk_])'
1330
+ );
939
1331
  if (scheduleSend) {
940
- return scheduleSend.parentElement;
1332
+ return (scheduleSend: any).parentElement;
941
1333
  }
942
1334
  return this.getSendButton();
943
1335
  }
944
- getSendAndArchiveButton() {
1336
+
1337
+ getSendAndArchiveButton(): ?HTMLElement {
945
1338
  if (!this.isReply()) {
946
1339
  return null;
947
1340
  }
948
- const sendAndArchiveButton = this._element.querySelector('.IZ .Up div > div[role=button].Uo:not([aria-haspopup=true]):not([class^=inboxsdk_])');
1341
+
1342
+ const sendAndArchiveButton = this._element.querySelector(
1343
+ '.IZ .Up div > div[role=button].Uo:not([aria-haspopup=true]):not([class^=inboxsdk_])'
1344
+ );
949
1345
  if (sendAndArchiveButton) {
950
1346
  return sendAndArchiveButton;
951
1347
  }
@@ -956,83 +1352,125 @@ class GmailComposeView {
956
1352
  const parent = sendButton.parentElement;
957
1353
  if (!(parent instanceof HTMLElement)) throw new Error('should not happen');
958
1354
  if (parent.childElementCount <= 1) {
959
- this._driver.getLogger().eventSdkPassive('getSendAndArchiveButton - old method - failed to find, childElementCount <= 1');
1355
+ this._driver
1356
+ .getLogger()
1357
+ .eventSdkPassive(
1358
+ 'getSendAndArchiveButton - old method - failed to find, childElementCount <= 1'
1359
+ );
960
1360
  return null;
961
1361
  }
962
- const firstNotSendElement = parent.children[0] !== sendButton ? parent.children[0] : parent.children[1];
963
- const result = !firstNotSendElement ? null : firstNotSendElement.querySelector('[role=button]');
1362
+
1363
+ const firstNotSendElement =
1364
+ parent.children[0] !== sendButton
1365
+ ? parent.children[0]
1366
+ : parent.children[1];
1367
+ const result = !firstNotSendElement
1368
+ ? null
1369
+ : firstNotSendElement.querySelector('[role=button]');
964
1370
  if (result) {
965
- this._driver.getLogger().eventSdkPassive('getSendAndArchiveButton - old method - found');
1371
+ this._driver
1372
+ .getLogger()
1373
+ .eventSdkPassive('getSendAndArchiveButton - old method - found');
966
1374
  } else {
967
- this._driver.getLogger().eventSdkPassive('getSendAndArchiveButton - old method - failed to find');
1375
+ this._driver
1376
+ .getLogger()
1377
+ .eventSdkPassive(
1378
+ 'getSendAndArchiveButton - old method - failed to find'
1379
+ );
968
1380
  }
969
1381
  return result;
970
1382
  }
971
- getCloseButton() {
1383
+
1384
+ getCloseButton(): HTMLElement {
972
1385
  return this._element.querySelectorAll('.Hm > img')[2];
973
1386
  }
974
- getMoleSwitchButton() {
1387
+
1388
+ getMoleSwitchButton(): HTMLElement {
975
1389
  return this._element.querySelectorAll('.Hm > img')[1];
976
1390
  }
977
- getBottomBarTable() {
978
- return (0, _querySelectorOrFail.default)(this._element, '.aoP .aDh > table');
1391
+
1392
+ getBottomBarTable(): HTMLElement {
1393
+ return querySelector(this._element, '.aoP .aDh > table');
979
1394
  }
980
- getBottomToolbarContainer() {
981
- return (0, _querySelectorOrFail.default)(this._element, '.aoP .aDj');
1395
+
1396
+ getBottomToolbarContainer(): HTMLElement {
1397
+ return querySelector(this._element, '.aoP .aDj');
982
1398
  }
983
- getDiscardButton() {
984
- return (0, _querySelectorOrFail.default)(this._element, '.gU .oh');
1399
+
1400
+ getDiscardButton(): HTMLElement {
1401
+ return querySelector(this._element, '.gU .oh');
985
1402
  }
986
- getComposeID() {
1403
+
1404
+ getComposeID(): string {
987
1405
  return this._composeID;
988
1406
  }
989
- getInitialMessageID() {
1407
+
1408
+ getInitialMessageID(): ?string {
990
1409
  return this._initialMessageId;
991
1410
  }
992
1411
 
993
1412
  // For use only when isUsingSyncAPI() is true — gets the draft ID
994
1413
  // from the input that used to hold the hex message ID. Still does not
995
1414
  // populate until first save.
996
- _getDraftIDfromForm() {
997
- const value = this._messageIDElement && this._messageIDElement.value || null;
998
- if (typeof value === 'string' && value !== 'undefined' && value !== 'null') {
1415
+ _getDraftIDfromForm(): ?string {
1416
+ const value =
1417
+ (this._messageIDElement && this._messageIDElement.value) || null;
1418
+ if (
1419
+ typeof value === 'string' &&
1420
+ value !== 'undefined' &&
1421
+ value !== 'null'
1422
+ ) {
999
1423
  if (this._driver.isUsingSyncAPI()) {
1000
1424
  return value.replace('#', '').replace('msg-a:', '');
1001
1425
  } else {
1002
- this._driver.getLogger().error(new Error('Invalid draft id in element'), {
1003
- value
1004
- });
1426
+ this._driver
1427
+ .getLogger()
1428
+ .error(new Error('Invalid draft id in element'), {
1429
+ value,
1430
+ });
1005
1431
  }
1006
1432
  }
1007
1433
  return null;
1008
1434
  }
1009
- _getMessageIDfromForm() {
1010
- const value = this._messageIDElement && this._messageIDElement.value || null;
1011
- if (typeof value === 'string' && value !== 'undefined' && value !== 'null') {
1435
+
1436
+ _getMessageIDfromForm(): ?string {
1437
+ const value =
1438
+ (this._messageIDElement && this._messageIDElement.value) || null;
1439
+ if (
1440
+ typeof value === 'string' &&
1441
+ value !== 'undefined' &&
1442
+ value !== 'null'
1443
+ ) {
1012
1444
  if (this._driver.isUsingSyncAPI()) {
1013
1445
  return value.replace('#', ''); //annoyingly the hash is included
1014
1446
  } else {
1015
1447
  if (/^[0-9a-f]+$/i.test(value)) {
1016
1448
  return value;
1017
1449
  } else {
1018
- this._driver.getLogger().error(new Error('Invalid message id in element'), {
1019
- value
1020
- });
1450
+ this._driver
1451
+ .getLogger()
1452
+ .error(new Error('Invalid message id in element'), {
1453
+ value,
1454
+ });
1021
1455
  }
1022
1456
  }
1023
1457
  }
1024
1458
  return null;
1025
1459
  }
1026
- getMessageID() {
1460
+
1461
+ getMessageID(): ?string {
1027
1462
  return this._messageId;
1028
1463
  }
1029
- getTargetMessageID() {
1464
+
1465
+ getTargetMessageID(): ?string {
1030
1466
  return this._targetMessageID;
1031
1467
  }
1032
- getThreadID() {
1468
+
1469
+ getThreadID(): ?string {
1033
1470
  return this._threadID;
1034
1471
  }
1035
- async getCurrentDraftID() {
1472
+
1473
+ async getCurrentDraftID(): Promise<?string> {
1036
1474
  if (this._driver.isUsingSyncAPI()) {
1037
1475
  // This function is mostly a mirror of _getDraftIDimplementation, but
1038
1476
  // instead of waiting when finding out it's not saved, just returns null.
@@ -1046,11 +1484,13 @@ class GmailComposeView {
1046
1484
  try {
1047
1485
  // If this succeeds, then the draft must exist on the server and we
1048
1486
  // can safely return the draft id we know.
1049
- const gmailMessageId = await this._driver.getGmailMessageIdForSyncDraftId(syncMessageId);
1487
+ const gmailMessageId =
1488
+ await this._driver.getGmailMessageIdForSyncDraftId(syncMessageId);
1050
1489
  } catch (e) {
1051
1490
  // ignore error, it's probably that the draft isn't saved yet.
1052
1491
  return null;
1053
1492
  }
1493
+
1054
1494
  return draftID;
1055
1495
  }
1056
1496
  }
@@ -1062,14 +1502,16 @@ class GmailComposeView {
1062
1502
  }
1063
1503
  }
1064
1504
  }
1065
- getDraftID() {
1505
+
1506
+ getDraftID(): Promise<?string> {
1066
1507
  let draftIDpromise = this._draftIDpromise;
1067
1508
  if (!draftIDpromise) {
1068
1509
  draftIDpromise = this._draftIDpromise = this._getDraftIDimplementation();
1069
1510
  }
1070
1511
  return draftIDpromise;
1071
1512
  }
1072
- async _getDraftIDimplementation() {
1513
+
1514
+ async _getDraftIDimplementation(): Promise<?string> {
1073
1515
  if (this._driver.isUsingSyncAPI()) {
1074
1516
  const draftID = this._getDraftIDfromForm();
1075
1517
  // we want to keep the semantics that getDraftID doesn't return until
@@ -1084,27 +1526,35 @@ class GmailComposeView {
1084
1526
  try {
1085
1527
  // If this succeeds, then the draft must exist on the server and we
1086
1528
  // can safely return the draft id we know.
1087
- const gmailMessageId = await this._driver.getGmailMessageIdForSyncDraftId(syncMessageId);
1529
+ const gmailMessageId =
1530
+ await this._driver.getGmailMessageIdForSyncDraftId(syncMessageId);
1088
1531
  } catch (e) {
1089
1532
  // draft doesn't exist so we wait until it does
1090
- await this._eventStream.filter(_ref8 => {
1091
- let {
1092
- eventName
1093
- } = _ref8;
1094
- return eventName === 'draftSaved';
1095
- }).beforeEnd(() => null).map(() => this._getDraftIDfromForm()).take(1).toPromise();
1533
+ await this._eventStream
1534
+ .filter(({ eventName }) => eventName === 'draftSaved')
1535
+ .beforeEnd(() => null)
1536
+ .map(() => this._getDraftIDfromForm())
1537
+ .take(1)
1538
+ .toPromise();
1096
1539
  }
1540
+
1097
1541
  return draftID;
1098
1542
  }
1099
1543
  }
1100
1544
  } else {
1101
1545
  let i = -1;
1102
1546
  let lastDebugData = null;
1547
+
1103
1548
  try {
1104
1549
  // If this compose view doesn't have a message id yet, wait until it gets
1105
1550
  // one or it's closed.
1106
1551
  if (!this._messageId) {
1107
- await this._eventStream.filter(event => event.eventName === 'messageIDChange').beforeEnd(() => null).take(1).toPromise();
1552
+ await this._eventStream
1553
+ .filter((event) => event.eventName === 'messageIDChange')
1554
+ .beforeEnd(() => null)
1555
+ .take(1)
1556
+ .toPromise();
1557
+
1108
1558
  if (!this._messageId) {
1109
1559
  // The compose was closed before it got an id.
1110
1560
  return null;
@@ -1119,6 +1569,7 @@ class GmailComposeView {
1119
1569
  // eslint-disable-next-line no-constant-condition
1120
1570
  while (true) {
1121
1571
  i++;
1572
+
1122
1573
  const messageId = this._messageId;
1123
1574
  if (!messageId) {
1124
1575
  throw new Error('Should not happen');
@@ -1129,7 +1580,11 @@ class GmailComposeView {
1129
1580
  // the draft save response yet. Wait for that response to finish and
1130
1581
  // keep trying if it looks like that might be the case.
1131
1582
  if (this._draftSaving) {
1132
- await this._eventStream.filter(event => event.eventName === 'messageIDChange').beforeEnd(() => null).take(1).toPromise();
1583
+ await this._eventStream
1584
+ .filter((event) => event.eventName === 'messageIDChange')
1585
+ .beforeEnd(() => null)
1586
+ .take(1)
1587
+ .toPromise();
1133
1588
  continue;
1134
1589
  }
1135
1590
 
@@ -1140,25 +1595,23 @@ class GmailComposeView {
1140
1595
  if (!newMessageId) {
1141
1596
  throw new Error('Should not happen');
1142
1597
  }
1143
- const {
1144
- draftID,
1145
- debugData
1146
- } = await this._driver.getDraftIDForMessageID(newMessageId, true);
1598
+ const { draftID, debugData } =
1599
+ await this._driver.getDraftIDForMessageID(newMessageId, true);
1147
1600
  const err = new Error('Failed to read draft ID -- after check');
1148
1601
  this._driver.getLogger().error(err, {
1149
1602
  message: 'getDraftID error -- after check',
1150
1603
  messageIdChanged: messageId !== newMessageId,
1151
1604
  gotDraftID: draftID != null,
1152
- debugData: draftID ? null : debugData
1605
+ debugData: draftID ? null : debugData,
1153
1606
  });
1154
1607
  }, 10 * 1000);
1608
+
1155
1609
  throw new Error('Failed to read draft ID');
1156
1610
  }
1157
1611
  lastMessageId = messageId;
1158
- const {
1159
- draftID,
1160
- debugData
1161
- } = await this._driver.getDraftIDForMessageID(messageId);
1612
+
1613
+ const { draftID, debugData } =
1614
+ await this._driver.getDraftIDForMessageID(messageId);
1162
1615
  lastDebugData = debugData;
1163
1616
  if (draftID) {
1164
1617
  return draftID;
@@ -1173,99 +1626,151 @@ class GmailComposeView {
1173
1626
  isStandalone: this._isStandalone,
1174
1627
  emailWasSent: this._emailWasSent,
1175
1628
  i,
1176
- lastDebugData
1629
+ lastDebugData,
1177
1630
  });
1178
1631
  throw err;
1179
1632
  }
1180
1633
  }
1181
1634
  }
1182
- addManagedViewController(viewController) {
1635
+
1636
+ addManagedViewController(viewController: { destroy(): void }) {
1183
1637
  this._managedViewControllers.push(viewController);
1184
1638
  }
1185
- ensureGroupingIsOpen(type) {
1186
- (0, _ensureGroupingIsOpen.default)(this._element, type);
1639
+
1640
+ ensureGroupingIsOpen(type: string) {
1641
+ ensureGroupingIsOpen(this._element, type);
1187
1642
  }
1188
- ensureAppButtonToolbarsAreClosed() {
1189
- (0, _ensureAppButtonToolbarsAreClosed.default)(this._element);
1643
+
1644
+ ensureAppButtonToolbarsAreClosed(): void {
1645
+ ensureAppButtonToolbarsAreClosed(this._element);
1190
1646
  }
1191
- isMinimized() {
1647
+
1648
+ isMinimized(): boolean {
1192
1649
  const element = this.getElement();
1193
1650
  const bodyElement = this.getMaybeBodyElement();
1194
- const bodyContainer = (0, _find.default)(element.children, child => child.contains(bodyElement));
1651
+ const bodyContainer = find(element.children, (child) =>
1652
+ child.contains(bodyElement)
1653
+ );
1195
1654
  if (!bodyContainer) {
1196
1655
  if (!hasReportedMissingBody) {
1197
1656
  hasReportedMissingBody = true;
1198
- this._driver.getLogger().error(new Error('isMinimized failed to find bodyContainer'), {
1199
- bodyElement: !!bodyElement,
1200
- hasMessageIDElement: !!this._messageIDElement,
1201
- ended: this._eventStream.ended,
1202
- bodyElStillInCompose: this._element.contains(this._seenBodyElement),
1203
- seenBodyElHtml: (0, _censorHTMLstring.default)(this._seenBodyElement.outerHTML),
1204
- composeHtml: (0, _censorHTMLstring.default)(element.outerHTML)
1205
- });
1657
+ this._driver
1658
+ .getLogger()
1659
+ .error(new Error('isMinimized failed to find bodyContainer'), {
1660
+ bodyElement: !!bodyElement,
1661
+ hasMessageIDElement: !!this._messageIDElement,
1662
+ ended: (this._eventStream: any).ended,
1663
+ bodyElStillInCompose: this._element.contains(this._seenBodyElement),
1664
+ seenBodyElHtml: censorHTMLstring(this._seenBodyElement.outerHTML),
1665
+ composeHtml: censorHTMLstring(element.outerHTML),
1666
+ });
1206
1667
  }
1207
1668
  return false;
1208
1669
  }
1670
+
1209
1671
  return bodyContainer.style.display !== '';
1210
1672
  }
1211
- setMinimized(minimized) {
1673
+
1674
+ setMinimized(minimized: boolean) {
1212
1675
  if (minimized !== this.isMinimized()) {
1213
- if (this._isInlineReplyForm) throw new Error('Not implemented for inline compose views');
1214
- const minimizeButton = (0, _querySelectorOrFail.default)(this._element, '.Hm > img');
1215
- (0, _simulateMouseEvent.simulateClick)(minimizeButton);
1676
+ if (this._isInlineReplyForm)
1677
+ throw new Error('Not implemented for inline compose views');
1678
+ const minimizeButton = querySelector(this._element, '.Hm > img');
1679
+ simulateClick(minimizeButton);
1216
1680
  }
1217
1681
  }
1218
- setFullscreen(fullscreen) {
1682
+
1683
+ setFullscreen(fullscreen: boolean) {
1219
1684
  if (fullscreen !== this.isFullscreen()) {
1220
- if (this._isInlineReplyForm) throw new Error('Not implemented for inline compose views');
1221
- const fullscreenButton = (0, _querySelectorOrFail.default)(this._element, '.Hm > img:nth-of-type(2)');
1222
- (0, _simulateMouseEvent.simulateClick)(fullscreenButton);
1685
+ if (this._isInlineReplyForm)
1686
+ throw new Error('Not implemented for inline compose views');
1687
+ const fullscreenButton = querySelector(
1688
+ this._element,
1689
+ '.Hm > img:nth-of-type(2)'
1690
+ );
1691
+ simulateClick(fullscreenButton);
1223
1692
  }
1224
1693
  }
1225
- setTitleBarColor(color) {
1226
- const buttonParent = (0, _querySelectorOrFail.default)(this._element, '.nH.Hy.aXJ table.cf.Ht td.Hm');
1227
- const elementsToModify = [(0, _querySelectorOrFail.default)(this._element, '.nH.Hy.aXJ .pi > .l.o'), (0, _querySelectorOrFail.default)(this._element, '.nH.Hy.aXJ .l.m'), (0, _querySelectorOrFail.default)(this._element, '.nH.Hy.aXJ .l.m > .l.n')];
1694
+
1695
+ setTitleBarColor(color: string): () => void {
1696
+ const buttonParent = querySelector(
1697
+ this._element,
1698
+ '.nH.Hy.aXJ table.cf.Ht td.Hm'
1699
+ );
1700
+ const elementsToModify = [
1701
+ querySelector(this._element, '.nH.Hy.aXJ .pi > .l.o'),
1702
+ querySelector(this._element, '.nH.Hy.aXJ .l.m'),
1703
+ querySelector(this._element, '.nH.Hy.aXJ .l.m > .l.n'),
1704
+ ];
1705
+
1228
1706
  buttonParent.classList.add('inboxsdk__compose_customTitleBarColor');
1229
- elementsToModify.forEach(el => {
1707
+
1708
+ elementsToModify.forEach((el) => {
1230
1709
  el.style.backgroundColor = color;
1231
1710
  });
1711
+
1232
1712
  return () => {
1233
1713
  buttonParent.classList.remove('inboxsdk__compose_customTitleBarColor');
1234
- elementsToModify.forEach(el => {
1714
+
1715
+ elementsToModify.forEach((el) => {
1235
1716
  el.style.backgroundColor = '';
1236
1717
  });
1237
1718
  };
1238
1719
  }
1239
- setTitleBarText(text) {
1720
+
1721
+ setTitleBarText(text: string): () => void {
1240
1722
  if (this.isInlineReplyForm()) {
1241
- throw new Error('setTitleBarText() is not supported on inline compose views');
1723
+ throw new Error(
1724
+ 'setTitleBarText() is not supported on inline compose views'
1725
+ );
1242
1726
  }
1243
- const titleBarTable = (0, _querySelectorOrFail.default)(this._element, '.nH.Hy.aXJ table.cf.Ht');
1244
- if (titleBarTable.classList.contains('inboxsdk__compose_hasCustomTitleBarText')) {
1245
- throw new Error('Custom title bar text is already registered for this compose view');
1727
+
1728
+ const titleBarTable = querySelector(
1729
+ this._element,
1730
+ '.nH.Hy.aXJ table.cf.Ht'
1731
+ );
1732
+
1733
+ if (
1734
+ titleBarTable.classList.contains(
1735
+ 'inboxsdk__compose_hasCustomTitleBarText'
1736
+ )
1737
+ ) {
1738
+ throw new Error(
1739
+ 'Custom title bar text is already registered for this compose view'
1740
+ );
1246
1741
  }
1247
- const titleTextParent = (0, _querySelectorOrFail.default)(titleBarTable, 'div.Hp').parentElement;
1742
+
1743
+ const titleTextParent = querySelector(
1744
+ titleBarTable,
1745
+ 'div.Hp'
1746
+ ).parentElement;
1248
1747
  if (!(titleTextParent instanceof HTMLElement)) {
1249
1748
  throw new Error('Could not locate title bar text parent');
1250
1749
  }
1750
+
1251
1751
  titleBarTable.classList.add('inboxsdk__compose_hasCustomTitleBarText');
1252
1752
  titleTextParent.classList.add('inboxsdk__compose_nativeTitleBarText');
1753
+
1253
1754
  const customTitleText = document.createElement('td');
1254
1755
  customTitleText.classList.add('inboxsdk__compose_customTitleBarText');
1255
- customTitleText.innerHTML = (0, _autoHtml.default)`
1756
+ customTitleText.innerHTML = autoHtml`
1256
1757
  <div class="Hp">
1257
1758
  <h2 class="a3E">
1258
1759
  <div class="aYF">${text}</div>
1259
1760
  </h2>
1260
1761
  </div>
1261
1762
  `;
1763
+
1262
1764
  titleTextParent.insertAdjacentElement('afterend', customTitleText);
1765
+
1263
1766
  return () => {
1264
1767
  customTitleText.remove();
1768
+
1265
1769
  titleBarTable.classList.remove('inboxsdk__compose_hasCustomTitleBarText');
1266
1770
  titleTextParent.classList.remove('inboxsdk__compose_nativeTitleBarText');
1267
1771
  };
1268
1772
  }
1773
+
1269
1774
  _triggerDraftSave() {
1270
1775
  if (this._isTriggeringADraftSavePending) {
1271
1776
  return;
@@ -1275,28 +1780,40 @@ class GmailComposeView {
1275
1780
  // Done asynchronously with setTimeout because if it's done synchronously
1276
1781
  // or after an asap step after an inline compose view's creation, Gmail
1277
1782
  // interprets the fake keypress and decides to add a '¾' character.
1278
- Kefir.later(0).takeUntilBy(this._stopper).onValue(() => {
1279
- this._isTriggeringADraftSavePending = false;
1280
- const body = this.getMaybeBodyElement();
1281
- if (body) {
1282
- const unsilence = this._driver.getPageCommunicator().silenceGmailErrorsForAMoment();
1283
- try {
1284
- (0, _simulateKey.default)(body, 190, 0);
1285
- } finally {
1286
- unsilence();
1783
+ Kefir.later(0)
1784
+ .takeUntilBy(this._stopper)
1785
+ .onValue(() => {
1786
+ this._isTriggeringADraftSavePending = false;
1787
+
1788
+ const body = this.getMaybeBodyElement();
1789
+ if (body) {
1790
+ const unsilence = this._driver
1791
+ .getPageCommunicator()
1792
+ .silenceGmailErrorsForAMoment();
1793
+ try {
1794
+ simulateKey(body, 190, 0);
1795
+ } finally {
1796
+ unsilence();
1797
+ }
1287
1798
  }
1288
- }
1289
- });
1799
+ });
1290
1800
  }
1291
1801
  }
1292
1802
 
1293
1803
  // If this compose is a reply, then this gets the message ID of the message
1294
1804
  // we're replying to.
1295
- _getTargetMessageID() {
1296
- const input = this._element.querySelector('input[name="rm"]');
1297
- return input && typeof input.value === 'string' && input.value != 'undefined' ? input.value.replace('#', '') : null;
1805
+ _getTargetMessageID(): ?string {
1806
+ const input: ?HTMLInputElement = (this._element.querySelector(
1807
+ 'input[name="rm"]'
1808
+ ): any);
1809
+ return input &&
1810
+ typeof input.value === 'string' &&
1811
+ input.value != 'undefined'
1812
+ ? input.value.replace('#', '')
1813
+ : null;
1298
1814
  }
1299
- _getThreadID() {
1815
+
1816
+ _getThreadID(): ?string {
1300
1817
  const targetID = this.getTargetMessageID();
1301
1818
  try {
1302
1819
  return targetID ? this._driver.getThreadIDForMessageID(targetID) : null;
@@ -1305,76 +1822,117 @@ class GmailComposeView {
1305
1822
  return null;
1306
1823
  }
1307
1824
  }
1308
- getElement() {
1825
+
1826
+ getElement(): HTMLElement {
1309
1827
  return this._element;
1310
1828
  }
1311
- isFullscreen() {
1829
+
1830
+ isFullscreen(): boolean {
1312
1831
  return this._isFullscreen;
1313
1832
  }
1314
- getLastSelectionRange() {
1833
+
1834
+ getLastSelectionRange(): ?Range {
1315
1835
  // The selection range can become invalid if the compose view has become expanded or
1316
1836
  // minimized since the range was set.
1317
1837
  const range = this._lastSelectionRange;
1318
- if (range && !this.getBodyElement().contains(range.commonAncestorContainer)) {
1838
+ if (
1839
+ range &&
1840
+ !this.getBodyElement().contains(range.commonAncestorContainer)
1841
+ ) {
1319
1842
  this._lastSelectionRange = undefined;
1320
1843
  }
1321
1844
  return this._lastSelectionRange;
1322
1845
  }
1323
- setLastSelectionRange(lastSelectionRange) {
1846
+
1847
+ setLastSelectionRange(lastSelectionRange: ?Range) {
1324
1848
  this._lastSelectionRange = lastSelectionRange;
1325
1849
  }
1326
- registerRequestModifier(modifier) {
1327
- const keyId = this._driver.isUsingSyncAPI() ? this._getDraftIDfromForm() : this.getComposeID();
1850
+
1851
+ registerRequestModifier(
1852
+ modifier: (composeParams: { body: string }) =>
1853
+ | { body: string }
1854
+ | Promise<{ body: string }>
1855
+ ) {
1856
+ const keyId = this._driver.isUsingSyncAPI()
1857
+ ? this._getDraftIDfromForm()
1858
+ : this.getComposeID();
1859
+
1328
1860
  if (!keyId) throw new Error('keyId should be set here');
1329
- const modifierId = this._driver.getPageCommunicator().registerComposeRequestModifier(keyId, this._driver.getAppId());
1861
+
1862
+ const modifierId = this._driver
1863
+ .getPageCommunicator()
1864
+ .registerComposeRequestModifier(keyId, this._driver.getAppId());
1330
1865
  this._requestModifiers[modifierId] = modifier;
1331
1866
  this._startListeningForModificationRequests();
1332
1867
  this._stopper.onValue(() => {
1333
- this._driver.getPageCommunicator().unregisterComposeRequestModifier(keyId, modifierId);
1868
+ this._driver
1869
+ .getPageCommunicator()
1870
+ .unregisterComposeRequestModifier(keyId, modifierId);
1334
1871
  });
1335
1872
  }
1873
+
1336
1874
  _startListeningForModificationRequests() {
1337
1875
  if (this._isListeningToAjaxInterceptStream) {
1338
1876
  return;
1339
1877
  }
1340
- const keyId = this._driver.isUsingSyncAPI() ? this._getDraftIDfromForm() : this.getComposeID();
1878
+
1879
+ const keyId = this._driver.isUsingSyncAPI()
1880
+ ? this._getDraftIDfromForm()
1881
+ : this.getComposeID();
1882
+
1341
1883
  if (!keyId) throw new Error('keyId should be set here');
1342
- this._driver.getPageCommunicator().ajaxInterceptStream.filter(_ref9 => {
1343
- let {
1344
- type,
1345
- composeid,
1346
- draftID,
1347
- modifierId
1348
- } = _ref9;
1349
- return type === 'inboxSDKmodifyComposeRequest' && (composeid === keyId || keyId === draftID) && Boolean(this._requestModifiers[modifierId]);
1350
- }).takeUntilBy(this._stopper).onValue(_ref10 => {
1351
- let {
1352
- modifierId,
1353
- composeParams
1354
- } = _ref10;
1355
- if (this._driver.getLogger().shouldTrackEverything()) {
1356
- this._driver.getLogger().eventSite('inboxSDKmodifyComposeRequest');
1357
- }
1358
- const modifier = this._requestModifiers[modifierId];
1359
- const result = new Promise(resolve => resolve(modifier(composeParams)));
1360
- result.then(newComposeParams => this._driver.getPageCommunicator().modifyComposeRequest(keyId, modifierId, newComposeParams || composeParams)).then(x => {
1884
+
1885
+ this._driver
1886
+ .getPageCommunicator()
1887
+ .ajaxInterceptStream.filter(
1888
+ ({ type, composeid, draftID, modifierId }) =>
1889
+ type === 'inboxSDKmodifyComposeRequest' &&
1890
+ (composeid === keyId || keyId === draftID) &&
1891
+ Boolean(this._requestModifiers[modifierId])
1892
+ )
1893
+ .takeUntilBy(this._stopper)
1894
+ .onValue(({ modifierId, composeParams }) => {
1361
1895
  if (this._driver.getLogger().shouldTrackEverything()) {
1362
- this._driver.getLogger().eventSite('composeRequestModified');
1896
+ this._driver.getLogger().eventSite('inboxSDKmodifyComposeRequest');
1363
1897
  }
1364
- return x;
1365
- }).catch(err => {
1366
- this._driver.getPageCommunicator().modifyComposeRequest(keyId, modifierId, composeParams);
1367
- this._driver.getLogger().error(err);
1898
+
1899
+ const modifier = this._requestModifiers[modifierId];
1900
+ const result = new Promise((resolve) =>
1901
+ resolve(modifier(composeParams))
1902
+ );
1903
+
1904
+ result
1905
+ .then((newComposeParams) =>
1906
+ this._driver
1907
+ .getPageCommunicator()
1908
+ .modifyComposeRequest(
1909
+ keyId,
1910
+ modifierId,
1911
+ newComposeParams || composeParams
1912
+ )
1913
+ )
1914
+ .then((x) => {
1915
+ if (this._driver.getLogger().shouldTrackEverything()) {
1916
+ this._driver.getLogger().eventSite('composeRequestModified');
1917
+ }
1918
+ return x;
1919
+ })
1920
+ .catch((err) => {
1921
+ this._driver
1922
+ .getPageCommunicator()
1923
+ .modifyComposeRequest(keyId, modifierId, composeParams);
1924
+ this._driver.getLogger().error(err);
1925
+ });
1368
1926
  });
1369
- });
1927
+
1370
1928
  this._isListeningToAjaxInterceptStream = true;
1371
1929
  }
1372
- setupLinkPopOvers() {
1930
+
1931
+ setupLinkPopOvers(): void {
1373
1932
  if (!this._hasSetupLinkPopOvers) {
1374
1933
  this._hasSetupLinkPopOvers = true;
1375
- this._eventStream.plug((0, _setupLinkPopovers.default)(this));
1934
+ this._eventStream.plug(setupLinkPopOvers(this));
1376
1935
  }
1377
1936
  }
1378
1937
  }
1379
- var _default = ud.defn(module, GmailComposeView);
1380
- exports.default = _default;
1938
+ export default ud.defn(module, GmailComposeView);